Documentation Source Text

Hex Artifact Content
Login

Artifact f7667b359966a8a57760e41f7e582527a179ebcc:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f  .    {comment co
03d0: 6d 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c  mment}.    {EXPL
03e0: 41 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20  AIN explain}.   
03f0: 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70   {expression exp
0400: 72 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54  r}.    {{BEGIN T
0410: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
0420: 73 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43  saction}.    {{C
0430: 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f  OMMIT TRANSACTIO
0440: 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43  N} transaction C
0450: 4f 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44  OMMIT}.    {{END
0460: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
0470: 61 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54  ansaction COMMIT
0480: 7d 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b  }.    {{ROLLBACK
0490: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
04a0: 61 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41  ansaction ROLLBA
04b0: 43 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49  CK}.    {SAVEPOI
04c0: 4e 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20  NT savepoint}.  
04d0: 20 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45    {{RELEASE SAVE
04e0: 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74  POINT} savepoint
04f0: 20 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20   SAVEPOINT}.    
0500: 7b 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68  {PRAGMA pragma.h
0510: 74 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f  tml}.    {{ON CO
0520: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
0530: 6f 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43  onflict}.    {{C
0540: 52 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61  REATE VIEW} crea
0550: 74 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52  teview}.    {{DR
0560: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
0570: 77 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20  w}.    {{CREATE 
0580: 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74  TRIGGER} createt
0590: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52  rigger}.    {{DR
05a0: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
05b0: 74 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41  trigger}.    {{A
05c0: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  TTACH DATABASE} 
05d0: 61 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45  attach}.    {{DE
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
05f0: 65 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45  etach}.      {RE
0600: 49 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20  INDEX reindex}. 
0610: 20 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45     {{ALTER TABLE
0620: 7d 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20  } altertable}.  
0630: 20 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61    {{ANALYZE} ana
0640: 6c 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45  lyze}.    {{INDE
0650: 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62  XED BY} indexedb
0660: 79 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61  y}.    {{aggrega
0670: 74 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67  te functions} ag
0680: 67 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20  gfunc aggfunc}. 
0690: 20 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69     {{core functi
06a0: 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f  ons} corefunc co
06b0: 72 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61  refunc}.    {{da
06c0: 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
06d0: 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20  tions} datefunc 
06e0: 64 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b  datefunc}.    {k
06f0: 65 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73  eywords keywords
0700: 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d   {SQL keywords}}
0710: 0a 20 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f  .  }.  set lang_
0720: 73 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65  section_break [e
0730: 78 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24  xpr {([llength $
0740: 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73  lang_section_lis
0750: 74 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65  t]+2)/3}].  fore
0760: 61 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c  ach {section} [l
0770: 73 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64  sort -index 0 -d
0780: 69 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f  ictionary $lang_
0790: 73 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a  section_list] {.
07a0: 20 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74    foreach {s_tit
07b0: 6c 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24  le s_tag s_kw} $
07c0: 73 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20  section {}.  if 
07d0: 7b 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a  {$s_kw == ""} {.
07e0: 20 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f      set s_kw $s_
07f0: 74 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b  title.  }.  if {
0800: 24 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e  $s_tag=="pragma.
0810: 68 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74  html"} {.    set
0820: 20 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20   url $s_tag.  } 
0830: 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75  else {.    set u
0840: 72 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68  rl lang_$s_tag.h
0850: 74 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73  tml.  }.  hd_res
0860: 6f 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b  olve "<li>\[$s_k
0870: 77 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69  w|$s_title\]</li
0880: 3e 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66  >".  incr i.  if
0890: 20 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74   {$i==$lang_sect
08a0: 69 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d  ion_break || $i=
08b0: 3d 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e  =2*$lang_section
08c0: 5f 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64  _break} {.    hd
08d0: 5f 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64  _puts "</ul></td
08e0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  ><td valign=\"to
08f0: 70 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a  p\"><ul>".  }.}.
0900: 3c 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64  </tcl>.</ul></td
0910: 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a  ></tr></table>..
0920: 3c 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73  <p>^The routines
0930: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0940: 65 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65  e_v2()], [sqlite
0950: 33 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73  3_prepare()],.[s
0960: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
0970: 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72  ()], [sqlite3_pr
0980: 65 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a  epare16_v2()], .
0990: 5b 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d  [sqlite3_exec()]
09a0: 2c 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67  , and [sqlite3_g
09b0: 65 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65  et_table()] acce
09c0: 70 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  pt.an SQL statem
09d0: 65 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74  ent list (sql-st
09e0: 6d 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69  mt-list) which i
09f0: 73 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65  s a semicolon-se
0a00: 70 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20  parated.list of 
0a10: 73 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a  statements.</p>.
0a20: 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
0a30: 72 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73  ram sql-stmt-lis
0a40: 74 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68  t</tcl>..<p>Each
0a50: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69   SQL statement i
0a60: 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  n the statement 
0a70: 6c 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61  list is an insta
0a80: 6e 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f  nce of the.follo
0a90: 77 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  wing:</p>..<tcl>
0aa0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71  BubbleDiagram sq
0ab0: 6c 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74  l-stmt</tcl>..<t
0ac0: 63 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f  cl>.proc Operato
0ad0: 72 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74  r {name} {.  ret
0ae0: 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72  urn "<font color
0af0: 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69  =\"#2c2cf0\"><bi
0b00: 67 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66  g>$name</big></f
0b10: 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e  ont>".}.proc Non
0b20: 74 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20  terminal {name} 
0b30: 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c  {.  return "<i><
0b40: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66  font color=\"#ff
0b50: 33 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f  3434\">$name</fo
0b60: 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20  nt></i>".}.proc 
0b70: 4b 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b  Keyword {name} {
0b80: 0a 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74  .  return "<font
0b90: 20 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30   color=\"#2c2cf0
0ba0: 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22  \">$name</font>"
0bb0: 0a 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20  .}.proc Example 
0bc0: 7b 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75  {text} {.  hd_pu
0bd0: 74 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  ts "<blockquote>
0be0: 3c 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e  <pre>$text</pre>
0bf0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d  </blockquote>".}
0c00: 0a 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b  ..proc Section {
0c10: 6e 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f  name label keywo
0c20: 72 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20  rds} {.  global 
0c30: 44 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d  DOC.  hd_close_m
0c40: 61 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61  ain.  hd_open_ma
0c50: 69 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68  in lang_$label.h
0c60: 74 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20  tml.  hd_header 
0c70: 22 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61  "SQLite Query La
0c80: 6e 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24  nguage: $name" $
0c90: 44 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69  DOC/pages/lang.i
0ca0: 6e 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77  n.  eval hd_keyw
0cb0: 6f 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20  ords $keywords. 
0cc0: 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b   if {[lsearch $k
0cd0: 65 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d  eywords $name] =
0ce0: 3d 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68  = -1 && [lsearch
0cf0: 20 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d   $keywords *$nam
0d00: 65 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20  e] == -1} {.    
0d10: 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73  eval hd_keywords
0d20: 20 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20   { $name }.  }. 
0d30: 20 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c   hd_puts {<h1 al
0d40: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c  ign="center">SQL
0d50: 20 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42   As Understood B
0d60: 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20  y SQLite</h1>}. 
0d70: 20 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20   hd_puts {<p><a 
0d80: 68 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22  href="lang.html"
0d90: 3e 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a  >[Top]</a></p>}.
0da0: 20 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24    hd_puts "<h2>$
0db0: 6e 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23  name</h2>".}..##
0dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
0e10: 63 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42  ction {ALTER TAB
0e20: 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b  LE} altertable {
0e30: 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a  {ALTER TABLE} {*
0e40: 41 4c 54 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44  ALTER}}..BubbleD
0e50: 69 61 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62  iagram alter-tab
0e60: 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  le-stmt 1.</tcl>
0e70: 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70  ..<p>SQLite supp
0e80: 6f 72 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73  orts a limited s
0e90: 75 62 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54  ubset of ALTER T
0ea0: 41 42 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20  ABLE..The ALTER 
0eb0: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  TABLE command in
0ec0: 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74   SQLite allows t
0ed0: 68 65 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d  he user to renam
0ee0: 65 20 61 20 74 61 62 6c 65 0a 6f 72 20 74 6f 20  e a table.or to 
0ef0: 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
0f00: 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20   to an existing 
0f10: 74 61 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74  table. It is not
0f20: 20 70 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6e   possible.to ren
0f30: 61 6d 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 72 65  ame a column, re
0f40: 6d 6f 76 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 6f  move a column, o
0f50: 72 20 61 64 64 20 6f 72 20 72 65 6d 6f 76 65 20  r add or remove 
0f60: 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 72 6f 6d  constraints from
0f70: 20 61 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a   a table..</p>..
0f80: 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e 41 4d 45  <p> ^(The RENAME
0f90: 20 54 4f 20 73 79 6e 74 61 78 20 69 73 20 75 73   TO syntax is us
0fa0: 65 64 20 74 6f 20 72 65 6e 61 6d 65 20 74 68 65  ed to rename the
0fb0: 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65   table identifie
0fc0: 64 20 62 79 20 0a 3c 69 3e 26 23 39 31 3b 64 61  d by .<i>&#91;da
0fd0: 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26 23 39 33  tabase-name.&#93
0fe0: 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20  ;table-name</i> 
0ff0: 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62 6c 65 2d  to <i>new-table-
1000: 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54 68 69 73  name</i>.)^.This
1010: 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e 6f 74   command .cannot
1020: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 6f 76 65   be used to move
1030: 20 61 20 74 61 62 6c 65 20 62 65 74 77 65 65 6e   a table between
1040: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1050: 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65 6e  ses, only to ren
1060: 61 6d 65 20 0a 61 20 74 61 62 6c 65 20 77 69 74  ame .a table wit
1070: 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  hin the same dat
1080: 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  abase.</p>..<p> 
1090: 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20 62 65  ^If the table be
10a0: 69 6e 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20  ing renamed has 
10b0: 74 72 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69  triggers or indi
10c0: 63 65 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20  ces, then these 
10d0: 72 65 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20  remain.attached 
10e0: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 66 74  to the table aft
10f0: 65 72 20 69 74 20 68 61 73 20 62 65 65 6e 20 72  er it has been r
1100: 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77 65 76 65  enamed.  ^Howeve
1110: 72 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 0a  r, if there are.
1120: 61 6e 79 20 76 69 65 77 20 64 65 66 69 6e 69 74  any view definit
1130: 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74 65 6d 65  ions, or stateme
1140: 6e 74 73 20 65 78 65 63 75 74 65 64 20 62 79 20  nts executed by 
1150: 74 72 69 67 67 65 72 73 20 74 68 61 74 20 72 65  triggers that re
1160: 66 65 72 20 74 6f 0a 74 68 65 20 74 61 62 6c 65  fer to.the table
1170: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 2c 20   being renamed, 
1180: 74 68 65 73 65 20 61 72 65 20 6e 6f 74 20 61 75  these are not au
1190: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d 6f 64 69  tomatically modi
11a0: 66 69 65 64 20 74 6f 20 75 73 65 20 74 68 65 20  fied to use the 
11b0: 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20  new.table name. 
11c0: 49 66 20 74 68 69 73 20 69 73 20 72 65 71 75 69  If this is requi
11d0: 72 65 64 2c 20 74 68 65 20 74 72 69 67 67 65 72  red, the trigger
11e0: 73 20 6f 72 20 76 69 65 77 20 64 65 66 69 6e 69  s or view defini
11f0: 74 69 6f 6e 73 20 6d 75 73 74 20 62 65 0a 64 72  tions must be.dr
1200: 6f 70 70 65 64 20 61 6e 64 20 72 65 63 72 65 61  opped and recrea
1210: 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e  ted to use the n
1220: 65 77 20 74 61 62 6c 65 20 6e 61 6d 65 20 62 79  ew table name by
1230: 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   hand..</p>..<p>
1240: 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  ^If [foreign key
1250: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72   constraints] ar
1260: 65 20 0a 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73  e .[foreign_keys
1270: 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65   pragma | enable
1280: 64 5d 20 77 68 65 6e 20 61 20 74 61 62 6c 65 20  d] when a table 
1290: 69 73 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 6e  is renamed, then
12a0: 20 61 6e 79 0a 5b 66 6f 72 65 69 67 6e 2d 6b 65   any.[foreign-ke
12b0: 79 2d 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52  y-clause | REFER
12c0: 45 4e 43 45 53 20 63 6c 61 75 73 65 73 5d 20 69  ENCES clauses] i
12d0: 6e 20 61 6e 79 20 74 61 62 6c 65 20 28 65 69 74  n any table (eit
12e0: 68 65 72 20 74 68 65 0a 74 61 62 6c 65 20 62 65  her the.table be
12f0: 69 6e 67 20 72 65 6e 61 6d 65 64 20 6f 72 20 73  ing renamed or s
1300: 6f 6d 65 20 6f 74 68 65 72 20 74 61 62 6c 65 29  ome other table)
1310: 0a 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74  .that refer to t
1320: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he table being r
1330: 65 6e 61 6d 65 64 20 61 72 65 20 6d 6f 64 69 66  enamed are modif
1340: 69 65 64 20 74 6f 20 72 65 66 65 72 20 0a 74 6f  ied to refer .to
1350: 20 74 68 65 20 72 65 6e 61 6d 65 64 20 74 61 62   the renamed tab
1360: 6c 65 20 62 79 20 69 74 73 20 6e 65 77 20 6e 61  le by its new na
1370: 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 44  me...<p> ^The AD
1380: 44 20 43 4f 4c 55 4d 4e 20 73 79 6e 74 61 78 0a  D COLUMN syntax.
1390: 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 61  is used to add a
13a0: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61   new column to a
13b0: 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65  n existing table
13c0: 2e 0a 5e 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  ..^The new colum
13d0: 6e 20 69 73 20 61 6c 77 61 79 73 20 61 70 70 65  n is always appe
13e0: 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20  nded to the end 
13f0: 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65  of the list of e
1400: 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e  xisting columns.
1410: 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66  .The [column-def
1420: 5d 20 72 75 6c 65 20 64 65 66 69 6e 65 73 20 74  ] rule defines t
1430: 68 65 20 63 68 61 72 61 63 74 65 72 69 73 74 69  he characteristi
1440: 63 73 20 6f 66 20 74 68 65 20 6e 65 77 20 63 6f  cs of the new co
1450: 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20 6e 65 77 20  lumn..^(The new 
1460: 63 6f 6c 75 6d 6e 20 6d 61 79 20 74 61 6b 65 20  column may take 
1470: 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 72 6d 73  any of the forms
1480: 20 70 65 72 6d 69 73 73 69 62 6c 65 20 69 6e 20   permissible in 
1490: 61 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  a [CREATE TABLE]
14a0: 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77 69 74 68  .statement, with
14b0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
14c0: 65 73 74 72 69 63 74 69 6f 6e 73 3a 29 5e 0a 3c  estrictions:)^.<
14d0: 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c  ul>.<li>^The col
14e0: 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65  umn may not have
14f0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f   a PRIMARY KEY o
1500: 72 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  r UNIQUE constra
1510: 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54  int.</li>.<li>^T
1520: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  he column may no
1530: 74 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74  t have a default
1540: 20 76 61 6c 75 65 20 6f 66 20 43 55 52 52 45 4e   value of CURREN
1550: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
1560: 44 41 54 45 2c 20 0a 20 20 20 20 43 55 52 52 45  DATE, .    CURRE
1570: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 6f 72  NT_TIMESTAMP, or
1580: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
1590: 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e 3c 2f  n parentheses.</
15a0: 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20 61 20 4e 4f  li>.<li>^If a NO
15b0: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
15c0: 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
15d0: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
15e0: 6d 75 73 74 20 68 61 76 65 20 61 0a 20 20 20 20  must have a.    
15f0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 74  default value ot
1600: 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c  her than NULL..<
1610: 6c 69 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  li>^If [foreign 
1620: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
1630: 20 61 72 65 20 5b 66 6f 72 65 69 67 6e 5f 6b 65   are [foreign_ke
1640: 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62  ys pragma | enab
1650: 6c 65 64 5d 20 61 6e 64 0a 20 20 20 20 61 20 63  led] and.    a c
1660: 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 5b 66 6f  olumn with a [fo
1670: 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65  reign-key-clause
1680: 20 7c 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c   | REFERENCES cl
1690: 61 75 73 65 5d 0a 20 20 20 20 69 73 20 61 64 64  ause].    is add
16a0: 65 64 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  ed, the column m
16b0: 75 73 74 20 68 61 76 65 20 61 20 64 65 66 61 75  ust have a defau
16c0: 6c 74 20 76 61 6c 75 65 20 6f 66 20 4e 55 4c 4c  lt value of NULL
16d0: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74  ..</ul>..<p>^Not
16e0: 65 20 61 6c 73 6f 20 74 68 61 74 20 77 68 65 6e  e also that when
16f0: 20 61 64 64 69 6e 67 20 61 20 5b 43 48 45 43 4b   adding a [CHECK
1700: 20 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68   constraint], th
1710: 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  e CHECK constrai
1720: 6e 74 0a 69 73 20 6e 6f 74 20 74 65 73 74 65 64  nt.is not tested
1730: 20 61 67 61 69 6e 73 74 20 70 72 65 65 78 69 73   against preexis
1740: 74 69 6e 67 20 72 6f 77 73 20 6f 66 20 74 68 65  ting rows of the
1750: 20 74 61 62 6c 65 2e 0a 5e 54 68 69 73 20 63 61   table..^This ca
1760: 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20 74 61  n result in a ta
1770: 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
1780: 73 20 64 61 74 61 20 74 68 61 74 0a 69 73 20 69  s data that.is i
1790: 6e 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 66 20 74  n violation of t
17a0: 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  he CHECK constra
17b0: 69 6e 74 2e 20 20 46 75 74 75 72 65 20 76 65 72  int.  Future ver
17c0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
17d0: 6d 69 67 68 74 0a 63 68 61 6e 67 65 20 74 6f 20  might.change to 
17e0: 76 61 6c 69 64 61 74 65 20 43 48 45 43 4b 20 63  validate CHECK c
17f0: 6f 6e 73 74 72 61 69 6e 74 73 20 61 73 20 74 68  onstraints as th
1800: 65 79 20 61 72 65 20 61 64 64 65 64 2e 3c 2f 70  ey are added.</p
1810: 3e 0a 0a 3c 70 3e 20 54 68 65 20 65 78 65 63 75  >..<p> The execu
1820: 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20 74 68 65  tion time of the
1830: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d   ALTER TABLE com
1840: 6d 61 6e 64 20 69 73 20 69 6e 64 65 70 65 6e 64  mand is independ
1850: 65 6e 74 20 6f 66 0a 74 68 65 20 61 6d 6f 75 6e  ent of.the amoun
1860: 74 20 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65  t of data in the
1870: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 41 4c 54   table.  The ALT
1880: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
1890: 20 72 75 6e 73 20 61 73 20 71 75 69 63 6b 6c 79   runs as quickly
18a0: 0a 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68  .on a table with
18b0: 20 31 30 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73   10 million rows
18c0: 20 61 73 20 69 74 20 64 6f 65 73 20 6f 6e 20 61   as it does on a
18d0: 20 74 61 62 6c 65 20 77 69 74 68 20 31 20 72 6f   table with 1 ro
18e0: 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65  w..</p>..<p>Afte
18f0: 72 20 41 44 44 20 43 4f 4c 55 4d 4e 20 68 61 73  r ADD COLUMN has
1900: 20 62 65 65 6e 20 72 75 6e 20 6f 6e 20 61 20 64   been run on a d
1910: 61 74 61 62 61 73 65 2c 20 74 68 61 74 20 64 61  atabase, that da
1920: 74 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 0a  tabase will not.
1930: 62 65 20 72 65 61 64 61 62 6c 65 20 62 79 20 53  be readable by S
1940: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
1950: 31 2e 33 20 61 6e 64 20 65 61 72 6c 69 65 72 2e  1.3 and earlier.
1960: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
19c0: 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61  on {ANALYZE} ana
19d0: 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a 0a 42 75  lyze ANALYZE..Bu
19e0: 62 62 6c 65 44 69 61 67 72 61 6d 20 61 6e 61 6c  bbleDiagram anal
19f0: 79 7a 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  yze-stmt 1.</tcl
1a00: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 4e 41 4c  >..<p> ^The ANAL
1a10: 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67 61 74 68  YZE command gath
1a20: 65 72 73 20 73 74 61 74 69 73 74 69 63 73 20 61  ers statistics a
1a30: 62 6f 75 74 20 74 61 62 6c 65 73 20 61 6e 64 0a  bout tables and.
1a40: 69 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f 72  indices and stor
1a50: 65 73 20 74 68 65 20 63 6f 6c 6c 65 63 74 65 64  es the collected
1a60: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20   information.in 
1a70: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 73  a special tables
1a80: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1a90: 20 77 68 65 72 65 20 74 68 65 20 71 75 65 72 79   where the query
1aa0: 20 6f 70 74 69 6d 69 7a 65 72 20 63 61 6e 20 75   optimizer can u
1ab0: 73 65 0a 74 68 65 6d 20 74 6f 20 68 65 6c 70 20  se.them to help 
1ac0: 6d 61 6b 65 20 62 65 74 74 65 72 20 71 75 65 72  make better quer
1ad0: 79 20 70 6c 61 6e 6e 69 6e 67 20 63 68 6f 69 63  y planning choic
1ae0: 65 73 2e 0a 5e 49 66 20 6e 6f 20 61 72 67 75 6d  es..^If no argum
1af0: 65 6e 74 73 20 61 72 65 20 67 69 76 65 6e 2c 20  ents are given, 
1b00: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
1b10: 61 62 61 73 65 73 20 61 72 65 0a 61 6e 61 6c 79  abases are.analy
1b20: 7a 65 64 2e 20 20 5e 49 66 20 61 20 64 61 74 61  zed.  ^If a data
1b30: 62 61 73 65 20 6e 61 6d 65 20 69 73 20 67 69 76  base name is giv
1b40: 65 6e 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  en as the argume
1b50: 6e 74 2c 20 74 68 65 6e 20 61 6c 6c 20 74 61 62  nt, then all tab
1b60: 6c 65 73 0a 61 6e 64 20 69 6e 64 69 63 65 73 20  les.and indices 
1b70: 69 6e 20 74 68 61 74 20 6f 6e 65 20 64 61 74 61  in that one data
1b80: 62 61 73 65 20 61 72 65 20 61 6e 61 6c 79 7a 65  base are analyze
1b90: 64 2e 20 20 0a 5e 49 66 20 74 68 65 20 61 72 67  d.  .^If the arg
1ba0: 75 6d 65 6e 74 20 69 73 20 61 20 74 61 62 6c 65  ument is a table
1bb0: 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79   name, then only
1bc0: 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 20   that table and 
1bd0: 74 68 65 0a 69 6e 64 69 63 65 73 20 61 73 73 6f  the.indices asso
1be0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74  ciated with that
1bf0: 20 74 61 62 6c 65 20 61 72 65 20 61 6e 61 6c 79   table are analy
1c00: 7a 65 64 2e 20 20 5e 49 66 20 74 68 65 20 61 72  zed.  ^If the ar
1c10: 67 75 6d 65 6e 74 0a 69 73 20 61 6e 20 69 6e 64  gument.is an ind
1c20: 65 78 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e  ex name, then on
1c30: 6c 79 20 74 68 61 74 20 6f 6e 65 20 69 6e 64 65  ly that one inde
1c40: 78 20 69 73 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f  x is analyzed.</
1c50: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 64 65 66  p>..<p> ^The def
1c60: 61 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ault implementat
1c70: 69 6f 6e 20 73 74 6f 72 65 73 20 61 6c 6c 20 73  ion stores all s
1c80: 74 61 74 69 73 74 69 63 73 20 69 6e 20 61 20 73  tatistics in a s
1c90: 69 6e 67 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65  ingle.table name
1ca0: 64 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74  d <b>sqlite_stat
1cb0: 31 3c 2f 62 3e 2e 20 20 5e 49 66 20 53 51 4c 69  1</b>.  ^If SQLi
1cc0: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
1cd0: 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f  ith the.[SQLITE_
1ce0: 45 4e 41 42 4c 45 5f 53 54 41 54 32 5d 20 6f 70  ENABLE_STAT2] op
1cf0: 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74  tion, then addit
1d00: 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20  ional histogram 
1d10: 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65  data is.collecte
1d20: 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20  d and stored in 
1d30: 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 32 3c  <b>sqlite_stat2<
1d40: 2f 62 3e 2e 0a 46 75 74 75 72 65 20 65 6e 68 61  /b>..Future enha
1d50: 6e 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72 65  ncements may cre
1d60: 61 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20 74  ate.additional t
1d70: 61 62 6c 65 73 20 77 69 74 68 20 74 68 65 20 73  ables with the s
1d80: 61 6d 65 20 6e 61 6d 65 20 70 61 74 74 65 72 6e  ame name pattern
1d90: 20 65 78 63 65 70 74 20 77 69 74 68 20 74 68 65   except with the
1da0: 20 22 31 22 0a 6f 72 20 22 32 22 20 63 68 61 6e   "1".or "2" chan
1db0: 67 65 64 20 74 6f 20 61 20 64 69 66 66 65 72 65  ged to a differe
1dc0: 6e 74 20 64 69 67 69 74 2e 3c 2f 70 3e 0a 0a 3c  nt digit.</p>..<
1dd0: 70 3e 20 5e 54 68 65 20 5b 44 52 4f 50 20 54 41  p> ^The [DROP TA
1de0: 42 4c 45 5d 20 61 6e 64 20 5b 41 4c 54 45 52 20  BLE] and [ALTER 
1df0: 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 73 20  TABLE] commands 
1e00: 64 6f 0a 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 74  do.not work on t
1e10: 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61  he <b>sqlite_sta
1e20: 74 31 3c 2f 62 3e 20 6f 72 20 3c 62 3e 73 71 6c  t1</b> or <b>sql
1e30: 69 74 65 5f 73 74 61 74 32 3c 2f 62 3e 20 74 61  ite_stat2</b> ta
1e40: 62 6c 65 73 2c 0a 62 75 74 20 61 6c 6c 20 74 68  bles,.but all th
1e50: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 6f  e content of tho
1e60: 73 65 20 74 61 62 6c 65 73 20 63 61 6e 20 62 65  se tables can be
1e70: 20 71 75 65 72 69 65 64 20 75 73 69 6e 67 20 5b   queried using [
1e80: 53 45 4c 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20  SELECT].and can 
1e90: 62 65 20 64 65 6c 65 74 65 64 2c 20 61 75 67 6d  be deleted, augm
1ea0: 65 6e 74 65 64 2c 20 6f 72 20 6d 6f 64 69 66 69  ented, or modifi
1eb0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 45  ed using the [DE
1ec0: 4c 45 54 45 5d 2c 0a 5b 49 4e 53 45 52 54 5d 2c  LETE],.[INSERT],
1ed0: 20 61 6e 64 20 5b 55 50 44 41 54 45 5d 20 63 6f   and [UPDATE] co
1ee0: 6d 6d 61 6e 64 73 2e 0a 41 70 70 72 6f 70 72 69  mmands..Appropri
1ef0: 61 74 65 20 63 61 72 65 20 73 68 6f 75 6c 64 20  ate care should 
1f00: 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 68 61  be used when cha
1f10: 6e 67 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nging the conten
1f20: 74 20 6f 66 20 74 68 65 20 73 74 61 74 69 73 74  t of the statist
1f30: 69 63 73 0a 74 61 62 6c 65 73 20 61 73 20 69 6e  ics.tables as in
1f40: 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 63 61  valid content ca
1f50: 6e 20 63 61 75 73 65 20 53 51 4c 69 74 65 20 74  n cause SQLite t
1f60: 6f 20 73 65 6c 65 63 74 20 69 6e 65 66 66 69 63  o select ineffic
1f70: 69 65 6e 74 0a 71 75 65 72 79 20 70 6c 61 6e 73  ient.query plans
1f80: 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65  .  Generally spe
1f90: 61 6b 69 6e 67 2c 20 6f 6e 65 20 73 68 6f 75 6c  aking, one shoul
1fa0: 64 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74 68 65  d not modify the
1fb0: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 74 68 65 20   content of.the 
1fc0: 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65  statistics table
1fd0: 73 20 62 79 20 61 6e 79 20 6d 65 63 68 61 6e 69  s by any mechani
1fe0: 73 6d 20 6f 74 68 65 72 20 74 68 61 6e 20 69 6e  sm other than in
1ff0: 76 6f 6b 69 6e 67 20 74 68 65 0a 41 4e 41 4c 59  voking the.ANALY
2000: 5a 45 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  ZE command.</p>.
2010: 0a 3c 70 3e 20 5e 53 74 61 74 69 73 74 69 63 73  .<p> ^Statistics
2020: 20 67 61 74 68 65 72 65 64 20 62 79 20 41 4e 41   gathered by ANA
2030: 4c 59 5a 45 20 61 72 65 20 3c 75 3e 6e 6f 74 3c  LYZE are <u>not<
2040: 2f 75 3e 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  /u> automaticall
2050: 79 20 75 70 64 61 74 65 64 20 61 73 0a 74 68 65  y updated as.the
2060: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
2070: 64 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73  database changes
2080: 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e  .  If the conten
2090: 74 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  t of the databas
20a0: 65 0a 63 68 61 6e 67 65 73 20 73 69 67 6e 69 66  e.changes signif
20b0: 69 63 61 6e 74 6c 79 2c 20 6f 72 20 69 66 20 74  icantly, or if t
20c0: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
20d0: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 6e  ma changes, then
20e0: 20 6f 6e 65 20 73 68 6f 75 6c 64 0a 63 6f 6e 73   one should.cons
20f0: 69 64 65 72 20 72 65 72 75 6e 6e 69 6e 67 20 74  ider rerunning t
2100: 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61  he ANALYZE comma
2110: 6e 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75  nd in order to u
2120: 70 64 61 74 65 20 74 68 65 20 73 74 61 74 69 73  pdate the statis
2130: 74 69 63 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54  tics.</p>..<p> T
2140: 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
2150: 20 6d 69 67 68 74 20 6e 6f 74 20 6e 6f 74 69 63   might not notic
2160: 65 20 6d 61 6e 75 61 6c 20 63 68 61 6e 67 65 73  e manual changes
2170: 20 74 6f 20 74 68 65 0a 3c 62 3e 73 71 6c 69 74   to the.<b>sqlit
2180: 65 5f 73 74 61 74 31 3c 2f 62 3e 20 61 6e 64 2f  e_stat1</b> and/
2190: 6f 72 20 3c 62 3e 73 71 6c 69 74 65 33 5f 73 74  or <b>sqlite3_st
21a0: 61 74 32 3c 2f 62 3e 20 74 61 62 6c 65 73 2e 20  at2</b> tables. 
21b0: 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e   ^An application
21c0: 0a 63 61 6e 20 66 6f 72 63 65 20 74 68 65 20 71  .can force the q
21d0: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20  uery planner to 
21e0: 72 65 72 65 61 64 20 74 68 65 20 73 74 61 74 69  reread the stati
21f0: 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79 20  stics tables by 
2200: 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c 59  running.<b>ANALY
2210: 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ZE sqlite_master
2220: 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 74 63 6c  </b>. </p>..<tcl
2230: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
2240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2280: 0a 53 65 63 74 69 6f 6e 20 7b 41 54 54 41 43 48  .Section {ATTACH
2290: 20 44 41 54 41 42 41 53 45 7d 20 61 74 74 61 63   DATABASE} attac
22a0: 68 20 2a 41 54 54 41 43 48 0a 0a 42 75 62 62 6c  h *ATTACH..Bubbl
22b0: 65 44 69 61 67 72 61 6d 20 61 74 74 61 63 68 2d  eDiagram attach-
22c0: 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
22d0: 70 3e 20 5e 54 68 65 20 41 54 54 41 43 48 20 44  p> ^The ATTACH D
22e0: 41 54 41 42 41 53 45 20 73 74 61 74 65 6d 65 6e  ATABASE statemen
22f0: 74 20 61 64 64 73 20 61 6e 6f 74 68 65 72 20 64  t adds another d
2300: 61 74 61 62 61 73 65 20 0a 66 69 6c 65 20 74 6f  atabase .file to
2310: 20 74 68 65 20 63 75 72 72 65 6e 74 20 5b 64 61   the current [da
2320: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
2330: 6e 5d 2e 20 0a 5e 54 68 65 20 66 69 6c 65 6e 61  n]. .^The filena
2340: 6d 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  me for the datab
2350: 61 73 65 20 74 6f 20 62 65 20 61 74 74 61 63 68  ase to be attach
2360: 65 64 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ed is the value 
2370: 6f 66 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f  of.the expressio
2380: 6e 20 74 68 61 74 20 6f 63 63 75 72 73 20 62 65  n that occurs be
2390: 66 6f 72 65 20 74 68 65 20 41 53 20 6b 65 79 77  fore the AS keyw
23a0: 6f 72 64 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61  ord..^The filena
23b0: 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  me of the databa
23c0: 73 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73  se follows the s
23d0: 61 6d 65 20 73 65 6d 61 6e 74 69 63 73 20 61 73  ame semantics as
23e0: 20 74 68 65 0a 66 69 6c 65 6e 61 6d 65 20 61 72   the.filename ar
23f0: 67 75 6d 65 6e 74 20 74 6f 20 5b 73 71 6c 69 74  gument to [sqlit
2400: 65 33 5f 6f 70 65 6e 28 29 5d 20 61 6e 64 20 5b  e3_open()] and [
2410: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28  sqlite3_open_v2(
2420: 29 5d 3b 20 74 68 65 0a 73 70 65 63 69 61 6c 20  )]; the.special 
2430: 6e 61 6d 65 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d  name "[:memory:]
2440: 22 20 72 65 73 75 6c 74 73 20 69 6e 20 61 6e 20  " results in an 
2450: 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61  in-memory databa
2460: 73 65 20 61 6e 64 20 61 6e 0a 65 6d 70 74 79 20  se and an.empty 
2470: 73 74 72 69 6e 67 20 72 65 73 75 6c 74 73 20 69  string results i
2480: 6e 20 61 20 6e 65 77 20 74 65 6d 70 6f 72 61 72  n a new temporar
2490: 79 20 64 61 74 61 62 61 73 65 2e 0a 5e 54 68 65  y database..^The
24a0: 20 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65   filename argume
24b0: 6e 74 20 63 61 6e 20 62 65 20 61 20 5b 55 52 49  nt can be a [URI
24c0: 20 66 69 6c 65 6e 61 6d 65 5d 20 69 66 20 55 52   filename] if UR
24d0: 49 20 66 69 6c 65 6e 61 6d 65 20 70 72 6f 63 65  I filename proce
24e0: 73 73 69 6e 67 0a 69 73 20 65 6e 61 62 6c 65 20  ssing.is enable 
24f0: 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
2500: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 54 68 65 20  connection..The 
2510: 6e 61 6d 65 20 74 68 61 74 20 6f 63 63 75 72 73  name that occurs
2520: 20 61 66 74 65 72 20 74 68 65 20 41 53 20 6b 65   after the AS ke
2530: 79 77 6f 72 64 20 69 73 20 74 68 65 20 6e 61 6d  yword is the nam
2540: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
2550: 65 0a 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  e.used internall
2560: 79 20 62 79 20 53 51 4c 69 74 65 2e 0a 5e 54 68  y by SQLite..^Th
2570: 65 20 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 73  e database-names
2580: 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a 27 74 65   'main' and .'te
2590: 6d 70 27 20 72 65 66 65 72 20 74 6f 20 74 68 65  mp' refer to the
25a0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 61   main database a
25b0: 6e 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  nd the database 
25c0: 75 73 65 64 20 66 6f 72 20 0a 74 65 6d 70 6f 72  used for .tempor
25d0: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 5e 54 68  ary tables.  ^Th
25e0: 65 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20  e main and temp 
25f0: 64 61 74 61 62 61 73 65 73 20 63 61 6e 6e 6f 74  databases cannot
2600: 20 62 65 20 61 74 74 61 63 68 65 64 20 6f 72 0a   be attached or.
2610: 64 65 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c  detached.</p>..<
2620: 70 3e 20 5e 28 54 61 62 6c 65 73 20 69 6e 20 61  p> ^(Tables in a
2630: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
2640: 61 73 65 20 63 61 6e 20 62 65 20 72 65 66 65 72  ase can be refer
2650: 72 65 64 20 74 6f 20 75 73 69 6e 67 20 74 68 65  red to using the
2660: 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64 61 74 61   syntax .<i>data
2670: 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62 6c 65 2d  base-name.table-
2680: 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e 49 66  name</i>.)^  ^If
2690: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
26a0: 20 74 61 62 6c 65 20 69 73 20 75 6e 69 71 75 65   table is unique
26b0: 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61 74 74 61  .across all atta
26c0: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
26d0: 6e 64 20 74 68 65 20 6d 61 69 6e 20 61 6e 64 20  nd the main and 
26e0: 74 65 6d 70 20 64 61 74 61 62 61 73 65 73 2c 20  temp databases, 
26f0: 74 68 65 6e 20 74 68 65 0a 3c 69 3e 64 61 74 61  then the.<i>data
2700: 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72  base-name</i> pr
2710: 65 66 69 78 20 69 73 20 6e 6f 74 20 72 65 71 75  efix is not requ
2720: 69 72 65 64 2e 20 20 5e 49 66 20 74 77 6f 20 6f  ired.  ^If two o
2730: 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 69 6e  r more tables in
2740: 0a 64 69 66 66 65 72 65 6e 74 20 64 61 74 61 62  .different datab
2750: 61 73 65 73 20 68 61 76 65 20 74 68 65 20 73 61  ases have the sa
2760: 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20  me name and the 
2770: 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d  .<i>database-nam
2780: 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20  e</i> prefix is 
2790: 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61 20 74 61  not used on a ta
27a0: 62 6c 65 20 72 65 66 65 72 65 6e 63 65 2c 20 74  ble reference, t
27b0: 68 65 6e 20 74 68 65 0a 74 61 62 6c 65 20 63 68  hen the.table ch
27c0: 6f 73 65 6e 20 69 73 20 74 68 65 20 6f 6e 65 20  osen is the one 
27d0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
27e0: 74 68 61 74 20 77 61 73 20 6c 65 61 73 74 20 72  that was least r
27f0: 65 63 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64  ecently attached
2800: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e  .</p>..<p>.^Tran
2810: 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69  sactions involvi
2820: 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61 74 74 61  ng multiple atta
2830: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
2840: 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73 73 75 6d  re atomic,.assum
2850: 69 6e 67 20 74 68 61 74 20 74 68 65 20 6d 61 69  ing that the mai
2860: 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f  n database is no
2870: 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 61  t "[:memory:]" a
2880: 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72 6e 61 6c  nd the .[journal
2890: 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74 20 5b 57  _mode] is not [W
28a0: 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68 65 20 6d  AL].  ^(If the m
28b0: 61 69 6e 0a 64 61 74 61 62 61 73 65 20 69 73 20  ain.database is 
28c0: 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72 20 69 66  ":memory:" or if
28d0: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64   the journal_mod
28e0: 65 20 69 73 20 57 41 4c 2c 20 74 68 65 6e 20 0a  e is WAL, then .
28f0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e  transactions con
2900: 74 69 6e 75 65 20 74 6f 20 62 65 20 61 74 6f 6d  tinue to be atom
2910: 69 63 20 77 69 74 68 69 6e 20 65 61 63 68 20 69  ic within each i
2920: 6e 64 69 76 69 64 75 61 6c 0a 64 61 74 61 62 61  ndividual.databa
2930: 73 65 20 66 69 6c 65 2e 20 42 75 74 20 69 66 20  se file. But if 
2940: 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65  the host compute
2950: 72 20 63 72 61 73 68 65 73 20 69 6e 20 74 68 65  r crashes in the
2960: 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43 4f   middle.of a [CO
2970: 4d 4d 49 54 5d 20 77 68 65 72 65 20 74 77 6f 20  MMIT] where two 
2980: 6f 72 20 6d 6f 72 65 20 64 61 74 61 62 61 73 65  or more database
2990: 20 66 69 6c 65 73 20 61 72 65 20 75 70 64 61 74   files are updat
29a0: 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73  ed,.some of thos
29b0: 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20 67 65  e files might ge
29c0: 74 20 74 68 65 20 63 68 61 6e 67 65 73 20 77 68  t the changes wh
29d0: 65 72 65 20 6f 74 68 65 72 73 0a 6d 69 67 68 74  ere others.might
29e0: 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70   not.)^.</p>..<p
29f0: 3e 20 5e 54 68 65 72 65 20 69 73 20 61 20 6c 69  > ^There is a li
2a00: 6d 69 74 2c 20 73 65 74 20 75 73 69 6e 67 20 5b  mit, set using [
2a10: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d  sqlite3_limit()]
2a20: 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45 5f 4c 49   and .[SQLITE_LI
2a30: 4d 49 54 5f 41 54 54 41 43 48 45 44 5d 2c 20 74  MIT_ATTACHED], t
2a40: 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
2a50: 64 61 74 61 62 61 73 65 73 20 74 68 61 74 20 63  databases that c
2a60: 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61 6e 65 6f  an be.simultaneo
2a70: 75 73 6c 79 20 61 74 74 61 63 68 65 64 20 74 6f  usly attached to
2a80: 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61   a single databa
2a90: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f  se connection.</
2aa0: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
2ab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2af0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
2b00: 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43  n {BEGIN TRANSAC
2b10: 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f  TION} transactio
2b20: 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d 49 54  n {*BEGIN COMMIT
2b30: 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 42 75 62 62   ROLLBACK}..Bubb
2b40: 6c 65 44 69 61 67 72 61 6d 20 62 65 67 69 6e 2d  leDiagram begin-
2b50: 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72  stmt.BubbleDiagr
2b60: 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a 42  am commit-stmt.B
2b70: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c  ubbleDiagram rol
2b80: 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c  lback-stmt.</tcl
2b90: 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67  >..<p>.^No chang
2ba0: 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  es can be made t
2bb0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65  o the database e
2bc0: 78 63 65 70 74 20 77 69 74 68 69 6e 20 61 20 74  xcept within a t
2bd0: 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79  ransaction..^Any
2be0: 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63 68   command that ch
2bf0: 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 62 61  anges the databa
2c00: 73 65 20 28 62 61 73 69 63 61 6c 6c 79 2c 20 61  se (basically, a
2c10: 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f  ny SQL command.o
2c20: 74 68 65 72 20 74 68 61 6e 20 5b 53 45 4c 45 43  ther than [SELEC
2c30: 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  T]) will automat
2c40: 69 63 61 6c 6c 79 20 73 74 61 72 74 20 61 20 74  ically start a t
2c50: 72 61 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e  ransaction if.on
2c60: 65 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79  e is not already
2c70: 20 69 6e 20 65 66 66 65 63 74 2e 20 20 5e 41 75   in effect.  ^Au
2c80: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72  tomatically star
2c90: 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ted transactions
2ca0: 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 77  .are committed w
2cb0: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 71 75 65  hen the last que
2cc0: 72 79 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70  ry finishes..</p
2cd0: 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74  >..<p>.^Transact
2ce0: 69 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61 72  ions can be star
2cf0: 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69  ted manually usi
2d00: 6e 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d  ng the BEGIN.com
2d10: 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68 20 74 72  mand.  ^(Such tr
2d20: 61 6e 73 61 63 74 69 6f 6e 73 20 75 73 75 61 6c  ansactions usual
2d30: 6c 79 20 70 65 72 73 69 73 74 20 75 6e 74 69 6c  ly persist until
2d40: 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54   the next.COMMIT
2d50: 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d   or ROLLBACK com
2d60: 6d 61 6e 64 2e 20 20 42 75 74 20 61 20 74 72 61  mand.  But a tra
2d70: 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c  nsaction will al
2d80: 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20  so .ROLLBACK if 
2d90: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
2da0: 63 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e 20  closed or if an 
2db0: 65 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64  error occurs.and
2dc0: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
2dd0: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
2de0: 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73  n algorithm is s
2df0: 70 65 63 69 66 69 65 64 2e 29 5e 0a 53 65 65 20  pecified.)^.See 
2e00: 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  the documentatio
2e10: 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e  n on the [ON CON
2e20: 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f  FLICT].clause fo
2e30: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
2e40: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
2e50: 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66  he ROLLBACK.conf
2e60: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
2e70: 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a  algorithm..</p>.
2e80: 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41  .<p>.^END TRANSA
2e90: 43 54 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61  CTION is an alia
2ea0: 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f  s for COMMIT..</
2eb0: 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61  p>..<p> ^(Transa
2ec0: 63 74 69 6f 6e 73 20 63 72 65 61 74 65 64 20 75  ctions created u
2ed0: 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d  sing BEGIN...COM
2ee0: 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e  MIT do not nest.
2ef0: 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20 74  )^.^For nested t
2f00: 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73 65  ransactions, use
2f10: 20 74 68 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d   the [SAVEPOINT]
2f20: 20 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20 63   and [RELEASE] c
2f30: 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f  ommands..The "TO
2f40: 20 53 41 56 45 50 4f 49 4e 54 20 3c 69 3e 6e 61   SAVEPOINT <i>na
2f50: 6d 65 3c 2f 69 3e 22 20 63 6c 61 75 73 65 20 6f  me</i>" clause o
2f60: 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  f the ROLLBACK c
2f70: 6f 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a 69 6e 20  ommand shown.in 
2f80: 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67 72  the syntax diagr
2f90: 61 6d 20 61 62 6f 76 65 20 69 73 20 6f 6e 6c 79  am above is only
2fa0: 20 61 70 70 6c 69 63 61 62 6c 65 20 74 6f 20 5b   applicable to [
2fb0: 53 41 56 45 50 4f 49 4e 54 5d 0a 74 72 61 6e 73  SAVEPOINT].trans
2fc0: 61 63 74 69 6f 6e 73 2e 20 20 5e 41 6e 20 61 74  actions.  ^An at
2fd0: 74 65 6d 70 74 20 74 6f 20 69 6e 76 6f 6b 65 20  tempt to invoke 
2fe0: 74 68 65 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e  the BEGIN comman
2ff0: 64 20 77 69 74 68 69 6e 0a 61 20 74 72 61 6e 73  d within.a trans
3000: 61 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c  action will fail
3010: 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2c 20   with an error, 
3020: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
3030: 65 74 68 65 72 0a 74 68 65 20 74 72 61 6e 73 61  ether.the transa
3040: 63 74 69 6f 6e 20 77 61 73 20 73 74 61 72 74 65  ction was starte
3050: 64 20 62 79 20 5b 53 41 56 45 50 4f 49 4e 54 5d  d by [SAVEPOINT]
3060: 20 6f 72 20 61 20 70 72 69 6f 72 20 42 45 47 49   or a prior BEGI
3070: 4e 2e 0a 5e 54 68 65 20 43 4f 4d 4d 49 54 20 63  N..^The COMMIT c
3080: 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68 65 20 52  ommand and the R
3090: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
30a0: 77 69 74 68 6f 75 74 20 74 68 65 20 54 4f 20 63  without the TO c
30b0: 6c 61 75 73 65 0a 77 6f 72 6b 20 74 68 65 20 73  lause.work the s
30c0: 61 6d 65 20 6f 6e 20 5b 53 41 56 45 50 4f 49 4e  ame on [SAVEPOIN
30d0: 54 5d 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  T] transactions 
30e0: 61 73 20 74 68 65 79 20 64 6f 20 77 69 74 68 20  as they do with 
30f0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 73 74 61  transactions.sta
3100: 72 74 65 64 20 62 79 20 42 45 47 49 4e 2e 3c 2f  rted by BEGIN.</
3110: 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63  p>..<p>.^Transac
3120: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64 65 66  tions can be def
3130: 65 72 72 65 64 2c 20 69 6d 6d 65 64 69 61 74 65  erred, immediate
3140: 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65 2e 20  , or exclusive. 
3150: 20 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 74   .^The default t
3160: 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 68 61 76  ransaction behav
3170: 69 6f 72 20 69 73 20 64 65 66 65 72 72 65 64 2e  ior is deferred.
3180: 0a 5e 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73  .^Deferred means
3190: 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61   that no locks a
31a0: 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74  re acquired.on t
31b0: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69  he database unti
31c0: 6c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  l the database i
31d0: 73 20 66 69 72 73 74 20 61 63 63 65 73 73 65 64  s first accessed
31e0: 2e 20 20 5e 54 68 75 73 20 77 69 74 68 20 61 0a  .  ^Thus with a.
31f0: 64 65 66 65 72 72 65 64 20 74 72 61 6e 73 61 63  deferred transac
3200: 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20  tion, the BEGIN 
3210: 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66  statement itself
3220: 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f   does nothing to
3230: 20 74 68 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e   the.filesystem.
3240: 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74    ^Locks.are not
3250: 20 61 63 71 75 69 72 65 64 20 75 6e 74 69 6c 20   acquired until 
3260: 74 68 65 20 66 69 72 73 74 20 72 65 61 64 20 6f  the first read o
3270: 72 20 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f  r write operatio
3280: 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 72  n.  ^The first r
3290: 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67  ead.operation ag
32a0: 61 69 6e 73 74 20 61 20 64 61 74 61 62 61 73 65  ainst a database
32b0: 20 63 72 65 61 74 65 73 20 61 20 5b 53 48 41 52   creates a [SHAR
32c0: 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65  ED] lock and the
32d0: 20 66 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65   first.write ope
32e0: 72 61 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61  ration creates a
32f0: 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b   [RESERVED] lock
3300: 2e 20 20 20 5e 42 65 63 61 75 73 65 20 74 68 65  .   ^Because the
3310: 20 61 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a   acquisition of.
3320: 6c 6f 63 6b 73 20 69 73 20 64 65 66 65 72 72 65  locks is deferre
3330: 64 20 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65  d until they are
3340: 20 6e 65 65 64 65 64 2c 20 69 74 20 69 73 20 70   needed, it is p
3350: 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
3360: 74 68 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70  ther.thread or p
3370: 72 6f 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65  rocess could cre
3380: 61 74 65 20 61 20 73 65 70 61 72 61 74 65 20 74  ate a separate t
3390: 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77  ransaction and w
33a0: 72 69 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61  rite to.the data
33b0: 62 61 73 65 20 61 66 74 65 72 20 74 68 65 20 42  base after the B
33c0: 45 47 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72  EGIN on the curr
33d0: 65 6e 74 20 74 68 72 65 61 64 20 68 61 73 20 65  ent thread has e
33e0: 78 65 63 75 74 65 64 2e 0a 5e 49 66 20 74 68 65  xecuted..^If the
33f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
3400: 69 6d 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20  immediate, then 
3410: 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73  [RESERVED] locks
3420: 0a 61 72 65 20 61 63 71 75 69 72 65 64 20 6f 6e  .are acquired on
3430: 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 20 61   all databases a
3440: 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 42 45  s soon as the BE
3450: 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65  GIN command is.e
3460: 78 65 63 75 74 65 64 2c 20 77 69 74 68 6f 75 74  xecuted, without
3470: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74 68 65   waiting for the
3480: 0a 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 20  .database to be 
3490: 75 73 65 64 2e 20 20 5e 41 66 74 65 72 20 61 20  used.  ^After a 
34a0: 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c  BEGIN IMMEDIATE,
34b0: 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61   .no other [data
34c0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
34d0: 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f   will be able to
34e0: 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 64 61   write to the da
34f0: 74 61 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42  tabase or.do a B
3500: 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f  EGIN IMMEDIATE o
3510: 72 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56  r BEGIN EXCLUSIV
3520: 45 2e 20 20 5e 4f 74 68 65 72 20 70 72 6f 63 65  E.  ^Other proce
3530: 73 73 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75  sses can continu
3540: 65 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d 20 74  e.to read from t
3550: 68 65 20 64 61 74 61 62 61 73 65 2c 20 68 6f 77  he database, how
3560: 65 76 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75  ever.  ^An exclu
3570: 73 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  sive transaction
3580: 20 63 61 75 73 65 73 0a 5b 45 58 43 4c 55 53 49   causes.[EXCLUSI
3590: 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20  VE] locks to be 
35a0: 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20  acquired on all 
35b0: 64 61 74 61 62 61 73 65 73 2e 20 20 5e 41 66 74  databases.  ^Aft
35c0: 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55  er a BEGIN.EXCLU
35d0: 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b  SIVE, no other [
35e0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
35f0: 69 6f 6e 5d 20 65 78 63 65 70 74 20 66 6f 72 20  ion] except for 
3600: 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65  [read_uncommitte
3610: 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77  d].connections w
3620: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 72  ill be able to r
3630: 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ead the database
3640: 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f   and no other co
3650: 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 6f 75 74  nnection without
3660: 0a 65 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20  .exception will 
3670: 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65  be able to write
3680: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e   the database un
3690: 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74  til the transact
36a0: 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e  ion is.complete.
36b0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20  .</p>..<p>.^(An 
36c0: 69 6d 70 6c 69 63 69 74 20 74 72 61 6e 73 61 63  implicit transac
36d0: 74 69 6f 6e 20 28 61 20 74 72 61 6e 73 61 63 74  tion (a transact
36e0: 69 6f 6e 20 74 68 61 74 20 69 73 20 73 74 61 72  ion that is star
36f0: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
3700: 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61 63  y,.not a transac
3710: 74 69 6f 6e 20 73 74 61 72 74 65 64 20 62 79 20  tion started by 
3720: 42 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74  BEGIN) is commit
3730: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
3740: 79 20 77 68 65 6e 0a 74 68 65 20 6c 61 73 74 20  y when.the last 
3750: 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
3760: 20 66 69 6e 69 73 68 65 73 2e 20 20 41 20 73 74   finishes.  A st
3770: 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73  atement finishes
3780: 20 77 68 65 6e 20 69 74 73 0a 70 72 65 70 61 72   when its.prepar
3790: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
37a0: 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29  [sqlite3_reset()
37b0: 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71   | reset] or.[sq
37c0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
37d0: 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20   | finalized].  
37e0: 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33  An open [sqlite3
37f0: 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a  _blob] used for.
3800: 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42  incremental BLOB
3810: 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20 61   I/O counts as a
3820: 6e 20 75 6e 66 69 6e 69 73 68 65 64 20 73 74 61  n unfinished sta
3830: 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71  tement.  The [sq
3840: 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69  lite3_blob].fini
3850: 73 68 65 73 20 77 68 65 6e 20 69 74 20 69 73 20  shes when it is 
3860: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c  [sqlite3_blob_cl
3870: 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e  ose() | closed].
3880: 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68  )^.</p>..<p>.^Th
3890: 65 20 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49  e explicit COMMI
38a0: 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69  T command runs i
38b0: 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65 76 65 6e  mmediately, even
38c0: 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 70 65   if there are.pe
38d0: 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73  nding [SELECT] s
38e0: 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77  tatements.  ^How
38f0: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
3900: 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69 74 65  re pending.write
3910: 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74 68 65   operations, the
3920: 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a   COMMIT command.
3930: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
3940: 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c   error code [SQL
3950: 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a  ITE_BUSY]..</p>.
3960: 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70 74  .<p>.^An attempt
3970: 20 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d 4d   to execute COMM
3980: 49 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72 65  IT might also re
3990: 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c 49  sult in an [SQLI
39a0: 54 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e 20  TE_BUSY] return 
39b0: 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74 68  code.if an anoth
39c0: 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f  er thread or pro
39d0: 63 65 73 73 20 68 61 73 20 61 20 5b 73 68 61 72  cess has a [shar
39e0: 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20  ed lock] on the 
39f0: 64 61 74 61 62 61 73 65 0a 74 68 61 74 20 70 72  database.that pr
3a00: 65 76 65 6e 74 65 64 20 74 68 65 20 64 61 74 61  evented the data
3a10: 62 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67 20  base from being 
3a20: 75 70 64 61 74 65 64 2e 20 20 5e 57 68 65 6e 20  updated.  ^When 
3a30: 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e 20  COMMIT fails in 
3a40: 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74 72  this.way, the tr
3a50: 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e  ansaction remain
3a60: 73 20 61 63 74 69 76 65 20 61 6e 64 20 74 68 65  s active and the
3a70: 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20 72   COMMIT can be r
3a80: 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66 74  etried later.aft
3a90: 65 72 20 74 68 65 20 72 65 61 64 65 72 20 68 61  er the reader ha
3aa0: 73 20 68 61 64 20 61 20 63 68 61 6e 63 65 20 74  s had a chance t
3ab0: 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c  o clear..</p>..<
3ac0: 70 3e 0a 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b  p>.^The ROLLBACK
3ad0: 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
3ae0: 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53  an error code [S
3af0: 51 4c 49 54 45 5f 42 55 53 59 5d 20 69 66 20 74  QLITE_BUSY] if t
3b00: 68 65 72 65 0a 61 72 65 20 61 6e 79 20 70 65 6e  here.are any pen
3b10: 64 69 6e 67 20 71 75 65 72 69 65 73 2e 20 20 5e  ding queries.  ^
3b20: 42 6f 74 68 20 72 65 61 64 2d 6f 6e 6c 79 20 61  Both read-only a
3b30: 6e 64 20 72 65 61 64 2f 77 72 69 74 65 20 71 75  nd read/write qu
3b40: 65 72 69 65 73 20 77 69 6c 6c 0a 63 61 75 73 65  eries will.cause
3b50: 20 61 20 52 4f 4c 4c 42 41 43 4b 20 74 6f 20 66   a ROLLBACK to f
3b60: 61 69 6c 2e 20 20 41 20 52 4f 4c 4c 42 41 43 4b  ail.  A ROLLBACK
3b70: 20 6d 75 73 74 20 66 61 69 6c 20 69 66 20 74 68   must fail if th
3b80: 65 72 65 20 61 72 65 20 70 65 6e 64 69 6e 67 0a  ere are pending.
3b90: 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 20  read operations 
3ba0: 28 75 6e 6c 69 6b 65 20 43 4f 4d 4d 49 54 20 77  (unlike COMMIT w
3bb0: 68 69 63 68 20 63 61 6e 20 73 75 63 63 65 65 64  hich can succeed
3bc0: 29 20 62 65 63 61 75 73 65 20 62 61 64 20 74 68  ) because bad th
3bd0: 69 6e 67 73 0a 77 69 6c 6c 20 68 61 70 70 65 6e  ings.will happen
3be0: 20 69 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   if the in-memor
3bf0: 79 20 69 6d 61 67 65 20 6f 66 20 74 68 65 20 64  y image of the d
3c00: 61 74 61 62 61 73 65 20 69 73 20 63 68 61 6e 67  atabase is chang
3c10: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
3c20: 72 0a 61 6e 20 61 63 74 69 76 65 20 71 75 65 72  r.an active quer
3c30: 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20  y..</p>..<p>.If 
3c40: 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f  [PRAGMA journal_
3c50: 6d 6f 64 65 5d 20 69 73 20 73 65 74 20 74 6f 20  mode] is set to 
3c60: 4f 46 46 20 28 74 68 75 73 20 64 69 73 61 62 6c  OFF (thus disabl
3c70: 69 6e 67 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b  ing the rollback
3c80: 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c 65 29 20 74   journal.file) t
3c90: 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
3ca0: 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b   of the ROLLBACK
3cb0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65   command is unde
3cc0: 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  fined..</p>..<h3
3cd0: 3e 52 65 73 70 6f 6e 73 65 20 54 6f 20 45 72 72  >Response To Err
3ce0: 6f 72 73 20 57 69 74 68 69 6e 20 41 20 54 72 61  ors Within A Tra
3cf0: 6e 73 61 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c  nsaction</h3>..<
3d00: 70 3e 20 5e 28 49 66 20 63 65 72 74 61 69 6e 20  p> ^(If certain 
3d10: 6b 69 6e 64 73 20 6f 66 20 65 72 72 6f 72 73 20  kinds of errors 
3d20: 6f 63 63 75 72 20 77 69 74 68 69 6e 20 61 20 74  occur within a t
3d30: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 0a  ransaction, the.
3d40: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
3d50: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 6f  or may not be ro
3d60: 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61  lled back automa
3d70: 74 69 63 61 6c 6c 79 2e 20 20 54 68 65 0a 65 72  tically.  The.er
3d80: 72 6f 72 73 20 74 68 61 74 20 63 61 75 73 65 20  rors that cause 
3d90: 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 6e 63  the behavior inc
3da0: 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a  lude:</p>..<ul>.
3db0: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 46 55 4c  <li> [SQLITE_FUL
3dc0: 4c 5d 3a 20 64 61 74 61 62 61 73 65 20 6f 72 20  L]: database or 
3dd0: 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c 69 3e 20 5b  disk full.<li> [
3de0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 3a 20 64  SQLITE_IOERR]: d
3df0: 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 0a 3c 6c  isk I/O error.<l
3e00: 69 3e 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d  i> [SQLITE_BUSY]
3e10: 3a 20 64 61 74 61 62 61 73 65 20 69 6e 20 75 73  : database in us
3e20: 65 20 62 79 20 61 6e 6f 74 68 65 72 20 70 72 6f  e by another pro
3e30: 63 65 73 73 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54  cess.<li> [SQLIT
3e40: 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75 74 20 6f 72  E_NOMEM]: out or
3e50: 20 6d 65 6d 6f 72 79 0a 3c 6c 69 3e 20 5b 53 51   memory.<li> [SQ
3e60: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 5d 3a  LITE_INTERRUPT]:
3e70: 20 70 72 6f 63 65 73 73 69 6e 67 20 5b 73 71 6c   processing [sql
3e80: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 7c 69  ite3_interrupt|i
3e90: 6e 74 65 72 72 75 70 74 65 64 5d 0a 20 20 20 20  nterrupted].    
3ea0: 20 62 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   by application 
3eb0: 72 65 71 75 65 73 74 0a 3c 2f 75 6c 3e 29 5e 0a  request.</ul>)^.
3ec0: 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c 6c 20 6f 66  .<p>.^For all of
3ed0: 20 74 68 65 73 65 20 65 72 72 6f 72 73 2c 20 53   these errors, S
3ee0: 51 4c 69 74 65 20 61 74 74 65 6d 70 74 73 20 74  QLite attempts t
3ef0: 6f 20 75 6e 64 6f 20 6a 75 73 74 20 74 68 65 20  o undo just the 
3f00: 6f 6e 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 74  one statement.it
3f10: 20 77 61 73 20 77 6f 72 6b 69 6e 67 20 6f 6e 20   was working on 
3f20: 61 6e 64 20 6c 65 61 76 65 20 63 68 61 6e 67 65  and leave change
3f30: 73 20 66 72 6f 6d 20 70 72 69 6f 72 20 73 74 61  s from prior sta
3f40: 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
3f50: 68 65 0a 73 61 6d 65 20 74 72 61 6e 73 61 63 74  he.same transact
3f60: 69 6f 6e 20 69 6e 74 61 63 74 20 61 6e 64 20 63  ion intact and c
3f70: 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74 68 65  ontinue with the
3f80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e   transaction.  ^
3f90: 48 6f 77 65 76 65 72 2c 20 0a 64 65 70 65 6e 64  However, .depend
3fa0: 69 6e 67 20 6f 6e 20 74 68 65 20 73 74 61 74 65  ing on the state
3fb0: 6d 65 6e 74 20 62 65 69 6e 67 20 65 76 61 6c 75  ment being evalu
3fc0: 61 74 65 64 20 61 6e 64 20 74 68 65 20 70 6f 69  ated and the poi
3fd0: 6e 74 20 61 74 20 77 68 69 63 68 20 74 68 65 0a  nt at which the.
3fe0: 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 69 74  error occurs, it
3ff0: 20 6d 69 67 68 74 20 62 65 20 6e 65 63 65 73 73   might be necess
4000: 61 72 79 20 66 6f 72 20 53 51 4c 69 74 65 20 74  ary for SQLite t
4010: 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 0a 63  o rollback and.c
4020: 61 6e 63 65 6c 20 74 68 65 20 65 6e 74 69 72 65  ancel the entire
4030: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e   transaction.  ^
4040: 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63  An application c
4050: 61 6e 20 74 65 6c 6c 20 77 68 69 63 68 0a 63 6f  an tell which.co
4060: 75 72 73 65 20 6f 66 20 61 63 74 69 6f 6e 20 53  urse of action S
4070: 51 4c 69 74 65 20 74 6f 6f 6b 20 62 79 20 75 73  QLite took by us
4080: 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33  ing the.[sqlite3
4090: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28  _get_autocommit(
40a0: 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20 69 6e  )] C-language in
40b0: 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70  terface.</p>..<p
40c0: 3e 49 74 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64  >It is recommend
40d0: 65 64 20 74 68 61 74 20 61 70 70 6c 69 63 61 74  ed that applicat
40e0: 69 6f 6e 73 20 72 65 73 70 6f 6e 64 20 74 6f 20  ions respond to 
40f0: 74 68 65 20 65 72 72 6f 72 73 0a 6c 69 73 74 65  the errors.liste
4100: 64 20 61 62 6f 76 65 20 62 79 20 65 78 70 6c 69  d above by expli
4110: 63 69 74 6c 79 20 69 73 73 75 69 6e 67 20 61 20  citly issuing a 
4120: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
4130: 2e 20 20 5e 49 66 20 74 68 65 20 0a 74 72 61 6e  .  ^If the .tran
4140: 73 61 63 74 69 6f 6e 20 68 61 73 20 61 6c 72 65  saction has alre
4150: 61 64 79 20 62 65 65 6e 20 72 6f 6c 6c 65 64 20  ady been rolled 
4160: 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c  back automatical
4170: 6c 79 0a 62 79 20 74 68 65 20 65 72 72 6f 72 20  ly.by the error 
4180: 72 65 73 70 6f 6e 73 65 2c 20 74 68 65 6e 20 74  response, then t
4190: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
41a0: 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c 20 77 69  and will fail wi
41b0: 74 68 20 61 6e 0a 65 72 72 6f 72 2c 20 62 75 74  th an.error, but
41c0: 20 6e 6f 20 68 61 72 6d 20 69 73 20 63 61 75 73   no harm is caus
41d0: 65 64 20 62 79 20 74 68 69 73 2e 3c 2f 70 3e 0a  ed by this.</p>.
41e0: 0a 3c 70 3e 46 75 74 75 72 65 20 76 65 72 73 69  .<p>Future versi
41f0: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 61  ons of SQLite ma
4200: 79 20 65 78 74 65 6e 64 20 74 68 65 20 6c 69 73  y extend the lis
4210: 74 20 6f 66 20 65 72 72 6f 72 73 20 77 68 69 63  t of errors whic
4220: 68 0a 6d 69 67 68 74 20 63 61 75 73 65 20 61 75  h.might cause au
4230: 74 6f 6d 61 74 69 63 20 74 72 61 6e 73 61 63 74  tomatic transact
4240: 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 2e 20 20 46  ion rollback.  F
4250: 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f  uture versions o
4260: 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20 63  f.SQLite might c
4270: 68 61 6e 67 65 20 74 68 65 20 65 72 72 6f 72 20  hange the error 
4280: 72 65 73 70 6f 6e 73 65 2e 20 20 49 6e 20 70 61  response.  In pa
4290: 72 74 69 63 75 6c 61 72 2c 20 77 65 20 6d 61 79  rticular, we may
42a0: 0a 63 68 6f 6f 73 65 20 74 6f 20 73 69 6d 70 6c  .choose to simpl
42b0: 69 66 79 20 74 68 65 20 69 6e 74 65 72 66 61 63  ify the interfac
42c0: 65 20 69 6e 20 66 75 74 75 72 65 20 76 65 72 73  e in future vers
42d0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 62  ions of SQLite b
42e0: 79 0a 63 61 75 73 69 6e 67 20 74 68 65 20 65 72  y.causing the er
42f0: 72 6f 72 73 20 61 62 6f 76 65 20 74 6f 20 66 6f  rors above to fo
4300: 72 63 65 20 61 6e 20 75 6e 63 6f 6e 64 69 74 69  rce an unconditi
4310: 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63 6b 2e 3c 2f  onal rollback.</
4320: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
4330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4370: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
4380: 6e 20 7b 53 41 56 45 50 4f 49 4e 54 7d 20 73 61  n {SAVEPOINT} sa
4390: 76 65 70 6f 69 6e 74 20 7b 53 41 56 45 50 4f 49  vepoint {SAVEPOI
43a0: 4e 54 20 52 45 4c 45 41 53 45 7d 0a 0a 42 75 62  NT RELEASE}..Bub
43b0: 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65 70  bleDiagram savep
43c0: 6f 69 6e 74 2d 73 74 6d 74 0a 42 75 62 62 6c 65  oint-stmt.Bubble
43d0: 44 69 61 67 72 61 6d 20 72 65 6c 65 61 73 65 2d  Diagram release-
43e0: 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72  stmt.BubbleDiagr
43f0: 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74  am rollback-stmt
4400: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 53 41  .</tcl>..<p> ^SA
4410: 56 45 50 4f 49 4e 54 73 20 61 72 65 20 61 20 6d  VEPOINTs are a m
4420: 65 74 68 6f 64 20 6f 66 20 63 72 65 61 74 69 6e  ethod of creatin
4430: 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20  g transactions, 
4440: 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42 45 47 49  similar to.[BEGI
4450: 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49 54 5d 2c  N] and [COMMIT],
4460: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
4470: 20 53 41 56 45 50 4f 49 4e 54 20 61 6e 64 20 52   SAVEPOINT and R
4480: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 73 0a  ELEASE commands.
4490: 61 72 65 20 6e 61 6d 65 64 20 61 6e 64 20 6d 61  are named and ma
44a0: 79 20 62 65 20 6e 65 73 74 65 64 2e 3c 2f 70 3e  y be nested.</p>
44b0: 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41 56 45 50  ..<p> ^The SAVEP
44c0: 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 73 74 61  OINT command sta
44d0: 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61  rts a new transa
44e0: 63 74 69 6f 6e 20 77 69 74 68 20 61 20 6e 61 6d  ction with a nam
44f0: 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73 61 63 74  e..^The transact
4500: 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65 64 20 6e  ion names need n
4510: 6f 74 20 62 65 20 75 6e 69 71 75 65 2e 0a 5e 28  ot be unique..^(
4520: 41 20 53 41 56 45 50 4f 49 4e 54 20 63 61 6e 20  A SAVEPOINT can 
4530: 62 65 20 73 74 61 72 74 65 64 20 65 69 74 68 65  be started eithe
4540: 72 20 77 69 74 68 69 6e 20 6f 72 20 6f 75 74 73  r within or outs
4550: 69 64 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e 5d  ide of.a [BEGIN]
4560: 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e 20 20  ...[COMMIT].)^  
4570: 5e 28 57 68 65 6e 20 61 20 53 41 56 45 50 4f 49  ^(When a SAVEPOI
4580: 4e 54 20 69 73 20 74 68 65 20 6f 75 74 65 72 2d  NT is the outer-
4590: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 0a 61  most savepoint.a
45a0: 6e 64 20 69 74 20 69 73 20 6e 6f 74 20 77 69 74  nd it is not wit
45b0: 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e  hin a [BEGIN]...
45c0: 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e 20 74 68  [COMMIT] then th
45d0: 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 74 68  e behavior is th
45e0: 65 0a 73 61 6d 65 20 61 73 20 42 45 47 49 4e 20  e.same as BEGIN 
45f0: 44 45 46 45 52 52 45 44 20 54 52 41 4e 53 41 43  DEFERRED TRANSAC
4600: 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  TION.)^</p>..<p>
4610: 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  ^The ROLLBACK TO
4620: 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65 72 74 73   command reverts
4630: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
4640: 65 20 64 61 74 61 62 61 73 65 20 62 61 63 6b 20  e database back 
4650: 74 6f 20 77 68 61 74 0a 69 74 20 77 61 73 20 6a  to what.it was j
4660: 75 73 74 20 61 66 74 65 72 20 74 68 65 20 63 6f  ust after the co
4670: 72 72 65 73 70 6f 6e 64 69 6e 67 20 53 41 56 45  rresponding SAVE
4680: 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65 20 74 68  POINT.  ^Note th
4690: 61 74 20 75 6e 6c 69 6b 65 20 74 68 61 74 0a 70  at unlike that.p
46a0: 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20  lain [ROLLBACK] 
46b0: 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68 6f 75 74  command (without
46c0: 20 74 68 65 20 54 4f 20 6b 65 79 77 6f 72 64 29   the TO keyword)
46d0: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f   the ROLLBACK TO
46e0: 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20 6e 6f   command.does no
46f0: 74 20 63 61 6e 63 65 6c 20 74 68 65 20 74 72 61  t cancel the tra
4700: 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49 6e 73 74  nsaction.  ^Inst
4710: 65 61 64 20 6f 66 20 63 61 6e 63 65 6c 6c 69 6e  ead of cancellin
4720: 67 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  g the transactio
4730: 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  n,.the ROLLBACK 
4740: 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 73 74 61  TO command resta
4750: 72 74 73 20 74 68 65 20 74 72 61 6e 73 61 63 74  rts the transact
4760: 69 6f 6e 20 61 67 61 69 6e 20 61 74 20 74 68 65  ion again at the
4770: 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41 6c 6c   beginning..^All
4780: 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 53 41 56   intervening SAV
4790: 45 50 4f 49 4e 54 73 20 61 72 65 20 63 61 6e 63  EPOINTs are canc
47a0: 65 6c 65 64 2c 20 68 6f 77 65 76 65 72 2e 3c 2f  eled, however.</
47b0: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45  p>..<p>^The RELE
47c0: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6c  ASE command is l
47d0: 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 66  ike a [COMMIT] f
47e0: 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a  or a SAVEPOINT..
47f0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  ^The RELEASE com
4800: 6d 61 6e 64 20 63 61 75 73 65 73 20 61 6c 6c 20  mand causes all 
4810: 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 20  savepoints back 
4820: 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67  to and including
4830: 20 74 68 65 20 0a 6d 6f 73 74 20 72 65 63 65 6e   the .most recen
4840: 74 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68  t savepoint with
4850: 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65   a matching name
4860: 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 20 66   to be removed f
4870: 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e 73 61 63  rom the .transac
4880: 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20 5e 54 68  tion stack.  ^Th
4890: 65 20 52 45 4c 45 41 53 45 20 6f 66 20 61 6e 20  e RELEASE of an 
48a0: 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f  inner transactio
48b0: 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61 75 73 65  n.does not cause
48c0: 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20   any changes to 
48d0: 62 65 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68  be written to th
48e0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 3b  e database file;
48f0: 20 69 74 20 6d 65 72 65 6c 79 0a 72 65 6d 6f 76   it merely.remov
4900: 65 73 20 73 61 76 65 70 6f 69 6e 74 73 20 66 72  es savepoints fr
4910: 6f 6d 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  om the transacti
4920: 6f 6e 20 73 74 61 63 6b 20 73 75 63 68 20 74 68  on stack such th
4930: 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e 67  at it is.no long
4940: 65 72 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 52  er possible to R
4950: 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68 6f 73 65  OLLBACK TO those
4960: 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a 5e 49 66   savepoints..^If
4970: 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61   a RELEASE comma
4980: 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68 65 20  nd releases the 
4990: 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f  outermost savepo
49a0: 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20 74 68 65  int, so.that the
49b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
49c0: 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d 70 74 79  ck becomes empty
49d0: 2c 20 74 68 65 6e 20 52 45 4c 45 41 53 45 20 69  , then RELEASE i
49e0: 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20 5b 43  s the same.as [C
49f0: 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b 43 4f  OMMIT]..^The [CO
4a00: 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61  MMIT] command ma
4a10: 79 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 6c  y be used to rel
4a20: 65 61 73 65 20 61 6c 6c 20 73 61 76 65 70 6f 69  ease all savepoi
4a30: 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74  nts and.commit t
4a40: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65  he transaction e
4a50: 76 65 6e 20 69 66 20 74 68 65 20 74 72 61 6e 73  ven if the trans
4a60: 61 63 74 69 6f 6e 20 77 61 73 20 6f 72 69 67 69  action was origi
4a70: 6e 61 6c 6c 79 20 73 74 61 72 74 65 64 0a 62 79  nally started.by
4a80: 20 61 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d   a SAVEPOINT com
4a90: 6d 61 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20  mand instead of 
4aa0: 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e  a [BEGIN] comman
4ab0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74  d.</p>..<p>^If t
4ac0: 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d  he savepoint-nam
4ad0: 65 20 69 6e 20 61 20 52 45 4c 45 41 53 45 20 63  e in a RELEASE c
4ae0: 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20  ommand does not 
4af0: 6d 61 74 63 68 20 61 6e 79 0a 73 61 76 65 70 6f  match any.savepo
4b00: 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  int currently in
4b10: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4b20: 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 6e 6f 20   stack, then no 
4b30: 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 0a 72  savepoints are.r
4b40: 65 6c 65 61 73 65 64 2c 20 74 68 65 20 64 61 74  eleased, the dat
4b50: 61 62 61 73 65 20 69 73 20 75 6e 63 68 61 6e 67  abase is unchang
4b60: 65 64 2c 20 61 6e 64 20 74 68 65 20 52 45 4c 45  ed, and the RELE
4b70: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75  ASE command retu
4b80: 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f 70  rns.an error.</p
4b90: 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74  >..<p>^Note that
4ba0: 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61   an inner transa
4bb0: 63 74 69 6f 6e 20 6d 69 67 68 74 20 63 6f 6d 6d  ction might comm
4bc0: 69 74 20 28 75 73 69 6e 67 20 74 68 65 20 52 45  it (using the RE
4bd0: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 29 0a 62  LEASE command).b
4be0: 75 74 20 74 68 65 6e 20 6c 61 74 65 72 20 68 61  ut then later ha
4bf0: 76 65 20 69 74 73 20 77 6f 72 6b 20 75 6e 64 6f  ve its work undo
4c00: 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42 41 43 4b  ne by a ROLLBACK
4c10: 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61   in an outer tra
4c20: 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20 70 6f 77  nsaction..^A pow
4c30: 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 70 72  er failure or pr
4c40: 6f 67 72 61 6d 20 63 72 61 73 68 20 6f 72 20 4f  ogram crash or O
4c50: 53 20 63 72 61 73 68 20 77 69 6c 6c 20 63 61 75  S crash will cau
4c60: 73 65 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73  se the outer-mos
4c70: 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f  t.transaction to
4c80: 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f 69   rollback, undoi
4c90: 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74  ng all changes t
4ca0: 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65  hat have occurre
4cb0: 64 20 77 69 74 68 69 6e 0a 74 68 61 74 20 6f 75  d within.that ou
4cc0: 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ter transaction,
4cd0: 20 65 76 65 6e 20 63 68 61 6e 67 65 73 20 74 68   even changes th
4ce0: 61 74 20 68 61 76 65 20 73 75 70 70 6f 73 65 64  at have supposed
4cf0: 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d 69 74 74  ly been "committ
4d00: 65 64 22 0a 62 79 20 74 68 65 20 52 45 4c 45 41  ed".by the RELEA
4d10: 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 43 6f  SE command.  ^Co
4d20: 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 61 63 74  ntent is not act
4d30: 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74 65 64 20  ually committed 
4d40: 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a 75 6e 74  on the disk .unt
4d50: 69 6c 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  il the outermost
4d60: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d   transaction com
4d70: 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  mits.</p>..<p>Th
4d80: 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 20  ere are several 
4d90: 77 61 79 73 20 6f 66 20 74 68 69 6e 6b 69 6e 67  ways of thinking
4da0: 20 61 62 6f 75 74 20 74 68 65 20 52 45 4c 45 41   about the RELEA
4db0: 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a  SE command:</p>.
4dc0: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f  .<ul>.<li><p>.So
4dd0: 6d 65 20 70 65 6f 70 6c 65 20 76 69 65 77 20 52  me people view R
4de0: 45 4c 45 41 53 45 20 61 73 20 74 68 65 20 65 71  ELEASE as the eq
4df0: 75 69 76 61 6c 65 6e 74 20 6f 66 20 43 4f 4d 4d  uivalent of COMM
4e00: 49 54 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49  IT for a SAVEPOI
4e10: 4e 54 2e 0a 54 68 69 73 20 69 73 20 61 6e 20 61  NT..This is an a
4e20: 63 63 65 70 74 61 62 6c 65 20 70 6f 69 6e 74 20  cceptable point 
4e30: 6f 66 20 76 69 65 77 20 61 73 20 6c 6f 6e 67 20  of view as long 
4e40: 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62 65 72 73  as one remembers
4e50: 20 74 68 61 74 20 74 68 65 0a 63 68 61 6e 67 65   that the.change
4e60: 73 20 63 6f 6d 6d 69 74 74 65 64 20 62 79 20 61  s committed by a
4e70: 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74  n inner transact
4e80: 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74 65 72 20  ion might later 
4e90: 62 65 20 75 6e 64 6f 6e 65 20 62 79 20 61 0a 72  be undone by a.r
4ea0: 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e 20 6f 75  ollback in an ou
4eb0: 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ter transaction.
4ec0: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
4ed0: 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69 65 77 20  p>.Another view 
4ee0: 6f 66 20 52 45 4c 45 41 53 45 20 69 73 20 74 68  of RELEASE is th
4ef0: 61 74 20 69 74 20 6d 65 72 67 65 73 20 61 20 6e  at it merges a n
4f00: 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  amed transaction
4f10: 20 69 6e 74 6f 20 69 74 73 0a 70 61 72 65 6e 74   into its.parent
4f20: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 6f   transaction, so
4f30: 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20   that the named 
4f40: 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20  transaction and 
4f50: 69 74 73 20 70 61 72 65 6e 74 20 62 65 63 6f 6d  its parent becom
4f60: 65 0a 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73  e.the same trans
4f70: 61 63 74 69 6f 6e 2e 20 20 41 66 74 65 72 20 52  action.  After R
4f80: 45 4c 45 41 53 45 2c 20 74 68 65 20 6e 61 6d 65  ELEASE, the name
4f90: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  d transaction an
4fa0: 64 20 69 74 73 20 70 61 72 65 6e 74 0a 77 69 6c  d its parent.wil
4fb0: 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c  l commit or roll
4fc0: 62 61 63 6b 20 74 6f 67 65 74 68 65 72 2c 20 77  back together, w
4fd0: 68 61 74 65 76 65 72 20 74 68 65 69 72 20 66 61  hatever their fa
4fe0: 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e 3c  te may be..</p><
4ff0: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e  /li>..<li><p>.On
5000: 65 20 63 61 6e 20 61 6c 73 6f 20 74 68 69 6e 6b  e can also think
5010: 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 73 20 61   of savepoints a
5020: 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20 74 68 65  s."marks" in the
5030: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 69 6d   transaction tim
5040: 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68 69 73 20  eline.  In this 
5050: 76 69 65 77 2c 20 74 68 65 20 53 41 56 45 50 4f  view, the SAVEPO
5060: 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63 72 65 61  INT command.crea
5070: 74 65 73 20 61 20 6e 65 77 20 6d 61 72 6b 2c 20  tes a new mark, 
5080: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  the ROLLBACK TO 
5090: 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e 64 73 20  command rewinds 
50a0: 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 62 61 63  the timeline bac
50b0: 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20 6a 75 73  k.to a point jus
50c0: 74 20 61 66 74 65 72 20 74 68 65 20 6e 61 6d 65  t after the name
50d0: 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74 68 65 20  d mark, and the 
50e0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 0a  RELEASE command.
50f0: 65 72 61 73 65 73 20 6d 61 72 6b 73 20 66 72 6f  erases marks fro
5100: 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 77  m the timeline w
5110: 69 74 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20  ithout actually 
5120: 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68 61 6e 67  making any.chang
5130: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
5140: 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f  se..</p></li>.</
5150: 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e 73  ul>....<h3>Trans
5160: 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e 67 20 52  action Nesting R
5170: 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  ules</h3>..<p>^T
5180: 68 65 20 6c 61 73 74 20 74 72 61 6e 73 61 63 74  he last transact
5190: 69 6f 6e 20 73 74 61 72 74 65 64 20 77 69 6c 6c  ion started will
51a0: 20 62 65 20 74 68 65 20 66 69 72 73 74 0a 74 72   be the first.tr
51b0: 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74  ansaction commit
51c0: 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61  ted or rolled ba
51d0: 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ck.</p>..<p>^The
51e0: 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64   [BEGIN] command
51f0: 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 74   only works if t
5200: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
5210: 74 61 63 6b 20 69 73 20 65 6d 70 74 79 2c 20 6f  tack is empty, o
5220: 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  r.in other words
5230: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
5240: 20 70 65 6e 64 69 6e 67 20 74 72 61 6e 73 61 63   pending transac
5250: 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74 68 65 20  tions.  ^If the 
5260: 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73 74 61 63  transaction.stac
5270: 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 77  k is not empty w
5280: 68 65 6e 20 74 68 65 20 5b 42 45 47 49 4e 5d 20  hen the [BEGIN] 
5290: 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b  command is invok
52a0: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d  ed, then the com
52b0: 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69 74 68 20  mand.fails with 
52c0: 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c  an error.</p>..<
52d0: 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20  p>^The [COMMIT] 
52e0: 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74 73 20  command commits 
52f0: 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20  all outstanding 
5300: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64  transactions and
5310: 20 6c 65 61 76 65 73 0a 74 68 65 20 74 72 61 6e   leaves.the tran
5320: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d  saction stack em
5330: 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  pty.</p>..<p>^Th
5340: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
5350: 64 20 73 74 61 72 74 73 20 77 69 74 68 20 74 68  d starts with th
5360: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 64  e most recent ad
5370: 64 69 74 69 6f 6e 20 74 6f 20 74 68 65 0a 74 72  dition to the.tr
5380: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
5390: 61 6e 64 20 72 65 6c 65 61 73 65 73 20 73 61 76  and releases sav
53a0: 65 70 6f 69 6e 74 73 20 62 61 63 6b 77 61 72 64  epoints backward
53b0: 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e 74 69 6c  s .in time until
53c0: 20 69 74 20 72 65 6c 65 61 73 65 73 20 61 20 73   it releases a s
53d0: 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61 20  avepoint with a 
53e0: 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69  matching savepoi
53f0: 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f 72 20  nt-name..^Prior 
5400: 73 61 76 65 70 6f 69 6e 74 73 2c 20 65 76 65 6e  savepoints, even
5410: 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68   savepoints with
5420: 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f   matching savepo
5430: 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72 65 0a 75  int-names, are.u
5440: 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66 20 74 68  nchanged..^If th
5450: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
5460: 64 20 63 61 75 73 65 73 20 74 68 65 0a 74 72 61  d causes the.tra
5470: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 74  nsaction stack t
5480: 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74 79 20 28  o become empty (
5490: 69 66 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  if the RELEASE c
54a0: 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ommand releases 
54b0: 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74 20 74 72  the.outermost tr
54c0: 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f 6d 20 74  ansaction from t
54d0: 68 65 20 73 74 61 63 6b 29 20 74 68 65 6e 20 74  he stack) then t
54e0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63  he transaction c
54f0: 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ommits.</p>..<p>
5500: 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20  ^The [ROLLBACK] 
5510: 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20  command without 
5520: 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c  a TO clause roll
5530: 73 20 62 61 63 6b 73 20 61 6c 6c 20 74 72 61 6e  s backs all tran
5540: 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20 6c 65 61  sactions.and lea
5550: 76 65 73 20 74 68 65 20 74 72 61 6e 73 61 63 74  ves the transact
5560: 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79 2e  ion stack empty.
5570: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f  </p>..<p>^The RO
5580: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77  LLBACK command w
5590: 69 74 68 20 61 20 54 4f 20 63 6c 61 75 73 65 20  ith a TO clause 
55a0: 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72 61 6e 73  rolls back trans
55b0: 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67 0a 62 61  actions going.ba
55c0: 63 6b 77 61 72 64 73 20 69 6e 20 74 69 6d 65 20  ckwards in time 
55d0: 62 61 63 6b 20 74 6f 20 74 68 65 20 6d 6f 73 74  back to the most
55e0: 20 72 65 63 65 6e 74 20 53 41 56 45 50 4f 49 4e   recent SAVEPOIN
55f0: 54 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e  T with a matchin
5600: 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 53 41 56  g name..^The SAV
5610: 45 50 4f 49 4e 54 20 77 69 74 68 20 74 68 65 20  EPOINT with the 
5620: 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 72 65  matching name re
5630: 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20 74 72 61  mains on the tra
5640: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 0a  nsaction stack,.
5650: 62 75 74 20 61 6c 6c 20 64 61 74 61 62 61 73 65  but all database
5660: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 6f 63   changes that oc
5670: 63 75 72 72 65 64 20 61 66 74 65 72 20 74 68 61  curred after tha
5680: 74 20 53 41 56 45 50 4f 49 4e 54 20 77 61 73 20  t SAVEPOINT was 
5690: 63 72 65 61 74 65 64 0a 61 72 65 20 72 6f 6c 6c  created.are roll
56a0: 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68  ed back.  ^If th
56b0: 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65  e savepoint-name
56c0: 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54   in a ROLLBACK T
56d0: 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e  O command does n
56e0: 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20 53 41 56  ot.match any SAV
56f0: 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65 20 73 74  EPOINT on the st
5700: 61 63 6b 2c 20 74 68 65 6e 20 74 68 65 20 52 4f  ack, then the RO
5710: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 66  LLBACK command f
5720: 61 69 6c 73 20 77 69 74 68 20 61 6e 0a 65 72 72  ails with an.err
5730: 6f 72 20 61 6e 64 20 6c 65 61 76 65 73 20 74 68  or and leaves th
5740: 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64  e state of the d
5750: 61 74 61 62 61 73 65 20 75 6e 63 68 61 6e 67 65  atabase unchange
5760: 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  d.</p>..<tcl>.##
5770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
57c0: 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f  ction comment co
57d0: 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20 2a  mment {comment *
57e0: 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 42 75 62 62 6c  comments}..Bubbl
57f0: 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 65 6e 74  eDiagram comment
5800: 2d 73 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a  -syntax.</tcl>..
5810: 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65  <p>^Comments are
5820: 20 6e 6f 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64   not SQL command
5830: 73 2c 20 62 75 74 20 63 61 6e 20 6f 63 63 75 72  s, but can occur
5840: 20 77 69 74 68 69 6e 20 74 68 65 20 74 65 78 74   within the text
5850: 20 6f 66 0a 53 51 4c 20 71 75 65 72 69 65 73 20   of.SQL queries 
5860: 70 61 73 73 65 64 20 74 6f 20 5b 73 71 6c 69 74  passed to [sqlit
5870: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 5d  e3_prepare_v2()]
5880: 20 61 6e 64 20 72 65 6c 61 74 65 64 20 69 6e 74   and related int
5890: 65 72 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e  erfaces..^Commen
58a0: 74 73 20 61 72 65 20 74 72 65 61 74 65 64 20 61  ts are treated a
58b0: 73 20 77 68 69 74 65 73 70 61 63 65 20 62 79 20  s whitespace by 
58c0: 74 68 65 20 70 61 72 73 65 72 2e 0a 5e 43 6f 6d  the parser..^Com
58d0: 6d 65 6e 74 73 20 63 61 6e 20 62 65 67 69 6e 20  ments can begin 
58e0: 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70  anywhere whitesp
58f0: 61 63 65 20 0a 63 61 6e 20 62 65 20 66 6f 75 6e  ace .can be foun
5900: 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73  d, including ins
5910: 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ide expressions 
5920: 74 68 61 74 20 73 70 61 6e 20 6d 75 6c 74 69 70  that span multip
5930: 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a  le lines..</p>..
5940: 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e 74 73  <p>^SQL comments
5950: 20 62 65 67 69 6e 20 77 69 74 68 20 74 77 6f 20   begin with two 
5960: 63 6f 6e 73 65 63 75 74 69 76 65 20 22 2d 22 20  consecutive "-" 
5970: 63 68 61 72 61 63 74 65 72 73 20 28 41 53 43 49  characters (ASCI
5980: 49 20 30 78 32 64 29 0a 61 6e 64 20 65 78 74 65  I 0x2d).and exte
5990: 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63  nd up to and inc
59a0: 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20  luding the next 
59b0: 6e 65 77 6c 69 6e 65 20 63 68 61 72 61 63 74 65  newline characte
59c0: 72 20 28 41 53 43 49 49 20 30 78 30 61 29 0a 6f  r (ASCII 0x0a).o
59d0: 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20  r until the end 
59e0: 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65  of input, whiche
59f0: 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e  ver comes first.
5a00: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c  </p>..<p>^C-styl
5a10: 65 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e  e comments begin
5a20: 0a 77 69 74 68 20 22 2f 2a 22 20 61 6e 64 20 65  .with "/*" and e
5a30: 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20  xtend up to and 
5a40: 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65  including the ne
5a50: 78 74 20 22 2a 2f 22 20 63 68 61 72 61 63 74 65  xt "*/" characte
5a60: 72 20 70 61 69 72 0a 6f 72 20 75 6e 74 69 6c 20  r pair.or until 
5a70: 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
5a80: 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65  , whichever come
5a90: 73 20 66 69 72 73 74 2e 20 20 5e 43 2d 73 74 79  s first.  ^C-sty
5aa0: 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20  le comments.can 
5ab0: 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69  span multiple li
5ac0: 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43  nes. </p>..<p>^C
5ad0: 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 61 70 70 65  omments can appe
5ae0: 61 72 20 61 6e 79 77 68 65 72 65 20 77 68 69 74  ar anywhere whit
5af0: 65 73 70 61 63 65 20 63 61 6e 20 6f 63 63 75 72  espace can occur
5b00: 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69  ,.including insi
5b10: 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  de expressions a
5b20: 6e 64 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  nd in the middle
5b30: 20 6f 66 20 6f 74 68 65 72 20 53 51 4c 20 73 74   of other SQL st
5b40: 61 74 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65  atements..^Comme
5b50: 6e 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e  nts do not nest.
5b60: 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  .</p>...<tcl>.##
5b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5bb0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
5bc0: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e 44  tion {CREATE IND
5bd0: 45 58 7d 20 63 72 65 61 74 65 69 6e 64 65 78 20  EX} createindex 
5be0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 7d  {{CREATE INDEX}}
5bf0: 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
5c00: 63 72 65 61 74 65 2d 69 6e 64 65 78 2d 73 74 6d  create-index-stm
5c10: 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61  t 1.BubbleDiagra
5c20: 6d 20 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e  m indexed-column
5c30: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
5c40: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f   CREATE INDEX co
5c50: 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f  mmand consists o
5c60: 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22  f the keywords "
5c70: 43 52 45 41 54 45 20 49 4e 44 45 58 22 20 66 6f  CREATE INDEX" fo
5c80: 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 6e 61  llowed.by the na
5c90: 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20 69 6e  me of the new in
5ca0: 64 65 78 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  dex, the keyword
5cb0: 20 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65 20   "ON", the name 
5cc0: 6f 66 20 61 20 70 72 65 76 69 6f 75 73 6c 79 0a  of a previously.
5cd0: 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 74 68  created table th
5ce0: 61 74 20 69 73 20 74 6f 20 62 65 20 69 6e 64 65  at is to be inde
5cf0: 78 65 64 2c 20 61 6e 64 20 61 20 70 61 72 65 6e  xed, and a paren
5d00: 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66  thesized list of
5d10: 20 6e 61 6d 65 73 20 6f 66 0a 63 6f 6c 75 6d 6e   names of.column
5d20: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74  s in the table t
5d30: 68 61 74 20 61 72 65 20 75 73 65 64 20 66 6f 72  hat are used for
5d40: 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 3c   the index key.<
5d50: 2f 70 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 63 6f  /p>..<p>^Each co
5d60: 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65  lumn name can be
5d70: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65   followed by one
5d80: 20 6f 66 20 74 68 65 20 22 41 53 43 22 20 6f 72   of the "ASC" or
5d90: 20 22 44 45 53 43 22 20 6b 65 79 77 6f 72 64 73   "DESC" keywords
5da0: 0a 74 6f 20 69 6e 64 69 63 61 74 65 20 73 6f 72  .to indicate sor
5db0: 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 73  t order.  ^The s
5dc0: 6f 72 74 20 6f 72 64 65 72 20 6d 61 79 20 6f 72  ort order may or
5dd0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 69 67 6e 6f   may not be igno
5de0: 72 65 64 20 64 65 70 65 6e 64 69 6e 67 0a 6f 6e  red depending.on
5df0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
5e00: 6c 65 20 66 6f 72 6d 61 74 2e 20 20 5e 54 68 65  le format.  ^The
5e10: 20 22 6c 65 67 61 63 79 22 20 66 69 6c 65 20 66   "legacy" file f
5e20: 6f 72 6d 61 74 20 69 67 6e 6f 72 65 73 20 69 6e  ormat ignores in
5e30: 64 65 78 0a 73 6f 72 74 20 6f 72 64 65 72 2e 20  dex.sort order. 
5e40: 20 5e 54 68 65 20 64 65 73 63 65 6e 64 69 6e 67   ^The descending
5e50: 20 69 6e 64 65 78 20 66 69 6c 65 20 66 6f 72 6d   index file form
5e60: 61 74 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73  at takes index s
5e70: 6f 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61  ort order.into a
5e80: 63 63 6f 75 6e 74 2e 20 20 5e 28 4f 6e 6c 79 20  ccount.  ^(Only 
5e90: 63 6f 70 69 65 73 20 6f 66 20 53 51 4c 69 74 65  copies of SQLite
5ea0: 20 6e 65 77 65 72 20 74 68 61 6e 20 5b 76 65 72   newer than [ver
5eb0: 73 69 6f 6e 20 33 2e 33 2e 30 5d 20 0a 28 72 65  sion 3.3.0] .(re
5ec0: 6c 65 61 73 65 64 20 6f 6e 20 32 30 30 36 2d 30  leased on 2006-0
5ed0: 31 2d 31 30 29 20 61 72 65 20 61 62 6c 65 20 74  1-10) are able t
5ee0: 6f 20 75 6e 64 65 72 73 74 61 6e 64 20 74 68 65  o understand the
5ef0: 20 6e 65 77 65 72 20 64 65 73 63 65 6e 64 69 6e   newer descendin
5f00: 67 0a 69 6e 64 65 78 20 66 69 6c 65 20 66 6f 72  g.index file for
5f10: 6d 61 74 20 61 6e 64 20 73 6f 20 66 6f 72 20 63  mat and so for c
5f20: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74  ompatibility wit
5f30: 68 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  h older versions
5f40: 20 6f 66 0a 53 51 4c 69 74 65 2c 20 74 68 65 20   of.SQLite, the 
5f50: 6c 65 67 61 63 79 20 66 69 6c 65 20 66 6f 72 6d  legacy file form
5f60: 61 74 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  at is generated 
5f70: 62 79 20 64 65 66 61 75 6c 74 2e 29 5e 20 20 5e  by default.)^  ^
5f80: 55 73 65 20 74 68 65 0a 5b 6c 65 67 61 63 79 5f  Use the.[legacy_
5f90: 66 69 6c 65 5f 66 6f 72 6d 61 74 5d 20 70 72 61  file_format] pra
5fa0: 67 6d 61 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  gma to modify th
5fb0: 69 73 20 62 65 68 61 76 69 6f 72 20 61 6e 64 20  is behavior and 
5fc0: 67 65 6e 65 72 61 74 65 0a 64 61 74 61 62 61 73  generate.databas
5fd0: 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65 20  es that use the 
5fe0: 6e 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d 61  newer file forma
5ff0: 74 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69  t.  Future versi
6000: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 6d 61  ons of SQLite.ma
6010: 79 20 62 65 67 69 6e 20 74 6f 20 67 65 6e 65 72  y begin to gener
6020: 61 74 65 20 74 68 65 20 6e 65 77 65 72 20 66 69  ate the newer fi
6030: 6c 65 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66  le format by def
6040: 61 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ault.</p>..<p>^T
6050: 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73  he COLLATE claus
6060: 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c  e optionally fol
6070: 6c 6f 77 69 6e 67 20 65 61 63 68 20 63 6f 6c 75  lowing each colu
6080: 6d 6e 20 6e 61 6d 65 20 64 65 66 69 6e 65 73 20  mn name defines 
6090: 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a.collating sequ
60a0: 65 6e 63 65 20 75 73 65 64 20 66 6f 72 20 74 65  ence used for te
60b0: 78 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  xt entries in th
60c0: 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54 68 65 20  at column..^The 
60d0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
60e0: 67 0a 73 65 71 75 65 6e 63 65 20 69 73 20 74 68  g.sequence is th
60f0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
6100: 65 6e 63 65 20 64 65 66 69 6e 65 64 20 66 6f 72  ence defined for
6110: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 6e 20   that column in 
6120: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
6130: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e  E] statement.  ^
6140: 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c 61 74 69  Or if no collati
6150: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 6f  ng sequence is o
6160: 74 68 65 72 77 69 73 65 20 64 65 66 69 6e 65 64  therwise defined
6170: 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 42  ,.the built-in B
6180: 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20  INARY collating 
6190: 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65 64  sequence is used
61a0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  .</p>..<p>There 
61b0: 61 72 65 20 6e 6f 20 61 72 62 69 74 72 61 72 79  are no arbitrary
61c0: 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68 65 20 6e   limits on the n
61d0: 75 6d 62 65 72 20 6f 66 20 69 6e 64 69 63 65 73  umber of indices
61e0: 20 74 68 61 74 20 63 61 6e 20 62 65 0a 61 74 74   that can be.att
61f0: 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e 67 6c  ached to a singl
6200: 65 20 74 61 62 6c 65 2e 20 20 5e 28 54 68 65 20  e table.  ^(The 
6210: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
6220: 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 69 73  s in an index is
6230: 20 0a 6c 69 6d 69 74 65 64 20 74 6f 20 74 68 65   .limited to the
6240: 20 76 61 6c 75 65 20 73 65 74 20 62 79 0a 5b 73   value set by.[s
6250: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 5b 53  qlite3_limit]([S
6260: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55  QLITE_LIMIT_COLU
6270: 4d 4e 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a  MN],...).)^</p>.
6280: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 4e 49 51  .<p>^If the UNIQ
6290: 55 45 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61  UE keyword appea
62a0: 72 73 20 62 65 74 77 65 65 6e 20 43 52 45 41 54  rs between CREAT
62b0: 45 20 61 6e 64 20 49 4e 44 45 58 20 74 68 65 6e  E and INDEX then
62c0: 20 64 75 70 6c 69 63 61 74 65 0a 69 6e 64 65 78   duplicate.index
62d0: 20 65 6e 74 72 69 65 73 20 61 72 65 20 6e 6f 74   entries are not
62e0: 20 61 6c 6c 6f 77 65 64 2e 20 20 5e 41 6e 79 20   allowed.  ^Any 
62f0: 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 73 65 72  attempt to inser
6300: 74 20 61 20 64 75 70 6c 69 63 61 74 65 20 65 6e  t a duplicate en
6310: 74 72 79 0a 77 69 6c 6c 20 72 65 73 75 6c 74 20  try.will result 
6320: 69 6e 20 61 6e 20 65 72 72 6f 72 2e 20 20 5e 46  in an error.  ^F
6330: 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
6340: 6f 66 20 75 6e 69 71 75 65 20 69 6e 64 69 63 65  of unique indice
6350: 73 2c 20 61 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75  s, all NULL valu
6360: 65 73 0a 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es.are considere
6370: 64 20 74 6f 20 64 69 66 66 65 72 65 6e 74 20 66  d to different f
6380: 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 4e 55  rom all other NU
6390: 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 20 61 72  LL values and ar
63a0: 65 20 74 68 75 73 20 75 6e 69 71 75 65 2e 0a 54  e thus unique..T
63b0: 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74 68  his is one of th
63c0: 65 20 74 77 6f 20 70 6f 73 73 69 62 6c 65 20 69  e two possible i
63d0: 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 73 20 6f  nterpretations o
63e0: 66 20 74 68 65 20 53 51 4c 2d 39 32 20 73 74 61  f the SQL-92 sta
63f0: 6e 64 61 72 64 0a 28 74 68 65 20 6c 61 6e 67 75  ndard.(the langu
6400: 61 67 65 20 69 6e 20 74 68 65 20 73 74 61 6e 64  age in the stand
6410: 61 72 64 20 69 73 20 61 6d 62 69 67 75 6f 75 73  ard is ambiguous
6420: 29 20 61 6e 64 20 69 73 20 74 68 65 20 69 6e 74  ) and is the int
6430: 65 72 70 72 65 74 61 74 69 6f 6e 0a 66 6f 6c 6c  erpretation.foll
6440: 6f 77 65 64 20 62 79 20 50 6f 73 74 67 72 65 53  owed by PostgreS
6450: 51 4c 2c 20 4d 79 53 51 4c 2c 20 46 69 72 65 62  QL, MySQL, Fireb
6460: 69 72 64 2c 20 61 6e 64 20 4f 72 61 63 6c 65 2e  ird, and Oracle.
6470: 20 20 49 6e 66 6f 72 6d 69 78 20 61 6e 64 0a 4d    Informix and.M
6480: 69 63 72 6f 73 6f 66 74 20 53 51 4c 20 53 65 72  icrosoft SQL Ser
6490: 76 65 72 20 66 6f 6c 6c 6f 77 20 74 68 65 20 6f  ver follow the o
64a0: 74 68 65 72 20 69 6e 74 65 72 70 72 65 74 61 74  ther interpretat
64b0: 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 61 6e 64  ion of the stand
64c0: 61 72 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ard.</p>..<p>^If
64d0: 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46   the optional IF
64e0: 20 4e 4f 54 20 45 58 49 53 54 53 20 63 6c 61 75   NOT EXISTS clau
64f0: 73 65 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e  se is present an
6500: 64 20 61 6e 6f 74 68 65 72 20 69 6e 64 65 78 0a  d another index.
6510: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61  with the same na
6520: 6d 65 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  me already exist
6530: 73 2c 20 74 68 65 6e 20 74 68 69 73 20 63 6f 6d  s, then this com
6540: 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20 61 20 6e  mand becomes a n
6550: 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  o-op.</p>..<p>^I
6560: 6e 64 65 78 65 73 20 61 72 65 20 72 65 6d 6f 76  ndexes are remov
6570: 65 64 20 77 69 74 68 20 74 68 65 20 5b 44 52 4f  ed with the [DRO
6580: 50 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64  P INDEX] command
6590: 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  .</p>...<tcl>.##
65a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
65b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
65c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
65d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
65e0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
65f0: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 41 42  tion {CREATE TAB
6600: 4c 45 7d 20 7b 63 72 65 61 74 65 74 61 62 6c 65  LE} {createtable
6610: 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  } {{CREATE TABLE
6620: 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
6630: 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d 73  m create-table-s
6640: 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67  tmt 1.BubbleDiag
6650: 72 61 6d 20 63 6f 6c 75 6d 6e 2d 64 65 66 0a 42  ram column-def.B
6660: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 74 79 70  ubbleDiagram typ
6670: 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65 44 69 61  e-name.BubbleDia
6680: 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 63 6f 6e 73  gram column-cons
6690: 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61  traint.BubbleDia
66a0: 67 72 61 6d 20 74 61 62 6c 65 2d 63 6f 6e 73 74  gram table-const
66b0: 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61 67  raint.BubbleDiag
66c0: 72 61 6d 20 66 6f 72 65 69 67 6e 2d 6b 65 79 2d  ram foreign-key-
66d0: 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  clause.</tcl>..<
66e0: 70 3e 54 68 65 20 22 43 52 45 41 54 45 20 54 41  p>The "CREATE TA
66f0: 42 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20  BLE" command is 
6700: 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  used to create a
6710: 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e   new table in an
6720: 20 53 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73   SQLite .databas
6730: 65 2e 20 41 20 43 52 45 41 54 45 20 54 41 42 4c  e. A CREATE TABL
6740: 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66  E command specif
6750: 69 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ies the followin
6760: 67 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  g attributes of 
6770: 74 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a  the.new table:..
6780: 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68  <ul>.  <li><p>Th
6790: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65  e name of the ne
67a0: 77 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e  w table...  <li>
67b0: 3c 70 3e 20 54 68 65 20 64 61 74 61 62 61 73 65  <p> The database
67c0: 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65   in which the ne
67d0: 77 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  w table is creat
67e0: 65 64 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62  ed. Tables may b
67f0: 65 20 0a 20 20 20 20 20 20 63 72 65 61 74 65 64  e .      created
6800: 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
6810: 61 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20  abase, the temp 
6820: 64 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20  database, or in 
6830: 61 6e 79 20 61 74 74 61 63 68 65 64 0a 20 20 20  any attached.   
6840: 20 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20     database...  
6850: 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65  <li><p> The name
6860: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
6870: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20  in the table... 
6880: 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63   <li><p> The dec
6890: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 65 61  lared type of ea
68a0: 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
68b0: 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c   table...  <li><
68c0: 70 3e 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c  p> A default val
68d0: 75 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  ue or expression
68e0: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
68f0: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a   in the table...
6900: 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61    <li><p> A defa
6910: 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
6920: 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69  quence to use wi
6930: 74 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a  th each column..
6940: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f  .  <li><p> Optio
6950: 6e 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59  nally, a PRIMARY
6960: 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62   KEY for the tab
6970: 6c 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20  le. Both single 
6980: 63 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20  column and.     
6990: 20 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c    composite (mul
69a0: 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72  tiple column) pr
69b0: 69 6d 61 72 79 20 6b 65 79 73 20 61 72 65 20 73  imary keys are s
69c0: 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69  upported...  <li
69d0: 3e 3c 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51  ><p> A set of SQ
69e0: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f  L constraints fo
69f0: 72 20 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51  r each table. SQ
6a00: 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e  Lite supports UN
6a10: 49 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20  IQUE, NOT.      
6a20: 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64   NULL, CHECK and
6a30: 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e   FOREIGN KEY con
6a40: 73 74 72 61 69 6e 74 73 2e 0a 3c 2f 75 6c 3e 0a  straints..</ul>.
6a50: 0a 3c 70 3e 45 76 65 72 79 20 43 52 45 41 54 45  .<p>Every CREATE
6a60: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
6a70: 20 6d 75 73 74 20 73 70 65 63 69 66 79 20 61 20   must specify a 
6a80: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 6e 65 77  name for the new
6a90: 20 74 61 62 6c 65 2e 0a 20 20 5e 28 54 61 62 6c   table..  ^(Tabl
6aa0: 65 20 6e 61 6d 65 73 20 74 68 61 74 20 62 65 67  e names that beg
6ab0: 69 6e 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f  in with "sqlite_
6ac0: 22 20 61 72 65 20 72 65 73 65 72 76 65 64 20 66  " are reserved f
6ad0: 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 2e  or internal use.
6ae0: 20 49 74 0a 20 20 69 73 20 61 6e 20 65 72 72 6f   It.  is an erro
6af0: 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20  r to attempt to 
6b00: 63 72 65 61 74 65 20 61 20 74 61 62 6c 65 20 77  create a table w
6b10: 69 74 68 20 61 20 6e 61 6d 65 20 74 68 61 74 20  ith a name that 
6b20: 73 74 61 72 74 73 20 77 69 74 68 0a 20 20 22 73  starts with.  "s
6b30: 71 6c 69 74 65 5f 22 2e 29 5e 0a 0a 3c 70 3e 20  qlite_".)^..<p> 
6b40: 5e 49 66 20 61 20 26 6c 74 3b 64 61 74 61 62 61  ^If a &lt;databa
6b50: 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 73  se-name&gt; is s
6b60: 70 65 63 69 66 69 65 64 2c 20 69 74 20 6d 75 73  pecified, it mus
6b70: 74 20 62 65 20 65 69 74 68 65 72 20 22 6d 61 69  t be either "mai
6b80: 6e 22 2c 20 0a 20 20 22 74 65 6d 70 22 2c 20 6f  n", .  "temp", o
6b90: 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e  r the name of an
6ba0: 20 5b 41 54 54 41 43 48 20 44 41 54 41 42 41 53   [ATTACH DATABAS
6bb0: 45 7c 61 74 74 61 63 68 65 64 20 64 61 74 61 62  E|attached datab
6bc0: 61 73 65 5d 2e 20 5e 49 6e 20 74 68 69 73 20 63  ase]. ^In this c
6bd0: 61 73 65 0a 20 20 74 68 65 20 6e 65 77 20 74 61  ase.  the new ta
6be0: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69  ble is created i
6bf0: 6e 20 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61  n the named data
6c00: 62 61 73 65 2e 20 5e 49 66 20 74 68 65 20 22 54  base. ^If the "T
6c10: 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41  EMP" or "TEMPORA
6c20: 52 59 22 0a 20 20 6b 65 79 77 6f 72 64 20 6f 63  RY".  keyword oc
6c30: 63 75 72 73 20 62 65 74 77 65 65 6e 20 74 68 65  curs between the
6c40: 20 22 43 52 45 41 54 45 22 20 61 6e 64 20 22 54   "CREATE" and "T
6c50: 41 42 4c 45 22 20 74 68 65 6e 20 74 68 65 20 6e  ABLE" then the n
6c60: 65 77 20 74 61 62 6c 65 20 69 73 0a 20 20 63 72  ew table is.  cr
6c70: 65 61 74 65 64 20 69 6e 20 74 68 65 20 74 65 6d  eated in the tem
6c80: 70 20 64 61 74 61 62 61 73 65 2e 20 5e 49 74 20  p database. ^It 
6c90: 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 73  is an error to s
6ca0: 70 65 63 69 66 79 20 62 6f 74 68 20 61 20 0a 20  pecify both a . 
6cb0: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
6cc0: 6d 65 26 67 74 3b 20 61 6e 64 20 74 68 65 20 54  me&gt; and the T
6cd0: 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41 52 59  EMP or TEMPORARY
6ce0: 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c 65 73 73   keyword, unless
6cf0: 20 74 68 65 0a 20 20 26 6c 74 3b 64 61 74 61 62   the.  &lt;datab
6d00: 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20  ase-name&gt; is 
6d10: 22 74 65 6d 70 22 2e 20 5e 49 66 20 6e 6f 20 64  "temp". ^If no d
6d20: 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20  atabase name is 
6d30: 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74 68  specified and th
6d40: 65 0a 20 20 54 45 4d 50 20 6b 65 79 77 6f 72 64  e.  TEMP keyword
6d50: 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20   is not present 
6d60: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
6d70: 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  s created in the
6d80: 20 6d 61 69 6e 0a 20 20 64 61 74 61 62 61 73 65   main.  database
6d90: 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74 20 69 73 20  ...<p>.  ^It is 
6da0: 75 73 75 61 6c 6c 79 20 61 6e 20 65 72 72 6f 72  usually an error
6db0: 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20 63   to attempt to c
6dc0: 72 65 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  reate a new tabl
6dd0: 65 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  e in a database 
6de0: 74 68 61 74 0a 20 20 61 6c 72 65 61 64 79 20 63  that.  already c
6df0: 6f 6e 74 61 69 6e 73 20 61 20 74 61 62 6c 65 2c  ontains a table,
6e00: 20 69 6e 64 65 78 20 6f 72 20 76 69 65 77 20 6f   index or view o
6e10: 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e  f the same name.
6e20: 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68   ^However, if th
6e30: 65 0a 20 20 22 49 46 20 4e 4f 54 20 45 58 49 53  e.  "IF NOT EXIS
6e40: 54 53 22 20 63 6c 61 75 73 65 20 69 73 20 73 70  TS" clause is sp
6e50: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
6e60: 6f 66 20 74 68 65 20 43 52 45 41 54 45 20 54 41  of the CREATE TA
6e70: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  BLE statement an
6e80: 64 0a 20 20 61 20 74 61 62 6c 65 20 6f 72 20 76  d.  a table or v
6e90: 69 65 77 20 6f 66 20 74 68 65 20 73 61 6d 65 20  iew of the same 
6ea0: 6e 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78 69  name already exi
6eb0: 73 74 73 2c 20 74 68 65 20 43 52 45 41 54 45 20  sts, the CREATE 
6ec0: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 0a 20 20  TABLE command.  
6ed0: 73 69 6d 70 6c 79 20 68 61 73 20 6e 6f 20 65 66  simply has no ef
6ee0: 66 65 63 74 20 28 61 6e 64 20 6e 6f 20 65 72 72  fect (and no err
6ef0: 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 72 65  or message is re
6f00: 74 75 72 6e 65 64 29 2e 20 5e 41 6e 20 65 72 72  turned). ^An err
6f10: 6f 72 20 69 73 20 73 74 69 6c 6c 0a 20 20 72 65  or is still.  re
6f20: 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 74 61  turned if the ta
6f30: 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 72  ble cannot be cr
6f40: 65 61 74 65 64 20 62 65 63 61 75 73 65 20 6f 66  eated because of
6f50: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 69 6e 64   an existing ind
6f60: 65 78 2c 20 65 76 65 6e 20 0a 20 20 69 66 20 74  ex, even .  if t
6f70: 68 65 20 22 49 46 20 4e 4f 54 20 45 58 49 53 54  he "IF NOT EXIST
6f80: 53 22 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  S" clause is spe
6f90: 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 49 74 20  cified...<p>^It 
6fa0: 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20  is not an error 
6fb0: 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62 6c  to create a tabl
6fc0: 65 20 74 68 61 74 20 68 61 73 20 74 68 65 20 73  e that has the s
6fd0: 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e 20 0a  ame name as an .
6fe0: 20 20 65 78 69 73 74 69 6e 67 20 5b 43 52 45 41    existing [CREA
6ff0: 54 45 20 54 52 49 47 47 45 52 7c 74 72 69 67 67  TE TRIGGER|trigg
7000: 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73  er]...<p>^Tables
7010: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69   are removed usi
7020: 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42  ng the [DROP TAB
7030: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
7040: 3c 2f 70 3e 0a 0a 3c 68 33 3e 43 52 45 41 54 45  </p>..<h3>CREATE
7050: 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53 20 53 45   TABLE ... AS SE
7060: 4c 45 43 54 20 53 74 61 74 65 6d 65 6e 74 73 3c  LECT Statements<
7070: 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 22 43 52  /h3>..<p>^(A "CR
7080: 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41  EATE TABLE ... A
7090: 53 20 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d  S SELECT" statem
70a0: 65 6e 74 20 63 72 65 61 74 65 73 20 61 6e 64 20  ent creates and 
70b0: 70 6f 70 75 6c 61 74 65 73 20 61 20 64 61 74 61  populates a data
70c0: 62 61 73 65 0a 74 61 62 6c 65 20 62 61 73 65 64  base.table based
70d0: 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20   on the results 
70e0: 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
70f0: 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65 20 74  ement.)^ ^(The t
7100: 61 62 6c 65 20 68 61 73 20 74 68 65 20 73 61 6d  able has the sam
7110: 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e.number of colu
7120: 6d 6e 73 20 61 73 20 74 68 65 20 72 6f 77 73 20  mns as the rows 
7130: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
7140: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
7150: 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66 0a 65 61  . The name of.ea
7160: 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65  ch column is the
7170: 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 61 6d   same as the nam
7180: 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
7190: 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 6e  onding column in
71a0: 20 74 68 65 20 72 65 73 75 6c 74 0a 73 65 74 20   the result.set 
71b0: 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  of the SELECT st
71c0: 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65  atement.)^ ^(The
71d0: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f   declared type o
71e0: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73  f each column is
71f0: 20 64 65 74 65 72 6d 69 6e 65 64 0a 62 79 20 74   determined.by t
7200: 68 65 20 5b 65 78 70 72 65 73 73 69 6f 6e 20 61  he [expression a
7210: 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20  ffinity] of the 
7220: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78  corresponding ex
7230: 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
7240: 72 65 73 75 6c 74 20 73 65 74 0a 6f 66 20 74 68  result set.of th
7250: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
7260: 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  nt, as follows:.
7270: 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 3c 74  </p>..<center><t
7280: 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 20  able border=1>. 
7290: 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72 65 73 73   <tr><th>Express
72a0: 69 6f 6e 20 41 66 66 69 6e 69 74 79 20 20 20 3c  ion Affinity   <
72b0: 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63 6c 61 72  th>Column Declar
72c0: 65 64 20 54 79 70 65 0a 20 20 3c 74 72 3e 3c 74  ed Type.  <tr><t
72d0: 64 3e 54 45 58 54 20 20 20 20 20 20 20 20 20 20  d>TEXT          
72e0: 20 20 20 20 20 20 20 20 3c 74 64 3e 22 54 45 58          <td>"TEX
72f0: 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 55 4d  T".  <tr><td>NUM
7300: 45 52 49 43 20 20 20 20 20 20 20 20 20 20 20 20  ERIC            
7310: 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a 20 20 3c     <td>"NUM".  <
7320: 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45 52 20 20  tr><td>INTEGER  
7330: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64               <td
7340: 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e 3c 74 64  >"INT".  <tr><td
7350: 3e 52 45 41 4c 20 20 20 20 20 20 20 20 20 20 20  >REAL           
7360: 20 20 20 20 20 20 20 3c 74 64 3e 22 52 45 41 4c         <td>"REAL
7370: 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 4f 4e 45  ".  <tr><td>NONE
7380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7390: 20 20 3c 74 64 3e 22 22 20 28 65 6d 70 74 79 20    <td>"" (empty 
73a0: 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62 6c 65 3e  string).</table>
73b0: 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e  </center>)^..<p>
73c0: 5e 28 41 20 74 61 62 6c 65 20 63 72 65 61 74 65  ^(A table create
73d0: 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  d using CREATE T
73e0: 41 42 4c 45 20 41 53 20 68 61 73 20 6e 6f 20 50  ABLE AS has no P
73f0: 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e  RIMARY KEY and n
7400: 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 66  o.constraints of
7410: 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68 65 20 64   any kind. The d
7420: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
7430: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 4e  each column is N
7440: 55 4c 4c 2e 20 54 68 65 20 64 65 66 61 75 6c 74  ULL. The default
7450: 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65  .collation seque
7460: 6e 63 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  nce for each col
7470: 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20 74  umn of the new t
7480: 61 62 6c 65 20 69 73 20 42 49 4e 41 52 59 2e 29  able is BINARY.)
7490: 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 63 72  ^..<p>^Tables cr
74a0: 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41  eated using CREA
74b0: 54 45 20 54 41 42 4c 45 20 41 53 20 61 72 65 20  TE TABLE AS are 
74c0: 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70 75 6c 61  initially popula
74d0: 74 65 64 20 77 69 74 68 20 74 68 65 0a 72 6f 77  ted with the.row
74e0: 73 20 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e  s of data return
74f0: 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54  ed by the SELECT
7500: 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 52 6f 77   statement. ^Row
7510: 73 20 61 72 65 20 61 73 73 69 67 6e 65 64 20 63  s are assigned c
7520: 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61 73 63 65  ontiguously.asce
7530: 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d 20 76 61  nding [rowid] va
7540: 6c 75 65 73 2c 20 73 74 61 72 74 69 6e 67 20 77  lues, starting w
7550: 69 74 68 20 31 2c 20 69 6e 20 74 68 65 20 5b 6f  ith 1, in the [o
7560: 72 64 65 72 20 62 79 7c 6f 72 64 65 72 5d 20 74  rder by|order] t
7570: 68 61 74 20 74 68 65 79 0a 61 72 65 20 72 65 74  hat they.are ret
7580: 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
7590: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ECT statement...
75a0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
75b0: 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66 7d 20 7b   {tablecoldef} {
75c0: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
75d0: 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  n} {column defin
75e0: 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  itions}</tcl>.<h
75f0: 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69 6e 69 74  3>Column Definit
7600: 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 55 6e  ions</h3>..<p>Un
7610: 6c 65 73 73 20 69 74 20 69 73 20 61 20 43 52 45  less it is a CRE
7620: 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53  ATE TABLE ... AS
7630: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
7640: 74 2c 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  t, a CREATE TABL
7650: 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e 65 20 6f  E includes.one o
7660: 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d 6e 2d 64  r more [column-d
7670: 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  ef|column defini
7680: 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f 6e 61 6c  tions], optional
7690: 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ly followed by a
76a0: 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62 6c 65 2d   list of.[table-
76b0: 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61 62 6c 65  constraint|table
76c0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20 20   constraints].  
76d0: 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69  Each column defi
76e0: 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73 74 73 20  nition consists 
76f0: 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f 66 20 74  of the.name of t
7700: 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70 74 69 6f  he column, optio
7710: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62  nally followed b
7720: 79 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74  y the declared t
7730: 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ype of the colum
7740: 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f 72 20 6d  n,.then one or m
7750: 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 5b 63 6f  ore optional [co
7760: 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 7c  lumn-constraint|
7770: 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61 69 6e  column constrain
7780: 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64 20 69 6e  ts]. Included in
7790: 0a 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20  .the definition 
77a0: 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74  of "column const
77b0: 72 61 69 6e 74 73 22 20 66 6f 72 20 74 68 65 20  raints" for the 
77c0: 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65 20  purposes of the 
77d0: 70 72 65 76 69 6f 75 73 0a 73 74 61 74 65 6d 65  previous.stateme
77e0: 6e 74 20 61 72 65 20 74 68 65 20 43 4f 4c 4c 41  nt are the COLLA
77f0: 54 45 20 61 6e 64 20 44 45 46 41 55 4c 54 20 63  TE and DEFAULT c
7800: 6c 61 75 73 65 73 2c 20 65 76 65 6e 20 74 68 6f  lauses, even tho
7810: 75 67 68 20 74 68 65 73 65 20 61 72 65 20 6e 6f  ugh these are no
7820: 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73 74 72 61  t really.constra
7830: 69 6e 74 73 20 69 6e 20 74 68 65 20 73 65 6e 73  ints in the sens
7840: 65 20 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e  e that they do n
7850: 6f 74 20 72 65 73 74 72 69 63 74 20 74 68 65 20  ot restrict the 
7860: 64 61 74 61 20 74 68 61 74 20 74 68 65 20 74 61  data that the ta
7870: 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61 69 6e 2e  ble may.contain.
7880: 20 54 68 65 20 6f 74 68 65 72 20 63 6f 6e 73 74   The other const
7890: 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20 4e 55 4c  raints - NOT NUL
78a0: 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49 51 55 45  L, CHECK, UNIQUE
78b0: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  , PRIMARY KEY an
78c0: 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f  d.FOREIGN KEY co
78d0: 6e 73 74 72 61 69 6e 74 73 20 2d 20 69 6d 70 6f  nstraints - impo
78e0: 73 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  se restrictions 
78f0: 6f 6e 20 74 68 65 20 74 61 62 6c 65 73 20 64 61  on the tables da
7900: 74 61 2c 20 61 6e 64 20 61 72 65 20 61 72 65 0a  ta, and are are.
7910: 64 65 73 63 72 69 62 65 64 20 75 6e 64 65 72 20  described under 
7920: 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c 53 51 4c  [constraints|SQL
7930: 20 44 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74   Data Constraint
7940: 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70 3e 5e 55  s] below...<p>^U
7950: 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51 4c 20 64  nlike most SQL d
7960: 61 74 61 62 61 73 65 73 2c 20 53 51 4c 69 74 65  atabases, SQLite
7970: 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 74 72 69   does not restri
7980: 63 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 64  ct the type of d
7990: 61 74 61 20 74 68 61 74 0a 6d 61 79 20 62 65 20  ata that.may be 
79a0: 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 61 20  inserted into a 
79b0: 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20 6f 6e 20  column based on 
79c0: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64 65 63 6c  the columns decl
79d0: 61 72 65 64 20 74 79 70 65 2e 20 49 6e 73 74 65  ared type. Inste
79e0: 61 64 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20  ad,.SQLite uses 
79f0: 5b 64 79 6e 61 6d 69 63 20 74 79 70 69 6e 67 5d  [dynamic typing]
7a00: 2e 20 5e 54 68 65 20 64 65 63 6c 61 72 65 64 20  . ^The declared 
7a10: 74 79 70 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  type of a column
7a20: 20 69 73 20 75 73 65 64 20 74 6f 0a 64 65 74 65   is used to.dete
7a30: 72 6d 69 6e 65 20 74 68 65 20 5b 61 66 66 69 6e  rmine the [affin
7a40: 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 6c 75  ity] of the colu
7a50: 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 70 3e 54 68 65  mn only...<p>The
7a60: 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20   DEFAULT clause 
7a70: 73 70 65 63 69 66 69 65 73 20 61 20 64 65 66 61  specifies a defa
7a80: 75 6c 74 20 76 61 6c 75 65 20 74 6f 20 75 73 65  ult value to use
7a90: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
7aa0: 69 66 20 6e 6f 0a 76 61 6c 75 65 20 69 73 20 65  if no.value is e
7ab0: 78 70 6c 69 63 69 74 6c 79 20 70 72 6f 76 69 64  xplicitly provid
7ac0: 65 64 20 62 79 20 74 68 65 20 75 73 65 72 20 77  ed by the user w
7ad0: 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20 5b 49 4e  hen doing an [IN
7ae0: 53 45 52 54 5d 2e 20 5e 49 66 20 74 68 65 72 65  SERT]. ^If there
7af0: 0a 69 73 20 6e 6f 20 65 78 70 6c 69 63 69 74 20  .is no explicit 
7b00: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20 61  DEFAULT clause a
7b10: 74 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f 6c  ttached to a col
7b20: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20  umn definition, 
7b30: 74 68 65 6e 20 74 68 65 20 0a 64 65 66 61 75 6c  then the .defaul
7b40: 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  t value of the c
7b50: 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20 5e  olumn is NULL. ^
7b60: 28 41 6e 20 65 78 70 6c 69 63 69 74 20 44 45 46  (An explicit DEF
7b70: 41 55 4c 54 20 63 6c 61 75 73 65 20 6d 61 79 20  AULT clause may 
7b80: 73 70 65 63 69 66 79 0a 74 68 61 74 20 74 68 65  specify.that the
7b90: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69   default value i
7ba0: 73 20 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67  s NULL, a string
7bb0: 20 63 6f 6e 73 74 61 6e 74 2c 20 61 20 62 6c 6f   constant, a blo
7bc0: 62 20 63 6f 6e 73 74 61 6e 74 2c 20 61 0a 73 69  b constant, a.si
7bd0: 67 6e 65 64 2d 6e 75 6d 62 65 72 2c 20 6f 72 20  gned-number, or 
7be0: 61 6e 79 20 63 6f 6e 73 74 61 6e 74 20 65 78 70  any constant exp
7bf0: 72 65 73 73 69 6f 6e 20 65 6e 63 6c 6f 73 65 64  ression enclosed
7c00: 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e   in parentheses.
7c10: 20 41 6e 20 65 78 70 6c 69 63 69 74 0a 64 65 66   An explicit.def
7c20: 61 75 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61  ault value may a
7c30: 6c 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  lso be one of th
7c40: 65 20 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69  e special case-i
7c50: 6e 64 65 70 65 6e 64 65 6e 74 20 6b 65 79 77 6f  ndependent keywo
7c60: 72 64 73 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45  rds.CURRENT_TIME
7c70: 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f  , CURRENT_DATE o
7c80: 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  r CURRENT_TIMEST
7c90: 41 4d 50 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20  AMP.)^ ^For the 
7ca0: 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65 0a  purposes of the.
7cb0: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 2c 20  DEFAULT clause, 
7cc0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  an expression is
7cd0: 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 6e 73   considered cons
7ce0: 74 61 6e 74 20 70 72 6f 76 69 64 65 64 20 74 68  tant provided th
7cf0: 61 74 20 69 74 20 64 6f 65 73 0a 6e 6f 74 20 63  at it does.not c
7d00: 6f 6e 74 61 69 6e 20 61 6e 79 20 73 75 62 2d 71  ontain any sub-q
7d10: 75 65 72 69 65 73 20 6f 72 20 73 74 72 69 6e 67  ueries or string
7d20: 20 63 6f 6e 73 74 61 6e 74 73 20 65 6e 63 6c 6f   constants enclo
7d30: 73 65 64 20 69 6e 20 64 6f 75 62 6c 65 20 71 75  sed in double qu
7d40: 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28 45 61 63 68  otes...<p>^(Each
7d50: 20 74 69 6d 65 20 61 20 72 6f 77 20 69 73 20 69   time a row is i
7d60: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
7d70: 20 74 61 62 6c 65 20 62 79 20 61 6e 20 49 4e 53   table by an INS
7d80: 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68  ERT statement th
7d90: 61 74 20 0a 64 6f 65 73 20 6e 6f 74 20 70 72 6f  at .does not pro
7da0: 76 69 64 65 20 65 78 70 6c 69 63 69 74 20 76 61  vide explicit va
7db0: 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 74 61 62  lues for all tab
7dc0: 6c 65 20 63 6f 6c 75 6d 6e 73 20 74 68 65 20 76  le columns the v
7dd0: 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e 0a  alues stored in.
7de0: 74 68 65 20 6e 65 77 20 72 6f 77 20 61 72 65 20  the new row are 
7df0: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
7e00: 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75  eir default valu
7e10: 65 73 29 5e 2c 20 61 73 20 66 6f 6c 6c 6f 77 73  es)^, as follows
7e20: 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  :..<ul>.  <li><p
7e30: 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c 74  >^If the default
7e40: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
7e50: 6c 75 6d 6e 20 69 73 20 61 20 63 6f 6e 73 74 61  lumn is a consta
7e60: 6e 74 20 4e 55 4c 4c 2c 20 74 65 78 74 2c 20 62  nt NULL, text, b
7e70: 6c 6f 62 20 6f 72 0a 20 20 20 20 73 69 67 6e 65  lob or.    signe
7e80: 64 2d 6e 75 6d 62 65 72 20 76 61 6c 75 65 2c 20  d-number value, 
7e90: 74 68 65 6e 20 74 68 61 74 20 76 61 6c 75 65 20  then that value 
7ea0: 69 73 20 75 73 65 64 20 64 69 72 65 63 74 6c 79  is used directly
7eb0: 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e   in the new row.
7ec0: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  ..  <li><p>^If t
7ed0: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
7ee0: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20   of a column is 
7ef0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
7f00: 20 70 61 72 65 6e 74 68 65 73 65 73 2c 20 74 68   parentheses, th
7f10: 65 6e 0a 20 20 20 20 74 68 65 20 65 78 70 72 65  en.    the expre
7f20: 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
7f30: 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68  ed once for each
7f40: 20 72 6f 77 20 69 6e 73 65 72 74 65 64 20 61 6e   row inserted an
7f50: 64 20 74 68 65 20 72 65 73 75 6c 74 73 0a 20 20  d the results.  
7f60: 20 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65    used in the ne
7f70: 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  w row...  <li><p
7f80: 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c 74  >^If the default
7f90: 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75   value of a colu
7fa0: 6d 6e 20 69 73 20 43 55 52 52 45 4e 54 5f 54 49  mn is CURRENT_TI
7fb0: 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ME, CURRENT_DATE
7fc0: 20 6f 72 0a 20 20 20 20 43 55 52 52 45 4e 54 5f   or.    CURRENT_
7fd0: 54 49 4d 45 53 54 41 4d 50 2c 20 74 68 65 6e 20  TIMESTAMP, then 
7fe0: 74 68 65 20 76 61 6c 75 65 20 75 73 65 64 20 69  the value used i
7ff0: 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73  n the new row is
8000: 20 61 20 74 65 78 74 0a 20 20 20 20 72 65 70 72   a text.    repr
8010: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
8020: 65 20 63 75 72 72 65 6e 74 20 55 54 43 20 64 61  e current UTC da
8030: 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20  te and/or time. 
8040: 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d  ^For CURRENT_TIM
8050: 45 2c 20 74 68 65 0a 20 20 20 20 66 6f 72 6d 61  E, the.    forma
8060: 74 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20 69  t of the value i
8070: 73 20 22 48 48 3a 4d 4d 3a 53 53 22 2e 20 5e 46  s "HH:MM:SS". ^F
8080: 6f 72 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c  or CURRENT_DATE,
8090: 20 22 59 59 59 59 2d 4d 4d 2d 44 44 22 2e 20 5e   "YYYY-MM-DD". ^
80a0: 54 68 65 0a 20 20 20 20 66 6f 72 6d 61 74 20 66  The.    format f
80b0: 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53  or CURRENT_TIMES
80c0: 54 41 4d 50 20 69 73 20 22 59 59 59 59 2d 4d 4d  TAMP is "YYYY-MM
80d0: 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c  -DD HH:MM:SS"..<
80e0: 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f  /ul>..<p>^The CO
80f0: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 73 70 65  LLATE clause spe
8100: 63 69 66 69 65 73 20 74 68 65 20 6e 61 6d 65 20  cifies the name 
8110: 6f 66 20 61 20 5b 63 6f 6c 6c 61 74 69 6e 67 20  of a [collating 
8120: 73 65 71 75 65 6e 63 65 5d 20 74 6f 20 75 73 65  sequence] to use
8130: 20 61 73 0a 74 68 65 20 64 65 66 61 75 6c 74 20   as.the default 
8140: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
8150: 63 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ce for the colum
8160: 6e 2e 20 5e 49 66 20 6e 6f 20 43 4f 4c 4c 41 54  n. ^If no COLLAT
8170: 45 20 63 6c 61 75 73 65 20 69 73 0a 73 70 65 63  E clause is.spec
8180: 69 66 69 65 64 2c 20 74 68 65 20 64 65 66 61 75  ified, the defau
8190: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
81a0: 75 65 6e 63 65 20 69 73 20 5b 42 49 4e 41 52 59  uence is [BINARY
81b0: 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62  ]...<p>^The numb
81c0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
81d0: 20 61 20 74 61 62 6c 65 20 69 73 20 6c 69 6d 69   a table is limi
81e0: 74 65 64 20 62 79 20 74 68 65 20 5b 53 51 4c 49  ted by the [SQLI
81f0: 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d 0a 63  TE_MAX_COLUMN].c
8200: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70 61 72 61  ompile-time para
8210: 6d 65 74 65 72 2e 20 5e 41 20 73 69 6e 67 6c 65  meter. ^A single
8220: 20 72 6f 77 20 6f 66 20 61 20 74 61 62 6c 65 20   row of a table 
8230: 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20 6d 6f 72  cannot store mor
8240: 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d  e than.[SQLITE_M
8250: 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79 74 65 73  AX_LENGTH] bytes
8260: 20 6f 66 20 64 61 74 61 2e 20 5e 42 6f 74 68 20   of data. ^Both 
8270: 6f 66 20 74 68 65 73 65 20 6c 69 6d 69 74 73 20  of these limits 
8280: 63 61 6e 20 62 65 20 6c 6f 77 65 72 65 64 20 61  can be lowered a
8290: 74 0a 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20  t.runtime using 
82a0: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d  the [sqlite3_lim
82b0: 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65  it()] C/C++ inte
82c0: 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  rface.</p>..<tcl
82d0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63 6f  >hd_fragment {co
82e0: 6e 73 74 72 61 69 6e 74 73 7d 20 7b 63 6f 6e 73  nstraints} {cons
82f0: 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c  traints}</tcl>.<
8300: 68 33 3e 53 51 4c 20 44 61 74 61 20 43 6f 6e 73  h3>SQL Data Cons
8310: 74 72 61 69 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70  traints</h3>..<p
8320: 3e 5e 45 61 63 68 20 74 61 62 6c 65 20 69 6e 20  >^Each table in 
8330: 53 51 4c 69 74 65 20 6d 61 79 20 68 61 76 65 20  SQLite may have 
8340: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e 50  at most one <b>P
8350: 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62 3e 2e 20  RIMARY KEY</b>. 
8360: 5e 49 66 20 74 68 65 0a 20 20 6b 65 79 77 6f 72  ^If the.  keywor
8370: 64 73 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  ds PRIMARY KEY a
8380: 72 65 20 61 64 64 65 64 20 74 6f 20 61 20 63 6f  re added to a co
8390: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c  lumn definition,
83a0: 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72   then the primar
83b0: 79 20 6b 65 79 0a 20 20 66 6f 72 20 74 68 65 20  y key.  for the 
83c0: 74 61 62 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f  table consists o
83d0: 66 20 74 68 61 74 20 73 69 6e 67 6c 65 20 63 6f  f that single co
83e0: 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20 61 20  lumn. ^Or, if a 
83f0: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75  PRIMARY KEY clau
8400: 73 65 20 0a 20 20 69 73 20 73 70 65 63 69 66 69  se .  is specifi
8410: 65 64 20 61 73 20 61 20 5b 74 61 62 6c 65 2d 63  ed as a [table-c
8420: 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68 65 6e  onstraint], then
8430: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
8440: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20   of the table.  
8450: 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20  consists of the 
8460: 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  list of columns 
8470: 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
8480: 74 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  t of the PRIMARY
8490: 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a 20 20 5e   KEY clause..  ^
84a0: 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65  If there is more
84b0: 20 74 68 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52   than one PRIMAR
84c0: 59 20 4b 45 59 20 63 6c 61 75 73 65 20 69 6e 20  Y KEY clause in 
84d0: 61 20 73 69 6e 67 6c 65 20 43 52 45 41 54 45 20  a single CREATE 
84e0: 54 41 42 4c 45 0a 20 20 73 74 61 74 65 6d 65 6e  TABLE.  statemen
84f0: 74 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  t, it is an erro
8500: 72 2e 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c  r...<p>If a tabl
8510: 65 20 68 61 73 20 61 20 73 69 6e 67 6c 65 20 63  e has a single c
8520: 6f 6c 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65  olumn primary ke
8530: 79 2c 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61  y, and the decla
8540: 72 65 64 20 74 79 70 65 20 6f 66 20 74 68 61 74  red type of that
8550: 0a 20 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e  .  column is "IN
8560: 54 45 47 45 52 22 2c 20 74 68 65 6e 20 74 68 65  TEGER", then the
8570: 20 63 6f 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e   column is known
8580: 20 61 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20   as an [INTEGER 
8590: 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 20 20  PRIMARY KEY]..  
85a0: 53 65 65 20 62 65 6c 6f 77 20 66 6f 72 20 61 20  See below for a 
85b0: 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74  description of t
85c0: 68 65 20 73 70 65 63 69 61 6c 20 70 72 6f 70 65  he special prope
85d0: 72 74 69 65 73 20 61 6e 64 20 62 65 68 61 76 69  rties and behavi
85e0: 6f 75 72 73 0a 20 20 61 73 73 6f 63 69 61 74 65  ours.  associate
85f0: 64 20 77 69 74 68 20 61 6e 20 5b 49 4e 54 45 47  d with an [INTEG
8600: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e  ER PRIMARY KEY].
8610: 0a 0a 3c 70 3e 5e 45 61 63 68 20 72 6f 77 20 69  ..<p>^Each row i
8620: 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61  n a table with a
8630: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6d 75 73   primary key mus
8640: 74 20 66 65 61 74 75 72 65 20 61 20 75 6e 69 71  t feature a uniq
8650: 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20  ue combination. 
8660: 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 69 74   of values in it
8670: 73 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f  s primary key co
8680: 6c 75 6d 6e 73 2e 20 5e 46 6f 72 20 74 68 65 20  lumns. ^For the 
8690: 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65  purposes of dete
86a0: 72 6d 69 6e 69 6e 67 0a 20 20 74 68 65 20 75 6e  rmining.  the un
86b0: 69 71 75 65 6e 65 73 73 20 6f 66 20 70 72 69 6d  iqueness of prim
86c0: 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20  ary key values, 
86d0: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20  NULL values are 
86e0: 63 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74 69  considered disti
86f0: 6e 63 74 20 66 72 6f 6d 0a 20 20 61 6c 6c 20 6f  nct from.  all o
8700: 74 68 65 72 20 76 61 6c 75 65 73 2c 20 69 6e 63  ther values, inc
8710: 6c 75 64 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c  luding other NUL
8720: 4c 73 2e 20 5e 49 66 20 61 6e 20 5b 49 4e 53 45  Ls. ^If an [INSE
8730: 52 54 5d 20 6f 72 20 5b 55 50 44 41 54 45 5d 0a  RT] or [UPDATE].
8740: 20 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65    statement atte
8750: 6d 70 74 73 20 74 6f 20 6d 6f 64 69 66 79 20 74  mpts to modify t
8760: 68 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74  he table content
8770: 20 73 6f 20 74 68 61 74 20 74 77 6f 20 6f 72 20   so that two or 
8780: 6d 6f 72 65 20 72 6f 77 73 0a 20 20 66 65 61 74  more rows.  feat
8790: 75 72 65 20 69 64 65 6e 74 69 63 61 6c 20 70 72  ure identical pr
87a0: 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73  imary key values
87b0: 2c 20 69 74 20 69 73 20 61 20 63 6f 6e 73 74 72  , it is a constr
87c0: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a  aint violation..
87d0: 20 20 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74    According to t
87e0: 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 2c  he SQL standard,
87f0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 73 68 6f   PRIMARY KEY sho
8800: 75 6c 64 20 61 6c 77 61 79 73 20 69 6d 70 6c 79  uld always imply
8810: 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 20 20 55 6e 66   NOT NULL..  Unf
8820: 6f 72 74 75 6e 61 74 65 6c 79 2c 20 64 75 65 20  ortunately, due 
8830: 74 6f 20 61 20 6c 6f 6e 67 2d 73 74 61 6e 64 69  to a long-standi
8840: 6e 67 20 63 6f 64 69 6e 67 20 6f 76 65 72 73 69  ng coding oversi
8850: 67 68 74 2c 20 74 68 69 73 20 69 73 20 6e 6f 74  ght, this is not
8860: 20 74 68 65 0a 20 20 63 61 73 65 20 69 6e 20 53   the.  case in S
8870: 51 4c 69 74 65 2e 20 5e 55 6e 6c 65 73 73 20 74  QLite. ^Unless t
8880: 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20  he column is an 
8890: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
88a0: 20 4b 45 59 5d 20 53 51 4c 69 74 65 0a 20 20 61   KEY] SQLite.  a
88b0: 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65  llows NULL value
88c0: 73 20 69 6e 20 61 20 50 52 49 4d 41 52 59 20 4b  s in a PRIMARY K
88d0: 45 59 20 63 6f 6c 75 6d 6e 2e 20 20 57 65 20 63  EY column.  We c
88e0: 6f 75 6c 64 20 63 68 61 6e 67 65 20 53 51 4c 69  ould change SQLi
88f0: 74 65 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20  te to.  conform 
8900: 74 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  to the standard 
8910: 28 61 6e 64 20 77 65 20 6d 69 67 68 74 20 64 6f  (and we might do
8920: 20 73 6f 20 69 6e 20 74 68 65 20 66 75 74 75 72   so in the futur
8930: 65 29 2c 20 62 75 74 20 62 79 20 74 68 65 20 74  e), but by the t
8940: 69 6d 65 0a 20 20 74 68 65 20 6f 76 65 72 73 69  ime.  the oversi
8950: 67 68 74 20 77 61 73 20 64 69 73 63 6f 76 65 72  ght was discover
8960: 65 64 2c 20 53 51 4c 69 74 65 20 77 61 73 20 69  ed, SQLite was i
8970: 6e 20 73 75 63 68 20 77 69 64 65 20 75 73 65 20  n such wide use 
8980: 74 68 61 74 20 77 65 20 66 65 61 72 65 64 0a 20  that we feared. 
8990: 20 62 72 65 61 6b 69 6e 67 20 6c 65 67 61 63 79   breaking legacy
89a0: 20 63 6f 64 65 20 69 66 20 77 65 20 66 69 78 65   code if we fixe
89b0: 64 20 74 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20  d the problem.  
89c0: 53 6f 20 66 6f 72 20 6e 6f 77 20 77 65 20 68 61  So for now we ha
89d0: 76 65 20 63 68 6f 73 65 6e 20 74 6f 0a 20 20 63  ve chosen to.  c
89e0: 6f 6e 74 69 6e 75 65 20 61 6c 6c 6f 77 69 6e 67  ontinue allowing
89f0: 20 4e 55 4c 4c 73 20 69 6e 20 50 52 49 4d 41 52   NULLs in PRIMAR
8a00: 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 20 20  Y KEY columns.  
8a10: 44 65 76 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c  Developers shoul
8a20: 64 20 62 65 0a 20 20 61 77 61 72 65 2c 20 68 6f  d be.  aware, ho
8a30: 77 65 76 65 72 2c 20 74 68 61 74 20 77 65 20 6d  wever, that we m
8a40: 61 79 20 63 68 61 6e 67 65 20 53 51 4c 69 74 65  ay change SQLite
8a50: 20 74 6f 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74   to conform to t
8a60: 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20  he SQL standard 
8a70: 69 6e 0a 20 20 66 75 74 75 72 65 20 61 6e 64 20  in.  future and 
8a80: 73 68 6f 75 6c 64 20 64 65 73 69 67 6e 20 6e 65  should design ne
8a90: 77 20 70 72 6f 67 72 61 6d 73 20 61 63 63 6f 72  w programs accor
8aa0: 64 69 6e 67 6c 79 2e 0a 0a 3c 70 3e 5e 41 20 3c  dingly...<p>^A <
8ab0: 62 3e 55 4e 49 51 55 45 3c 2f 62 3e 20 63 6f 6e  b>UNIQUE</b> con
8ac0: 73 74 72 61 69 6e 74 20 69 73 20 73 69 6d 69 6c  straint is simil
8ad0: 61 72 20 74 6f 20 61 20 50 52 49 4d 41 52 59 20  ar to a PRIMARY 
8ae0: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  KEY constraint, 
8af0: 65 78 63 65 70 74 0a 20 20 74 68 61 74 20 61 20  except.  that a 
8b00: 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6d 61 79  single table may
8b10: 20 68 61 76 65 20 61 6e 79 20 6e 75 6d 62 65 72   have any number
8b20: 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74   of UNIQUE const
8b30: 72 61 69 6e 74 73 2e 20 5e 46 6f 72 20 65 61 63  raints. ^For eac
8b40: 68 0a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  h.  UNIQUE const
8b50: 72 61 69 6e 74 20 6f 6e 20 74 68 65 20 74 61 62  raint on the tab
8b60: 6c 65 2c 20 65 61 63 68 20 72 6f 77 20 6d 75 73  le, each row mus
8b70: 74 20 66 65 61 74 75 72 65 20 61 20 75 6e 69 71  t feature a uniq
8b80: 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20  ue combination. 
8b90: 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68   of values in th
8ba0: 65 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69  e columns identi
8bb0: 66 69 65 64 20 62 79 20 74 68 65 20 55 4e 49 51  fied by the UNIQ
8bc0: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 5e  UE constraint. ^
8bd0: 41 73 20 77 69 74 68 0a 20 20 50 52 49 4d 41 52  As with.  PRIMAR
8be0: 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  Y KEY constraint
8bf0: 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  s, for the purpo
8c00: 73 65 73 20 6f 66 20 55 4e 49 51 55 45 20 63 6f  ses of UNIQUE co
8c10: 6e 73 74 72 61 69 6e 74 73 20 4e 55 4c 4c 20 76  nstraints NULL v
8c20: 61 6c 75 65 73 0a 20 20 61 72 65 20 63 6f 6e 73  alues.  are cons
8c30: 69 64 65 72 65 64 20 64 69 73 74 69 6e 63 74 20  idered distinct 
8c40: 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76  from all other v
8c50: 61 6c 75 65 73 20 28 69 6e 63 6c 75 64 69 6e 67  alues (including
8c60: 20 6f 74 68 65 72 20 4e 55 4c 4c 73 29 2e 0a 20   other NULLs).. 
8c70: 20 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52 54 5d   ^If an [INSERT]
8c80: 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61   or [UPDATE] sta
8c90: 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
8ca0: 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 74 61  to modify the ta
8cb0: 62 6c 65 20 63 6f 6e 74 65 6e 74 20 73 6f 0a 20  ble content so. 
8cc0: 20 74 68 61 74 20 74 77 6f 20 6f 72 20 6d 6f 72   that two or mor
8cd0: 65 20 72 6f 77 73 20 66 65 61 74 75 72 65 20 69  e rows feature i
8ce0: 64 65 6e 74 69 63 61 6c 20 76 61 6c 75 65 73 20  dentical values 
8cf0: 69 6e 20 61 20 73 65 74 20 6f 66 20 63 6f 6c 75  in a set of colu
8d00: 6d 6e 73 20 74 68 61 74 0a 20 20 61 72 65 20 73  mns that.  are s
8d10: 75 62 6a 65 63 74 20 74 6f 20 61 20 55 4e 49 51  ubject to a UNIQ
8d20: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 69  UE constraint, i
8d30: 74 20 69 73 20 61 20 63 6f 6e 73 74 72 61 69 6e  t is a constrain
8d40: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 0a 3c 70  t violation...<p
8d50: 3e 5e 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  >^[INTEGER PRIMA
8d60: 52 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 73 20  RY KEY] columns 
8d70: 61 73 69 64 65 2c 20 62 6f 74 68 20 55 4e 49 51  aside, both UNIQ
8d80: 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b  UE and PRIMARY K
8d90: 45 59 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74 73  EY.  constraints
8da0: 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64   are implemented
8db0: 20 62 79 20 63 72 65 61 74 69 6e 67 20 61 6e 20   by creating an 
8dc0: 69 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74  index in the dat
8dd0: 61 62 61 73 65 20 28 69 6e 20 74 68 65 20 73 61  abase (in the sa
8de0: 6d 65 0a 20 20 77 61 79 20 61 73 20 61 20 5b 43  me.  way as a [C
8df0: 52 45 41 54 45 20 49 4e 44 45 58 7c 22 43 52 45  REATE INDEX|"CRE
8e00: 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58  ATE UNIQUE INDEX
8e10: 22 5d 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  "] statement wou
8e20: 6c 64 29 2e 20 5e 53 75 63 68 20 61 6e 20 0a 20  ld). ^Such an . 
8e30: 20 69 6e 64 65 78 20 69 73 20 75 73 65 64 20 6c   index is used l
8e40: 69 6b 65 20 61 6e 79 20 6f 74 68 65 72 20 69 6e  ike any other in
8e50: 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62  dex in the datab
8e60: 61 73 65 20 74 6f 20 5b 6f 70 74 69 6d 69 7a 65  ase to [optimize
8e70: 72 7c 6f 70 74 69 6d 69 7a 65 0a 20 20 71 75 65  r|optimize.  que
8e80: 72 69 65 73 5d 2e 20 20 41 73 20 61 20 72 65 73  ries].  As a res
8e90: 75 6c 74 2c 20 74 68 65 72 65 20 6f 66 74 65 6e  ult, there often
8ea0: 20 6e 6f 20 61 64 76 61 6e 74 61 67 65 20 28 62   no advantage (b
8eb0: 75 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 6f  ut significant o
8ec0: 76 65 72 68 65 61 64 29 0a 20 20 69 6e 20 63 72  verhead).  in cr
8ed0: 65 61 74 69 6e 67 20 61 6e 20 69 6e 64 65 78 20  eating an index 
8ee0: 6f 6e 20 61 20 73 65 74 20 6f 66 20 63 6f 6c 75  on a set of colu
8ef0: 6d 6e 73 20 74 68 61 74 20 61 72 65 20 61 6c 72  mns that are alr
8f00: 65 61 64 79 20 63 6f 6c 6c 65 63 74 69 76 65 6c  eady collectivel
8f10: 79 0a 20 20 73 75 62 6a 65 63 74 20 74 6f 20 61  y.  subject to a
8f20: 20 55 4e 49 51 55 45 20 6f 72 20 50 52 49 4d 41   UNIQUE or PRIMA
8f30: 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  RY KEY constrain
8f40: 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  t...<tcl>hd_frag
8f50: 6d 65 6e 74 20 7b 63 6b 63 6f 6e 73 74 7d 20 7b  ment {ckconst} {
8f60: 43 48 45 43 4b 7d 20 7b 43 48 45 43 4b 20 63 6f  CHECK} {CHECK co
8f70: 6e 73 74 72 61 69 6e 74 7d 20 7b 43 48 45 43 4b  nstraint} {CHECK
8f80: 20 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74   constraints}</t
8f90: 63 6c 3e 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43 48  cl>.<p>^(A <b>CH
8fa0: 45 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69  ECK</b> constrai
8fb0: 6e 74 20 6d 61 79 20 62 65 20 61 74 74 61 63 68  nt may be attach
8fc0: 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64  ed to a column d
8fd0: 65 66 69 6e 69 74 69 6f 6e 20 6f 72 0a 20 20 73  efinition or.  s
8fe0: 70 65 63 69 66 69 65 64 20 61 73 20 61 20 74 61  pecified as a ta
8ff0: 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  ble constraint. 
9000: 49 6e 20 70 72 61 63 74 69 63 65 20 69 74 20 6d  In practice it m
9010: 61 6b 65 73 20 6e 6f 20 64 69 66 66 65 72 65 6e  akes no differen
9020: 63 65 2e 29 5e 20 5e 28 45 61 63 68 0a 20 20 74  ce.)^ ^(Each.  t
9030: 69 6d 65 20 61 20 6e 65 77 20 72 6f 77 20 69 73  ime a new row is
9040: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
9050: 68 65 20 74 61 62 6c 65 20 6f 72 20 61 6e 20 65  he table or an e
9060: 78 69 73 74 69 6e 67 20 72 6f 77 20 69 73 20 75  xisting row is u
9070: 70 64 61 74 65 64 2c 0a 20 20 74 68 65 20 65 78  pdated,.  the ex
9080: 70 72 65 73 73 69 6f 6e 20 61 73 73 6f 63 69 61  pression associa
9090: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 43 48  ted with each CH
90a0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  ECK constraint i
90b0: 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 0a  s evaluated and.
90c0: 20 20 63 61 73 74 20 74 6f 20 61 20 4e 55 4d 45    cast to a NUME
90d0: 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74 68 65  RIC value in the
90e0: 20 73 61 6d 65 20 77 61 79 20 61 73 20 61 20 5b   same way as a [
90f0: 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 5d  CAST expression]
9100: 2e 20 49 66 20 74 68 65 20 0a 20 20 72 65 73 75  . If the .  resu
9110: 6c 74 20 69 73 20 7a 65 72 6f 20 28 69 6e 74 65  lt is zero (inte
9120: 67 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72  ger value 0 or r
9130: 65 61 6c 20 76 61 6c 75 65 20 30 2e 30 29 2c 20  eal value 0.0), 
9140: 74 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e  then a constrain
9150: 74 0a 20 20 76 69 6f 6c 61 74 69 6f 6e 20 68 61  t.  violation ha
9160: 73 20 6f 63 63 75 72 72 65 64 2e 29 5e 20 5e 49  s occurred.)^ ^I
9170: 66 20 74 68 65 20 43 48 45 43 4b 20 65 78 70 72  f the CHECK expr
9180: 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
9190: 20 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20 61   to NULL, or.  a
91a0: 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72  ny other non-zer
91b0: 6f 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 6e  o value, it is n
91c0: 6f 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  ot a constraint 
91d0: 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 5e 54 68  violation..  ^Th
91e0: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  e expression of 
91f0: 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
9200: 6e 74 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61  nt may not conta
9210: 69 6e 20 61 20 73 75 62 71 75 65 72 79 2e 0a 0a  in a subquery...
9220: 3c 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  <p>CHECK constra
9230: 69 6e 74 73 20 68 61 76 65 20 62 65 65 6e 20 73  ints have been s
9240: 75 70 70 6f 72 74 65 64 20 73 69 6e 63 65 20 5b  upported since [
9250: 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30 5d 2e 20  version 3.3.0]. 
9260: 50 72 69 6f 72 20 74 6f 0a 20 20 76 65 72 73 69  Prior to.  versi
9270: 6f 6e 20 33 2e 33 2e 30 2c 20 43 48 45 43 4b 20  on 3.3.0, CHECK 
9280: 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65  constraints were
9290: 20 70 61 72 73 65 64 20 62 75 74 20 6e 6f 74 20   parsed but not 
92a0: 65 6e 66 6f 72 63 65 64 2e 0a 0a 3c 70 3e 5e 41  enforced...<p>^A
92b0: 20 3c 62 3e 4e 4f 54 20 4e 55 4c 4c 3c 2f 62 3e   <b>NOT NULL</b>
92c0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20   constraint may 
92d0: 6f 6e 6c 79 20 62 65 20 61 74 74 61 63 68 65 64  only be attached
92e0: 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66   to a column def
92f0: 69 6e 69 74 69 6f 6e 2c 0a 20 20 6e 6f 74 20 73  inition,.  not s
9300: 70 65 63 69 66 69 65 64 20 61 73 20 61 20 74 61  pecified as a ta
9310: 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  ble constraint. 
9320: 20 4e 6f 74 20 73 75 72 70 72 69 73 69 6e 67 6c   Not surprisingl
9330: 79 2c 20 5e 28 61 20 4e 4f 54 20 4e 55 4c 4c 0a  y, ^(a NOT NULL.
9340: 20 20 63 6f 6e 73 74 72 61 69 6e 74 20 64 69 63    constraint dic
9350: 74 61 74 65 73 20 74 68 61 74 20 74 68 65 20 61  tates that the a
9360: 73 73 6f 63 69 61 74 65 64 20 63 6f 6c 75 6d 6e  ssociated column
9370: 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e   may not contain
9380: 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 0a 20   a NULL value.. 
9390: 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73   Attempting to s
93a0: 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61  et the column va
93b0: 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 77 68 65 6e  lue to NULL when
93c0: 20 69 6e 73 65 72 74 69 6e 67 20 61 20 6e 65 77   inserting a new
93d0: 20 72 6f 77 20 6f 72 0a 20 20 75 70 64 61 74 69   row or.  updati
93e0: 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6f  ng an existing o
93f0: 6e 65 20 63 61 75 73 65 73 20 61 20 63 6f 6e 73  ne causes a cons
9400: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
9410: 2e 29 5e 0a 0a 3c 70 3e 45 78 61 63 74 6c 79 20  .)^..<p>Exactly 
9420: 68 6f 77 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  how a constraint
9430: 20 76 69 6f 6c 61 74 69 6f 6e 20 69 73 20 64 65   violation is de
9440: 61 6c 74 20 77 69 74 68 20 69 73 20 64 65 74 65  alt with is dete
9450: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20 20  rmined by the.  
9460: 5b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65  [conflict clause
9470: 7c 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66  |constraint conf
9480: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
9490: 61 6c 67 6f 72 69 74 68 6d 5d 2e 20 45 61 63 68  algorithm]. Each
94a0: 20 0a 20 20 50 52 49 4d 41 52 59 20 4b 45 59 2c   .  PRIMARY KEY,
94b0: 20 55 4e 49 51 55 45 2c 20 4e 4f 54 20 4e 55 4c   UNIQUE, NOT NUL
94c0: 4c 20 61 6e 64 20 43 48 45 43 4b 20 63 6f 6e 73  L and CHECK cons
94d0: 74 72 61 69 6e 74 20 68 61 73 20 61 20 64 65 66  traint has a def
94e0: 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 0a 20 20  ault conflict.  
94f0: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
9500: 69 74 68 6d 2e 20 5e 50 52 49 4d 41 52 59 20 4b  ithm. ^PRIMARY K
9510: 45 59 2c 20 55 4e 49 51 55 45 20 61 6e 64 20 4e  EY, UNIQUE and N
9520: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
9530: 6e 74 73 20 6d 61 79 20 62 65 0a 20 20 65 78 70  nts may be.  exp
9540: 6c 69 63 69 74 6c 79 20 61 73 73 69 67 6e 65 64  licitly assigned
9550: 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c   a default confl
9560: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
9570: 6c 67 6f 72 69 74 68 6d 20 62 79 20 69 6e 63 6c  lgorithm by incl
9580: 75 64 69 6e 67 0a 20 20 61 20 5b 63 6f 6e 66 6c  uding.  a [confl
9590: 69 63 74 2d 63 6c 61 75 73 65 5d 20 69 6e 20 74  ict-clause] in t
95a0: 68 65 69 72 20 64 65 66 69 6e 69 74 69 6f 6e 73  heir definitions
95b0: 2e 20 5e 4f 72 2c 20 69 66 20 61 20 63 6f 6e 73  . ^Or, if a cons
95c0: 74 72 61 69 6e 74 20 64 65 66 69 6e 69 74 69 6f  traint definitio
95d0: 6e 0a 20 20 64 6f 65 73 20 6e 6f 74 20 69 6e 63  n.  does not inc
95e0: 6c 75 64 65 20 61 20 5b 63 6f 6e 66 6c 69 63 74  lude a [conflict
95f0: 2d 63 6c 61 75 73 65 5d 20 6f 72 20 69 74 20 69  -clause] or it i
9600: 73 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  s a CHECK constr
9610: 61 69 6e 74 2c 20 74 68 65 20 64 65 66 61 75 6c  aint, the defaul
9620: 74 0a 20 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  t.  conflict res
9630: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
9640: 6d 20 69 73 20 41 42 4f 52 54 2e 20 5e 44 69 66  m is ABORT. ^Dif
9650: 66 65 72 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e  ferent constrain
9660: 74 73 20 77 69 74 68 69 6e 20 74 68 65 0a 20 20  ts within the.  
9670: 73 61 6d 65 20 74 61 62 6c 65 20 6d 61 79 20 68  same table may h
9680: 61 76 65 20 64 69 66 66 65 72 65 6e 74 20 64 65  ave different de
9690: 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72  fault conflict r
96a0: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
96b0: 74 68 6d 73 2e 20 53 65 65 0a 20 20 74 68 65 20  thms. See.  the 
96c0: 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 20 5b  section titled [
96d0: 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72  ON CONFLICT] for
96e0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
96f0: 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e 68  rmation...<tcl>h
9700: 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 77 69 64  d_fragment rowid
9710: 20 7b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   {INTEGER PRIMAR
9720: 59 20 4b 45 59 7d 20 52 4f 57 49 44 20 72 6f 77  Y KEY} ROWID row
9730: 69 64 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52 4f 57  id</tcl>.<h3>ROW
9740: 49 44 73 20 61 6e 64 20 74 68 65 20 49 4e 54 45  IDs and the INTE
9750: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 3c  GER PRIMARY KEY<
9760: 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 76 65 72 79 20  /h3>..<p>^Every 
9770: 72 6f 77 20 6f 66 20 65 76 65 72 79 20 53 51 4c  row of every SQL
9780: 69 74 65 20 74 61 62 6c 65 20 68 61 73 20 61 20  ite table has a 
9790: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
97a0: 74 65 67 65 72 20 6b 65 79 20 0a 74 68 61 74 20  teger key .that 
97b0: 75 6e 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66  uniquely identif
97c0: 69 65 73 20 74 68 65 20 72 6f 77 20 77 69 74 68  ies the row with
97d0: 69 6e 20 69 74 73 20 74 61 62 6c 65 2e 20 54 68  in its table. Th
97e0: 69 73 20 69 6e 74 65 67 65 72 20 69 73 20 75 73  is integer is us
97f0: 75 61 6c 6c 79 0a 63 61 6c 6c 65 64 20 74 68 65  ually.called the
9800: 20 22 72 6f 77 69 64 22 2e 20 5e 54 68 65 20 72   "rowid". ^The r
9810: 6f 77 69 64 20 76 61 6c 75 65 20 63 61 6e 20 62  owid value can b
9820: 65 20 61 63 63 65 73 73 65 64 20 75 73 69 6e 67  e accessed using
9830: 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63   one of the spec
9840: 69 61 6c 0a 63 61 73 65 2d 69 6e 64 65 70 65 6e  ial.case-indepen
9850: 64 65 6e 74 20 6e 61 6d 65 73 20 22 72 6f 77 69  dent names "rowi
9860: 64 22 2c 20 22 6f 69 64 22 2c 20 6f 72 20 22 5f  d", "oid", or "_
9870: 72 6f 77 69 64 5f 22 20 69 6e 20 70 6c 61 63 65  rowid_" in place
9880: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d   of a column nam
9890: 65 2e 0a 5e 49 66 20 61 20 74 61 62 6c 65 20 63  e..^If a table c
98a0: 6f 6e 74 61 69 6e 73 20 61 20 75 73 65 72 20 64  ontains a user d
98b0: 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  efined column na
98c0: 6d 65 64 20 22 72 6f 77 69 64 22 2c 20 22 6f 69  med "rowid", "oi
98d0: 64 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 2c  d" or "_rowid_",
98e0: 0a 74 68 65 6e 20 74 68 61 74 20 6e 61 6d 65 20  .then that name 
98f0: 61 6c 77 61 79 73 20 72 65 66 65 72 73 20 74 68  always refers th
9900: 65 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63  e explicitly dec
9910: 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 20 61 6e 64  lared column and
9920: 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 0a   cannot be used.
9930: 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20  to retrieve the 
9940: 69 6e 74 65 67 65 72 20 72 6f 77 69 64 20 76 61  integer rowid va
9950: 6c 75 65 2e 0a 0a 3c 70 3e 54 68 65 20 64 61 74  lue...<p>The dat
9960: 61 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65  a for each table
9970: 20 69 6e 20 53 51 4c 69 74 65 20 69 73 20 73 74   in SQLite is st
9980: 6f 72 65 64 20 61 73 20 61 20 42 2d 54 72 65 65  ored as a B-Tree
9990: 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
99a0: 69 6e 69 6e 67 0a 61 6e 20 65 6e 74 72 79 20 66  ining.an entry f
99b0: 6f 72 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f  or each table ro
99c0: 77 2c 20 75 73 69 6e 67 20 74 68 65 20 72 6f 77  w, using the row
99d0: 69 64 20 76 61 6c 75 65 20 61 73 20 74 68 65 20  id value as the 
99e0: 6b 65 79 2e 20 54 68 69 73 20 6d 65 61 6e 73 20  key. This means 
99f0: 74 68 61 74 0a 72 65 74 72 69 65 76 69 6e 67 20  that.retrieving 
9a00: 6f 72 20 73 6f 72 74 69 6e 67 20 72 65 63 6f 72  or sorting recor
9a10: 64 73 20 62 79 20 72 6f 77 69 64 20 69 73 20 66  ds by rowid is f
9a20: 61 73 74 2e 20 53 65 61 72 63 68 69 6e 67 20 66  ast. Searching f
9a30: 6f 72 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  or a record with
9a40: 20 61 0a 73 70 65 63 69 66 69 63 20 72 6f 77 69   a.specific rowi
9a50: 64 2c 20 6f 72 20 66 6f 72 20 61 6c 6c 20 72 65  d, or for all re
9a60: 63 6f 72 64 73 20 77 69 74 68 20 72 6f 77 69 64  cords with rowid
9a70: 73 20 77 69 74 68 69 6e 20 61 20 73 70 65 63 69  s within a speci
9a80: 66 69 65 64 20 72 61 6e 67 65 20 69 73 0a 61 72  fied range is.ar
9a90: 6f 75 6e 64 20 74 77 69 63 65 20 61 73 20 66 61  ound twice as fa
9aa0: 73 74 20 61 73 20 61 20 73 69 6d 69 6c 61 72 20  st as a similar 
9ab0: 73 65 61 72 63 68 20 6d 61 64 65 20 62 79 20 73  search made by s
9ac0: 70 65 63 69 66 79 69 6e 67 20 61 6e 79 20 6f 74  pecifying any ot
9ad0: 68 65 72 20 50 52 49 4d 41 52 59 0a 4b 45 59 20  her PRIMARY.KEY 
9ae0: 6f 72 20 69 6e 64 65 78 65 64 20 76 61 6c 75 65  or indexed value
9af0: 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68 20 6f 6e 65  ...<p> ^With one
9b00: 20 65 78 63 65 70 74 69 6f 6e 2c 20 69 66 20 61   exception, if a
9b10: 20 74 61 62 6c 65 20 68 61 73 20 61 20 70 72 69   table has a pri
9b20: 6d 61 72 79 20 6b 65 79 20 74 68 61 74 20 63 6f  mary key that co
9b30: 6e 73 69 73 74 73 20 6f 66 20 61 20 73 69 6e 67  nsists of a sing
9b40: 6c 65 0a 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74  le.column, and t
9b50: 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65  he declared type
9b60: 20 6f 66 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20   of that column 
9b70: 69 73 20 22 49 4e 54 45 47 45 52 22 20 69 6e 20  is "INTEGER" in 
9b80: 61 6e 79 20 6d 69 78 74 75 72 65 20 6f 66 0a 75  any mixture of.u
9b90: 70 70 65 72 20 61 6e 64 20 6c 6f 77 65 72 20 63  pper and lower c
9ba0: 61 73 65 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ase, then the co
9bb0: 6c 75 6d 6e 20 62 65 63 6f 6d 65 73 20 61 6e 20  lumn becomes an 
9bc0: 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f  alias for the ro
9bd0: 77 69 64 2e 20 53 75 63 68 20 61 0a 63 6f 6c 75  wid. Such a.colu
9be0: 6d 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 72 65  mn is usually re
9bf0: 66 65 72 72 65 64 20 74 6f 20 61 73 20 61 6e 20  ferred to as an 
9c00: 22 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79  "integer primary
9c10: 20 6b 65 79 22 2e 20 41 20 50 52 49 4d 41 52 59   key". A PRIMARY
9c20: 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a 6f 6e 6c 79   KEY column.only
9c30: 20 62 65 63 6f 6d 65 73 20 61 6e 20 69 6e 74 65   becomes an inte
9c40: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
9c50: 69 66 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  if the declared 
9c60: 74 79 70 65 20 6e 61 6d 65 20 69 73 20 65 78 61  type name is exa
9c70: 63 74 6c 79 0a 22 49 4e 54 45 47 45 52 22 2e 20  ctly."INTEGER". 
9c80: 20 5e 4f 74 68 65 72 20 69 6e 74 65 67 65 72 20   ^Other integer 
9c90: 74 79 70 65 20 6e 61 6d 65 73 20 6c 69 6b 65 20  type names like 
9ca0: 22 49 4e 54 22 20 6f 72 20 22 42 49 47 49 4e 54  "INT" or "BIGINT
9cb0: 22 20 6f 72 20 22 53 48 4f 52 54 20 49 4e 54 45  " or "SHORT INTE
9cc0: 47 45 52 22 0a 6f 72 20 22 55 4e 53 49 47 4e 45  GER".or "UNSIGNE
9cd0: 44 20 49 4e 54 45 47 45 52 22 20 63 61 75 73 65  D INTEGER" cause
9ce0: 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  s the primary ke
9cf0: 79 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 68 61  y column to beha
9d00: 76 65 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72  ve as an ordinar
9d10: 79 0a 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 77  y.table column w
9d20: 69 74 68 20 69 6e 74 65 67 65 72 20 5b 61 66 66  ith integer [aff
9d30: 69 6e 69 74 79 5d 20 61 6e 64 20 61 20 75 6e 69  inity] and a uni
9d40: 71 75 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20 61  que index, not a
9d50: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74  s an alias for.t
9d60: 68 65 20 72 6f 77 69 64 2e 0a 0a 3c 70 3e 20 54  he rowid...<p> T
9d70: 68 65 20 65 78 63 65 70 74 69 6f 6e 20 6d 65 6e  he exception men
9d80: 74 69 6f 6e 65 64 20 61 62 6f 76 65 20 69 73 20  tioned above is 
9d90: 74 68 61 74 20 5e 69 66 20 74 68 65 20 64 65 63  that ^if the dec
9da0: 6c 61 72 61 74 69 6f 6e 20 6f 66 20 61 20 63 6f  laration of a co
9db0: 6c 75 6d 6e 20 77 69 74 68 0a 64 65 63 6c 61 72  lumn with.declar
9dc0: 65 64 20 74 79 70 65 20 22 49 4e 54 45 47 45 52  ed type "INTEGER
9dd0: 22 20 69 6e 63 6c 75 64 65 73 20 61 6e 20 22 50  " includes an "P
9de0: 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43 22  RIMARY KEY DESC"
9df0: 20 63 6c 61 75 73 65 2c 20 69 74 20 64 6f 65 73   clause, it does
9e00: 20 6e 6f 74 0a 62 65 63 6f 6d 65 20 61 6e 20 61   not.become an a
9e10: 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77  lias for the row
9e20: 69 64 20 61 6e 64 20 69 73 20 6e 6f 74 20 63 6c  id and is not cl
9e30: 61 73 73 69 66 69 65 64 20 61 73 20 61 6e 20 69  assified as an i
9e40: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
9e50: 65 79 2e 0a 54 68 69 73 20 71 75 69 72 6b 20 69  ey..This quirk i
9e60: 73 20 6e 6f 74 20 62 79 20 64 65 73 69 67 6e 2e  s not by design.
9e70: 20 49 74 20 69 73 20 64 75 65 20 74 6f 20 61 20   It is due to a 
9e80: 62 75 67 20 69 6e 20 65 61 72 6c 79 20 76 65 72  bug in early ver
9e90: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e  sions of SQLite.
9ea0: 0a 42 75 74 20 66 69 78 69 6e 67 20 74 68 65 20  .But fixing the 
9eb0: 62 75 67 20 63 6f 75 6c 64 20 72 65 73 75 6c 74  bug could result
9ec0: 20 69 6e 20 76 65 72 79 20 73 65 72 69 6f 75 73   in very serious
9ed0: 20 62 61 63 6b 77 61 72 64 73 20 69 6e 63 6f 6d   backwards incom
9ee0: 70 61 74 69 62 69 6c 69 74 69 65 73 2e 0a 54 68  patibilities..Th
9ef0: 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c 6f 70  e SQLite develop
9f00: 65 72 73 20 66 65 65 6c 20 74 68 61 74 20 67 6f  ers feel that go
9f10: 6f 66 79 20 62 65 68 61 76 69 6f 72 20 69 6e 20  ofy behavior in 
9f20: 61 6e 20 63 6f 72 6e 65 72 20 63 61 73 65 20 69  an corner case i
9f30: 73 20 66 61 72 20 62 65 74 74 65 72 0a 74 68 61  s far better.tha
9f40: 6e 20 61 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  n a compatibilit
9f50: 79 20 62 72 65 61 6b 2c 20 73 6f 20 74 68 65 20  y break, so the 
9f60: 6f 72 69 67 69 6e 61 6c 20 62 65 68 61 76 69 6f  original behavio
9f70: 72 20 69 73 20 72 65 74 61 69 6e 65 64 2e 20 54  r is retained. T
9f80: 68 69 73 20 6d 65 61 6e 73 0a 74 68 61 74 20 5e  his means.that ^
9f90: 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  (the following t
9fa0: 68 72 65 65 20 74 61 62 6c 65 20 64 65 63 6c 61  hree table decla
9fb0: 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63 61 75 73  rations all caus
9fc0: 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78 22  e the column "x"
9fd0: 20 74 6f 20 62 65 20 61 6e 0a 61 6c 69 61 73 20   to be an.alias 
9fe0: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 28 61  for the rowid (a
9ff0: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
a000: 79 20 6b 65 79 29 3a 0a 0a 3c 75 6c 3e 0a 3c 6c  y key):..<ul>.<l
a010: 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42  i><tt>CREATE TAB
a020: 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 20 50  LE t(x INTEGER P
a030: 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20  RIMARY KEY ASC, 
a040: 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e  y, z);</tt>.<li>
a050: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
a060: 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c   t(x INTEGER, y,
a070: 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28   z, PRIMARY KEY(
a080: 78 20 41 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 6c  x ASC));</tt>.<l
a090: 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42  i><tt>CREATE TAB
a0a0: 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20  LE t(x INTEGER, 
a0b0: 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45  y, z, PRIMARY KE
a0c0: 59 28 78 20 44 45 53 43 29 29 3b 3c 2f 74 74 3e  Y(x DESC));</tt>
a0d0: 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 42 75 74  .</ul>)^..<p>But
a0e0: 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67   ^(the following
a0f0: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 64 6f 65   declaration doe
a100: 73 20 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20  s not result in 
a110: 22 78 22 20 62 65 69 6e 67 20 61 6e 20 61 6c 69  "x" being an ali
a120: 61 73 20 66 6f 72 0a 74 68 65 20 72 6f 77 69 64  as for.the rowid
a130: 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43  :.<ul>.<li><tt>C
a140: 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20  REATE TABLE t(x 
a150: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
a160: 4b 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b  KEY DESC, y, z);
a170: 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c  </tt>.</ul>)^..<
a180: 70 3e 5e 52 6f 77 69 64 20 76 61 6c 75 65 73 20  p>^Rowid values 
a190: 6d 61 79 20 62 65 20 6d 6f 64 69 66 69 65 64 20  may be modified 
a1a0: 75 73 69 6e 67 20 61 6e 20 55 50 44 41 54 45 20  using an UPDATE 
a1b0: 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74 68 65  statement in the
a1c0: 20 73 61 6d 65 0a 77 61 79 20 61 73 20 61 6e 79   same.way as any
a1d0: 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e 20 76 61   other column va
a1e0: 6c 75 65 20 63 61 6e 2c 20 65 69 74 68 65 72 20  lue can, either 
a1f0: 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65  using one of the
a200: 20 62 75 69 6c 74 2d 69 6e 20 61 6c 69 61 73 65   built-in aliase
a210: 73 0a 28 22 72 6f 77 69 64 22 2c 20 22 6f 69 64  s.("rowid", "oid
a220: 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 29 20  " or "_rowid_") 
a230: 6f 72 20 62 79 20 75 73 69 6e 67 20 61 6e 20 61  or by using an a
a240: 6c 69 61 73 20 63 72 65 61 74 65 64 20 62 79 20  lias created by 
a250: 61 6e 20 69 6e 74 65 67 65 72 0a 70 72 69 6d 61  an integer.prima
a260: 72 79 20 6b 65 79 2e 20 5e 53 69 6d 69 6c 61 72  ry key. ^Similar
a270: 6c 79 2c 20 61 6e 20 49 4e 53 45 52 54 20 73 74  ly, an INSERT st
a280: 61 74 65 6d 65 6e 74 20 6d 61 79 20 70 72 6f 76  atement may prov
a290: 69 64 65 20 61 20 76 61 6c 75 65 20 74 6f 20 75  ide a value to u
a2a0: 73 65 20 61 73 20 74 68 65 0a 72 6f 77 69 64 20  se as the.rowid 
a2b0: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73  for each row ins
a2c0: 65 72 74 65 64 2e 20 5e 28 55 6e 6c 69 6b 65 20  erted. ^(Unlike 
a2d0: 6e 6f 72 6d 61 6c 20 53 51 4c 69 74 65 20 63 6f  normal SQLite co
a2e0: 6c 75 6d 6e 73 2c 20 61 6e 20 69 6e 74 65 67 65  lumns, an intege
a2f0: 72 20 70 72 69 6d 61 72 79 0a 6b 65 79 20 6f 72  r primary.key or
a300: 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 6d 75   rowid column mu
a310: 73 74 20 63 6f 6e 74 61 69 6e 20 69 6e 74 65 67  st contain integ
a320: 65 72 20 76 61 6c 75 65 73 2e 20 49 6e 74 65 67  er values. Integ
a330: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  er primary key o
a340: 72 20 72 6f 77 69 64 0a 63 6f 6c 75 6d 6e 73 20  r rowid.columns 
a350: 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20  are not able to 
a360: 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f  hold floating po
a370: 69 6e 74 20 76 61 6c 75 65 73 2c 20 73 74 72 69  int values, stri
a380: 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f 72 20 4e  ngs, BLOBs, or N
a390: 55 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20  ULLs.)^..<p>^If 
a3a0: 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  an UPDATE statem
a3b0: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
a3c0: 73 65 74 20 61 6e 20 69 6e 74 65 67 65 72 20 70  set an integer p
a3d0: 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f  rimary key or ro
a3e0: 77 69 64 20 63 6f 6c 75 6d 6e 0a 74 6f 20 61 20  wid column.to a 
a3f0: 4e 55 4c 4c 20 6f 72 20 62 6c 6f 62 20 76 61 6c  NULL or blob val
a400: 75 65 2c 20 6f 72 20 74 6f 20 61 20 73 74 72 69  ue, or to a stri
a410: 6e 67 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65  ng or real value
a420: 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20   that cannot be 
a430: 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f 6e 76 65  losslessly.conve
a440: 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
a450: 65 72 2c 20 61 20 22 64 61 74 61 74 79 70 65 20  er, a "datatype 
a460: 6d 69 73 6d 61 74 63 68 22 20 65 72 72 6f 72 20  mismatch" error 
a470: 6f 63 63 75 72 73 20 61 6e 64 20 74 68 65 20 73  occurs and the s
a480: 74 61 74 65 6d 65 6e 74 0a 69 73 20 61 62 6f 72  tatement.is abor
a490: 74 65 64 2e 20 5e 49 66 20 61 6e 20 49 4e 53 45  ted. ^If an INSE
a4a0: 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74  RT statement att
a4b0: 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20  empts to insert 
a4c0: 61 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f 72  a blob value, or
a4d0: 20 61 20 73 74 72 69 6e 67 0a 6f 72 20 72 65 61   a string.or rea
a4e0: 6c 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  l value that can
a4f0: 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c  not be losslessl
a500: 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
a510: 6e 20 69 6e 74 65 67 65 72 20 69 6e 74 6f 20 61  n integer into a
a520: 6e 0a 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n.integer primar
a530: 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63  y key or rowid c
a540: 6f 6c 75 6d 6e 2c 20 61 20 22 64 61 74 61 74 79  olumn, a "dataty
a550: 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72  pe mismatch" err
a560: 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68  or occurs and th
a570: 65 0a 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  e.statement is a
a580: 62 6f 72 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20  borted...<p>^If 
a590: 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
a5a0: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
a5b0: 69 6e 73 65 72 74 20 61 20 4e 55 4c 4c 20 76 61  insert a NULL va
a5c0: 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f 77 69 64  lue into a rowid
a5d0: 20 6f 72 0a 69 6e 74 65 67 65 72 20 70 72 69 6d   or.integer prim
a5e0: 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 2c 20  ary key column, 
a5f0: 74 68 65 20 73 79 73 74 65 6d 20 63 68 6f 6f 73  the system choos
a600: 65 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  es an integer va
a610: 6c 75 65 20 74 6f 20 75 73 65 20 61 73 20 74 68  lue to use as th
a620: 65 0a 72 6f 77 69 64 20 61 75 74 6f 6d 61 74 69  e.rowid automati
a630: 63 61 6c 6c 79 2e 20 41 20 64 65 74 61 69 6c 65  cally. A detaile
a640: 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  d description of
a650: 20 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f 6e   how this is don
a660: 65 20 69 73 20 70 72 6f 76 69 64 65 64 0a 3c 61  e is provided.<a
a670: 20 68 72 65 66 3d 22 61 75 74 6f 69 6e 63 2e 68   href="autoinc.h
a680: 74 6d 6c 22 3e 73 65 70 61 72 61 74 65 6c 79 3c  tml">separately<
a690: 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54  /a>.</p>..<p>^(T
a6a0: 68 65 20 5b 70 61 72 65 6e 74 20 6b 65 79 5d 20  he [parent key] 
a6b0: 6f 66 20 61 20 5b 66 6f 72 65 69 67 6e 20 6b 65  of a [foreign ke
a6c0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 5d 20 69 73  y constraint] is
a6d0: 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a   not allowed to.
a6e0: 75 73 65 20 74 68 65 20 72 6f 77 69 64 2e 20 20  use the rowid.  
a6f0: 54 68 65 20 70 61 72 65 6e 74 20 6b 65 79 20 6d  The parent key m
a700: 75 73 74 20 75 73 65 64 20 6e 61 6d 65 64 20 63  ust used named c
a710: 6f 6c 75 6d 6e 73 20 6f 6e 6c 79 2e 29 5e 3c 2f  olumns only.)^</
a720: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
a730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a770: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
a780: 20 7b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   {CREATE TRIGGER
a790: 7d 20 63 72 65 61 74 65 74 72 69 67 67 65 72 20  } createtrigger 
a7a0: 7b 7b 43 52 45 41 54 45 20 54 52 49 47 47 45 52  {{CREATE TRIGGER
a7b0: 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
a7c0: 6d 20 63 72 65 61 74 65 2d 74 72 69 67 67 65 72  m create-trigger
a7d0: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
a7e0: 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 54  <p>^The CREATE T
a7f0: 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
a800: 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
a810: 74 72 69 67 67 65 72 73 20 74 6f 20 74 68 65 20  triggers to the 
a820: 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  .database schema
a830: 2e 20 5e 54 72 69 67 67 65 72 73 20 61 72 65 20  . ^Triggers are 
a840: 64 61 74 61 62 61 73 65 20 6f 70 65 72 61 74 69  database operati
a850: 6f 6e 73 20 0a 74 68 61 74 20 61 72 65 20 61 75  ons .that are au
a860: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 65 72 66  tomatically perf
a870: 6f 72 6d 65 64 20 77 68 65 6e 20 61 20 73 70 65  ormed when a spe
a880: 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65 20  cified database 
a890: 65 76 65 6e 74 0a 6f 63 63 75 72 73 2e 20 20 3c  event.occurs.  <
a8a0: 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 74 72 69 67 67  /p>..<p>^A trigg
a8b0: 65 72 20 6d 61 79 20 62 65 20 73 70 65 63 69 66  er may be specif
a8c0: 69 65 64 20 74 6f 20 66 69 72 65 20 77 68 65 6e  ied to fire when
a8d0: 65 76 65 72 20 61 20 5b 44 45 4c 45 54 45 5d 2c  ever a [DELETE],
a8e0: 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f 72 20 5b 55   [INSERT],.or [U
a8f0: 50 44 41 54 45 5d 20 6f 66 20 61 0a 70 61 72 74  PDATE] of a.part
a900: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
a910: 74 61 62 6c 65 20 6f 63 63 75 72 73 2c 20 6f 72  table occurs, or
a920: 20 77 68 65 6e 65 76 65 72 20 61 6e 20 5b 55 50   whenever an [UP
a930: 44 41 54 45 5d 20 6f 63 63 75 72 73 20 6f 6e 0a  DATE] occurs on.
a940: 6f 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73  on one or more s
a950: 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73  pecified columns
a960: 20 6f 66 20 61 20 74 61 62 6c 65 2e 3c 2f 70 3e   of a table.</p>
a970: 0a 0a 3c 70 3e 5e 41 74 20 74 68 69 73 20 74 69  ..<p>^At this ti
a980: 6d 65 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  me SQLite suppor
a990: 74 73 20 6f 6e 6c 79 20 46 4f 52 20 45 41 43 48  ts only FOR EACH
a9a0: 20 52 4f 57 20 74 72 69 67 67 65 72 73 2c 20 6e   ROW triggers, n
a9b0: 6f 74 20 46 4f 52 20 45 41 43 48 0a 53 54 41 54  ot FOR EACH.STAT
a9c0: 45 4d 45 4e 54 20 74 72 69 67 67 65 72 73 2e 20  EMENT triggers. 
a9d0: 5e 48 65 6e 63 65 20 65 78 70 6c 69 63 69 74 6c  ^Hence explicitl
a9e0: 79 20 73 70 65 63 69 66 79 69 6e 67 20 46 4f 52  y specifying FOR
a9f0: 20 45 41 43 48 20 52 4f 57 20 69 73 20 6f 70 74   EACH ROW is opt
aa00: 69 6f 6e 61 6c 2e 0a 5e 46 4f 52 20 45 41 43 48  ional..^FOR EACH
aa10: 20 52 4f 57 20 69 6d 70 6c 69 65 73 20 74 68 61   ROW implies tha
aa20: 74 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  t the SQL statem
aa30: 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 69  ents specified i
aa40: 6e 20 74 68 65 20 74 72 69 67 67 65 72 0a 6d 61  n the trigger.ma
aa50: 79 20 62 65 20 65 78 65 63 75 74 65 64 20 28 64  y be executed (d
aa60: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
aa70: 57 48 45 4e 20 63 6c 61 75 73 65 29 20 66 6f 72  WHEN clause) for
aa80: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 72   each database r
aa90: 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65 72 74 65  ow being.inserte
aaa0: 64 2c 20 75 70 64 61 74 65 64 20 6f 72 20 64 65  d, updated or de
aab0: 6c 65 74 65 64 20 62 79 20 74 68 65 20 73 74 61  leted by the sta
aac0: 74 65 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74  tement causing t
aad0: 68 65 20 74 72 69 67 67 65 72 20 74 6f 20 66 69  he trigger to fi
aae0: 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 42 6f  re.</p>..<p>^(Bo
aaf0: 74 68 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75  th the WHEN clau
ab00: 73 65 20 61 6e 64 20 74 68 65 20 74 72 69 67 67  se and the trigg
ab10: 65 72 20 61 63 74 69 6f 6e 73 20 6d 61 79 20 61  er actions may a
ab20: 63 63 65 73 73 20 65 6c 65 6d 65 6e 74 73 20 6f  ccess elements o
ab30: 66 20 0a 74 68 65 20 72 6f 77 20 62 65 69 6e 67  f .the row being
ab40: 20 69 6e 73 65 72 74 65 64 2c 20 64 65 6c 65 74   inserted, delet
ab50: 65 64 20 6f 72 20 75 70 64 61 74 65 64 20 75 73  ed or updated us
ab60: 69 6e 67 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ing references o
ab70: 66 20 74 68 65 20 66 6f 72 6d 20 0a 22 4e 45 57  f the form ."NEW
ab80: 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  .<i>column-name<
ab90: 2f 69 3e 22 20 61 6e 64 20 22 4f 4c 44 2e 3c 69  /i>" and "OLD.<i
aba0: 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e  >column-name</i>
abb0: 22 2c 20 77 68 65 72 65 0a 3c 69 3e 63 6f 6c 75  ", where.<i>colu
abc0: 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 74  mn-name</i> is t
abd0: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c  he name of a col
abe0: 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 74 61 62  umn from the tab
abf0: 6c 65 20 74 68 61 74 20 74 68 65 20 74 72 69 67  le that the trig
ac00: 67 65 72 0a 69 73 20 61 73 73 6f 63 69 61 74 65  ger.is associate
ac10: 64 20 77 69 74 68 2e 29 5e 20 5e 28 4f 4c 44 20  d with.)^ ^(OLD 
ac20: 61 6e 64 20 4e 45 57 20 72 65 66 65 72 65 6e 63  and NEW referenc
ac30: 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75  es may only be u
ac40: 73 65 64 20 69 6e 20 74 72 69 67 67 65 72 73 20  sed in triggers 
ac50: 6f 6e 0a 65 76 65 6e 74 73 20 66 6f 72 20 77 68  on.events for wh
ac60: 69 63 68 20 74 68 65 79 20 61 72 65 20 72 65 6c  ich they are rel
ac70: 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77  evant, as follow
ac80: 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62  s:</p>..<table b
ac90: 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64  order=0 cellpadd
aca0: 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64  ing=10>.<tr>.<td
acb0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
acc0: 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74  ign="right" widt
acd0: 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45 52 54 3c  h=120><i>INSERT<
ace0: 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  /i></td>.<td val
acf0: 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 72 65  ign="top">NEW re
ad00: 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c  ferences are val
ad10: 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  id</td>.</tr>.<t
ad20: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
ad30: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
ad40: 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 55  " width=120><i>U
ad50: 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c  PDATE</i></td>.<
ad60: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
ad70: 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72 65 66 65  NEW and OLD refe
ad80: 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64  rences are valid
ad90: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
ada0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
adb0: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  " align="right" 
adc0: 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 44 45 4c  width=120><i>DEL
add0: 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64  ETE</i></td>.<td
ade0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4f 4c   valign="top">OL
adf0: 44 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65  D references are
ae00: 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72   valid</td>.</tr
ae10: 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 70 3e 29  >.</table>.</p>)
ae20: 5e 0a 0a 3c 70 3e 5e 49 66 20 61 20 57 48 45 4e  ^..<p>^If a WHEN
ae30: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
ae40: 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61  ied, the SQL sta
ae50: 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
ae60: 64 0a 61 72 65 20 6f 6e 6c 79 20 65 78 65 63 75  d.are only execu
ae70: 74 65 64 20 66 6f 72 20 72 6f 77 73 20 66 6f 72  ted for rows for
ae80: 20 77 68 69 63 68 20 74 68 65 20 57 48 45 4e 0a   which the WHEN.
ae90: 63 6c 61 75 73 65 20 69 73 20 74 72 75 65 2e 20  clause is true. 
aea0: 5e 49 66 20 6e 6f 20 57 48 45 4e 20 63 6c 61 75  ^If no WHEN clau
aeb0: 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20  se is supplied, 
aec0: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
aed0: 74 73 0a 61 72 65 20 65 78 65 63 75 74 65 64 20  ts.are executed 
aee0: 66 6f 72 20 61 6c 6c 20 72 6f 77 73 2e 3c 2f 70  for all rows.</p
aef0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 42 45 46 4f 52  >..<p>^The BEFOR
af00: 45 20 6f 72 20 41 46 54 45 52 20 6b 65 79 77 6f  E or AFTER keywo
af10: 72 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  rd determines wh
af20: 65 6e 20 74 68 65 20 74 72 69 67 67 65 72 20 61  en the trigger a
af30: 63 74 69 6f 6e 73 0a 77 69 6c 6c 20 62 65 20 65  ctions.will be e
af40: 78 65 63 75 74 65 64 20 72 65 6c 61 74 69 76 65  xecuted relative
af50: 20 74 6f 20 74 68 65 20 69 6e 73 65 72 74 69 6f   to the insertio
af60: 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20  n, modification 
af70: 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20 74 68  or removal of th
af80: 65 0a 61 73 73 6f 63 69 61 74 65 64 20 72 6f 77  e.associated row
af90: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f  .</p>..<p>^An [O
afa0: 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75  N CONFLICT] clau
afb0: 73 65 20 6d 61 79 20 62 65 20 73 70 65 63 69 66  se may be specif
afc0: 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  ied as part of a
afd0: 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72 20 5b 49  n [UPDATE] or [I
afe0: 4e 53 45 52 54 5d 0a 61 63 74 69 6f 6e 20 77 69  NSERT].action wi
aff0: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
b000: 20 74 68 65 20 74 72 69 67 67 65 72 2e 0a 5e 48   the trigger..^H
b010: 6f 77 65 76 65 72 20 69 66 20 61 6e 20 5b 4f 4e  owever if an [ON
b020: 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73   CONFLICT] claus
b030: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  e is specified a
b040: 73 20 70 61 72 74 20 6f 66 20 0a 74 68 65 20 73  s part of .the s
b050: 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e 67  tatement causing
b060: 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f 20   the trigger to 
b070: 66 69 72 65 2c 20 74 68 65 6e 20 63 6f 6e 66 6c  fire, then confl
b080: 69 63 74 20 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c  ict handling.pol
b090: 69 63 79 20 6f 66 20 74 68 65 20 6f 75 74 65 72  icy of the outer
b0a0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
b0b0: 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f 70 3e 0a  ed instead.</p>.
b0c0: 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72  .<p>^Triggers ar
b0d0: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
b0e0: 5b 44 52 4f 50 20 54 52 49 47 47 45 52 20 7c 20  [DROP TRIGGER | 
b0f0: 64 72 6f 70 70 65 64 5d 0a 77 68 65 6e 20 74 68  dropped].when th
b100: 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  e table that the
b110: 79 20 61 72 65 20 0a 61 73 73 6f 63 69 61 74 65  y are .associate
b120: 64 20 77 69 74 68 20 28 74 68 65 20 3c 69 3e 74  d with (the <i>t
b130: 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 61  able-name</i> ta
b140: 62 6c 65 29 20 69 73 20 0a 5b 44 52 4f 50 20 54  ble) is .[DROP T
b150: 41 42 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 2e  ABLE | dropped].
b160: 20 20 5e 48 6f 77 65 76 65 72 20 69 66 20 74 68    ^However if th
b170: 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e  e trigger action
b180: 73 20 72 65 66 65 72 65 6e 63 65 0a 6f 74 68 65  s reference.othe
b190: 72 20 74 61 62 6c 65 73 2c 20 74 68 65 20 74 72  r tables, the tr
b1a0: 69 67 67 65 72 20 69 73 20 6e 6f 74 20 64 72 6f  igger is not dro
b1b0: 70 70 65 64 20 6f 72 20 6d 6f 64 69 66 69 65 64  pped or modified
b1c0: 20 69 66 20 74 68 6f 73 65 20 6f 74 68 65 72 0a   if those other.
b1d0: 74 61 62 6c 65 73 20 61 72 65 20 5b 44 52 4f 50  tables are [DROP
b1e0: 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70 65 64   TABLE | dropped
b1f0: 5d 20 6f 72 20 5b 41 4c 54 45 52 20 54 41 42 4c  ] or [ALTER TABL
b200: 45 20 7c 20 6d 6f 64 69 66 69 65 64 5d 2e 3c 2f  E | modified].</
b210: 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73  p>..<p>^Triggers
b220: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69   are removed usi
b230: 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 52 49  ng the [DROP TRI
b240: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
b250: 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 79 6e 74 61 78  </p>..<h3>Syntax
b260: 20 52 65 73 74 72 69 63 74 69 6f 6e 73 20 4f 6e   Restrictions On
b270: 20 55 50 44 41 54 45 2c 20 44 45 4c 45 54 45 2c   UPDATE, DELETE,
b280: 20 61 6e 64 20 49 4e 53 45 52 54 20 53 74 61 74   and INSERT Stat
b290: 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 0a 20 20  ements Within.  
b2a0: 20 20 54 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a    Triggers</h3>.
b2b0: 0a 3c 70 3e 5e 54 68 65 20 5b 55 50 44 41 54 45  .<p>^The [UPDATE
b2c0: 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61 6e 64  ], [DELETE], and
b2d0: 20 5b 49 4e 53 45 52 54 5d 0a 73 74 61 74 65 6d   [INSERT].statem
b2e0: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
b2f0: 67 65 72 73 20 64 6f 20 6e 6f 74 20 73 75 70 70  gers do not supp
b300: 6f 72 74 0a 74 68 65 20 66 75 6c 6c 20 73 79 6e  ort.the full syn
b310: 74 61 78 20 66 6f 72 20 5b 55 50 44 41 54 45 5d  tax for [UPDATE]
b320: 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20  , [DELETE], and 
b330: 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65  [INSERT] stateme
b340: 6e 74 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  nts.  The follow
b350: 69 6e 67 0a 72 65 73 74 72 69 63 74 69 6f 6e 73  ing.restrictions
b360: 20 61 70 70 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c   apply:</p>..<ul
b370: 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54 68  >.<li><p>.  ^(Th
b380: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
b390: 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66 69  ble to be modifi
b3a0: 65 64 20 69 6e 20 61 6e 20 5b 55 50 44 41 54 45  ed in an [UPDATE
b3b0: 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 6f 72 20  ], [DELETE], or 
b3c0: 5b 49 4e 53 45 52 54 5d 0a 20 20 73 74 61 74 65  [INSERT].  state
b3d0: 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 61 6e 20  ment must be an 
b3e0: 75 6e 71 75 61 6c 69 66 69 65 64 20 74 61 62 6c  unqualified tabl
b3f0: 65 20 6e 61 6d 65 2e 20 20 49 6e 20 6f 74 68 65  e name.  In othe
b400: 72 20 77 6f 72 64 73 2c 20 6f 6e 65 20 6d 75 73  r words, one mus
b410: 74 0a 20 20 75 73 65 20 6a 75 73 74 20 22 3c 69  t.  use just "<i
b420: 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22 20  >tablename</i>" 
b430: 6e 6f 74 20 22 3c 69 3e 64 61 74 61 62 61 73 65  not "<i>database
b440: 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e 74  </i><b>.</b><i>t
b450: 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22 0a 20 20  ablename</i>".  
b460: 77 68 65 6e 20 73 70 65 63 69 66 79 69 6e 67 20  when specifying 
b470: 74 68 65 20 74 61 62 6c 65 2e 29 5e 20 20 5e 54  the table.)^  ^T
b480: 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d  he table to be m
b490: 6f 64 69 66 69 65 64 20 6d 75 73 74 20 65 78 69  odified must exi
b4a0: 73 74 20 69 6e 20 74 68 65 0a 20 20 73 61 6d 65  st in the.  same
b4b0: 20 64 61 74 61 62 61 73 65 20 61 73 20 74 68 65   database as the
b4c0: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
b4d0: 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
b4e0: 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64 2e  ger is attached.
b4f0: 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  .  </p></li>..<l
b500: 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 22 49 4e  i><p>.  ^The "IN
b510: 53 45 52 54 20 49 4e 54 4f 20 3c 69 3e 74 61 62  SERT INTO <i>tab
b520: 6c 65 3c 2f 69 3e 20 44 45 46 41 55 4c 54 20 56  le</i> DEFAULT V
b530: 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74  ALUES" form of t
b540: 68 65 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74  he [INSERT] stat
b550: 65 6d 65 6e 74 0a 20 20 69 73 20 6e 6f 74 20 73  ement.  is not s
b560: 75 70 70 6f 72 74 65 64 2e 0a 20 20 3c 2f 70 3e  upported..  </p>
b570: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20  </li>..<li><p>. 
b580: 20 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59   ^The INDEXED BY
b590: 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44   and NOT INDEXED
b5a0: 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74   clauses are not
b5b0: 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 5b   supported for [
b5c0: 55 50 44 41 54 45 5d 20 61 6e 64 0a 20 20 5b 44  UPDATE] and.  [D
b5d0: 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  ELETE] statement
b5e0: 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  s..  </p></li>..
b5f0: 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20  <li><p>.  ^(The 
b600: 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
b610: 49 54 20 63 6c 61 75 73 65 73 20 6f 6e 20 5b 55  IT clauses on [U
b620: 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45  PDATE] and [DELE
b630: 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 61  TE] statements a
b640: 72 65 20 6e 6f 74 0a 20 20 73 75 70 70 6f 72 74  re not.  support
b650: 65 64 2e 20 20 4f 52 44 45 52 20 42 59 20 61 6e  ed.  ORDER BY an
b660: 64 20 4c 49 4d 49 54 20 61 72 65 20 6e 6f 74 20  d LIMIT are not 
b670: 6e 6f 72 6d 61 6c 6c 79 20 73 75 70 70 6f 72 74  normally support
b680: 65 64 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 20  ed for [UPDATE] 
b690: 6f 72 0a 20 20 5b 44 45 4c 45 54 45 5d 20 69 6e  or.  [DELETE] in
b6a0: 20 61 6e 79 20 63 6f 6e 74 65 78 74 20 62 75 74   any context but
b6b0: 20 63 61 6e 20 62 65 20 65 6e 61 62 6c 65 64 20   can be enabled 
b6c0: 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74  for top-level st
b6d0: 61 74 65 6d 65 6e 74 73 0a 20 20 75 73 69 6e 67  atements.  using
b6e0: 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41   the [SQLITE_ENA
b6f0: 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
b700: 45 5f 4c 49 4d 49 54 5d 20 63 6f 6d 70 69 6c 65  E_LIMIT] compile
b710: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 48  -time option.  H
b720: 6f 77 65 76 65 72 2c 0a 20 20 74 68 61 74 20 63  owever,.  that c
b730: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
b740: 6f 6e 20 6f 6e 6c 79 20 61 70 70 6c 69 65 73 20  on only applies 
b750: 74 6f 20 74 6f 70 2d 6c 65 76 65 6c 20 5b 55 50  to top-level [UP
b760: 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54  DATE] and [DELET
b770: 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 2c  E].  statements,
b780: 20 6e 6f 74 20 5b 55 50 44 41 54 45 5d 20 61 6e   not [UPDATE] an
b790: 64 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65  d [DELETE] state
b7a0: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
b7b0: 67 67 65 72 73 2e 29 5e 0a 20 20 3c 2f 70 3e 3c  ggers.)^.  </p><
b7c0: 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c  /li>.</ul>..<tcl
b7d0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 73  >hd_fragment ins
b7e0: 74 65 61 64 5f 6f 66 5f 74 72 69 67 67 65 72 20  tead_of_trigger 
b7f0: 7b 49 4e 53 54 45 41 44 20 4f 46 7d 20 7b 49 4e  {INSTEAD OF} {IN
b800: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
b810: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54  }</tcl>.<h3>INST
b820: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 3c 2f  EAD OF trigger</
b830: 68 33 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72  h3>..<p>^Trigger
b840: 73 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64  s may be created
b850: 20 6f 6e 20 5b 76 69 65 77 73 5d 2c 20 61 73 20   on [views], as 
b860: 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e 61 72 79  well as ordinary
b870: 20 74 61 62 6c 65 73 2c 20 62 79 0a 73 70 65 63   tables, by.spec
b880: 69 66 79 69 6e 67 20 49 4e 53 54 45 41 44 20 4f  ifying INSTEAD O
b890: 46 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20  F in the CREATE 
b8a0: 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e  TRIGGER statemen
b8b0: 74 2e 20 0a 5e 49 66 20 6f 6e 65 20 6f 72 20 6d  t. .^If one or m
b8c0: 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f  ore ON INSERT, O
b8d0: 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55  N DELETE.or ON U
b8e0: 50 44 41 54 45 20 74 72 69 67 67 65 72 73 20 61  PDATE triggers a
b8f0: 72 65 20 64 65 66 69 6e 65 64 20 6f 6e 20 61 20  re defined on a 
b900: 76 69 65 77 2c 20 74 68 65 6e 20 69 74 20 69 73  view, then it is
b910: 20 6e 6f 74 20 61 6e 0a 65 72 72 6f 72 20 74 6f   not an.error to
b920: 20 65 78 65 63 75 74 65 20 61 6e 20 49 4e 53 45   execute an INSE
b930: 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50  RT, DELETE or UP
b940: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 6f  DATE statement o
b950: 6e 20 74 68 65 20 76 69 65 77 2c 20 0a 72 65 73  n the view, .res
b960: 70 65 63 74 69 76 65 6c 79 2e 20 20 5e 49 6e 73  pectively.  ^Ins
b970: 74 65 61 64 2c 0a 65 78 65 63 75 74 69 6e 67 20  tead,.executing 
b980: 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
b990: 45 20 6f 72 20 55 50 44 41 54 45 20 6f 6e 20 74  E or UPDATE on t
b9a0: 68 65 20 76 69 65 77 20 63 61 75 73 65 73 20 74  he view causes t
b9b0: 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 74 72  he associated.tr
b9c0: 69 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e 20  iggers to fire. 
b9d0: 5e 54 68 65 20 72 65 61 6c 20 74 61 62 6c 65 73  ^The real tables
b9e0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 68 65 20   underlying the 
b9f0: 76 69 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64  view are not mod
ba00: 69 66 69 65 64 0a 28 65 78 63 65 70 74 20 70 6f  ified.(except po
ba10: 73 73 69 62 6c 79 20 65 78 70 6c 69 63 69 74 6c  ssibly explicitl
ba20: 79 2c 20 62 79 20 61 20 74 72 69 67 67 65 72 20  y, by a trigger 
ba30: 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c  program).</p>..<
ba40: 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 68 65  p>^Note that the
ba50: 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65   [sqlite3_change
ba60: 73 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65  s()] and [sqlite
ba70: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
ba80: 29 5d 20 69 6e 74 65 72 66 61 63 65 73 0a 64 6f  )] interfaces.do
ba90: 20 6e 6f 74 20 63 6f 75 6e 74 20 49 4e 53 54 45   not count INSTE
baa0: 41 44 20 4f 46 20 74 72 69 67 67 65 72 20 66 69  AD OF trigger fi
bab0: 72 69 6e 67 73 2c 20 62 75 74 20 74 68 65 0a 5b  rings, but the.[
bac0: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70 72  count_changes pr
bad0: 61 67 6d 61 5d 20 64 6f 65 73 20 63 6f 75 6e 74  agma] does count
bae0: 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67   INSTEAD OF trig
baf0: 67 65 72 20 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a  ger firing.</p>.
bb00: 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73 3c 2f 68  .<h3>Examples</h
bb10: 33 3e 0a 0a 3c 70 3e 5e 28 41 73 73 75 6d 69 6e  3>..<p>^(Assumin
bb20: 67 20 74 68 61 74 20 63 75 73 74 6f 6d 65 72 20  g that customer 
bb30: 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72  records are stor
bb40: 65 64 20 69 6e 20 74 68 65 20 22 63 75 73 74 6f  ed in the "custo
bb50: 6d 65 72 73 22 20 74 61 62 6c 65 2c 20 61 6e 64  mers" table, and
bb60: 0a 74 68 61 74 20 6f 72 64 65 72 20 72 65 63 6f  .that order reco
bb70: 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  rds are stored i
bb80: 6e 20 74 68 65 20 22 6f 72 64 65 72 73 22 20 74  n the "orders" t
bb90: 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  able, the follow
bba0: 69 6e 67 20 74 72 69 67 67 65 72 0a 65 6e 73 75  ing trigger.ensu
bbb0: 72 65 73 20 74 68 61 74 20 61 6c 6c 20 61 73 73  res that all ass
bbc0: 6f 63 69 61 74 65 64 20 6f 72 64 65 72 73 20 61  ociated orders a
bbd0: 72 65 20 72 65 64 69 72 65 63 74 65 64 20 77 68  re redirected wh
bbe0: 65 6e 20 61 20 63 75 73 74 6f 6d 65 72 20 63 68  en a customer ch
bbf0: 61 6e 67 65 73 0a 68 69 73 20 6f 72 20 68 65 72  anges.his or her
bc00: 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a 0a 3c   address:</p>..<
bc10: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43 52  tcl>Example {.CR
bc20: 45 41 54 45 20 54 52 49 47 47 45 52 20 75 70 64  EATE TRIGGER upd
bc30: 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61 64 64  ate_customer_add
bc40: 72 65 73 73 20 55 50 44 41 54 45 20 4f 46 20 61  ress UPDATE OF a
bc50: 64 64 72 65 73 73 20 4f 4e 20 63 75 73 74 6f 6d  ddress ON custom
bc60: 65 72 73 20 0a 20 20 42 45 47 49 4e 0a 20 20 20  ers .  BEGIN.   
bc70: 20 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53   UPDATE orders S
bc80: 45 54 20 61 64 64 72 65 73 73 20 3d 20 6e 65 77  ET address = new
bc90: 2e 61 64 64 72 65 73 73 20 57 48 45 52 45 20 63  .address WHERE c
bca0: 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f  ustomer_name = o
bcb0: 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a  ld.name;.  END;.
bcc0: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68  }</tcl>..<p>With
bcd0: 20 74 68 69 73 20 74 72 69 67 67 65 72 20 69 6e   this trigger in
bce0: 73 74 61 6c 6c 65 64 2c 20 65 78 65 63 75 74 69  stalled, executi
bcf0: 6e 67 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  ng the statement
bd00: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d  :</p>..<tcl>Exam
bd10: 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75 73  ple {.UPDATE cus
bd20: 74 6f 6d 65 72 73 20 53 45 54 20 61 64 64 72 65  tomers SET addre
bd30: 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e  ss = '1 Main St.
bd40: 27 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27  ' WHERE name = '
bd50: 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f  Jack Jones';.}</
bd60: 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73 65 73 20  tcl>..<p>causes 
bd70: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f  the following to
bd80: 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   be automaticall
bd90: 79 20 65 78 65 63 75 74 65 64 3a 3c 2f 70 3e 0a  y executed:</p>.
bda0: 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a  .<tcl>Example {.
bdb0: 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53 45  UPDATE orders SE
bdc0: 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d  T address = '1 M
bdd0: 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20 63  ain St.' WHERE c
bde0: 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 27  ustomer_name = '
bdf0: 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f  Jack Jones';.}</
be00: 74 63 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f  tcl>)^..<tcl>hd_
be10: 66 72 61 67 6d 65 6e 74 20 75 6e 64 65 66 5f 62  fragment undef_b
be20: 65 66 6f 72 65 20 7b 75 6e 64 65 66 69 6e 65 64  efore {undefined
be30: 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 20   BEFORE trigger 
be40: 62 65 68 61 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a  behavior}</tcl>.
be50: 3c 68 33 3e 43 61 75 74 69 6f 6e 73 20 4f 6e 20  <h3>Cautions On 
be60: 54 68 65 20 55 73 65 20 4f 66 20 42 45 46 4f 52  The Use Of BEFOR
be70: 45 20 74 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a  E triggers</h3>.
be80: 0a 3c 70 3e 49 66 20 61 20 42 45 46 4f 52 45 20  .<p>If a BEFORE 
be90: 55 50 44 41 54 45 20 6f 72 20 42 45 46 4f 52 45  UPDATE or BEFORE
bea0: 20 44 45 4c 45 54 45 20 74 72 69 67 67 65 72 20   DELETE trigger 
beb0: 6d 6f 64 69 66 69 65 73 20 6f 72 20 64 65 6c 65  modifies or dele
bec0: 74 65 73 20 61 20 72 6f 77 0a 74 68 61 74 20 77  tes a row.that w
bed0: 61 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20  as to have been 
bee0: 75 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74  updated or delet
bef0: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ed, then the res
bf00: 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 73 65  ult of the subse
bf10: 71 75 65 6e 74 0a 75 70 64 61 74 65 20 6f 72 20  quent.update or 
bf20: 64 65 6c 65 74 65 20 6f 70 65 72 61 74 69 6f 6e  delete operation
bf30: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
bf40: 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 69 66 20  Furthermore, if 
bf50: 61 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72  a BEFORE trigger
bf60: 0a 6d 6f 64 69 66 69 65 73 20 6f 72 20 64 65 6c  .modifies or del
bf70: 65 74 65 73 20 61 20 72 6f 77 2c 20 74 68 65 6e  etes a row, then
bf80: 20 69 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64   it is undefined
bf90: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
bfa0: 41 46 54 45 52 20 74 72 69 67 67 65 72 73 0a 74  AFTER triggers.t
bfb0: 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f  hat would have o
bfc0: 74 68 65 72 77 69 73 65 20 72 75 6e 20 6f 6e 20  therwise run on 
bfd0: 74 68 6f 73 65 20 72 6f 77 73 20 77 69 6c 6c 20  those rows will 
bfe0: 69 6e 20 66 61 63 74 20 72 75 6e 2e 0a 3c 2f 70  in fact run..</p
bff0: 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c 75 65 20  >..<p>The value 
c000: 6f 66 20 4e 45 57 2e 72 6f 77 69 64 20 69 73 20  of NEW.rowid is 
c010: 75 6e 64 65 66 69 6e 65 64 20 69 6e 20 61 20 42  undefined in a B
c020: 45 46 4f 52 45 20 49 4e 53 45 52 54 20 74 72 69  EFORE INSERT tri
c030: 67 67 65 72 20 69 6e 20 77 68 69 63 68 0a 74 68  gger in which.th
c040: 65 20 72 6f 77 69 64 20 69 73 20 6e 6f 74 20 65  e rowid is not e
c050: 78 70 6c 69 63 69 74 6c 79 20 73 65 74 20 74 6f  xplicitly set to
c060: 20 61 6e 20 69 6e 74 65 67 65 72 2e 3c 2f 70 3e   an integer.</p>
c070: 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20 6f 66 20  ..<p>Because of 
c080: 74 68 65 20 62 65 68 61 76 69 6f 72 73 20 64 65  the behaviors de
c090: 73 63 72 69 62 65 64 20 61 62 6f 76 65 2c 20 70  scribed above, p
c0a0: 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 65  rogrammers are e
c0b0: 6e 63 6f 75 72 61 67 65 64 20 74 6f 0a 70 72 65  ncouraged to.pre
c0c0: 66 65 72 20 41 46 54 45 52 20 74 72 69 67 67 65  fer AFTER trigge
c0d0: 72 73 20 6f 76 65 72 20 42 45 46 4f 52 45 20 74  rs over BEFORE t
c0e0: 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 68  riggers.</p>..<h
c0f0: 33 3e 54 68 65 20 52 41 49 53 45 28 29 20 66 75  3>The RAISE() fu
c100: 6e 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e  nction</h3>..<p>
c110: 5e 28 41 20 73 70 65 63 69 61 6c 20 53 51 4c 20  ^(A special SQL 
c120: 66 75 6e 63 74 69 6f 6e 20 52 41 49 53 45 28 29  function RAISE()
c130: 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 69 74   may be used wit
c140: 68 69 6e 20 61 20 74 72 69 67 67 65 72 2d 70 72  hin a trigger-pr
c150: 6f 67 72 61 6d 2c 29 5e 0a 77 69 74 68 20 74 68  ogram,)^.with th
c160: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74  e following synt
c170: 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63 6c 3e 42 75  ax</p> ..<tcl>Bu
c180: 62 62 6c 65 44 69 61 67 72 61 6d 20 72 61 69 73  bbleDiagram rais
c190: 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f 74 63 6c 3e  e-function</tcl>
c1a0: 0a 0a 3c 70 3e 5e 57 68 65 6e 20 6f 6e 65 20 6f  ..<p>^When one o
c1b0: 66 20 74 68 65 20 66 69 72 73 74 20 74 68 72 65  f the first thre
c1c0: 65 20 66 6f 72 6d 73 20 69 73 20 63 61 6c 6c 65  e forms is calle
c1d0: 64 20 64 75 72 69 6e 67 20 74 72 69 67 67 65 72  d during trigger
c1e0: 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63 75 74 69  -program.executi
c1f0: 6f 6e 2c 20 74 68 65 20 73 70 65 63 69 66 69 65  on, the specifie
c200: 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  d [ON CONFLICT] 
c210: 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70 65  processing is pe
c220: 72 66 6f 72 6d 65 64 0a 28 65 69 74 68 65 72 20  rformed.(either 
c230: 41 42 4f 52 54 2c 20 46 41 49 4c 20 6f 72 20 52  ABORT, FAIL or R
c240: 4f 4c 4c 42 41 43 4b 29 20 61 6e 64 20 74 68 65  OLLBACK) and the
c250: 20 63 75 72 72 65 6e 74 20 71 75 65 72 79 20 74   current query t
c260: 65 72 6d 69 6e 61 74 65 73 2e 0a 41 6e 20 65 72  erminates..An er
c270: 72 6f 72 20 63 6f 64 65 20 6f 66 20 5b 53 51 4c  ror code of [SQL
c280: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5d 20  ITE_CONSTRAINT] 
c290: 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  is returned to t
c2a0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2c 0a  he application,.
c2b0: 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 65 20 73  along with the s
c2c0: 70 65 63 69 66 69 65 64 20 65 72 72 6f 72 20 6d  pecified error m
c2d0: 65 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  essage.</p>..<p>
c2e0: 5e 57 68 65 6e 20 52 41 49 53 45 28 49 47 4e 4f  ^When RAISE(IGNO
c2f0: 52 45 29 20 69 73 20 63 61 6c 6c 65 64 2c 20 74  RE) is called, t
c300: 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20  he remainder of 
c310: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 69 67  the current trig
c320: 67 65 72 20 70 72 6f 67 72 61 6d 2c 0a 74 68 65  ger program,.the
c330: 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
c340: 63 61 75 73 65 64 20 74 68 65 20 74 72 69 67 67  caused the trigg
c350: 65 72 20 70 72 6f 67 72 61 6d 20 74 6f 20 65 78  er program to ex
c360: 65 63 75 74 65 20 61 6e 64 20 61 6e 79 20 73 75  ecute and any su
c370: 62 73 65 71 75 65 6e 74 0a 74 72 69 67 67 65 72  bsequent.trigger
c380: 20 70 72 6f 67 72 61 6d 73 20 74 68 61 74 20 77   programs that w
c390: 6f 75 6c 64 20 6f 66 20 62 65 65 6e 20 65 78 65  ould of been exe
c3a0: 63 75 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f  cuted are abando
c3b0: 6e 65 64 2e 20 5e 4e 6f 20 64 61 74 61 62 61 73  ned. ^No databas
c3c0: 65 0a 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f  e.changes are ro
c3d0: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20  lled back.  ^If 
c3e0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68  the statement th
c3f0: 61 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72  at caused the tr
c400: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f  igger program.to
c410: 20 65 78 65 63 75 74 65 20 69 73 20 69 74 73 65   execute is itse
c420: 6c 66 20 70 61 72 74 20 6f 66 20 61 20 74 72 69  lf part of a tri
c430: 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 20 74 68  gger program, th
c440: 65 6e 20 74 68 61 74 20 74 72 69 67 67 65 72 20  en that trigger 
c450: 70 72 6f 67 72 61 6d 0a 72 65 73 75 6d 65 73 20  program.resumes 
c460: 65 78 65 63 75 74 69 6f 6e 20 61 74 20 74 68 65  execution at the
c470: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
c480: 65 20 6e 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70  e next step..</p
c490: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
c4a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4e0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
c4f0: 6e 20 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20  n {CREATE VIEW} 
c500: 7b 63 72 65 61 74 65 76 69 65 77 7d 20 7b 7b 43  {createview} {{C
c510: 52 45 41 54 45 20 56 49 45 57 7d 20 76 69 65 77  REATE VIEW} view
c520: 20 2a 76 69 65 77 73 7d 0a 0a 42 75 62 62 6c 65   *views}..Bubble
c530: 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76  Diagram create-v
c540: 69 65 77 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  iew-stmt 1.</tcl
c550: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54  >..<p>^The CREAT
c560: 45 20 56 49 45 57 20 63 6f 6d 6d 61 6e 64 20 61  E VIEW command a
c570: 73 73 69 67 6e 73 20 61 20 6e 61 6d 65 20 74 6f  ssigns a name to
c580: 20 61 20 70 72 65 2d 70 61 63 6b 61 67 65 64 20   a pre-packaged 
c590: 0a 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d  .[SELECT] statem
c5a0: 65 6e 74 2e 20 0a 5e 4f 6e 63 65 20 74 68 65 20  ent. .^Once the 
c5b0: 76 69 65 77 20 69 73 20 63 72 65 61 74 65 64 2c  view is created,
c5c0: 20 69 74 20 63 61 6e 20 62 65 20 75 73 65 64 20   it can be used 
c5d0: 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
c5e0: 73 65 0a 6f 66 20 61 6e 6f 74 68 65 72 20 5b 53  se.of another [S
c5f0: 45 4c 45 43 54 5d 20 69 6e 20 70 6c 61 63 65 20  ELECT] in place 
c600: 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e  of a table name.
c610: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68  .</p>..<p>^If th
c620: 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d  e "TEMP" or "TEM
c630: 50 4f 52 41 52 59 22 20 6b 65 79 77 6f 72 64 20  PORARY" keyword 
c640: 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65 65  occurs in betwee
c650: 6e 20 22 43 52 45 41 54 45 22 0a 61 6e 64 20 22  n "CREATE".and "
c660: 56 49 45 57 22 20 74 68 65 6e 20 74 68 65 20 76  VIEW" then the v
c670: 69 65 77 20 74 68 61 74 20 69 73 20 63 72 65 61  iew that is crea
c680: 74 65 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69  ted is only visi
c690: 62 6c 65 20 74 6f 20 74 68 65 0a 70 72 6f 63 65  ble to the.proce
c6a0: 73 73 20 74 68 61 74 20 6f 70 65 6e 65 64 20 74  ss that opened t
c6b0: 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
c6c0: 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  is automatically
c6d0: 20 64 65 6c 65 74 65 64 20 77 68 65 6e 0a 74 68   deleted when.th
c6e0: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c  e database is cl
c6f0: 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  osed.</p>..<p> ^
c700: 49 66 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73  If a &lt;databas
c710: 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 73 70  e-name&gt; is sp
c720: 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68  ecified, then th
c730: 65 20 76 69 65 77 20 69 73 20 63 72 65 61 74 65  e view is create
c740: 64 20 69 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20  d in .the named 
c750: 64 61 74 61 62 61 73 65 2e 20 5e 49 74 20 69 73  database. ^It is
c760: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70 65   an error to spe
c770: 63 69 66 79 20 62 6f 74 68 20 61 20 26 6c 74 3b  cify both a &lt;
c780: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74  database-name&gt
c790: 3b 0a 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b  ;.and the TEMP k
c7a0: 65 79 77 6f 72 64 20 6f 6e 20 61 20 56 49 45 57  eyword on a VIEW
c7b0: 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 26 6c 74  , unless the &lt
c7c0: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67  ;database-name&g
c7d0: 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 0a 5e 49  t; is "temp"..^I
c7e0: 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61  f no database na
c7f0: 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  me is specified,
c800: 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65   and the TEMP ke
c810: 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65  yword is not pre
c820: 73 65 6e 74 2c 0a 74 68 65 20 56 49 45 57 20 69  sent,.the VIEW i
c830: 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  s created in the
c840: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 3c   main database.<
c850: 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e  /p>..<p>^You can
c860: 6e 6f 74 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49  not [DELETE], [I
c870: 4e 53 45 52 54 5d 2c 20 6f 72 20 5b 55 50 44 41  NSERT], or [UPDA
c880: 54 45 5d 20 61 20 76 69 65 77 2e 20 20 5e 56 69  TE] a view.  ^Vi
c890: 65 77 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c  ews are read-onl
c8a0: 79 20 0a 69 6e 20 53 51 4c 69 74 65 2e 20 20 5e  y .in SQLite.  ^
c8b0: 48 6f 77 65 76 65 72 2c 20 69 6e 20 6d 61 6e 79  However, in many
c8c0: 20 63 61 73 65 73 20 79 6f 75 20 63 61 6e 20 75   cases you can u
c8d0: 73 65 20 61 6e 0a 5b 49 4e 53 54 45 41 44 20 4f  se an.[INSTEAD O
c8e0: 46 20 74 72 69 67 67 65 72 5d 20 6f 6e 20 74 68  F trigger] on th
c8f0: 65 20 76 69 65 77 20 74 6f 20 61 63 63 6f 6d 70  e view to accomp
c900: 6c 69 73 68 20 0a 74 68 65 20 73 61 6d 65 20 74  lish .the same t
c910: 68 69 6e 67 2e 20 20 5e 56 69 65 77 73 20 61 72  hing.  ^Views ar
c920: 65 20 72 65 6d 6f 76 65 64 20 0a 77 69 74 68 20  e removed .with 
c930: 74 68 65 20 5b 44 52 4f 50 20 56 49 45 57 5d 20  the [DROP VIEW] 
c940: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74  command.</p>..<t
c950: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
c960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c9a0: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41  ##.Section {CREA
c9b0: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
c9c0: 7d 20 7b 63 72 65 61 74 65 76 74 61 62 7d 20 7b  } {createvtab} {
c9d0: 7b 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  {CREATE VIRTUAL 
c9e0: 54 41 42 4c 45 7d 7d 0a 0a 42 75 62 62 6c 65 44  TABLE}}..BubbleD
c9f0: 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69  iagram create-vi
ca00: 72 74 75 61 6c 2d 74 61 62 6c 65 2d 73 74 6d 74  rtual-table-stmt
ca10: 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20   1.</tcl>..<p>A 
ca20: 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20  [virtual table] 
ca30: 69 73 20 61 6e 20 69 6e 74 65 72 66 61 63 65 20  is an interface 
ca40: 74 6f 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 73  to an external s
ca50: 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d 70 75 74  torage or comput
ca60: 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20 74 68 61  ation.engine tha
ca70: 74 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20  t appears to be 
ca80: 61 20 74 61 62 6c 65 20 62 75 74 20 64 6f 65 73  a table but does
ca90: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 73 74   not actually st
caa0: 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ore information.
cab0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
cac0: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  file.</p>..<p>In
cad0: 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75 20 63 61   general, you ca
cae0: 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 77 69  n do anything wi
caf0: 74 68 20 61 20 5b 76 69 72 74 75 61 6c 20 74 61  th a [virtual ta
cb00: 62 6c 65 5d 20 74 68 61 74 20 63 61 6e 20 62 65  ble] that can be
cb10: 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e 20 6f 72   done.with an or
cb20: 64 69 6e 61 72 79 20 74 61 62 6c 65 2c 20 65 78  dinary table, ex
cb30: 63 65 70 74 20 74 68 61 74 20 5e 79 6f 75 20 63  cept that ^you c
cb40: 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 69 6e 64  annot create ind
cb50: 69 63 65 73 20 6f 72 20 74 72 69 67 67 65 72 73  ices or triggers
cb60: 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c 20 74 61   on a.virtual ta
cb70: 62 6c 65 2e 20 20 5e 53 6f 6d 65 20 76 69 72 74  ble.  ^Some virt
cb80: 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
cb90: 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20  entations might 
cba0: 69 6d 70 6f 73 65 20 61 64 64 69 74 69 6f 6e 61  impose additiona
cbb0: 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e 73 2e 20  l.restrictions. 
cbc0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 6d 61   For example, ma
cbd0: 6e 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ny virtual table
cbe0: 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 2e  s are read-only.
cbf0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 26 6c 74  </p>..<p>The &lt
cc00: 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67 74 3b  ;module-name&gt;
cc10: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
cc20: 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69  an object that i
cc30: 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20 76 69  mplements.the vi
cc40: 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 54  rtual table.  ^T
cc50: 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61  he &lt;module-na
cc60: 6d 65 26 67 74 3b 20 6d 75 73 74 20 62 65 20 72  me&gt; must be r
cc70: 65 67 69 73 74 65 72 65 64 20 77 69 74 68 0a 74  egistered with.t
cc80: 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61  he SQLite databa
cc90: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75 73  se connection us
cca0: 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65  ing.[sqlite3_cre
ccb0: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 5d 20 6f 72  ate_module()] or
ccc0: 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   [sqlite3_create
ccd0: 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 5d 0a 70 72  _module_v2()].pr
cce0: 69 6f 72 20 74 6f 20 69 73 73 75 69 6e 67 20 74  ior to issuing t
ccf0: 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41  he CREATE VIRTUA
cd00: 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  L TABLE statemen
cd10: 74 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c 65 20 74  t..^The module t
cd20: 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  akes zero or mor
cd30: 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65  e comma-separate
cd40: 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a 5e 54 68  d arguments..^Th
cd50: 65 20 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20  e arguments can 
cd60: 62 65 20 6a 75 73 74 20 61 62 6f 75 74 20 61 6e  be just about an
cd70: 79 20 74 65 78 74 20 61 73 20 6c 6f 6e 67 20 61  y text as long a
cd80: 73 20 69 74 20 68 61 73 20 62 61 6c 61 6e 63 65  s it has balance
cd90: 64 0a 70 61 72 65 6e 74 68 65 73 65 73 2e 20 20  d.parentheses.  
cda0: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 73 79 6e  The argument syn
cdb0: 74 61 78 20 69 73 20 73 75 66 66 69 63 69 65 6e  tax is sufficien
cdc0: 74 6c 79 20 67 65 6e 65 72 61 6c 20 74 68 61 74  tly general that
cdd0: 20 74 68 65 0a 61 72 67 75 6d 65 6e 74 73 20 63   the.arguments c
cde0: 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 61 70  an be made to ap
cdf0: 70 65 61 72 20 61 73 20 5b 63 6f 6c 75 6d 6e 20  pear as [column 
ce00: 64 65 66 69 6e 69 74 69 6f 6e 73 5d 20 69 6e 20  definitions] in 
ce10: 61 20 74 72 61 64 69 74 69 6f 6e 61 6c 0a 5b 43  a traditional.[C
ce20: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
ce30: 74 65 6d 65 6e 74 2e 20 20 0a 5e 53 51 4c 69 74  tement.  .^SQLit
ce40: 65 20 70 61 73 73 65 73 20 74 68 65 20 6d 6f 64  e passes the mod
ce50: 75 6c 65 20 61 72 67 75 6d 65 6e 74 73 20 64 69  ule arguments di
ce60: 72 65 63 74 6c 79 0a 74 6f 20 74 68 65 20 5b 78  rectly.to the [x
ce70: 43 72 65 61 74 65 5d 20 61 6e 64 20 5b 78 43 6f  Create] and [xCo
ce80: 6e 6e 65 63 74 5d 20 6d 65 74 68 6f 64 73 20 6f  nnect] methods o
ce90: 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70  f the module imp
cea0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 77 69 74 68  lementation.with
ceb0: 6f 75 74 20 61 6e 79 20 69 6e 74 65 72 70 72 65  out any interpre
cec0: 74 61 74 69 6f 6e 2e 20 20 49 74 20 69 73 20 74  tation.  It is t
ced0: 68 65 20 72 65 73 70 6f 6e 73 69 62 69 6c 69 74  he responsibilit
cee0: 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20  y.of the module 
cef0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
cf00: 6f 20 70 61 72 73 65 20 61 6e 64 20 69 6e 74 65  o parse and inte
cf10: 72 70 72 65 74 20 69 74 73 20 6f 77 6e 20 61 72  rpret its own ar
cf20: 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70  guments.</p>..<p
cf30: 3e 5e 41 20 76 69 72 74 75 61 6c 20 74 61 62 6c  >^A virtual tabl
cf40: 65 20 69 73 20 64 65 73 74 72 6f 79 65 64 20 75  e is destroyed u
cf50: 73 69 6e 67 20 74 68 65 20 6f 72 64 69 6e 61 72  sing the ordinar
cf60: 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 73  y.[DROP TABLE] s
cf70: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 72 65  tatement.  There
cf80: 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56 49 52 54   is no.DROP VIRT
cf90: 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d  UAL TABLE statem
cfa0: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ent.</p>..<tcl>.
cfb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cfc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cfd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cfe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
d000: 65 63 74 69 6f 6e 20 44 45 4c 45 54 45 20 64 65  ection DELETE de
d010: 6c 65 74 65 20 7b 44 45 4c 45 54 45 20 2a 44 45  lete {DELETE *DE
d020: 4c 45 54 45 73 7d 0a 0a 42 75 62 62 6c 65 44 69  LETEs}..BubbleDi
d030: 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d  agram delete-stm
d040: 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61  t 1.BubbleDiagra
d050: 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c  m qualified-tabl
d060: 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  e-name.</tcl>..<
d070: 70 3e 54 68 65 20 44 45 4c 45 54 45 20 63 6f 6d  p>The DELETE com
d080: 6d 61 6e 64 20 72 65 6d 6f 76 65 73 20 72 65 63  mand removes rec
d090: 6f 72 64 73 20 66 72 6f 6d 20 74 68 65 20 74 61  ords from the ta
d0a0: 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62  ble identified b
d0b0: 79 20 74 68 65 0a 20 20 20 3c 69 3e 71 75 61 6c  y the.   <i>qual
d0c0: 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
d0d0: 3c 2f 69 3e 2e 20 0a 0a 3c 70 3e 5e 49 66 20 74  </i>. ..<p>^If t
d0e0: 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
d0f0: 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 20  is not present, 
d100: 61 6c 6c 20 72 65 63 6f 72 64 73 20 69 6e 20 74  all records in t
d110: 68 65 20 74 61 62 6c 65 20 61 72 65 20 64 65 6c  he table are del
d120: 65 74 65 64 2e 0a 20 20 20 5e 49 66 20 61 20 57  eted..   ^If a W
d130: 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 73  HERE clause is s
d140: 75 70 70 6c 69 65 64 2c 20 74 68 65 6e 20 6f 6e  upplied, then on
d150: 6c 79 20 74 68 6f 73 65 20 72 6f 77 73 20 66 6f  ly those rows fo
d160: 72 20 77 68 69 63 68 20 74 68 65 0a 20 20 20 72  r which the.   r
d170: 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74  esult of evaluat
d180: 69 6e 67 20 74 68 65 20 57 48 45 52 45 20 63 6c  ing the WHERE cl
d190: 61 75 73 65 20 61 73 20 61 20 5b 62 6f 6f 6c 65  ause as a [boole
d1a0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c 0a 20  an expression|. 
d1b0: 20 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73    boolean expres
d1c0: 73 69 6f 6e 20 69 73 20 74 72 75 65 5d 20 61 72  sion is true] ar
d1d0: 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 68 33 3e  e deleted...<h3>
d1e0: 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20  Restrictions on 
d1f0: 44 45 4c 45 54 45 20 53 74 61 74 65 6d 65 6e 74  DELETE Statement
d200: 73 20 57 69 74 68 69 6e 20 43 52 45 41 54 45 20  s Within CREATE 
d210: 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70  TRIGGER</h3>..<p
d220: 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72  >The following r
d230: 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c  estrictions appl
d240: 79 20 74 6f 20 44 45 4c 45 54 45 20 73 74 61 74  y to DELETE stat
d250: 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75  ements that occu
d260: 72 20 77 69 74 68 69 6e 20 74 68 65 0a 20 20 20  r within the.   
d270: 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54  body of a [CREAT
d280: 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65  E TRIGGER] state
d290: 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  ment:..<ul>.  <l
d2a0: 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e 74 61 62  i><p>^The <i>tab
d2b0: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65 63  le-name</i> spec
d2c0: 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
d2d0: 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d   a DELETE statem
d2e0: 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20 20 61  ent within.    a
d2f0: 20 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75   trigger body mu
d300: 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65  st be unqualifie
d310: 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65 72 20 77  d.  ^(In other w
d320: 6f 72 64 73 2c 20 74 68 65 0a 20 20 20 20 3c 69  ords, the.    <i
d330: 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f  >database-name</
d340: 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69  i><b>.</b> prefi
d350: 78 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  x on the table n
d360: 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ame is not allow
d370: 65 64 20 0a 20 20 20 20 77 69 74 68 69 6e 20 74  ed .    within t
d380: 72 69 67 67 65 72 73 2e 29 5e 20 5e 49 66 20 74  riggers.)^ ^If t
d390: 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63  he table to whic
d3a0: 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  h the trigger is
d3b0: 20 61 74 74 61 63 68 65 64 20 69 73 0a 20 20 20   attached is.   
d3c0: 20 6e 6f 74 20 69 6e 20 74 68 65 20 74 65 6d 70   not in the temp
d3d0: 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20   database, then 
d3e0: 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
d3f0: 73 20 77 69 74 68 69 6e 20 74 68 65 20 74 72 69  s within the tri
d400: 67 67 65 72 0a 20 20 20 20 62 6f 64 79 20 6d 75  gger.    body mu
d410: 73 74 20 6f 70 65 72 61 74 65 20 6f 6e 20 74 61  st operate on ta
d420: 62 6c 65 73 20 77 69 74 68 69 6e 20 74 68 65 20  bles within the 
d430: 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73  same database as
d440: 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62   it. ^If the tab
d450: 6c 65 0a 20 20 20 20 74 6f 20 77 68 69 63 68 20  le.    to which 
d460: 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61  the trigger is a
d470: 74 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68  ttached is in th
d480: 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c  e TEMP database,
d490: 20 74 68 65 6e 20 74 68 65 0a 20 20 20 20 75 6e   then the.    un
d4a0: 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f  qualified name o
d4b0: 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
d4c0: 67 20 64 65 6c 65 74 65 64 20 69 73 20 72 65 73  g deleted is res
d4d0: 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61 6d  olved in the sam
d4e0: 65 20 77 61 79 20 61 73 0a 20 20 20 20 69 74 20  e way as.    it 
d4f0: 69 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76  is for a top-lev
d500: 65 6c 20 73 74 61 74 65 6d 65 6e 74 20 28 62 79  el statement (by
d510: 20 73 65 61 72 63 68 69 6e 67 20 66 69 72 73 74   searching first
d520: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
d530: 73 65 2c 20 74 68 65 6e 0a 20 20 20 20 74 68 65  se, then.    the
d540: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20   main database, 
d550: 74 68 65 6e 20 61 6e 79 20 6f 74 68 65 72 20 64  then any other d
d560: 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 20  atabases in the 
d570: 6f 72 64 65 72 20 74 68 65 79 20 77 65 72 65 0a  order they were.
d580: 20 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a 20      attached).. 
d590: 20 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68     .  <li><p>^Th
d5a0: 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64  e INDEXED BY and
d5b0: 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
d5c0: 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  uses are not all
d5d0: 6f 77 65 64 20 6f 6e 20 44 45 4c 45 54 45 0a 20  owed on DELETE. 
d5e0: 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
d5f0: 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f  thin triggers.</
d600: 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  p>..  <li><p>^Th
d610: 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45  e LIMIT and ORDE
d620: 52 20 42 59 20 63 6c 61 75 73 65 73 20 28 64 65  R BY clauses (de
d630: 73 63 72 69 62 65 64 20 62 65 6c 6f 77 29 20 61  scribed below) a
d640: 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20 66  re unsupported f
d650: 6f 72 0a 20 20 20 20 44 45 4c 45 54 45 20 73 74  or.    DELETE st
d660: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
d670: 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 3c 2f  triggers.</p>.</
d680: 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61  ul>..<h3>Optiona
d690: 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45  l LIMIT and ORDE
d6a0: 52 20 42 59 20 63 6c 61 75 73 65 73 3c 2f 68 33  R BY clauses</h3
d6b0: 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74  >..<p>^(If SQLit
d6c0: 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69  e is compiled wi
d6d0: 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45  th the [SQLITE_E
d6e0: 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
d6f0: 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69  ETE_LIMIT].compi
d700: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20  le-time option, 
d710: 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20  then the syntax 
d720: 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
d730: 61 74 65 6d 65 6e 74 20 69 73 0a 65 78 74 65 6e  atement is.exten
d740: 64 65 64 20 62 79 20 74 68 65 20 61 64 64 69 74  ded by the addit
d750: 69 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20  ion of optional 
d760: 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
d770: 49 54 20 63 6c 61 75 73 65 73 3a 29 5e 3c 2f 70  IT clauses:)^</p
d780: 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69  >..<tcl>BubbleDi
d790: 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d  agram delete-stm
d7a0: 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a  t-limited</tcl>.
d7b0: 0a 3c 70 3e 5e 49 66 20 61 20 44 45 4c 45 54 45  .<p>^If a DELETE
d7c0: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61   statement has a
d7d0: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
d7e0: 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
d7f0: 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77  r of rows that.w
d800: 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 69  ill be deleted i
d810: 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75  s found by evalu
d820: 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70  ating the accomp
d830: 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f  anying expressio
d840: 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74  n and casting.it
d850: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76   to an integer v
d860: 61 6c 75 65 2e 20 5e 49 66 20 74 68 65 20 72 65  alue. ^If the re
d870: 73 75 6c 74 20 6f 66 20 74 68 65 20 65 76 61 6c  sult of the eval
d880: 75 61 74 69 6e 67 20 74 68 65 20 4c 49 4d 49 54  uating the LIMIT
d890: 20 63 6c 61 75 73 65 0a 63 61 6e 6e 6f 74 20 62   clause.cannot b
d8a0: 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e losslessly con
d8b0: 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
d8c0: 65 67 65 72 20 76 61 6c 75 65 2c 20 69 74 20 69  eger value, it i
d8d0: 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 41 20 0a  s an error. ^A .
d8e0: 6e 65 67 61 74 69 76 65 20 4c 49 4d 49 54 20 76  negative LIMIT v
d8f0: 61 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72 65  alue is interpre
d900: 74 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74  ted as "no limit
d910: 22 2e 20 5e 28 49 66 20 74 68 65 20 44 45 4c 45  ". ^(If the DELE
d920: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 0a 61 6c  TE statement .al
d930: 73 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54  so has an OFFSET
d940: 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 69 74   clause, then it
d950: 20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65 76   is similarly ev
d960: 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73 74  aluated and cast
d970: 20 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 76   to an.integer v
d980: 61 6c 75 65 2e 20 41 67 61 69 6e 2c 20 69 74 20  alue. Again, it 
d990: 69 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  is an error if t
d9a0: 68 65 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20  he value cannot 
d9b0: 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f  be losslessly.co
d9c0: 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
d9d0: 74 65 67 65 72 2e 29 5e 20 5e 49 66 20 74 68 65  teger.)^ ^If the
d9e0: 72 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 20  re is no OFFSET 
d9f0: 63 6c 61 75 73 65 2c 20 6f 72 20 74 68 65 20 63  clause, or the c
da00: 61 6c 63 75 6c 61 74 65 64 0a 69 6e 74 65 67 65  alculated.intege
da10: 72 20 76 61 6c 75 65 20 69 73 20 6e 65 67 61 74  r value is negat
da20: 69 76 65 2c 20 74 68 65 20 65 66 66 65 63 74 69  ive, the effecti
da30: 76 65 20 4f 46 46 53 45 54 20 76 61 6c 75 65 20  ve OFFSET value 
da40: 69 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 28 49  is zero...<p>^(I
da50: 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
da60: 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52  tement has an OR
da70: 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
da80: 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61  hen all rows tha
da90: 74 20 77 6f 75 6c 64 20 0a 62 65 20 64 65 6c 65  t would .be dele
daa0: 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e  ted in the absen
dab0: 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ce of the LIMIT 
dac0: 63 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74 65  clause are sorte
dad0: 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  d according to t
dae0: 68 65 20 0a 4f 52 44 45 52 20 42 59 2e 20 54 68  he .ORDER BY. Th
daf0: 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e  e first <i>M</i>
db00: 20 72 6f 77 73 2c 20 77 68 65 72 65 20 3c 69 3e   rows, where <i>
db10: 4d 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c  M</i> is the val
db20: 75 65 20 66 6f 75 6e 64 20 62 79 0a 65 76 61 6c  ue found by.eval
db30: 75 61 74 69 6e 67 20 74 68 65 20 4f 46 46 53 45  uating the OFFSE
db40: 54 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73  T clause express
db50: 69 6f 6e 2c 20 61 72 65 20 73 6b 69 70 70 65 64  ion, are skipped
db60: 2c 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77  , and the follow
db70: 69 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e 2c 20 77  ing .<i>N</i>, w
db80: 68 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e 20 69 73  here <i>N</i> is
db90: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
dba0: 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  e LIMIT expressi
dbb0: 6f 6e 2c 20 61 72 65 20 64 65 6c 65 74 65 64 2e  on, are deleted.
dbc0: 29 5e 0a 5e 49 66 20 74 68 65 72 65 20 61 72 65  )^.^If there are
dbd0: 20 6c 65 73 73 20 74 68 61 6e 20 3c 69 3e 4e 3c   less than <i>N<
dbe0: 2f 69 3e 20 72 6f 77 73 20 72 65 6d 61 69 6e 69  /i> rows remaini
dbf0: 6e 67 20 61 66 74 65 72 20 74 61 6b 69 6e 67 20  ng after taking 
dc00: 74 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73  the OFFSET claus
dc10: 65 0a 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2c 20  e.into account, 
dc20: 6f 72 20 69 66 20 74 68 65 20 4c 49 4d 49 54 20  or if the LIMIT 
dc30: 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65 64  clause evaluated
dc40: 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76   to a negative v
dc50: 61 6c 75 65 2c 20 74 68 65 6e 20 61 6c 6c 0a 72  alue, then all.r
dc60: 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 61 72  emaining rows ar
dc70: 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e  e deleted...<p>^
dc80: 49 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  If the DELETE st
dc90: 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f  atement has no O
dca0: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
dcb0: 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68  then all rows th
dcc0: 61 74 0a 77 6f 75 6c 64 20 62 65 20 64 65 6c 65  at.would be dele
dcd0: 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e  ted in the absen
dce0: 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ce of the LIMIT 
dcf0: 63 6c 61 75 73 65 20 61 72 65 20 61 73 73 65 6d  clause are assem
dd00: 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74  bled in an.arbit
dd10: 72 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72  rary order befor
dd20: 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c  e applying the L
dd30: 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20  IMIT and OFFSET 
dd40: 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65 72  clauses to deter
dd50: 6d 69 6e 65 20 0a 74 68 65 20 73 75 62 73 65 74  mine .the subset
dd60: 20 74 68 61 74 20 61 72 65 20 61 63 74 75 61 6c   that are actual
dd70: 6c 79 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e  ly deleted...<p>
dd80: 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  ^(The ORDER BY c
dd90: 6c 61 75 73 65 20 6f 6e 20 61 6e 20 44 45 4c 45  lause on an DELE
dda0: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  TE statement is 
ddb0: 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74  used only to det
ddc0: 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f 77  ermine which.row
ddd0: 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20 74 68  s fall within th
dde0: 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72 64  e LIMIT. The ord
ddf0: 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73  er in which rows
de00: 20 61 72 65 20 64 65 6c 65 74 65 64 20 69 73 20   are deleted is 
de10: 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73  arbitrary.and is
de20: 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64 20   not influenced 
de30: 62 79 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  by the ORDER BY 
de40: 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e  clause.)^..<tcl>
de50: 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 72 75 6e  hd_fragment trun
de60: 63 61 74 65 6f 70 74 20 7b 74 72 75 6e 63 61 74  cateopt {truncat
de70: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 7d 3c  e optimization}<
de80: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 54 72  /tcl>.<h3>The Tr
de90: 75 6e 63 61 74 65 20 4f 70 74 69 6d 69 7a 61 74  uncate Optimizat
dea0: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68  ion</h3>..<p>^Wh
deb0: 65 6e 20 74 68 65 20 57 48 45 52 45 20 69 73 20  en the WHERE is 
dec0: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20 44  omitted from a D
ded0: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
dee0: 61 6e 64 20 74 68 65 20 74 61 62 6c 65 0a 62 65  and the table.be
def0: 69 6e 67 20 64 65 6c 65 74 65 64 20 68 61 73 20  ing deleted has 
df00: 6e 6f 20 74 72 69 67 67 65 72 73 2c 0a 53 51 4c  no triggers,.SQL
df10: 69 74 65 20 75 73 65 73 20 61 6e 20 6f 70 74 69  ite uses an opti
df20: 6d 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72 61 73  mization to eras
df30: 65 20 74 68 65 20 65 6e 74 69 72 65 20 74 61 62  e the entire tab
df40: 6c 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74 68 6f  le content.witho
df50: 75 74 20 68 61 76 69 6e 67 20 74 6f 20 76 69 73  ut having to vis
df60: 69 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  it each row of t
df70: 68 65 20 74 61 62 6c 65 20 69 6e 64 69 76 69 64  he table individ
df80: 75 61 6c 6c 79 2e 0a 54 68 69 73 20 22 74 72 75  ually..This "tru
df90: 6e 63 61 74 65 22 20 6f 70 74 69 6d 69 7a 61 74  ncate" optimizat
dfa0: 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65 20 64 65  ion makes the de
dfb0: 6c 65 74 65 20 72 75 6e 20 6d 75 63 68 20 66 61  lete run much fa
dfc0: 73 74 65 72 2e 0a 50 72 69 6f 72 20 74 6f 20 53  ster..Prior to S
dfd0: 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33  QLite [version 3
dfe0: 2e 36 2e 35 5d 2c 20 74 68 65 20 74 72 75 6e 63  .6.5], the trunc
dff0: 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
e000: 0a 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68 61 74  .also meant that
e010: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68   the [sqlite3_ch
e020: 61 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b 73 71  anges()] and.[sq
e030: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
e040: 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ges()] interface
e050: 73 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75 6e 74  s.and the [count
e060: 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d  _changes pragma]
e070: 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c  .will not actual
e080: 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ly return the nu
e090: 6d 62 65 72 20 6f 66 20 64 65 6c 65 74 65 64 20  mber of deleted 
e0a0: 72 6f 77 73 2e 20 20 0a 54 68 61 74 20 70 72 6f  rows.  .That pro
e0b0: 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20 66 69  blem has been fi
e0c0: 78 65 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69  xed as of [versi
e0d0: 6f 6e 20 33 2e 36 2e 35 5d 2e 0a 0a 3c 70 3e 5e  on 3.6.5]...<p>^
e0e0: 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74  The truncate opt
e0f0: 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 62 65  imization can be
e100: 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
e110: 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71 75  abled for all qu
e120: 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d 70 69  eries.by recompi
e130: 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69 74 68  ling.SQLite with
e140: 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d 49   the [SQLITE_OMI
e150: 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54 49 4d  T_TRUNCATE_OPTIM
e160: 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c 65  IZATION] compile
e170: 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f 70  -time switch.</p
e180: 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e 63 61  >..<p>The trunca
e190: 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  te optimization 
e1a0: 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69 73 61  can also be disa
e1b0: 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  bled at runtime 
e1c0: 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74  using.the [sqlit
e1d0: 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65  e3_set_authorize
e1e0: 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 20  r()] interface. 
e1f0: 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72 69 7a   ^If an authoriz
e200: 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65 74 75  er callback.retu
e210: 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47 4e 4f  rns [SQLITE_IGNO
e220: 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51 4c 49  RE] for an [SQLI
e230: 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74 69 6f  TE_DELETE] actio
e240: 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74 68 65  n code, then.the
e250: 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74 69 6f   DELETE operatio
e260: 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64 20 62  n will proceed b
e270: 75 74 20 74 68 65 20 74 72 75 6e 63 61 74 65 20  ut the truncate 
e280: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77 69 6c  optimization wil
e290: 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20 61 6e  l.be bypassed an
e2a0: 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20 64  d rows will be d
e2b0: 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20 6f 6e  eleted one by on
e2c0: 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  e.</p>..<tcl>.##
e2d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e2e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e2f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e310: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
e320: 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20 44 41  ction {DETACH DA
e330: 54 41 42 41 53 45 7d 20 64 65 74 61 63 68 20 2a  TABASE} detach *
e340: 44 45 54 41 43 48 0a 0a 42 75 62 62 6c 65 44 69  DETACH..BubbleDi
e350: 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73 74 6d  agram detach-stm
e360: 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  t 1.</tcl>..<p>^
e370: 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 64  This statement d
e380: 65 74 61 63 68 65 73 20 61 6e 20 61 64 64 69 74  etaches an addit
e390: 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 63  ional database c
e3a0: 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f  onnection previo
e3b0: 75 73 6c 79 20 0a 61 74 74 61 63 68 65 64 20 75  usly .attached u
e3c0: 73 69 6e 67 20 74 68 65 20 5b 41 54 54 41 43 48  sing the [ATTACH
e3d0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e  ] statement.  .^
e3e0: 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  It is possible t
e3f0: 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  o have the same 
e400: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74  database file at
e410: 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c 65 20  tached multiple 
e420: 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64 69 66  times using .dif
e430: 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20 61 6e  ferent names, an
e440: 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e 65 20  d detaching one 
e450: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20  connection to a 
e460: 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76 65 20  file will leave 
e470: 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e 74 61  the .others inta
e480: 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 69  ct.</p>..<p>^Thi
e490: 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  s statement will
e4a0: 20 66 61 69 6c 20 69 66 20 53 51 4c 69 74 65 20   fail if SQLite 
e4b0: 69 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  is in the middle
e4c0: 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   of a transactio
e4d0: 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23  n.</p>...<tcl>.#
e4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e4f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e520: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
e530: 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e 44 45  ction {DROP INDE
e540: 58 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b 7b 44  X} dropindex {{D
e550: 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 42 75 62  ROP INDEX}}..Bub
e560: 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70 2d  bleDiagram drop-
e570: 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c 2f 74  index-stmt 1.</t
e580: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f  cl>..<p>^The DRO
e590: 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  P INDEX statemen
e5a0: 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e 64  t removes an ind
e5b0: 65 78 20 61 64 64 65 64 0a 77 69 74 68 20 74 68  ex added.with th
e5c0: 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d  e [CREATE INDEX]
e5d0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
e5e0: 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70 6c 65   index is comple
e5f0: 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f  tely removed fro
e600: 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65  m.the disk.  The
e610: 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63   only way to rec
e620: 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78 20 69  over the index i
e630: 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65  s to reenter the
e640: 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43 52  .appropriate [CR
e650: 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d  EATE INDEX] comm
e660: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  and.</p>..<tcl>.
e670: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e6a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e6b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
e6c0: 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41 42  ection {DROP TAB
e6d0: 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b 7b  LE} droptable {{
e6e0: 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 42 75  DROP TABLE}}..Bu
e6f0: 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70  bbleDiagram drop
e700: 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f  -table-stmt 1.</
e710: 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52  tcl>..<p>^The DR
e720: 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  OP TABLE stateme
e730: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 61 62  nt removes a tab
e740: 6c 65 20 61 64 64 65 64 20 77 69 74 68 20 74 68  le added with th
e750: 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e.[CREATE TABLE]
e760: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
e770: 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64 20   name specified 
e780: 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e 61 6d  is the.table nam
e790: 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70 65 64  e.  ^The dropped
e7a0: 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70 6c 65   table is comple
e7b0: 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f  tely removed fro
e7c0: 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a  m the database .
e7d0: 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20 64  schema and the d
e7e0: 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65 20 74  isk file.  The t
e7f0: 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62 65 20  able can not be 
e800: 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e 41 6c  recovered.  .^Al
e810: 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20 74 72  l indices and tr
e820: 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61 74 65  iggers.associate
e830: 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
e840: 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65 74 65   are also delete
e850: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  d.</p>..<p>^The 
e860: 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58 49 53  optional IF EXIS
e870: 54 53 20 63 6c 61 75 73 65 20 73 75 70 70 72 65  TS clause suppre
e880: 73 73 65 73 20 74 68 65 20 65 72 72 6f 72 20 74  sses the error t
e890: 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c  hat would normal
e8a0: 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74 68 65  ly.result if the
e8b0: 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20   table does not 
e8c0: 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  exist.</p>..<p>^
e8d0: 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20  If [foreign key 
e8e0: 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65  constraints] are
e8f0: 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52 4f 50   enabled, a DROP
e900: 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 70   TABLE command p
e910: 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70 6c 69  erforms an.impli
e920: 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20 44 45  cit [DELETE | DE
e930: 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62  LETE FROM &lt;tb
e940: 6c 26 67 74 3b 5d 20 63 6f 6d 6d 61 6e 64 20 62  l&gt;] command b
e950: 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67 20 74  efore removing t
e960: 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20 74 68  he.table from th
e970: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
e980: 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65 72 73  a. ^Any triggers
e990: 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
e9a0: 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f 70 70   table are.dropp
e9b0: 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
e9c0: 62 61 73 65 20 73 63 68 65 6d 61 20 62 65 66 6f  base schema befo
e9d0: 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69 74 20  re the implicit 
e9e0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
e9f0: 74 62 6c 26 67 74 3b 20 0a 69 73 20 65 78 65 63  tbl&gt; .is exec
ea00: 75 74 65 64 2c 20 73 6f 20 74 68 69 73 20 63 61  uted, so this ca
ea10: 6e 6e 6f 74 20 63 61 75 73 65 20 61 6e 79 20 74  nnot cause any t
ea20: 72 69 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e  riggers to fire.
ea30: 20 42 79 20 63 6f 6e 74 72 61 73 74 2c 20 5e 61   By contrast, ^a
ea40: 6e 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54  n.implicit DELET
ea50: 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67  E FROM &lt;tbl&g
ea60: 74 3b 20 64 6f 65 73 20 63 61 75 73 65 20 61 6e  t; does cause an
ea70: 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b 66 6f  y configured.[fo
ea80: 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e  reign key action
ea90: 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61 63 65  s] to take place
eaa0: 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70 6c 69  . .^If the impli
eab0: 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  cit DELETE FROM 
eac0: 26 6c 74 3b 74 62 6c 26 67 74 3b 20 65 78 65 63  &lt;tbl&gt; exec
ead0: 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f 66 20  uted.as part of 
eae0: 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d  a DROP TABLE com
eaf0: 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20 61 6e  mand violates an
eb00: 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  y immediate fore
eb10: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
eb20: 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20 69 73  nts,.an error is
eb30: 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20 74 68   returned and th
eb40: 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 64  e table is not d
eb50: 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74 68 65  ropped. ^If .the
eb60: 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45   implicit DELETE
eb70: 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74   FROM &lt;tbl&gt
eb80: 3b 20 63 61 75 73 65 73 20 61 6e 79 20 0a 64 65  ; causes any .de
eb90: 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b  ferred foreign k
eba0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  ey constraints t
ebb0: 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c 20 61  o be violated, a
ebc0: 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69 6f 6e  nd the violation
ebd0: 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20 77 68  s still.exist wh
ebe0: 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  en the transacti
ebf0: 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2c  on is committed,
ec00: 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74   an error is ret
ec10: 75 72 6e 65 64 20 61 74 20 74 68 65 20 74 69 6d  urned at the tim
ec20: 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a 3c 74  e.of commit...<t
ec30: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
ec40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ec50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ec60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ec70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ec80: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50  ##.Section {DROP
ec90: 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74 72   TRIGGER} droptr
eca0: 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54 52 49  igger {{DROP TRI
ecb0: 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69  GGER}}..BubbleDi
ecc0: 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69 67 67  agram drop-trigg
ecd0: 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  er-stmt 1.</tcl>
ece0: 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 54  ..<p>^The DROP T
ecf0: 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
ed00: 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69 67 67   removes a trigg
ed10: 65 72 20 63 72 65 61 74 65 64 20 62 79 20 74 68  er created by th
ed20: 65 20 0a 5b 43 52 45 41 54 45 20 54 52 49 47 47  e .[CREATE TRIGG
ed30: 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ER] statement. ^
ed40: 4f 6e 63 65 20 72 65 6d 6f 76 65 64 2c 20 74 68  Once removed, th
ed50: 65 20 74 72 69 67 67 65 72 20 64 65 66 69 6e 69  e trigger defini
ed60: 74 69 6f 6e 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65  tion is no.longe
ed70: 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
ed80: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 28   sqlite_master (
ed90: 6f 72 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  or sqlite_temp_m
eda0: 61 73 74 65 72 29 20 74 61 62 6c 65 20 61 6e 64  aster) table and
edb0: 20 69 73 0a 6e 6f 74 20 66 69 72 65 64 20 62 79   is.not fired by
edc0: 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74 20   any subsequent 
edd0: 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
ede0: 72 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  r DELETE stateme
edf0: 6e 74 73 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  nts...<p>^Note t
ee00: 68 61 74 20 74 72 69 67 67 65 72 73 20 61 72 65  hat triggers are
ee10: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
ee20: 72 6f 70 70 65 64 20 77 68 65 6e 20 74 68 65 20  ropped when the 
ee30: 61 73 73 6f 63 69 61 74 65 64 20 74 61 62 6c 65  associated table
ee40: 20 69 73 0a 64 72 6f 70 70 65 64 2e 0a 0a 3c 74   is.dropped...<t
ee50: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
ee60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eea0: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50  ##.Section {DROP
eeb0: 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77 20   VIEW} dropview 
eec0: 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 42  {{DROP VIEW}}..B
eed0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
eee0: 70 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a 3c 2f  p-view-stmt 1.</
eef0: 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52  tcl>..<p>^The DR
ef00: 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e  OP VIEW statemen
ef10: 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65 77  t removes a view
ef20: 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20   created by the 
ef30: 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20 0a 20  [CREATE VIEW] . 
ef40: 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54 68 65   statement. ^The
ef50: 20 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f 6e   view definition
ef60: 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d   is removed from
ef70: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
ef80: 68 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e 6f 20  hema, but .  no 
ef90: 61 63 74 75 61 6c 20 64 61 74 61 20 69 6e 20 74  actual data in t
efa0: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 62 61  he underlying ba
efb0: 73 65 20 74 61 62 6c 65 73 20 69 73 20 6d 6f 64  se tables is mod
efc0: 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65  ified...<p>^(The
efd0: 20 76 69 65 77 20 74 6f 20 64 72 6f 70 20 69 73   view to drop is
efe0: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
eff0: 68 65 20 76 69 65 77 2d 6e 61 6d 65 20 61 6e 64  he view-name and
f000: 20 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 64 61 74   optional .  dat
f010: 61 62 61 73 65 2d 6e 61 6d 65 20 73 70 65 63 69  abase-name speci
f020: 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
f030: 74 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74  the DROP VIEW st
f040: 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 0a 20  atement. This . 
f050: 20 72 65 66 65 72 65 6e 63 65 20 69 73 20 72 65   reference is re
f060: 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 74 68 65  solved using the
f070: 20 73 74 61 6e 64 61 72 64 20 70 72 6f 63 65 64   standard proced
f080: 75 72 65 20 66 6f 72 20 5b 6f 62 6a 65 63 74 20  ure for [object 
f090: 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e 0a 0a  resolution].)^..
f0a0: 3c 70 3e 0a 20 20 5e 49 66 20 74 68 65 20 73 70  <p>.  ^If the sp
f0b0: 65 63 69 66 69 65 64 20 76 69 65 77 20 63 61 6e  ecified view can
f0c0: 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61 6e 64  not be found and
f0d0: 20 74 68 65 20 49 46 20 45 58 49 53 54 53 20 63   the IF EXISTS c
f0e0: 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 0a 20 20  lause is not .  
f0f0: 70 72 65 73 65 6e 74 2c 20 69 74 20 69 73 20 61  present, it is a
f100: 6e 20 65 72 72 6f 72 2e 20 5e 49 66 20 74 68 65  n error. ^If the
f110: 20 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20   specified view 
f120: 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20  cannot be found 
f130: 61 6e 64 20 61 6e 20 49 46 0a 20 20 45 58 49 53  and an IF.  EXIS
f140: 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  TS clause is pre
f150: 73 65 6e 74 20 69 6e 20 74 68 65 20 44 52 4f 50  sent in the DROP
f160: 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74 2c   VIEW statement,
f170: 20 74 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d   then the statem
f180: 65 6e 74 0a 20 20 69 73 20 61 20 6e 6f 2d 6f 70  ent.  is a no-op
f190: 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  ....<tcl>.######
f1a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1e0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
f1f0: 20 7b 44 61 74 61 62 61 73 65 20 4f 62 6a 65 63   {Database Objec
f200: 74 20 4e 61 6d 65 20 52 65 73 6f 6c 75 74 69 6f  t Name Resolutio
f210: 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b 6f 62  n} {naming} {{ob
f220: 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 7d  ject resolution}
f230: 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20  }.</tcl>..<p>.  
f240: 49 6e 20 53 51 4c 69 74 65 2c 20 61 20 64 61 74  In SQLite, a dat
f250: 61 62 61 73 65 20 6f 62 6a 65 63 74 20 28 61 20  abase object (a 
f260: 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 74 72  table, index, tr
f270: 69 67 67 65 72 20 6f 72 20 76 69 65 77 29 20 69  igger or view) i
f280: 73 20 69 64 65 6e 74 69 66 69 65 64 0a 20 20 62  s identified.  b
f290: 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  y the name of th
f2a0: 65 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65  e object and the
f2b0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74   name of the dat
f2c0: 61 62 61 73 65 20 74 68 61 74 20 69 74 20 72 65  abase that it re
f2d0: 73 69 64 65 73 20 69 6e 2e 20 0a 20 20 44 61 74  sides in. .  Dat
f2e0: 61 62 61 73 65 20 6f 62 6a 65 63 74 73 20 6d 61  abase objects ma
f2f0: 79 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20  y reside in the 
f300: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74  main database, t
f310: 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
f320: 2c 20 6f 72 20 69 6e 0a 20 20 61 6e 20 5b 41 54  , or in.  an [AT
f330: 54 41 43 48 7c 61 74 74 61 63 68 65 64 20 64 61  TACH|attached da
f340: 74 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a 20 20  tabase]...<p>.  
f350: 54 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68  The syntax of th
f360: 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 2c 20  e [DROP TABLE], 
f370: 5b 44 52 4f 50 20 49 4e 44 45 58 5d 2c 20 5b 44  [DROP INDEX], [D
f380: 52 4f 50 20 56 49 45 57 5d 2c 20 5b 44 52 4f 50  ROP VIEW], [DROP
f390: 20 54 52 49 47 47 45 52 5d 2c 0a 20 20 5b 52 45   TRIGGER],.  [RE
f3a0: 49 4e 44 45 58 5d 2c 20 5b 41 4c 54 45 52 20 54  INDEX], [ALTER T
f3b0: 41 42 4c 45 5d 20 61 6e 64 20 6d 61 6e 79 20 6f  ABLE] and many o
f3c0: 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 20 61 6c  ther commands al
f3d0: 6c 20 70 65 72 6d 69 74 20 74 68 65 20 75 73 65  l permit the use
f3e0: 72 20 74 6f 0a 20 20 73 70 65 63 69 66 79 20 61  r to.  specify a
f3f0: 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74   database object
f400: 20 65 69 74 68 65 72 20 62 79 20 69 74 73 20 6e   either by its n
f410: 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72 20 62 79  ame alone, or by
f420: 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
f430: 66 0a 20 20 69 74 73 20 6e 61 6d 65 20 61 6e 64  f.  its name and
f440: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 69 74 73   the name of its
f450: 20 64 61 74 61 62 61 73 65 2e 20 5e 28 49 66 20   database. ^(If 
f460: 6e 6f 20 64 61 74 61 62 61 73 65 20 69 73 20 73  no database is s
f470: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
f480: 0a 20 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74  .  of the object
f490: 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65 6e   reference, then
f4a0: 20 53 51 4c 69 74 65 20 73 65 61 72 63 68 65 73   SQLite searches
f4b0: 20 74 68 65 20 6d 61 69 6e 2c 20 74 65 6d 70 20   the main, temp 
f4c0: 61 6e 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64  and all attached
f4d0: 0a 20 20 64 61 74 61 62 61 73 65 73 20 66 6f 72  .  databases for
f4e0: 20 61 6e 20 6f 62 6a 65 63 74 20 77 69 74 68 20   an object with 
f4f0: 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e  a matching name.
f500: 20 54 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   The temp databa
f510: 73 65 20 69 73 20 73 65 61 72 63 68 65 64 0a 20  se is searched. 
f520: 20 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77 65 64   first, followed
f530: 20 62 79 20 74 68 65 20 6d 61 69 6e 20 64 61 74   by the main dat
f540: 61 62 61 73 65 2c 20 66 6f 6c 6c 6f 77 65 64 20  abase, followed 
f550: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
f560: 61 62 61 73 65 73 20 69 6e 20 74 68 65 0a 20 20  abases in the.  
f570: 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20  order that they 
f580: 77 65 72 65 20 61 74 74 61 63 68 65 64 2e 20 54  were attached. T
f590: 68 65 20 72 65 66 65 72 65 6e 63 65 20 72 65 73  he reference res
f5a0: 6f 6c 76 65 73 20 74 6f 20 74 68 65 20 66 69 72  olves to the fir
f5b0: 73 74 20 6d 61 74 63 68 0a 20 20 66 6f 75 6e 64  st match.  found
f5c0: 2e 29 5e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a  .)^ For example:
f5d0: 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20 20 20  ..<pre>^(.      
f5e0: 2f 2a 20 41 64 64 20 61 20 74 61 62 6c 65 20 6e  /* Add a table n
f5f0: 61 6d 65 64 20 27 74 31 27 20 74 6f 20 74 68 65  amed 't1' to the
f600: 20 74 65 6d 70 2c 20 6d 61 69 6e 20 61 6e 64 20   temp, main and 
f610: 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
f620: 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 41 54  base */.      AT
f630: 54 41 43 48 20 27 66 69 6c 65 2e 64 62 27 20 41  TACH 'file.db' A
f640: 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43 52 45  S aux;.      CRE
f650: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20  ATE TABLE t1(x, 
f660: 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  y);.      CREATE
f670: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 78   TEMP TABLE t1(x
f680: 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41  , y);.      CREA
f690: 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74 31 28  TE TABLE aux.t1(
f6a0: 78 2c 20 79 29 3b 0a 0a 20 20 20 20 20 20 44 52  x, y);..      DR
f6b0: 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20  OP TABLE t1;    
f6c0: 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62       /* Drop tab
f6d0: 6c 65 20 69 6e 20 74 65 6d 70 20 64 61 74 61 62  le in temp datab
f6e0: 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f  ase */.      DRO
f6f0: 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20  P TABLE t1;     
f700: 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c      /* Drop tabl
f710: 65 20 69 6e 20 6d 61 69 6e 20 64 61 74 61 62 61  e in main databa
f720: 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50  se */.      DROP
f730: 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20   TABLE t1;      
f740: 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65     /* Drop table
f750: 20 69 6e 20 61 75 78 20 64 61 74 61 62 61 73 65   in aux database
f760: 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c 70   */.)^</pre>..<p
f770: 3e 0a 20 20 5e 49 66 20 61 20 64 61 74 61 62 61  >.  ^If a databa
f780: 73 65 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69  se name is speci
f790: 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
f7a0: 61 6e 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  an object refere
f7b0: 6e 63 65 2c 20 69 74 20 6d 75 73 74 20 62 65 0a  nce, it must be.
f7c0: 20 20 65 69 74 68 65 72 20 22 6d 61 69 6e 22 2c    either "main",
f7d0: 20 6f 72 20 22 74 65 6d 70 22 20 6f 72 20 74 68   or "temp" or th
f7e0: 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 61 74 74  e name of an att
f7f0: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 20  ached database. 
f800: 5e 4c 69 6b 65 20 6f 74 68 65 72 0a 20 20 53 51  ^Like other.  SQ
f810: 4c 20 69 64 65 6e 74 69 66 69 65 72 73 2c 20 64  L identifiers, d
f820: 61 74 61 62 61 73 65 20 6e 61 6d 65 73 20 61 72  atabase names ar
f830: 65 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69  e case-insensiti
f840: 76 65 2e 20 5e 49 66 20 61 20 64 61 74 61 62 61  ve. ^If a databa
f850: 73 65 20 6e 61 6d 65 0a 20 20 69 73 20 73 70 65  se name.  is spe
f860: 63 69 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c  cified, then onl
f870: 79 20 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61  y the named data
f880: 62 61 73 65 20 69 73 20 73 65 61 72 63 68 65 64  base is searched
f890: 20 66 6f 72 20 74 68 65 20 6e 61 6d 65 64 20 6f   for the named o
f8a0: 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20 4d 6f  bject...<p>.  Mo
f8b0: 73 74 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  st object refere
f8c0: 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 72 65  nces may only re
f8d0: 73 6f 6c 76 65 20 74 6f 20 61 20 73 70 65 63 69  solve to a speci
f8e0: 66 69 63 20 74 79 70 65 20 6f 66 20 6f 62 6a 65  fic type of obje
f8f0: 63 74 20 28 66 6f 72 0a 20 20 65 78 61 6d 70 6c  ct (for.  exampl
f900: 65 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 68  e a reference th
f910: 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 61 20  at is part of a 
f920: 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
f930: 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 72 65  ment may only re
f940: 73 6f 6c 76 65 0a 20 20 74 6f 20 61 20 74 61 62  solve.  to a tab
f950: 6c 65 20 6f 62 6a 65 63 74 2c 20 6e 6f 74 20 61  le object, not a
f960: 6e 20 69 6e 64 65 78 2c 20 74 72 69 67 67 65 72  n index, trigger
f970: 20 6f 72 20 76 69 65 77 29 2e 20 48 6f 77 65 76   or view). Howev
f980: 65 72 20 69 6e 20 73 6f 6d 65 20 63 6f 6e 74 65  er in some conte
f990: 78 74 73 20 0a 20 20 28 65 2e 67 2e 20 5b 52 45  xts .  (e.g. [RE
f9a0: 49 4e 44 45 58 5d 29 20 61 6e 20 6f 62 6a 65 63  INDEX]) an objec
f9b0: 74 20 72 65 66 65 72 65 6e 63 65 20 6d 61 79 20  t reference may 
f9c0: 62 65 20 72 65 73 6f 6c 76 65 20 74 6f 20 6d 6f  be resolve to mo
f9d0: 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 79 70 65  re than one type
f9e0: 0a 20 20 6f 66 20 6f 62 6a 65 63 74 2e 20 5e 57  .  of object. ^W
f9f0: 68 65 6e 20 73 65 61 72 63 68 69 6e 67 20 64 61  hen searching da
fa00: 74 61 62 61 73 65 20 73 63 68 65 6d 61 73 20 66  tabase schemas f
fa10: 6f 72 20 61 20 6e 61 6d 65 64 20 6f 62 6a 65 63  or a named objec
fa20: 74 2c 20 6f 62 6a 65 63 74 73 20 6f 66 0a 20 20  t, objects of.  
fa30: 74 79 70 65 73 20 74 68 61 74 20 63 61 6e 6e 6f  types that canno
fa40: 74 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65  t be used in the
fa50: 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20   context of the 
fa60: 72 65 66 65 72 65 6e 63 65 20 61 72 65 20 61 6c  reference are al
fa70: 77 61 79 73 20 0a 20 20 69 67 6e 6f 72 65 64 2e  ways .  ignored.
fa80: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
fa90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
faa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fad0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45  ######.Section E
fae0: 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45  XPLAIN explain E
faf0: 58 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69  XPLAIN..BubbleDi
fb00: 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c  agram sql-stmt.<
fb10: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51  /tcl>..<p>^An SQ
fb20: 4c 20 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20  L statement can 
fb30: 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20 74  be preceded by t
fb40: 68 65 20 6b 65 79 77 6f 72 64 20 22 45 58 50 4c  he keyword "EXPL
fb50: 41 49 4e 22 20 6f 72 0a 62 79 20 74 68 65 20 70  AIN" or.by the p
fb60: 68 72 61 73 65 20 22 45 58 50 4c 41 49 4e 20 51  hrase "EXPLAIN Q
fb70: 55 45 52 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69  UERY PLAN".  ^Ei
fb80: 74 68 65 72 20 6d 6f 64 69 66 69 63 61 74 69 6f  ther modificatio
fb90: 6e 20 63 61 75 73 65 73 20 74 68 65 0a 53 51 4c  n causes the.SQL
fba0: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 62 65   statement to be
fbb0: 68 61 76 65 20 61 73 20 61 20 71 75 65 72 79 20  have as a query 
fbc0: 61 6e 64 20 74 6f 20 72 65 74 75 72 6e 20 69 6e  and to return in
fbd0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a  formation about.
fbe0: 68 6f 77 20 74 68 65 20 53 51 4c 20 73 74 61 74  how the SQL stat
fbf0: 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65  ement would have
fc00: 20 6f 70 65 72 61 74 65 64 20 69 66 20 74 68 65   operated if the
fc10: 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64   EXPLAIN keyword
fc20: 20 6f 72 0a 70 68 72 61 73 65 20 68 61 64 20 62   or.phrase had b
fc30: 65 65 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e  een omitted.</p>
fc40: 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74 20  ..<p>The output 
fc50: 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61 6e 64  from EXPLAIN and
fc60: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
fc70: 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64 65 64 20  LAN is intended 
fc80: 66 6f 72 0a 69 6e 74 65 72 61 63 74 69 76 65 20  for.interactive 
fc90: 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 74 72 6f  analysis and tro
fca0: 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c  ubleshooting onl
fcb0: 79 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20  y.  The details 
fcc0: 6f 66 20 74 68 65 20 0a 6f 75 74 70 75 74 20 66  of the .output f
fcd0: 6f 72 6d 61 74 20 61 72 65 20 73 75 62 6a 65 63  ormat are subjec
fce0: 74 20 74 6f 20 63 68 61 6e 67 65 20 66 72 6f 6d  t to change from
fcf0: 20 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f 66 20   one release of 
fd00: 53 51 4c 69 74 65 20 74 6f 20 74 68 65 20 6e 65  SQLite to the ne
fd10: 78 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73  xt..Applications
fd20: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73 65 20   should not use 
fd30: 45 58 50 4c 41 49 4e 20 6f 72 20 45 58 50 4c 41  EXPLAIN or EXPLA
fd40: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 69  IN QUERY PLAN si
fd50: 6e 63 65 0a 74 68 65 69 72 20 65 78 61 63 74 20  nce.their exact 
fd60: 62 65 68 61 76 69 6f 72 20 69 73 20 76 61 72 69  behavior is vari
fd70: 61 62 6c 65 20 61 6e 64 20 6f 6e 6c 79 20 70 61  able and only pa
fd80: 72 74 69 61 6c 6c 79 20 64 6f 63 75 6d 65 6e 74  rtially document
fd90: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  ed.</p>..<p>^Whe
fda0: 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  n the EXPLAIN ke
fdb0: 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 79  yword appears by
fdc0: 20 69 74 73 65 6c 66 20 69 74 20 63 61 75 73 65   itself it cause
fdd0: 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  s the statement.
fde0: 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71  to behave as a q
fdf0: 75 65 72 79 20 74 68 61 74 20 72 65 74 75 72 6e  uery that return
fe00: 73 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f  s the sequence o
fe10: 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61 63 68  f .[virtual mach
fe20: 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ine instructions
fe30: 5d 20 69 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ] it would have 
fe40: 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
fe50: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64 0a  the command had.
fe60: 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77  the EXPLAIN keyw
fe70: 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70 72 65  ord not been pre
fe80: 73 65 6e 74 2e 20 5e 57 68 65 6e 20 74 68 65 20  sent. ^When the 
fe90: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
fea0: 41 4e 20 70 68 72 61 73 65 0a 61 70 70 65 61 72  AN phrase.appear
feb0: 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  s, the statement
fec0: 20 72 65 74 75 72 6e 73 20 68 69 67 68 2d 6c 65   returns high-le
fed0: 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  vel information 
fee0: 72 65 67 61 72 64 69 6e 67 20 74 68 65 20 71 75  regarding the qu
fef0: 65 72 79 0a 70 6c 61 6e 20 74 68 61 74 20 77 6f  ery.plan that wo
ff00: 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 75 73  uld have been us
ff10: 65 64 2e 0a 0a 54 68 65 20 45 58 50 4c 41 49 4e  ed...The EXPLAIN
ff20: 20 51 55 45 52 59 20 50 4c 41 4e 20 63 6f 6d 6d   QUERY PLAN comm
ff30: 61 6e 64 20 69 73 20 64 65 73 63 72 69 62 65 64  and is described
ff40: 20 69 6e 20 0a 5b 65 78 70 6c 61 69 6e 20 71 75   in .[explain qu
ff50: 65 72 79 20 70 6c 61 6e 7c 6d 6f 72 65 20 64 65  ery plan|more de
ff60: 74 61 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c 74 63  tail here]...<tc
ff70: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
ff80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ff90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ffa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ffb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ffc0: 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73  #.Section expres
ffd0: 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78 70 72  sion expr {*expr
ffe0: 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73 73 69  ession {expressi
fff0: 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 42 75 62  on syntax}}..Bub
10000 62 6c 65 44 69 61 67 72 61 6d 20 65 78 70 72 20  bleDiagram expr 
10010 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
10020 6c 69 74 65 72 61 6c 2d 76 61 6c 75 65 0a 42 75  literal-value.Bu
10030 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 67 6e  bbleDiagram sign
10040 65 64 2d 6e 75 6d 62 65 72 0a 42 75 62 62 6c 65  ed-number.Bubble
10050 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75  Diagram raise-fu
10060 6e 63 74 69 6f 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c  nction.</tcl>..<
10070 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e 20 69  p>This section i
10080 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  s different from
10090 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20 4d 6f   the others.  Mo
100a0 73 74 20 6f 74 68 65 72 20 73 65 63 74 69 6f 6e  st other section
100b0 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d 65  s of.this docume
100c0 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74 20 61  nt talks about a
100d0 20 70 61 72 74 69 63 75 6c 61 72 20 53 51 4c 20   particular SQL 
100e0 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 73  command.  This s
100f0 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20  ection does.not 
10100 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73 74 61  talk about a sta
10110 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20  ndalone command 
10120 62 75 74 20 61 62 6f 75 74 20 22 65 78 70 72 65  but about "expre
10130 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20 61 72  ssions" which ar
10140 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74 73  e .subcomponents
10150 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72 20 63   of most other c
10160 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 74  ommands.</p>..<t
10170 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62  cl>hd_fragment b
10180 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61 72 79  inaryops {binary
10190 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74 63 6c   operators}</tcl
101a0 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72 73 3c  >.<h3>Operators<
101b0 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69 74 65  /h3>.<p>^(SQLite
101c0 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65   understands the
101d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e 61 72   following binar
101e0 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69 6e 20  y operators, in 
101f0 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67 68 65  order from.highe
10200 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70 72 65  st to lowest pre
10210 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62  cedence:</p>..<b
10220 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
10230 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63  <font color="#2c
10240 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a 2a 20  2cf0"><big>||.* 
10250 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20 20 2d     /    %.+    -
10260 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67 74 3b  .&lt;&lt;   &gt;
10270 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20 20 20  &gt;   &amp;    
10280 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b 3d 20  |.&lt;    &lt;= 
10290 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b 3d 0a    &gt;    &gt;=.
102a0 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20 20 26  =    ==   !=   &
102b0 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69 67 3e  lt;&gt;   </big>
102c0 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20 49 4e  IS   IS NOT   IN
102d0 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42 20 20     LIKE   GLOB  
102e0 20 4d 41 54 43 48 20 20 20 52 45 47 45 58 50 0a   MATCH   REGEXP.
102f0 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e 74 3e  AND   .OR</font>
10300 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
10310 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53 75 70  ote>)^..<p>^(Sup
10320 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70 72 65  ported unary pre
10330 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20 61 72  fix operators ar
10340 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a 3c 62  e these:</p>..<b
10350 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
10360 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63  <font color="#2c
10370 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20 20 20  2cf0"><big>-    
10380 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c 2f 62  +    ~    NOT</b
10390 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65  ig></font>.</pre
103a0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ></blockquote>)^
103b0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
103c0 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b 43 4f  nt collateop {CO
103d0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 7d 3c  LLATE operator}<
103e0 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 43 4f  /tcl>.<p>^The CO
103f0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 69  LLATE operator i
10400 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74 66 69  s a unary postfi
10410 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61 74 20  x.operator that 
10420 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c 6c 61  assigns a [colla
10430 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74  ting sequence] t
10440 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e  o an expression.
10450 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70  .^The COLLATE op
10460 65 72 61 74 6f 72 20 68 61 73 20 61 20 68 69 67  erator has a hig
10470 68 65 72 20 70 72 65 63 65 64 65 6e 63 65 20 28  her precedence (
10480 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67 68 74  binds more tight
10490 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 70 72 65  ly) than any.pre
104a0 66 69 78 20 75 6e 61 72 79 20 6f 70 65 72 61 74  fix unary operat
104b0 6f 72 20 6f 72 20 61 6e 79 20 62 69 6e 61 72 79  or or any binary
104c0 20 6f 70 65 72 61 74 6f 72 2e 0a 5e 54 68 65 20   operator..^The 
104d0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
104e0 63 65 20 73 65 74 20 62 79 20 74 68 65 20 43 4f  ce set by the CO
104f0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 6f  LLATE operator o
10500 76 65 72 72 69 64 65 73 20 74 68 65 0a 63 6f 6c  verrides the.col
10510 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
10520 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
10530 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  e COLLATE clause
10540 20 69 6e 20 61 20 74 61 62 6c 65 0a 5b 63 6f 6c   in a table.[col
10550 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e  umn definition].
10560 0a 53 65 65 20 74 68 65 20 5b 63 6f 6c 6c 61 74  .See the [collat
10570 69 6e 67 20 73 65 71 75 65 6e 63 65 7c 20 64 65  ing sequence| de
10580 74 61 69 6c 65 64 20 64 69 73 63 75 73 73 69 6f  tailed discussio
10590 6e 20 6f 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73  n on collating s
105a0 65 71 75 65 6e 63 65 73 5d 0a 69 6e 20 74 68 65  equences].in the
105b0 20 5b 64 61 74 61 74 79 70 65 20 7c 20 44 61 74   [datatype | Dat
105c0 61 74 79 70 65 20 49 6e 20 53 51 4c 69 74 65 33  atype In SQLite3
105d0 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61  ] document for a
105e0 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
105f0 61 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63  ation..</p>..<tc
10600 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70 3e 5e  l>hd_puts ".<p>^
10610 54 68 65 20 75 6e 61 72 79 20 6f 70 65 72 61 74  The unary operat
10620 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20  or [Operator +] 
10630 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74  is a no-op.  ^It
10640 20 63 61 6e 20 62 65 20 61 70 70 6c 69 65 64 0a   can be applied.
10650 74 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62  to strings, numb
10660 65 72 73 2c 20 62 6c 6f 62 73 20 6f 72 20 4e 55  ers, blobs or NU
10670 4c 4c 20 61 6e 64 20 69 74 20 61 6c 77 61 79 73  LL and it always
10680 20 72 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c   returns a resul
10690 74 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  t.with the same 
106a0 76 61 6c 75 65 20 61 73 20 74 68 65 20 6f 70 65  value as the ope
106b0 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e  rand.</p>"</tcl>
106c0 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 74  ..<p>Note that t
106d0 68 65 72 65 20 61 72 65 20 74 77 6f 20 76 61 72  here are two var
106e0 69 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 65  iations of the e
106f0 71 75 61 6c 73 20 61 6e 64 20 6e 6f 74 20 65 71  quals and not eq
10700 75 61 6c 73 0a 6f 70 65 72 61 74 6f 72 73 2e 20  uals.operators. 
10710 20 5e 45 71 75 61 6c 73 20 63 61 6e 20 62 65 20   ^Equals can be 
10720 65 69 74 68 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64  either..<tcl>.hd
10730 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f 72  _puts "[Operator
10740 20 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72   =] or [Operator
10750 20 3d 3d 5d 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65   ==]..^The non-e
10760 71 75 61 6c 73 20 6f 70 65 72 61 74 6f 72 20 63  quals operator c
10770 61 6e 20 62 65 20 65 69 74 68 65 72 0a 5b 4f 70  an be either.[Op
10780 65 72 61 74 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f  erator !=] or [O
10790 70 65 72 61 74 6f 72 20 7b 26 6c 74 3b 26 67 74  perator {&lt;&gt
107a0 3b 7d 5d 2e 0a 5e 54 68 65 20 5b 4f 70 65 72 61  ;}]..^The [Opera
107b0 74 6f 72 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72  tor ||] operator
107c0 20 69 73 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74   is \"concatenat
107d0 65 5c 22 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74  e\" - it joins t
107e0 6f 67 65 74 68 65 72 0a 74 68 65 20 74 77 6f 20  ogether.the two 
107f0 73 74 72 69 6e 67 73 20 6f 66 20 69 74 73 20 6f  strings of its o
10800 70 65 72 61 6e 64 73 2e 0a 5e 54 68 65 20 6f 70  perands..^The op
10810 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72  erator [Operator
10820 20 25 5d 20 6f 75 74 70 75 74 73 20 74 68 65 20   %] outputs the 
10830 76 61 6c 75 65 20 6f 66 20 69 74 73 20 6c 65 66  value of its lef
10840 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c  t .operand modul
10850 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70 65 72  o its right oper
10860 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  and.</p>..<p>^Th
10870 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 79 20  e result of any 
10880 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20  binary operator 
10890 69 73 20 65 69 74 68 65 72 20 61 20 6e 75 6d 65  is either a nume
108a0 72 69 63 20 76 61 6c 75 65 20 6f 72 20 0a 4e 55  ric value or .NU
108b0 4c 4c 2c 20 65 78 63 65 70 74 20 66 6f 72 20 74  LL, except for t
108c0 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d  he [Operator ||]
108d0 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f   concatenation o
108e0 70 65 72 61 74 6f 72 20 77 68 69 63 68 20 61 6c  perator which al
108f0 77 61 79 73 20 0a 65 76 61 6c 75 61 74 65 73 20  ways .evaluates 
10900 74 6f 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f  to either NULL o
10910 72 20 61 20 74 65 78 74 20 76 61 6c 75 65 2e 3c  r a text value.<
10920 2f 70 3e 22 0a 0a 68 64 5f 66 72 61 67 6d 65 6e  /p>"..hd_fragmen
10930 74 20 7b 69 73 69 73 6e 6f 74 7d 20 7b 49 53 20  t {isisnot} {IS 
10940 6f 70 65 72 61 74 6f 72 7d 20 7b 49 53 20 4e 4f  operator} {IS NO
10950 54 20 6f 70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f  T operator}..hd_
10960 70 75 74 73 20 22 3c 70 3e 5e 54 68 65 20 5b 4f  puts "<p>^The [O
10970 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20  perator IS] and 
10980 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f  [Operator {IS NO
10990 54 7d 5d 20 6f 70 65 72 61 74 6f 72 73 20 77 6f  T}] operators wo
109a0 72 6b 0a 6c 69 6b 65 20 5b 4f 70 65 72 61 74 6f  rk.like [Operato
109b0 72 20 3d 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74  r =] and [Operat
109c0 6f 72 20 21 3d 5d 20 65 78 63 65 70 74 20 77 68  or !=] except wh
109d0 65 6e 20 6f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  en one or both o
109e0 66 20 74 68 65 0a 6f 70 65 72 61 6e 64 73 20 61  f the.operands a
109f0 72 65 20 4e 55 4c 4c 2e 20 5e 49 6e 20 74 68 69  re NULL. ^In thi
10a00 73 20 63 61 73 65 2c 20 69 66 20 62 6f 74 68 20  s case, if both 
10a10 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
10a20 4c 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20 6f  L, then the.IS o
10a30 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
10a40 73 20 74 6f 20 31 20 28 74 72 75 65 29 20 61 6e  s to 1 (true) an
10a50 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f 70 65  d the IS NOT ope
10a60 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 0a  rator evaluates.
10a70 74 6f 20 30 20 28 66 61 6c 73 65 29 2e 20 5e 49  to 0 (false). ^I
10a80 66 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  f one operand is
10a90 20 4e 55 4c 4c 20 61 6e 64 20 74 68 65 20 6f 74   NULL and the ot
10aa0 68 65 72 20 69 73 20 6e 6f 74 2c 20 74 68 65 6e  her is not, then
10ab0 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74 6f 72   the.IS operator
10ac0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 30 20   evaluates to 0 
10ad0 28 66 61 6c 73 65 29 20 61 6e 64 20 74 68 65 20  (false) and the 
10ae0 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20  IS NOT operator 
10af0 69 73 20 31 20 28 74 72 75 65 29 2e 0a 5e 49 74  is 1 (true)..^It
10b00 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
10b10 20 66 6f 72 20 61 6e 20 49 53 20 6f 72 20 49 53   for an IS or IS
10b20 20 4e 4f 54 20 65 78 70 72 65 73 73 69 6f 6e 20   NOT expression 
10b30 74 6f 20 65 76 61 6c 75 61 74 65 20 74 6f 20 4e  to evaluate to N
10b40 55 4c 4c 2e 0a 5e 4f 70 65 72 61 74 6f 72 73 20  ULL..^Operators 
10b50 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e  [Operator IS] an
10b60 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20  d [Operator {IS 
10b70 4e 4f 54 7d 5d 20 68 61 76 65 20 74 68 65 20 73  NOT}] have the s
10b80 61 6d 65 20 0a 70 72 65 63 65 64 65 6e 63 65 20  ame .precedence 
10b90 61 73 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 2e  as [Operator =].
10ba0 22 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  "..<tcl>hd_fragm
10bb0 65 6e 74 20 6c 69 74 76 61 6c 75 65 20 7b 6c 69  ent litvalue {li
10bc0 74 65 72 61 6c 20 76 61 6c 75 65 7d 3c 2f 74 63  teral value}</tc
10bd0 6c 3e 0a 3c 68 33 3e 4c 69 74 65 72 61 6c 20 56  l>.<h3>Literal V
10be0 61 6c 75 65 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 5e  alues</h3>.<p>.^
10bf0 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20  A literal value 
10c00 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 66  is a constant of
10c10 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 5e 4c 69 74   some kind..^Lit
10c20 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61 79 20  eral values may 
10c30 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f  be integers, flo
10c40 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
10c50 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c  ers, strings,.BL
10c60 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 3c 2f  OBs, or NULLs.</
10c70 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e 74 61  p>..<p>The synta
10c80 78 20 66 6f 72 20 69 6e 74 65 67 65 72 20 61 6e  x for integer an
10c90 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  d floating point
10ca0 20 6c 69 74 65 72 61 6c 73 20 28 63 6f 6c 6c 65   literals (colle
10cb0 63 74 69 76 65 6c 79 0a 22 6e 75 6d 65 72 69 63  ctively."numeric
10cc0 20 6c 69 74 65 72 61 6c 73 22 29 20 69 73 20 73   literals") is s
10cd0 68 6f 77 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c  hown by the foll
10ce0 6f 77 69 6e 67 20 64 69 61 67 72 61 6d 3a 3c 2f  owing diagram:</
10cf0 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  p>..<tcl>BubbleD
10d00 69 61 67 72 61 6d 20 6e 75 6d 65 72 69 63 2d 6c  iagram numeric-l
10d10 69 74 65 72 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70  iteral</tcl>..<p
10d20 3e 0a 5e 28 49 66 20 61 20 6e 75 6d 65 72 69 63  >.^(If a numeric
10d30 20 6c 69 74 65 72 61 6c 20 68 61 73 20 61 20 64   literal has a d
10d40 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 6f 72 20  ecimal point or 
10d50 61 6e 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f  an exponentiatio
10d60 6e 0a 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 69  n.clause, then i
10d70 74 20 69 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  t is a floating 
10d80 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 2e 20 20  point literal.  
10d90 4f 74 68 65 72 77 69 73 65 20 69 73 20 69 74 20  Otherwise is it 
10da0 69 73 20 61 6e 20 0a 69 6e 74 65 67 65 72 20 6c  is an .integer l
10db0 69 74 65 72 61 6c 2e 29 5e 20 20 5e 54 68 65 20  iteral.)^  ^The 
10dc0 22 45 22 20 63 68 61 72 61 63 74 65 72 20 74 68  "E" character th
10dd0 61 74 20 62 65 67 69 6e 73 20 74 68 65 20 65 78  at begins the ex
10de0 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61  ponentiation.cla
10df0 75 73 65 20 6f 66 20 61 20 66 6c 6f 61 74 69 6e  use of a floatin
10e00 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 20  g point literal 
10e10 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 75 70  can be either up
10e20 70 65 72 20 6f 72 20 6c 6f 77 65 72 20 63 61 73  per or lower cas
10e30 65 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63 68 61  e..^(The "." cha
10e40 72 61 63 74 65 72 20 69 73 20 61 6c 77 61 79 73  racter is always
10e50 20 75 73 65 64 20 0a 61 73 20 74 68 65 20 64 65   used .as the de
10e60 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76 65 6e  cimal point even
10e70 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65 20 73   if the locale s
10e80 65 74 74 69 6e 67 20 73 70 65 63 69 66 69 65 73  etting specifies
10e90 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20 72 6f   "," for.this ro
10ea0 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f 66 20  le - the use of 
10eb0 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65 63 69  "," for the deci
10ec0 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c 64 20  mal point would 
10ed0 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74 61 63  result in.syntac
10ee0 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e 29 5e  tic ambiguity.)^
10ef0 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 41 20 73 74 72  </p>..<p> ^A str
10f00 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69 73 20  ing constant is 
10f10 66 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73  formed by enclos
10f20 69 6e 67 20 74 68 65 0a 73 74 72 69 6e 67 20 69  ing the.string i
10f30 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20  n single quotes 
10f40 28 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20  (').  ^A single 
10f50 71 75 6f 74 65 20 77 69 74 68 69 6e 20 74 68 65  quote within the
10f60 20 73 74 72 69 6e 67 20 63 61 6e 0a 62 65 20 65   string can.be e
10f70 6e 63 6f 64 65 64 20 62 79 20 70 75 74 74 69 6e  ncoded by puttin
10f80 67 20 74 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f  g two single quo
10f90 74 65 73 20 69 6e 20 61 20 72 6f 77 20 2d 20 61  tes in a row - a
10fa0 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73  s in Pascal..C-s
10fb0 74 79 6c 65 20 65 73 63 61 70 65 73 20 75 73 69  tyle escapes usi
10fc0 6e 67 20 74 68 65 20 62 61 63 6b 73 6c 61 73 68  ng the backslash
10fd0 20 63 68 61 72 61 63 74 65 72 20 61 72 65 20 6e   character are n
10fe0 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62 65 63  ot supported bec
10ff0 61 75 73 65 0a 74 68 65 79 20 61 72 65 20 6e 6f  ause.they are no
11000 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a  t standard SQL..
11010 5e 42 4c 4f 42 20 6c 69 74 65 72 61 6c 73 20 61  ^BLOB literals a
11020 72 65 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61  re string litera
11030 6c 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 68 65  ls containing he
11040 78 61 64 65 63 69 6d 61 6c 20 64 61 74 61 20 61  xadecimal data a
11050 6e 64 0a 70 72 65 63 65 64 65 64 20 62 79 20 61  nd.preceded by a
11060 20 73 69 6e 67 6c 65 20 22 78 22 20 6f 72 20 22   single "x" or "
11070 58 22 20 63 68 61 72 61 63 74 65 72 2e 20 20 5e  X" character.  ^
11080 28 46 6f 72 20 65 78 61 6d 70 6c 65 3a 3c 2f 70  (For example:</p
11090 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
110a0 70 72 65 3e 0a 58 27 35 33 35 31 34 43 36 39 37  pre>.X'53514C697
110b0 34 36 35 27 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  465'.</pre></blo
110c0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a  ckquote>)^..<p>.
110d0 5e 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65  ^A literal value
110e0 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 74 68 65   can also be the
110f0 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a 3c   token "NULL"..<
11100 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
11110 67 6d 65 6e 74 20 76 61 72 70 61 72 61 6d 20 70  gment varparam p
11120 61 72 61 6d 65 74 65 72 20 70 61 72 61 6d 65 74  arameter paramet
11130 65 72 73 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d  ers {bound param
11140 65 74 65 72 7d 20 7b 62 6f 75 6e 64 20 70 61 72  eter} {bound par
11150 61 6d 65 74 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c  ameters}</tcl>.<
11160 68 33 3e 50 61 72 61 6d 65 74 65 72 73 3c 2f 68  h3>Parameters</h
11170 33 3e 0a 3c 70 3e 0a 41 20 22 76 61 72 69 61 62  3>.<p>.A "variab
11180 6c 65 22 20 6f 72 20 22 70 61 72 61 6d 65 74 65  le" or "paramete
11190 72 22 20 74 6f 6b 65 6e 0a 73 70 65 63 69 66 69  r" token.specifi
111a0 65 73 20 61 20 70 6c 61 63 65 68 6f 6c 64 65 72  es a placeholder
111b0 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69   in the expressi
111c0 6f 6e 20 66 6f 72 20 61 20 0a 76 61 6c 75 65 20  on for a .value 
111d0 74 68 61 74 20 69 73 20 66 69 6c 6c 65 64 20 69  that is filled i
111e0 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69  n at runtime usi
111f0 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f  ng the.[sqlite3_
11200 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71  bind_blob() | sq
11210 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 66 61  lite3_bind()] fa
11220 6d 69 6c 79 20 6f 66 20 43 2f 43 2b 2b 20 69 6e  mily of C/C++ in
11230 74 65 72 66 61 63 65 73 2e 0a 50 61 72 61 6d 65  terfaces..Parame
11240 74 65 72 73 20 63 61 6e 20 74 61 6b 65 20 73 65  ters can take se
11250 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70  veral forms:.</p
11260 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
11270 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74 64  <table>.<tr>.<td
11280 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
11290 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f  align="top"><b>?
112a0 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f  </b><i>NNN</i></
112b0 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
112c0 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 28 41 20  "></td>.<td>^(A 
112d0 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 66 6f  question mark fo
112e0 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62  llowed by a numb
112f0 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f  er <i>NNN</i> ho
11300 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 74  lds a spot for t
11310 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61 6d 65  he.NNN-th parame
11320 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74 20 62  ter.  NNN must b
11330 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
11340 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49  [SQLITE_MAX_VARI
11350 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 29 5e 0a  ABLE_NUMBER].)^.
11360 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
11370 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  .<td align="righ
11380 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  t" valign="top">
11390 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  <b>?</b></td><td
113a0 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
113b0 3e 0a 3c 74 64 3e 5e 41 20 71 75 65 73 74 69 6f  >.<td>^A questio
113c0 6e 20 6d 61 72 6b 20 74 68 61 74 20 69 73 20 6e  n mark that is n
113d0 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ot followed by a
113e0 20 6e 75 6d 62 65 72 20 63 72 65 61 74 65 73 20   number creates 
113f0 61 20 70 61 72 61 6d 65 74 65 72 0a 77 69 74 68  a parameter.with
11400 20 61 20 6e 75 6d 62 65 72 20 6f 6e 65 20 67 72   a number one gr
11410 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6c  eater than the l
11420 61 72 67 65 73 74 20 70 61 72 61 6d 65 74 65 72  argest parameter
11430 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64 79 20   number already 
11440 61 73 73 69 67 6e 65 64 2e 0a 5e 49 66 20 74 68  assigned..^If th
11450 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70 61 72  is means the par
11460 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69 73  ameter number is
11470 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a 5b 53   greater than.[S
11480 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
11490 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69  LE_NUMBER], it i
114a0 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 2f 74 64  s an error..</td
114b0 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
114c0 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
114d0 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a  align="top"><b>:
114e0 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c  </b><i>AAAA</i><
114f0 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
11500 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20  0"></td>.<td>^A 
11510 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20 62  colon followed b
11520 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  y an identifier 
11530 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20 73 70 6f  name holds a spo
11540 74 20 66 6f 72 20 61 20 0a 5b 73 71 6c 69 74 65  t for a .[sqlite
11550 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
11560 5f 6e 61 6d 65 7c 6e 61 6d 65 64 20 70 61 72 61  _name|named para
11570 6d 65 74 65 72 5d 20 77 69 74 68 20 74 68 65 20  meter] with the 
11580 6e 61 6d 65 20 3a 41 41 41 41 2e 20 20 0a 5e 28  name :AAAA.  .^(
11590 4e 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72 73  Named parameters
115a0 20 61 72 65 20 61 6c 73 6f 20 6e 75 6d 62 65 72   are also number
115b0 65 64 2e 20 54 68 65 20 6e 75 6d 62 65 72 20 61  ed. The number a
115c0 73 73 69 67 6e 65 64 20 69 73 20 6f 6e 65 20 67  ssigned is one g
115d0 72 65 61 74 65 72 20 74 68 61 6e 0a 74 68 65 20  reater than.the 
115e0 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65 74 65  largest paramete
115f0 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64 79  r number already
11600 20 61 73 73 69 67 6e 65 64 2e 29 5e 20 5e 49 66   assigned.)^ ^If
11610 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20   this means the 
11620 70 61 72 61 6d 65 74 65 72 0a 77 6f 75 6c 64 20  parameter.would 
11630 62 65 20 61 73 73 69 67 6e 65 64 20 61 20 6e 75  be assigned a nu
11640 6d 62 65 72 20 67 72 65 61 74 65 72 20 74 68 61  mber greater tha
11650 6e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  n [SQLITE_MAX_VA
11660 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20  RIABLE_NUMBER], 
11670 69 74 20 69 73 0a 61 6e 20 65 72 72 6f 72 2e 20  it is.an error. 
11680 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  To avoid confusi
11690 6f 6e 2c 20 69 74 20 69 73 20 62 65 73 74 20 74  on, it is best t
116a0 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e 67 20 6e  o avoid mixing n
116b0 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65 72 65  amed and numbere
116c0 64 0a 70 61 72 61 6d 65 74 65 72 73 2e 3c 2f 74  d.parameters.</t
116d0 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
116e0 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  d align="right" 
116f0 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
11700 40 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e  @</b><i>AAAA</i>
11710 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
11720 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41  20"></td>.<td>^A
11730 6e 20 22 61 74 22 20 73 69 67 6e 20 77 6f 72 6b  n "at" sign work
11740 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 61  s exactly like a
11750 20 63 6f 6c 6f 6e 2c 20 65 78 63 65 70 74 20 74   colon, except t
11760 68 61 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 0a  hat the name of.
11770 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 63 72  the parameter cr
11780 65 61 74 65 64 20 69 73 20 40 41 41 41 41 2e 3c  eated is @AAAA.<
11790 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
117a0 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
117b0 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
117c0 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f  b>$</b><i>AAAA</
117d0 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  i></td><td width
117e0 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
117f0 5e 41 20 64 6f 6c 6c 61 72 2d 73 69 67 6e 20 66  ^A dollar-sign f
11800 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64  ollowed by an id
11810 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 61 6c  entifier name al
11820 73 6f 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20  so holds a spot 
11830 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61 72 61  for a named.para
11840 6d 65 74 65 72 20 77 69 74 68 20 74 68 65 20 6e  meter with the n
11850 61 6d 65 20 24 41 41 41 41 2e 20 20 5e 28 54 68  ame $AAAA.  ^(Th
11860 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  e identifier nam
11870 65 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 63  e in this case c
11880 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f  an include.one o
11890 72 20 6d 6f 72 65 20 6f 63 63 75 72 72 65 6e 63  r more occurrenc
118a0 65 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64 20 61  es of "::" and a
118b0 20 73 75 66 66 69 78 20 65 6e 63 6c 6f 73 65 64   suffix enclosed
118c0 20 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f 6e 74   in "(...)" cont
118d0 61 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78 74 20  aining.any text 
118e0 61 74 20 61 6c 6c 2e 29 5e 20 20 54 68 69 73 20  at all.)^  This 
118f0 73 79 6e 74 61 78 20 69 73 20 74 68 65 20 66 6f  syntax is the fo
11900 72 6d 20 6f 66 20 61 20 76 61 72 69 61 62 6c 65  rm of a variable
11910 20 6e 61 6d 65 20 69 6e 20 74 68 65 0a 5b 68 74   name in the.[ht
11920 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f  tp://www.tcl.tk/
11930 20 7c 20 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69   | Tcl programmi
11940 6e 67 20 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54  ng language].  T
11950 68 65 20 70 72 65 73 65 6e 63 65 0a 6f 66 20 74  he presence.of t
11960 68 69 73 20 73 79 6e 74 61 78 20 72 65 73 75 6c  his syntax resul
11970 74 73 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74  ts from the fact
11980 20 74 68 61 74 20 53 51 4c 69 74 65 20 69 73 20   that SQLite is 
11990 72 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65  really a .[Tcl e
119a0 78 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68  xtension] that h
119b0 61 73 20 65 73 63 61 70 65 64 20 69 6e 74 6f 20  as escaped into 
119c0 74 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c  the wild.</td>.<
119d0 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
119e0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
119f0 5e 50 61 72 61 6d 65 74 65 72 73 20 74 68 61 74  ^Parameters that
11a00 20 61 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65   are not assigne
11a10 64 20 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b  d values using.[
11a20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
11a30 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69  b() | sqlite3_bi
11a40 6e 64 28 29 5d 20 61 72 65 20 74 72 65 61 74 65  nd()] are treate
11a50 64 0a 61 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a  d.as NULL.</p>..
11a60 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20  <p>^The maximum 
11a70 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
11a80 20 69 73 20 73 65 74 20 61 74 20 63 6f 6d 70 69   is set at compi
11a90 6c 65 2d 74 69 6d 65 20 62 79 0a 74 68 65 20 5b  le-time by.the [
11aa0 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
11ab0 42 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d 61 63 72  BLE_NUMBER] macr
11ac0 6f 2e 20 20 5e 28 41 6e 20 69 6e 64 69 76 69 64  o.  ^(An individ
11ad0 75 61 6c 20 5b 64 61 74 61 62 61 73 65 20 63 6f  ual [database co
11ae0 6e 6e 65 63 74 69 6f 6e 73 5d 0a 44 20 63 61 6e  nnections].D can
11af0 20 72 65 64 75 63 65 20 69 74 73 20 6d 61 78 69   reduce its maxi
11b00 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75  mum parameter nu
11b10 6d 62 65 72 20 62 65 6c 6f 77 20 74 68 65 20 63  mber below the c
11b20 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61 78 69  ompile-time maxi
11b30 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65 20 5b 73  mum.using the [s
11b40 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 44 2c  qlite3_limit](D,
11b50 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56   [SQLITE_LIMIT_V
11b60 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c  ARIABLE_NUMBER],
11b70 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 2e 29  ...) interface.)
11b80 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ^.</p>..<tcl>hd_
11b90 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20 4c 49  fragment like LI
11ba0 4b 45 20 45 53 43 41 50 45 3c 2f 74 63 6c 3e 0a  KE ESCAPE</tcl>.
11bb0 3c 68 33 3e 54 68 65 20 4c 49 4b 45 20 61 6e 64  <h3>The LIKE and
11bc0 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 73 3c   GLOB operators<
11bd0 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b  /h3>.<p>^The LIK
11be0 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65 73 20  E operator does 
11bf0 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 69  a pattern matchi
11c00 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e  ng comparison. ^
11c10 54 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f 20 74  The operand.to t
11c20 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65 20  he right of the 
11c30 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63 6f  LIKE operator co
11c40 6e 74 61 69 6e 73 20 74 68 65 20 70 61 74 74 65  ntains the patte
11c50 72 6e 20 61 6e 64 20 74 68 65 20 6c 65 66 74 20  rn and the left 
11c60 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20 63 6f 6e  hand.operand con
11c70 74 61 69 6e 73 20 74 68 65 20 73 74 72 69 6e 67  tains the string
11c80 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69 6e 73   to match agains
11c90 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e 0a 0a  t the pattern...
11ca0 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 5e 41  <tcl>hd_puts "^A
11cb0 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20   percent symbol 
11cc0 28 5c 22 25 5c 22 29 20 69 6e 20 74 68 65 20 4c  (\"%\") in the L
11cd0 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61 74 63  IKE pattern matc
11ce0 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e 63 65  hes any.sequence
11cf0 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   of zero or more
11d00 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
11d10 68 65 20 73 74 72 69 6e 67 2e 20 20 5e 41 6e 20  he string.  ^An 
11d20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c 22 5f 5c  underscore.(\"_\
11d30 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70  ") in the LIKE p
11d40 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20 61  attern matches a
11d50 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63  ny single charac
11d60 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72 69 6e  ter in the.strin
11d70 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68 65 72 20  g.  ^(Any other 
11d80 63 68 61 72 61 63 74 65 72 20 6d 61 74 63 68 65  character matche
11d90 73 20 69 74 73 65 6c 66 20 6f 72 20 69 74 73 20  s itself or its 
11da0 6c 6f 77 65 72 2f 75 70 70 65 72 20 63 61 73 65  lower/upper case
11db0 0a 65 71 75 69 76 61 6c 65 6e 74 20 28 69 2e 65  .equivalent (i.e
11dc0 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69  . case-insensiti
11dd0 76 65 20 6d 61 74 63 68 69 6e 67 29 2e 29 5e 20  ve matching).)^ 
11de0 20 28 41 20 62 75 67 3a 20 5e 53 51 4c 69 74 65   (A bug: ^SQLite
11df0 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64   only.understand
11e00 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20 63 61  s upper/lower ca
11e10 73 65 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  se for ASCII cha
11e20 72 61 63 74 65 72 73 20 62 79 20 64 65 66 61 75  racters by defau
11e30 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f  lt.  ^The.LIKE o
11e40 70 65 72 61 74 6f 72 20 69 73 20 63 61 73 65 20  perator is case 
11e50 73 65 6e 73 69 74 69 76 65 20 62 79 20 64 65 66  sensitive by def
11e60 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f 64 65  ault for unicode
11e70 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
11e80 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68 65 20   are.beyond the 
11e90 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20 46 6f  ASCII range.  Fo
11ea0 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20  r example,.^the 
11eb0 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61  expression <b>'a
11ec0 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70  '&nbsp;LIKE&nbsp
11ed0 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45  ;'A'</b>.is TRUE
11ee0 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b   but <b>'&aelig;
11ef0 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70  '&nbsp;LIKE&nbsp
11f00 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69  ;'&AElig;'</b> i
11f10 73 20 46 41 4c 53 45 2e 29 3c 70 3e 22 3c 2f 74  s FALSE.)<p>"</t
11f20 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  cl>..<p>^If the 
11f30 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20  optional ESCAPE 
11f40 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
11f50 74 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72  t, then the expr
11f60 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67  ession.following
11f70 20 74 68 65 20 45 53 43 41 50 45 20 6b 65 79 77   the ESCAPE keyw
11f80 6f 72 64 20 6d 75 73 74 20 65 76 61 6c 75 61 74  ord must evaluat
11f90 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f  e to a string co
11fa0 6e 73 69 73 74 69 6e 67 20 6f 66 0a 61 20 73 69  nsisting of.a si
11fb0 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 2e 20  ngle character. 
11fc0 5e 54 68 69 73 20 63 68 61 72 61 63 74 65 72 20  ^This character 
11fd0 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 74  may be used in t
11fe0 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 0a  he LIKE pattern.
11ff0 74 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74 65 72  to include liter
12000 61 6c 20 70 65 72 63 65 6e 74 20 6f 72 20 75 6e  al percent or un
12010 64 65 72 73 63 6f 72 65 20 63 68 61 72 61 63 74  derscore charact
12020 65 72 73 2e 20 5e 54 68 65 20 65 73 63 61 70 65  ers. ^The escape
12030 0a 63 68 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f  .character follo
12040 77 65 64 20 62 79 20 61 20 70 65 72 63 65 6e 74  wed by a percent
12050 20 73 79 6d 62 6f 6c 20 28 25 29 2c 20 75 6e 64   symbol (%), und
12060 65 72 73 63 6f 72 65 20 28 5f 29 2c 20 6f 72 20  erscore (_), or 
12070 61 20 73 65 63 6f 6e 64 0a 69 6e 73 74 61 6e 63  a second.instanc
12080 65 20 6f 66 20 74 68 65 20 65 73 63 61 70 65 20  e of the escape 
12090 63 68 61 72 61 63 74 65 72 20 69 74 73 65 6c 66  character itself
120a0 20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74 65 72   matches a.liter
120b0 61 6c 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f  al percent symbo
120c0 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 2c 20 6f  l, underscore, o
120d0 72 20 61 20 73 69 6e 67 6c 65 20 65 73 63 61 70  r a single escap
120e0 65 20 63 68 61 72 61 63 74 65 72 2c 0a 72 65 73  e character,.res
120f0 70 65 63 74 69 76 65 6c 79 2e 0a 0a 3c 70 3e 5e  pectively...<p>^
12100 54 68 65 20 69 6e 66 69 78 20 4c 49 4b 45 20 6f  The infix LIKE o
12110 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65  perator is imple
12120 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e  mented by callin
12130 67 20 74 68 65 0a 61 70 70 6c 69 63 61 74 69 6f  g the.applicatio
12140 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75  n-defined SQL fu
12150 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69  nctions [like(<i
12160 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29  >Y</i>,<i>X</i>)
12170 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c  ] or.[like(<i>Y<
12180 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e  /i>,<i>X</i>,<i>
12190 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e  Z</i>)]</a>.</p>
121a0 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f  ..<p>^The LIKE o
121b0 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 6d  perator can be m
121c0 61 64 65 20 63 61 73 65 20 73 65 6e 73 69 74 69  ade case sensiti
121d0 76 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 63 61  ve using the.[ca
121e0 73 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b  se_sensitive_lik
121f0 65 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a  e pragma].</p>..
12200 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
12210 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63 6c 3e   glob GLOB</tcl>
12220 0a 3c 70 3e 5e 54 68 65 20 47 4c 4f 42 20 6f 70  .<p>^The GLOB op
12230 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69 6c 61  erator is simila
12240 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20 75 73  r to LIKE but us
12250 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69 6c 65  es the Unix.file
12260 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74 61 78   globbing syntax
12270 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63 61 72   for its wildcar
12280 64 73 2e 20 20 5e 41 6c 73 6f 2c 20 47 4c 4f 42  ds.  ^Also, GLOB
12290 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69 74 69   is case.sensiti
122a0 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e  ve, unlike LIKE.
122b0 20 20 5e 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64    ^Both GLOB and
122c0 20 4c 49 4b 45 20 6d 61 79 20 62 65 20 70 72 65   LIKE may be pre
122d0 63 65 64 65 64 20 62 79 0a 74 68 65 20 4e 4f 54  ceded by.the NOT
122e0 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65   keyword to inve
122f0 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20  rt the sense of 
12300 74 68 65 20 74 65 73 74 2e 20 20 5e 54 68 65 20  the test.  ^The 
12310 69 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72  infix GLOB .oper
12320 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e  ator is implemen
12330 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74  ted by calling t
12340 68 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f  he function.[glo
12350 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c  b(<i>Y</i>,<i>X<
12360 2f 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20 62 65  /i>)] and can be
12370 20 6d 6f 64 69 66 69 65 64 20 62 79 20 6f 76 65   modified by ove
12380 72 72 69 64 69 6e 67 0a 74 68 61 74 20 66 75 6e  rriding.that fun
12390 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ction.</p>..<tcl
123a0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 67  >hd_fragment reg
123b0 65 78 70 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e  exp REGEXP</tcl>
123c0 0a 3c 70 3e 5e 54 68 65 20 52 45 47 45 58 50 20  .<p>^The REGEXP 
123d0 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70  operator is a sp
123e0 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72  ecial syntax for
123f0 20 74 68 65 20 72 65 67 65 78 70 28 29 0a 75 73   the regexp().us
12400 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 4e  er function.  ^N
12410 6f 20 72 65 67 65 78 70 28 29 20 75 73 65 72 20  o regexp() user 
12420 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
12430 6e 65 64 20 62 79 20 64 65 66 61 75 6c 74 0a 61  ned by default.a
12440 6e 64 20 73 6f 20 75 73 65 20 6f 66 20 74 68 65  nd so use of the
12450 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72   REGEXP operator
12460 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72   will normally r
12470 65 73 75 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f  esult in an.erro
12480 72 20 6d 65 73 73 61 67 65 2e 20 20 5e 49 66 20  r message.  ^If 
12490 61 20 5b 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  a [application-d
124a0 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74  efined SQL funct
124b0 69 6f 6e 5d 20 6e 61 6d 65 64 20 22 72 65 67 65  ion] named "rege
124c0 78 70 22 0a 69 73 20 61 64 64 65 64 20 61 74 20  xp".is added at 
124d0 72 75 6e 2d 74 69 6d 65 2c 20 74 68 61 74 20 66  run-time, that f
124e0 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  unction will be 
124f0 63 61 6c 6c 65 64 20 69 6e 20 6f 72 64 65 72 0a  called in order.
12500 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
12510 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72   REGEXP operator
12520 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
12530 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20 4d 41  ragment match MA
12540 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68  TCH</tcl>.<p>^Th
12550 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72  e MATCH operator
12560 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79   is a special sy
12570 6e 74 61 78 20 66 6f 72 20 74 68 65 20 6d 61 74  ntax for the mat
12580 63 68 28 29 0a 61 70 70 6c 69 63 61 74 69 6f 6e  ch().application
12590 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
125a0 6e 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c 74  n.  ^The default
125b0 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f   match() functio
125c0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
125d0 0a 72 61 69 73 65 73 20 61 6e 20 65 78 63 65 70  .raises an excep
125e0 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20  tion and is not 
125f0 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f  really useful fo
12600 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42 75 74  r anything..^But
12610 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20   extensions can 
12620 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d 61 74  override the mat
12630 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 69  ch() function wi
12640 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75 6c 20  th more.helpful 
12650 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  logic.</p>..<tcl
12660 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 65 74  >hd_fragment bet
12670 77 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f 74 63  ween BETWEEN</tc
12680 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54 57 45  l>.<h3>The BETWE
12690 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e  EN operator</h3>
126a0 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54 57 45 45  .<p>^(The BETWEE
126b0 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 6c 6f  N operator is lo
126c0 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c 65  gically equivale
126d0 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f 66 20  nt to a pair of 
126e0 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22 3c 69  comparisons.."<i
126f0 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54 57 45 45  >x</i> <b>BETWEE
12700 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e 20 3c  N</b> <i>y</i> <
12710 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a 3c 2f  b>AND</b> <i>z</
12720 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61 6c 65  i>" is .equivale
12730 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f 69 3e  nt to ."<i>x</i>
12740 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e 79  <b>&gt;=</b><i>y
12750 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20  </i> <b>AND</b> 
12760 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74 3b 3d  <i>x</i><b>&lt;=
12770 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20 65 78  </b><i>z</i>" ex
12780 63 65 70 74 0a 74 68 61 74 20 77 69 74 68 20 42  cept.that with B
12790 45 54 57 45 45 4e 2c 20 74 68 65 20 3c 69 3e 78  ETWEEN, the <i>x
127a0 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e 20  </i> expression 
127b0 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75 61 74 65  is only evaluate
127c0 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65 20 70  d once.)^.^The p
127d0 72 65 63 65 64 65 6e 63 65 20 6f 66 20 74 68 65  recedence of the
127e0 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f   BETWEEN operato
127f0 72 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  r is the same as
12800 20 74 68 65 20 70 72 65 63 65 64 65 6e 63 65 0a   the precedence.
12810 61 73 20 6f 70 65 72 61 74 6f 72 73 20 3c 62 3e  as operators <b>
12820 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 21 3d  ==</b> and <b>!=
12830 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c 49 4b 45  </b> and <b>LIKE
12840 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75 70 73 20  </b> and groups 
12850 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 0a 0a  left to right...
12860 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
12870 20 63 61 73 65 20 7b 43 41 53 45 20 65 78 70 72   case {CASE expr
12880 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68  ession}</tcl>.<h
12890 33 3e 54 68 65 20 43 41 53 45 20 65 78 70 72 65  3>The CASE expre
128a0 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e 41 20  ssion</h3>.<p>A 
128b0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
128c0 73 65 72 76 65 73 20 61 20 72 6f 6c 65 20 73 69  serves a role si
128d0 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54 48 45 4e  milar to IF-THEN
128e0 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65 72 0a 70  -ELSE in other.p
128f0 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75  rogramming langu
12900 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54 68 65 20  ages.  ..<p>The 
12910 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72 65 73 73  optional express
12920 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72 73 20  ion that occurs 
12930 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 43  in between the C
12940 41 53 45 20 6b 65 79 77 6f 72 64 20 61 6e 64 20  ASE keyword and 
12950 74 68 65 0a 66 69 72 73 74 20 57 48 45 4e 20 6b  the.first WHEN k
12960 65 79 77 6f 72 64 20 69 73 20 63 61 6c 6c 65 64  eyword is called
12970 20 74 68 65 20 22 62 61 73 65 22 20 65 78 70 72   the "base" expr
12980 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72 65 20 61  ession. ^There a
12990 72 65 20 74 77 6f 20 62 61 73 69 63 20 66 6f 72  re two basic for
129a0 6d 73 0a 6f 66 20 74 68 65 20 43 41 53 45 20 65  ms.of the CASE e
129b0 78 70 72 65 73 73 69 6f 6e 3a 20 74 68 6f 73 65  xpression: those
129c0 20 77 69 74 68 20 61 20 62 61 73 65 20 65 78 70   with a base exp
129d0 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 6f 73  ression and thos
129e0 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c 70 3e 5e  e without...<p>^
129f0 49 6e 20 61 20 43 41 53 45 20 77 69 74 68 6f 75  In a CASE withou
12a00 74 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73  t a base express
12a10 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e 20 65  ion, each WHEN e
12a20 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
12a30 6c 75 61 74 65 64 0a 61 6e 64 20 74 68 65 20 72  luated.and the r
12a40 65 73 75 6c 74 20 74 72 65 61 74 65 64 20 61 73  esult treated as
12a50 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73 74 61 72   a boolean, star
12a60 74 69 6e 67 20 77 69 74 68 20 74 68 65 20 6c 65  ting with the le
12a70 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f 6e 74 69  ftmost and conti
12a80 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20 72 69 67  nuing.to the rig
12a90 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20  ht. ^The result 
12aa0 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72  of the CASE expr
12ab0 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 65 76  ession is the ev
12ac0 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  aluation of the 
12ad0 54 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20  THEN.expression 
12ae0 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
12af0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 57 48   to the first WH
12b00 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  EN expression th
12b10 61 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f 0a  at evaluates to.
12b20 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f  true. ^Or, if no
12b30 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65  ne of the WHEN e
12b40 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75  xpressions evalu
12b50 61 74 65 20 74 6f 20 74 72 75 65 2c 20 74 68 65  ate to true, the
12b60 20 72 65 73 75 6c 74 20 6f 66 0a 65 76 61 6c 75   result of.evalu
12b70 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65  ating the ELSE e
12b80 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e  xpression, if an
12b90 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73 20  y. ^If there is 
12ba0 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73 73 69  no ELSE expressi
12bb0 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74  on and.none of t
12bc0 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73 69  he WHEN expressi
12bd0 6f 6e 73 20 61 72 65 20 74 72 75 65 2c 20 74 68  ons are true, th
12be0 65 6e 20 74 68 65 20 6f 76 65 72 61 6c 6c 20 72  en the overall r
12bf0 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a  esult is NULL...
12c00 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73 75 6c  <p>^A NULL resul
12c10 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  t is considered 
12c20 75 6e 74 72 75 65 20 77 68 65 6e 20 65 76 61 6c  untrue when eval
12c30 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65 72 6d  uating WHEN term
12c40 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53  s...<p>^In a CAS
12c50 45 20 77 69 74 68 20 61 20 62 61 73 65 20 65 78  E with a base ex
12c60 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 62 61  pression, the ba
12c70 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  se expression is
12c80 20 65 76 61 6c 75 61 74 65 64 20 6a 75 73 74 0a   evaluated just.
12c90 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72 65 73  once and the res
12ca0 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65 64 20  ult is compared 
12cb0 61 67 61 69 6e 73 74 20 74 68 65 20 65 76 61 6c  against the eval
12cc0 75 61 74 69 6f 6e 20 6f 66 20 65 61 63 68 20 57  uation of each W
12cd0 48 45 4e 20 0a 65 78 70 72 65 73 73 69 6f 6e 20  HEN .expression 
12ce0 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
12cf0 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20  ht. ^The result 
12d00 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72  of the CASE expr
12d10 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 0a 65  ession is the .e
12d20 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65  valuation of the
12d30 20 54 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   THEN expression
12d40 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
12d50 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 57  s to the first W
12d60 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20 66  HEN.expression f
12d70 6f 72 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d  or which the com
12d80 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
12d90 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66   ^Or, if none of
12da0 20 74 68 65 20 57 48 45 4e 0a 65 78 70 72 65 73   the WHEN.expres
12db0 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20 74  sions evaluate t
12dc0 6f 20 61 20 76 61 6c 75 65 20 65 71 75 61 6c 20  o a value equal 
12dd0 74 6f 20 74 68 65 20 62 61 73 65 20 65 78 70 72  to the base expr
12de0 65 73 73 69 6f 6e 2c 20 74 68 65 20 72 65 73 75  ession, the resu
12df0 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  lt.of evaluating
12e00 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65 73   the ELSE expres
12e10 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49  sion, if any. ^I
12e20 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 45 4c  f there is no EL
12e30 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  SE expression an
12e40 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48  d.none of the WH
12e50 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 70  EN expressions p
12e60 72 6f 64 75 63 65 20 61 20 72 65 73 75 6c 74 20  roduce a result 
12e70 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62 61 73  equal to the bas
12e80 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 0a 74 68  e expression,.th
12e90 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c 74  e overall result
12ea0 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 57   is NULL...<p>^W
12eb0 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 61 20  hen comparing a 
12ec0 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
12ed0 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e 20 65  against a WHEN e
12ee0 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 73  xpression, the s
12ef0 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ame.collating se
12f00 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69 74 79  quence, affinity
12f10 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e 64 6c  , and NULL-handl
12f20 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c 79 20  ing rules apply 
12f30 61 73 20 69 66 20 74 68 65 0a 62 61 73 65 20 65  as if the.base e
12f40 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 57 48  xpression and WH
12f50 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 72  EN expression ar
12f60 65 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 74  e respectively t
12f70 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72 69 67  he left- and.rig
12f80 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 73  ht-hand operands
12f90 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62 3e 3d   of an <big><b>=
12fa0 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65 72 61  </b></big> opera
12fb0 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20 74 68 65  tor.</p> ^If the
12fc0 20 62 61 73 65 20 0a 65 78 70 72 65 73 73 69 6f   base .expressio
12fd0 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  n is NULL then t
12fe0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
12ff0 20 43 41 53 45 20 69 73 20 61 6c 77 61 79 73 20   CASE is always 
13000 74 68 65 20 72 65 73 75 6c 74 20 0a 6f 66 20 65  the result .of e
13010 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c  valuating the EL
13020 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 66  SE expression if
13030 20 69 74 20 65 78 69 73 74 73 2c 20 6f 72 20 4e   it exists, or N
13040 55 4c 4c 20 69 66 20 69 74 20 64 6f 65 73 20 6e  ULL if it does n
13050 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20 66 6f  ot...<p>^Both fo
13060 72 6d 73 20 6f 66 20 74 68 65 20 43 41 53 45 20  rms of the CASE 
13070 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 20 6c  expression use l
13080 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74 2d 63 69  azy, or short-ci
13090 72 63 75 69 74 2c 20 0a 65 76 61 6c 75 61 74 69  rcuit, .evaluati
130a0 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 6e  on...<p>^(The on
130b0 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  ly difference be
130c0 74 77 65 65 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  tween the follow
130d0 69 6e 67 20 74 77 6f 20 43 41 53 45 20 65 78 70  ing two CASE exp
130e0 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68 61 74  ressions is that
130f0 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65   .the <i>x</i> e
13100 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
13110 6c 75 61 74 65 64 20 65 78 61 63 74 6c 79 20 6f  luated exactly o
13120 6e 63 65 20 69 6e 20 74 68 65 20 66 69 72 73 74  nce in the first
13130 20 65 78 61 6d 70 6c 65 20 62 75 74 20 0a 6d 69   example but .mi
13140 67 68 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ght be evaluated
13150 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20   multiple times 
13160 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 3a 0a 0a  in the second:..
13170 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e 43 41  <ul><pre>.<li>CA
13180 53 45 20 78 20 57 48 45 4e 20 77 31 20 54 48 45  SE x WHEN w1 THE
13190 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54 48 45  N r1 WHEN w2 THE
131a0 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e 44  N r2 ELSE r3 END
131b0 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e 20 78  .<li>CASE WHEN x
131c0 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48 45 4e  =w1 THEN r1 WHEN
131d0 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20 45 4c   x=w2 THEN r2 EL
131e0 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70 72 65 3e  SE r3 END.</pre>
131f0 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e 68  </ul>)^...<tcl>h
13200 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70  d_fragment in_op
13210 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72 7d 20 7b   {IN operator} {
13220 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 7d  NOT IN operator}
13230 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 49  </tcl>.<h3>The I
13240 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65  N and NOT IN ope
13250 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
13260 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49  The IN and NOT I
13270 4e 20 6f 70 65 72 61 74 6f 72 73 20 74 61 6b 65  N operators take
13280 20 61 20 73 69 6e 67 6c 65 20 73 63 61 6c 61 72   a single scalar
13290 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65 0a   operand on the.
132a0 6c 65 66 74 20 61 6e 64 20 61 20 76 65 63 74 6f  left and a vecto
132b0 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65  r operand on the
132c0 20 72 69 67 68 74 0a 66 6f 72 6d 65 64 20 62 79   right.formed by
132d0 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c 69 73   an explicit lis
132e0 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  t of zero or mor
132f0 65 20 73 63 61 6c 61 72 73 20 6f 72 20 62 79 20  e scalars or by 
13300 61 20 0a 73 69 6e 67 6c 65 20 73 75 62 71 75 65  a .single subque
13310 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72 69  ry..^When the ri
13320 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 61  ght operand of a
13330 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f  n IN or NOT IN o
13340 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 75 62  perator is a sub
13350 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62 71 75  query, the.subqu
13360 65 72 79 20 6d 75 73 74 20 68 61 76 65 20 61 20  ery must have a 
13370 73 69 6e 67 6c 65 20 72 65 73 75 6c 74 20 63 6f  single result co
13380 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68 65 20  lumn..^When the 
13390 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 69 73  right operand is
133a0 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c 20 74   an empty set, t
133b0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 20  he result of IN 
133c0 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74 68 65  is false and the
133d0 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54 20 49  .result of NOT I
133e0 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67 61 72  N is true, regar
133f0 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c 65 66  dless of the lef
13400 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20 65 76  t operand and ev
13410 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74 20 6f  en if the.left o
13420 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a  perand is NULL..
13430 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20  ^(The result of 
13440 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20  an IN or NOT IN 
13450 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65 74 65  operator is dete
13460 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 66 6f  rmined by the fo
13470 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78 3a 0a  llowing.matrix:.
13480 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c 65  .<center>.<table
13490 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a   border=1>.<tr>.
134a0 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64  <th>Left operand
134b0 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c 74 68   <br>is NULL.<th
134c0 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20 3c  >Right operand <
134d0 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55 4c 4c  br>contains NULL
134e0 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65 72 61  .<th>Right opera
134f0 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65 6d 70  nd <br>is an emp
13500 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66 74 20  ty set.<th>Left 
13510 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20 3c 62  operand found <b
13520 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74 20 6f  r>within right o
13530 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73 75 6c  perand.<th>Resul
13540 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70 65 72  t of <br>IN oper
13550 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c 74 20  ator.<th>Result 
13560 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20 6f 70  of <br>NOT IN op
13570 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74 64 20  erator.<tr>.<td 
13580 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13590 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
135a0 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
135b0 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
135c0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
135d0 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
135e0 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64  enter">false.<td
135f0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13600 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  true.<tr>.<td al
13610 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65  ign="center">doe
13620 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64  s not matter.<td
13630 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13640 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
13650 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c  nter">yes.<td al
13660 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
13670 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
13680 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c 69  r">false.<td ali
13690 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65  gn="center">true
136a0 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
136b0 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
136c0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64  align="center">d
136d0 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c  oes not matter.<
136e0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
136f0 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
13700 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20  center">yes.<td 
13710 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74  align="center">t
13720 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  rue.<td align="c
13730 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 72  enter">false.<tr
13740 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
13750 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
13760 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c  n="center">yes.<
13770 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13780 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
13790 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
137a0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
137b0 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  LL.<td align="ce
137c0 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72 3e 0a  nter">NULL.<tr>.
137d0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
137e0 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e  r">yes.<td align
137f0 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e  ="center">does n
13800 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c  ot matter.<td al
13810 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
13820 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
13830 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74  r">does not matt
13840 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  er.<td align="ce
13850 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61  nter">NULL.<td a
13860 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
13870 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65  LL.</table>.</ce
13880 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e 6f 74  nter>)^..<p>^Not
13890 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 61 6c  e that SQLite al
138a0 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e 74 68  lows the parenth
138b0 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 73  esized list of s
138c0 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f 6e 0a  calar values on.
138d0 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73  the right-hand s
138e0 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20  ide of an IN or 
138f0 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  NOT IN operator 
13900 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79 20 6c  to be an empty l
13910 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f 74 68  ist but.most oth
13920 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  er SQL database 
13930 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
13940 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32 20 73   and the SQL92 s
13950 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65 0a  tandard require.
13960 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f 6e 74  the list to cont
13970 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  ain at least one
13980 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c   element.</p>..<
13990 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
139a0 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53 20 6f 70  in_op {EXISTS op
139b0 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 45 58 49  erator} {NOT EXI
139c0 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74  STS operator}</t
139d0 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45 58 49 53  cl>.<h3>The EXIS
139e0 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e  TS operator</h3>
139f0 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49 53 54 53  ..<p>^The EXISTS
13a00 20 6f 70 65 72 61 74 6f 72 20 61 6c 77 61 79 73   operator always
13a10 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6f 6e   evaluates to on
13a20 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
13a30 20 76 61 6c 75 65 73 20 30 20 0a 61 6e 64 20 31   values 0 .and 1
13a40 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20  . ^If executing 
13a50 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
13a60 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64 20 61  ment specified a
13a70 73 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  s the right-hand
13a80 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65   .operand of the
13a90 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
13aa0 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6f 6e   would return on
13ab0 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 2c 20  e or more rows, 
13ac0 74 68 65 6e 20 74 68 65 0a 45 58 49 53 54 53 20  then the.EXISTS 
13ad0 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74  operator evaluat
13ae0 65 73 20 74 6f 20 31 2e 20 5e 49 66 20 65 78 65  es to 1. ^If exe
13af0 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43  cuting the SELEC
13b00 54 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 0a 6e  T would return.n
13b10 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 2c 20 74  o rows at all, t
13b20 68 65 6e 20 74 68 65 20 45 58 49 53 54 53 20 6f  hen the EXISTS o
13b30 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
13b40 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54 68  s to 0. ..<p>^Th
13b50 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
13b60 6d 6e 73 20 69 6e 20 65 61 63 68 20 72 6f 77 20  mns in each row 
13b70 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
13b80 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
13b90 0a 28 69 66 20 61 6e 79 29 20 61 6e 64 20 74 68  .(if any) and th
13ba0 65 20 73 70 65 63 69 66 69 63 20 76 61 6c 75 65  e specific value
13bb0 73 20 72 65 74 75 72 6e 65 64 20 68 61 76 65 20  s returned have 
13bc0 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65  no effect on the
13bd0 20 72 65 73 75 6c 74 73 0a 6f 66 20 74 68 65 20   results.of the 
13be0 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 2e  EXISTS operator.
13bf0 20 5e 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c   ^In particular,
13c00 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 69 6e 67   rows containing
13c10 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
13c20 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20 61 6e 79  .not handled any
13c30 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66 72 6f   differently fro
13c40 6d 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20 4e  m rows without N
13c50 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c 68 33  ULL values...<h3
13c60 3e 53 63 61 6c 61 72 20 53 75 62 71 75 65 72 69  >Scalar Subqueri
13c70 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 5b  es</h3>..<p>^A [
13c80 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
13c90 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61  t enclosed in pa
13ca0 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20 61 70  rentheses may ap
13cb0 70 65 61 72 20 61 73 20 61 20 73 63 61 6c 61 72  pear as a scalar
13cc0 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41 20 5b 53  .quantity. ^A [S
13cd0 45 4c 45 43 54 5d 20 75 73 65 64 20 61 73 20 61  ELECT] used as a
13ce0 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69 74 79   scalar quantity
13cf0 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61 20 72   must return a r
13d00 65 73 75 6c 74 20 73 65 74 0a 77 69 74 68 20 61  esult set.with a
13d10 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
13d20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74  ^The result of t
13d30 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
13d40 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
13d50 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 69 6e  e.only column in
13d60 20 74 68 65 20 66 69 72 73 74 20 72 6f 77 20 72   the first row r
13d70 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
13d80 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
13d90 20 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20   ^If the SELECT 
13da0 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20 74 68 61  .yields more tha
13db0 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72 6f 77  n one result row
13dc0 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74 65 72  , all rows after
13dd0 20 74 68 65 20 66 69 72 73 74 20 61 72 65 20 69   the first are i
13de0 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74 68 65 20  gnored. ^If.the 
13df0 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20 6e 6f  SELECT yields no
13e00 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65 20   rows, then the 
13e10 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65 78 70  value of the exp
13e20 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 2e  ression is NULL.
13e30 0a 0a 3c 70 3e 5e 41 6c 6c 20 74 79 70 65 73 20  ..<p>^All types 
13e40 6f 66 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74  of [SELECT] stat
13e50 65 6d 65 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67  ement, including
13e60 20 61 67 67 72 65 67 61 74 65 20 61 6e 64 20 63   aggregate and c
13e70 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 0a 71  ompound SELECT.q
13e80 75 65 72 69 65 73 20 28 71 75 65 72 69 65 73 20  ueries (queries 
13e90 77 69 74 68 20 6b 65 79 77 6f 72 64 73 20 6c 69  with keywords li
13ea0 6b 65 20 55 4e 49 4f 4e 20 6f 72 20 45 58 43 45  ke UNION or EXCE
13eb0 50 54 29 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  PT) are allowed 
13ec0 61 73 20 73 63 61 6c 61 72 0a 73 75 62 71 75 65  as scalar.subque
13ed0 72 69 65 73 2e 0a 0a 3c 68 33 3e 54 61 62 6c 65  ries...<h3>Table
13ee0 20 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68   Column Names</h
13ef0 33 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e  3>..<p>^A column
13f00 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 61 6e 79   name can be any
13f10 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 64 65   of the names de
13f20 66 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 43 52  fined in the [CR
13f30 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74  EATE TABLE].stat
13f40 65 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20  ement or one of 
13f50 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70  the following sp
13f60 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72  ecial identifier
13f70 73 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e  s: "<b>ROWID</b>
13f80 22 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c  ",."<b>OID</b>",
13f90 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c   or "<b>_ROWID_<
13fa0 2f 62 3e 22 2e 0a 5e 54 68 65 73 65 20 73 70 65  /b>"..^These spe
13fb0 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
13fc0 20 61 6c 6c 20 64 65 73 63 72 69 62 65 20 74 68   all describe th
13fd0 65 0a 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e.unique integer
13fe0 20 6b 65 79 20 28 74 68 65 20 5b 72 6f 77 69 64   key (the [rowid
13ff0 5d 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ]) associated wi
14000 74 68 20 65 76 65 72 79 20 0a 72 6f 77 20 6f 66  th every .row of
14010 20 65 76 65 72 79 20 74 61 62 6c 65 2e 0a 5e 54   every table..^T
14020 68 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74  he special ident
14030 69 66 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65  ifiers only refe
14040 72 20 74 6f 20 74 68 65 20 72 6f 77 20 6b 65 79  r to the row key
14050 20 69 66 20 74 68 65 20 5b 43 52 45 41 54 45 20   if the [CREATE 
14060 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74  TABLE].statement
14070 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65   does not define
14080 20 61 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 20 77   a real column w
14090 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ith the same nam
140a0 65 2e 0a 5e 54 68 65 20 72 6f 77 69 64 20 63 61  e..^The rowid ca
140b0 6e 20 62 65 20 75 73 65 64 20 61 6e 79 77 68 65  n be used anywhe
140c0 72 65 20 61 20 72 65 67 75 6c 61 72 0a 63 6f 6c  re a regular.col
140d0 75 6d 6e 20 63 61 6e 20 62 65 20 75 73 65 64 2e  umn can be used.
140e0 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c  </p>..<p>^A [SEL
140f0 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 75  ECT] statement u
14100 73 65 64 20 61 73 20 65 69 74 68 65 72 20 61 20  sed as either a 
14110 73 63 61 6c 61 72 20 73 75 62 71 75 65 72 79 20  scalar subquery 
14120 6f 72 20 61 73 20 74 68 65 20 0a 72 69 67 68 74  or as the .right
14130 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66  -hand operand of
14140 20 61 6e 20 49 4e 2c 20 4e 4f 54 20 49 4e 20 6f   an IN, NOT IN o
14150 72 20 45 58 49 53 54 53 20 65 78 70 72 65 73 73  r EXISTS express
14160 69 6f 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  ion may contain 
14170 0a 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 63  .references to c
14180 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6f 75  olumns in the ou
14190 74 65 72 20 71 75 65 72 79 2e 20 53 75 63 68 20  ter query. Such 
141a0 61 20 73 75 62 71 75 65 72 79 20 69 73 20 6b 6e  a subquery is kn
141b0 6f 77 6e 20 61 73 0a 61 20 63 6f 72 72 65 6c 61  own as.a correla
141c0 74 65 64 20 73 75 62 71 75 65 72 79 2e 20 5e 41  ted subquery. ^A
141d0 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71   correlated subq
141e0 75 65 72 79 20 69 73 20 72 65 65 76 61 6c 75 61  uery is reevalua
141f0 74 65 64 20 65 61 63 68 20 74 69 6d 65 0a 69 74  ted each time.it
14200 73 20 72 65 73 75 6c 74 20 69 73 20 72 65 71 75  s result is requ
14210 69 72 65 64 2e 20 5e 41 6e 20 75 6e 63 6f 72 72  ired. ^An uncorr
14220 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20  elated subquery 
14230 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 6c  is evaluated onl
14240 79 20 6f 6e 63 65 0a 61 6e 64 20 74 68 65 20 72  y once.and the r
14250 65 73 75 6c 74 20 72 65 75 73 65 64 20 61 73 20  esult reused as 
14260 6e 65 63 65 73 73 61 72 79 2e 0a 0a 3c 74 63 6c  necessary...<tcl
14270 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73  >hd_fragment cas
14280 74 65 78 70 72 20 7b 43 41 53 54 20 65 78 70 72  texpr {CAST expr
14290 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68  ession}</tcl>.<h
142a0 33 3e 43 41 53 54 20 65 78 70 72 65 73 73 69 6f  3>CAST expressio
142b0 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 43 41  ns</h3>..<p>A CA
142c0 53 54 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ST expression is
142d0 20 75 73 65 64 20 74 6f 20 63 6f 6e 76 65 72 74   used to convert
142e0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 26 6c   the value of &l
142f0 74 3b 65 78 70 72 26 67 74 3b 20 74 6f 20 0a 61  t;expr&gt; to .a
14300 20 64 69 66 66 65 72 65 6e 74 20 5b 73 74 6f 72   different [stor
14310 61 67 65 20 63 6c 61 73 73 5d 20 69 6e 20 61 20  age class] in a 
14320 73 69 6d 69 6c 61 72 20 77 61 79 20 74 6f 20 74  similar way to t
14330 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 68  he conversion th
14340 61 74 20 74 61 6b 65 73 0a 70 6c 61 63 65 20 77  at takes.place w
14350 68 65 6e 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66  hen a [column af
14360 66 69 6e 69 74 79 5d 20 69 73 20 61 70 70 6c 69  finity] is appli
14370 65 64 20 74 6f 20 61 20 76 61 6c 75 65 2e 20 5e  ed to a value. ^
14380 41 70 70 6c 69 63 61 74 69 6f 6e 20 6f 66 20 61  Application of a
14390 20 43 41 53 54 0a 65 78 70 72 65 73 73 69 6f 6e   CAST.expression
143a0 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 74 6f   is different to
143b0 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6f 66 20   application of 
143c0 61 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  a column affinit
143d0 79 2c 20 61 73 0a 77 69 74 68 20 61 20 43 41 53  y, as.with a CAS
143e0 54 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 65  T expression the
143f0 20 73 74 6f 72 61 67 65 20 63 6c 61 73 73 20 63   storage class c
14400 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 66 6f 72  onversion is for
14410 63 65 64 20 65 76 65 6e 20 0a 69 66 20 69 74 20  ced even .if it 
14420 69 73 20 6c 6f 73 73 79 20 61 6e 64 20 69 72 72  is lossy and irr
14430 72 65 76 65 72 73 69 62 6c 65 2e 0a 0a 3c 70 3e  reversible...<p>
14440 5e 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ^If the value of
14450 20 26 6c 74 3b 65 78 70 72 26 67 74 3b 20 69 73   &lt;expr&gt; is
14460 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20   NULL, then the 
14470 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
14480 53 54 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ST.expression is
14490 20 61 6c 73 6f 20 4e 55 4c 4c 2e 20 5e 4f 74 68   also NULL. ^Oth
144a0 65 72 77 69 73 65 2c 20 74 68 65 20 73 74 6f 72  erwise, the stor
144b0 61 67 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65  age class of the
144c0 20 72 65 73 75 6c 74 20 76 61 6c 75 65 0a 69 73   result value.is
144d0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61   determined by a
144e0 70 70 6c 79 69 6e 67 20 74 68 65 20 5b 72 75 6c  pplying the [rul
144f0 65 73 20 66 6f 72 20 64 65 74 65 72 6d 69 6e 69  es for determini
14500 6e 67 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  ng column affini
14510 74 79 5d 20 74 6f 0a 74 68 65 20 26 6c 74 3b 74  ty] to.the &lt;t
14520 79 70 65 2d 6e 61 6d 65 26 67 74 3b 20 73 70 65  ype-name&gt; spe
14530 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
14540 66 20 74 68 65 20 43 41 53 54 20 65 78 70 72 65  f the CAST expre
14550 73 73 69 6f 6e 2e 0a 0a 3c 74 61 62 6c 65 20 62  ssion...<table b
14560 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20  order=1>.<tr>.  
14570 3c 74 68 3e 20 41 66 66 69 6e 69 74 79 20 6f 66  <th> Affinity of
14580 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67   &lt;type-name&g
14590 74 3b 0a 20 20 3c 74 68 3e 20 43 6f 6e 76 65 72  t;.  <th> Conver
145a0 73 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 0a  sion Processing.
145b0 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 4e 4f 4e 45  <tr>.  <td> NONE
145c0 20 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e   .  <td> ^Castin
145d0 67 20 61 20 76 61 6c 75 65 20 74 6f 20 61 20 26  g a value to a &
145e0 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b  lt;type-name&gt;
145f0 20 77 69 74 68 20 6e 6f 20 61 66 66 69 6e 69 74   with no affinit
14600 79 20 63 61 75 73 65 73 20 74 68 65 20 76 61 6c  y causes the val
14610 75 65 20 74 6f 0a 20 20 62 65 20 63 6f 6e 76 65  ue to.  be conve
14620 72 74 65 64 20 69 6e 74 6f 20 61 20 42 4c 4f 42  rted into a BLOB
14630 2e 20 20 5e 43 61 73 74 69 6e 67 20 74 6f 20 61  .  ^Casting to a
14640 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74 73 20 6f   BLOB consists o
14650 66 20 66 69 72 73 74 20 63 61 73 74 69 6e 67 0a  f first casting.
14660 20 20 74 68 65 20 76 61 6c 75 65 20 74 6f 20 54    the value to T
14670 45 58 54 20 69 6e 20 74 68 65 20 5b 65 6e 63 6f  EXT in the [enco
14680 64 69 6e 67 5d 20 6f 66 20 74 68 65 20 64 61 74  ding] of the dat
14690 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
146a0 2c 20 74 68 65 6e 0a 20 20 69 6e 74 65 72 70 72  , then.  interpr
146b0 65 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  eting the result
146c0 69 6e 67 20 62 79 74 65 20 73 65 71 75 65 6e 63  ing byte sequenc
146d0 65 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74  e as a BLOB inst
146e0 65 61 64 20 6f 66 20 61 73 20 54 45 58 54 2e 0a  ead of as TEXT..
146f0 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 54 45 58  .<tr>.  <td> TEX
14700 54 0a 20 20 3c 74 64 3e 20 5e 54 6f 20 63 61 73  T.  <td> ^To cas
14710 74 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74  t a BLOB value t
14720 6f 20 54 45 58 54 2c 20 74 68 65 20 73 65 71 75  o TEXT, the sequ
14730 65 6e 63 65 20 6f 66 20 62 79 74 65 73 20 74 68  ence of bytes th
14740 61 74 20 6d 61 6b 65 20 75 70 20 74 68 65 0a 20  at make up the. 
14750 20 42 4c 4f 42 20 69 73 20 69 6e 74 65 72 70 72   BLOB is interpr
14760 65 74 65 64 20 61 73 20 74 65 78 74 20 65 6e 63  eted as text enc
14770 6f 64 65 64 20 75 73 69 6e 67 20 74 68 65 20 64  oded using the d
14780 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67  atabase encoding
14790 2e 0a 20 20 3c 70 3e 0a 20 20 20 5e 43 61 73 74  ..  <p>.   ^Cast
147a0 69 6e 67 20 61 6e 20 49 4e 54 45 47 45 52 20 6f  ing an INTEGER o
147b0 72 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e 74  r REAL value int
147c0 6f 20 54 45 58 54 20 72 65 6e 64 65 72 73 20 74  o TEXT renders t
147d0 68 65 20 76 61 6c 75 65 20 61 73 20 69 66 20 76  he value as if v
147e0 69 61 20 0a 20 20 20 20 5b 73 71 6c 69 74 65 33  ia .    [sqlite3
147f0 5f 73 6e 70 72 69 6e 74 66 28 29 5d 20 65 78 63  _snprintf()] exc
14800 65 70 74 20 74 68 61 74 20 74 68 65 20 72 65 73  ept that the res
14810 75 6c 74 69 6e 67 20 54 45 58 54 20 75 73 65 73  ulting TEXT uses
14820 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20   the [encoding] 
14830 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74 61 62  of.    the datab
14840 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a  ase connection..
14850 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 52 45 41  .<tr>.  <td> REA
14860 4c 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e 20 63  L.  <td> ^When c
14870 61 73 74 69 6e 67 20 61 20 42 4c 4f 42 20 76 61  asting a BLOB va
14880 6c 75 65 20 74 6f 20 61 20 52 45 41 4c 2c 20 74  lue to a REAL, t
14890 68 65 20 76 61 6c 75 65 20 69 73 20 66 69 72 73  he value is firs
148a0 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20  t converted to. 
148b0 20 20 20 20 20 20 20 54 45 58 54 2e 0a 20 20 20         TEXT..   
148c0 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73      <p>^When cas
148d0 74 69 6e 67 20 61 20 54 45 58 54 20 76 61 6c 75  ting a TEXT valu
148e0 65 20 74 6f 20 52 45 41 4c 2c 20 74 68 65 20 6c  e to REAL, the l
148f0 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  ongest possible 
14900 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20  prefix of.      
14910 20 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74    the value that
14920 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
14930 74 65 64 20 61 73 20 61 20 72 65 61 6c 20 6e 75  ted as a real nu
14940 6d 62 65 72 20 69 73 20 65 78 74 72 61 63 74 65  mber is extracte
14950 64 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 74  d from.        t
14960 68 65 20 54 45 58 54 20 76 61 6c 75 65 20 61 6e  he TEXT value an
14970 64 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  d the remainder 
14980 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65  ignored. ^Any le
14990 61 64 69 6e 67 20 73 70 61 63 65 73 20 69 6e 20  ading spaces in 
149a0 74 68 65 0a 20 20 20 20 20 20 20 20 54 45 58 54  the.        TEXT
149b0 20 76 61 6c 75 65 20 61 72 65 20 69 67 6e 6f 72   value are ignor
149c0 65 64 20 77 68 65 6e 20 63 6f 6e 76 65 72 67 69  ed when convergi
149d0 6e 67 20 66 72 6f 6d 20 54 45 58 54 20 74 6f 20  ng from TEXT to 
149e0 52 45 41 4c 2e 20 5e 28 49 66 20 74 68 65 72 65  REAL. ^(If there
149f0 20 69 73 0a 20 20 20 20 20 20 20 20 6e 6f 20 70   is.        no p
14a00 72 65 66 69 78 20 74 68 61 74 20 63 61 6e 20 62  refix that can b
14a10 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
14a20 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20   a real number, 
14a30 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
14a40 65 0a 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72  e.        conver
14a50 73 69 6f 6e 20 69 73 20 30 2e 30 2e 29 5e 0a 0a  sion is 0.0.)^..
14a60 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 49 4e 54 45  <tr>.  <td> INTE
14a70 47 45 52 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e  GER.  <td> ^When
14a80 20 63 61 73 74 69 6e 67 20 61 20 42 4c 4f 42 20   casting a BLOB 
14a90 76 61 6c 75 65 20 74 6f 20 49 4e 54 45 47 45 52  value to INTEGER
14aa0 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 66  , the value is f
14ab0 69 72 73 74 20 63 6f 6e 76 65 72 74 65 64 20 74  irst converted t
14ac0 6f 0a 20 20 20 20 20 20 20 20 54 45 58 54 2e 0a  o.        TEXT..
14ad0 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20         <p>^When 
14ae0 63 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 76  casting a TEXT v
14af0 61 6c 75 65 20 74 6f 20 49 4e 54 45 47 45 52 2c  alue to INTEGER,
14b00 20 74 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73   the longest pos
14b10 73 69 62 6c 65 20 70 72 65 66 69 78 20 6f 66 0a  sible prefix of.
14b20 20 20 20 20 20 20 20 20 74 68 65 20 76 61 6c 75          the valu
14b30 65 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e  e that can be in
14b40 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20  terpreted as an 
14b50 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 69  integer number i
14b60 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d  s extracted from
14b70 0a 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58  .        the TEX
14b80 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  T value and the 
14b90 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65  remainder ignore
14ba0 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20  d. ^Any leading 
14bb0 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20  spaces in the.  
14bc0 20 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65        TEXT value
14bd0 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67   when converting
14be0 20 66 72 6f 6d 20 54 45 58 54 20 74 6f 20 49 4e   from TEXT to IN
14bf0 54 45 47 45 52 20 61 72 65 20 69 67 6e 6f 72 65  TEGER are ignore
14c00 64 2e 20 5e 49 66 20 74 68 65 72 65 0a 20 20 20  d. ^If there.   
14c10 20 20 20 20 20 69 73 20 6e 6f 20 70 72 65 66 69       is no prefi
14c20 78 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e  x that can be in
14c30 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20  terpreted as an 
14c40 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 2c 20  integer number, 
14c50 74 68 65 20 72 65 73 75 6c 74 0a 20 20 20 20 20  the result.     
14c60 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 76 65 72     of the conver
14c70 73 69 6f 6e 20 69 73 20 30 2e 0a 0a 20 20 20 20  sion is 0...    
14c80 20 20 3c 70 3e 5e 41 20 63 61 73 74 20 6f 66 20    <p>^A cast of 
14c90 61 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e 74  a REAL value int
14ca0 6f 20 61 6e 20 49 4e 54 45 47 45 52 20 77 69 6c  o an INTEGER wil
14cb0 6c 20 74 72 75 6e 63 61 74 65 20 74 68 65 20 66  l truncate the f
14cc0 72 61 63 74 69 6f 6e 61 6c 0a 20 20 20 20 20 20  ractional.      
14cd0 70 61 72 74 20 6f 66 20 74 68 65 20 52 45 41 4c  part of the REAL
14ce0 2e 20 20 5e 49 66 20 61 6e 20 52 45 41 4c 20 69  .  ^If an REAL i
14cf0 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62  s too large to b
14d00 65 20 72 65 70 72 65 73 65 6e 74 65 64 20 61 73  e represented as
14d10 20 61 6e 20 0a 20 20 20 20 20 20 49 4e 54 45 47   an .      INTEG
14d20 45 52 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  ER then the resu
14d30 6c 74 20 6f 66 20 74 68 65 20 63 61 73 74 20 69  lt of the cast i
14d40 73 20 74 68 65 20 6c 61 72 67 65 73 74 20 6e 65  s the largest ne
14d50 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 3a 20  gative integer: 
14d60 0a 20 20 20 20 20 20 2d 39 32 32 33 33 37 32 30  .      -92233720
14d70 33 36 38 35 34 37 37 35 38 30 38 2e 0a 0a 3c 74  36854775808...<t
14d80 72 3e 0a 20 20 3c 74 64 3e 20 4e 55 4d 45 52 49  r>.  <td> NUMERI
14d90 43 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e  C.  <td> ^Castin
14da0 67 20 61 20 54 45 58 54 20 6f 72 20 42 4c 4f 42  g a TEXT or BLOB
14db0 20 76 61 6c 75 65 20 69 6e 74 6f 20 4e 55 4d 45   value into NUME
14dc0 52 49 43 20 66 69 72 73 74 20 64 6f 65 73 20 61  RIC first does a
14dd0 20 66 6f 72 63 65 64 0a 20 20 20 63 6f 6e 76 65   forced.   conve
14de0 72 73 69 6f 6e 20 69 6e 74 6f 20 52 45 41 4c 20  rsion into REAL 
14df0 62 75 74 20 74 68 65 6e 20 66 75 72 74 68 65 72  but then further
14e00 20 63 6f 6e 76 65 72 74 73 20 74 68 65 20 72 65   converts the re
14e10 73 75 6c 74 20 69 6e 74 6f 20 49 4e 54 45 47 45  sult into INTEGE
14e20 52 20 69 66 0a 20 20 20 61 6e 64 20 6f 6e 6c 79  R if.   and only
14e30 20 69 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69   if the conversi
14e40 6f 6e 20 66 72 6f 6d 20 52 45 41 4c 20 74 6f 20  on from REAL to 
14e50 49 4e 54 45 47 45 52 20 69 73 20 6c 6f 73 73 6c  INTEGER is lossl
14e60 65 73 73 20 61 6e 64 20 72 65 76 65 72 73 69 62  ess and reversib
14e70 6c 65 2e 0a 20 20 20 54 68 69 73 20 69 73 20 74  le..   This is t
14e80 68 65 20 6f 6e 6c 79 20 63 6f 6e 74 65 78 74 20  he only context 
14e90 69 6e 20 53 51 4c 69 74 65 20 77 68 65 72 65 20  in SQLite where 
14ea0 74 68 65 20 4e 55 4d 45 52 49 43 20 61 6e 64 20  the NUMERIC and 
14eb0 49 4e 54 45 47 45 52 20 5b 61 66 66 69 6e 69 74  INTEGER [affinit
14ec0 69 65 73 5d 0a 20 20 20 62 65 68 61 76 65 20 64  ies].   behave d
14ed0 69 66 66 65 72 65 6e 74 6c 79 2e 0a 20 20 20 3c  ifferently..   <
14ee0 70 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 52 45  p> ^Casting a RE
14ef0 41 4c 20 6f 72 20 49 4e 54 45 47 45 52 20 76 61  AL or INTEGER va
14f00 6c 75 65 20 74 6f 20 4e 55 4d 45 52 49 43 20 69  lue to NUMERIC i
14f10 73 20 61 20 6e 6f 2d 6f 70 2c 20 65 76 65 6e 20  s a no-op, even 
14f20 69 66 20 61 20 72 65 61 6c 0a 20 20 20 76 61 6c  if a real.   val
14f30 75 65 20 63 6f 75 6c 64 20 62 65 20 6c 6f 73 73  ue could be loss
14f40 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64  lessly converted
14f50 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a   to an integer..
14f60 0a 3c 2f 74 72 3e 0a 0a 3c 2f 74 61 62 6c 65 3e  .</tr>..</table>
14f70 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
14f80 74 68 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  the result from 
14f90 63 61 73 74 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d  casting any non-
14fa0 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20  BLOB value into 
14fb0 61 20 0a 42 4c 4f 42 20 61 6e 64 20 74 68 65 20  a .BLOB and the 
14fc0 72 65 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74  result from cast
14fd0 69 6e 67 20 61 6e 79 20 42 4c 4f 42 20 76 61 6c  ing any BLOB val
14fe0 75 65 20 69 6e 74 6f 20 61 20 6e 6f 6e 2d 42 4c  ue into a non-BL
14ff0 4f 42 20 76 61 6c 75 65 0a 6d 61 79 20 62 65 20  OB value.may be 
15000 64 69 66 66 65 72 65 6e 74 20 64 65 70 65 6e 64  different depend
15010 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 74  ing on whether t
15020 68 65 20 64 61 74 61 62 61 73 65 20 5b 65 6e 63  he database [enc
15030 6f 64 69 6e 67 5d 20 69 73 20 55 54 46 2d 38 2c  oding] is UTF-8,
15040 0a 55 54 46 2d 31 36 62 65 2c 20 6f 72 20 55 54  .UTF-16be, or UT
15050 46 2d 31 36 6c 65 2e 0a 0a 0a 3c 74 63 6c 3e 68  F-16le....<tcl>h
15060 64 5f 66 72 61 67 6d 65 6e 74 20 62 6f 6f 6c 65  d_fragment boole
15070 61 6e 65 78 70 72 20 7b 62 6f 6f 6c 65 61 6e 20  anexpr {boolean 
15080 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c  expression}</tcl
15090 3e 0a 3c 68 33 3e 42 6f 6f 6c 65 61 6e 20 45 78  >.<h3>Boolean Ex
150a0 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a  pressions</h3>..
150b0 3c 70 3e 54 68 65 20 53 51 4c 20 6c 61 6e 67 75  <p>The SQL langu
150c0 61 67 65 20 66 65 61 74 75 72 65 73 20 73 65 76  age features sev
150d0 65 72 61 6c 20 63 6f 6e 74 65 78 74 73 20 77 68  eral contexts wh
150e0 65 72 65 20 61 6e 20 65 78 70 72 65 73 73 69 6f  ere an expressio
150f0 6e 20 69 73 20 0a 65 76 61 6c 75 61 74 65 64 20  n is .evaluated 
15100 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 63  and the result c
15110 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20 62 6f  onverted to a bo
15120 6f 6c 65 61 6e 20 28 74 72 75 65 20 6f 72 20 66  olean (true or f
15130 61 6c 73 65 29 20 76 61 6c 75 65 2e 20 54 68 65  alse) value. The
15140 73 65 0a 63 6f 6e 74 65 78 74 73 20 61 72 65 3a  se.contexts are:
15150 0a 0a 20 20 3c 75 6c 3e 0a 20 20 20 20 3c 6c 69  ..  <ul>.    <li
15160 3e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  > the WHERE clau
15170 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 2c 20  se of a SELECT, 
15180 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
15190 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20   statement,.    
151a0 3c 6c 69 3e 20 74 68 65 20 4f 4e 20 6f 72 20 55  <li> the ON or U
151b0 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
151c0 20 6a 6f 69 6e 20 69 6e 20 61 20 53 45 4c 45 43   join in a SELEC
151d0 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20  T statement,.   
151e0 20 3c 6c 69 3e 20 74 68 65 20 48 41 56 49 4e 47   <li> the HAVING
151f0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
15200 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20  ECT statement,. 
15210 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e     <li> the WHEN
15220 20 63 6c 61 75 73 65 20 6f 66 20 61 6e 20 53 51   clause of an SQ
15230 4c 20 74 72 69 67 67 65 72 2c 20 61 6e 64 0a 20  L trigger, and. 
15240 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e     <li> the WHEN
15250 20 63 6c 61 75 73 65 20 6f 72 20 63 6c 61 75 73   clause or claus
15260 65 73 20 6f 66 20 73 6f 6d 65 20 43 41 53 45 20  es of some CASE 
15270 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 20 20 3c  expressions..  <
15280 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 63 6f  /ul>..<p>^(To co
15290 6e 76 65 72 74 20 74 68 65 20 72 65 73 75 6c 74  nvert the result
152a0 73 20 6f 66 20 61 6e 20 53 51 4c 20 65 78 70 72  s of an SQL expr
152b0 65 73 73 69 6f 6e 20 74 6f 20 61 20 62 6f 6f 6c  ession to a bool
152c0 65 61 6e 20 76 61 6c 75 65 2c 20 53 51 4c 69 74  ean value, SQLit
152d0 65 0a 66 69 72 73 74 20 63 61 73 74 73 20 74 68  e.first casts th
152e0 65 20 72 65 73 75 6c 74 20 74 6f 20 61 20 4e 55  e result to a NU
152f0 4d 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74  MERIC value in t
15300 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61  he same way as a
15310 20 0a 5b 43 41 53 54 20 65 78 70 72 65 73 73 69   .[CAST expressi
15320 6f 6e 5d 2e 20 41 20 4e 55 4c 4c 20 6f 72 20 7a  on]. A NULL or z
15330 65 72 6f 20 76 61 6c 75 65 20 28 69 6e 74 65 67  ero value (integ
15340 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65  er value 0 or re
15350 61 6c 20 76 61 6c 75 65 20 30 2e 30 29 20 69 73  al value 0.0) is
15360 0a 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62  .considered to b
15370 65 20 66 61 6c 73 65 2e 20 41 6c 6c 20 6f 74 68  e false. All oth
15380 65 72 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  er values are co
15390 6e 73 69 64 65 72 65 64 20 74 72 75 65 2e 29 5e  nsidered true.)^
153a0 0a 0a 3c 70 3e 5e 28 46 6f 72 20 65 78 61 6d 70  ..<p>^(For examp
153b0 6c 65 2c 20 74 68 65 20 76 61 6c 75 65 73 20 4e  le, the values N
153c0 55 4c 4c 2c 20 30 2e 30 2c 20 30 2c 20 27 65 6e  ULL, 0.0, 0, 'en
153d0 67 6c 69 73 68 27 20 61 6e 64 20 27 30 27 20 61  glish' and '0' a
153e0 72 65 20 61 6c 6c 20 63 6f 6e 73 69 64 65 72 65  re all considere
153f0 64 0a 74 6f 20 62 65 20 66 61 6c 73 65 2e 29 5e  d.to be false.)^
15400 20 5e 28 56 61 6c 75 65 73 20 31 2c 20 31 2e 30   ^(Values 1, 1.0
15410 2c 20 30 2e 31 2c 20 2d 30 2e 31 20 61 6e 64 20  , 0.1, -0.1 and 
15420 27 31 65 6e 67 6c 69 73 68 27 20 61 72 65 20 63  '1english' are c
15430 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 0a 62 65  onsidered to .be
15440 20 74 72 75 65 2e 29 5e 0a 0a 3c 68 33 3e 46 75   true.)^..<h3>Fu
15450 6e 63 74 69 6f 6e 73 3c 2f 68 33 3e 0a 3c 70 3e  nctions</h3>.<p>
15460 5e 42 6f 74 68 20 5b 63 6f 72 65 66 75 6e 63 7c  ^Both [corefunc|
15470 73 69 6d 70 6c 65 5d 20 61 6e 64 20 5b 61 67 67  simple] and [agg
15480 66 75 6e 63 7c 61 67 67 72 65 67 61 74 65 5d 20  func|aggregate] 
15490 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 73 75  functions are su
154a0 70 70 6f 72 74 65 64 2e 0a 28 46 6f 72 20 70 72  pported..(For pr
154b0 65 73 65 6e 74 61 74 69 6f 6e 20 70 75 72 70 6f  esentation purpo
154c0 73 65 73 2c 20 73 69 6d 70 6c 65 20 66 75 6e 63  ses, simple func
154d0 74 69 6f 6e 73 20 61 72 65 20 66 75 72 74 68 65  tions are furthe
154e0 72 20 73 75 62 64 69 76 69 64 65 64 20 69 6e 74  r subdivided int
154f0 6f 0a 5b 63 6f 72 65 66 75 6e 63 20 7c 20 63 6f  o.[corefunc | co
15500 72 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e  re functions] an
15510 64 20 5b 64 61 74 65 66 75 6e 63 20 7c 20 64 61  d [datefunc | da
15520 74 65 2d 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  te-time function
15530 73 5d 2e 29 0a 5e 41 20 73 69 6d 70 6c 65 20 66  s].).^A simple f
15540 75 6e 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  unction can be u
15550 73 65 64 20 69 6e 20 61 6e 79 20 65 78 70 72 65  sed in any expre
15560 73 73 69 6f 6e 2e 20 20 5e 53 69 6d 70 6c 65 20  ssion.  ^Simple 
15570 66 75 6e 63 74 69 6f 6e 73 20 72 65 74 75 72 6e  functions return
15580 0a 61 20 72 65 73 75 6c 74 20 69 6d 6d 65 64 69  .a result immedi
15590 61 74 65 6c 79 20 62 61 73 65 64 20 6f 6e 20 74  ately based on t
155a0 68 65 69 72 20 69 6e 70 75 74 73 2e 20 20 5e 41  heir inputs.  ^A
155b0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
155c0 6e 73 0a 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75  ns.may only be u
155d0 73 65 64 20 69 6e 20 61 20 53 45 4c 45 43 54 20  sed in a SELECT 
155e0 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e 41 67 67  statement.  ^Agg
155f0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
15600 20 63 6f 6d 70 75 74 65 0a 74 68 65 69 72 20 72   compute.their r
15610 65 73 75 6c 74 20 61 63 72 6f 73 73 20 61 6c 6c  esult across all
15620 20 72 6f 77 73 20 6f 66 20 74 68 65 20 72 65 73   rows of the res
15630 75 6c 74 20 73 65 74 2e 3c 2f 70 3e 0a 0a 3c 74  ult set.</p>..<t
15640 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
15650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15690 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 6f 72 65  ##.Section {Core
156a0 20 46 75 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65   Functions} core
156b0 66 75 6e 63 20 7b 2a 63 6f 72 65 66 75 6e 63 7d  func {*corefunc}
156c0 0a 70 72 6f 63 20 66 75 6e 63 64 65 66 20 7b 73  .proc funcdef {s
156d0 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64  yntax keywords d
156e0 65 73 63 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73  esc} {.  hd_puts
156f0 20 7b 3c 74 72 3e 7d 0a 20 20 72 65 67 73 75 62   {<tr>}.  regsub
15700 20 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72   -all {\s+} [str
15710 69 6e 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78  ing trim $syntax
15720 5d 20 7b 3c 62 72 3e 3c 2f 62 72 3e 7d 20 73 79  ] {<br></br>} sy
15730 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61  ntax.  regsub -a
15740 6c 6c 20 7b 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29  ll {\(([^*)]+)\)
15750 7d 20 24 73 79 6e 74 61 78 20 7b 28 3c 69 3e 5c  } $syntax {(<i>\
15760 31 3c 2f 69 3e 29 7d 20 73 79 6e 74 61 78 0a 20  1</i>)} syntax. 
15770 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d   regsub -all {,}
15780 20 24 73 79 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c   $syntax {</i>,<
15790 69 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67  i>} syntax.  reg
157a0 73 75 62 20 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c  sub -all {<i>\.\
157b0 2e 5c 2e 3c 2f 69 3e 7d 20 24 73 79 6e 74 61 78  .\.</i>} $syntax
157c0 20 7b 2e 2e 2e 7d 20 73 79 6e 74 61 78 0a 20 20   {...} syntax.  
157d0 68 64 5f 70 75 74 73 20 22 3c 74 64 20 76 61 6c  hd_puts "<td val
157e0 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67  ign=\"top\" alig
157f0 6e 3d 5c 22 72 69 67 68 74 5c 22 20 77 69 64 74  n=\"right\" widt
15800 68 3d 5c 22 31 32 30 5c 22 3e 22 0a 20 20 69 66  h=\"120\">".  if
15810 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77   {[llength $keyw
15820 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20  ords]==0} {.    
15830 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d  regexp {[a-z_]+}
15840 20 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a 20 20   $syntax name.  
15850 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 6e    hd_fragment $n
15860 61 6d 65 20 2a 24 6e 61 6d 65 20 22 24 7b 6e 61  ame *$name "${na
15870 6d 65 7d 28 29 20 53 51 4c 20 66 75 6e 63 74 69  me}() SQL functi
15880 6f 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20  on".  } else {. 
15890 20 20 20 73 65 74 20 66 72 61 67 6e 61 6d 65 20     set fragname 
158a0 5b 6c 69 6e 64 65 78 20 24 6b 65 79 77 6f 72 64  [lindex $keyword
158b0 73 20 30 5d 0a 20 20 20 20 72 65 67 73 75 62 20  s 0].    regsub 
158c0 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20 24 66  -all {[^a-z]} $f
158d0 72 61 67 6e 61 6d 65 20 7b 7d 20 66 72 61 67 6e  ragname {} fragn
158e0 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d  ame.    hd_fragm
158f0 65 6e 74 20 24 66 72 61 67 6e 61 6d 65 0a 20 20  ent $fragname.  
15900 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72    eval hd_keywor
15910 64 73 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b  ds [string map {
15920 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79 77 6f 72 64  \n { }} $keyword
15930 73 5d 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73  s].  }.  hd_puts
15940 20 22 24 73 79 6e 74 61 78 3c 2f 74 64 3e 22 0a   "$syntax</td>".
15950 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 64 20 76    hd_puts {<td v
15960 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 7d 0a 20 20  align="top">}.  
15970 68 64 5f 72 65 73 6f 6c 76 65 20 24 64 65 73 63  hd_resolve $desc
15980 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 2f 74 64  .  hd_puts {</td
15990 3e 3c 2f 74 72 3e 7d 0a 7d 0a 3c 2f 74 63 6c 3e  ></tr>}.}.</tcl>
159a0 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20 66 75  ..<p>The core fu
159b0 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65  nctions shown be
159c0 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c  low are availabl
159d0 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 0a 5b  e by default. .[
159e0 64 61 74 65 66 75 6e 63 20 7c 20 44 61 74 65 20  datefunc | Date 
159f0 26 61 6d 70 3b 20 54 69 6d 65 20 66 75 6e 63 74  &amp; Time funct
15a00 69 6f 6e 73 5d 20 61 6e 64 0a 5b 61 67 67 66 75  ions] and.[aggfu
15a10 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20 66  nc | aggregate f
15a20 75 6e 63 74 69 6f 6e 73 5d 20 61 72 65 20 64 6f  unctions] are do
15a30 63 75 6d 65 6e 74 65 64 20 73 65 70 61 72 61 74  cumented separat
15a40 65 6c 79 2e 20 20 41 6e 0a 61 70 70 6c 69 63 61  ely.  An.applica
15a50 74 69 6f 6e 20 6d 61 79 20 64 65 66 69 6e 65 20  tion may define 
15a60 61 64 64 69 74 69 6f 6e 61 6c 0a 66 75 6e 63 74  additional.funct
15a70 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20  ions written in 
15a80 43 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74  C and added to t
15a90 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  he database engi
15aa0 6e 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71  ne using.the [sq
15ab0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
15ac0 63 74 69 6f 6e 28 29 5d 20 41 50 49 2e 3c 2f 70  ction()] API.</p
15ad0 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  >..<table border
15ae0 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31  =0 cellpadding=1
15af0 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66  0>.<tcl>.funcdef
15b00 20 7b 61 62 73 28 58 29 7d 20 7b 7d 20 7b 0a 20   {abs(X)} {} {. 
15b10 20 5e 54 68 65 20 61 62 73 28 58 29 20 66 75 6e   ^The abs(X) fun
15b20 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
15b30 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65  e absolute value
15b40 20 6f 66 20 74 68 65 20 6e 75 6d 65 72 69 63 0a   of the numeric.
15b50 20 20 61 72 67 75 6d 65 6e 74 20 58 2e 20 20 5e    argument X.  ^
15b60 41 62 73 28 58 29 20 72 65 74 75 72 6e 73 20 4e  Abs(X) returns N
15b70 55 4c 4c 20 69 66 20 58 20 69 73 20 4e 55 4c 4c  ULL if X is NULL
15b80 2e 20 0a 20 20 5e 28 41 62 73 28 58 29 20 72 65  . .  ^(Abs(X) re
15b90 74 75 72 6e 20 30 2e 30 20 69 66 20 58 20 69 73  turn 0.0 if X is
15ba0 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
15bb0 62 0a 20 20 74 68 61 74 20 63 61 6e 6e 6f 74 20  b.  that cannot 
15bc0 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  be converted to 
15bd0 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 2e  a numeric value.
15be0 29 5e 20 20 5e 49 66 20 58 20 69 73 20 74 68 65  )^  ^If X is the
15bf0 20 0a 20 20 69 6e 74 65 67 65 72 20 2d 39 32 32   .  integer -922
15c00 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
15c10 20 74 68 65 6e 20 61 62 73 28 58 29 20 74 68 72   then abs(X) thr
15c20 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  ows an integer o
15c30 76 65 72 66 6c 6f 77 0a 20 20 65 72 72 6f 72 20  verflow.  error 
15c40 73 69 6e 63 65 20 74 68 65 72 65 20 69 73 20 6e  since there is n
15c50 6f 20 65 71 75 69 76 61 6c 65 6e 74 20 70 6f 73  o equivalent pos
15c60 69 74 69 76 65 20 36 34 2d 62 69 74 20 74 77 6f  itive 64-bit two
15c70 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 76 61 6c 75   complement valu
15c80 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63  e..}..funcdef {c
15c90 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20  hanges()} {} {. 
15ca0 20 5e 54 68 65 20 63 68 61 6e 67 65 73 28 29 20   ^The changes() 
15cb0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
15cc0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
15cd0 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61  atabase rows tha
15ce0 74 20 77 65 72 65 20 63 68 61 6e 67 65 64 0a 20  t were changed. 
15cf0 20 6f 72 20 69 6e 73 65 72 74 65 64 20 6f 72 20   or inserted or 
15d00 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20 6d  deleted by the m
15d10 6f 73 74 20 72 65 63 65 6e 74 6c 79 20 63 6f 6d  ost recently com
15d20 70 6c 65 74 65 64 20 49 4e 53 45 52 54 2c 20 44  pleted INSERT, D
15d30 45 4c 45 54 45 2c 0a 20 20 6f 72 20 55 50 44 41  ELETE,.  or UPDA
15d40 54 45 20 73 74 61 74 65 6d 65 6e 74 2c 20 65 78  TE statement, ex
15d50 63 6c 75 73 69 76 65 20 6f 66 20 73 74 61 74 65  clusive of state
15d60 6d 65 6e 74 73 20 69 6e 20 6c 6f 77 65 72 2d 6c  ments in lower-l
15d70 65 76 65 6c 20 74 72 69 67 67 65 72 73 2e 0a 20  evel triggers.. 
15d80 20 5e 54 68 65 20 63 68 61 6e 67 65 73 28 29 20   ^The changes() 
15d90 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
15da0 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  a wrapper around
15db0 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68   the [sqlite3_ch
15dc0 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b  anges()].  C/C++
15dd0 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 68 65   function and he
15de0 6e 63 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20  nce follows the 
15df0 73 61 6d 65 20 72 75 6c 65 73 20 66 6f 72 20 63  same rules for c
15e00 6f 75 6e 74 69 6e 67 20 63 68 61 6e 67 65 73 2e  ounting changes.
15e10 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 61  .}..funcdef {coa
15e20 6c 65 73 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20  lesce(X,Y,...)} 
15e30 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f 61 6c  {} {.  ^The coal
15e40 65 73 63 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  esce() function 
15e50 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f  returns a copy o
15e60 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d  f its first non-
15e70 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f  NULL argument, o
15e80 72 0a 20 20 4e 55 4c 4c 20 69 66 20 61 6c 6c 20  r.  NULL if all 
15e90 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55  arguments are NU
15ea0 4c 4c 2e 20 20 5e 43 6f 61 6c 65 73 63 65 28 29  LL.  ^Coalesce()
15eb0 20 6d 75 73 74 20 62 65 20 61 74 20 6c 65 61 73   must be at leas
15ec0 74 20 0a 20 20 32 20 61 72 67 75 6d 65 6e 74 73  t .  2 arguments
15ed0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 6c  ..}..funcdef {gl
15ee0 6f 62 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  ob(X,Y)} {} {.  
15ef0 5e 54 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66  ^The glob(X,Y) f
15f00 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76  unction is equiv
15f10 61 6c 65 6e 74 20 74 6f 20 74 68 65 0a 20 20 65  alent to the.  e
15f20 78 70 72 65 73 73 69 6f 6e 20 22 3c 62 3e 59 20  xpression "<b>Y 
15f30 47 4c 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20 20 4e  GLOB X</b>"..  N
15f40 6f 74 65 20 74 68 61 74 20 74 68 65 20 58 20 61  ote that the X a
15f50 6e 64 20 59 20 61 72 67 75 6d 65 6e 74 73 20 61  nd Y arguments a
15f60 72 65 20 72 65 76 65 72 73 65 64 20 69 6e 20 74  re reversed in t
15f70 68 65 20 67 6c 6f 62 28 29 20 66 75 6e 63 74 69  he glob() functi
15f80 6f 6e 0a 20 20 72 65 6c 61 74 69 76 65 20 74 6f  on.  relative to
15f90 20 74 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f 42   the infix [GLOB
15fa0 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e 49  ] operator..  ^I
15fb0 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  f the [sqlite3_c
15fc0 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29  reate_function()
15fd0 5d 20 69 6e 74 65 72 66 61 63 65 20 69 73 20 75  ] interface is u
15fe0 73 65 64 20 74 6f 0a 20 20 6f 76 65 72 72 69 64  sed to.  overrid
15ff0 65 20 74 68 65 20 67 6c 6f 62 28 58 2c 59 29 20  e the glob(X,Y) 
16000 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 6e  function with an
16010 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70   alternative imp
16020 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68 65 6e  lementation then
16030 0a 20 20 74 68 65 20 5b 47 4c 4f 42 5d 20 6f 70  .  the [GLOB] op
16040 65 72 61 74 6f 72 20 77 69 6c 6c 20 69 6e 76 6f  erator will invo
16050 6b 65 20 74 68 65 20 61 6c 74 65 72 6e 61 74 69  ke the alternati
16060 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ve implementatio
16070 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69  n..}..funcdef {i
16080 66 6e 75 6c 6c 28 58 2c 59 29 7d 20 7b 7d 20 7b  fnull(X,Y)} {} {
16090 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29  .  ^The ifnull()
160a0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
160b0 73 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20  s a copy of its 
160c0 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61  first non-NULL a
160d0 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55  rgument, or.  NU
160e0 4c 4c 20 69 66 20 62 6f 74 68 20 61 72 67 75 6d  LL if both argum
160f0 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20  ents are NULL.  
16100 5e 49 66 6e 75 6c 6c 28 29 20 6d 75 73 74 20 68  ^Ifnull() must h
16110 61 76 65 20 65 78 61 63 74 6c 79 20 32 20 61 72  ave exactly 2 ar
16120 67 75 6d 65 6e 74 73 2e 0a 20 20 5e 54 68 65 20  guments..  ^The 
16130 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f  ifnull() functio
16140 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20  n is equivalent 
16150 74 6f 20 5b 63 6f 61 6c 65 73 63 65 28 29 5d 20  to [coalesce()] 
16160 77 69 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e  with two argumen
16170 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ts..}..funcdef {
16180 68 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  hex(X)} {} {.  ^
16190 54 68 65 20 68 65 78 28 29 20 66 75 6e 63 74 69  The hex() functi
161a0 6f 6e 20 69 6e 74 65 72 70 72 65 74 73 20 69 74  on interprets it
161b0 73 20 61 72 67 75 6d 65 6e 74 20 61 73 20 61 20  s argument as a 
161c0 42 4c 4f 42 20 61 6e 64 20 72 65 74 75 72 6e 73  BLOB and returns
161d0 0a 20 20 61 20 73 74 72 69 6e 67 20 77 68 69 63  .  a string whic
161e0 68 20 69 73 20 74 68 65 20 75 70 70 65 72 2d 63  h is the upper-c
161f0 61 73 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20  ase hexadecimal 
16200 72 65 6e 64 65 72 69 6e 67 20 6f 66 20 74 68 65  rendering of the
16210 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 20 20 74 68   content of.  th
16220 61 74 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e 63  at blob..}..func
16230 64 65 66 20 7b 6c 61 73 74 5f 69 6e 73 65 72 74  def {last_insert
16240 5f 72 6f 77 69 64 28 29 7d 20 7b 7d 20 7b 0a 20  _rowid()} {} {. 
16250 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72   ^The last_inser
16260 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69  t_rowid() functi
16270 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 5b  on returns the [
16280 52 4f 57 49 44 5d 0a 20 20 6f 66 20 74 68 65 20  ROWID].  of the 
16290 6c 61 73 74 20 72 6f 77 20 69 6e 73 65 72 74 65  last row inserte
162a0 64 20 69 6e 74 6f 20 61 20 72 65 61 6c 20 28 6e  d into a real (n
162b0 6f 74 20 61 20 76 69 72 74 75 61 6c 29 20 74 61  ot a virtual) ta
162c0 62 6c 65 0a 20 20 66 72 6f 6d 20 74 68 65 20 64  ble.  from the d
162d0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
162e0 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b 65 64  on which invoked
162f0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 20   the function.. 
16300 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72   ^The last_inser
16310 74 5f 72 6f 77 69 64 28 29 20 53 51 4c 20 66 75  t_rowid() SQL fu
16320 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70  nction is a wrap
16330 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20  per around the. 
16340 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69   [sqlite3_last_i
16350 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 5d 20 43  nsert_rowid()] C
16360 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 66  /C++ interface f
16370 75 6e 63 74 69 6f 6e 2e 0a 0a 20 20 3c 70 3e 4e  unction...  <p>N
16380 6f 74 65 20 74 68 61 74 20 74 68 69 73 20 66 75  ote that this fu
16390 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20  nction does not 
163a0 77 6f 72 6b 20 66 6f 72 20 69 6e 73 65 72 74 73  work for inserts
163b0 20 69 6e 74 6f 20 61 0a 20 20 5b 76 69 72 74 75   into a.  [virtu
163c0 61 6c 20 74 61 62 6c 65 5d 20 73 75 63 68 20 61  al table] such a
163d0 73 20 5b 46 54 53 33 5d 20 6f 72 20 5b 52 54 52  s [FTS3] or [RTR
163e0 45 45 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  EE]..}..funcdef 
163f0 7b 6c 65 6e 67 74 68 28 58 29 7d 20 7b 7d 20 7b  {length(X)} {} {
16400 0a 20 20 5e 54 68 65 20 6c 65 6e 67 74 68 28 58  .  ^The length(X
16410 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
16420 6e 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66  ns the length of
16430 20 58 20 69 6e 20 0a 20 20 63 68 61 72 61 63 74   X in .  charact
16440 65 72 73 20 69 66 20 58 20 69 73 20 61 20 73 74  ers if X is a st
16450 72 69 6e 67 2c 20 6f 72 20 69 6e 20 62 79 74 65  ring, or in byte
16460 73 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62  s if X is a blob
16470 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 4e 55 4c  ..  ^If X is NUL
16480 4c 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29  L then length(X)
16490 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e 49 66 20   is NULL..  ^If 
164a0 58 20 69 73 20 6e 75 6d 65 72 69 63 20 74 68 65  X is numeric the
164b0 6e 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75  n length(X) retu
164c0 72 6e 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f  rns the length o
164d0 66 20 61 20 73 74 72 69 6e 67 0a 20 20 72 65 70  f a string.  rep
164e0 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 58  resentation of X
164f0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69  ..}..funcdef {li
16500 6b 65 28 58 2c 59 29 20 6c 69 6b 65 28 58 2c 59  ke(X,Y) like(X,Y
16510 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Z)} {} {.  ^The
16520 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e   like() function
16530 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
16540 65 6d 65 6e 74 20 74 68 65 0a 20 20 22 3c 62 3e  ement the.  "<b>
16550 59 20 4c 49 4b 45 20 58 20 26 23 39 31 3b 45 53  Y LIKE X &#91;ES
16560 43 41 50 45 20 5a 26 23 39 33 3b 3c 2f 62 3e 22  CAPE Z&#93;</b>"
16570 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 0a 20 20   expression. .  
16580 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c  ^If the optional
16590 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69   ESCAPE clause i
165a0 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20  s present, then 
165b0 74 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e  the.  like() fun
165c0 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f 6b 65 64  ction is invoked
165d0 20 77 69 74 68 20 74 68 72 65 65 20 61 72 67 75   with three argu
165e0 6d 65 6e 74 73 2e 20 20 5e 4f 74 68 65 72 77 69  ments.  ^Otherwi
165f0 73 65 2c 20 69 74 20 69 73 0a 20 20 69 6e 76 6f  se, it is.  invo
16600 6b 65 64 20 77 69 74 68 20 74 77 6f 20 61 72 67  ked with two arg
16610 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20 4e 6f 74  uments only. Not
16620 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e 64  e that the X and
16630 20 59 20 70 61 72 61 6d 65 74 65 72 73 20 61 72   Y parameters ar
16640 65 0a 20 20 72 65 76 65 72 73 65 64 20 69 6e 20  e.  reversed in 
16650 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  the like() funct
16660 69 6f 6e 20 72 65 6c 61 74 69 76 65 20 74 6f 20  ion relative to 
16670 74 68 65 20 69 6e 66 69 78 20 5b 4c 49 4b 45 5d  the infix [LIKE]
16680 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e 54 68   operator..  ^Th
16690 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
166a0 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e  e_function()] in
166b0 74 65 72 66 61 63 65 20 63 61 6e 20 62 65 20 75  terface can be u
166c0 73 65 64 20 74 6f 20 6f 76 65 72 72 69 64 65 20  sed to override 
166d0 74 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e  the.  like() fun
166e0 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 72 65 62  ction and thereb
166f0 79 20 63 68 61 6e 67 65 20 74 68 65 20 6f 70 65  y change the ope
16700 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20  ration of the.  
16710 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e  [LIKE] operator.
16720 20 20 57 68 65 6e 20 6f 76 65 72 72 69 64 69 6e    When overridin
16730 67 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e  g the like() fun
16740 63 74 69 6f 6e 2c 20 69 74 20 6d 61 79 20 62 65  ction, it may be
16750 20 69 6d 70 6f 72 74 61 6e 74 0a 20 20 74 6f 20   important.  to 
16760 6f 76 65 72 72 69 64 65 20 62 6f 74 68 20 74 68  override both th
16770 65 20 74 77 6f 20 61 6e 64 20 74 68 72 65 65 20  e two and three 
16780 61 72 67 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e  argument version
16790 73 20 6f 66 20 74 68 65 20 6c 69 6b 65 28 29 20  s of the like() 
167a0 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 20 4f 74 68  .  function. Oth
167b0 65 72 77 69 73 65 2c 20 64 69 66 66 65 72 65 6e  erwise, differen
167c0 74 20 63 6f 64 65 20 6d 61 79 20 62 65 20 63 61  t code may be ca
167d0 6c 6c 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  lled to implemen
167e0 74 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f  t the.  [LIKE] o
167f0 70 65 72 61 74 6f 72 20 64 65 70 65 6e 64 69 6e  perator dependin
16800 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20  g on whether or 
16810 6e 6f 74 20 61 6e 20 45 53 43 41 50 45 20 63 6c  not an ESCAPE cl
16820 61 75 73 65 20 77 61 73 20 0a 20 20 73 70 65 63  ause was .  spec
16830 69 66 69 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ified..}..funcde
16840 66 20 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  f {load_extensio
16850 6e 28 58 29 20 6c 6f 61 64 5f 65 78 74 65 6e 73  n(X) load_extens
16860 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  ion(X,Y)} {} {. 
16870 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e   ^The load_exten
16880 73 69 6f 6e 28 58 2c 59 29 20 66 75 6e 63 74 69  sion(X,Y) functi
16890 6f 6e 20 6c 6f 61 64 73 20 53 51 4c 69 74 65 20  on loads SQLite 
168a0 65 78 74 65 6e 73 69 6f 6e 73 20 6f 75 74 20 6f  extensions out o
168b0 66 20 74 68 65 20 73 68 61 72 65 64 0a 20 20 6c  f the shared.  l
168c0 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65  ibrary file name
168d0 64 20 58 20 75 73 69 6e 67 20 74 68 65 20 65 6e  d X using the en
168e0 74 72 79 20 70 6f 69 6e 74 20 59 2e 20 20 5e 54  try point Y.  ^T
168f0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 6c 6f 61  he result of loa
16900 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 0a 20 20  d_extension().  
16910 69 73 20 61 6c 77 61 79 73 20 61 20 4e 55 4c 4c  is always a NULL
16920 2e 20 20 5e 49 66 20 59 20 69 73 20 6f 6d 69 74  .  ^If Y is omit
16930 74 65 64 20 74 68 65 6e 20 74 68 65 20 64 65 66  ted then the def
16940 61 75 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e 74  ault entry point
16950 0a 20 20 6f 66 20 3c 62 3e 73 71 6c 69 74 65 33  .  of <b>sqlite3
16960 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 3c  _extension_init<
16970 2f 62 3e 20 69 73 20 75 73 65 64 2e 20 20 5e 54  /b> is used.  ^T
16980 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  he load_extensio
16990 6e 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72  n() function.  r
169a0 61 69 73 65 73 20 61 6e 20 65 78 63 65 70 74 69  aises an excepti
169b0 6f 6e 20 69 66 20 74 68 65 20 65 78 74 65 6e 73  on if the extens
169c0 69 6f 6e 20 66 61 69 6c 73 20 74 6f 20 6c 6f 61  ion fails to loa
169d0 64 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 20  d or initialize 
169e0 63 6f 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70  correctly...  <p
169f0 3e 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e  >^The load_exten
16a00 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  sion() function 
16a10 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65  will fail if the
16a20 20 65 78 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d   extension attem
16a30 70 74 73 20 74 6f 20 0a 20 20 6d 6f 64 69 66 79  pts to .  modify
16a40 20 6f 72 20 64 65 6c 65 74 65 20 61 20 53 51 4c   or delete a SQL
16a50 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 63 6f 6c   function or col
16a60 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
16a70 20 20 5e 54 68 65 0a 20 20 65 78 74 65 6e 73 69    ^The.  extensi
16a80 6f 6e 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66  on can add new f
16a90 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c  unctions or coll
16aa0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c  ating sequences,
16ab0 20 62 75 74 20 63 61 6e 6e 6f 74 0a 20 20 6d 6f   but cannot.  mo
16ac0 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 65  dify or delete e
16ad0 78 69 73 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  xisting function
16ae0 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  s or collating s
16af0 65 71 75 65 6e 63 65 73 20 62 65 63 61 75 73 65  equences because
16b00 0a 20 20 74 68 6f 73 65 20 66 75 6e 63 74 69 6f  .  those functio
16b10 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61 74  ns and/or collat
16b20 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 6d 69  ing sequences mi
16b30 67 68 74 20 62 65 20 75 73 65 64 20 65 6c 73 65  ght be used else
16b40 77 68 65 72 65 0a 20 20 69 6e 20 74 68 65 20 63  where.  in the c
16b50 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67  urrently running
16b60 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20   SQL statement. 
16b70 20 54 6f 20 6c 6f 61 64 20 61 6e 20 65 78 74 65   To load an exte
16b80 6e 73 69 6f 6e 20 74 68 61 74 0a 20 20 63 68 61  nsion that.  cha
16b90 6e 67 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  nges or deletes 
16ba0 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c  functions or col
16bb0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
16bc0 2c 20 75 73 65 20 74 68 65 0a 20 20 5b 73 71 6c  , use the.  [sql
16bd0 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  ite3_load_extens
16be0 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67  ion()] C-languag
16bf0 65 20 41 50 49 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75  e API.</p>.}..fu
16c00 6e 63 64 65 66 20 7b 6c 6f 77 65 72 28 58 29 7d  ncdef {lower(X)}
16c10 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 77   {} {.  ^The low
16c20 65 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  er(X) function r
16c30 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66  eturns a copy of
16c40 20 73 74 72 69 6e 67 20 58 20 77 69 74 68 20 61   string X with a
16c50 6c 6c 20 41 53 43 49 49 20 63 68 61 72 61 63 74  ll ASCII charact
16c60 65 72 73 0a 20 20 63 6f 6e 76 65 72 74 65 64 20  ers.  converted 
16c70 74 6f 20 6c 6f 77 65 72 20 63 61 73 65 2e 20 20  to lower case.  
16c80 5e 54 68 65 20 64 65 66 61 75 6c 74 20 62 75 69  ^The default bui
16c90 6c 74 2d 69 6e 20 6c 6f 77 65 72 28 29 20 66 75  lt-in lower() fu
16ca0 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 0a 20 20 66  nction works.  f
16cb0 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74  or ASCII charact
16cc0 65 72 73 20 6f 6e 6c 79 2e 20 20 54 6f 20 64 6f  ers only.  To do
16cd0 20 63 61 73 65 20 63 6f 6e 76 65 72 73 69 6f 6e   case conversion
16ce0 73 20 6f 6e 20 6e 6f 6e 2d 41 53 43 49 49 0a 20  s on non-ASCII. 
16cf0 20 63 68 61 72 61 63 74 65 72 73 2c 20 6c 6f 61   characters, loa
16d00 64 20 74 68 65 20 49 43 55 20 65 78 74 65 6e 73  d the ICU extens
16d10 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ion..}..funcdef 
16d20 7b 6c 74 72 69 6d 28 58 29 20 6c 74 72 69 6d 28  {ltrim(X) ltrim(
16d30 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
16d40 65 20 6c 74 72 69 6d 28 58 2c 59 29 20 66 75 6e  e ltrim(X,Y) fun
16d50 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
16d60 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79  string formed by
16d70 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e   removing any an
16d80 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65  d all.  characte
16d90 72 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69  rs that appear i
16da0 6e 20 59 20 66 72 6f 6d 20 74 68 65 20 6c 65 66  n Y from the lef
16db0 74 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e  t side of X..  ^
16dc0 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e  If the Y argumen
16dd0 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 6c 74  t is omitted, lt
16de0 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73  rim(X) removes s
16df0 70 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20 6c  paces from the l
16e00 65 66 74 20 73 69 64 65 0a 20 20 6f 66 20 58 2e  eft side.  of X.
16e10 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78  .}..funcdef {max
16e20 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 61 78  (X,Y,...)} {*max
16e30 43 6f 72 65 46 75 6e 63 20 2a 6d 61 78 20 7b 6d  CoreFunc *max {m
16e40 61 78 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  ax() SQL functio
16e50 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c  n}} {.  ^The mul
16e60 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78 28  ti-argument max(
16e70 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
16e80 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  ns the argument 
16e90 77 69 74 68 20 74 68 65 20 0a 20 20 6d 61 78 69  with the .  maxi
16ea0 6d 75 6d 20 76 61 6c 75 65 2c 20 6f 72 20 72 65  mum value, or re
16eb0 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 61 6e 79  turn NULL if any
16ec0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c   argument is NUL
16ed0 4c 2e 20 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69  L. .  ^The multi
16ee0 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20  -argument max() 
16ef0 66 75 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65  function searche
16f00 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20  s its arguments 
16f10 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
16f20 68 74 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75  ht.  for an argu
16f30 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65  ment that define
16f40 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  s a collating fu
16f50 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20  nction and uses 
16f60 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20  that collating. 
16f70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c   function for al
16f80 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69  l string compari
16f90 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20  sons.  ^If none 
16fa0 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  of the arguments
16fb0 20 74 6f 20 6d 61 78 28 29 0a 20 20 64 65 66 69   to max().  defi
16fc0 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  ne a collating f
16fd0 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  unction, then th
16fe0 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  e BINARY collati
16ff0 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75  ng function is u
17000 73 65 64 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74  sed..  Note that
17010 20 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e 20 69 73   <b>max()</b> is
17020 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69   a simple functi
17030 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73  on when.  it has
17040 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d   2 or more argum
17050 65 6e 74 73 20 62 75 74 20 6f 70 65 72 61 74 65  ents but operate
17060 73 20 61 73 20 61 6e 0a 20 20 5b 6d 69 6e 41 67  s as an.  [minAg
17070 67 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74  gFunc | aggregat
17080 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67  e function] if g
17090 69 76 65 6e 20 6f 6e 6c 79 20 61 20 73 69 6e 67  iven only a sing
170a0 6c 65 20 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a  le argument..}..
170b0 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 2c 59  funcdef {min(X,Y
170c0 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e 43 6f 72 65  ,...)} {*minCore
170d0 46 75 6e 63 20 2a 6d 69 6e 20 7b 6d 69 6e 28 29  Func *min {min()
170e0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20   SQL function}} 
170f0 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61  {.  ^The multi-a
17100 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75  rgument min() fu
17110 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
17120 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68  he argument with
17130 20 74 68 65 0a 20 20 6d 69 6e 69 6d 75 6d 20 76   the.  minimum v
17140 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20 6d 75 6c  alue..  ^The mul
17150 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28  ti-argument min(
17160 29 20 66 75 6e 63 74 69 6f 6e 20 73 65 61 72 63  ) function searc
17170 68 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74  hes its argument
17180 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  s from left to r
17190 69 67 68 74 0a 20 20 66 6f 72 20 61 6e 20 61 72  ight.  for an ar
171a0 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69  gument that defi
171b0 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  nes a collating 
171c0 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65  function and use
171d0 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67  s that collating
171e0 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  .  function for 
171f0 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70 61  all string compa
17200 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e  risons.  ^If non
17210 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e of the argumen
17220 74 73 20 74 6f 20 6d 69 6e 28 29 0a 20 20 64 65  ts to min().  de
17230 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67  fine a collating
17240 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20   function, then 
17250 74 68 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61  the BINARY colla
17260 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73  ting function is
17270 20 75 73 65 64 2e 0a 20 20 4e 6f 74 65 20 74 68   used..  Note th
17280 61 74 20 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20  at <b>min()</b> 
17290 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63  is a simple func
172a0 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20 68  tion when.  it h
172b0 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67  as 2 or more arg
172c0 75 6d 65 6e 74 73 20 62 75 74 20 6f 70 65 72 61  uments but opera
172d0 74 65 73 20 61 73 20 61 6e 20 0a 20 20 5b 6d 61  tes as an .  [ma
172e0 78 41 67 67 46 75 6e 63 20 7c 20 61 67 67 72 65  xAggFunc | aggre
172f0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69  gate function] i
17300 66 20 67 69 76 65 6e 0a 20 20 6f 6e 6c 79 20 61  f given.  only a
17310 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74   single argument
17320 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6e 75  ..}..funcdef {nu
17330 6c 6c 69 66 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  llif(X,Y)} {} {.
17340 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c    ^The nullif(X,
17350 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
17360 72 6e 73 20 69 74 73 20 66 69 72 73 74 20 61 72  rns its first ar
17370 67 75 6d 65 6e 74 20 69 66 20 74 68 65 20 61 72  gument if the ar
17380 67 75 6d 65 6e 74 73 20 61 72 65 0a 20 20 64 69  guments are.  di
17390 66 66 65 72 65 6e 74 20 61 6e 64 20 4e 55 4c 4c  fferent and NULL
173a0 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
173b0 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 2e 20  s are the same. 
173c0 20 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59   ^The nullif(X,Y
173d0 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 73 65 61  ) function.  sea
173e0 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d 65  rches its argume
173f0 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  nts from left to
17400 20 72 69 67 68 74 20 66 6f 72 20 61 6e 20 61 72   right for an ar
17410 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69  gument that defi
17420 6e 65 73 20 61 0a 20 20 63 6f 6c 6c 61 74 69 6e  nes a.  collatin
17430 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75  g function and u
17440 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69  ses that collati
17450 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ng function for 
17460 61 6c 6c 20 73 74 72 69 6e 67 0a 20 20 63 6f 6d  all string.  com
17470 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e  parisons.  ^If n
17480 65 69 74 68 65 72 20 61 72 67 75 6d 65 6e 74 20  either argument 
17490 74 6f 20 6e 75 6c 6c 69 66 28 29 20 64 65 66 69  to nullif() defi
174a0 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  nes a collating 
174b0 66 75 6e 63 74 69 6f 6e 0a 20 20 74 68 65 6e 20  function.  then 
174c0 74 68 65 20 42 49 4e 41 52 59 20 69 73 20 75 73  the BINARY is us
174d0 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ed..}..funcdef {
174e0 71 75 6f 74 65 28 58 29 7d 20 7b 7d 20 7b 0a 20  quote(X)} {} {. 
174f0 20 5e 54 68 65 20 71 75 6f 74 65 28 58 29 20 66   ^The quote(X) f
17500 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
17510 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69  a string which i
17520 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 20  s the value of. 
17530 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20 73 75   its argument su
17540 69 74 61 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75  itable for inclu
17550 73 69 6f 6e 20 69 6e 74 6f 20 61 6e 6f 74 68 65  sion into anothe
17560 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  r SQL statement.
17570 0a 20 20 5e 53 74 72 69 6e 67 73 20 61 72 65 20  .  ^Strings are 
17580 73 75 72 72 6f 75 6e 64 65 64 20 62 79 20 73 69  surrounded by si
17590 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77 69 74 68  ngle-quotes with
175a0 20 65 73 63 61 70 65 73 20 6f 6e 20 69 6e 74 65   escapes on inte
175b0 72 69 6f 72 20 71 75 6f 74 65 73 0a 20 20 61 73  rior quotes.  as
175c0 20 6e 65 65 64 65 64 2e 20 20 5e 42 4c 4f 42 73   needed.  ^BLOBs
175d0 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20   are encoded as 
175e0 68 65 78 61 64 65 63 69 6d 61 6c 20 6c 69 74 65  hexadecimal lite
175f0 72 61 6c 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  rals..}..funcdef
17600 20 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b   {random()} {} {
17610 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 28 29  .  ^The random()
17620 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
17630 73 20 61 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f  s a pseudo-rando
17640 6d 20 69 6e 74 65 67 65 72 0a 20 20 62 65 74 77  m integer.  betw
17650 65 65 6e 20 2d 39 32 32 33 33 37 32 30 33 36 38  een -92233720368
17660 35 34 37 37 35 38 30 38 20 61 6e 64 20 2b 39 32  54775808 and +92
17670 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
17680 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  7..}..funcdef {r
17690 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d  andomblob(N)} {}
176a0 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d   {.  ^The random
176b0 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e  blob(N) function
176c0 20 72 65 74 75 72 6e 20 61 6e 20 4e 2d 62 79 74   return an N-byt
176d0 65 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e  e blob containin
176e0 67 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a  g pseudo-random.
176f0 20 20 62 79 74 65 73 2e 20 5e 49 66 20 4e 20 69    bytes. ^If N i
17700 73 20 6c 65 73 73 20 74 68 61 6e 20 31 20 74 68  s less than 1 th
17710 65 6e 20 61 20 31 2d 62 79 74 65 20 72 61 6e 64  en a 1-byte rand
17720 6f 6d 20 62 6c 6f 62 20 69 73 20 72 65 74 75 72  om blob is retur
17730 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a  ned...  <p>Hint:
17740 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 63    applications c
17750 61 6e 20 67 65 6e 65 72 61 74 65 20 67 6c 6f 62  an generate glob
17760 61 6c 6c 79 20 75 6e 69 71 75 65 20 69 64 65 6e  ally unique iden
17770 74 69 66 69 65 72 73 0a 20 20 75 73 69 6e 67 20  tifiers.  using 
17780 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f  this function to
17790 67 65 74 68 65 72 20 77 69 74 68 20 5b 68 65 78  gether with [hex
177a0 28 29 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f  ()] and/or.  [lo
177b0 77 65 72 28 29 5d 20 6c 69 6b 65 20 74 68 69 73  wer()] like this
177c0 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71  :</p>..  <blockq
177d0 75 6f 74 65 3e 0a 20 20 68 65 78 28 72 61 6e 64  uote>.  hex(rand
177e0 6f 6d 62 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c  omblob(16))<br><
177f0 2f 62 72 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78  /br>.  lower(hex
17800 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29  (randomblob(16))
17810 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ).  </blockquote
17820 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65  >.}..funcdef {re
17830 70 6c 61 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d  place(X,Y,Z)} {}
17840 20 7b 0a 20 20 5e 54 68 65 20 72 65 70 6c 61 63   {.  ^The replac
17850 65 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f  e(X,Y,Z) functio
17860 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
17870 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 73 75 62  ng formed by sub
17880 73 74 69 74 75 74 69 6e 67 0a 20 20 73 74 72 69  stituting.  stri
17890 6e 67 20 5a 20 66 6f 72 20 65 76 65 72 79 20 6f  ng Z for every o
178a0 63 63 75 72 72 65 6e 63 65 20 6f 66 20 73 74 72  ccurrence of str
178b0 69 6e 67 20 59 20 69 6e 20 73 74 72 69 6e 67 20  ing Y in string 
178c0 58 2e 20 20 5e 54 68 65 20 5b 42 49 4e 41 52 59  X.  ^The [BINARY
178d0 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ].  collating se
178e0 71 75 65 6e 63 65 20 69 73 20 75 73 65 64 20 66  quence is used f
178f0 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20  or comparisons. 
17900 20 5e 49 66 20 59 20 69 73 20 61 6e 20 65 6d 70   ^If Y is an emp
17910 74 79 0a 20 20 73 74 72 69 6e 67 20 74 68 65 6e  ty.  string then
17920 20 72 65 74 75 72 6e 20 58 20 75 6e 63 68 61 6e   return X unchan
17930 67 65 64 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e  ged.  ^If Z is n
17940 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 20 20 61  ot initially.  a
17950 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20 63   string, it is c
17960 61 73 74 20 74 6f 20 61 20 55 54 46 2d 38 20 73  ast to a UTF-8 s
17970 74 72 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 70  tring prior to p
17980 72 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75  rocessing..}..fu
17990 6e 63 64 65 66 20 7b 72 6f 75 6e 64 28 58 29 20  ncdef {round(X) 
179a0 72 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d 20 7b  round(X,Y)} {} {
179b0 0a 20 20 5e 54 68 65 20 72 6f 75 6e 64 28 58 2c  .  ^The round(X,
179c0 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
179d0 72 6e 73 20 61 20 73 74 72 69 6e 67 20 72 65 70  rns a string rep
179e0 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
179f0 68 65 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e  he floating-poin
17a00 74 0a 20 20 76 61 6c 75 65 20 58 20 72 6f 75 6e  t.  value X roun
17a10 64 65 64 20 74 6f 20 59 20 64 69 67 69 74 73 20  ded to Y digits 
17a20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20  to the right of 
17a30 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
17a40 74 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  t..  ^If the Y a
17a50 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
17a60 65 64 2c 20 74 68 65 20 58 20 76 61 6c 75 65 20  ed, the X value 
17a70 69 73 20 74 72 75 6e 63 61 74 65 64 20 74 6f 20  is truncated to 
17a80 61 6e 20 69 6e 74 65 67 65 72 2e 0a 7d 0a 0a 66  an integer..}..f
17a90 75 6e 63 64 65 66 20 7b 72 74 72 69 6d 28 58 29  uncdef {rtrim(X)
17aa0 20 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20   rtrim(X,Y)} {} 
17ab0 7b 0a 20 20 5e 54 68 65 20 72 74 72 69 6d 28 58  {.  ^The rtrim(X
17ac0 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
17ad0 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f  urns a string fo
17ae0 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67  rmed by removing
17af0 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63   any and all.  c
17b00 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61  haracters that a
17b10 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20  ppear in Y from 
17b20 74 68 65 20 72 69 67 68 74 20 73 69 64 65 20 6f  the right side o
17b30 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59  f X..  ^If the Y
17b40 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69   argument is omi
17b50 74 74 65 64 2c 20 72 74 72 69 6d 28 58 29 20 72  tted, rtrim(X) r
17b60 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72  emoves spaces fr
17b70 6f 6d 20 74 68 65 20 72 69 67 68 74 0a 20 20 73  om the right.  s
17b80 69 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e  ide of X..}..fun
17b90 63 64 65 66 20 7b 73 6f 75 6e 64 65 78 28 58 29  cdef {soundex(X)
17ba0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 6f  } {} {.  ^The so
17bb0 75 6e 64 65 78 28 58 29 20 66 75 6e 63 74 69 6f  undex(X) functio
17bc0 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
17bd0 6e 67 20 74 68 61 74 20 69 73 20 74 68 65 20 73  ng that is the s
17be0 6f 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67 20  oundex encoding 
17bf0 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  .  of the string
17c00 20 58 2e 0a 20 20 5e 54 68 65 20 73 74 72 69 6e   X..  ^The strin
17c10 67 20 22 3f 30 30 30 22 20 69 73 20 72 65 74 75  g "?000" is retu
17c20 72 6e 65 64 20 69 66 20 74 68 65 20 61 72 67 75  rned if the argu
17c30 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 20 6f 72 20  ment is NULL or 
17c40 63 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f 20 41 53  contains.  no AS
17c50 43 49 49 20 61 6c 70 68 61 62 65 74 69 63 20 63  CII alphabetic c
17c60 68 61 72 61 63 74 65 72 73 2e 0a 20 20 5e 28 54  haracters..  ^(T
17c70 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
17c80 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 53 51 4c  omitted from SQL
17c90 69 74 65 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  ite by default..
17ca0 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 61 76 61    It is only ava
17cb0 69 6c 61 62 6c 65 20 69 66 20 74 68 65 20 5b 53  ilable if the [S
17cc0 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 5d 20 63  QLITE_SOUNDEX] c
17cd0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
17ce0 6f 6e 0a 20 20 69 73 20 75 73 65 64 20 77 68 65  on.  is used whe
17cf0 6e 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c  n SQLite is buil
17d00 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  t.)^.}..funcdef 
17d10 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f  {sqlite_compileo
17d20 70 74 69 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d  ption_get(N)} {}
17d30 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65   {.  ^The sqlite
17d40 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67  _compileoption_g
17d50 65 74 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  et() SQL functio
17d60 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61  n is a wrapper a
17d70 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c  round the.  [sql
17d80 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  ite3_compileopti
17d90 6f 6e 5f 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20  on_get()] C/C++ 
17da0 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 69  function..  ^Thi
17db0 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  s routine return
17dc0 73 20 74 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69  s the N-th compi
17dd0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75  le-time option u
17de0 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c  sed to build SQL
17df0 69 74 65 0a 20 20 6f 72 20 4e 55 4c 4c 20 69 66  ite.  or NULL if
17e00 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e   N is out of ran
17e10 67 65 2e 20 20 53 65 65 20 61 6c 73 6f 20 74 68  ge.  See also th
17e20 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f  e [compile_optio
17e30 6e 73 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66  ns pragma]..}..f
17e40 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 63  uncdef {sqlite_c
17e50 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65  ompileoption_use
17e60 64 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  d(X)} {} {.  ^Th
17e70 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65  e sqlite_compile
17e80 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 20 53 51  option_used() SQ
17e90 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  L function is a 
17ea0 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
17eb0 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f  he.  [sqlite3_co
17ec0 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64  mpileoption_used
17ed0 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69  ()] C/C++ functi
17ee0 6f 6e 2e 0a 20 20 5e 57 68 65 6e 20 74 68 65 20  on..  ^When the 
17ef0 61 72 67 75 6d 65 6e 74 20 58 20 74 6f 20 73 71  argument X to sq
17f00 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  lite_compileopti
17f10 6f 6e 5f 75 73 65 64 28 58 29 20 69 73 20 61 20  on_used(X) is a 
17f20 73 74 72 69 6e 67 20 77 68 69 63 68 0a 20 20 69  string which.  i
17f30 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
17f40 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
17f50 69 6f 6e 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  ion, this routin
17f60 65 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 28  e returns true (
17f70 31 29 20 6f 72 0a 20 20 66 61 6c 73 65 20 28 30  1) or.  false (0
17f80 29 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  ) depending on w
17f90 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
17fa0 61 74 20 6f 70 74 69 6f 6e 20 77 61 73 20 75 73  at option was us
17fb0 65 64 20 64 75 72 69 6e 67 20 74 68 65 0a 20 20  ed during the.  
17fc0 62 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65  build..}..funcde
17fd0 66 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72 63 65  f {sqlite_source
17fe0 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  _id()} {} {.  ^T
17ff0 68 65 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65  he sqlite_source
18000 5f 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  _id() function r
18010 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
18020 74 68 61 74 20 69 64 65 6e 74 69 66 69 65 73 20  that identifies 
18030 74 68 65 0a 20 20 73 70 65 63 69 66 69 63 20 76  the.  specific v
18040 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 73 6f  ersion of the so
18050 75 72 63 65 20 63 6f 64 65 20 74 68 61 74 20 77  urce code that w
18060 61 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64  as used to build
18070 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69   the SQLite.  li
18080 62 72 61 72 79 2e 20 20 5e 54 68 65 20 73 74 72  brary.  ^The str
18090 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 20  ing returned by 
180a0 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64  sqlite_source_id
180b0 28 29 20 62 65 67 69 6e 73 20 77 69 74 68 0a 20  () begins with. 
180c0 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69   the date and ti
180d0 6d 65 20 74 68 61 74 20 74 68 65 20 73 6f 75 72  me that the sour
180e0 63 65 20 63 6f 64 65 20 77 61 73 20 63 68 65 63  ce code was chec
180f0 6b 65 64 20 69 6e 20 61 6e 64 20 69 73 20 66 6f  ked in and is fo
18100 6c 6c 6f 77 73 20 62 79 0a 20 20 61 6e 20 53 48  llows by.  an SH
18110 41 31 20 68 61 73 68 20 74 68 61 74 20 75 6e 69  A1 hash that uni
18120 71 75 65 6c 79 20 69 64 65 6e 74 69 66 69 65 73  quely identifies
18130 20 74 68 65 20 73 6f 75 72 63 65 20 74 72 65 65   the source tree
18140 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f  .  ^This functio
18150 6e 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77 72  n is.  an SQL wr
18160 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
18170 20 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65   [sqlite3_source
18180 69 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61 63  id()] C interfac
18190 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  e..}..funcdef {s
181a0 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d  qlite_version()}
181b0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c   {} {.  ^The sql
181c0 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66 75  ite_version() fu
181d0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
181e0 68 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e  he version strin
181f0 67 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  g for the SQLite
18200 0a 20 20 6c 69 62 72 61 72 79 20 74 68 61 74 20  .  library that 
18210 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68  is running.  ^Th
18220 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  is function is a
18230 6e 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72 20  n SQL.  wrapper 
18240 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69  around the [sqli
18250 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29  te3_libversion()
18260 5d 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d  ] C-interface..}
18270 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73 74  ..funcdef {subst
18280 72 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72 28  r(X,Y,Z) substr(
18290 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
182a0 65 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20  e substr(X,Y,Z) 
182b0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
182c0 20 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20   a substring of 
182d0 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 74  input string X t
182e0 68 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74  hat begins.  wit
182f0 68 20 74 68 65 20 59 2d 74 68 20 63 68 61 72 61  h the Y-th chara
18300 63 74 65 72 20 61 6e 64 20 77 68 69 63 68 20 69  cter and which i
18310 73 20 5a 20 63 68 61 72 61 63 74 65 72 73 20 6c  s Z characters l
18320 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20  ong..  ^If Z is 
18330 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75 62  omitted then sub
18340 73 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73  str(X,Y) returns
18350 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20   all characters 
18360 74 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64 0a  through the end.
18370 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20    of the string 
18380 58 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  X beginning with
18390 20 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68   the Y-th..  ^Th
183a0 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72  e left-most char
183b0 61 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e 75  acter of X is nu
183c0 6d 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20 69  mber 1.  ^If Y i
183d0 73 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68 65  s negative.  the
183e0 6e 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72  n the first char
183f0 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62  acter of the sub
18400 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20  string is found 
18410 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d  by counting from
18420 20 74 68 65 0a 20 20 72 69 67 68 74 20 72 61 74   the.  right rat
18430 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66  her than the lef
18440 74 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67  t.  ^If Z is neg
18450 61 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65  ative then.  the
18460 20 61 62 73 28 5a 29 20 63 68 61 72 61 63 74 65   abs(Z) characte
18470 72 73 20 70 72 65 63 65 64 69 6e 67 20 74 68 65  rs preceding the
18480 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72 20   Y-th character 
18490 61 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20  are returned..  
184a0 5e 49 66 20 58 20 69 73 20 61 20 73 74 72 69 6e  ^If X is a strin
184b0 67 20 74 68 65 6e 20 63 68 61 72 61 63 74 65 72  g then character
184c0 73 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20  s indices refer 
184d0 74 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20  to actual UTF-8 
184e0 0a 20 20 63 68 61 72 61 63 74 65 72 73 2e 20 20  .  characters.  
184f0 5e 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20  ^If X is a BLOB 
18500 74 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73  then the indices
18510 20 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e   refer to bytes.
18520 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74  .}..funcdef {tot
18530 61 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d  al_changes()} {}
18540 20 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f   {.  ^The total_
18550 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69  changes() functi
18560 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  on returns the n
18570 75 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61  umber of row cha
18580 6e 67 65 73 0a 20 20 63 61 75 73 65 64 20 62 79  nges.  caused by
18590 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
185a0 6f 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74  or DELETE.  stat
185b0 65 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65  ements since the
185c0 20 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73   current databas
185d0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73  e connection was
185e0 20 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73   opened..  ^This
185f0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
18600 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
18610 65 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  e [sqlite3_total
18620 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f  _changes()].  C/
18630 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d  C++ interface..}
18640 0a 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28  ..funcdef {trim(
18650 58 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d  X) trim(X,Y)} {}
18660 20 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58   {.  ^The trim(X
18670 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
18680 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f  urns a string fo
18690 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67  rmed by removing
186a0 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63   any and all.  c
186b0 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61  haracters that a
186c0 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20  ppear in Y from 
186d0 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a  both ends of X..
186e0 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75    ^If the Y argu
186f0 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
18700 20 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73   trim(X) removes
18710 20 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74   spaces from bot
18720 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a  h ends of X..}..
18730 66 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28  funcdef {typeof(
18740 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
18750 74 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69  typeof(X) functi
18760 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
18770 69 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61 74  ing that indicat
18780 65 73 20 74 68 65 20 5b 64 61 74 61 74 79 70 65  es the [datatype
18790 5d 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65  ] of.  the expre
187a0 73 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c  ssion X: "null",
187b0 20 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61   "integer", "rea
187c0 6c 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22  l", "text", or "
187d0 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65  blob"..}..funcde
187e0 66 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d 20  f {upper(X)} {} 
187f0 7b 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28 58  {.  ^The upper(X
18800 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
18810 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e 70  ns a copy of inp
18820 75 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20 77  ut string X in w
18830 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65  hich all .  lowe
18840 72 2d 63 61 73 65 20 41 53 43 49 49 20 63 68 61  r-case ASCII cha
18850 72 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e 76  racters are conv
18860 65 72 74 65 64 20 74 6f 20 74 68 65 69 72 20 75  erted to their u
18870 70 70 65 72 2d 63 61 73 65 20 65 71 75 69 76 61  pper-case equiva
18880 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lent..}..funcdef
18890 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b   {zeroblob(N)} {
188a0 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62  } {.  ^The zerob
188b0 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20  lob(N) function 
188c0 72 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20 63  returns a BLOB c
188d0 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62  onsisting of N b
188e0 79 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20 20  ytes of 0x00..  
188f0 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20 74  SQLite manages t
18900 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76  hese zeroblobs v
18910 65 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e  ery efficiently.
18920 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20    Zeroblobs can 
18930 62 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73  be used to.  res
18940 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 61  erve space for a
18950 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61   BLOB that is la
18960 74 65 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e  ter written usin
18970 67 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c  g .  [sqlite3_bl
18980 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72  ob_open() | incr
18990 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f  emental BLOB I/O
189a0 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20 66  ]..  ^This SQL f
189b0 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65  unction is imple
189c0 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68 65  mented using the
189d0 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74   [sqlite3_result
189e0 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72  _zeroblob()].  r
189f0 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65 20  outine from the 
18a00 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e  C/C++ interface.
18a10 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c  .}.</tcl>.</tabl
18a20 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  e>..<tcl>.######
18a30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18a70 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
18a80 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20   {Date And Time 
18a90 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66  Functions} datef
18aa0 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 7d 0a  unc {*datefunc}.
18ab0 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74  hd_keywords {dat
18ac0 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
18ad0 7d 20 7b 74 69 6d 65 28 29 20 53 51 4c 20 66 75  } {time() SQL fu
18ae0 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f  nction}.hd_keywo
18af0 72 64 73 20 7b 64 61 74 65 74 69 6d 65 28 29 20  rds {datetime() 
18b00 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a  SQL function} {j
18b10 75 6c 69 61 6e 64 61 79 28 29 20 53 51 4c 20 66  ulianday() SQL f
18b20 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77  unction}.hd_keyw
18b30 6f 72 64 73 20 7b 73 74 72 66 74 69 6d 65 28 29  ords {strftime()
18b40 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c   SQL function}.<
18b50 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74  /tcl>..<p>.SQLit
18b60 65 20 73 75 70 70 6f 72 74 73 20 66 69 76 65 20  e supports five 
18b70 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
18b80 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f  nctions as follo
18b90 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f  ws:.</p>..<p>.<o
18ba0 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74  l>.<li> ^(<b>dat
18bb0 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72  e(</b><i>timestr
18bc0 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
18bd0 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
18be0 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e  <b>)</b>)^ </li>
18bf0 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d 65 28  .<li> ^(<b>time(
18c00 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e  </b><i>timestrin
18c10 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
18c20 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
18c30 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c  >)</b>)^ </li>.<
18c40 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 74 69 6d  li> ^(<b>datetim
18c50 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72  e(</b><i>timestr
18c60 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
18c70 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
18c80 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e  <b>)</b>)^ </li>
18c90 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61  .<li> ^(<b>julia
18ca0 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65  nday(</b><i>time
18cb0 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
18cc0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
18cd0 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f  /i><b>)</b>)^ </
18ce0 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74  li>.<li> ^(<b>st
18cf0 72 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f  rftime(</b><i>fo
18d00 72 6d 61 74 2c 20 74 69 6d 65 73 74 72 69 6e 67  rmat, timestring
18d10 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
18d20 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
18d30 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f  )</b>)^ </li>.</
18d40 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69  ol>..<p>.^All fi
18d50 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  ve date and time
18d60 20 66 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20   functions take 
18d70 61 20 74 69 6d 65 20 73 74 72 69 6e 67 20 61 73  a time string as
18d80 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 0a 5e   an argument. .^
18d90 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20  The time string 
18da0 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a  is followed by z
18db0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69  ero or more modi
18dc0 66 69 65 72 73 2e 20 0a 5e 54 68 65 20 73 74 72  fiers. .^The str
18dd0 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e  ftime() function
18de0 20 61 6c 73 6f 20 74 61 6b 65 73 20 61 20 66 6f   also takes a fo
18df0 72 6d 61 74 20 73 74 72 69 6e 67 20 61 73 20 69  rmat string as i
18e00 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  ts first argumen
18e10 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65  t..</p>..<p>.The
18e20 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
18e30 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20 73  unctions use a s
18e40 75 62 73 65 74 20 6f 66 0a 5b 68 74 74 70 3a 2f  ubset of.[http:/
18e50 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
18e60 67 2f 77 69 6b 69 2f 49 53 4f 5f 38 36 30 31 20  g/wiki/ISO_8601 
18e70 7c 20 49 53 30 2d 38 36 30 31 5d 20 64 61 74 65  | IS0-8601] date
18e80 20 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61 74   and time.format
18e90 73 2e 0a 5e 54 68 65 20 64 61 74 65 28 29 20 66  s..^The date() f
18ea0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
18eb0 74 68 65 20 64 61 74 65 20 69 6e 20 74 68 69 73  the date in this
18ec0 20 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d 4d   format: YYYY-MM
18ed0 2d 44 44 2e 20 0a 5e 54 68 65 20 74 69 6d 65 28  -DD. .^The time(
18ee0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
18ef0 6e 73 20 74 68 65 20 74 69 6d 65 20 61 73 20 48  ns the time as H
18f00 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65 20 64  H:MM:SS. .^The d
18f10 61 74 65 74 69 6d 65 28 29 20 66 75 6e 63 74 69  atetime() functi
18f20 6f 6e 20 72 65 74 75 72 6e 73 20 22 59 59 59 59  on returns "YYYY
18f30 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22  -MM-DD HH:MM:SS"
18f40 2e 20 0a 5e 28 54 68 65 20 6a 75 6c 69 61 6e 64  . .^(The juliand
18f50 61 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ay() function re
18f60 74 75 72 6e 73 20 74 68 65 20 0a 5b 68 74 74 70  turns the .[http
18f70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
18f80 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f  org/wiki/Julian_
18f90 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79  day | Julian day
18fa0 5d 20 2d 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f  ] - the.number o
18fb0 66 20 64 61 79 73 20 73 69 6e 63 65 20 6e 6f 6f  f days since noo
18fc0 6e 20 69 6e 20 47 72 65 65 6e 77 69 63 68 20 6f  n in Greenwich o
18fd0 6e 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20 34  n November 24, 4
18fe0 37 31 34 20 42 2e 43 2e 20 0a 28 5b 68 74 74 70  714 B.C. .([http
18ff0 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
19000 6f 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74  org/wiki/Prolept
19010 69 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c  ic_Gregorian_cal
19020 65 6e 64 61 72 20 7c 20 50 72 6f 6c 65 70 74 69  endar | Prolepti
19030 63 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65  c Gregorian cale
19040 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54 68 65 20 73  ndar]).)^.^The s
19050 74 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69 6e  trftime() routin
19060 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61  e returns the da
19070 74 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63 63  te formatted acc
19080 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20 66  ording to .the f
19090 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70 65  ormat string spe
190a0 63 69 66 69 65 64 20 61 73 20 74 68 65 20 66 69  cified as the fi
190b0 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 5e 54  rst argument..^T
190c0 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
190d0 20 73 75 70 70 6f 72 74 73 20 74 68 65 20 6d 6f   supports the mo
190e0 73 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69  st common substi
190f0 74 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e  tutions found in
19100 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70   the .[http://op
19110 65 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69  engroup.org/onli
19120 6e 65 70 75 62 73 2f 30 30 37 39 30 38 37 39 39  nepubs/007908799
19130 2f 78 73 68 2f 73 74 72 66 74 69 6d 65 2e 68 74  /xsh/strftime.ht
19140 6d 6c 20 7c 20 73 74 72 66 74 69 6d 65 28 29 20  ml | strftime() 
19150 66 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74  function].from t
19160 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69  he standard C li
19170 62 72 61 72 79 20 70 6c 75 73 20 74 77 6f 20 6e  brary plus two n
19180 65 77 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73  ew substitutions
19190 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a 5e 28 54  , %f and %J..^(T
191a0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20  he following is 
191b0 61 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74 20  a complete list 
191c0 6f 66 20 76 61 6c 69 64 20 73 74 72 66 74 69 6d  of valid strftim
191d0 65 28 29 20 73 75 62 73 74 69 74 75 74 69 6f 6e  e() substitution
191e0 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  s:.</p>..<blockq
191f0 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  uote>.<table bor
19200 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64  der="0" cellpadd
19210 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63  ing="0" cellspac
19220 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64  ing="0">.<tr><td
19230 3e 3c 74 64 20 77 69 64 74 68 3d 22 31 30 22 3e  ><td width="10">
19240 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c  <td></tr>..<tr><
19250 74 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e 20  td> %d <td><td> 
19260 64 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30 30  day of month: 00
19270 0a 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74 64  .<tr><td> %f <td
19280 3e 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e 61 6c  ><td> fractional
19290 20 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53 53   seconds: SS.SSS
192a0 0a 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74 64  .<tr><td> %H <td
192b0 3e 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d 32  ><td> hour: 00-2
192c0 34 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20 3c  4 .<tr><td> %j <
192d0 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 79  td><td> day of y
192e0 65 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74 72  ear: 001-366.<tr
192f0 3e 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74 64  ><td> %J <td><td
19300 3e 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d  > Julian day num
19310 62 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d 20  ber.<tr><td> %m 
19320 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20  <td><td> month: 
19330 30 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20 25  01-12.<tr><td> %
19340 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75 74  M <td><td> minut
19350 65 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64  e: 00-59.<tr><td
19360 3e 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73 65  > %s <td><td> se
19370 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30  conds since 1970
19380 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e 20  -01-01.<tr><td> 
19390 25 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f  %S <td><td> seco
193a0 6e 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c  nds: 00-59.<tr><
193b0 74 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e 20  td> %w <td><td> 
193c0 64 61 79 20 6f 66 20 77 65 65 6b 20 30 2d 36 20  day of week 0-6 
193d0 77 69 74 68 20 53 75 6e 64 61 79 3d 3d 30 0a 3c  with Sunday==0.<
193e0 74 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e 3c  tr><td> %W <td><
193f0 74 64 3e 20 77 65 65 6b 20 6f 66 20 79 65 61 72  td> week of year
19400 3a 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e  : 00-53.<tr><td>
19410 20 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65 61   %Y <td><td> yea
19420 72 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c 74 72  r: 0000-9999.<tr
19430 3e 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74 64  ><td> %% <td><td
19440 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  > %.</table>.</b
19450 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
19460 3e 0a 5e 28 4e 6f 74 69 63 65 20 74 68 61 74 20  >.^(Notice that 
19470 61 6c 6c 20 6f 74 68 65 72 20 64 61 74 65 20 61  all other date a
19480 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
19490 73 20 63 61 6e 20 62 65 20 65 78 70 72 65 73 73  s can be express
194a0 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20 73  ed.in terms of s
194b0 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a  trftime():.</p>.
194c0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
194d0 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20  able border="0" 
194e0 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20  cellpadding="0" 
194f0 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e  cellspacing="0">
19500 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63  .<tr><td><b>Func
19510 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64 74  tion</b><td widt
19520 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45 71  h="30"><td><b>Eq
19530 75 69 76 61 6c 65 6e 74 20 73 74 72 66 74 69 6d  uivalent strftim
19540 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e  e()</b>.<tr><td>
19550 20 20 20 64 61 74 65 28 2e 2e 2e 29 20 20 20 20     date(...)    
19560 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66    <td><td>  strf
19570 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27 2c  time('%Y-%m-%d',
19580 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20   ...).<tr><td>  
19590 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20 20   time(...)      
195a0 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69  <td><td>  strfti
195b0 6d 65 28 27 25 48 3a 25 4d 3a 25 53 27 2c 20 2e  me('%H:%M:%S', .
195c0 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64  ..).<tr><td>   d
195d0 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c 74  atetime(...)  <t
195e0 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65  d><td>  strftime
195f0 28 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d  ('%Y-%m-%d %H:%M
19600 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c  :%S', ...).<tr><
19610 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79 28  td>   julianday(
19620 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20 73  ...) <td><td>  s
19630 74 72 66 74 69 6d 65 28 27 25 4a 27 2c 20 2e 2e  trftime('%J', ..
19640 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  .).</table>.</bl
19650 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
19660 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f 6e  .The only reason
19670 73 20 66 6f 72 20 70 72 6f 76 69 64 69 6e 67 20  s for providing 
19680 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72 20  functions other 
19690 74 68 61 6e 20 73 74 72 66 74 69 6d 65 28 29 20  than strftime() 
196a0 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65 6e  is.for convenien
196b0 63 65 20 61 6e 64 20 66 6f 72 20 65 66 66 69 63  ce and for effic
196c0 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  iency..</p>..<h3
196d0 3e 54 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f 68  >Time Strings</h
196e0 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d 65 20  3>..<p>^(A time 
196f0 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69 6e  string can be in
19700 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c   any of the foll
19710 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c 2f  owing formats:</
19720 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69  p>..<ol>.<li> <i
19730 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a  >YYYY-MM-DD</i>.
19740 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
19750 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  DD HH:MM</i>.<li
19760 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20  > <i>YYYY-MM-DD 
19770 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69  HH:MM:SS</i>.<li
19780 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20  > <i>YYYY-MM-DD 
19790 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e  HH:MM:SS.SSS</i>
197a0 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
197b0 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c  -DD</i><b>T</b><
197c0 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e  i>HH:MM</i>.<li>
197d0 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f   <i>YYYY-MM-DD</
197e0 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a  i><b>T</b><i>HH:
197f0 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  MM:SS</i>.<li> <
19800 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e  i>YYYY-MM-DD</i>
19810 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d  <b>T</b><i>HH:MM
19820 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  :SS.SSS</i>.<li>
19830 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c   <i>HH:MM</i>.<l
19840 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f  i> <i>HH:MM:SS</
19850 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d  i>.<li> <i>HH:MM
19860 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  :SS.SSS</i>.<li>
19870 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e   <b>now</b>.<li>
19880 20 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c 2f   <i>DDDDDDDDDD</
19890 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a  i>.</ol>)^..<p>.
198a0 5e 49 6e 20 66 6f 72 6d 61 74 73 20 35 20 74 68  ^In formats 5 th
198b0 72 6f 75 67 68 20 37 2c 20 74 68 65 20 22 54 22  rough 7, the "T"
198c0 20 69 73 20 61 20 6c 69 74 65 72 61 6c 20 63 68   is a literal ch
198d0 61 72 61 63 74 65 72 20 73 65 70 61 72 61 74 69  aracter separati
198e0 6e 67 20 0a 74 68 65 20 64 61 74 65 20 61 6e 64  ng .the date and
198f0 20 74 68 65 20 74 69 6d 65 2c 20 61 73 20 72 65   the time, as re
19900 71 75 69 72 65 64 20 62 79 20 0a 5b 68 74 74 70  quired by .[http
19910 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f 54  ://www.w3c.org/T
19920 52 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65 20  R/NOTE-datetime 
19930 7c 20 49 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46  | ISO-8601]. .^F
19940 6f 72 6d 61 74 73 20 38 20 74 68 72 6f 75 67 68  ormats 8 through
19950 20 31 30 20 74 68 61 74 20 73 70 65 63 69 66 79   10 that specify
19960 20 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61 73 73   only a time ass
19970 75 6d 65 20 61 20 64 61 74 65 20 6f 66 20 0a 32  ume a date of .2
19980 30 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d 61  000-01-01. Forma
19990 74 20 31 31 2c 20 74 68 65 20 73 74 72 69 6e 67  t 11, the string
199a0 20 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76 65   'now', is conve
199b0 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 0a 63  rted into the .c
199c0 75 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64 20  urrent date and 
199d0 74 69 6d 65 20 61 73 20 6f 62 74 61 69 6e 65 64  time as obtained
199e0 20 66 72 6f 6d 20 74 68 65 20 78 43 75 72 72 65   from the xCurre
199f0 6e 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f 66  ntTime method.of
19a00 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 76 66   the [sqlite3_vf
19a10 73 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75 73 65  s] object in use
19a20 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  ..^[http://en.wi
19a30 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
19a40 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69  /Coordinated_Uni
19a50 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55 6e  versal_Time | Un
19a60 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61  iversal Coordina
19a70 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d 20  ted Time (UTC)] 
19a80 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d 61  is used. .^Forma
19a90 74 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68 74  t 12 is the .[ht
19aa0 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
19ab0 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61  a.org/wiki/Julia
19ac0 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64  n_day | Julian d
19ad0 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72 65  ay number].expre
19ae0 73 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74 69  ssed as a floati
19af0 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
19b00 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69  </p>..<h3>Modifi
19b10 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  ers</h3>..<p>^Th
19b20 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61  e time string ca
19b30 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  n be followed by
19b40 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f   zero or more mo
19b50 64 69 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c  difiers that .al
19b60 74 65 72 20 64 61 74 65 20 61 6e 64 2f 6f 72 20  ter date and/or 
19b70 74 69 6d 65 2e 20 5e 45 61 63 68 20 6d 6f 64 69  time. ^Each modi
19b80 66 69 65 72 0a 69 73 20 61 20 74 72 61 6e 73 66  fier.is a transf
19b90 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
19ba0 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20   applied to the 
19bb0 74 69 6d 65 20 76 61 6c 75 65 20 74 6f 20 69 74  time value to it
19bc0 73 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66 69 65  s left..^Modifie
19bd0 72 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 66  rs are applied f
19be0 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
19bf0 74 3b 20 6f 72 64 65 72 20 69 73 20 69 6d 70 6f  t; order is impo
19c00 72 74 61 6e 74 2e 0a 5e 28 54 68 65 20 61 76 61  rtant..^(The ava
19c10 69 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65 72 73  ilable modifiers
19c20 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e   are as follows.
19c30 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  </p>..<ol>.<li> 
19c40 4e 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e  NNN days.<li> NN
19c50 4e 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e  N hours.<li> NNN
19c60 20 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e   minutes.<li> NN
19c70 4e 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c  N.NNNN seconds.<
19c80 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c  li> NNN months.<
19c90 6c 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c  li> NNN years.<l
19ca0 69 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74  i> start of mont
19cb0 68 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20  h.<li> start of 
19cc0 79 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20  year.<li> start 
19cd0 6f 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b  of day.<li> week
19ce0 64 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65  day N.<li> unixe
19cf0 70 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74  poch.<li> localt
19d00 69 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f  ime.<li> utc .</
19d10 6f 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 66  ol>)^..<p>^The f
19d20 69 72 73 74 20 73 69 78 20 6d 6f 64 69 66 69 65  irst six modifie
19d30 72 73 20 28 31 20 74 68 72 6f 75 67 68 20 36 29  rs (1 through 6)
19d40 20 0a 73 69 6d 70 6c 79 20 61 64 64 20 74 68 65   .simply add the
19d50 20 73 70 65 63 69 66 69 65 64 20 61 6d 6f 75 6e   specified amoun
19d60 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 74 68 65  t of time to the
19d70 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 0a   date and time .
19d80 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
19d90 20 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65 73   preceding times
19da0 74 72 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66 69  tring and modifi
19db0 65 72 73 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20  ers..^Note that 
19dc0 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e  "&plusmn;NNN mon
19dd0 74 68 73 22 20 77 6f 72 6b 73 20 62 79 20 72 65  ths" works by re
19de0 6e 64 65 72 69 6e 67 20 74 68 65 20 6f 72 69 67  ndering the orig
19df0 69 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f 0a 74  inal date into.t
19e00 68 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20 66 6f  he YYYY-MM-DD fo
19e10 72 6d 61 74 2c 20 61 64 64 69 6e 67 20 74 68 65  rmat, adding the
19e20 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20   &plusmn;NNN to 
19e30 74 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c  the MM month val
19e40 75 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69  ue, then.normali
19e50 7a 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2e  zing the result.
19e60 20 20 5e 54 68 75 73 2c 20 66 6f 72 20 65 78 61    ^Thus, for exa
19e70 6d 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20 32  mple, the data 2
19e80 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66 69  001-03-31 modifi
19e90 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68 27  ed.by '+1 month'
19ea0 20 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c 64   initially yield
19eb0 73 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62 75  s 2001-04-31, bu
19ec0 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61 73  t April only has
19ed0 20 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65 20   30 days.so the 
19ee0 64 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69 7a  date is normaliz
19ef0 65 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30 31  ed to 2001-05-01
19f00 2e 20 20 5e 41 20 73 69 6d 69 6c 61 72 20 65 66  .  ^A similar ef
19f10 66 65 63 74 20 6f 63 63 75 72 73 20 77 68 65 6e  fect occurs when
19f20 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61  .the original da
19f30 74 65 20 69 73 20 46 65 62 72 75 61 72 79 20 32  te is February 2
19f40 39 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72 20  9 of a leapyear 
19f50 61 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65 72  and the modifier
19f60 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65   is.&plusmn;N ye
19f70 61 72 73 20 77 68 65 72 65 20 4e 20 69 73 20 6e  ars where N is n
19f80 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66  ot a multiple of
19f90 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   four.</p>..<p>^
19fa0 54 68 65 20 22 73 74 61 72 74 20 6f 66 22 20 6d  The "start of" m
19fb0 6f 64 69 66 69 65 72 73 20 28 37 20 74 68 72 6f  odifiers (7 thro
19fc0 75 67 68 20 39 29 20 73 68 69 66 74 20 74 68 65  ugh 9) shift the
19fd0 20 64 61 74 65 20 62 61 63 6b 77 61 72 64 73 20   date backwards 
19fe0 0a 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  .to the beginnin
19ff0 67 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  g of the current
1a000 20 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72 20   month, year or 
1a010 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  day.</p>..<p>^Th
1a020 65 20 22 77 65 65 6b 64 61 79 22 20 6d 6f 64 69  e "weekday" modi
1a030 66 69 65 72 20 61 64 76 61 6e 63 65 73 20 74 68  fier advances th
1a040 65 20 64 61 74 65 20 66 6f 72 77 61 72 64 20 74  e date forward t
1a050 6f 20 74 68 65 20 6e 65 78 74 20 64 61 74 65 20  o the next date 
1a060 0a 77 68 65 72 65 20 74 68 65 20 77 65 65 6b 64  .where the weekd
1a070 61 79 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20  ay number is N. 
1a080 53 75 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e  Sunday is 0, Mon
1a090 64 61 79 20 69 73 20 31 2c 20 61 6e 64 20 73 6f  day is 1, and so
1a0a0 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e   forth.</p>..<p>
1a0b0 5e 54 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22  ^The "unixepoch"
1a0c0 20 6d 6f 64 69 66 69 65 72 20 28 31 31 29 20 6f   modifier (11) o
1a0d0 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 69 74 20  nly works if it 
1a0e0 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
1a0f0 6f 77 73 20 0a 61 20 74 69 6d 65 73 74 72 69 6e  ows .a timestrin
1a100 67 20 69 6e 20 74 68 65 20 44 44 44 44 44 44 44  g in the DDDDDDD
1a110 44 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e 54 68  DDD format. .^Th
1a120 69 73 20 6d 6f 64 69 66 69 65 72 20 63 61 75 73  is modifier caus
1a130 65 73 20 74 68 65 20 44 44 44 44 44 44 44 44 44  es the DDDDDDDDD
1a140 44 20 74 6f 20 62 65 20 69 6e 74 65 72 70 72 65  D to be interpre
1a150 74 65 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a 75  ted not .as a Ju
1a160 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20  lian day number 
1a170 61 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20 77  as it normally w
1a180 6f 75 6c 64 20 62 65 2c 20 62 75 74 20 61 73 0a  ould be, but as.
1a190 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
1a1a0 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e  edia.org/wiki/Un
1a1b0 69 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78 20 54  ix_time | Unix T
1a1c0 69 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75 6d 62  ime] - the .numb
1a1d0 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69  er of seconds si
1a1e0 6e 63 65 20 31 39 37 30 2e 20 20 49 66 20 74 68  nce 1970.  If th
1a1f0 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
1a200 64 69 66 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a  difier does not.
1a210 66 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74 72  follow a timestr
1a220 69 6e 67 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ing of the form 
1a230 44 44 44 44 44 44 44 44 44 44 20 77 68 69 63 68  DDDDDDDDDD which
1a240 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6e   expresses the n
1a250 75 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73  umber.of seconds
1a260 20 73 69 6e 63 65 20 31 39 37 30 20 6f 72 20 69   since 1970 or i
1a270 66 20 6f 74 68 65 72 20 6d 6f 64 69 66 69 65 72  f other modifier
1a280 73 0a 73 65 70 61 72 61 74 65 20 74 68 65 20 22  s.separate the "
1a290 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66  unixepoch" modif
1a2a0 69 65 72 20 66 72 6f 6d 20 70 72 69 6f 72 20 44  ier from prior D
1a2b0 44 44 44 44 44 44 44 44 44 20 74 68 65 6e 20 74  DDDDDDDDD then t
1a2c0 68 65 0a 62 65 68 61 76 69 6f 72 20 69 73 20 75  he.behavior is u
1a2d0 6e 64 65 66 69 6e 65 64 2e 0a 44 75 65 20 74 6f  ndefined..Due to
1a2e0 20 70 72 65 63 69 73 69 6f 6e 20 6c 69 6d 69 74   precision limit
1a2f0 61 74 69 6f 6e 73 20 69 6d 70 6f 73 65 64 20 62  ations imposed b
1a300 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
1a310 74 69 6f 6e 73 20 75 73 65 0a 6f 66 20 36 34 2d  tions use.of 64-
1a320 62 69 74 20 69 6e 74 65 67 65 72 73 2c 20 74 68  bit integers, th
1a330 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
1a340 64 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72 6b  difier only work
1a350 73 20 66 6f 72 0a 64 61 74 65 73 20 62 65 74 77  s for.dates betw
1a360 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30  een 0000-01-01 0
1a370 30 3a 30 30 3a 30 30 20 61 6e 64 20 35 33 35 32  0:00:00 and 5352
1a380 2d 31 31 2d 30 31 20 31 30 3a 35 32 3a 34 37 20  -11-01 10:52:47 
1a390 28 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20 2d  (unix times.of -
1a3a0 36 32 31 36 37 32 31 39 32 30 30 20 74 68 72 6f  62167219200 thro
1a3b0 75 67 68 20 31 30 36 37 35 31 39 39 31 36 37 29  ugh 10675199167)
1a3c0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22  .</p>..<p>^The "
1a3d0 6c 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66  localtime" modif
1a3e0 69 65 72 20 28 31 32 29 20 61 73 73 75 6d 65 73  ier (12) assumes
1a3f0 20 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67   the time string
1a400 20 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20   to its left is 
1a410 69 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f  in.Universal Coo
1a420 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55  rdinated Time (U
1a430 54 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73 20  TC) and adjusts 
1a440 74 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67 20  the time.string 
1a450 73 6f 20 74 68 61 74 20 69 74 20 64 69 73 70 6c  so that it displ
1a460 61 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20  ays localtime.  
1a470 49 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66  If "localtime".f
1a480 6f 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74 68  ollows a time th
1a490 61 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20 74  at is not UTC, t
1a4a0 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
1a4b0 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e   is undefined..^
1a4c0 28 54 68 65 20 22 75 74 63 22 20 69 73 20 74 68  (The "utc" is th
1a4d0 65 20 6f 70 70 6f 73 69 74 65 20 6f 66 20 22 6c  e opposite of "l
1a4e0 6f 63 61 6c 74 69 6d 65 22 2e 20 20 22 75 74 63  ocaltime".  "utc
1a4f0 22 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 74  " assumes that t
1a500 68 65 20 73 74 72 69 6e 67 0a 74 6f 20 69 74 73  he string.to its
1a510 20 6c 65 66 74 20 69 73 20 69 6e 20 74 68 65 20   left is in the 
1a520 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61  local timezone a
1a530 6e 64 20 61 64 6a 75 73 74 73 20 74 68 61 74 20  nd adjusts that 
1a540 73 74 72 69 6e 67 20 74 6f 20 62 65 20 69 6e 20  string to be in 
1a550 55 54 43 2e 29 5e 0a 49 66 20 74 68 65 20 70 72  UTC.)^.If the pr
1a560 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20 6e 6f  ior string is no
1a570 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c 20  t in localtime, 
1a580 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
1a590 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e 64 65  of "utc" is.unde
1a5a0 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  fined.</p>..<h3>
1a5b0 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e  Examples</h3>..^
1a5c0 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1a5d0 63 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e  current date.<p>
1a5e0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45  ..<blockquote>SE
1a5f0 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 29  LECT date('now')
1a600 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ;</blockquote>)^
1a610 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1a620 68 65 20 6c 61 73 74 20 64 61 79 20 6f 66 20 74  he last day of t
1a630 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68  he current month
1a640 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1a650 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27  te>SELECT date('
1a660 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 6d  now','start of m
1a670 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27  onth','+1 month'
1a680 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c  ,'-1 day');.</bl
1a690 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1a6a0 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61  p>Compute the da
1a6b0 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65  te and time give
1a6c0 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61  n a unix timesta
1a6d0 6d 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c 2f  mp 1092941466.</
1a6e0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1a6f0 0a 20 20 20 20 53 45 4c 45 43 54 20 64 61 74 65  .    SELECT date
1a700 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c  time(1092941466,
1a710 20 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c   'unixepoch');.<
1a720 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1a730 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1a740 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67   date and time g
1a750 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65  iven a unix time
1a760 73 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36  stamp 1092941466
1a770 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74  , and .compensat
1a780 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c  e for your local
1a790 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a   timezone.</p>..
1a7a0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1a7b0 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31  ELECT datetime(1
1a7c0 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78  092941466, 'unix
1a7d0 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69  epoch', 'localti
1a7e0 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  me');.</blockquo
1a7f0 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
1a800 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ute the current 
1a810 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c  unix timestamp.<
1a820 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1a830 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74  >.  SELECT strft
1a840 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b  ime('%s','now');
1a850 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1a860 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1a870 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 79  he number of day
1a880 73 20 73 69 6e 63 65 20 74 68 65 20 73 69 67 6e  s since the sign
1a890 69 6e 67 20 6f 66 20 74 68 65 20 55 53 20 44 65  ing of the US De
1a8a0 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64  claration.of Ind
1a8b0 65 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a  ependence.</p>..
1a8c0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1a8d0 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61 79 28  ELECT julianday(
1a8e0 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64  'now') - juliand
1a8f0 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34 27 29  ay('1776-07-04')
1a900 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1a910 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1a920 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  the number of se
1a930 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20 70 61  conds since a pa
1a940 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20  rticular moment 
1a950 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62  in 2004:</p>..<b
1a960 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
1a970 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73  ECT strftime('%s
1a980 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72 66 74  ','now') - strft
1a990 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34 2d 30  ime('%s','2004-0
1a9a0 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27 29 3b  1-01 02:34:56');
1a9b0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1a9c0 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74 65 20  ..^(<p>.Compute 
1a9d0 74 68 65 20 64 61 74 65 20 6f 66 20 74 68 65 20  the date of the 
1a9e0 66 69 72 73 74 20 54 75 65 73 64 61 79 20 69 6e  first Tuesday in
1a9f0 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74 68 65   October.for the
1aa00 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c   current year..<
1aa10 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1aa20 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65 28  >.  SELECT date(
1aa30 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20  'now','start of 
1aa40 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73  year','+9 months
1aa50 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29 3b 0a  ','weekday 2');.
1aa60 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1aa70 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1aa80 65 20 74 69 6d 65 20 73 69 6e 63 65 20 74 68 65  e time since the
1aa90 20 75 6e 69 78 20 65 70 6f 63 68 20 69 6e 20 73   unix epoch in s
1aaa0 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74  econds .(like st
1aab0 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77  rftime('%s','now
1aac0 27 29 20 65 78 63 65 70 74 20 69 6e 63 6c 75 64  ') except includ
1aad0 65 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61  es fractional pa
1aae0 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  rt):</p>..<block
1aaf0 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
1ab00 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27  (julianday('now'
1ab10 29 20 2d 20 32 34 34 30 35 38 37 2e 35 29 2a 38  ) - 2440587.5)*8
1ab20 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71  6400.0;.</blockq
1ab30 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76  uote>)^..<h3>Cav
1ab40 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c 2f 68  eats And Bugs</h
1ab50 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75  3>..<p>The compu
1ab60 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20  tation of local 
1ab70 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68 65 61  time depends hea
1ab80 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68 69 6d  vily on the whim
1ab90 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e 73   .of politicians
1aba0 20 61 6e 64 20 69 73 20 74 68 75 73 20 64 69 66   and is thus dif
1abb0 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20 63 6f  ficult to get co
1abc0 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c  rrect for .all l
1abd0 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68 69 73  ocales. ^In this
1abe0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
1abf0 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20   the standard C 
1ac00 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74 69 6f  library .functio
1ac10 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20  n localtime_r() 
1ac20 69 73 20 75 73 65 64 20 74 6f 20 61 73 73 69 73  is used to assis
1ac30 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75 6c 61  t in the calcula
1ac40 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74  tion of .local t
1ac50 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c 6f 63  ime.  ^(The .loc
1ac60 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66 75 6e  altime_r() C fun
1ac70 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f  ction normally o
1ac80 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 79 65  nly works for ye
1ac90 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39 37 30  ars.between 1970
1aca0 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72 20 64   and 2037. For d
1acb0 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 69  ates outside thi
1acc0 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74 65 20  s range, SQLite 
1acd0 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 61 70  .attempts to map
1ace0 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f 20 61   the year into a
1acf0 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79 65 61  n equivalent yea
1ad00 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73 20 72  r within .this r
1ad10 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63 61 6c  ange, do the cal
1ad20 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  culation, then m
1ad30 61 70 20 74 68 65 20 79 65 61 72 20 62 61 63 6b  ap the year back
1ad40 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54  .)^</p>...<p>^(T
1ad50 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f  hese functions o
1ad60 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64 61 74  nly work for dat
1ad70 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d  es between 0000-
1ad80 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 0a 61  01-01 00:00:00.a
1ad90 6e 64 20 39 39 39 39 2d 31 32 2d 33 31 20 32 33  nd 9999-12-31 23
1ada0 3a 35 39 3a 35 39 20 28 6a 75 6c 69 64 61 6e 20  :59:59 (julidan 
1adb0 64 61 79 20 6e 75 6d 62 65 72 73 20 31 37 32 31  day numbers 1721
1adc0 30 35 39 2e 35 20 74 68 72 6f 75 67 68 20 35 33  059.5 through 53
1add0 37 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72 20  73484.5).)^.For 
1ade0 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68  dates outside th
1adf0 61 74 20 72 61 6e 67 65 2c 20 74 68 65 20 72 65  at range, the re
1ae00 73 75 6c 74 73 20 6f 66 20 74 68 65 73 65 0a 66  sults of these.f
1ae10 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 75 6e 64  unctions are und
1ae20 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  efined.</p>..<p>
1ae30 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77  Non-Vista Window
1ae40 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79  s platforms only
1ae50 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65 74   support one set
1ae60 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20 0a   of DST rules. .
1ae70 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f  Vista only suppo
1ae80 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66 6f  rts two. Therefo
1ae90 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c 61  re, on these pla
1aea0 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69  tforms, .histori
1aeb0 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61 74  cal DST calculat
1aec0 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e 63  ions will be inc
1aed0 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78 61  orrect. .For exa
1aee0 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53 2c  mple, in the US,
1aef0 20 69 6e 20 32 30 30 37 20 74 68 65 20 44 53 54   in 2007 the DST
1af00 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e 20   rules changed. 
1af10 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f  .Non-Vista Windo
1af20 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70 70  ws platforms app
1af30 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30 37 20  ly the new 2007 
1af40 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c  DST rules .to al
1af50 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61 72 73  l previous years
1af60 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61 20   as well. Vista 
1af70 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62 65  does somewhat be
1af80 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65 73  tter.getting res
1af90 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61 63  ults correct bac
1afa0 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e 20  k to 1986, when 
1afb0 74 68 65 20 72 75 6c 65 73 20 77 65 72 65 20 61  the rules were a
1afc0 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e  lso changed.</p>
1afd0 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61  ..<p>All interna
1afe0 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61  l computations a
1aff0 73 73 75 6d 65 20 74 68 65 20 0a 5b 68 74 74 70  ssume the .[http
1b000 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
1b010 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69  org/wiki/Gregori
1b020 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47 72  an_calendar | Gr
1b030 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72  egorian calendar
1b040 5d 0a 73 79 73 74 65 6d 2e 20 20 49 74 20 69 73  ].system.  It is
1b050 20 61 6c 73 6f 20 61 73 73 75 6d 65 64 20 74 68   also assumed th
1b060 61 74 20 65 76 65 72 79 0a 64 61 79 20 69 73 20  at every.day is 
1b070 65 78 61 63 74 6c 79 20 38 36 34 30 30 20 73 65  exactly 86400 se
1b080 63 6f 6e 64 73 20 69 6e 20 64 75 72 61 74 69 6f  conds in duratio
1b090 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  n.</p>..<tcl>.##
1b0a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b0b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b0c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b0d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b0e0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
1b0f0 74 69 6f 6e 20 7b 41 67 67 72 65 67 61 74 65 20  tion {Aggregate 
1b100 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66 75  Functions} aggfu
1b110 6e 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 3c 2f  nc {*aggfunc}.</
1b120 74 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67  tcl>..<p>.The ag
1b130 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1b140 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72  s shown below ar
1b150 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64  e available by d
1b160 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69 6f  efault.  Additio
1b170 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20 66 75  nal.aggregate fu
1b180 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20  nctions written 
1b190 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64 64 65  in C may be adde
1b1a0 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 73 71  d using the .[sq
1b1b0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
1b1c0 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49  ction()]</a>.API
1b1d0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61  .</p>..<p>.^In a
1b1e0 6e 79 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ny aggregate fun
1b1f0 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73  ction that takes
1b200 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65   a single argume
1b210 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65 6e  nt, that argumen
1b220 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65 64 65  t.can be precede
1b230 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64  d by the keyword
1b240 20 44 49 53 54 49 4e 43 54 2e 20 20 5e 49 6e 20   DISTINCT.  ^In 
1b250 73 75 63 68 20 63 61 73 65 73 2c 20 64 75 70 6c  such cases, dupl
1b260 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61  icate.elements a
1b270 72 65 20 66 69 6c 74 65 72 65 64 20 62 65 66 6f  re filtered befo
1b280 72 65 20 62 65 69 6e 67 20 70 61 73 73 65 64 20  re being passed 
1b290 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65 67 61  into the aggrega
1b2a0 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f  te function..^Fo
1b2b0 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66  r example, the f
1b2c0 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64  unction "count(d
1b2d0 69 73 74 69 6e 63 74 20 58 29 22 20 77 69 6c 6c  istinct X)" will
1b2e0 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
1b2f0 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74 20 76  er.of distinct v
1b300 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20  alues of column 
1b310 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  X instead of the
1b320 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
1b330 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73   non-null.values
1b340 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f   in column X..</
1b350 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  p>..<table borde
1b360 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  r=0 cellpadding=
1b370 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65  10>.<tcl>.funcde
1b380 66 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61 76 67  f {avg(X)} {*avg
1b390 20 7b 61 76 67 28 29 20 61 67 67 72 65 67 61 74   {avg() aggregat
1b3a0 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  e function}} {. 
1b3b0 20 5e 54 68 65 20 61 76 67 28 29 20 66 75 6e 63   ^The avg() func
1b3c0 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74  tion.  returns t
1b3d0 68 65 20 61 76 65 72 61 67 65 20 76 61 6c 75 65  he average value
1b3e0 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c   of all non-NULL
1b3f0 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e   <i>X</i> within
1b400 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e 53 74   a.  group.  ^St
1b410 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76 61  ring and BLOB va
1b420 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74  lues that do not
1b430 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65   look like numbe
1b440 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72 70 72  rs are.  interpr
1b450 65 74 65 64 20 61 73 20 30 2e 0a 20 20 5e 54 68  eted as 0..  ^Th
1b460 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28  e result of avg(
1b470 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c  ) is always a fl
1b480 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
1b490 75 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20  ue as long as.  
1b4a0 61 74 20 74 68 65 72 65 20 69 73 20 61 74 20 6c  at there is at l
1b4b0 65 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c  east one non-NUL
1b4c0 4c 20 69 6e 70 75 74 20 65 76 65 6e 20 69 66 20  L input even if 
1b4d0 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61 72 65  all.  inputs are
1b4e0 20 69 6e 74 65 67 65 72 73 2e 20 20 5e 54 68 65   integers.  ^The
1b4f0 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29   result of avg()
1b500 20 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20   is NULL if and 
1b510 6f 6e 6c 79 20 69 66 0a 20 20 74 68 65 72 65 20  only if.  there 
1b520 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
1b530 69 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e  inputs.  .}..fun
1b540 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29 20 63  cdef {count(X) c
1b550 6f 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74  ount(*)} {*count
1b560 20 7b 63 6f 75 6e 74 28 29 20 61 67 67 72 65 67   {count() aggreg
1b570 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  ate function}} {
1b580 0a 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 58 29  .  ^The count(X)
1b590 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1b5a0 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66 20 74  s.  a count of t
1b5b0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d  he number of tim
1b5c0 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f  es.  that <i>X</
1b5d0 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69  i> is not NULL i
1b5e0 6e 20 61 20 67 72 6f 75 70 2e 20 20 5e 54 68 65  n a group.  ^The
1b5f0 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74 69   count(*) functi
1b600 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20 61 72  on.  (with no ar
1b610 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72 6e 73  guments) returns
1b620 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
1b630 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
1b640 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64   group..}..funcd
1b650 65 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74  ef {group_concat
1b660 28 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74  (X) group_concat
1b670 28 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72 6f 75  (X,Y)} {.  *grou
1b680 70 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75 70 5f  p_concat {group_
1b690 63 6f 6e 63 61 74 28 29 20 61 67 67 72 65 67 61  concat() aggrega
1b6a0 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b  te function}.} {
1b6b0 0a 20 20 5e 54 68 65 20 67 72 6f 75 70 5f 63 6f  .  ^The group_co
1b6c0 6e 63 61 74 28 29 20 66 75 6e 63 74 69 6f 6e 20  ncat() function 
1b6d0 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69  returns.  a stri
1b6e0 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20  ng which is the 
1b6f0 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66  concatenation of
1b700 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  .  all non-NULL 
1b710 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f  values of <i>X</
1b720 69 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d 65 74  i>.  ^If paramet
1b730 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 70  er <i>Y</i> is p
1b740 72 65 73 65 6e 74 20 74 68 65 6e 0a 20 20 69 74  resent then.  it
1b750 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
1b760 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65 74 77  separator.  betw
1b770 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20 6f 66  een instances of
1b780 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20 63   <i>X</i>.  ^A c
1b790 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20 75 73  omma (",") is us
1b7a0 65 64 20 61 73 20 74 68 65 20 73 65 70 61 72 61  ed as the separa
1b7b0 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f 69  tor.  if <i>Y</i
1b7c0 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 20 20 54  > is omitted.  T
1b7d0 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20  he order of the 
1b7e0 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 65 6c 65  concatenated ele
1b7f0 6d 65 6e 74 73 20 69 73 0a 20 20 61 72 62 69 74  ments is.  arbit
1b800 72 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  rary..}..funcdef
1b810 20 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61 78 41   {max(X)} {*maxA
1b820 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61 78 20  ggFunc *agg_max 
1b830 7b 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65  {max() aggregate
1b840 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1b850 5e 54 68 65 20 6d 61 78 28 29 20 61 67 67 72 65  ^The max() aggre
1b860 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20  gate function.  
1b870 72 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78 69  returns the maxi
1b880 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  mum value of all
1b890 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
1b8a0 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 61 78  roup..  ^The max
1b8b0 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68  imum value is th
1b8c0 65 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75  e value that wou
1b8d0 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64 20 6c  ld be returned l
1b8e0 61 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52 44 45  ast in an.  ORDE
1b8f0 52 20 42 59 20 6f 6e 20 74 68 65 20 73 61 6d 65  R BY on the same
1b900 20 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67 72 65   column.  ^Aggre
1b910 67 61 74 65 20 6d 61 78 28 29 20 72 65 74 75 72  gate max() retur
1b920 6e 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20 61 6e  ns NULL .  if an
1b930 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20  d only if there 
1b940 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
1b950 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
1b960 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  oup..}..funcdef 
1b970 7b 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41 67  {min(X)} {*minAg
1b980 67 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e 20 7b  gFunc *agg_min {
1b990 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20  min() aggregate 
1b9a0 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
1b9b0 54 68 65 20 6d 69 6e 28 29 20 61 67 67 72 65 67  The min() aggreg
1b9c0 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72  ate function.  r
1b9d0 65 74 75 72 6e 73 20 74 68 65 20 6d 69 6e 69 6d  eturns the minim
1b9e0 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  um non-NULL valu
1b9f0 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20  e of all values 
1ba00 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20  in the group..  
1ba10 5e 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c  ^The minimum val
1ba20 75 65 20 69 73 20 74 68 65 20 66 69 72 73 74 20  ue is the first 
1ba30 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 74  non-NULL value t
1ba40 68 61 74 20 77 6f 75 6c 64 20 61 70 70 65 61 72  hat would appear
1ba50 0a 20 20 69 6e 20 61 6e 20 4f 52 44 45 52 20 42  .  in an ORDER B
1ba60 59 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  Y of the column.
1ba70 0a 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d 69  .  ^Aggregate mi
1ba80 6e 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  n() returns NULL
1ba90 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
1baa0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
1bab0 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20 69  -NULL.  values i
1bac0 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a  n the group..}..
1bad0 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58 29 20  funcdef {sum(X) 
1bae0 74 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20 2a 73  total(X)} {.  *s
1baf0 75 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74 6f 74  umFunc *sum *tot
1bb00 61 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67 67 72  al.  {sum() aggr
1bb10 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a  egate function}.
1bb20 20 20 7b 74 6f 74 61 6c 28 29 20 61 67 67 72 65    {total() aggre
1bb30 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d  gate function}.}
1bb40 20 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28 29 20   {.  ^The sum() 
1bb50 61 6e 64 20 74 6f 74 61 6c 28 29 20 61 67 67 72  and total() aggr
1bb60 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a  egate functions.
1bb70 20 20 72 65 74 75 72 6e 20 73 75 6d 20 6f 66 20    return sum of 
1bb80 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  all non-NULL val
1bb90 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
1bba0 2e 0a 20 20 5e 49 66 20 74 68 65 72 65 20 61 72  ..  ^If there ar
1bbb0 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e  e no non-NULL in
1bbc0 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20 73 75  put rows then su
1bbd0 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20 4e 55  m() returns.  NU
1bbe0 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29 20 72  LL but total() r
1bbf0 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55  eturns 0.0..  NU
1bc00 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c  LL is not normal
1bc10 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72 65 73  ly a helpful res
1bc20 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75 6d 20  ult for the sum 
1bc30 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74  of no rows.  but
1bc40 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72   the SQL standar
1bc50 64 20 72 65 71 75 69 72 65 73 20 69 74 20 61 6e  d requires it an
1bc60 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20 53  d most other.  S
1bc70 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  QL database engi
1bc80 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75  nes implement su
1bc90 6d 28 29 20 74 68 61 74 20 77 61 79 20 73 6f 20  m() that way so 
1bca0 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74 20 69  SQLite does it i
1bcb0 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 77 61 79  n the.  same way
1bcc0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20   in order to be 
1bcd0 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20 54 68  compatible.   Th
1bce0 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74  e non-standard t
1bcf0 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a  otal() function.
1bd00 20 20 69 73 20 70 72 6f 76 69 64 65 64 20 61 73    is provided as
1bd10 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61   a convenient wa
1bd20 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64  y to work around
1bd30 20 74 68 69 73 20 64 65 73 69 67 6e 20 70 72 6f   this design pro
1bd40 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20 53 51  blem.  in the SQ
1bd50 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a  L language.</p>.
1bd60 0a 20 20 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c  .  <p>^The resul
1bd70 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73 20  t of total() is 
1bd80 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e  always a floatin
1bd90 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20  g point value.. 
1bda0 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
1bdb0 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74 65  sum() is an inte
1bdc0 67 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c 6c  ger value if all
1bdd0 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73   non-NULL inputs
1bde0 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 20   are integers.. 
1bdf0 20 5e 49 66 20 61 6e 79 20 69 6e 70 75 74 20 74   ^If any input t
1be00 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74 68  o sum() is neith
1be10 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  er an integer or
1be20 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73   a NULL.  then s
1be30 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20 66  um() returns a f
1be40 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
1be50 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69 67 68  lue.  which migh
1be60 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69 6d  t be an approxim
1be70 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72 75  ation to the tru
1be80 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70  e sum.</p>..  <p
1be90 3e 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68 72  >^Sum() will thr
1bea0 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20 6f  ow an "integer o
1beb0 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74 69  verflow" excepti
1bec0 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73  on if all inputs
1bed0 0a 20 20 61 72 65 20 69 6e 74 65 67 65 72 73 20  .  are integers 
1bee0 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e  or NULL.  and an
1bef0 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f   integer overflo
1bf00 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e 79 20  w occurs at any 
1bf10 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74 68 65  point during the
1bf20 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20   computation..  
1bf30 5e 54 6f 74 61 6c 28 29 20 6e 65 76 65 72 20 74  ^Total() never t
1bf40 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72  hrows an integer
1bf50 20 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74   overflow..}.</t
1bf60 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74  cl>.</table>..<t
1bf70 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
1bf80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bf90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bfa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bfb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bfc0 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45 52  ##.Section INSER
1bfd0 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52 54  T insert {INSERT
1bfe0 20 2a 49 4e 53 45 52 54 73 7d 0a 0a 42 75 62 62   *INSERTs}..Bubb
1bff0 6c 65 44 69 61 67 72 61 6d 20 69 6e 73 65 72 74  leDiagram insert
1c000 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
1c010 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20 73 74  <p>The INSERT st
1c020 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e  atement comes in
1c030 20 74 68 72 65 65 20 62 61 73 69 63 20 66 6f 72   three basic for
1c040 6d 73 2e 20 20 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  ms.  .<ul>.<li><
1c050 70 3e 5e 54 68 65 20 66 69 72 73 74 20 66 6f 72  p>^The first for
1c060 6d 20 28 77 69 74 68 20 74 68 65 20 22 56 41 4c  m (with the "VAL
1c070 55 45 53 22 20 6b 65 79 77 6f 72 64 29 20 63 72  UES" keyword) cr
1c080 65 61 74 65 73 20 61 20 73 69 6e 67 6c 65 20 6e  eates a single n
1c090 65 77 20 72 6f 77 20 69 6e 0a 61 6e 20 65 78 69  ew row in.an exi
1c0a0 73 74 69 6e 67 20 74 61 62 6c 65 2e 20 5e 49 66  sting table. ^If
1c0b0 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20   no column-list 
1c0c0 69 73 20 73 70 65 63 69 66 69 65 64 20 74 68 65  is specified the
1c0d0 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  n the number of.
1c0e0 76 61 6c 75 65 73 20 6d 75 73 74 20 62 65 20 74  values must be t
1c0f0 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e  he same as the n
1c100 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1c110 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e   in the table. ^
1c120 49 6e 20 74 68 69 73 20 63 61 73 65 0a 74 68 65  In this case.the
1c130 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75   result of evalu
1c140 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f  ting the left-mo
1c150 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  st expression in
1c160 20 74 68 65 20 56 41 4c 55 45 53 20 6c 69 73 74   the VALUES list
1c170 20 69 73 20 0a 69 6e 73 65 72 74 65 64 20 69 6e   is .inserted in
1c180 74 6f 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  to the left-most
1c190 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e   column of the n
1c1a0 65 77 20 72 6f 77 2c 20 61 6e 64 20 73 6f 20 6f  ew row, and so o
1c1b0 6e 2e 20 5e 49 66 20 61 0a 63 6f 6c 75 6d 6e 2d  n. ^If a.column-
1c1c0 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65  list is specifie
1c1d0 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62  d, then the numb
1c1e0 65 72 20 6f 66 20 76 61 6c 75 65 73 20 6d 75 73  er of values mus
1c1f0 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62  t match the numb
1c200 65 72 20 6f 66 0a 73 70 65 63 69 66 69 65 64 20  er of.specified 
1c210 63 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f  columns. ^Each o
1c220 66 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75  f the named colu
1c230 6d 6e 73 20 6f 66 20 74 68 65 20 6e 65 77 20 72  mns of the new r
1c240 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64 0a  ow is populated.
1c250 77 69 74 68 20 74 68 65 20 72 65 73 75 6c 74 73  with the results
1c260 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74   of evaluating t
1c270 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
1c280 20 56 41 4c 55 45 53 20 65 78 70 72 65 73 73 69   VALUES expressi
1c290 6f 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d  on. ^Table.colum
1c2a0 6e 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61  ns that do not a
1c2b0 70 70 65 61 72 20 69 6e 20 74 68 65 20 63 6f 6c  ppear in the col
1c2c0 75 6d 6e 20 6c 69 73 74 20 61 72 65 20 70 6f 70  umn list are pop
1c2d0 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ulated with the 
1c2e0 64 65 66 61 75 6c 74 0a 63 6f 6c 75 6d 6e 20 76  default.column v
1c2f0 61 6c 75 65 20 28 73 70 65 63 69 66 69 65 64 20  alue (specified 
1c300 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 43  as part of the C
1c310 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
1c320 65 6d 65 6e 74 29 2c 20 6f 72 20 77 69 74 68 20  ement), or with 
1c330 4e 55 4c 4c 20 69 66 0a 6e 6f 20 64 65 66 61 75  NULL if.no defau
1c340 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70 65 63  lt value is spec
1c350 69 66 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54  ified...<li><p>T
1c360 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f  he second form o
1c370 66 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61  f the INSERT sta
1c380 74 65 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20  tement contains 
1c390 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
1c3a0 6e 74 0a 69 6e 73 74 65 61 64 20 6f 66 20 61 20  nt.instead of a 
1c3b0 56 41 4c 55 45 53 20 63 6c 61 75 73 65 2e 20 5e  VALUES clause. ^
1c3c0 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 69  A new entry is i
1c3d0 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
1c3e0 20 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 0a   table for each.
1c3f0 72 6f 77 20 6f 66 20 64 61 74 61 20 72 65 74 75  row of data retu
1c400 72 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e  rned by executin
1c410 67 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  g the SELECT sta
1c420 74 65 6d 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f  tement. ^If a co
1c430 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65  lumn-list is.spe
1c440 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62  cified, the numb
1c450 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1c460 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
1c470 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62  he SELECT must b
1c480 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68  e the same.as th
1c490 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 6d  e number of item
1c4a0 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d  s in the column-
1c4b0 6c 69 73 74 2e 20 5e 4f 74 68 65 72 77 69 73 65  list. ^Otherwise
1c4c0 2c 20 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c  , if no column-l
1c4d0 69 73 74 20 69 73 0a 73 70 65 63 69 66 69 65 64  ist is.specified
1c4e0 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  , the number of 
1c4f0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
1c500 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45 4c  esult of the SEL
1c510 45 43 54 20 6d 75 73 74 20 62 65 20 74 68 65 20  ECT must be the 
1c520 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d 62  same.as the numb
1c530 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1c540 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79   the table. ^Any
1c550 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1c560 74 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 63 6f 6d  t, including.com
1c570 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 20 61 6e  pound SELECTs an
1c580 64 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  d SELECT stateme
1c590 6e 74 73 20 77 69 74 68 20 4f 52 44 45 52 20 42  nts with ORDER B
1c5a0 59 20 61 6e 64 2f 6f 72 20 4c 49 4d 49 54 20 63  Y and/or LIMIT c
1c5b0 6c 61 75 73 65 73 2c 20 0a 6d 61 79 20 62 65 20  lauses, .may be 
1c5c0 75 73 65 64 20 69 6e 20 61 6e 20 49 4e 53 45 52  used in an INSER
1c5d0 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 74  T statement of t
1c5e0 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c 6c 69 3e 3c  his form...<li><
1c5f0 70 3e 54 68 65 20 74 68 69 72 64 20 66 6f 72 6d  p>The third form
1c600 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74   of an INSERT st
1c610 61 74 65 6d 65 6e 74 20 69 73 20 77 69 74 68 20  atement is with 
1c620 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 2e 0a  DEFAULT VALUES..
1c630 5e 28 54 68 65 20 49 4e 53 45 52 54 20 2e 2e 2e  ^(The INSERT ...
1c640 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 20   DEFAULT VALUES 
1c650 73 74 61 74 65 6d 65 6e 74 20 69 6e 73 65 72 74  statement insert
1c660 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72  s a single new r
1c670 6f 77 20 69 6e 74 6f 20 74 68 65 0a 6e 61 6d 65  ow into the.name
1c680 64 20 74 61 62 6c 65 2e 29 5e 20 5e 45 61 63 68  d table.)^ ^Each
1c690 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e   column of the n
1c6a0 65 77 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61  ew row is popula
1c6b0 74 65 64 20 77 69 74 68 20 69 74 73 20 64 65 66  ted with its def
1c6c0 61 75 6c 74 20 76 61 6c 75 65 2c 0a 6f 72 20 77  ault value,.or w
1c6d0 69 74 68 20 61 20 4e 55 4c 4c 20 69 66 20 6e 6f  ith a NULL if no
1c6e0 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69   default value i
1c6f0 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
1c700 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  art of the colum
1c710 6e 0a 64 65 66 69 6e 69 74 69 6f 6e 20 69 6e 20  n.definition in 
1c720 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
1c730 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 2f 75   statement...</u
1c740 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69  l>..<p>^The opti
1c750 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c  onal conflict-cl
1c760 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20  ause allows the 
1c770 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66  specification of
1c780 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a   an alternative.
1c790 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c  constraint confl
1c7a0 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
1c7b0 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20  lgorithm to use 
1c7c0 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20  during this one 
1c7d0 49 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a  INSERT command..
1c7e0 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20  See the section 
1c7f0 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c  titled.[ON CONFL
1c800 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f  ICT] for additio
1c810 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
1c820 0a 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69  .For compatibili
1c830 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2c 20 5e  ty with MySQL, ^
1c840 74 68 65 20 70 61 72 73 65 72 20 61 6c 6c 6f 77  the parser allow
1c850 73 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65  s the use of the
1c860 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20  .single keyword 
1c870 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65  <a href="lang_re
1c880 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c  place.html">REPL
1c890 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61  ACE</a> as an .a
1c8a0 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52 54  lias for "INSERT
1c8b0 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 0a 3c   OR REPLACE"...<
1c8c0 70 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c  p>^(The optional
1c8d0 20 22 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61   "<i>database-na
1c8e0 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20  me</i><b>.</b>" 
1c8f0 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20 3c 69  prefix on the <i
1c900 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a  >table-name</i>.
1c910 69 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74  is support for t
1c920 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20  op-level INSERT 
1c930 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e  statements only.
1c940 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 6e  )^  ^The table n
1c950 61 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e 71 75  ame must be.unqu
1c960 61 6c 69 66 69 65 64 20 66 6f 72 20 49 4e 53 45  alified for INSE
1c970 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  RT statements th
1c980 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20  at occur within 
1c990 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
1c9a0 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69   statements..^Si
1c9b0 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 22 44 45  milarly, the "DE
1c9c0 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f  FAULT VALUES" fo
1c9d0 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54  rm of the INSERT
1c9e0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 75   statement is su
1c9f0 70 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d  pported for.top-
1ca00 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61  level INSERT sta
1ca10 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64  tements only and
1ca20 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52 54 20   not for INSERT 
1ca30 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
1ca40 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a  n.triggers..<p>.
1ca50 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
1ca60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1caa0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f  #####.Section {O
1cab0 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
1cac0 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f  e} conflict {{co
1cad0 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7d 20 7b  nflict clause} {
1cae0 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 42  ON CONFLICT}}..B
1caf0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e  ubbleDiagram con
1cb00 66 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74  flict-clause.</t
1cb10 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43  cl>..<p>The ON C
1cb20 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
1cb30 73 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65  s not a separate
1cb40 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49   SQL command.  I
1cb50 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64  t is a.non-stand
1cb60 61 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20  ard clause that 
1cb70 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61  can appear in ma
1cb80 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d  ny other SQL com
1cb90 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76  mands..It is giv
1cba0 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69  en its own secti
1cbb0 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d  on in this docum
1cbc0 65 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69  ent because it i
1cbd0 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74  s not.part of st
1cbe0 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74  andard SQL and t
1cbf0 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e  herefore might n
1cc00 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c  ot be familiar.<
1cc10 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e  /p>..<p>^The syn
1cc20 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43  tax for the ON C
1cc30 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
1cc40 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65  s as shown above
1cc50 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20   for.the CREATE 
1cc60 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  TABLE command.  
1cc70 5e 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20  ^For the INSERT 
1cc80 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61  and.UPDATE comma
1cc90 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  nds, the keyword
1cca0 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20  s "ON CONFLICT" 
1ccb0 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 20  are replaced by 
1ccc0 22 4f 52 22 20 73 6f 20 74 68 61 74 0a 74 68 65  "OR" so that.the
1ccd0 20 73 79 6e 74 61 78 20 72 65 61 64 73 20 6d 6f   syntax reads mo
1cce0 72 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46  re naturally.  F
1ccf0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74  or example, inst
1cd00 65 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f  ead of."INSERT O
1cd10 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
1cd20 45 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45  E" we have "INSE
1cd30 52 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54  RT OR IGNORE"..T
1cd40 68 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e  he keywords chan
1cd50 67 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69  ge but the meani
1cd60 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65  ng of the clause
1cd70 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74   is the same.eit
1cd80 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70  her way.</p>..<p
1cd90 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  >The ON CONFLICT
1cda0 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20   clause applies 
1cdb0 74 6f 20 55 4e 49 51 55 45 2c 20 4e 4f 54 20 4e  to UNIQUE, NOT N
1cdc0 55 4c 4c 2c 20 61 6e 64 20 43 48 45 43 4b 0a 63  ULL, and CHECK.c
1cdd0 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6e 64 20  onstraints (and 
1cde0 74 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  to PRIMARY KEY c
1cdf0 6f 6e 73 74 72 61 69 6e 74 73 20 77 68 69 63 68  onstraints which
1ce00 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
1ce10 73 20 0a 6f 66 20 74 68 69 73 20 73 65 63 74 69  s .of this secti
1ce20 6f 6e 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  on are the same 
1ce30 74 68 69 6e 67 20 61 73 20 55 4e 49 51 55 45 20  thing as UNIQUE 
1ce40 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 54 68  constraints)..Th
1ce50 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
1ce60 67 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74  gorithm does not
1ce70 0a 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49  .apply to [FOREI
1ce80 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
1ce90 74 73 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66  ts]..There are f
1cea0 69 76 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ive conflict res
1ceb0 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
1cec0 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42  m choices:.ROLLB
1ced0 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c  ACK, ABORT, FAIL
1cee0 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45  , IGNORE, and RE
1cef0 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61  PLACE..^The defa
1cf00 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
1cf10 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
1cf20 6d 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69  m is ABORT.  Thi
1cf30 73 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d  s.is what they m
1cf40 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c  ean:</p>..<dl>.<
1cf50 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f  dt><b>ROLLBACK</
1cf60 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
1cf70 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
1cf80 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
1cf90 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
1cfa0 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65   the ROLLBACK.re
1cfb0 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
1cfc0 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75  hm aborts the cu
1cfd0 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d  rrent SQL statem
1cfe0 65 6e 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49  ent with.an SQLI
1cff0 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72  TE_CONSTRAINT er
1d000 72 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61  ror and rolls ba
1d010 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
1d020 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20  ransaction..^If 
1d030 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
1d040 73 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20  s.active (other 
1d050 74 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64  than the implied
1d060 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61   transaction tha
1d070 74 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20  t is created on 
1d080 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74  every.command) t
1d090 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  hen the ROLLBACK
1d0a0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
1d0b0 72 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20  rithm works the 
1d0c0 73 61 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52  same as the.ABOR
1d0d0 54 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e  T algorithm.</p>
1d0e0 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42  </dd>..<dt><b>AB
1d0f0 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORT</b></dt>.<dd
1d100 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
1d110 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
1d120 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
1d130 63 75 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a  curs, the ABORT.
1d140 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
1d150 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20  ithm aborts the 
1d160 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
1d170 65 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51  ement.with an SQ
1d180 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 54 20 65  LITE_CONSTRAIT e
1d190 72 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20 6f  rror and backs o
1d1a0 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a 6d  ut any changes.m
1d1b0 61 64 65 20 62 79 20 74 68 65 20 63 75 72 72 65  ade by the curre
1d1c0 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  nt SQL statement
1d1d0 3b 20 62 75 74 20 63 68 61 6e 67 65 73 20 63 61  ; but changes ca
1d1e0 75 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53 51  used.by prior SQ
1d1f0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  L statements wit
1d200 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72 61  hin the same tra
1d210 6e 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72 65  nsaction are pre
1d220 73 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a 74  served and the.t
1d230 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69  ransaction remai
1d240 6e 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73 20  ns active..This 
1d250 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  is the default b
1d260 65 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65 20  ehavior and the 
1d270 62 65 68 61 76 69 6f 72 20 70 72 6f 73 63 72 69  behavior proscri
1d280 62 65 64 20 74 68 65 20 53 51 4c 0a 73 74 61 6e  bed the SQL.stan
1d290 64 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  dard.</p></dd>..
1d2a0 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c  <dt><b>FAIL</b><
1d2b0 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68  /dt>.<dd><p> ^Wh
1d2c0 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65  en an applicable
1d2d0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
1d2e0 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
1d2f0 65 20 46 41 49 4c 0a 72 65 73 6f 6c 75 74 69 6f  e FAIL.resolutio
1d300 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72  n algorithm abor
1d310 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 53  ts the current S
1d320 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74  QL statement wit
1d330 68 20 61 6e 0a 53 51 4c 49 54 45 5f 43 4f 4e 53  h an.SQLITE_CONS
1d340 54 52 41 49 4e 54 20 65 72 72 6f 72 2e 20 20 5e  TRAINT error.  ^
1d350 42 75 74 20 74 68 65 20 46 41 49 4c 20 72 65 73  But the FAIL res
1d360 6f 6c 75 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74  olution does not
1d370 0a 62 61 63 6b 20 6f 75 74 20 70 72 69 6f 72 20  .back out prior 
1d380 63 68 61 6e 67 65 73 20 6f 66 20 74 68 65 20 53  changes of the S
1d390 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  QL statement tha
1d3a0 74 20 66 61 69 6c 65 64 20 6e 6f 72 20 64 6f 65  t failed nor doe
1d3b0 73 0a 69 74 20 65 6e 64 20 74 68 65 20 74 72 61  s.it end the tra
1d3c0 6e 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65  nsaction..^For e
1d3d0 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55 50  xample, if an UP
1d3e0 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20 65  DATE.statement e
1d3f0 6e 63 6f 75 6e 74 65 72 65 64 20 61 20 63 6f 6e  ncountered a con
1d400 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
1d410 6e 20 6f 6e 20 74 68 65 20 31 30 30 74 68 20 72  n on the 100th r
1d420 6f 77 20 74 68 61 74 0a 69 74 20 61 74 74 65 6d  ow that.it attem
1d430 70 74 73 20 74 6f 20 75 70 64 61 74 65 2c 20 74  pts to update, t
1d440 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 39 39  hen the first 99
1d450 20 72 6f 77 20 63 68 61 6e 67 65 73 20 61 72 65   row changes are
1d460 20 70 72 65 73 65 72 76 65 64 0a 62 75 74 20 63   preserved.but c
1d470 68 61 6e 67 65 73 20 74 6f 20 72 6f 77 73 20 31  hanges to rows 1
1d480 30 30 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65  00 and beyond ne
1d490 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f  ver occur.</p></
1d4a0 64 64 3e 0a 0a 28 3c 64 74 3e 3c 62 3e 49 47 4e  dd>..(<dt><b>IGN
1d4b0 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORE</b></dt>.<dd
1d4c0 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
1d4d0 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
1d4e0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
1d4f0 63 75 72 73 2c 20 0a 74 68 65 20 49 47 4e 4f 52  curs, .the IGNOR
1d500 45 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  E resolution alg
1d510 6f 72 69 74 68 6d 20 73 6b 69 70 73 20 74 68 65  orithm skips the
1d520 20 6f 6e 65 20 72 6f 77 20 74 68 61 74 20 63 6f   one row that co
1d530 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74  ntains.the const
1d540 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
1d550 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 70 72  and continues pr
1d560 6f 63 65 73 73 69 6e 67 20 73 75 62 73 65 71 75  ocessing subsequ
1d570 65 6e 74 20 72 6f 77 73 0a 6f 66 20 74 68 65 20  ent rows.of the 
1d580 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 73  SQL statement as
1d590 20 69 66 20 6e 6f 74 68 69 6e 67 20 77 65 6e 74   if nothing went
1d5a0 20 77 72 6f 6e 67 2e 0a 4f 74 68 65 72 20 72 6f   wrong..Other ro
1d5b0 77 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  ws before and af
1d5c0 74 65 72 20 74 68 65 20 72 6f 77 20 74 68 61 74  ter the row that
1d5d0 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68 65 20 63  .contained the c
1d5e0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
1d5f0 69 6f 6e 20 61 72 65 20 69 6e 73 65 72 74 65 64  ion are inserted
1d600 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d   or updated.norm
1d610 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f 72 20  ally. ^No error 
1d620 69 73 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  is returned when
1d630 20 74 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e 66   the IGNORE conf
1d640 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a  lict resolution.
1d650 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65  algorithm is use
1d660 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  d.</p></dd>..<dt
1d670 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c  ><b>REPLACE</b><
1d680 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68  /dt>.<dd><p> ^Wh
1d690 65 6e 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  en a UNIQUE cons
1d6a0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1d6b0 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50   occurs, the REP
1d6c0 4c 41 43 45 20 61 6c 67 6f 72 69 74 68 6d 0a 64  LACE algorithm.d
1d6d0 65 6c 65 74 65 73 20 70 72 65 2d 65 78 69 73 74  eletes pre-exist
1d6e0 69 6e 67 20 72 6f 77 73 20 74 68 61 74 20 61 72  ing rows that ar
1d6f0 65 20 63 61 75 73 69 6e 67 20 74 68 65 20 63 6f  e causing the co
1d700 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1d710 6f 6e 0a 70 72 69 6f 72 20 74 6f 20 69 6e 73 65  on.prior to inse
1d720 72 74 69 6e 67 20 6f 72 20 75 70 64 61 74 69 6e  rting or updatin
1d730 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  g the current ro
1d740 77 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61 6e  w and the comman
1d750 64 20 63 6f 6e 74 69 6e 75 65 73 20 0a 65 78 65  d continues .exe
1d760 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e  cuting normally.
1d770 0a 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20  .^If a NOT NULL 
1d780 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
1d790 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
1d7a0 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63   REPLACE conflic
1d7b0 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 72 65 70  t.resolution rep
1d7c0 6c 61 63 65 73 20 74 68 65 20 4e 55 4c 4c 20 76  laces the NULL v
1d7d0 61 6c 75 65 20 77 69 74 68 0a 68 65 20 64 65 66  alue with.he def
1d7e0 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74  ault value for t
1d7f0 68 61 74 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69  hat column, or i
1d800 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73  f the column has
1d810 20 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c 75   no default.valu
1d820 65 2c 20 74 68 65 6e 20 74 68 65 20 41 42 4f 52  e, then the ABOR
1d830 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75  T algorithm is u
1d840 73 65 64 2e 0a 5e 49 66 20 61 20 43 48 45 43 4b  sed..^If a CHECK
1d850 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
1d860 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
1d870 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69  e REPLACE confli
1d880 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c  ct resolution.al
1d890 67 6f 72 69 74 68 6d 20 61 6c 77 61 79 73 20 77  gorithm always w
1d8a0 6f 72 6b 73 20 6c 69 6b 65 20 41 42 4f 52 54 2e  orks like ABORT.
1d8b0 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74  </p>..<p>^When t
1d8c0 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c  he REPLACE confl
1d8d0 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73  ict resolution s
1d8e0 74 72 61 74 65 67 79 20 64 65 6c 65 74 65 73 20  trategy deletes 
1d8f0 72 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  rows in order to
1d900 0a 73 61 74 69 73 66 79 20 61 20 63 6f 6e 73 74  .satisfy a const
1d910 72 61 69 6e 74 2c 20 5b 43 52 45 41 54 45 20 54  raint, [CREATE T
1d920 52 49 47 47 45 52 20 7c 20 64 65 6c 65 74 65 20  RIGGER | delete 
1d930 74 72 69 67 67 65 72 73 5d 20 66 69 72 65 20 69  triggers] fire i
1d940 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b 72  f and only if.[r
1d950 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72  ecursive_trigger
1d960 73 20 70 72 61 67 6d 61 20 7c 20 72 65 63 75 72  s pragma | recur
1d970 73 69 76 65 20 74 72 69 67 67 65 72 73 5d 20 61  sive triggers] a
1d980 72 65 20 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e 0a  re enabled.</p>.
1d990 0a 3c 70 3e 5e 54 68 65 20 5b 73 71 6c 69 74 65  .<p>^The [sqlite
1d9a0 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 20 7c 20  3_update_hook | 
1d9b0 75 70 64 61 74 65 20 68 6f 6f 6b 5d 20 69 73 20  update hook] is 
1d9c0 6e 6f 74 20 69 6e 76 6f 6b 65 64 20 66 6f 72 20  not invoked for 
1d9d0 72 6f 77 73 20 74 68 61 74 0a 61 72 65 20 64 65  rows that.are de
1d9e0 6c 65 74 65 64 20 62 79 20 74 68 65 20 52 45 50  leted by the REP
1d9f0 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  LACE conflict re
1da00 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67  solution strateg
1da10 79 2e 20 20 5e 4e 6f 72 20 64 6f 65 73 0a 52 45  y.  ^Nor does.RE
1da20 50 4c 41 43 45 20 69 6e 63 72 65 6d 65 6e 74 20  PLACE increment 
1da30 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61  the [sqlite3_cha
1da40 6e 67 65 73 20 7c 20 63 68 61 6e 67 65 20 63 6f  nges | change co
1da50 75 6e 74 65 72 5d 2e 0a 54 68 65 20 65 78 63 65  unter]..The exce
1da60 70 74 69 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72  ptional behavior
1da70 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69  s defined in thi
1da80 73 20 70 61 72 61 67 72 61 70 68 20 6d 69 67 68  s paragraph migh
1da90 74 20 63 68 61 6e 67 65 20 0a 69 6e 20 61 20 66  t change .in a f
1daa0 75 74 75 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f  uture release.</
1dab0 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54 68  p>.</dl>..<p>^Th
1dac0 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63  e algorithm spec
1dad0 69 66 69 65 64 20 69 6e 20 74 68 65 20 4f 52 20  ified in the OR 
1dae0 63 6c 61 75 73 65 20 6f 66 20 61 20 49 4e 53 45  clause of a INSE
1daf0 52 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65  RT or UPDATE.ove
1db00 72 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72  rrides any algor
1db10 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69  ithm specified i
1db20 6e 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  n a CREATE TABLE
1db30 2e 0a 5e 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74  ..^If no algorit
1db40 68 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 20  hm is specified 
1db50 61 6e 79 77 68 65 72 65 2c 20 74 68 65 20 41 42  anywhere, the AB
1db60 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ORT algorithm is
1db70 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   used.</p>..<tcl
1db80 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
1db90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dbb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dbc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dbd0 0a 53 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58  .Section REINDEX
1dbe0 20 72 65 69 6e 64 65 78 20 52 45 49 4e 44 45 58   reindex REINDEX
1dbf0 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
1dc00 72 65 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c  reindex-stmt 1.<
1dc10 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  /tcl>..<p>^The R
1dc20 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69  EINDEX command i
1dc30 73 20 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65  s used to delete
1dc40 20 61 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e   and recreate in
1dc50 64 69 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74  dices from scrat
1dc60 63 68 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66  ch..This is usef
1dc70 75 6c 20 77 68 65 6e 20 74 68 65 20 64 65 66 69  ul when the defi
1dc80 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c  nition of a coll
1dc90 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68  ation sequence h
1dca0 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e  as changed..</p>
1dcb0 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49  ..<p>^If the REI
1dcc0 4e 44 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20  NDEX keyword is 
1dcd0 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  not followed by 
1dce0 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75  a collation-sequ
1dcf0 65 6e 63 65 20 6f 72 20 64 61 74 61 62 61 73 65  ence or database
1dd00 20 0a 6f 62 6a 65 63 74 20 69 64 65 6e 74 69 66   .object identif
1dd10 69 65 72 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e  ier, then all in
1dd20 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74  dices in all att
1dd30 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
1dd40 61 72 65 20 72 65 62 75 69 6c 74 2e 0a 0a 3c 70  are rebuilt...<p
1dd50 3e 5e 49 66 20 74 68 65 20 52 45 49 4e 44 45 58  >^If the REINDEX
1dd60 20 6b 65 79 77 6f 72 64 20 69 73 20 66 6f 6c 6c   keyword is foll
1dd70 6f 77 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74  owed by a collat
1dd80 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6e 61 6d  ion-sequence nam
1dd90 65 2c 20 74 68 65 6e 0a 61 6c 6c 20 69 6e 64 69  e, then.all indi
1dda0 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63  ces in all attac
1ddb0 68 65 64 20 64 61 74 61 62 61 73 65 73 20 74 68  hed databases th
1ddc0 61 74 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64  at use the named
1ddd0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
1dde0 6e 63 65 73 0a 61 72 65 20 72 65 63 72 65 61 74  nces.are recreat
1ddf0 65 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20 69 66  ed. ..<p>^Or, if
1de00 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 61 74   the argument at
1de10 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 52 45  tached to the RE
1de20 49 4e 44 45 58 20 69 64 65 6e 74 69 66 69 65 73  INDEX identifies
1de30 20 61 20 73 70 65 63 69 66 69 63 20 0a 64 61 74   a specific .dat
1de40 61 62 61 73 65 20 74 61 62 6c 65 2c 20 74 68 65  abase table, the
1de50 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 61 74  n all indices at
1de60 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 64 61  tached to the da
1de70 74 61 62 61 73 65 20 74 61 62 6c 65 20 61 72 65  tabase table are
1de80 20 72 65 62 75 69 6c 74 2e 20 0a 5e 49 66 20 69   rebuilt. .^If i
1de90 74 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 73  t identifies a s
1dea0 70 65 63 69 66 69 63 20 64 61 74 61 62 61 73 65  pecific database
1deb0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 6a 75 73   index, then jus
1dec0 74 20 74 68 61 74 20 69 6e 64 65 78 20 69 73 20  t that index is 
1ded0 72 65 63 72 65 61 74 65 64 2e 0a 0a 3c 70 3e 5e  recreated...<p>^
1dee0 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61 62 61 73  If no <i>databas
1def0 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 73 70  e-name</i> is sp
1df00 65 63 69 66 69 65 64 20 61 6e 64 20 74 68 65 72  ecified and ther
1df10 65 20 65 78 69 73 74 73 20 62 6f 74 68 20 61 20  e exists both a 
1df20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 61  table or.index a
1df30 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  nd a collation s
1df40 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 73  equence of the s
1df50 70 65 63 69 66 69 65 64 20 6e 61 6d 65 2c 20 53  pecified name, S
1df60 51 4c 69 74 65 20 69 6e 74 65 72 70 72 65 74 73  QLite interprets
1df70 0a 74 68 69 73 20 61 73 20 61 20 72 65 71 75 65  .this as a reque
1df80 73 74 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68  st to rebuild th
1df90 65 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 75  e indices that u
1dfa0 73 65 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c  se the named col
1dfb0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 2e  lation sequence.
1dfc0 0a 54 68 69 73 20 61 6d 62 69 67 75 69 74 79 20  .This ambiguity 
1dfd0 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6d 61  in the syntax ma
1dfe0 79 20 62 65 20 61 76 6f 69 64 65 64 20 62 79 20  y be avoided by 
1dff0 61 6c 77 61 79 73 20 73 70 65 63 69 66 79 69 6e  always specifyin
1e000 67 20 61 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d  g a.<i>database-
1e010 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72 65  name</i> when re
1e020 69 6e 64 65 78 69 6e 67 20 61 20 73 70 65 63 69  indexing a speci
1e030 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  fic table or ind
1e040 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ex...<tcl>.#####
1e050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e090 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
1e0a0 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61  on REPLACE repla
1e0b0 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63  ce REPLACE..</tc
1e0c0 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50 4c  l>..<p>^The REPL
1e0d0 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61  ACE command is a
1e0e0 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
1e0f0 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c 20  "[ON CONFLICT | 
1e100 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43  INSERT OR REPLAC
1e110 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66 20 74  E]".variant of t
1e120 68 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d  he [INSERT] comm
1e130 61 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c 69 61  and.  .This alia
1e140 73 20 69 73 20 70 72 6f 76 69 64 65 64 20 66 6f  s is provided fo
1e150 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r compatibility 
1e160 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61  other SQL databa
1e170 73 65 20 65 6e 67 69 6e 65 73 2e 20 20 53 65 65  se engines.  See
1e180 20 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20 63   the .[INSERT] c
1e190 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61  ommand documenta
1e1a0 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
1e1b0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
1e1c0 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23  </p>  ..<tcl>.##
1e1d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e1e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e1f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e210 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1e220 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c  ction SELECT sel
1e230 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72  ect {SELECT quer
1e240 79 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  y}..BubbleDiagra
1e250 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74 20 31 0a  m select-stmt 1.
1e260 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65  BubbleDiagram se
1e270 6c 65 63 74 2d 63 6f 72 65 0a 42 75 62 62 6c 65  lect-core.Bubble
1e280 44 69 61 67 72 61 6d 20 72 65 73 75 6c 74 2d 63  Diagram result-c
1e290 6f 6c 75 6d 6e 0a 42 75 62 62 6c 65 44 69 61 67  olumn.BubbleDiag
1e2a0 72 61 6d 20 6a 6f 69 6e 2d 73 6f 75 72 63 65 0a  ram join-source.
1e2b0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69  BubbleDiagram si
1e2c0 6e 67 6c 65 2d 73 6f 75 72 63 65 0a 42 75 62 62  ngle-source.Bubb
1e2d0 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 6f  leDiagram join-o
1e2e0 70 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  p.BubbleDiagram 
1e2f0 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 0a  join-constraint.
1e300 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6f 72  BubbleDiagram or
1e310 64 65 72 69 6e 67 2d 74 65 72 6d 0a 42 75 62 62  dering-term.Bubb
1e320 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f 75  leDiagram compou
1e330 6e 64 2d 6f 70 65 72 61 74 6f 72 0a 3c 2f 74 63  nd-operator.</tc
1e340 6c 3e 0a 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45  l>...<p>The SELE
1e350 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
1e360 75 73 65 64 20 74 6f 20 71 75 65 72 79 20 74 68  used to query th
1e370 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
1e380 0a 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c  .result of a SEL
1e390 45 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d  ECT is zero or m
1e3a0 6f 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61  ore rows of data
1e3b0 20 77 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a   where each row.
1e3c0 68 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62  has a fixed numb
1e3d0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20  er of columns.  
1e3e0 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20  ..<p>The SELECT 
1e3f0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65  statement is the
1e400 20 6d 6f 73 74 20 63 6f 6d 70 6c 69 63 61 74 65   most complicate
1e410 64 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 74 68 65  d command in the
1e420 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 54   SQL language..T
1e430 6f 20 6d 61 6b 65 20 74 68 65 20 64 65 73 63 72  o make the descr
1e440 69 70 74 69 6f 6e 20 65 61 73 69 65 72 20 74 6f  iption easier to
1e450 20 66 6f 6c 6c 6f 77 2c 20 73 6f 6d 65 20 6f 66   follow, some of
1e460 20 74 68 65 20 70 61 73 73 61 67 65 73 20 62 65   the passages be
1e470 6c 6f 77 20 64 65 73 63 72 69 62 65 0a 74 68 65  low describe.the
1e480 20 77 61 79 20 74 68 65 20 64 61 74 61 20 72 65   way the data re
1e490 74 75 72 6e 65 64 20 62 79 20 61 20 53 45 4c 45  turned by a SELE
1e4a0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
1e4b0 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20 61 20  determined as a 
1e4c0 73 65 72 69 65 73 20 6f 66 0a 73 74 65 70 73 2e  series of.steps.
1e4d0 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74   It is important
1e4e0 20 74 6f 20 6b 65 65 70 20 69 6e 20 6d 69 6e 64   to keep in mind
1e4f0 20 74 68 61 74 20 74 68 69 73 20 69 73 20 70 75   that this is pu
1e500 72 65 6c 79 20 69 6c 6c 75 73 74 72 61 74 69 76  rely illustrativ
1e510 65 20 2d 0a 69 6e 20 70 72 61 63 74 69 63 65 20  e -.in practice 
1e520 6e 65 69 74 68 65 72 20 53 51 4c 69 74 65 20 6e  neither SQLite n
1e530 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 53 51 4c  or any other SQL
1e540 20 65 6e 67 69 6e 65 20 69 73 20 72 65 71 75 69   engine is requi
1e550 72 65 64 20 74 6f 20 66 6f 6c 6c 6f 77 20 0a 74  red to follow .t
1e560 68 69 73 20 6f 72 20 61 6e 79 20 6f 74 68 65 72  his or any other
1e570 20 73 70 65 63 69 66 69 63 20 70 72 6f 63 65 73   specific proces
1e580 73 2e 0a 0a 3c 68 33 3e 53 69 6d 70 6c 65 20 53  s...<h3>Simple S
1e590 65 6c 65 63 74 20 50 72 6f 63 65 73 73 69 6e 67  elect Processing
1e5a0 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 79  </h3>..<p>The sy
1e5b0 6e 74 61 78 20 66 6f 72 20 61 20 73 69 6d 70 6c  ntax for a simpl
1e5c0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1e5d0 6e 74 20 69 73 20 64 65 70 69 63 74 65 64 20 69  nt is depicted i
1e5e0 6e 20 74 68 65 20 0a 5b 73 65 6c 65 63 74 2d 63  n the .[select-c
1e5f0 6f 72 65 20 73 79 6e 74 61 78 20 64 69 61 67 72  ore syntax diagr
1e600 61 6d 5d 2e 20 47 65 6e 65 72 61 74 69 6e 67 20  am]. Generating 
1e610 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  the results of a
1e620 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a 73   simple SELECT.s
1e630 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 73  tatement is pres
1e640 65 6e 74 65 64 20 61 73 20 61 20 66 6f 75 72 20  ented as a four 
1e650 73 74 65 70 20 70 72 6f 63 65 73 73 20 69 6e 20  step process in 
1e660 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  the description 
1e670 62 65 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c  below:..<ol>.  <
1e680 6c 69 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61  li> <p>[FROM cla
1e690 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  use] processing:
1e6a0 20 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20   The input data 
1e6b0 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53  for the simple S
1e6c0 45 4c 45 43 54 20 69 73 0a 20 20 20 20 20 20 20  ELECT is.       
1e6d0 64 65 74 65 72 6d 69 6e 65 64 2e 20 54 68 65 20  determined. The 
1e6e0 69 6e 70 75 74 20 64 61 74 61 20 69 73 20 65 69  input data is ei
1e6f0 74 68 65 72 20 69 6d 70 6c 69 63 69 74 6c 79 20  ther implicitly 
1e700 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 77 69 74  a single row wit
1e710 68 20 30 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d  h 0.       colum
1e720 6e 73 20 28 69 66 20 74 68 65 72 65 20 69 73 20  ns (if there is 
1e730 6e 6f 20 46 52 4f 4d 20 63 6c 61 75 73 65 29 20  no FROM clause) 
1e740 6f 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  or is determined
1e750 20 62 79 20 61 6e 61 6c 79 7a 69 6e 67 20 74 68   by analyzing th
1e760 65 0a 20 20 20 20 20 20 20 5b 6a 6f 69 6e 2d 73  e.       [join-s
1e770 6f 75 72 63 65 20 73 79 6e 74 61 78 20 64 69 61  ource syntax dia
1e780 67 72 61 6d 7c 6a 6f 69 6e 2d 73 6f 75 72 63 65  gram|join-source
1e790 5d 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  ] specification 
1e7a0 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 0a 20 20  that follows .  
1e7b0 20 20 20 20 20 61 6e 20 65 78 70 6c 69 63 69 74       an explicit
1e7c0 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 0a 20 20   FROM clause..  
1e7d0 3c 6c 69 3e 20 3c 70 3e 5b 57 48 45 52 45 20 63  <li> <p>[WHERE c
1e7e0 6c 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e  lause] processin
1e7f0 67 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61 74  g: The input dat
1e800 61 20 69 73 20 66 69 6c 74 65 72 65 64 20 75 73  a is filtered us
1e810 69 6e 67 20 74 68 65 20 57 48 45 52 45 0a 20 20  ing the WHERE.  
1e820 20 20 20 20 20 63 6c 61 75 73 65 20 65 78 70 72       clause expr
1e830 65 73 73 69 6f 6e 2e 20 20 0a 20 20 3c 6c 69 3e  ession.  .  <li>
1e840 20 3c 70 3e 5b 47 52 4f 55 50 20 42 59 7c 47 52   <p>[GROUP BY|GR
1e850 4f 55 50 20 42 59 2c 20 48 41 56 49 4e 47 20 61  OUP BY, HAVING a
1e860 6e 64 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e  nd result-column
1e870 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 70 72 6f   expression] pro
1e880 63 65 73 73 69 6e 67 3a 20 0a 20 20 20 20 20 20  cessing: .      
1e890 20 54 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   The set of resu
1e8a0 6c 74 20 72 6f 77 73 20 69 73 20 63 6f 6d 70 75  lt rows is compu
1e8b0 74 65 64 20 62 79 20 61 67 67 72 65 67 61 74 69  ted by aggregati
1e8c0 6e 67 20 74 68 65 20 64 61 74 61 20 61 63 63 6f  ng the data acco
1e8d0 72 64 69 6e 67 20 74 6f 0a 20 20 20 20 20 20 20  rding to.       
1e8e0 61 6e 79 20 47 52 4f 55 50 20 42 59 20 63 6c 61  any GROUP BY cla
1e8f0 75 73 65 20 61 6e 64 20 63 61 6c 63 75 6c 61 74  use and calculat
1e900 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2d 73  ing the result-s
1e910 65 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 66  et expressions f
1e920 6f 72 20 74 68 65 0a 20 20 20 20 20 20 20 72 6f  or the.       ro
1e930 77 73 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72  ws of the filter
1e940 65 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74  ed input dataset
1e950 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 44  .  .  <li> <p>[D
1e960 49 53 54 49 4e 43 54 7c 44 49 53 54 49 4e 43 54  ISTINCT|DISTINCT
1e970 2f 41 4c 4c 20 6b 65 79 77 6f 72 64 5d 20 70 72  /ALL keyword] pr
1e980 6f 63 65 73 73 69 6e 67 3a 20 49 66 20 74 68 65  ocessing: If the
1e990 20 71 75 65 72 79 20 69 73 20 61 20 22 53 45 4c   query is a "SEL
1e9a0 45 43 54 0a 20 20 20 20 20 20 20 44 49 53 54 49  ECT.       DISTI
1e9b0 4e 43 54 22 20 71 75 65 72 79 2c 20 64 75 70 6c  NCT" query, dupl
1e9c0 69 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72  icate rows are r
1e9d0 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20  emoved from the 
1e9e0 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
1e9f0 77 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68  ws..</ol>..<p>Th
1ea00 65 72 65 20 61 72 65 20 74 77 6f 20 74 79 70 65  ere are two type
1ea10 73 20 6f 66 20 73 69 6d 70 6c 65 20 53 45 4c 45  s of simple SELE
1ea20 43 54 20 73 74 61 74 65 6d 65 6e 74 20 2d 20 61  CT statement - a
1ea30 67 67 72 65 67 61 74 65 20 61 6e 64 20 0a 6e 6f  ggregate and .no
1ea40 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n-aggregate quer
1ea50 69 65 73 2e 20 5e 41 20 73 69 6d 70 6c 65 20 53  ies. ^A simple S
1ea60 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1ea70 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  is an aggregate 
1ea80 71 75 65 72 79 20 69 66 0a 69 74 20 63 6f 6e 74  query if.it cont
1ea90 61 69 6e 73 20 65 69 74 68 65 72 20 61 20 47 52  ains either a GR
1eaa0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 6f 72  OUP BY clause or
1eab0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   one or more agg
1eac0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1ead0 0a 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73  .in the result-s
1eae0 65 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  et. ^Otherwise, 
1eaf0 69 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  if a simple SELE
1eb00 43 54 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 61  CT contains no a
1eb10 67 67 72 65 67 61 74 65 0a 66 75 6e 63 74 69 6f  ggregate.functio
1eb20 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59  ns or a GROUP BY
1eb30 20 63 6c 61 75 73 65 2c 20 69 74 20 69 73 20 61   clause, it is a
1eb40 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71   non-aggregate q
1eb50 75 65 72 79 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e 20  uery...<p><b>1. 
1eb60 44 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 6f 66  Determination of
1eb70 20 69 6e 70 75 74 20 64 61 74 61 20 28 46 52 4f   input data (FRO
1eb80 4d 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73  M clause process
1eb90 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68  ing).</b>.<tcl>h
1eba0 64 5f 66 72 61 67 6d 65 6e 74 20 66 72 6f 6d 63  d_fragment fromc
1ebb0 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c  lause</tcl>.<tcl
1ebc0 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 46 52  >hd_keywords {FR
1ebd0 4f 4d 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e  OM clause}</tcl>
1ebe0 0a 0a 3c 70 3e 54 68 65 20 69 6e 70 75 74 20 64  ..<p>The input d
1ebf0 61 74 61 20 75 73 65 64 20 62 79 20 61 20 73 69  ata used by a si
1ec00 6d 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65 72  mple SELECT quer
1ec10 79 20 69 73 20 61 20 73 65 74 20 6f 66 20 3c 69  y is a set of <i
1ec20 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 0a 65 61 63  >N</i> rows .eac
1ec30 68 20 3c 69 3e 4d 3c 2f 69 3e 20 63 6f 6c 75 6d  h <i>M</i> colum
1ec40 6e 73 20 77 69 64 65 2e 0a 0a 3c 70 3e 5e 28 49  ns wide...<p>^(I
1ec50 66 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  f the FROM claus
1ec60 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  e is omitted fro
1ec70 6d 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  m a simple SELEC
1ec80 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  T statement, the
1ec90 6e 20 74 68 65 20 0a 69 6e 70 75 74 20 64 61 74  n the .input dat
1eca0 61 20 69 73 20 69 6d 70 6c 69 63 69 74 6c 79 20  a is implicitly 
1ecb0 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 7a 65 72  a single row zer
1ecc0 6f 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 29 5e  o columns wide)^
1ecd0 20 28 69 2e 65 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d   (i.e. <i>N</i>=
1ece0 31 20 61 6e 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30  1 and.<i>M</i>=0
1ecf0 29 2e 0a 0a 3c 70 3e 49 66 20 61 20 46 52 4f 4d  )...<p>If a FROM
1ed00 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
1ed10 66 69 65 64 2c 20 74 68 65 20 64 61 74 61 20 6f  fied, the data o
1ed20 6e 20 77 68 69 63 68 20 61 20 73 69 6d 70 6c 65  n which a simple
1ed30 20 53 45 4c 45 43 54 20 71 75 65 72 79 0a 6f 70   SELECT query.op
1ed40 65 72 61 74 65 73 20 63 6f 6d 65 73 20 66 72 6f  erates comes fro
1ed50 6d 20 74 68 65 20 6f 6e 65 20 6f 72 20 6d 6f 72  m the one or mor
1ed60 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  e tables or subq
1ed70 75 65 72 69 65 73 20 28 53 45 4c 45 43 54 20 73  ueries (SELECT s
1ed80 74 61 74 65 6d 65 6e 74 73 0a 69 6e 20 70 61 72  tatements.in par
1ed90 65 6e 74 68 65 73 69 73 29 20 73 70 65 63 69 66  enthesis) specif
1eda0 69 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ied following th
1edb0 65 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20  e FROM keyword. 
1edc0 5e 41 20 73 75 62 2d 73 65 6c 65 63 74 20 73 70  ^A sub-select sp
1edd0 65 63 69 66 69 65 64 0a 69 6e 20 74 68 65 20 6a  ecified.in the j
1ede0 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c 6f  oin-source follo
1edf0 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 63 6c  wing the FROM cl
1ee00 61 75 73 65 20 69 6e 20 61 20 73 69 6d 70 6c 65  ause in a simple
1ee10 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1ee20 74 20 69 73 0a 68 61 6e 64 6c 65 64 20 61 73 20  t is.handled as 
1ee30 69 66 20 69 74 20 77 61 73 20 61 20 74 61 62 6c  if it was a tabl
1ee40 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
1ee50 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62   data returned b
1ee60 79 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 0a  y executing the.
1ee70 73 75 62 2d 73 65 6c 65 63 74 20 73 74 61 74 65  sub-select state
1ee80 6d 65 6e 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75  ment. ^Each colu
1ee90 6d 6e 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65  mn of the sub-se
1eea0 6c 65 63 74 20 64 61 74 61 73 65 74 20 69 6e 68  lect dataset inh
1eeb0 65 72 69 74 73 20 74 68 65 0a 5b 63 6f 6c 6c 61  erits the.[colla
1eec0 74 69 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73  tion|collation s
1eed0 65 71 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61 66  equence] and [af
1eee0 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63  finity] of the c
1eef0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70  orresponding exp
1ef00 72 65 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20 73  ression.in the s
1ef10 75 62 2d 73 65 6c 65 63 74 20 73 74 61 74 65 6d  ub-select statem
1ef20 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  ent...<p>^If the
1ef30 72 65 20 69 73 20 6f 6e 6c 79 20 61 20 73 69 6e  re is only a sin
1ef40 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65  gle table in the
1ef50 20 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c   join-source fol
1ef60 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 0a  lowing the FROM.
1ef70 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
1ef80 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64   input data used
1ef90 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
1efa0 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20  tatement is the 
1efb0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 0a  contents of the.
1efc0 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49 66  named table. ^If
1efd0 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74   there is more t
1efe0 68 61 6e 20 6f 6e 65 20 74 61 62 6c 65 20 73 70  han one table sp
1eff0 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
1f000 6f 66 20 74 68 65 0a 6a 6f 69 6e 2d 73 6f 75 72  of the.join-sour
1f010 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ce following the
1f020 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2c 20 74   FROM keyword, t
1f030 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  hen the contents
1f040 20 6f 66 20 65 61 63 68 20 6e 61 6d 65 64 20 74   of each named t
1f050 61 62 6c 65 0a 61 72 65 20 6a 6f 69 6e 65 64 20  able.are joined 
1f060 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61  into a single da
1f070 74 61 73 65 74 20 66 6f 72 20 74 68 65 20 73 69  taset for the si
1f080 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
1f090 65 6d 65 6e 74 20 74 6f 20 6f 70 65 72 61 74 65  ement to operate
1f0a0 20 6f 6e 2e 0a 45 78 61 63 74 6c 79 20 68 6f 77   on..Exactly how
1f0b0 20 74 68 65 20 64 61 74 61 20 69 73 20 63 6f 6d   the data is com
1f0c0 62 69 6e 65 64 20 64 65 70 65 6e 64 73 20 6f 6e  bined depends on
1f0d0 20 74 68 65 20 73 70 65 63 69 66 69 63 20 5b 6a   the specific [j
1f0e0 6f 69 6e 2d 6f 70 5d 20 61 6e 64 0a 5b 6a 6f 69  oin-op] and.[joi
1f0f0 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 20 75 73  n-constraint] us
1f100 65 64 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 68  ed to connect th
1f110 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  e tables or subq
1f120 75 65 72 69 65 73 20 74 6f 67 65 74 68 65 72 2e  ueries together.
1f130 0a 0a 3c 70 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69  ..<p>All joins i
1f140 6e 20 53 51 4c 69 74 65 20 61 72 65 20 62 61 73  n SQLite are bas
1f150 65 64 20 6f 6e 20 74 68 65 20 63 61 72 74 65 73  ed on the cartes
1f160 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74  ian product of t
1f170 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68  he left and.righ
1f180 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e  t-hand datasets.
1f190 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66   ^The columns of
1f1a0 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
1f1b0 72 6f 64 75 63 74 20 64 61 74 61 73 65 74 20 61  roduct dataset a
1f1c0 72 65 2c 20 69 6e 20 0a 6f 72 64 65 72 2c 20 61  re, in .order, a
1f1d0 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ll the columns o
1f1e0 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  f the left-hand 
1f1f0 64 61 74 61 73 65 74 20 66 6f 6c 6c 6f 77 65 64  dataset followed
1f200 20 62 79 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75   by all the colu
1f210 6d 6e 73 0a 6f 66 20 74 68 65 20 72 69 67 68 74  mns.of the right
1f220 2d 68 61 6e 64 20 64 61 74 61 73 65 74 2e 20 5e  -hand dataset. ^
1f230 54 68 65 72 65 20 69 73 20 61 20 72 6f 77 20 69  There is a row i
1f240 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  n the cartesian 
1f250 70 72 6f 64 75 63 74 20 64 61 74 61 73 65 74 0a  product dataset.
1f260 66 6f 72 6d 65 64 20 62 79 20 63 6f 6d 62 69 6e  formed by combin
1f270 69 6e 67 20 65 61 63 68 20 75 6e 69 71 75 65 20  ing each unique 
1f280 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 61  combination of a
1f290 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6c 65   row from the le
1f2a0 66 74 2d 68 61 6e 64 20 0a 61 6e 64 20 72 69 67  ft-hand .and rig
1f2b0 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73  ht-hand datasets
1f2c0 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72  . ^(In other wor
1f2d0 64 73 2c 20 69 66 20 74 68 65 20 6c 65 66 74 2d  ds, if the left-
1f2e0 68 61 6e 64 20 64 61 74 61 73 65 74 20 63 6f 6e  hand dataset con
1f2f0 73 69 73 74 73 20 6f 66 0a 3c 69 3e 4e 6c 68 73  sists of.<i>Nlhs
1f300 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20 3c 69 3e  </i> rows of <i>
1f310 4d 6c 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73  Mlhs</i> columns
1f320 2c 20 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d  , and the right-
1f330 68 61 6e 64 20 64 61 74 61 73 65 74 20 6f 66 0a  hand dataset of.
1f340 3c 69 3e 4e 72 68 73 3c 2f 69 3e 20 72 6f 77 73  <i>Nrhs</i> rows
1f350 20 6f 66 20 3c 69 3e 4d 72 68 73 3c 2f 69 3e 20   of <i>Mrhs</i> 
1f360 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68  columns, then th
1f370 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
1f380 75 63 74 20 69 73 20 61 0a 64 61 74 61 73 65 74  uct is a.dataset
1f390 20 6f 66 20 3c 69 3e 4e 6c 68 73 2e 4e 72 68 73   of <i>Nlhs.Nrhs
1f3a0 3c 2f 69 3e 20 72 6f 77 73 2c 20 65 61 63 68 20  </i> rows, each 
1f3b0 63 6f 6e 74 61 69 6e 69 6e 67 20 3c 69 3e 4d 6c  containing <i>Ml
1f3c0 68 73 2b 4d 72 68 73 3c 2f 69 3e 20 63 6f 6c 75  hs+Mrhs</i> colu
1f3d0 6d 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74  mns.)^..<p>^If t
1f3e0 68 65 20 6a 6f 69 6e 2d 6f 70 20 69 73 20 22 43  he join-op is "C
1f3f0 52 4f 53 53 20 4a 4f 49 4e 22 2c 20 22 49 4e 4e  ROSS JOIN", "INN
1f400 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
1f410 20 6f 72 20 61 20 63 6f 6d 6d 61 0a 28 22 2c 22   or a comma.(","
1f420 29 20 61 6e 64 20 74 68 65 72 65 20 69 73 20 6e  ) and there is n
1f430 6f 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  o ON or USING cl
1f440 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 72  ause, then the r
1f450 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6a 6f 69  esult of the joi
1f460 6e 20 69 73 0a 73 69 6d 70 6c 79 20 74 68 65 20  n is.simply the 
1f470 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
1f480 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e  t of the left an
1f490 64 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  d right-hand dat
1f4a0 61 73 65 74 73 2e 20 0a 5e 54 68 65 72 65 20 69  asets. .^There i
1f4b0 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20  s no difference 
1f4c0 62 65 74 77 65 65 6e 20 74 68 65 20 22 49 4e 4e  between the "INN
1f4d0 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
1f4e0 20 61 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70   and "," join.op
1f4f0 65 72 61 74 6f 72 73 2e 20 5e 28 54 68 65 20 22  erators. ^(The "
1f500 43 52 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e  CROSS JOIN" join
1f510 20 6f 70 65 72 61 74 6f 72 20 70 72 6f 64 75 63   operator produc
1f520 65 73 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  es the same data
1f530 20 61 73 20 74 68 65 20 0a 22 49 4e 4e 45 52 20   as the ."INNER 
1f540 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e  JOIN", "JOIN" an
1f550 64 20 22 2c 22 20 6f 70 65 72 61 74 6f 72 73 29  d "," operators)
1f560 5e 2c 20 62 75 74 20 69 73 20 0a 3c 61 20 68 72  ^, but is .<a hr
1f570 65 66 3d 6f 70 74 6f 76 65 72 76 69 65 77 2e 68  ef=optoverview.h
1f580 74 6d 6c 23 6d 61 6e 63 74 72 6c 3e 68 61 6e 64  tml#manctrl>hand
1f590 6c 65 64 20 73 6c 69 67 68 74 6c 79 20 64 69 66  led slightly dif
1f5a0 66 65 72 65 6e 74 6c 79 20 62 79 20 74 68 65 20  ferently by the 
1f5b0 71 75 65 72 79 0a 6f 70 74 69 6d 69 7a 65 72 3c  query.optimizer<
1f5c0 2f 61 3e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  /a>. Otherwise, 
1f5d0 69 74 20 69 73 20 74 68 65 20 63 61 72 74 65 73  it is the cartes
1f5e0 69 61 6e 20 70 72 6f 64 75 63 74 20 6d 6f 64 69  ian product modi
1f5f0 66 69 65 64 20 0a 61 63 63 6f 72 64 69 6e 67 20  fied .according 
1f600 74 6f 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f  to one or more o
1f610 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1f620 62 75 6c 6c 65 74 20 70 6f 69 6e 74 73 3a 20 0a  bullet points: .
1f630 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  .<ul>.  <li> <p>
1f640 5e 28 49 66 20 74 68 65 72 65 20 69 73 20 61 6e  ^(If there is an
1f650 20 4f 4e 20 63 6c 61 75 73 65 20 73 70 65 63 69   ON clause speci
1f660 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 4f  fied, then the O
1f670 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 0a  N expression is.
1f680 20 20 20 20 20 20 20 65 76 61 6c 75 61 74 65 64         evaluated
1f690 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
1f6a0 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
1f6b0 72 6f 64 75 63 74 20 61 73 20 61 20 0a 20 20 20  roduct as a .   
1f6c0 20 20 20 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70      [boolean exp
1f6d0 72 65 73 73 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f  ression]. All ro
1f6e0 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
1f6f0 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c   expression eval
1f700 75 61 74 65 73 20 74 6f 20 0a 20 20 20 20 20 20  uates to .      
1f710 20 66 61 6c 73 65 20 61 72 65 20 65 78 63 6c 75   false are exclu
1f720 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ded from the dat
1f730 61 73 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20  aset.)^..  <li> 
1f740 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20  <p>^If there is 
1f750 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 73  a USING clause s
1f760 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
1f770 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e   of the join-con
1f780 73 74 72 61 69 6e 74 2c 0a 20 20 20 20 20 20 20  straint,.       
1f790 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65  then each of the
1f7a0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 73 70   column names sp
1f7b0 65 63 69 66 69 65 64 20 6d 75 73 74 20 65 78 69  ecified must exi
1f7c0 73 74 20 69 6e 20 74 68 65 20 64 61 74 61 73 65  st in the datase
1f7d0 74 73 20 74 6f 20 0a 20 20 20 20 20 20 20 62 6f  ts to .       bo
1f7e0 74 68 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  th the left and 
1f7f0 72 69 67 68 74 20 6f 66 20 74 68 65 20 6a 6f 69  right of the joi
1f800 6e 2d 6f 70 2e 20 5e 28 46 6f 72 20 65 61 63 68  n-op. ^(For each
1f810 20 70 61 69 72 20 6f 66 20 6e 61 6d 65 73 61 6b   pair of namesak
1f820 65 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73  e.       columns
1f830 2c 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  , the expression
1f840 20 22 6c 68 73 2e 58 20 3d 20 72 68 73 2e 58 22   "lhs.X = rhs.X"
1f850 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f   is evaluated fo
1f860 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 20 20  r each row of.  
1f870 20 20 20 20 20 74 68 65 20 63 61 72 74 65 73 69       the cartesi
1f880 61 6e 20 70 72 6f 64 75 63 74 20 61 73 20 61 20  an product as a 
1f890 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
1f8a0 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20 66  ion]. All rows f
1f8b0 6f 72 20 77 68 69 63 68 20 6f 6e 65 0a 20 20 20  or which one.   
1f8c0 20 20 20 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74      or more of t
1f8d0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65  he expressions e
1f8e0 76 61 6c 75 61 74 65 73 20 74 6f 20 66 61 6c 73  valuates to fals
1f8f0 65 20 61 72 65 20 65 78 63 6c 75 64 65 64 20 66  e are excluded f
1f900 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 20 72  rom the.       r
1f910 65 73 75 6c 74 20 73 65 74 2e 29 5e 20 5e 57 68  esult set.)^ ^Wh
1f920 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 76 61 6c  en comparing val
1f930 75 65 73 20 61 73 20 61 20 72 65 73 75 6c 74 20  ues as a result 
1f940 6f 66 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73  of a USING claus
1f950 65 2c 20 74 68 65 0a 20 20 20 20 20 20 20 6e 6f  e, the.       no
1f960 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 68  rmal rules for h
1f970 61 6e 64 6c 69 6e 67 20 61 66 66 69 6e 69 74 69  andling affiniti
1f980 65 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  es, collation se
1f990 71 75 65 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c  quences and NULL
1f9a0 0a 20 20 20 20 20 20 20 76 61 6c 75 65 73 20 69  .       values i
1f9b0 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 61 70  n comparisons ap
1f9c0 70 6c 79 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e  ply. ^The column
1f9d0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65   from the datase
1f9e0 74 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20  t on the.       
1f9f0 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f  left-hand side o
1fa00 66 20 74 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61  f the join opera
1fa10 74 6f 72 20 69 73 20 63 6f 6e 73 69 64 65 72 65  tor is considere
1fa20 64 20 74 6f 20 62 65 20 6f 6e 20 74 68 65 20 6c  d to be on the l
1fa30 65 66 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20  eft-hand.       
1fa40 73 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6d 70  side of the comp
1fa50 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20  arison operator 
1fa60 28 3d 29 20 66 6f 72 20 74 68 65 20 70 75 72 70  (=) for the purp
1fa70 6f 73 65 73 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  oses of collatio
1fa80 6e 20 0a 20 20 20 20 20 20 20 73 65 71 75 65 6e  n .       sequen
1fa90 63 65 20 61 6e 64 20 61 66 66 69 6e 69 74 79 20  ce and affinity 
1faa0 70 72 65 63 65 64 65 6e 63 65 2e 0a 0a 20 20 20  precedence...   
1fab0 20 20 20 20 3c 70 3e 5e 46 6f 72 20 65 61 63 68      <p>^For each
1fac0 20 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73   pair of columns
1fad0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
1fae0 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74   USING clause, t
1faf0 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  he column.      
1fb00 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d   from the right-
1fb10 68 61 6e 64 20 64 61 74 61 73 65 74 20 69 73 20  hand dataset is 
1fb20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
1fb30 20 6a 6f 69 6e 65 64 20 64 61 74 61 73 65 74 2e   joined dataset.
1fb40 20 5e 54 68 69 73 20 0a 20 20 20 20 20 20 20 69   ^This .       i
1fb50 73 20 74 68 65 20 6f 6e 6c 79 20 64 69 66 66 65  s the only diffe
1fb60 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20  rence between a 
1fb70 55 53 49 4e 47 20 63 6c 61 75 73 65 20 61 6e 64  USING clause and
1fb80 20 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20   its equivalent 
1fb90 4f 4e 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 72  ON.       constr
1fba0 61 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  aint...  <li> <p
1fbb0 3e 5e 28 49 66 20 74 68 65 20 4e 41 54 55 52 41  >^(If the NATURA
1fbc0 4c 20 6b 65 79 77 6f 72 64 20 69 73 20 61 64 64  L keyword is add
1fbd0 65 64 20 74 6f 20 61 6e 79 20 6f 66 20 74 68 65  ed to any of the
1fbe0 20 6a 6f 69 6e 2d 6f 70 73 2c 20 74 68 65 6e 20   join-ops, then 
1fbf0 61 6e 0a 20 20 20 20 20 20 20 69 6d 70 6c 69 63  an.       implic
1fc00 69 74 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  it USING clause 
1fc10 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  is added to the 
1fc20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 73  join-constraints
1fc30 2e 20 54 68 65 20 69 6d 70 6c 69 63 69 74 0a 20  . The implicit. 
1fc40 20 20 20 20 20 20 55 53 49 4e 47 20 63 6c 61 75        USING clau
1fc50 73 65 20 63 6f 6e 74 61 69 6e 73 20 65 61 63 68  se contains each
1fc60 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   of the column n
1fc70 61 6d 65 73 20 74 68 61 74 20 61 70 70 65 61 72  ames that appear
1fc80 20 69 6e 20 62 6f 74 68 0a 20 20 20 20 20 20 20   in both.       
1fc90 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
1fca0 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 64 61  ht-hand input da
1fcb0 74 61 73 65 74 73 2e 29 5e 20 5e 49 66 20 74 68  tasets.)^ ^If th
1fcc0 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
1fcd0 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 69 6e 70  -hand.       inp
1fce0 75 74 20 64 61 74 61 73 65 74 73 20 66 65 61 74  ut datasets feat
1fcf0 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20 63 6f  ure no common co
1fd00 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 74 68 65 6e  lumn names, then
1fd10 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79   the NATURAL key
1fd20 77 6f 72 64 0a 20 20 20 20 20 20 20 68 61 73 20  word.       has 
1fd30 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65  no effect on the
1fd40 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
1fd50 6a 6f 69 6e 2e 20 5e 41 20 55 53 49 4e 47 20 6f  join. ^A USING o
1fd60 72 20 4f 4e 20 63 6c 61 75 73 65 20 6d 61 79 0a  r ON clause may.
1fd70 20 20 20 20 20 20 20 6e 6f 74 20 62 65 20 61 64         not be ad
1fd80 64 65 64 20 74 6f 20 61 20 6a 6f 69 6e 20 74 68  ded to a join th
1fd90 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
1fda0 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64   NATURAL keyword
1fdb0 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49  ...  <li> <p>^(I
1fdc0 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 20 69 73  f the join-op is
1fdd0 20 61 20 22 4c 45 46 54 20 4a 4f 49 4e 22 20 6f   a "LEFT JOIN" o
1fde0 72 20 22 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f  r "LEFT OUTER JO
1fdf0 49 4e 22 2c 20 74 68 65 6e 20 61 66 74 65 72 0a  IN", then after.
1fe00 20 20 20 20 20 20 20 74 68 65 20 4f 4e 20 6f 72         the ON or
1fe10 20 55 53 49 4e 47 20 66 69 6c 74 65 72 69 6e 67   USING filtering
1fe20 20 63 6c 61 75 73 65 73 20 68 61 76 65 20 62 65   clauses have be
1fe30 65 6e 20 61 70 70 6c 69 65 64 2c 20 61 6e 20 65  en applied, an e
1fe40 78 74 72 61 20 72 6f 77 20 69 73 20 0a 20 20 20  xtra row is .   
1fe50 20 20 20 20 61 64 64 65 64 20 74 6f 20 74 68 65      added to the
1fe60 20 6f 75 74 70 75 74 20 66 6f 72 20 65 61 63 68   output for each
1fe70 20 72 6f 77 20 69 6e 20 74 68 65 20 6f 72 69 67   row in the orig
1fe80 69 6e 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20 69  inal left-hand i
1fe90 6e 70 75 74 20 0a 20 20 20 20 20 20 20 64 61 74  nput .       dat
1fea0 61 73 65 74 20 74 68 61 74 20 63 6f 72 72 65 73  aset that corres
1feb0 70 6f 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77 73  ponds to no rows
1fec0 20 61 74 20 61 6c 6c 20 69 6e 20 74 68 65 20 63   at all in the c
1fed0 6f 6d 70 6f 73 69 74 65 0a 20 20 20 20 20 20 20  omposite.       
1fee0 64 61 74 61 73 65 74 20 28 69 66 20 61 6e 79 29  dataset (if any)
1fef0 2e 29 5e 20 5e 54 68 65 20 61 64 64 65 64 20 72  .)^ ^The added r
1ff00 6f 77 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c  ows contain NULL
1ff10 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63   values in the c
1ff20 6f 6c 75 6d 6e 73 0a 20 20 20 20 20 20 20 74 68  olumns.       th
1ff30 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c  at would normall
1ff40 79 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73  y contain values
1ff50 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65   copied from the
1ff60 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75   right-hand inpu
1ff70 74 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74  t.       dataset
1ff80 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28  .  .</ul>..<p>^(
1ff90 57 68 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20 74  When more than t
1ffa0 77 6f 20 74 61 62 6c 65 73 20 61 72 65 20 6a 6f  wo tables are jo
1ffb0 69 6e 65 64 20 74 6f 67 65 74 68 65 72 20 61 73  ined together as
1ffc0 20 70 61 72 74 20 6f 66 20 61 20 46 52 4f 4d 20   part of a FROM 
1ffd0 63 6c 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69 6e  clause,.the join
1ffe0 20 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20   operations are 
1fff0 70 72 6f 63 65 73 73 65 64 20 69 6e 20 6f 72 64  processed in ord
20000 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  er from left to 
20010 72 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20  right. In other 
20020 0a 77 6f 72 64 73 2c 20 74 68 65 20 46 52 4f 4d  .words, the FROM
20030 20 63 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e 2d   clause (A join-
20040 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32  op-1 B join-op-2
20050 20 43 29 20 69 73 20 63 6f 6d 70 75 74 65 64 20   C) is computed 
20060 61 73 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d  as .((A join-op-
20070 31 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43  1 B) join-op-2 C
20080 29 2e 29 5e 0a 20 20 20 20 20 20 20 0a 0a 3c 70  ).)^.       ..<p
20090 3e 3c 62 3e 32 2e 20 57 48 45 52 45 20 63 6c 61  ><b>2. WHERE cla
200a0 75 73 65 20 66 69 6c 74 65 72 69 6e 67 2e 3c 2f  use filtering.</
200b0 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  b>.<tcl>hd_fragm
200c0 65 6e 74 20 77 68 65 72 65 63 6c 61 75 73 65 3c  ent whereclause<
200d0 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65  /tcl>.<tcl>hd_ke
200e0 79 77 6f 72 64 73 20 7b 57 48 45 52 45 20 63 6c  ywords {WHERE cl
200f0 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause}</tcl>..<p>
20100 5e 28 49 66 20 61 20 57 48 45 52 45 20 63 6c 61  ^(If a WHERE cla
20110 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
20120 2c 20 74 68 65 20 57 48 45 52 45 20 65 78 70 72  , the WHERE expr
20130 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
20140 74 65 64 20 66 6f 72 20 0a 65 61 63 68 20 72 6f  ted for .each ro
20150 77 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64  w in the input d
20160 61 74 61 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61  ata as a [boolea
20170 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41  n expression]. A
20180 6c 6c 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  ll rows for whic
20190 68 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75  h the.WHERE clau
201a0 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  se expression ev
201b0 61 6c 75 61 74 65 73 20 74 6f 20 66 61 6c 73 65  aluates to false
201c0 20 61 72 65 20 65 78 63 6c 75 64 65 64 20 66 72   are excluded fr
201d0 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74 20 62  om the dataset b
201e0 65 66 6f 72 65 0a 63 6f 6e 74 69 6e 75 69 6e 67  efore.continuing
201f0 2e 29 5e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20 47 65  .)^..<p><b>3. Ge
20200 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  neration of the 
20210 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
20220 77 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f  ws.</b>.<tcl>hd_
20230 66 72 61 67 6d 65 6e 74 20 72 65 73 75 6c 74 73  fragment results
20240 65 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64  et</tcl>.<tcl>hd
20250 5f 6b 65 79 77 6f 72 64 73 20 7b 72 65 73 75 6c  _keywords {resul
20260 74 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e  t-set expression
20270 73 7d 20 7b 47 52 4f 55 50 20 42 59 7d 3c 2f 74  s} {GROUP BY}</t
20280 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68 65  cl>..<p>Once the
20290 20 69 6e 70 75 74 20 64 61 74 61 20 66 72 6f 6d   input data from
202a0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
202b0 20 68 61 73 20 62 65 65 6e 20 66 69 6c 74 65 72   has been filter
202c0 65 64 20 62 79 20 74 68 65 0a 57 48 45 52 45 20  ed by the.WHERE 
202d0 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f  clause expressio
202e0 6e 20 28 69 66 20 61 6e 79 29 2c 20 74 68 65 20  n (if any), the 
202f0 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
20300 77 73 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c  ws for the simpl
20310 65 20 0a 53 45 4c 45 43 54 20 61 72 65 20 63 61  e .SELECT are ca
20320 6c 63 75 6c 61 74 65 64 2e 20 45 78 61 63 74 6c  lculated. Exactl
20330 79 20 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f  y how this is do
20340 6e 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68  ne depends on wh
20350 65 74 68 65 72 20 74 68 65 20 73 69 6d 70 6c 65  ether the simple
20360 20 0a 53 45 4c 45 43 54 20 69 73 20 61 6e 20 61   .SELECT is an a
20370 67 67 72 65 67 61 74 65 20 6f 72 20 6e 6f 6e 2d  ggregate or non-
20380 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 2c  aggregate query,
20390 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20   and whether or 
203a0 6e 6f 74 20 61 20 47 52 4f 55 50 0a 42 59 20 63  not a GROUP.BY c
203b0 6c 61 75 73 65 20 77 61 73 20 73 70 65 63 69 66  lause was specif
203c0 69 65 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 6c 69  ied...<p> The li
203d0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
203e0 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 53 45  s between the SE
203f0 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65  LECT and FROM ke
20400 79 77 6f 72 64 73 20 69 73 20 6b 6e 6f 77 6e 20  ywords is known 
20410 61 73 0a 74 68 65 20 72 65 73 75 6c 74 20 65 78  as.the result ex
20420 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 20 20  pression list.  
20430 5e 49 66 20 61 20 72 65 73 75 6c 74 20 65 78 70  ^If a result exp
20440 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 73  ression is the s
20450 70 65 63 69 61 6c 20 65 78 70 72 65 73 73 69 6f  pecial expressio
20460 6e 0a 22 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63  n."*" then all c
20470 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e  olumns in the in
20480 70 75 74 20 64 61 74 61 20 61 72 65 20 73 75 62  put data are sub
20490 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68 61  stituted for tha
204a0 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e  t one expression
204b0 2e 0a 5e 28 49 66 20 74 68 65 20 65 78 70 72 65  ..^(If the expre
204c0 73 73 69 6f 6e 20 69 73 20 74 68 65 20 61 6c 69  ssion is the ali
204d0 61 73 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72  as of a table or
204e0 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
204f0 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 66 6f 6c   FROM clause.fol
20500 6c 6f 77 65 64 20 62 79 20 22 2e 2a 22 20 74 68  lowed by ".*" th
20510 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 66  en all columns f
20520 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 74 61  rom the named ta
20530 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
20540 61 72 65 0a 73 75 62 73 74 69 74 75 74 65 64 20  are.substituted 
20550 66 6f 72 20 74 68 65 20 73 69 6e 67 6c 65 20 65  for the single e
20560 78 70 72 65 73 73 69 6f 6e 2e 29 5e 20 5e 28 49  xpression.)^ ^(I
20570 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f  t is an error to
20580 20 75 73 65 20 61 20 22 2a 22 20 6f 72 0a 22 61   use a "*" or."a
20590 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69  lias.*" expressi
205a0 6f 6e 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78  on in any contex
205b0 74 20 6f 74 68 65 72 20 74 68 61 6e 20 74 68 61  t other than tha
205c0 6e 20 61 20 72 65 73 75 6c 74 20 65 78 70 72 65  n a result expre
205d0 73 73 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28  ssion list.)^.^(
205e0 49 74 20 69 73 20 61 6c 73 6f 20 61 6e 20 65 72  It is also an er
205f0 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22  ror to use a "*"
20600 20 6f 72 20 22 61 6c 69 61 73 2e 2a 22 20 65 78   or "alias.*" ex
20610 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 20 73 69  pression in a si
20620 6d 70 6c 65 20 53 45 4c 45 43 54 0a 71 75 65 72  mple SELECT.quer
20630 79 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  y that does not 
20640 68 61 76 65 20 61 20 46 52 4f 4d 20 63 6c 61 75  have a FROM clau
20650 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65  se.)^..<p> ^(The
20660 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
20670 6e 73 20 69 6e 20 74 68 65 20 72 6f 77 73 20 72  ns in the rows r
20680 65 74 75 72 6e 65 64 20 62 79 20 61 20 73 69 6d  eturned by a sim
20690 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
206a0 6d 65 6e 74 0a 69 73 20 65 71 75 61 6c 20 74 6f  ment.is equal to
206b0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
206c0 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
206d0 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  e result express
206e0 69 6f 6e 20 6c 69 73 74 20 61 66 74 65 72 0a 73  ion list after.s
206f0 75 62 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 2a  ubstitution of *
20700 20 61 6e 64 20 61 6c 69 61 73 2e 2a 20 65 78 70   and alias.* exp
20710 72 65 73 73 69 6f 6e 73 2e 29 5e 20 45 61 63 68  ressions.)^ Each
20720 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 63   result row is c
20730 61 6c 63 75 6c 61 74 65 64 20 62 79 0a 65 76 61  alculated by.eva
20740 6c 75 61 74 69 6e 67 20 74 68 65 20 65 78 70 72  luating the expr
20750 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72  essions in the r
20760 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
20770 20 6c 69 73 74 20 77 69 74 68 20 72 65 73 70 65   list with respe
20780 63 74 20 74 6f 20 61 0a 73 69 6e 67 6c 65 20 72  ct to a.single r
20790 6f 77 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61  ow of input data
207a0 20 6f 72 2c 20 66 6f 72 20 61 67 67 72 65 67 61   or, for aggrega
207b0 74 65 20 71 75 65 72 69 65 73 2c 20 77 69 74 68  te queries, with
207c0 20 72 65 73 70 65 63 74 20 74 6f 20 61 20 67 72   respect to a gr
207d0 6f 75 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75  oup.of rows...<u
207e0 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  l>.  <li><p>^If 
207f0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
20800 6d 65 6e 74 20 69 73 20 3c 62 3e 61 20 6e 6f 6e  ment is <b>a non
20810 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
20820 3c 2f 62 3e 2c 20 74 68 65 6e 20 0a 20 20 20 20  </b>, then .    
20830 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
20840 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
20850 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 73  pression list is
20860 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
20870 61 63 68 20 72 6f 77 20 69 6e 0a 20 20 20 20 74  ach row in.    t
20880 68 65 20 64 61 74 61 73 65 74 20 66 69 6c 74 65  he dataset filte
20890 72 65 64 20 62 79 20 74 68 65 20 57 48 45 52 45  red by the WHERE
208a0 20 63 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e   clause...  <li>
208b0 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43  <p>^If the SELEC
208c0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c  T statement is <
208d0 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  b>an aggregate q
208e0 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 20 47  uery without a G
208f0 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20  ROUP.    BY</b> 
20900 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63  clause, then eac
20910 68 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  h aggregate expr
20920 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
20930 73 75 6c 74 2d 73 65 74 20 69 73 20 0a 20 20 20  sult-set is .   
20940 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
20950 61 63 72 6f 73 73 20 74 68 65 20 65 6e 74 69 72  across the entir
20960 65 20 64 61 74 61 73 65 74 2e 20 5e 45 61 63 68  e dataset. ^Each
20970 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
20980 78 70 72 65 73 73 69 6f 6e 0a 20 20 20 20 69 6e  xpression.    in
20990 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20   the result-set 
209a0 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63  is evaluated onc
209b0 65 20 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61  e for an arbitra
209c0 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f  rily selected ro
209d0 77 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74  w of.    the dat
209e0 61 73 65 74 2e 20 5e 54 68 65 20 73 61 6d 65 20  aset. ^The same 
209f0 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65  arbitrarily sele
20a00 63 74 65 64 20 72 6f 77 20 69 73 20 75 73 65 64  cted row is used
20a10 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20 6e 6f   for each.    no
20a20 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
20a30 65 73 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20  ession. ^Or, if 
20a40 74 68 65 20 64 61 74 61 73 65 74 20 63 6f 6e 74  the dataset cont
20a50 61 69 6e 73 20 7a 65 72 6f 20 72 6f 77 73 2c 20  ains zero rows, 
20a60 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 6e  then .    each n
20a70 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
20a80 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
20a90 61 74 65 64 20 61 67 61 69 6e 73 74 20 61 20 72  ated against a r
20aa0 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20 20  ow consisting.  
20ab0 20 20 65 6e 74 69 72 65 6c 79 20 6f 66 20 4e 55    entirely of NU
20ac0 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20 3c  LL values...   <
20ad0 70 3e 5e 54 68 65 20 73 69 6e 67 6c 65 20 72 6f  p>^The single ro
20ae0 77 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  w of result-set 
20af0 64 61 74 61 20 63 72 65 61 74 65 64 20 62 79 20  data created by 
20b00 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61  evaluating the a
20b10 67 67 72 65 67 61 74 65 0a 20 20 20 20 61 6e 64  ggregate.    and
20b20 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
20b30 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
20b40 65 20 72 65 73 75 6c 74 2d 73 65 74 20 66 6f 72  e result-set for
20b50 6d 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ms the result of
20b60 20 61 6e 0a 20 20 20 20 61 67 67 72 65 67 61 74   an.    aggregat
20b70 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20  e query without 
20b80 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
20b90 65 2e 20 5e 41 6e 20 61 67 67 72 65 67 61 74 65  e. ^An aggregate
20ba0 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61   query without a
20bb0 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c  .    GROUP BY cl
20bc0 61 75 73 65 20 61 6c 77 61 79 73 20 72 65 74 75  ause always retu
20bd0 72 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20  rns exactly one 
20be0 72 6f 77 20 6f 66 20 64 61 74 61 2c 20 65 76 65  row of data, eve
20bf0 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 20  n if there are. 
20c00 20 20 20 7a 65 72 6f 20 72 6f 77 73 20 6f 66 20     zero rows of 
20c10 69 6e 70 75 74 20 64 61 74 61 2e 0a 0a 20 20 3c  input data...  <
20c20 6c 69 3e 3c 70 3e 5e 28 49 66 20 74 68 65 20 53  li><p>^(If the S
20c30 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
20c40 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61  is <b>an aggrega
20c50 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20  te query with a 
20c60 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e  GROUP.    BY</b>
20c70 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61   clause, then ea
20c80 63 68 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  ch of the expres
20c90 73 69 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20  sions specified 
20ca0 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 20  as part of the. 
20cb0 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75     GROUP BY clau
20cc0 73 65 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  se is evaluated 
20cd0 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
20ce0 74 68 65 20 64 61 74 61 73 65 74 2e 20 45 61 63  the dataset. Eac
20cf0 68 20 72 6f 77 0a 20 20 20 20 69 73 20 74 68 65  h row.    is the
20d00 6e 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20  n assigned to a 
20d10 22 67 72 6f 75 70 22 20 62 61 73 65 64 20 6f 6e  "group" based on
20d20 20 74 68 65 20 72 65 73 75 6c 74 73 3b 20 72 6f   the results; ro
20d30 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20  ws for which.   
20d40 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
20d50 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 47  evaluating the G
20d60 52 4f 55 50 20 42 59 20 65 78 70 72 65 73 73 69  ROUP BY expressi
20d70 6f 6e 73 20 61 72 65 20 74 68 65 20 73 61 6d 65  ons are the same
20d80 20 61 72 65 0a 20 20 20 20 61 73 73 69 67 6e 65   are.    assigne
20d90 64 20 74 6f 20 74 68 65 20 73 61 6d 65 20 67 72  d to the same gr
20da0 6f 75 70 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20  oup.)^ ^For the 
20db0 70 75 72 70 6f 73 65 73 20 6f 66 20 67 72 6f 75  purposes of grou
20dc0 70 69 6e 67 20 72 6f 77 73 2c 20 4e 55 4c 4c 20  ping rows, NULL 
20dd0 0a 20 20 20 20 76 61 6c 75 65 73 20 61 72 65 20  .    values are 
20de0 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c  considered equal
20df0 2e 20 5e 54 68 65 20 75 73 75 61 6c 20 72 75 6c  . ^The usual rul
20e00 65 73 20 66 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f  es for [collatio
20e10 6e 7c 73 65 6c 65 63 74 69 6e 67 20 61 0a 20 20  n|selecting a.  
20e20 20 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75    collation sequ
20e30 65 6e 63 65 5d 20 77 69 74 68 20 77 68 69 63 68  ence] with which
20e40 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
20e50 20 76 61 6c 75 65 73 20 61 70 70 6c 79 20 77 68   values apply wh
20e60 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 0a 20 20  en evaluating.  
20e70 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e    expressions in
20e80 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
20e90 73 65 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73  se.  ^The expres
20ea0 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 47 52 4f  sions in the GRO
20eb0 55 50 20 42 59 20 63 6c 61 75 73 65 0a 20 20 20  UP BY clause.   
20ec0 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e   do <em>not</em>
20ed0 20 68 61 76 65 20 74 6f 20 62 65 20 65 78 70 72   have to be expr
20ee0 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 70 70  essions that app
20ef0 65 61 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ear in the resul
20f00 74 2e 20 5e 54 68 65 0a 20 20 20 20 65 78 70 72  t. ^The.    expr
20f10 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f  essions in a GRO
20f20 55 50 20 42 59 20 63 6c 61 75 73 65 20 6d 61 79  UP BY clause may
20f30 20 6e 6f 74 20 62 65 20 61 67 67 72 65 67 61 74   not be aggregat
20f40 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 0a  e expressions...
20f50 20 20 20 20 3c 70 3e 5e 28 49 66 20 61 20 48 41      <p>^(If a HA
20f60 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73  VING clause is s
20f70 70 65 63 69 66 69 65 64 2c 20 69 74 20 69 73 20  pecified, it is 
20f80 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
20f90 6f 72 20 65 61 63 68 20 67 72 6f 75 70 20 0a 20  or each group . 
20fa0 20 20 20 6f 66 20 72 6f 77 73 20 61 73 20 61 20     of rows as a 
20fb0 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
20fc0 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 72 65 73  ion]. If the res
20fd0 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult of evaluatin
20fe0 67 20 74 68 65 0a 20 20 20 20 48 41 56 49 4e 47  g the.    HAVING
20ff0 20 63 6c 61 75 73 65 20 69 73 20 66 61 6c 73 65   clause is false
21000 2c 20 74 68 65 20 67 72 6f 75 70 20 69 73 20 64  , the group is d
21010 69 73 63 61 72 64 65 64 2e 29 5e 20 5e 49 66 20  iscarded.)^ ^If 
21020 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  the HAVING claus
21030 65 20 69 73 0a 20 20 20 20 61 6e 20 61 67 67 72  e is.    an aggr
21040 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
21050 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
21060 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77  d across all row
21070 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20  s in the group. 
21080 5e 49 66 0a 20 20 20 20 61 20 48 41 56 49 4e 47  ^If.    a HAVING
21090 20 63 6c 61 75 73 65 20 69 73 20 61 20 6e 6f 6e   clause is a non
210a0 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
210b0 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61  ssion, it is eva
210c0 6c 75 61 74 65 64 20 77 69 74 68 20 72 65 73 70  luated with resp
210d0 65 63 74 0a 20 20 20 20 74 6f 20 61 6e 20 61 72  ect.    to an ar
210e0 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
210f0 65 64 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20  ed row from the 
21100 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 48 41 56  group.  ^The HAV
21110 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ING expression m
21120 61 79 0a 20 20 20 20 72 65 66 65 72 20 74 6f 20  ay.    refer to 
21130 76 61 6c 75 65 73 2c 20 65 76 65 6e 20 61 67 67  values, even agg
21140 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
21150 2c 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69  , that are not i
21160 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70  n the result.</p
21170 3e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20  >..    <p>^Each 
21180 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
21190 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20  e result-set is 
211a0 74 68 65 6e 20 65 76 61 6c 75 61 74 65 64 20 6f  then evaluated o
211b0 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 20 20 20  nce for each.   
211c0 20 67 72 6f 75 70 20 6f 66 20 72 6f 77 73 2e 20   group of rows. 
211d0 5e 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69  ^If the expressi
211e0 6f 6e 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  on is an aggrega
211f0 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  te expression, i
21200 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61  t is .    evalua
21210 74 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72  ted across all r
21220 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ows in the group
21230 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74  . ^Otherwise, it
21240 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67   is evaluated ag
21250 61 69 6e 73 74 0a 20 20 20 20 61 20 73 69 6e 67  ainst.    a sing
21260 6c 65 20 61 72 62 69 74 72 61 72 69 6c 79 20 63  le arbitrarily c
21270 68 6f 73 65 6e 20 72 6f 77 20 66 72 6f 6d 20 77  hosen row from w
21280 69 74 68 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ithin the group.
21290 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f   ^If there is mo
212a0 72 65 0a 20 20 20 20 74 68 61 6e 20 6f 6e 65 20  re.    than one 
212b0 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78  non-aggregate ex
212c0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
212d0 72 65 73 75 6c 74 2d 73 65 74 2c 20 74 68 65 6e  result-set, then
212e0 20 61 6c 6c 20 73 75 63 68 0a 20 20 20 20 65 78   all such.    ex
212f0 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76  pressions are ev
21300 61 6c 75 61 74 65 64 20 66 6f 72 20 74 68 65 20  aluated for the 
21310 73 61 6d 65 20 72 6f 77 2e 0a 0a 20 20 20 20 3c  same row...    <
21320 70 3e 5e 45 61 63 68 20 67 72 6f 75 70 20 6f 66  p>^Each group of
21330 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 20 72   input dataset r
21340 6f 77 73 20 63 6f 6e 74 72 69 62 75 74 65 73 20  ows contributes 
21350 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 74 6f 20  a single row to 
21360 74 68 65 20 0a 20 20 20 20 73 65 74 20 6f 66 20  the .    set of 
21370 72 65 73 75 6c 74 20 72 6f 77 73 2e 20 5e 53 75  result rows. ^Su
21380 62 6a 65 63 74 20 74 6f 20 66 69 6c 74 65 72 69  bject to filteri
21390 6e 67 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ng associated wi
213a0 74 68 20 74 68 65 20 44 49 53 54 49 4e 43 54 0a  th the DISTINCT.
213b0 20 20 20 20 6b 65 79 77 6f 72 64 2c 20 74 68 65      keyword, the
213c0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
213d0 72 65 74 75 72 6e 65 64 20 62 79 20 61 6e 20 61  returned by an a
213e0 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
213f0 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20  ith a GROUP.    
21400 42 59 20 63 6c 61 75 73 65 20 69 73 20 74 68 65  BY clause is the
21410 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d   same as the num
21420 62 65 72 20 6f 66 20 67 72 6f 75 70 73 20 6f 66  ber of groups of
21430 20 72 6f 77 73 20 70 72 6f 64 75 63 65 64 20 62   rows produced b
21440 79 20 61 70 70 6c 79 69 6e 67 0a 20 20 20 20 74  y applying.    t
21450 68 65 20 47 52 4f 55 50 20 42 59 20 61 6e 64 20  he GROUP BY and 
21460 48 41 56 49 4e 47 20 63 6c 61 75 73 65 73 20 74  HAVING clauses t
21470 6f 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69  o the filtered i
21480 6e 70 75 74 20 64 61 74 61 73 65 74 2e 0a 3c 2f  nput dataset..</
21490 75 6c 3e 0a 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65  ul>..<p><b>4. Re
214a0 6d 6f 76 61 6c 20 6f 66 20 64 75 70 6c 69 63 61  moval of duplica
214b0 74 65 20 72 6f 77 73 20 28 44 49 53 54 49 4e 43  te rows (DISTINC
214c0 54 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f  T processing).</
214d0 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  b>.<tcl>hd_fragm
214e0 65 6e 74 20 64 69 73 74 69 6e 63 74 3c 2f 74 63  ent distinct</tc
214f0 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
21500 72 64 73 20 7b 44 49 53 54 49 4e 43 54 7d 3c 2f  rds {DISTINCT}</
21510 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66  tcl>..<p>^One of
21520 20 74 68 65 20 41 4c 4c 20 6f 72 20 44 49 53 54   the ALL or DIST
21530 49 4e 43 54 20 6b 65 79 77 6f 72 64 73 20 6d 61  INCT keywords ma
21540 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 53 45 4c  y follow the SEL
21550 45 43 54 20 6b 65 79 77 6f 72 64 20 69 6e 20 61  ECT keyword in a
21560 20 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20   .simple SELECT 
21570 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74  statement. ^If t
21580 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  he simple SELECT
21590 20 69 73 20 61 20 53 45 4c 45 43 54 20 41 4c 4c   is a SELECT ALL
215a0 2c 20 74 68 65 6e 20 74 68 65 0a 65 6e 74 69 72  , then the.entir
215b0 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20  e set of result 
215c0 72 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65  rows are returne
215d0 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 2e  d by the SELECT.
215e0 20 5e 49 66 20 6e 65 69 74 68 65 72 20 41 4c 4c   ^If neither ALL
215f0 20 6f 72 0a 44 49 53 54 49 4e 43 54 20 61 72 65   or.DISTINCT are
21600 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
21610 68 65 20 62 65 68 61 76 69 6f 75 72 20 69 73 20  he behaviour is 
21620 61 73 20 69 66 20 41 4c 4c 20 77 65 72 65 20 73  as if ALL were s
21630 70 65 63 69 66 69 65 64 2e 20 0a 5e 49 66 20 74  pecified. .^If t
21640 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  he simple SELECT
21650 20 69 73 20 61 20 53 45 4c 45 43 54 20 44 49 53   is a SELECT DIS
21660 54 49 4e 43 54 2c 20 74 68 65 6e 20 64 75 70 6c  TINCT, then dupl
21670 69 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72  icate rows are r
21680 65 6d 6f 76 65 64 0a 66 72 6f 6d 20 74 68 65 20  emoved.from the 
21690 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
216a0 77 73 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ws before it is 
216b0 72 65 74 75 72 6e 65 64 2e 20 5e 46 6f 72 20 74  returned. ^For t
216c0 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 0a 64  he purposes of.d
216d0 65 74 65 63 74 69 6e 67 20 64 75 70 6c 69 63 61  etecting duplica
216e0 74 65 20 72 6f 77 73 2c 20 74 77 6f 20 4e 55 4c  te rows, two NUL
216f0 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
21700 73 69 64 65 72 65 64 20 74 6f 20 62 65 20 65 71  sidered to be eq
21710 75 61 6c 2e 20 5e 54 68 65 0a 6e 6f 72 6d 61 6c  ual. ^The.normal
21720 20 72 75 6c 65 73 20 66 6f 72 20 73 65 6c 65 63   rules for selec
21730 74 69 6e 67 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  ting a collation
21740 20 73 65 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d   sequence to com
21750 70 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73  pare text values
21760 20 77 69 74 68 0a 61 70 70 6c 79 2e 0a 0a 3c 68   with.apply...<h
21770 33 3e 43 6f 6d 70 6f 75 6e 64 20 53 65 6c 65 63  3>Compound Selec
21780 74 20 53 74 61 74 65 6d 65 6e 74 73 0a 3c 74 63  t Statements.<tc
21790 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f  l>hd_fragment co
217a0 6d 70 6f 75 6e 64 3c 2f 74 63 6c 3e 0a 3c 74 63  mpound</tcl>.<tc
217b0 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 63  l>hd_keywords {c
217c0 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 7d 20  ompound select} 
217d0 7b 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 7d  {compound query}
217e0 3c 2f 74 63 6c 3e 0a 3c 2f 68 33 3e 0a 0a 3c 70  </tcl>.</h3>..<p
217f0 3e 54 77 6f 20 6f 72 20 6d 6f 72 65 20 73 69 6d  >Two or more sim
21800 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
21810 6d 65 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e  ments may be con
21820 6e 65 63 74 65 64 20 74 6f 67 65 74 68 65 72 20  nected together 
21830 74 6f 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75  to form.a compou
21840 6e 64 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20  nd SELECT using 
21850 74 68 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e  the UNION, UNION
21860 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20   ALL, INTERSECT 
21870 6f 72 20 45 58 43 45 50 54 20 6f 70 65 72 61 74  or EXCEPT operat
21880 6f 72 2e 0a 5e 49 6e 20 61 20 63 6f 6d 70 6f 75  or..^In a compou
21890 6e 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74  nd SELECT, all t
218a0 68 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 53  he constituent S
218b0 45 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74 75  ELECTs must retu
218c0 72 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d  rn the same .num
218d0 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f  ber of result co
218e0 6c 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20 63  lumns. ^As the c
218f0 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63  omponents of a c
21900 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d  ompound SELECT m
21910 75 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53 45  ust.be simple SE
21920 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2c  LECT statements,
21930 20 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f   they may not co
21940 6e 74 61 69 6e 20 4f 52 44 45 52 20 42 59 20 6f  ntain ORDER BY o
21950 72 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 2e  r LIMIT clauses.
21960 0a 5e 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c  .^ORDER BY and L
21970 49 4d 49 54 20 63 6c 61 75 73 65 73 20 6d 61 79  IMIT clauses may
21980 20 6f 6e 6c 79 20 6f 63 63 75 72 20 61 74 20 74   only occur at t
21990 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 65 6e  he end of the en
219a0 74 69 72 65 20 63 6f 6d 70 6f 75 6e 64 0a 53 45  tire compound.SE
219b0 4c 45 43 54 2e 20 20 0a 0a 3c 70 3e 5e 41 20 63  LECT.  ..<p>^A c
219c0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63  ompound SELECT c
219d0 72 65 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49  reated using UNI
219e0 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20  ON ALL operator 
219f0 72 65 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20  returns all the 
21a00 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45  rows.from the SE
21a10 4c 45 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74  LECT to the left
21a20 20 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c   of the UNION AL
21a30 4c 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20  L operator, and 
21a40 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f  all the rows.fro
21a50 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20  m the SELECT to 
21a60 74 68 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e  the right of it.
21a70 20 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72   ^The UNION oper
21a80 61 74 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73  ator works the s
21a90 61 6d 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e  ame way as.UNION
21aa0 20 41 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61   ALL, except tha
21ab0 74 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  t duplicate rows
21ac0 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f   are removed fro
21ad0 6d 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75  m the final resu
21ae0 6c 74 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54  lt set..^The INT
21af0 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20  ERSECT operator 
21b00 72 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65  returns the inte
21b10 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  rsection of the 
21b20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c  results of the l
21b30 65 66 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45  eft and.right SE
21b40 4c 45 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43  LECTs.  ^The EXC
21b50 45 50 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74  EPT operator ret
21b60 75 72 6e 73 20 74 68 65 20 73 75 62 73 65 74 20  urns the subset 
21b70 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  of rows returned
21b80 20 62 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c   by the.left SEL
21b90 45 43 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ECT that are not
21ba0 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62   also returned b
21bb0 79 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  y the right-hand
21bc0 20 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63   SELECT. ^Duplic
21bd0 61 74 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d  ate.rows are rem
21be0 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  oved from the re
21bf0 73 75 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45  sults of INTERSE
21c00 43 54 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70  CT and EXCEPT op
21c10 65 72 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74  erators before t
21c20 68 65 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73  he.result set is
21c30 20 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e   returned...<p>^
21c40 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
21c50 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20   of determining 
21c60 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66  duplicate rows f
21c70 6f 72 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  or the results o
21c80 66 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43  f compound.SELEC
21c90 54 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c  T operators, NUL
21ca0 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
21cb0 73 69 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f  sidered equal to
21cc0 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75   other NULL valu
21cd0 65 73 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20  es and.distinct 
21ce0 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  from all non-NUL
21cf0 4c 20 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63  L values. ^The c
21d00 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
21d10 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  e used to compar
21d20 65 20 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75  e .two text valu
21d30 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  es is determined
21d40 20 61 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d   as if the colum
21d50 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61  ns of the left a
21d60 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45  nd right-hand.SE
21d70 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
21d80 77 65 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e  were the left an
21d90 64 20 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65  d right-hand ope
21da0 72 61 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75  rands of the equ
21db0 61 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72  als (=).operator
21dc0 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 67 72  , except that gr
21dd0 65 61 74 65 72 20 70 72 65 63 65 64 65 6e 63 65  eater precedence
21de0 20 69 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64   is not assigned
21df0 20 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20   to a collation 
21e00 0a 73 65 71 75 65 6e 63 65 20 73 70 65 63 69 66  .sequence specif
21e10 69 65 64 20 77 69 74 68 20 74 68 65 20 70 6f 73  ied with the pos
21e20 74 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65  tfix COLLATE ope
21e30 72 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e  rator. ^No affin
21e40 69 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69  ity.transformati
21e50 6f 6e 73 20 61 72 65 20 61 70 70 6c 69 65 64 20  ons are applied 
21e60 74 6f 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68  to any values wh
21e70 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77  en comparing row
21e80 73 20 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63  s as part of a.c
21e90 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20  ompound SELECT. 
21ea0 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65  ..<p>^(When thre
21eb0 65 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65  e or more simple
21ec0 20 53 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e   SELECTs are con
21ed0 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f  nected into a co
21ee0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74  mpound SELECT,.t
21ef0 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c  hey group from l
21f00 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e  eft to right. In
21f10 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
21f20 20 22 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43   "A", "B" and "C
21f30 22 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65  " are all.simple
21f40 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
21f50 74 73 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43  ts, (A op B op C
21f60 29 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61  ) is processed a
21f70 73 20 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43  s ((A op B) op C
21f80 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ).)^..</p>..<tcl
21f90 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64  >hd_fragment ord
21fa0 65 72 62 79 20 7b 6f 72 64 65 72 20 62 79 7d 3c  erby {order by}<
21fb0 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 52 44 45 52 20  /tcl>.<h3>ORDER 
21fc0 42 59 20 61 6e 64 20 4c 49 4d 49 54 2f 4f 46 46  BY and LIMIT/OFF
21fd0 53 45 54 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e  SET Clauses</h3>
21fe0 0a 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43 54  ..<p>If a SELECT
21ff0 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
22000 72 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68 61  returns more tha
22010 6e 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20 6e  n one row does n
22020 6f 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45 52  ot have an.ORDER
22030 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 20   BY clause, the 
22040 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74  order in which t
22050 68 65 20 72 6f 77 73 20 61 72 65 20 72 65 74 75  he rows are retu
22060 72 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65  rned is undefine
22070 64 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c 45  d..Or, if a SELE
22080 43 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65  CT statement doe
22090 73 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20  s have an ORDER 
220a0 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  BY clause, then 
220b0 74 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70 72  the list of.expr
220c0 65 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65 64  essions attached
220d0 20 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59   to the ORDER BY
220e0 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6f   determine the o
220f0 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
22100 77 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20  ws.are returned 
22110 74 6f 20 74 68 65 20 75 73 65 72 2e 20 5e 52 6f  to the user. ^Ro
22120 77 73 20 61 72 65 20 66 69 72 73 74 20 73 6f 72  ws are first sor
22130 74 65 64 20 62 61 73 65 64 20 6f 6e 20 74 68 65  ted based on the
22140 20 72 65 73 75 6c 74 73 20 6f 66 0a 65 76 61 6c   results of.eval
22150 75 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d  uating the left-
22160 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20  most expression 
22170 69 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  in the ORDER BY 
22180 6c 69 73 74 2c 20 74 68 65 6e 20 74 69 65 73 20  list, then ties 
22190 61 72 65 20 62 72 6f 6b 65 6e 0a 62 79 20 65 76  are broken.by ev
221a0 61 6c 75 61 74 69 6e 67 20 74 68 65 20 73 65 63  aluating the sec
221b0 6f 6e 64 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78  ond left-most ex
221c0 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 73 6f 20  pression and so 
221d0 6f 6e 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e  on. The order in
221e0 20 77 68 69 63 68 0a 74 77 6f 20 72 6f 77 73 20   which.two rows 
221f0 66 6f 72 20 77 68 69 63 68 20 61 6c 6c 20 4f 52  for which all OR
22200 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
22210 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 65  ns evaluate to e
22220 71 75 61 6c 20 76 61 6c 75 65 73 20 61 72 65 0a  qual values are.
22230 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65  returned is unde
22240 66 69 6e 65 64 2e 20 5e 45 61 63 68 20 4f 52 44  fined. ^Each ORD
22250 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
22260 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c   may be optional
22270 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 6f  ly followed.by o
22280 6e 65 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72  ne of the keywor
22290 64 73 20 41 53 43 20 28 73 6d 61 6c 6c 65 72 20  ds ASC (smaller 
222a0 76 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72  values are retur
222b0 6e 65 64 20 66 69 72 73 74 29 20 6f 72 20 44 45  ned first) or DE
222c0 53 43 20 28 6c 61 72 67 65 72 0a 76 61 6c 75 65  SC (larger.value
222d0 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 66  s are returned f
222e0 69 72 73 74 29 2e 20 5e 49 66 20 6e 65 69 74 68  irst). ^If neith
222f0 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 20 61  er ASC or DESC a
22300 72 65 20 73 70 65 63 69 66 69 65 64 2c 20 72 6f  re specified, ro
22310 77 73 0a 61 72 65 20 73 6f 72 74 65 64 20 69 6e  ws.are sorted in
22320 20 61 73 63 65 6e 64 69 6e 67 20 28 73 6d 61 6c   ascending (smal
22330 6c 65 72 20 76 61 6c 75 65 73 20 66 69 72 73 74  ler values first
22340 29 20 6f 72 64 65 72 20 62 79 20 64 65 66 61 75  ) order by defau
22350 6c 74 2e 0a 0a 3c 70 3e 45 61 63 68 20 4f 52 44  lt...<p>Each ORD
22360 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
22370 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73   is processed as
22380 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
22390 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  ol>.<li><p>^If t
223a0 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
223b0 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73  ession is a cons
223c0 74 61 6e 74 20 69 6e 74 65 67 65 72 20 4b 20 74  tant integer K t
223d0 68 65 6e 20 74 68 65 0a 65 78 70 72 65 73 73 69  hen the.expressi
223e0 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  on is considered
223f0 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
22400 65 20 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e K-th column of
22410 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a   the result set.
22420 28 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 75 6d  (columns are num
22430 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  bered from left 
22440 74 6f 20 72 69 67 68 74 20 73 74 61 72 74 69 6e  to right startin
22450 67 20 77 69 74 68 20 31 29 2e 0a 0a 3c 6c 69 3e  g with 1)...<li>
22460 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52  <p>^If the ORDER
22470 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
22480 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  s an identifier 
22490 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
224a0 20 74 6f 0a 74 68 65 20 61 6c 69 61 73 20 6f 66   to.the alias of
224b0 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 75 74 70   one of the outp
224c0 75 74 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e  ut columns, then
224d0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
224e0 69 73 20 63 6f 6e 73 69 64 65 72 65 64 0a 61 6e  is considered.an
224f0 20 61 6c 69 61 73 20 66 6f 72 20 74 68 61 74 20   alias for that 
22500 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e  column...<li><p>
22510 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74  ^Otherwise, if t
22520 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
22530 65 73 73 69 6f 6e 20 69 73 20 61 6e 79 20 6f 74  ession is any ot
22540 68 65 72 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  her expression, 
22550 69 74 20 0a 69 73 20 65 76 61 6c 75 61 74 65 64  it .is evaluated
22560 20 61 6e 64 20 74 68 65 20 74 68 65 20 72 65 74   and the the ret
22570 75 72 6e 65 64 20 76 61 6c 75 65 20 75 73 65 64  urned value used
22580 20 74 6f 20 6f 72 64 65 72 20 74 68 65 20 6f 75   to order the ou
22590 74 70 75 74 20 72 6f 77 73 2e 20 5e 49 66 0a 74  tput rows. ^If.t
225a0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
225b0 65 6e 74 20 69 73 20 61 20 73 69 6d 70 6c 65 20  ent is a simple 
225c0 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 61 6e 20  SELECT, then an 
225d0 4f 52 44 45 52 20 42 59 20 6d 61 79 20 63 6f 6e  ORDER BY may con
225e0 74 61 69 6e 20 61 6e 79 0a 61 72 62 69 74 72 61  tain any.arbitra
225f0 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  ry expressions. 
22600 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65  ^However, if the
22610 20 53 45 4c 45 43 54 20 69 73 20 61 20 63 6f 6d   SELECT is a com
22620 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 74 68  pound SELECT, th
22630 65 6e 0a 4f 52 44 45 52 20 42 59 20 65 78 70 72  en.ORDER BY expr
22640 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65  essions that are
22650 20 6e 6f 74 20 61 6c 69 61 73 65 73 20 74 6f 20   not aliases to 
22660 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 20 6d  output columns m
22670 75 73 74 20 62 65 20 65 78 61 63 74 6c 79 0a 74  ust be exactly.t
22680 68 65 20 73 61 6d 65 20 61 73 20 61 6e 20 65 78  he same as an ex
22690 70 72 65 73 73 69 6f 6e 20 75 73 65 64 20 61 73  pression used as
226a0 20 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d   an output colum
226b0 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f  n..</ol>..<p>^Fo
226c0 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
226d0 66 20 73 6f 72 74 69 6e 67 20 72 6f 77 73 2c 20  f sorting rows, 
226e0 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
226f0 72 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  red in the same 
22700 77 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f 6d 70  way.as for [comp
22710 61 72 69 73 6f 6e 20 65 78 70 72 65 73 73 69 6f  arison expressio
22720 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61 74 69  ns]. The collati
22730 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65 64  on sequence used
22740 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77 6f 20   to compare.two 
22750 74 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64  text values is d
22760 65 74 65 72 6d 69 6e 65 64 20 61 73 20 66 6f 6c  etermined as fol
22770 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c  lows:..<ol>.  <l
22780 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44  i><p>^If the ORD
22790 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
227a0 20 69 73 20 61 73 73 69 67 6e 65 64 20 61 20 63   is assigned a c
227b0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
227c0 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20 70 6f  e using.  the po
227d0 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45 20 6f  stfix [COLLATE o
227e0 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74  perator], then t
227f0 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c  he specified col
22800 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
22810 69 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c 6c 69  is.  used..  <li
22820 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
22830 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
22840 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
22850 20 61 6c 69 61 73 20 74 6f 20 61 6e 20 65 78 70   alias to an exp
22860 72 65 73 73 69 6f 6e 0a 20 20 74 68 61 74 20 68  ression.  that h
22870 61 73 20 62 65 65 6e 20 61 73 73 69 67 6e 65 64  as been assigned
22880 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
22890 75 65 6e 63 65 20 75 73 69 6e 67 20 74 68 65 20  uence using the 
228a0 70 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f 4c 4c  postfix .  [COLL
228b0 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74  ATE operator], t
228c0 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  hen the collatio
228d0 6e 20 73 65 71 75 65 6e 63 65 20 61 73 73 69 67  n sequence assig
228e0 6e 65 64 20 74 6f 20 74 68 65 20 61 6c 69 61 73  ned to the alias
228f0 65 64 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20  ed.  expression 
22900 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c  is used..  <li><
22910 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66  p>^Otherwise, if
22920 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
22930 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f  pression is a co
22940 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69 61 73  lumn or an alias
22950 20 6f 66 0a 20 20 61 6e 20 65 78 70 72 65 73 73   of.  an express
22960 69 6f 6e 20 74 68 61 74 20 69 73 20 61 20 63 6f  ion that is a co
22970 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65 20 64  lumn, then the d
22980 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
22990 20 73 65 71 75 65 6e 63 65 20 66 6f 72 0a 20 20   sequence for.  
229a0 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  the column is us
229b0 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f  ed. .  <li><p>^O
229c0 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 5b 42  therwise, the [B
229d0 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69 6f 6e  INARY] collation
229e0 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65   sequence is use
229f0 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20  d..</ol>..<p>In 
22a00 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
22a10 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 6c 6c  T statement, all
22a20 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
22a30 73 69 6f 6e 73 20 61 72 65 20 68 61 6e 64 6c 65  sions are handle
22a40 64 0a 61 73 20 61 6c 69 61 73 65 73 20 66 6f 72  d.as aliases for
22a50 20 6f 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75   one of the resu
22a60 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  lt columns of th
22a70 65 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  e compound SELEC
22a80 54 2e 0a 5e 28 49 66 20 61 6e 20 4f 52 44 45 52  T..^(If an ORDER
22a90 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
22aa0 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
22ab0 20 61 6c 69 61 73 2c 20 74 68 65 6e 20 53 51 4c   alias, then SQL
22ac0 69 74 65 20 73 65 61 72 63 68 65 73 0a 74 68 65  ite searches.the
22ad0 20 6c 65 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43   left-most SELEC
22ae0 54 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e  T in the compoun
22af0 64 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 63  d for a result c
22b00 6f 6c 75 6d 6e 20 74 68 61 74 20 6d 61 74 63 68  olumn that match
22b10 65 73 20 65 69 74 68 65 72 0a 74 68 65 20 73 65  es either.the se
22b20 63 6f 6e 64 20 6f 72 20 74 68 69 72 64 20 72 75  cond or third ru
22b30 6c 65 73 20 61 62 6f 76 65 2e 20 49 66 20 61 20  les above. If a 
22b40 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
22b50 74 68 65 20 73 65 61 72 63 68 20 73 74 6f 70 73  the search stops
22b60 20 61 6e 64 0a 74 68 65 20 65 78 70 72 65 73 73   and.the express
22b70 69 6f 6e 20 69 73 20 68 61 6e 64 6c 65 64 20 61  ion is handled a
22b80 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
22b90 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
22ba0 20 74 68 61 74 20 69 74 20 68 61 73 20 62 65 65   that it has bee
22bb0 6e 0a 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73  n.matched agains
22bc0 74 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68  t. Otherwise, th
22bd0 65 20 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f  e next SELECT to
22be0 20 74 68 65 20 72 69 67 68 74 20 69 73 20 74 72   the right is tr
22bf0 69 65 64 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29  ied, and so on.)
22c00 5e 0a 5e 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e  ^.^If no matchin
22c10 67 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e  g expression can
22c20 20 62 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   be found in the
22c30 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20   result columns 
22c40 6f 66 20 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65  of any.constitue
22c50 6e 74 20 53 45 4c 45 43 54 2c 20 69 74 20 69 73  nt SELECT, it is
22c60 20 61 6e 20 65 72 72 6f 72 2e 20 5e 45 61 63 68   an error. ^Each
22c70 20 74 65 72 6d 20 6f 66 20 74 68 65 20 4f 52 44   term of the ORD
22c80 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a  ER BY clause is.
22c90 70 72 6f 63 65 73 73 65 64 20 73 65 70 61 72 61  processed separa
22ca0 74 65 6c 79 20 61 6e 64 20 6d 61 79 20 62 65 20  tely and may be 
22cb0 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 20  matched against 
22cc0 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66  result columns f
22cd0 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 0a 53 45  rom different.SE
22ce0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
22cf0 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  in the compound.
22d00 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49 4d  </p>..<p>The LIM
22d10 49 54 20 63 6c 61 75 73 65 20 69 73 20 75 73 65  IT clause is use
22d20 64 20 74 6f 20 70 6c 61 63 65 20 61 6e 20 75 70  d to place an up
22d30 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
22d40 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a   number of rows.
22d50 72 65 74 75 72 6e 65 64 20 62 79 20 61 20 53 45  returned by a SE
22d60 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
22d70 5e 41 6e 79 20 73 63 61 6c 61 72 20 65 78 70 72  ^Any scalar expr
22d80 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 75 73  ession may be us
22d90 65 64 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49 54  ed in the .LIMIT
22da0 20 63 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e 67   clause, so long
22db0 20 61 73 20 69 74 20 65 76 61 6c 75 61 74 65 73   as it evaluates
22dc0 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 6f   to an integer o
22dd0 72 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 63  r a value that c
22de0 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79  an be.losslessly
22df0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
22e00 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 74 68   integer. ^If th
22e10 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
22e20 6c 75 61 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c  luates to a NULL
22e30 20 0a 76 61 6c 75 65 20 6f 72 20 61 6e 79 20 6f   .value or any o
22e40 74 68 65 72 20 76 61 6c 75 65 20 74 68 61 74 20  ther value that 
22e50 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
22e60 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
22e70 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 6e  o an integer, an
22e80 0a 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e  .error is return
22e90 65 64 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d 49  ed. ^If the LIMI
22ea0 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  T expression eva
22eb0 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61  luates to a nega
22ec0 74 69 76 65 20 76 61 6c 75 65 2c 0a 74 68 65 6e  tive value,.then
22ed0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70 70   there is no upp
22ee0 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20  er bound on the 
22ef0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72  number of rows r
22f00 65 74 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72 77  eturned. ^Otherw
22f10 69 73 65 2c 20 74 68 65 0a 53 45 4c 45 43 54 20  ise, the.SELECT 
22f20 72 65 74 75 72 6e 73 20 74 68 65 20 66 69 72 73  returns the firs
22f30 74 20 4e 20 72 6f 77 73 20 6f 66 20 69 74 73 20  t N rows of its 
22f40 72 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79 2c  result set only,
22f50 20 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20   where N is the 
22f60 76 61 6c 75 65 0a 74 68 61 74 20 74 68 65 20 4c  value.that the L
22f70 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20  IMIT expression 
22f80 65 76 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e 4f  evaluates to. ^O
22f90 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43 54  r, if the SELECT
22fa0 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
22fb0 0a 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61  .return less tha
22fc0 6e 20 4e 20 72 6f 77 73 20 77 69 74 68 6f 75 74  n N rows without
22fd0 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
22fe0 20 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65   then the entire
22ff0 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 0a 72   result set is.r
23000 65 74 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54  eturned. ..<p>^T
23010 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 74  he expression at
23020 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 6f 70  tached to the op
23030 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63 6c  tional OFFSET cl
23040 61 75 73 65 20 74 68 61 74 20 6d 61 79 20 66 6f  ause that may fo
23050 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c 61  llow a.LIMIT cla
23060 75 73 65 20 6d 75 73 74 20 61 6c 73 6f 20 65 76  use must also ev
23070 61 6c 75 61 74 65 20 74 6f 20 61 6e 20 69 6e 74  aluate to an int
23080 65 67 65 72 2c 20 6f 72 20 61 20 76 61 6c 75 65  eger, or a value
23090 20 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73   that can be.los
230a0 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
230b0 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e  d to an integer.
230c0 20 5e 49 66 20 61 6e 20 65 78 70 72 65 73 73 69   ^If an expressi
230d0 6f 6e 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54  on has an OFFSET
230e0 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74 68   clause,.then th
230f0 65 20 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61  e first M rows a
23100 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
23110 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 72  the result set r
23120 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
23130 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20  ELECT.statement 
23140 61 6e 64 20 74 68 65 20 6e 65 78 74 20 4e 20 72  and the next N r
23150 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64  ows are returned
23160 2c 20 77 68 65 72 65 20 4d 20 61 6e 64 20 4e 20  , where M and N 
23170 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  are the values t
23180 68 61 74 0a 74 68 65 20 4f 46 46 53 45 54 20 61  hat.the OFFSET a
23190 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
231a0 20 65 76 61 6c 75 61 74 65 20 74 6f 2c 20 72 65   evaluate to, re
231b0 73 70 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72 2c  spectively. ^Or,
231c0 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 0a 77   if the SELECT.w
231d0 6f 75 6c 64 20 72 65 74 75 72 6e 20 6c 65 73 73  ould return less
231e0 20 74 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20 69   than M+N rows i
231f0 66 20 69 74 20 64 69 64 20 6e 6f 74 20 68 61 76  f it did not hav
23200 65 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  e a LIMIT clause
23210 2c 20 74 68 65 6e 20 74 68 65 0a 66 69 72 73 74  , then the.first
23220 20 4d 20 72 6f 77 73 20 61 72 65 20 73 6b 69 70   M rows are skip
23230 70 65 64 20 61 6e 64 20 74 68 65 20 72 65 6d 61  ped and the rema
23240 69 6e 69 6e 67 20 72 6f 77 73 20 28 69 66 20 61  ining rows (if a
23250 6e 79 29 20 61 72 65 20 72 65 74 75 72 6e 65 64  ny) are returned
23260 2e 20 5e 49 66 20 74 68 65 0a 4f 46 46 53 45 54  . ^If the.OFFSET
23270 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65   clause evaluate
23280 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20  s to a negative 
23290 76 61 6c 75 65 2c 20 74 68 65 20 72 65 73 75 6c  value, the resul
232a0 74 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  ts are the same 
232b0 61 73 20 69 66 20 69 74 0a 68 61 64 20 65 76 61  as if it.had eva
232c0 6c 75 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a  luated to zero..
232d0 0a 3c 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66 20  .<p>^Instead of 
232e0 61 20 73 65 70 61 72 61 74 65 20 4f 46 46 53 45  a separate OFFSE
232f0 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 4c 49  T clause, the LI
23300 4d 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20 73  MIT clause may s
23310 70 65 63 69 66 79 20 74 77 6f 0a 73 63 61 6c 61  pecify two.scala
23320 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 65  r expressions se
23330 70 61 72 61 74 65 64 20 62 79 20 61 20 63 6f 6d  parated by a com
23340 6d 61 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73  ma. ^In this cas
23350 65 2c 20 74 68 65 20 66 69 72 73 74 20 65 78 70  e, the first exp
23360 72 65 73 73 69 6f 6e 0a 69 73 20 75 73 65 64 20  ression.is used 
23370 61 73 20 74 68 65 20 4f 46 46 53 45 54 20 65 78  as the OFFSET ex
23380 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65  pression and the
23390 20 73 65 63 6f 6e 64 20 61 73 20 74 68 65 20 4c   second as the L
233a0 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  IMIT expression.
233b0 0a 54 68 69 73 20 69 73 20 63 6f 75 6e 74 65 72  .This is counter
233c0 2d 69 6e 74 75 69 74 69 76 65 2c 20 61 73 20 77  -intuitive, as w
233d0 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20 4f 46  hen using the OF
233e0 46 53 45 54 20 63 6c 61 75 73 65 20 74 68 65 20  FSET clause the 
233f0 73 65 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74 77  second of.the tw
23400 6f 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73  o expressions is
23410 20 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20   the OFFSET and 
23420 74 68 65 20 66 69 72 73 74 20 74 68 65 20 4c 49  the first the LI
23430 4d 49 54 2e 20 54 68 69 73 20 69 73 20 69 6e 74  MIT. This is int
23440 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61  entional.- it ma
23450 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69 62  ximizes compatib
23460 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65 72  ility with other
23470 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 73 79   SQL database sy
23480 73 74 65 6d 73 2e 0a 0a 3c 74 63 6c 3e 0a 23 23  stems...<tcl>.##
23490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
234a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
234b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
234c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
234d0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
234e0 74 69 6f 6e 20 55 50 44 41 54 45 20 75 70 64 61  tion UPDATE upda
234f0 74 65 20 7b 55 50 44 41 54 45 20 2a 55 50 44 41  te {UPDATE *UPDA
23500 54 45 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  TEs}..BubbleDiag
23510 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 20  ram update-stmt 
23520 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
23530 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d  qualified-table-
23540 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  name.</tcl>..<p>
23550 5e 41 6e 20 55 50 44 41 54 45 20 73 74 61 74 65  ^An UPDATE state
23560 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
23570 6d 6f 64 69 66 79 20 61 20 73 75 62 73 65 74 20  modify a subset 
23580 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 73 74  of the values st
23590 6f 72 65 64 20 69 6e 20 0a 7a 65 72 6f 20 6f 72  ored in .zero or
235a0 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68   more rows of th
235b0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
235c0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
235d0 68 65 20 0a 3c 69 3e 71 75 61 6c 69 66 69 65 64  he .<i>qualified
235e0 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20  -table-name</i> 
235f0 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
23600 74 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  t of the UPDATE 
23610 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e  statement...<p>^
23620 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  If the UPDATE st
23630 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74  atement does not
23640 20 68 61 76 65 20 61 20 57 48 45 52 45 20 63 6c   have a WHERE cl
23650 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77 73 20 69  ause, all rows i
23660 6e 20 74 68 65 0a 74 61 62 6c 65 20 61 72 65 20  n the.table are 
23670 6d 6f 64 69 66 69 65 64 20 62 79 20 74 68 65 20  modified by the 
23680 55 50 44 41 54 45 2e 20 5e 4f 74 68 65 72 77 69  UPDATE. ^Otherwi
23690 73 65 2c 20 74 68 65 20 55 50 44 41 54 45 20 61  se, the UPDATE a
236a0 66 66 65 63 74 73 20 6f 6e 6c 79 20 74 68 6f 73  ffects only thos
236b0 65 0a 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  e.rows for which
236c0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65   the result of e
236d0 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 57 48  valuating the WH
236e0 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65  ERE clause expre
236f0 73 73 69 6f 6e 20 61 73 20 61 20 0a 5b 62 6f 6f  ssion as a .[boo
23700 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c  lean expression|
23710 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
23720 6f 6e 20 69 73 20 74 72 75 65 5d 2e 20 5e 49 74  on is true]. ^It
23730 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72   is not an error
23740 20 69 66 20 74 68 65 0a 57 48 45 52 45 20 63 6c   if the.WHERE cl
23750 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 65 76  ause does not ev
23760 61 6c 75 61 74 65 20 74 6f 20 74 72 75 65 20 66  aluate to true f
23770 6f 72 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68  or any row in th
23780 65 20 74 61 62 6c 65 20 2d 20 74 68 69 73 20 6a  e table - this j
23790 75 73 74 0a 6d 65 61 6e 73 20 74 68 61 74 20 74  ust.means that t
237a0 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
237b0 65 6e 74 20 61 66 66 65 63 74 73 20 7a 65 72 6f  ent affects zero
237c0 20 72 6f 77 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d   rows...<p>The m
237d0 6f 64 69 66 69 63 61 74 69 6f 6e 73 20 6d 61 64  odifications mad
237e0 65 20 74 6f 20 65 61 63 68 20 72 6f 77 20 61 66  e to each row af
237f0 66 65 63 74 65 64 20 62 79 20 61 6e 20 55 50 44  fected by an UPD
23800 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 72  ATE statement ar
23810 65 0a 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  e.determined by 
23820 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69  the list of assi
23830 67 6e 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e  gnments followin
23840 67 20 74 68 65 20 53 45 54 20 6b 65 79 77 6f 72  g the SET keywor
23850 64 2e 20 45 61 63 68 0a 61 73 73 69 67 6e 6d 65  d. Each.assignme
23860 6e 74 20 73 70 65 63 69 66 69 65 73 20 61 20 63  nt specifies a c
23870 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68  olumn name to th
23880 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20 65 71  e left of the eq
23890 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 0a  uals sign and a.
238a0 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
238b0 6e 20 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20  n to the right. 
238c0 5e 46 6f 72 20 65 61 63 68 20 61 66 66 65 63 74  ^For each affect
238d0 65 64 20 72 6f 77 2c 20 74 68 65 20 6e 61 6d 65  ed row, the name
238e0 64 20 63 6f 6c 75 6d 6e 73 0a 61 72 65 20 73 65  d columns.are se
238f0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20  t to the values 
23900 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74  found by evaluat
23910 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
23920 6e 64 69 6e 67 20 73 63 61 6c 61 72 20 0a 65 78  nding scalar .ex
23930 70 72 65 73 73 69 6f 6e 73 2e 20 5e 49 66 20 61  pressions. ^If a
23940 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e   single column-n
23950 61 6d 65 20 61 70 70 65 61 72 73 20 6d 6f 72 65  ame appears more
23960 20 74 68 61 6e 20 6f 6e 63 65 20 69 6e 20 74 68   than once in th
23970 65 20 6c 69 73 74 20 6f 66 0a 61 73 73 69 67 6e  e list of.assign
23980 6d 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  ment expressions
23990 2c 20 61 6c 6c 20 62 75 74 20 74 68 65 20 72 69  , all but the ri
239a0 67 68 74 6d 6f 73 74 20 6f 63 63 75 72 65 6e 63  ghtmost occurenc
239b0 65 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43  e is ignored. ^C
239c0 6f 6c 75 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e  olumns.that do n
239d0 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  ot appear in the
239e0 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d   list of assignm
239f0 65 6e 74 73 20 61 72 65 20 6c 65 66 74 20 75 6e  ents are left un
23a00 6d 6f 64 69 66 69 65 64 2e 20 5e 54 68 65 20 73  modified. ^The s
23a10 63 61 6c 61 72 0a 65 78 70 72 65 73 73 69 6f 6e  calar.expression
23a20 73 20 6d 61 79 20 72 65 66 65 72 20 74 6f 20 63  s may refer to c
23a30 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f  olumns of the ro
23a40 77 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 2e  w being updated.
23a50 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 20 61   ^In this case a
23a60 6c 6c 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73  ll.scalar expres
23a70 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61  sions are evalua
23a80 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61  ted before any a
23a90 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d  ssignments are m
23aa0 61 64 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70  ade...<p>^The op
23ab0 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d  tional conflict-
23ac0 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68  clause allows th
23ad0 65 20 75 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61  e user to nomina
23ae0 74 65 20 61 20 73 70 65 63 69 66 69 63 0a 63 6f  te a specific.co
23af0 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63  nstraint conflic
23b00 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
23b10 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75  orithm to use du
23b20 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 55 50  ring this one UP
23b30 44 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65  DATE command..Re
23b40 66 65 72 20 74 6f 20 74 68 65 20 73 65 63 74 69  fer to the secti
23b50 6f 6e 20 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20  on entitled [ON 
23b60 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64  CONFLICT] for ad
23b70 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
23b80 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72  tion...<h3>Restr
23b90 69 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54  ictions on UPDAT
23ba0 45 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74  E Statements Wit
23bb0 68 69 6e 20 43 52 45 41 54 45 20 54 52 49 47 47  hin CREATE TRIGG
23bc0 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ER</h3>..<p>The 
23bd0 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74 69  following additi
23be0 6f 6e 61 6c 20 73 79 6e 74 61 78 20 72 65 73 74  onal syntax rest
23bf0 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74  rictions apply t
23c00 6f 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  o UPDATE stateme
23c10 6e 74 73 20 74 68 61 74 0a 6f 63 63 75 72 20 77  nts that.occur w
23c20 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f  ithin the body o
23c30 66 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47  f a [CREATE TRIG
23c40 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  GER] statement. 
23c50 20 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70   ..<ul>.  <li><p
23c60 3e 5e 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e  >^The <i>table-n
23c70 61 6d 65 3c 2f 69 3e 20 73 70 65 63 69 66 69 65  ame</i> specifie
23c80 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
23c90 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
23ca0 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 61 20   within.      a 
23cb0 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73  trigger body mus
23cc0 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64  t be unqualified
23cd0 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72  . ^(In other wor
23ce0 64 73 2c 20 74 68 65 0a 20 20 20 20 20 20 3c 69  ds, the.      <i
23cf0 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f  >database-name</
23d00 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69  i><b>.</b> prefi
23d10 78 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  x on the table n
23d20 61 6d 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  ame of the UPDAT
23d30 45 20 69 73 0a 20 20 20 20 20 20 6e 6f 74 20 61  E is.      not a
23d40 6c 6c 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72  llowed within tr
23d50 69 67 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65 73  iggers.)^ ^Unles
23d60 73 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77  s the table to w
23d70 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
23d80 0a 20 20 20 20 20 20 69 73 20 61 74 74 61 63 68  .      is attach
23d90 65 64 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d  ed is in the TEM
23da0 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 20  P database, the 
23db0 74 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61  table being upda
23dc0 74 65 64 20 62 79 20 74 68 65 0a 20 20 20 20 20  ted by the.     
23dd0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
23de0 20 6d 75 73 74 20 72 65 73 69 64 65 20 69 6e 20   must reside in 
23df0 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
23e00 65 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65  e as it. ^If the
23e10 20 74 61 62 6c 65 0a 20 20 20 20 20 20 74 6f 20   table.      to 
23e20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
23e30 72 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73  r is attached is
23e40 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74   in the TEMP dat
23e50 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a  abase, then the.
23e60 20 20 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65        unqualifie
23e70 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
23e80 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74 65  ble being update
23e90 64 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e  d is resolved in
23ea0 20 74 68 65 20 73 61 6d 65 20 77 61 79 0a 20 20   the same way.  
23eb0 20 20 20 20 61 73 20 69 74 20 69 73 20 66 6f 72      as it is for
23ec0 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61   a top-level sta
23ed0 74 65 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63  tement (by searc
23ee0 68 69 6e 67 20 66 69 72 73 74 20 74 68 65 20 54  hing first the T
23ef0 45 4d 50 20 64 61 74 61 62 61 73 65 2c 0a 20 20  EMP database,.  
23f00 20 20 20 20 74 68 65 6e 20 74 68 65 20 6d 61 69      then the mai
23f10 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  n database, then
23f20 20 61 6e 79 20 6f 74 68 65 72 20 64 61 74 61 62   any other datab
23f30 61 73 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65  ases in the orde
23f40 72 20 74 68 65 79 20 77 65 72 65 0a 20 20 20 20  r they were.    
23f50 20 20 61 74 74 61 63 68 65 64 29 2e 0a 0a 20 20    attached)...  
23f60 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45  <li><p>^The INDE
23f70 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49  XED BY and NOT I
23f80 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61  NDEXED clauses a
23f90 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f  re not allowed o
23fa0 6e 20 55 50 44 41 54 45 0a 20 20 20 20 20 20 73  n UPDATE.      s
23fb0 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
23fc0 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a   triggers.</p>..
23fd0 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49    <li><p>^The LI
23fe0 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59  MIT and ORDER BY
23ff0 20 63 6c 61 75 73 65 73 20 66 6f 72 20 55 50 44   clauses for UPD
24000 41 54 45 20 61 72 65 20 75 6e 73 75 70 70 6f 72  ATE are unsuppor
24010 74 65 64 20 77 69 74 68 69 6e 0a 20 20 20 20 20  ted within.     
24020 20 74 72 69 67 67 65 72 73 2c 20 72 65 67 61 72   triggers, regar
24030 64 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d  dless of the com
24040 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  pilation options
24050 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53   used to build S
24060 51 4c 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68  QLite..</ul>..<h
24070 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54  3>Optional LIMIT
24080 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 43 6c   and ORDER BY Cl
24090 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  auses</h3>..<p>^
240a0 28 49 66 20 53 51 4c 69 74 65 20 69 73 20 62 75  (If SQLite is bu
240b0 69 6c 74 20 77 69 74 68 20 74 68 65 20 5b 53 51  ilt with the [SQ
240c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
240d0 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d  TE_DELETE_LIMIT]
240e0 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70  .compile-time op
240f0 74 69 6f 6e 20 74 68 65 6e 20 74 68 65 20 73 79  tion then the sy
24100 6e 74 61 78 20 6f 66 20 74 68 65 20 55 50 44 41  ntax of the UPDA
24110 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  TE statement is 
24120 65 78 74 65 6e 64 65 64 0a 77 69 74 68 20 6f 70  extended.with op
24130 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20  tional ORDER BY 
24140 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  and LIMIT clause
24150 73 29 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  s)^ as follows:<
24160 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65  /p>..<tcl>Bubble
24170 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73  Diagram update-s
24180 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c  tmt-limited</tcl
24190 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44  >..<p>^If an UPD
241a0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ATE statement ha
241b0 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
241c0 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  , the maximum nu
241d0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
241e0 74 0a 77 69 6c 6c 20 62 65 20 75 70 64 61 74 65  t.will be update
241f0 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76  d is found by ev
24200 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63 63  aluating the acc
24210 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73  ompanying expres
24220 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67  sion and casting
24230 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  .it to an intege
24240 72 20 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67 61  r value. ^A nega
24250 74 69 76 65 20 76 61 6c 75 65 20 69 73 20 69 6e  tive value is in
24260 74 65 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f  terpreted as "no
24270 20 6c 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66   limit"...<p>^If
24280 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65   the LIMIT expre
24290 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
242a0 74 6f 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  to non-negative 
242b0 76 61 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61  value <i>N</i> a
242c0 6e 64 20 74 68 65 0a 55 50 44 41 54 45 20 73 74  nd the.UPDATE st
242d0 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f  atement has an O
242e0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
242f0 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68  then all rows th
24300 61 74 20 77 6f 75 6c 64 20 62 65 20 75 70 64 61  at would be upda
24310 74 65 64 20 69 6e 0a 74 68 65 20 61 62 73 65 6e  ted in.the absen
24320 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ce of the LIMIT 
24330 63 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74 65  clause are sorte
24340 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  d according to t
24350 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  he ORDER BY and 
24360 74 68 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c 2f  the.first <i>N</
24370 69 3e 20 75 70 64 61 74 65 64 2e 20 5e 28 49 66  i> updated. ^(If
24380 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
24390 65 6d 65 6e 74 20 61 6c 73 6f 20 68 61 73 20 61  ement also has a
243a0 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c  n OFFSET clause,
243b0 0a 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69  .then it is simi
243c0 6c 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20  larly evaluated 
243d0 61 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 20 69  and cast to an i
243e0 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66  nteger value. If
243f0 20 74 68 65 20 4f 46 46 53 45 54 0a 65 78 70 72   the OFFSET.expr
24400 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
24410 20 74 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69   to a non-negati
24420 76 65 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69  ve value <i>M</i
24430 3e 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73  >, then the firs
24440 74 20 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20  t <i>M</i>.rows 
24450 61 72 65 20 73 6b 69 70 70 65 64 20 61 6e 64 20  are skipped and 
24460 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69  the following <i
24470 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64 61  >N</i> rows upda
24480 74 65 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a 0a  ted instead.)^..
24490 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54  <p>^If the UPDAT
244a0 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  E statement has 
244b0 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  no ORDER BY clau
244c0 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77  se, then all row
244d0 73 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20  s that.would be 
244e0 75 70 64 61 74 65 64 20 69 6e 20 74 68 65 20 61  updated in the a
244f0 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49  bsence of the LI
24500 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 61  MIT clause are a
24510 73 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61  ssembled in an.a
24520 72 62 69 74 72 61 72 79 20 6f 72 64 65 72 20 62  rbitrary order b
24530 65 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74  efore applying t
24540 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46  he LIMIT and OFF
24550 53 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64  SET clauses to d
24560 65 74 65 72 6d 69 6e 65 20 0a 77 68 69 63 68 20  etermine .which 
24570 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75 70 64  are actually upd
24580 61 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20  ated...<p>^(The 
24590 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
245a0 6f 6e 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  on an UPDATE sta
245b0 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 6f  tement is used o
245c0 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  nly to determine
245d0 20 77 68 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c   which.rows fall
245e0 20 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49   within the LIMI
245f0 54 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20  T. The order in 
24600 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d  which rows are m
24610 6f 64 69 66 69 65 64 20 69 73 20 61 72 62 69 74  odified is arbit
24620 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20  rary.and is not 
24630 69 6e 66 6c 75 65 6e 63 65 64 20 62 79 20 74 68  influenced by th
24640 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
24650 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  e.)^..<tcl>.####
24660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
246a0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
246b0 6f 6e 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d  on VACUUM vacuum
246c0 20 56 41 43 55 55 4d 0a 0a 42 75 62 62 6c 65 44   VACUUM..BubbleD
246d0 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d 73 74  iagram vacuum-st
246e0 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
246f0 0a 20 20 54 68 65 20 56 41 43 55 55 4d 20 63 6f  .  The VACUUM co
24700 6d 6d 61 6e 64 20 72 65 62 75 69 6c 64 73 20 74  mmand rebuilds t
24710 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  he entire databa
24720 73 65 2e 20 54 68 65 72 65 20 61 72 65 20 73 65  se. There are se
24730 76 65 72 61 6c 20 0a 20 20 72 65 61 73 6f 6e 73  veral .  reasons
24740 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   an application 
24750 6d 69 67 68 74 20 64 6f 20 74 68 69 73 3a 0a 0a  might do this:..
24760 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20  <ul>.  <li> <p> 
24770 5e 55 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69  ^Unless SQLite i
24780 73 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22 61 75  s running in "au
24790 74 6f 5f 76 61 63 75 75 6d 3d 46 55 4c 4c 22 20  to_vacuum=FULL" 
247a0 6d 6f 64 65 2c 20 77 68 65 6e 20 61 20 6c 61 72  mode, when a lar
247b0 67 65 0a 20 20 20 20 20 61 6d 6f 75 6e 74 20 6f  ge.     amount o
247c0 66 20 64 61 74 61 20 69 73 20 64 65 6c 65 74 65  f data is delete
247d0 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
247e0 61 73 65 20 66 69 6c 65 20 69 74 20 6c 65 61 76  ase file it leav
247f0 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74 79 0a  es behind empty.
24800 20 20 20 20 20 73 70 61 63 65 2c 20 6f 72 20 22       space, or "
24810 66 72 65 65 22 20 64 61 74 61 62 61 73 65 20 70  free" database p
24820 61 67 65 73 2e 20 54 68 69 73 20 6d 65 61 6e 73  ages. This means
24830 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
24840 6c 65 20 6d 69 67 68 74 0a 20 20 20 20 20 62 65  le might.     be
24850 20 6c 61 72 67 65 72 20 74 68 61 6e 20 73 74 72   larger than str
24860 69 63 74 6c 79 20 6e 65 63 65 73 73 61 72 79 2e  ictly necessary.
24870 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d   ^Running VACUUM
24880 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65 20   to rebuild the 
24890 0a 20 20 20 20 20 64 61 74 61 62 61 73 65 20 72  .     database r
248a0 65 63 6c 61 69 6d 73 20 74 68 69 73 20 73 70 61  eclaims this spa
248b0 63 65 20 61 6e 64 20 72 65 64 75 63 65 73 20 74  ce and reduces t
248c0 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  he size of the d
248d0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 0a 20  atabase file... 
248e0 20 3c 6c 69 3e 20 3c 70 3e 20 5e 46 72 65 71 75   <li> <p> ^Frequ
248f0 65 6e 74 20 69 6e 73 65 72 74 73 2c 20 75 70 64  ent inserts, upd
24900 61 74 65 73 2c 20 61 6e 64 20 64 65 6c 65 74 65  ates, and delete
24910 73 20 63 61 6e 20 63 61 75 73 65 20 74 68 65 20  s can cause the 
24920 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20  database file.  
24930 20 20 20 74 6f 20 62 65 63 6f 6d 65 20 66 72 61     to become fra
24940 67 6d 65 6e 74 65 64 20 2d 20 77 68 65 72 65 20  gmented - where 
24950 64 61 74 61 20 66 6f 72 20 61 20 73 69 6e 67 6c  data for a singl
24960 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
24970 20 69 73 20 73 63 61 74 74 65 72 65 64 20 0a 20   is scattered . 
24980 20 20 20 20 61 72 6f 75 6e 64 20 74 68 65 20 64      around the d
24990 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e 52  atabase file. ^R
249a0 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 65 6e  unning VACUUM en
249b0 73 75 72 65 73 20 74 68 61 74 20 65 61 63 68 20  sures that each 
249c0 74 61 62 6c 65 20 61 6e 64 0a 20 20 20 20 20 69  table and.     i
249d0 6e 64 65 78 20 69 73 20 6c 61 72 67 65 6c 79 20  ndex is largely 
249e0 73 74 6f 72 65 64 20 63 6f 6e 74 69 67 75 6f 75  stored contiguou
249f0 73 6c 79 20 77 69 74 68 69 6e 20 74 68 65 20 64  sly within the d
24a00 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e 49  atabase file. ^I
24a10 6e 20 73 6f 6d 65 0a 20 20 20 20 20 63 61 73 65  n some.     case
24a20 73 2c 20 56 41 43 55 55 4d 20 6d 61 79 20 61 6c  s, VACUUM may al
24a30 73 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  so reduce the nu
24a40 6d 62 65 72 20 6f 66 20 70 61 72 74 69 61 6c 6c  mber of partiall
24a50 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 69  y filled pages i
24a60 6e 0a 20 20 20 20 20 74 68 65 20 64 61 74 61 62  n.     the datab
24a70 61 73 65 2c 20 72 65 64 75 63 69 6e 67 20 74 68  ase, reducing th
24a80 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61  e size of the da
24a90 74 61 62 61 73 65 20 66 69 6c 65 20 66 75 72 74  tabase file furt
24aa0 68 65 72 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  her...  <li> <p>
24ab0 20 5e 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 65 20   ^Normally, the 
24ac0 64 61 74 61 62 61 73 65 20 5b 70 61 67 65 5f 73  database [page_s
24ad0 69 7a 65 5d 20 61 6e 64 20 77 68 65 74 68 65 72  ize] and whether
24ae0 20 6f 72 20 6e 6f 74 20 74 68 65 20 64 61 74 61   or not the data
24af0 62 61 73 65 0a 20 20 20 20 20 73 75 70 70 6f 72  base.     suppor
24b00 74 73 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  ts [auto_vacuum]
24b10 20 6d 75 73 74 20 62 65 20 63 6f 6e 66 69 67 75   must be configu
24b20 72 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 64  red before the d
24b30 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 0a  atabase file is.
24b40 20 20 20 20 20 61 63 74 75 61 6c 6c 79 20 63 72       actually cr
24b50 65 61 74 65 64 2e 20 5e 48 6f 77 65 76 65 72 2c  eated. ^However,
24b60 20 77 68 65 6e 20 6e 6f 74 20 69 6e 20 5b 77 72   when not in [wr
24b70 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d  ite-ahead log] m
24b80 6f 64 65 2c 20 74 68 65 20 0a 20 20 20 20 20 5b  ode, the .     [
24b90 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 2f 6f  page_size] and/o
24ba0 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  r [auto_vacuum] 
24bb0 70 72 6f 70 65 72 74 69 65 73 20 6f 66 20 61 6e  properties of an
24bc0 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61   existing databa
24bd0 73 65 20 6d 61 79 20 62 65 0a 20 20 20 20 20 63  se may be.     c
24be0 68 61 6e 67 65 64 20 62 79 20 75 73 69 6e 67 20  hanged by using 
24bf0 74 68 65 20 5b 70 61 67 65 5f 73 69 7a 65 20 70  the [page_size p
24c00 72 61 67 6d 61 7c 70 61 67 65 5f 73 69 7a 65 5d  ragma|page_size]
24c10 20 20 61 6e 64 2f 6f 72 20 0a 20 20 20 20 20 5b    and/or .     [
24c20 61 75 74 6f 5f 76 61 63 75 75 6d 7c 70 72 61 67  auto_vacuum|prag
24c30 6d 61 20 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  ma auto_vacuum] 
24c40 70 72 61 67 6d 61 73 20 61 6e 64 20 74 68 65 6e  pragmas and then
24c50 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 56 41 43   immediately VAC
24c60 55 55 4d 69 6e 67 0a 20 20 20 20 20 74 68 65 20  UUMing.     the 
24c70 64 61 74 61 62 61 73 65 2e 20 5e 57 68 65 6e 20  database. ^When 
24c80 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20  in [write-ahead 
24c90 6c 6f 67 5d 20 6d 6f 64 65 2c 20 6f 6e 6c 79 20  log] mode, only 
24ca0 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  the [auto_vacuum
24cb0 5d 0a 20 20 20 20 20 73 75 70 70 6f 72 74 20 70  ].     support p
24cc0 72 6f 70 65 72 74 79 20 63 61 6e 20 62 65 20 63  roperty can be c
24cd0 68 61 6e 67 65 64 20 75 73 69 6e 67 20 56 41 43  hanged using VAC
24ce0 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  UUM..</ul>..<p>^
24cf0 28 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72  (VACUUM only wor
24d00 6b 73 20 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64  ks on the main d
24d10 61 74 61 62 61 73 65 2e 20 49 74 20 69 73 20 6e  atabase. It is n
24d20 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 56  ot possible to V
24d30 41 43 55 55 4d 20 61 6e 0a 61 74 74 61 63 68 65  ACUUM an.attache
24d40 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  d database file.
24d50 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55  )^..<p>^The VACU
24d60 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73  UM command works
24d70 20 62 79 20 63 6f 70 79 69 6e 67 20 74 68 65 20   by copying the 
24d80 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
24d90 64 61 74 61 62 61 73 65 20 69 6e 74 6f 0a 61 20  database into.a 
24da0 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61  temporary databa
24db0 73 65 20 66 69 6c 65 20 61 6e 64 20 74 68 65 6e  se file and then
24dc0 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68 65   overwriting the
24dd0 20 6f 72 69 67 69 6e 61 6c 20 77 69 74 68 20 74   original with t
24de0 68 65 20 0a 63 6f 6e 74 65 6e 74 73 20 6f 66 20  he .contents of 
24df0 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69  the temporary fi
24e00 6c 65 2e 20 5e 57 68 65 6e 20 6f 76 65 72 77 72  le. ^When overwr
24e10 69 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e  iting the origin
24e20 61 6c 2c 20 61 20 72 6f 6c 6c 62 61 63 6b 0a 6a  al, a rollback.j
24e30 6f 75 72 6e 61 6c 20 6f 72 20 5b 77 72 69 74 65  ournal or [write
24e40 2d 61 68 65 61 64 20 6c 6f 67 5d 20 57 41 4c 20  -ahead log] WAL 
24e50 66 69 6c 65 20 69 73 20 75 73 65 64 20 6a 75 73  file is used jus
24e60 74 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  t as it would be
24e70 20 66 6f 72 20 61 6e 79 0a 6f 74 68 65 72 20 64   for any.other d
24e80 61 74 61 62 61 73 65 20 74 72 61 6e 73 61 63 74  atabase transact
24e90 69 6f 6e 2e 20 5e 54 68 69 73 20 6d 65 61 6e 73  ion. ^This means
24ea0 20 74 68 61 74 20 77 68 65 6e 20 56 41 43 55 55   that when VACUU
24eb0 4d 69 6e 67 20 61 20 64 61 74 61 62 61 73 65 2c  Ming a database,
24ec0 20 0a 61 73 20 6d 75 63 68 20 61 73 20 74 77 69   .as much as twi
24ed0 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ce the size of t
24ee0 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61  he original data
24ef0 62 61 73 65 20 66 69 6c 65 20 69 73 20 72 65 71  base file is req
24f00 75 69 72 65 64 20 69 6e 20 66 72 65 65 0a 64 69  uired in free.di
24f10 73 6b 20 73 70 61 63 65 2e 0a 0a 3c 70 3e 5e 54  sk space...<p>^T
24f20 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
24f30 64 20 6d 61 79 20 63 68 61 6e 67 65 20 74 68 65  d may change the
24f40 20 5b 52 4f 57 49 44 20 7c 20 52 4f 57 49 44 73   [ROWID | ROWIDs
24f50 5d 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  ] of entries in 
24f60 61 6e 79 0a 74 61 62 6c 65 73 20 74 68 61 74 20  any.tables that 
24f70 64 6f 20 6e 6f 74 20 68 61 76 65 20 61 6e 20 65  do not have an e
24f80 78 70 6c 69 63 69 74 20 5b 49 4e 54 45 47 45 52  xplicit [INTEGER
24f90 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 3c   PRIMARY KEY]..<
24fa0 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 56 41 43 55 55  /p>..<p>^A VACUU
24fb0 4d 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74  M will fail if t
24fc0 68 65 72 65 20 69 73 20 61 6e 20 6f 70 65 6e 20  here is an open 
24fd0 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 6f 72 20  transaction, or 
24fe0 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 6e 65  if there are one
24ff0 20 6f 72 0a 6d 6f 72 65 20 61 63 74 69 76 65 20   or.more active 
25000 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77  SQL statements w
25010 68 65 6e 20 69 74 20 69 73 20 72 75 6e 2e 0a 0a  hen it is run...
25020 3c 70 3e 5e 28 41 73 20 6f 66 20 53 51 4c 69 74  <p>^(As of SQLit
25030 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61  e version 3.1, a
25040 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f  n alternative to
25050 20 75 73 69 6e 67 20 74 68 65 20 56 41 43 55 55   using the VACUU
25060 4d 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72 65 63  M command to.rec
25070 6c 61 69 6d 20 73 70 61 63 65 20 61 66 74 65 72  laim space after
25080 20 64 61 74 61 20 68 61 73 20 62 65 65 6e 20 64   data has been d
25090 65 6c 65 74 65 64 20 69 73 20 61 75 74 6f 2d 76  eleted is auto-v
250a0 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61 62  acuum mode, enab
250b0 6c 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b 61  led using.the [a
250c0 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67  uto_vacuum] prag
250d0 6d 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61 75 74  ma.)^ ^When [aut
250e0 6f 5f 76 61 63 75 75 6d 5d 20 69 73 20 65 6e 61  o_vacuum] is ena
250f0 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61 62  bled for a datab
25100 61 73 65 0a 66 72 65 65 20 70 61 67 65 73 20 6d  ase.free pages m
25110 61 79 20 62 65 20 72 65 63 6c 61 69 6d 65 64 20  ay be reclaimed 
25120 61 66 74 65 72 20 64 65 6c 65 74 69 6e 67 20 64  after deleting d
25130 61 74 61 2c 20 63 61 75 73 69 6e 67 20 74 68 65  ata, causing the
25140 20 66 69 6c 65 20 74 6f 20 73 68 72 69 6e 6b 2c   file to shrink,
25150 0a 77 69 74 68 6f 75 74 20 72 65 62 75 69 6c 64  .without rebuild
25160 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20 64  ing the entire d
25170 61 74 61 62 61 73 65 20 75 73 69 6e 67 20 56 41  atabase using VA
25180 43 55 55 4d 2e 20 20 48 6f 77 65 76 65 72 2c 20  CUUM.  However, 
25190 75 73 69 6e 67 0a 5b 61 75 74 6f 5f 76 61 63 75  using.[auto_vacu
251a0 75 6d 5d 20 63 61 6e 20 6c 65 61 64 20 74 6f 20  um] can lead to 
251b0 65 78 74 72 61 20 64 61 74 61 62 61 73 65 20 66  extra database f
251c0 69 6c 65 20 66 72 61 67 6d 65 6e 74 61 74 69 6f  ile fragmentatio
251d0 6e 2e 20 20 41 6e 64 20 5b 61 75 74 6f 5f 76 61  n.  And [auto_va
251e0 63 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20 63  cuum].does not c
251f0 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c 6c 79  ompact partially
25200 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 6f 66   filled pages of
25210 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 73   the database as
25220 20 56 41 43 55 55 4d 20 64 6f 65 73 2e 0a 0a 3c   VACUUM does...<
25230 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  /p>...<tcl>.####
25240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25280 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
25290 6f 6e 20 7b 49 4e 44 45 58 45 44 20 42 59 7d 20  on {INDEXED BY} 
252a0 69 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e 44 45  indexedby {{INDE
252b0 58 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e 44  XED BY} {NOT IND
252c0 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c  EXED}}..</tcl>.<
252d0 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42  p>^The INDEXED B
252e0 59 20 70 68 72 61 73 65 20 69 73 20 61 20 53 51  Y phrase is a SQ
252f0 4c 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 75 6e  L extension foun
25300 64 20 6f 6e 6c 79 20 69 6e 20 53 51 4c 69 74 65  d only in SQLite
25310 20 77 68 69 63 68 20 63 61 6e 0a 62 65 20 75 73   which can.be us
25320 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  ed to verify tha
25330 74 20 74 68 65 20 63 6f 72 72 65 63 74 20 69 6e  t the correct in
25340 64 69 63 65 73 20 61 72 65 20 62 65 69 6e 67 20  dices are being 
25350 75 73 65 64 20 6f 6e 20 61 20 5b 44 45 4c 45 54  used on a [DELET
25360 45 5d 2c 0a 5b 53 45 4c 45 43 54 5d 2c 20 6f 72  E],.[SELECT], or
25370 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d   [UPDATE] statem
25380 65 6e 74 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45  ent..^The INDEXE
25390 44 20 42 59 20 70 68 72 61 73 65 20 61 6c 77 61  D BY phrase alwa
253a0 79 73 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 6e  ys follows the n
253b0 61 6d 65 20 6f 66 20 61 20 74 61 62 6c 65 20 74  ame of a table t
253c0 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a  hat SQLite will.
253d0 62 65 20 72 65 61 64 69 6e 67 2e 20 20 54 68 65  be reading.  The
253e0 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61   INDEXED BY phra
253f0 73 65 20 63 61 6e 20 62 65 20 73 65 65 6e 20 69  se can be seen i
25400 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
25410 73 79 6e 74 61 78 0a 64 69 61 67 72 61 6d 73 3a  syntax.diagrams:
25420 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 42 75 62 62  </p>..<tcl>.Bubb
25430 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69 66  leDiagram qualif
25440 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 42  ied-table-name.B
25450 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 6e  ubbleDiagram sin
25460 67 6c 65 2d 73 6f 75 72 63 65 0a 3c 2f 74 63 6c  gle-source.</tcl
25470 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 49 4e 44 45  >..<p>^The "INDE
25480 58 45 44 20 42 59 20 69 6e 64 65 78 2d 6e 61 6d  XED BY index-nam
25490 65 22 20 63 6c 61 75 73 65 20 73 70 65 63 69 66  e" clause specif
254a0 69 65 73 20 74 68 61 74 20 74 68 65 20 6e 61 6d  ies that the nam
254b0 65 64 20 69 6e 64 65 78 0a 6d 75 73 74 20 62 65  ed index.must be
254c0 20 75 73 65 64 20 69 6e 20 6f 72 64 65 72 20 74   used in order t
254d0 6f 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75 65 73  o look up values
254e0 20 6f 6e 20 74 68 65 20 70 72 65 63 65 64 69 6e   on the precedin
254f0 67 20 74 61 62 6c 65 2e 0a 5e 49 66 20 69 6e 64  g table..^If ind
25500 65 78 2d 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74  ex-name does not
25510 20 65 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f 74   exist or cannot
25520 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
25530 20 71 75 65 72 79 2c 20 74 68 65 6e 0a 74 68 65   query, then.the
25540 20 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66 20   preparation of 
25550 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
25560 74 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20 22  t fails..^(The "
25570 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c 61  NOT INDEXED" cla
25580 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68  use specifies th
25590 61 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c  at no index shal
255a0 6c 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a 61  l be used when.a
255b0 63 63 65 73 73 69 6e 67 20 74 68 65 20 70 72 65  ccessing the pre
255c0 63 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e  ceding table, in
255d0 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20  cluding implied 
255e0 69 6e 64 69 63 65 73 20 63 72 65 61 74 65 20 62  indices create b
255f0 79 0a 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49  y.UNIQUE and PRI
25600 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61  MARY KEY constra
25610 69 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c 20  ints.  However, 
25620 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d  the INTEGER PRIM
25630 41 52 59 20 4b 45 59 0a 63 61 6e 20 73 74 69 6c  ARY KEY.can stil
25640 6c 20 62 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f  l be used to loo
25650 6b 20 75 70 20 65 6e 74 72 69 65 73 20 65 76 65  k up entries eve
25660 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45  n when "NOT INDE
25670 58 45 44 22 20 69 73 20 73 70 65 63 69 66 69 65  XED" is specifie
25680 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d  d.)^</p>..<p>Som
25690 65 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65  e SQL database e
256a0 6e 67 69 6e 65 73 20 70 72 6f 76 69 64 65 20 6e  ngines provide n
256b0 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22 68 69 6e  on-standard "hin
256c0 74 22 20 6d 65 63 68 61 6e 69 73 6d 73 20 77 68  t" mechanisms wh
256d0 69 63 68 0a 63 61 6e 20 62 65 20 75 73 65 64 20  ich.can be used 
256e0 74 6f 20 67 69 76 65 20 74 68 65 20 71 75 65 72  to give the quer
256f0 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75 65  y optimizer clue
25700 73 20 61 62 6f 75 74 20 77 68 61 74 20 69 6e 64  s about what ind
25710 69 63 65 73 20 69 74 20 73 68 6f 75 6c 64 0a 75  ices it should.u
25720 73 65 20 66 6f 72 20 61 20 70 61 72 74 69 63 75  se for a particu
25730 6c 61 72 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  lar statement.  
25740 54 68 65 20 49 4e 44 45 58 20 42 59 20 63 6c 61  The INDEX BY cla
25750 75 73 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73  use of SQLite is
25760 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61   .<em>not</em> a
25770 20 68 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69   hinting mechani
25780 73 6d 20 61 6e 64 20 69 74 20 73 68 6f 75 6c 64  sm and it should
25790 20 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73 20   not be used as 
257a0 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58  such..^The INDEX
257b0 45 44 20 42 59 20 63 6c 61 75 73 65 20 64 6f 65  ED BY clause doe
257c0 73 20 6e 6f 74 20 67 69 76 65 20 74 68 65 20 6f  s not give the o
257d0 70 74 69 6d 69 7a 65 72 20 68 69 6e 74 73 20 61  ptimizer hints a
257e0 62 6f 75 74 20 77 68 69 63 68 20 69 6e 64 65 78  bout which index
257f0 0a 74 6f 20 75 73 65 3b 20 69 74 20 67 69 76 65  .to use; it give
25800 73 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  s the optimizer 
25810 61 20 72 65 71 75 69 72 65 6d 65 6e 74 20 6f 66  a requirement of
25820 20 77 68 69 63 68 20 69 6e 64 65 78 20 74 6f 20   which index to 
25830 75 73 65 2e 0a 5e 49 66 20 74 68 65 20 71 75 65  use..^If the que
25840 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20  ry optimizer is 
25850 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68  unable to use th
25860 65 20 69 6e 64 65 78 20 73 70 65 63 69 66 69 65  e index specifie
25870 64 20 62 79 20 74 68 65 0a 49 4e 44 45 58 20 42  d by the.INDEX B
25880 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
25890 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20 66 61  he query will fa
258a0 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  il with an error
258b0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e  .</p>..<p>The IN
258c0 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
258d0 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20  is <em>not</em> 
258e0 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
258f0 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20 70   in tuning.the p
25900 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20  erformance of a 
25910 71 75 65 72 79 2e 20 20 54 68 65 20 69 6e 74 65  query.  The inte
25920 6e 74 20 6f 66 20 74 68 65 20 49 4e 44 45 58 45  nt of the INDEXE
25930 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 74  D BY clause is.t
25940 6f 20 72 61 69 73 65 20 61 20 72 75 6e 2d 74 69  o raise a run-ti
25950 6d 65 20 65 72 72 6f 72 20 69 66 20 61 20 73 63  me error if a sc
25960 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 73 75 63  hema change, suc
25970 68 20 61 73 20 64 72 6f 70 70 69 6e 67 20 6f 72  h as dropping or
25980 0a 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64  .creating an ind
25990 65 78 2c 20 63 61 75 73 65 73 20 74 68 65 20 71  ex, causes the q
259a0 75 65 72 79 20 70 6c 61 6e 20 66 6f 72 20 61 20  uery plan for a 
259b0 74 69 6d 65 2d 73 65 6e 73 69 74 69 76 65 20 71  time-sensitive q
259c0 75 65 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20  uery.to change. 
259d0 20 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20   The INDEXED BY 
259e0 63 6c 61 75 73 65 20 69 73 20 64 65 73 69 67 6e  clause is design
259f0 65 64 20 74 6f 20 68 65 6c 70 20 64 65 74 65 63  ed to help detec
25a00 74 0a 75 6e 64 65 73 69 72 61 62 6c 65 20 71 75  t.undesirable qu
25a10 65 72 79 20 70 6c 61 6e 20 63 68 61 6e 67 65 73  ery plan changes
25a20 20 64 75 72 69 6e 67 20 72 65 67 72 65 73 73 69   during regressi
25a30 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 44 65 76 65  on testing..Deve
25a40 6c 6f 70 65 72 73 20 61 72 65 20 61 64 6d 6f 6e  lopers are admon
25a50 69 73 68 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c  ished to omit al
25a60 6c 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44  l use of INDEXED
25a70 20 42 59 20 64 75 72 69 6e 67 0a 61 70 70 6c 69   BY during.appli
25a80 63 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69  cation design, i
25a90 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
25aa0 65 73 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69  esting, and tuni
25ab0 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58 45 44 20  ng.  If.INDEXED 
25ac0 42 59 20 69 73 20 74 6f 20 62 65 20 75 73 65 64  BY is to be used
25ad0 20 61 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75   at all, it shou
25ae0 6c 64 20 62 65 20 69 6e 73 65 72 74 65 64 20 61  ld be inserted a
25af0 74 20 74 68 65 20 76 65 72 79 0a 65 6e 64 20 6f  t the very.end o
25b00 66 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e  f the developmen
25b10 74 20 70 72 6f 63 65 73 73 20 77 68 65 6e 20 22  t process when "
25b20 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20  locking down" a 
25b30 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33  design.</p>..<h3
25b40 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a  >See Also:</h3>.
25b50 0a 3c 70 3e 54 68 65 20 5b 73 71 6c 69 74 65 33  .<p>The [sqlite3
25b60 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20  _stmt_status()] 
25b70 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20  C/C++ interface 
25b80 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 74 68  together with th
25b90 65 0a 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  e.[SQLITE_STMTST
25ba0 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54  ATUS_FULLSCAN_ST
25bb0 45 50 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f  EP] and [SQLITE_
25bc0 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d  STMTSTATUS_SORT]
25bd0 20 76 65 72 62 73 0a 63 61 6e 20 62 65 20 75 73   verbs.can be us
25be0 65 64 20 74 6f 20 64 65 74 65 63 74 20 61 74 20  ed to detect at 
25bf0 72 75 6e 2d 74 69 6d 65 20 77 68 65 6e 20 61 6e  run-time when an
25c00 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69   SQL statement i
25c10 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65 66 66  s not.making eff
25c20 65 63 74 69 76 65 20 75 73 65 20 6f 66 20 69 6e  ective use of in
25c30 64 69 63 65 73 2e 20 20 4d 61 6e 79 20 61 70 70  dices.  Many app
25c40 6c 69 63 61 74 69 6f 6e 73 20 6d 61 79 20 70 72  lications may pr
25c50 65 66 65 72 20 74 6f 0a 75 73 65 20 74 68 65 20  efer to.use the 
25c60 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74  [sqlite3_stmt_st
25c70 61 74 75 73 28 29 5d 20 69 6e 74 65 72 66 61 63  atus()] interfac
25c80 65 20 74 6f 20 64 65 74 65 63 74 20 69 6e 64 65  e to detect inde
25c90 78 20 6d 69 73 75 73 65 0a 72 61 74 68 65 72 20  x misuse.rather 
25ca0 74 68 61 6e 20 74 68 65 20 49 4e 44 45 58 45 44  than the INDEXED
25cb0 20 42 59 20 70 68 72 61 73 65 20 64 65 73 63 72   BY phrase descr
25cc0 69 62 65 64 20 68 65 72 65 2e 3c 2f 70 3e 0a 0a  ibed here.</p>..
25cd0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
25ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25d20 23 23 23 0a 23 20 41 20 6c 69 73 74 20 6f 66 20  ###.# A list of 
25d30 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61 73 74  keywords.  A ast
25d40 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61 66 74  erisk occurs aft
25d50 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64 20 69  er the keyword i
25d60 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74 68 65  f it is on.# the
25d70 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74 2e 0a   fallback list..
25d80 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c 69  #.set keyword_li
25d90 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20 41  st [lsort {.   A
25da0 42 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a 20  BORT.   ACTION. 
25db0 20 20 41 44 44 0a 20 20 20 41 46 54 45 52 0a 20    ADD.   AFTER. 
25dc0 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a 20    ALL.   ALTER. 
25dd0 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e 44    ANALYZE.   AND
25de0 0a 20 20 20 41 53 0a 20 20 20 41 53 43 0a 20 20  .   AS.   ASC.  
25df0 20 41 54 54 41 43 48 0a 20 20 20 41 55 54 4f 49   ATTACH.   AUTOI
25e00 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f  NCREMENT.   BEFO
25e10 52 45 0a 20 20 20 42 45 47 49 4e 0a 20 20 20 42  RE.   BEGIN.   B
25e20 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20  ETWEEN.   BY.   
25e30 43 41 53 43 41 44 45 0a 20 20 20 43 41 53 45 0a  CASCADE.   CASE.
25e40 20 20 20 43 41 53 54 0a 20 20 20 43 48 45 43 4b     CAST.   CHECK
25e50 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20 43  .   COLLATE.   C
25e60 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a  OLUMN.   COMMIT.
25e70 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20 43     CONFLICT.   C
25e80 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52 45  ONSTRAINT.   CRE
25e90 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20  ATE.   CROSS.   
25ea0 43 55 52 52 45 4e 54 5f 44 41 54 45 0a 20 20 20  CURRENT_DATE.   
25eb0 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20  CURRENT_TIME.   
25ec0 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
25ed0 50 0a 20 20 20 44 41 54 41 42 41 53 45 0a 20 20  P.   DATABASE.  
25ee0 20 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45   DEFAULT.   DEFE
25ef0 52 52 45 44 0a 20 20 20 44 45 46 45 52 52 41 42  RRED.   DEFERRAB
25f00 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20  LE.   DELETE.   
25f10 44 45 53 43 0a 20 20 20 44 45 54 41 43 48 0a 20  DESC.   DETACH. 
25f20 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20 44 52    DISTINCT.   DR
25f30 4f 50 0a 20 20 20 45 4e 44 0a 20 20 20 45 41 43  OP.   END.   EAC
25f40 48 0a 20 20 20 45 4c 53 45 0a 20 20 20 45 53 43  H.   ELSE.   ESC
25f50 41 50 45 0a 20 20 20 45 58 43 45 50 54 0a 20 20  APE.   EXCEPT.  
25f60 20 45 58 43 4c 55 53 49 56 45 0a 20 20 20 45 58   EXCLUSIVE.   EX
25f70 49 53 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a  ISTS.   EXPLAIN.
25f80 20 20 20 46 41 49 4c 0a 20 20 20 46 4f 52 0a 20     FAIL.   FOR. 
25f90 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f    FOREIGN.   FRO
25fa0 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f  M.   FULL.   GLO
25fb0 42 0a 20 20 20 47 52 4f 55 50 0a 20 20 20 48 41  B.   GROUP.   HA
25fc0 56 49 4e 47 0a 20 20 20 49 46 0a 20 20 20 49 47  VING.   IF.   IG
25fd0 4e 4f 52 45 0a 20 20 20 49 4d 4d 45 44 49 41 54  NORE.   IMMEDIAT
25fe0 45 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58  E.   IN.   INDEX
25ff0 0a 20 20 20 49 4e 44 45 58 45 44 0a 20 20 20 49  .   INDEXED.   I
26000 4e 49 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45  NITIALLY.   INNE
26010 52 0a 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49  R.   INSERT.   I
26020 4e 53 54 45 41 44 0a 20 20 20 49 4e 54 45 52 53  NSTEAD.   INTERS
26030 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49  ECT.   INTO.   I
26040 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a  S.   ISNULL.   J
26050 4f 49 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45  OIN.   KEY.   LE
26060 46 54 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49  FT.   LIKE.   LI
26070 4d 49 54 0a 20 20 20 4d 41 54 43 48 0a 20 20 20  MIT.   MATCH.   
26080 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20  NATURAL.   NO.  
26090 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a   NOT.   NOTNULL.
260a0 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20 20     NULL.   OF.  
260b0 20 4f 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20 20   OFFSET.   ON.  
260c0 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20 20 20   OR.   ORDER.   
260d0 4f 55 54 45 52 0a 20 20 20 50 4c 41 4e 0a 20 20  OUTER.   PLAN.  
260e0 20 50 52 41 47 4d 41 0a 20 20 20 50 52 49 4d 41   PRAGMA.   PRIMA
260f0 52 59 0a 20 20 20 51 55 45 52 59 0a 20 20 20 52  RY.   QUERY.   R
26100 41 49 53 45 0a 20 20 20 52 45 46 45 52 45 4e 43  AISE.   REFERENC
26110 45 53 0a 20 20 20 52 45 47 45 58 50 0a 20 20 20  ES.   REGEXP.   
26120 52 45 49 4e 44 45 58 0a 20 20 20 52 45 4c 45 41  REINDEX.   RELEA
26130 53 45 0a 20 20 20 52 45 4e 41 4d 45 0a 20 20 20  SE.   RENAME.   
26140 52 45 50 4c 41 43 45 0a 20 20 20 52 45 53 54 52  REPLACE.   RESTR
26150 49 43 54 0a 20 20 20 52 49 47 48 54 0a 20 20 20  ICT.   RIGHT.   
26160 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a  ROLLBACK.   ROW.
26170 20 20 20 53 41 56 45 50 4f 49 4e 54 0a 20 20 20     SAVEPOINT.   
26180 53 45 4c 45 43 54 0a 20 20 20 53 45 54 0a 20 20  SELECT.   SET.  
26190 20 54 41 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20   TABLE.   TEMP. 
261a0 20 20 54 45 4d 50 4f 52 41 52 59 0a 20 20 20 54    TEMPORARY.   T
261b0 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52 41  HEN.   TO.   TRA
261c0 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54 52 49 47  NSACTION.   TRIG
261d0 47 45 52 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20  GER.   UNION.   
261e0 55 4e 49 51 55 45 0a 20 20 20 55 50 44 41 54 45  UNIQUE.   UPDATE
261f0 0a 20 20 20 55 53 49 4e 47 0a 20 20 20 56 41 43  .   USING.   VAC
26200 55 55 4d 0a 20 20 20 56 41 4c 55 45 53 0a 20 20  UUM.   VALUES.  
26210 20 56 49 45 57 0a 20 20 20 56 49 52 54 55 41 4c   VIEW.   VIRTUAL
26220 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52  .   WHEN.   WHER
26230 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c  E.}]..hd_puts {<
26240 44 49 56 20 63 6c 61 73 73 3d 22 70 64 66 5f 73  DIV class="pdf_s
26250 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f  ection">}.Sectio
26260 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f 72  n {SQLite Keywor
26270 64 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b 2a  ds} keywords {{*
26280 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51  SQL keyword} {SQ
26290 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f  L keywords}}.hd_
262a0 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f  puts {</DIV>}.</
262b0 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c  tcl>..<p>The SQL
262c0 20 73 74 61 6e 64 61 72 64 20 73 70 65 63 69 66   standard specif
262d0 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62 65  ies a huge numbe
262e0 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68  r of keywords wh
262f0 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75  ich may not.be u
26300 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73  sed as the names
26310 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69   of tables, indi
26320 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61  ces, columns, da
26330 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64 65  tabases, user-de
26340 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c  fined.functions,
26350 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72   collations, vir
26360 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
26370 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65 72  es, or any other
26380 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54   named object..T
26390 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f  he list of keywo
263a0 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74  rds is so long t
263b0 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63  hat few people c
263c0 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d  an remember them
263d0 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53   all..For most S
263e0 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73 61  QL code, your sa
263f0 66 65 73 74 20 62 65 74 20 69 73 20 74 6f 20 6e  fest bet is to n
26400 65 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e 67  ever use any Eng
26410 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f  lish language.wo
26420 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f  rd as the name o
26430 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64  f a user-defined
26440 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70   object.</p>..<p
26450 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20  >If you want to 
26460 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61 73  use a keyword as
26470 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65   a name, you nee
26480 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20 20  d to quote it.  
26490 54 68 65 72 65 0a 61 72 65 20 74 68 72 65 65 20  There.are three 
264a0 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20  ways of quoting 
264b0 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69  keywords in SQLi
264c0 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c  te:</p>..<p>.<bl
264d0 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
264e0 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
264f0 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77  n="top"><b>'keyw
26500 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  ord'</b></td><td
26510 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
26520 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
26530 64 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74  d in single quot
26540 65 73 20 69 73 20 61 20 73 74 72 69 6e 67 20 6c  es is a string l
26550 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72  iteral.</td></tr
26560 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
26570 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79  gn="top"><b>"key
26580 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  word"</b></td><t
26590 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20  d></td>..<td>^A 
265a0 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c  keyword in doubl
265b0 65 2d 71 75 6f 74 65 73 20 69 73 20 61 6e 20 69  e-quotes is an i
265c0 64 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c  dentifier.</td><
265d0 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76  /tr>..<tr>.<td v
265e0 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26  align="top"><b>&
265f0 23 39 31 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b  #91;keyword&#93;
26600 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74  </b></td><td></t
26610 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f  d>..<td>^A keywo
26620 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73  rd enclosed in s
26630 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 20 69  quare brackets i
26640 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64  s .        an id
26650 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20  entifier.  This 
26660 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20  is not standard 
26670 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69  SQL.  This quoti
26680 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20  ng mechanism.   
26690 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20       is used by 
266a0 4d 53 20 41 63 63 65 73 73 20 61 6e 64 20 53 51  MS Access and SQ
266b0 4c 20 53 65 72 76 65 72 20 61 6e 64 20 69 73 20  L Server and is 
266c0 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69  included in SQLi
266d0 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63  te for.        c
266e0 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74  ompatibility.</t
266f0 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74  d></tr>..<tr>.<t
26700 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
26710 62 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64 26 23  b>&#96;keyword&#
26720 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e  96;</b></td><td>
26730 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65  </td>..<td>^A ke
26740 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69  yword enclosed i
26750 6e 20 67 72 61 76 65 20 61 63 63 65 6e 74 73 20  n grave accents 
26760 28 41 53 43 49 49 20 63 6f 64 65 20 39 36 29 20  (ASCII code 96) 
26770 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69  is .        an i
26780 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73  dentifier.  This
26790 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64   is not standard
267a0 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74   SQL.  This quot
267b0 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20  ing mechanism.  
267c0 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79        is used by
267d0 20 4d 79 53 51 4c 20 61 6e 64 20 69 73 20 69 6e   MySQL and is in
267e0 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65  cluded in SQLite
267f0 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d   for.        com
26800 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e  patibility.</td>
26810 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  </tr>.</table>.<
26820 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70  /blockquote>.</p
26830 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69  >..<p>For resili
26840 65 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f  ence when confro
26850 6e 74 65 64 20 77 69 74 68 20 68 69 73 74 6f 72  nted with histor
26860 69 63 61 6c 20 53 51 4c 20 73 74 61 74 65 6d 65  ical SQL stateme
26870 6e 74 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c  nts, SQLite.will
26880 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64 20   sometimes bend 
26890 74 68 65 20 71 75 6f 74 69 6e 67 20 72 75 6c 65  the quoting rule
268a0 73 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75  s above:</p>..<u
268b0 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20  l>.<li><p>^If a 
268c0 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c  keyword in singl
268d0 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62  e.quotes (ex: <b
268e0 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62  >'key'</b> or <b
268f0 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20  >'glob'</b>) is 
26900 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78  used in a contex
26910 74 20 77 68 65 72 65 0a 61 6e 20 69 64 65 6e 74  t where.an ident
26920 69 66 69 65 72 20 69 73 20 61 6c 6c 6f 77 65 64  ifier is allowed
26930 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72   but where a str
26940 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 6e  ing literal is n
26950 6f 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e  ot allowed, then
26960 0a 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e  .the token is un
26970 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61  derstood to be a
26980 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e 73  n identifier ins
26990 74 65 61 64 20 6f 66 20 61 20 73 74 72 69 6e 67  tead of a string
269a0 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f   literal..</p></
269b0 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20  li>..<li><p>^If 
269c0 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75  a keyword in dou
269d0 62 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20  ble.quotes (ex: 
269e0 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20  <b>"key"</b> or 
269f0 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69  <b>"glob"</b>) i
26a00 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74  s used in a cont
26a10 65 78 74 20 77 68 65 72 65 0a 69 74 20 63 61 6e  ext where.it can
26a20 6e 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64 20  not be resolved 
26a30 74 6f 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  to an identifier
26a40 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72   but where a str
26a50 69 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20 61  ing literal.is a
26a60 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68 65  llowed, then the
26a70 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73   token is unders
26a80 74 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74 72  tood to be a str
26a90 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73 74  ing literal inst
26aa0 65 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69  ead.of an identi
26ab0 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c  fier.</p></li>.<
26ac0 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d  /ul>..<p>Program
26ad0 6d 65 72 73 20 61 72 65 20 63 61 75 74 69 6f 6e  mers are caution
26ae0 65 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74 68  ed not to use th
26af0 65 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e 73  e two exceptions
26b00 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68   described in.th
26b10 65 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c 65  e previous bulle
26b20 74 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69 7a  ts.  We emphasiz
26b30 65 20 74 68 61 74 20 74 68 65 79 20 65 78 69 73  e that they exis
26b40 74 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f  t only so that o
26b50 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65  ld.and ill-forme
26b60 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  d SQL statements
26b70 20 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63   will run correc
26b80 74 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65 72  tly.  Future ver
26b90 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20  sions of.SQLite 
26ba0 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 6f 20  might change to 
26bb0 72 61 69 73 65 20 65 72 72 6f 72 73 20 69 6e 73  raise errors ins
26bc0 74 65 61 64 20 6f 66 20 61 63 63 65 70 74 69 6e  tead of acceptin
26bd0 67 20 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64 0a  g the malformed.
26be0 73 74 61 74 65 6d 65 6e 74 73 20 63 6f 76 65 72  statements cover
26bf0 65 64 20 62 79 20 74 68 65 20 65 78 63 65 70 74  ed by the except
26c00 69 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a  ions above.</p>.
26c10 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73  .<p>.SQLite adds
26c20 20 6e 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72   new keywords fr
26c30 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20  om time to time 
26c40 77 68 65 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e  when it takes on
26c50 20 6e 65 77 20 66 65 61 74 75 72 65 73 2e 0a 53   new features..S
26c60 6f 20 74 6f 20 70 72 65 76 65 6e 74 20 79 6f 75  o to prevent you
26c70 72 20 63 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e  r code from bein
26c80 67 20 62 72 6f 6b 65 6e 20 62 79 20 66 75 74 75  g broken by futu
26c90 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c  re enhancements,
26ca0 20 79 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d   you should.norm
26cb0 61 6c 6c 79 20 71 75 6f 74 65 20 61 6e 79 20 69  ally quote any i
26cc0 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69  dentifier that i
26cd0 73 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e  s an English lan
26ce0 67 75 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e  guage word, even
26cf0 20 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68   if.you do not h
26d00 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ave to..</p>..<p
26d10 3e 0a 54 68 65 20 6c 69 73 74 20 62 65 6c 6f 77  >.The list below
26d20 20 73 68 6f 77 73 20 61 6c 6c 20 70 6f 73 73 69   shows all possi
26d30 62 6c 65 20 6b 65 79 77 6f 72 64 73 20 75 73 65  ble keywords use
26d40 64 20 62 79 20 61 6e 79 20 62 75 69 6c 64 20 6f  d by any build o
26d50 66 0a 53 51 4c 69 74 65 20 72 65 67 61 72 64 6c  f.SQLite regardl
26d60 65 73 73 20 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d  ess of [compile-
26d70 74 69 6d 65 20 6f 70 74 69 6f 6e 73 5d 2e 20 20  time options].  
26d80 0a 4d 6f 73 74 20 72 65 61 73 6f 6e 61 62 6c 65  .Most reasonable
26d90 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20   configurations 
26da0 75 73 65 20 6d 6f 73 74 20 6f 72 20 61 6c 6c 20  use most or all 
26db0 6f 66 20 74 68 65 73 65 20 6b 65 79 77 6f 72 64  of these keyword
26dc0 73 2c 0a 62 75 74 20 73 6f 6d 65 20 6b 65 79 77  s,.but some keyw
26dd0 6f 72 64 73 20 6d 61 79 20 62 65 20 6f 6d 69 74  ords may be omit
26de0 74 65 64 20 77 68 65 6e 20 53 51 4c 20 6c 61 6e  ted when SQL lan
26df0 67 75 61 67 65 20 66 65 61 74 75 72 65 73 20 61  guage features a
26e00 72 65 0a 64 69 73 61 62 6c 65 64 2e 0a 5e 28 52  re.disabled..^(R
26e10 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
26e20 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f   compile-time co
26e30 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 61 6e 79  nfiguration, any
26e40 20 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74   identifier that
26e50 20 69 73 20 6e 6f 74 20 6f 6e 0a 74 68 65 20 66   is not on.the f
26e60 6f 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c 3e 68 64  ollowing <tcl>hd
26e70 5f 70 75 74 73 20 5b 6c 6c 65 6e 67 74 68 20 24  _puts [llength $
26e80 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74  keyword_list]</t
26e90 63 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c 69 73 74  cl> element.list
26ea0 20 69 73 20 6e 6f 74 20 61 20 6b 65 79 77 6f 72   is not a keywor
26eb0 64 20 74 6f 20 74 68 65 20 53 51 4c 20 70 61 72  d to the SQL par
26ec0 73 65 72 20 69 6e 20 53 51 4c 69 74 65 3a 0a 3c  ser in SQLite:.<
26ed0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
26ee0 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22  >.<table width="
26ef0 31 30 30 25 22 3e 3c 74 72 3e 0a 3c 74 64 20 61  100%"><tr>.<td a
26f00 6c 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69  lign="left" vali
26f10 67 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22  gn="top" width="
26f20 32 30 25 22 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20  20%">.<tcl>.set 
26f30 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77  n [llength $keyw
26f40 6f 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e 43  ord_list].set nC
26f50 6f 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b 65  ol 5.set nRow [e
26f60 78 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31  xpr {($n+$nCol-1
26f70 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69 20  )/$nCol}].set i 
26f80 30 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24  0.foreach word $
26f90 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a 20  keyword_list {. 
26fa0 20 69 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20   if {$i==$nRow} 
26fb0 7b 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c  {.    hd_puts "<
26fc0 2f 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c  /td><td valign=\
26fd0 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c  "top\" align=\"l
26fe0 65 66 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30  eft\" width=\"20
26ff0 25 5c 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20  %\">".    set i 
27000 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  1.  } else {.   
27010 20 69 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68 64   incr i.  }.  hd
27020 5f 70 75 74 73 20 22 24 77 6f 72 64 3c 62 72 3e  _puts "$word<br>
27030 5c 6e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74  \n".}.</tcl>.</t
27040 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c  d></tr></table><
27050 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a     /blockquote>)^.