Documentation Source Text

Hex Artifact Content
Login

Artifact f18c4f40453b5e8ea9273e2f491425bbedb49a59:


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 7b 52 45 49 4e  etach}.    {REIN
0600: 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20 20 20  DEX reindex}.   
0610: 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d 20   {{ALTER TABLE} 
0620: 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 20 20  altertable}.    
0630: 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79  {{ANALYZE} analy
0640: 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45 58 45  ze}.    {{INDEXE
0650: 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 7d  D BY} indexedby}
0660: 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61 74 65  .    {{aggregate
0670: 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66   functions} aggf
0680: 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20 20 20  unc aggfunc}.   
0690: 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e   {{core function
06a0: 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f 72 65  s} corefunc core
06b0: 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61 74 65  func}.    {{date
06c0: 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
06d0: 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 64 61  ons} datefunc da
06e0: 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b 65 79  tefunc}.    {key
06f0: 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73 20 7b  words keywords {
0700: 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 20  SQL keywords}}. 
0710: 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f 73 65   }.  set lang_se
0720: 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65 78 70  ction_break [exp
0730: 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24 6c 61  r {([llength $la
0740: 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74 5d  ng_section_list]
0750: 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65 61 63  +2)/3}].  foreac
0760: 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c 73 6f  h {section} [lso
0770: 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69 63  rt -index 0 -dic
0780: 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f 73 65  tionary $lang_se
0790: 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a 20 20  ction_list] {.  
07a0: 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74 6c 65  foreach {s_title
07b0: 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73 65   s_tag s_kw} $se
07c0: 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20 7b 24  ction {}.  if {$
07d0: 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20 20  s_kw == ""} {.  
07e0: 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f 74 69    set s_kw $s_ti
07f0: 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b 24 73  tle.  }.  if {$s
0800: 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e 68 74  _tag=="pragma.ht
0810: 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 75  ml"} {.    set u
0820: 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20 65 6c  rl $s_tag.  } el
0830: 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75 72 6c  se {.    set url
0840: 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68 74 6d   lang_$s_tag.htm
0850: 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73 6f 6c  l.  }.  hd_resol
0860: 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b 77 7c  ve "<li>\[$s_kw|
0870: 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69 3e 22  $s_title\]</li>"
0880: 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66 20 7b  .  incr i.  if {
0890: 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74 69 6f  $i==$lang_sectio
08a0: 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d 3d 32  n_break || $i==2
08b0: 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 62  *$lang_section_b
08c0: 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64 5f 70  reak} {.    hd_p
08d0: 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e 3c  uts "</ul></td><
08e0: 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c  td valign=\"top\
08f0: 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a 3c 2f  "><ul>".  }.}.</
0900: 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64 3e 3c  tcl>.</ul></td><
0910: 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70  /tr></table>..<p
0920: 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73 20 5b  >^The routines [
0930: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
0940: 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f  v2()], [sqlite3_
0950: 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73 71 6c  prepare()],.[sql
0960: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28 29  ite3_prepare16()
0970: 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  ], [sqlite3_prep
0980: 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a 5b 73  are16_v2()], .[s
0990: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d 2c 20  qlite3_exec()], 
09a0: 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67 65 74  and [sqlite3_get
09b0: 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65 70 74  _table()] accept
09c0: 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .an SQL statemen
09d0: 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74 6d 74  t list (sql-stmt
09e0: 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69 73 20  -list) which is 
09f0: 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65 70 61  a semicolon-sepa
0a00: 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20 73 74  rated.list of st
0a10: 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c  atements.</p>..<
0a20: 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61  tcl>BubbleDiagra
0a30: 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73 74 3c  m sql-stmt-list<
0a40: 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68 20 53  /tcl>..<p>Each S
0a50: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  QL statement in 
0a60: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 6c 69  the statement li
0a70: 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  st is an instanc
0a80: 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f 77 69  e of the.followi
0a90: 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75  ng:</p>..<tcl>Bu
0aa0: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d  bbleDiagram sql-
0ab0: 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74 63 6c  stmt</tcl>..<tcl
0ac0: 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f 72 20  >.proc Operator 
0ad0: 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72  {name} {.  retur
0ae0: 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c  n "<font color=\
0af0: 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69 67 3e  "#2c2cf0\"><big>
0b00: 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f 6e  $name</big></fon
0b10: 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74 65  t>".}.proc Nonte
0b20: 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b 0a  rminal {name} {.
0b30: 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66 6f    return "<i><fo
0b40: 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33 34  nt color=\"#ff34
0b50: 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74  34\">$name</font
0b60: 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b 65  ></i>".}.proc Ke
0b70: 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a 20  yword {name} {. 
0b80: 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20 63   return "<font c
0b90: 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c 22  olor=\"#2c2cf0\"
0ba0: 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a 7d  >$name</font>".}
0bb0: 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b 74  .proc Example {t
0bc0: 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73  ext} {.  hd_puts
0bd0: 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70   "<blockquote><p
0be0: 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e 3c 2f  re>$text</pre></
0bf0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d 0a 0a  blockquote>".}..
0c00: 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b 6e 61  proc Section {na
0c10: 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f 72 64  me label keyword
0c20: 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 44 4f  s} {.  global DO
0c30: 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61 69  C.  hd_close_mai
0c40: 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61 69 6e  n.  hd_open_main
0c50: 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74 6d   lang_$label.htm
0c60: 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20 22 53  l.  hd_header "S
0c70: 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61 6e 67  QLite Query Lang
0c80: 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24 44 4f  uage: $name" $DO
0c90: 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69 6e 0a  C/pages/lang.in.
0ca0: 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72    eval hd_keywor
0cb0: 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20 20 69  ds $keywords.  i
0cc0: 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b 65 79  f {[lsearch $key
0cd0: 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d 3d 20  words $name] == 
0ce0: 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68 20 24  -1 && [lsearch $
0cf0: 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d 65 5d  keywords *$name]
0d00: 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 65 76   == -1} {.    ev
0d10: 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  al hd_keywords {
0d20: 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20 20 68   $name }.  }.  h
0d30: 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c 69 67  d_puts {<h1 alig
0d40: 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c 20 41  n="center">SQL A
0d50: 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42 79 20  s Understood By 
0d60: 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20 20 68  SQLite</h1>}.  h
0d70: 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20 68 72  d_puts {<p><a hr
0d80: 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22 3e 5b  ef="lang.html">[
0d90: 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a 20 20  Top]</a></p>}.  
0da0: 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24 6e 61  hd_puts "<h2>$na
0db0: 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23 23 23  me</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 0a 53 65 63 74  ###########.Sect
0e10: 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c 45  ion {ALTER TABLE
0e20: 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 7b 41  } altertable {{A
0e30: 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a 41 4c  LTER TABLE} {*AL
0e40: 54 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  TER}}..BubbleDia
0e50: 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62 6c 65  gram alter-table
0e60: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
0e70: 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70 6f 72  <p>SQLite suppor
0e80: 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73 75 62  ts a limited sub
0e90: 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54 41 42  set of ALTER TAB
0ea0: 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20 54 41  LE..The ALTER TA
0eb0: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 53  BLE command in S
0ec0: 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65  QLite allows the
0ed0: 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d 65 20   user to rename 
0ee0: 61 20 74 61 62 6c 65 0a 6f 72 20 74 6f 20 61 64  a table.or to ad
0ef0: 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74  d a new column t
0f00: 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  o an existing ta
0f10: 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74 20 70  ble. It is not p
0f20: 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6e 61 6d  ossible.to renam
0f30: 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 72 65 6d 6f  e a column, remo
0f40: 76 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20  ve a column, or 
0f50: 61 64 64 20 6f 72 20 72 65 6d 6f 76 65 20 63 6f  add or remove co
0f60: 6e 73 74 72 61 69 6e 74 73 20 66 72 6f 6d 20 61  nstraints from a
0f70: 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70   table..</p>..<p
0f80: 3e 20 5e 28 54 68 65 20 52 45 4e 41 4d 45 20 54  > ^(The RENAME T
0f90: 4f 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64  O syntax is used
0fa0: 20 74 6f 20 72 65 6e 61 6d 65 20 74 68 65 20 74   to rename the t
0fb0: 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20  able identified 
0fc0: 62 79 20 0a 3c 69 3e 26 23 39 31 3b 64 61 74 61  by .<i>&#91;data
0fd0: 62 61 73 65 2d 6e 61 6d 65 2e 26 23 39 33 3b 74  base-name.&#93;t
0fe0: 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 6f  able-name</i> to
0ff0: 20 3c 69 3e 6e 65 77 2d 74 61 62 6c 65 2d 6e 61   <i>new-table-na
1000: 6d 65 3c 2f 69 3e 2e 29 5e 0a 54 68 69 73 20 63  me</i>.)^.This c
1010: 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e 6f 74 20 62  ommand .cannot b
1020: 65 20 75 73 65 64 20 74 6f 20 6d 6f 76 65 20 61  e used to move a
1030: 20 74 61 62 6c 65 20 62 65 74 77 65 65 6e 20 61   table between a
1040: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1050: 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65 6e 61 6d  s, only to renam
1060: 65 20 0a 61 20 74 61 62 6c 65 20 77 69 74 68 69  e .a table withi
1070: 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
1080: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49  ase.</p>..<p> ^I
1090: 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
10a0: 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20 74 72  g renamed has tr
10b0: 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69 63 65  iggers or indice
10c0: 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20 72 65  s, then these re
10d0: 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20 74 6f  main.attached to
10e0: 20 74 68 65 20 74 61 62 6c 65 20 61 66 74 65 72   the table after
10f0: 20 69 74 20 68 61 73 20 62 65 65 6e 20 72 65 6e   it has been ren
1100: 61 6d 65 64 2e 20 20 5e 48 6f 77 65 76 65 72 2c  amed.  ^However,
1110: 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 61 6e   if there are.an
1120: 79 20 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f  y view definitio
1130: 6e 73 2c 20 6f 72 20 73 74 61 74 65 6d 65 6e 74  ns, or statement
1140: 73 20 65 78 65 63 75 74 65 64 20 62 79 20 74 72  s executed by tr
1150: 69 67 67 65 72 73 20 74 68 61 74 20 72 65 66 65  iggers that refe
1160: 72 20 74 6f 0a 74 68 65 20 74 61 62 6c 65 20 62  r to.the table b
1170: 65 69 6e 67 20 72 65 6e 61 6d 65 64 2c 20 74 68  eing renamed, th
1180: 65 73 65 20 61 72 65 20 6e 6f 74 20 61 75 74 6f  ese are not auto
1190: 6d 61 74 69 63 61 6c 6c 79 20 6d 6f 64 69 66 69  matically modifi
11a0: 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65  ed to use the ne
11b0: 77 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20 49 66  w.table name. If
11c0: 20 74 68 69 73 20 69 73 20 72 65 71 75 69 72 65   this is require
11d0: 64 2c 20 74 68 65 20 74 72 69 67 67 65 72 73 20  d, the triggers 
11e0: 6f 72 20 76 69 65 77 20 64 65 66 69 6e 69 74 69  or view definiti
11f0: 6f 6e 73 20 6d 75 73 74 20 62 65 0a 64 72 6f 70  ons must be.drop
1200: 70 65 64 20 61 6e 64 20 72 65 63 72 65 61 74 65  ped and recreate
1210: 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77  d to use the new
1220: 20 74 61 62 6c 65 20 6e 61 6d 65 20 62 79 20 68   table name by h
1230: 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  and..</p>..<p>^I
1240: 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  f [foreign key c
1250: 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65 20  onstraints] are 
1260: 0a 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70  .[foreign_keys p
1270: 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d  ragma | enabled]
1280: 20 77 68 65 6e 20 61 20 74 61 62 6c 65 20 69 73   when a table is
1290: 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 6e 20 61   renamed, then a
12a0: 6e 79 0a 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d  ny.[foreign-key-
12b0: 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52 45 4e  clause | REFEREN
12c0: 43 45 53 20 63 6c 61 75 73 65 73 5d 20 69 6e 20  CES clauses] in 
12d0: 61 6e 79 20 74 61 62 6c 65 20 28 65 69 74 68 65  any table (eithe
12e0: 72 20 74 68 65 0a 74 61 62 6c 65 20 62 65 69 6e  r the.table bein
12f0: 67 20 72 65 6e 61 6d 65 64 20 6f 72 20 73 6f 6d  g renamed or som
1300: 65 20 6f 74 68 65 72 20 74 61 62 6c 65 29 0a 74  e other table).t
1310: 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
1320: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e   table being ren
1330: 61 6d 65 64 20 61 72 65 20 6d 6f 64 69 66 69 65  amed are modifie
1340: 64 20 74 6f 20 72 65 66 65 72 20 0a 74 6f 20 74  d to refer .to t
1350: 68 65 20 72 65 6e 61 6d 65 64 20 74 61 62 6c 65  he renamed table
1360: 20 62 79 20 69 74 73 20 6e 65 77 20 6e 61 6d 65   by its new name
1370: 2e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 44 44 20  ...<p> ^The ADD 
1380: 43 4f 4c 55 4d 4e 20 73 79 6e 74 61 78 0a 69 73  COLUMN syntax.is
1390: 20 75 73 65 64 20 74 6f 20 61 64 64 20 61 20 6e   used to add a n
13a0: 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20  ew column to an 
13b0: 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a  existing table..
13c0: 5e 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  ^The new column 
13d0: 69 73 20 61 6c 77 61 79 73 20 61 70 70 65 6e 64  is always append
13e0: 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  ed to the end of
13f0: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 78 69   the list of exi
1400: 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 54  sting columns..T
1410: 68 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66 5d 20  he [column-def] 
1420: 72 75 6c 65 20 64 65 66 69 6e 65 73 20 74 68 65  rule defines the
1430: 20 63 68 61 72 61 63 74 65 72 69 73 74 69 63 73   characteristics
1440: 20 6f 66 20 74 68 65 20 6e 65 77 20 63 6f 6c 75   of the new colu
1450: 6d 6e 2e 0a 5e 28 54 68 65 20 6e 65 77 20 63 6f  mn..^(The new co
1460: 6c 75 6d 6e 20 6d 61 79 20 74 61 6b 65 20 61 6e  lumn may take an
1470: 79 20 6f 66 20 74 68 65 20 66 6f 72 6d 73 20 70  y of the forms p
1480: 65 72 6d 69 73 73 69 62 6c 65 20 69 6e 20 61 20  ermissible in a 
1490: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73  [CREATE TABLE].s
14a0: 74 61 74 65 6d 65 6e 74 2c 20 77 69 74 68 20 74  tatement, with t
14b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73  he following res
14c0: 74 72 69 63 74 69 6f 6e 73 3a 29 5e 0a 3c 75 6c  trictions:)^.<ul
14d0: 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c 75 6d  >.<li>^The colum
14e0: 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65 20 61  n may not have a
14f0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
1500: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
1510: 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54 68 65  t.</li>.<li>^The
1520: 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20   column may not 
1530: 68 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 76  have a default v
1540: 61 6c 75 65 20 6f 66 20 43 55 52 52 45 4e 54 5f  alue of CURRENT_
1550: 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41  TIME, CURRENT_DA
1560: 54 45 2c 20 0a 20 20 20 20 43 55 52 52 45 4e 54  TE, .    CURRENT
1570: 5f 54 49 4d 45 53 54 41 4d 50 2c 20 6f 72 20 61  _TIMESTAMP, or a
1580: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  n expression in 
1590: 70 61 72 65 6e 74 68 65 73 65 73 2e 3c 2f 6c 69  parentheses.</li
15a0: 3e 0a 3c 6c 69 3e 5e 49 66 20 61 20 4e 4f 54 20  >.<li>^If a NOT 
15b0: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
15c0: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
15d0: 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75  en the column mu
15e0: 73 74 20 68 61 76 65 20 61 0a 20 20 20 20 64 65  st have a.    de
15f0: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 74 68 65  fault value othe
1600: 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c 6c 69  r than NULL..<li
1610: 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65  >^If [foreign ke
1620: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61  y constraints] a
1630: 72 65 20 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73  re [foreign_keys
1640: 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65   pragma | enable
1650: 64 5d 20 61 6e 64 0a 20 20 20 20 61 20 63 6f 6c  d] and.    a col
1660: 75 6d 6e 20 77 69 74 68 20 61 20 5b 66 6f 72 65  umn with a [fore
1670: 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c  ign-key-clause |
1680: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
1690: 73 65 5d 0a 20 20 20 20 69 73 20 61 64 64 65 64  se].    is added
16a0: 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73  , the column mus
16b0: 74 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74  t have a default
16c0: 20 76 61 6c 75 65 20 6f 66 20 4e 55 4c 4c 2e 0a   value of NULL..
16d0: 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  </ul>..<p>^Note 
16e0: 61 6c 73 6f 20 74 68 61 74 20 77 68 65 6e 20 61  also that when a
16f0: 64 64 69 6e 67 20 61 20 43 48 45 43 4b 20 63 6f  dding a CHECK co
1700: 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20 43 48  nstraint, the CH
1710: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 0a 69  ECK constraint.i
1720: 73 20 6e 6f 74 20 74 65 73 74 65 64 20 61 67 61  s not tested aga
1730: 69 6e 73 74 20 70 72 65 65 78 69 73 74 69 6e 67  inst preexisting
1740: 20 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62   rows of the tab
1750: 6c 65 2e 0a 5e 54 68 69 73 20 63 61 6e 20 72 65  le..^This can re
1760: 73 75 6c 74 20 69 6e 20 61 20 74 61 62 6c 65 20  sult in a table 
1770: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 64 61  that contains da
1780: 74 61 20 74 68 61 74 0a 69 73 20 69 6e 20 76 69  ta that.is in vi
1790: 6f 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 43  olation of the C
17a0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2e  HECK constraint.
17b0: 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e    Future version
17c0: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68  s of SQLite migh
17d0: 74 0a 63 68 61 6e 67 65 20 74 6f 20 76 61 6c 69  t.change to vali
17e0: 64 61 74 65 20 43 48 45 43 4b 20 63 6f 6e 73 74  date CHECK const
17f0: 72 61 69 6e 74 73 20 61 73 20 74 68 65 79 20 61  raints as they a
1800: 72 65 20 61 64 64 65 64 2e 3c 2f 70 3e 0a 0a 3c  re added.</p>..<
1810: 70 3e 20 54 68 65 20 65 78 65 63 75 74 69 6f 6e  p> The execution
1820: 20 74 69 6d 65 20 6f 66 20 74 68 65 20 41 4c 54   time of the ALT
1830: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
1840: 20 69 73 20 69 6e 64 65 70 65 6e 64 65 6e 74 20   is independent 
1850: 6f 66 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66  of.the amount of
1860: 20 64 61 74 61 20 69 6e 20 74 68 65 20 74 61 62   data in the tab
1870: 6c 65 2e 20 20 54 68 65 20 41 4c 54 45 52 20 54  le.  The ALTER T
1880: 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e  ABLE command run
1890: 73 20 61 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20  s as quickly.on 
18a0: 61 20 74 61 62 6c 65 20 77 69 74 68 20 31 30 20  a table with 10 
18b0: 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20  million rows as 
18c0: 69 74 20 64 6f 65 73 20 6f 6e 20 61 20 74 61 62  it does on a tab
18d0: 6c 65 20 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c  le with 1 row..<
18e0: 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44  /p>..<p>After AD
18f0: 44 20 43 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65  D COLUMN has bee
1900: 6e 20 72 75 6e 20 6f 6e 20 61 20 64 61 74 61 62  n run on a datab
1910: 61 73 65 2c 20 74 68 61 74 20 64 61 74 61 62 61  ase, that databa
1920: 73 65 20 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72  se will not.be r
1930: 65 61 64 61 62 6c 65 20 62 79 20 53 51 4c 69 74  eadable by SQLit
1940: 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20  e version 3.1.3 
1950: 61 6e 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70 3e  and earlier.</p>
1960: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<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 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
19c0: 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65  ANALYZE} analyze
19d0: 20 41 4e 41 4c 59 5a 45 0a 0a 42 75 62 62 6c 65   ANALYZE..Bubble
19e0: 44 69 61 67 72 61 6d 20 61 6e 61 6c 79 7a 65 2d  Diagram analyze-
19f0: 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
1a00: 70 3e 20 5e 54 68 65 20 41 4e 41 4c 59 5a 45 20  p> ^The ANALYZE 
1a10: 63 6f 6d 6d 61 6e 64 20 67 61 74 68 65 72 73 20  command gathers 
1a20: 73 74 61 74 69 73 74 69 63 73 20 61 62 6f 75 74  statistics about
1a30: 20 69 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f   indices and sto
1a40: 72 65 73 20 74 68 65 6d 0a 69 6e 20 61 20 73 70  res them.in a sp
1a50: 65 63 69 61 6c 20 74 61 62 6c 65 73 20 69 6e 20  ecial tables in 
1a60: 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65  the database whe
1a70: 72 65 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  re the query opt
1a80: 69 6d 69 7a 65 72 20 63 61 6e 20 75 73 65 0a 74  imizer can use.t
1a90: 68 65 6d 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65  hem to help make
1aa0: 20 62 65 74 74 65 72 20 69 6e 64 65 78 20 63 68   better index ch
1ab0: 6f 69 63 65 73 2e 0a 5e 49 66 20 6e 6f 20 61 72  oices..^If no ar
1ac0: 67 75 6d 65 6e 74 73 20 61 72 65 20 67 69 76 65  guments are give
1ad0: 6e 2c 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69  n, all indices i
1ae0: 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
1af0: 61 74 61 62 61 73 65 73 20 61 72 65 0a 61 6e 61  atabases are.ana
1b00: 6c 79 7a 65 64 2e 20 20 5e 49 66 20 61 20 64 61  lyzed.  ^If a da
1b10: 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20 67  tabase name is g
1b20: 69 76 65 6e 20 61 73 20 74 68 65 20 61 72 67 75  iven as the argu
1b30: 6d 65 6e 74 2c 20 61 6c 6c 20 69 6e 64 69 63 65  ment, all indice
1b40: 73 0a 69 6e 20 74 68 61 74 20 6f 6e 65 20 64 61  s.in that one da
1b50: 74 61 62 61 73 65 20 61 72 65 20 61 6e 61 6c 79  tabase are analy
1b60: 7a 65 64 2e 20 20 5e 49 66 20 74 68 65 20 61 72  zed.  ^If the ar
1b70: 67 75 6d 65 6e 74 20 69 73 20 61 20 74 61 62 6c  gument is a tabl
1b80: 65 20 6e 61 6d 65 2c 0a 74 68 65 6e 20 6f 6e 6c  e name,.then onl
1b90: 79 20 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69  y indices associ
1ba0: 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20 6f  ated with that o
1bb0: 6e 65 20 74 61 62 6c 65 20 61 72 65 20 61 6e 61  ne table are ana
1bc0: 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  lyzed.</p>..<p> 
1bd0: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 69 6d 70  ^The default imp
1be0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74 6f 72  lementation stor
1bf0: 65 73 20 61 6c 6c 20 73 74 61 74 69 73 74 69 63  es all statistic
1c00: 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a 74 61  s in a single.ta
1c10: 62 6c 65 20 6e 61 6d 65 64 20 3c 62 3e 73 71 6c  ble named <b>sql
1c20: 69 74 65 5f 73 74 61 74 31 3c 2f 62 3e 2e 20 20  ite_stat1</b>.  
1c30: 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f  ^If SQLite is co
1c40: 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a  mpiled with the.
1c50: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
1c60: 54 41 54 32 5d 20 6f 70 74 69 6f 6e 2c 20 74 68  TAT2] option, th
1c70: 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69  en additional hi
1c80: 73 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a  stogram data is.
1c90: 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74  collected and st
1ca0: 6f 72 65 64 20 69 6e 20 3c 62 3e 73 71 6c 69 74  ored in <b>sqlit
1cb0: 65 5f 73 74 61 74 32 3c 2f 62 3e 2e 0a 46 75 74  e_stat2</b>..Fut
1cc0: 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73  ure enhancements
1cd0: 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64 64 69   may create.addi
1ce0: 74 69 6f 6e 61 6c 20 74 61 62 6c 65 73 20 77 69  tional tables wi
1cf0: 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
1d00: 20 70 61 74 74 65 72 6e 20 65 78 63 65 70 74 20   pattern except 
1d10: 77 69 74 68 20 74 68 65 20 22 31 22 0a 6f 72 20  with the "1".or 
1d20: 22 32 22 20 63 68 61 6e 67 65 64 20 74 6f 20 61  "2" changed to a
1d30: 20 64 69 66 66 65 72 65 6e 74 20 64 69 67 69 74   different digit
1d40: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20  .</p>..<p> ^The 
1d50: 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 63 6f 6d  [DROP TABLE] com
1d60: 6d 61 6e 64 20 64 6f 65 73 0a 6e 6f 74 20 77 6f  mand does.not wo
1d70: 72 6b 20 6f 6e 20 74 68 65 20 3c 62 3e 73 71 6c  rk on the <b>sql
1d80: 69 74 65 5f 73 74 61 74 31 3c 2f 62 3e 20 6f 72  ite_stat1</b> or
1d90: 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 32   <b>sqlite_stat2
1da0: 3c 2f 62 3e 20 74 61 62 6c 65 73 2c 0a 62 75 74  </b> tables,.but
1db0: 20 61 6c 6c 20 74 68 65 20 63 6f 6e 74 65 6e 74   all the content
1dc0: 20 6f 66 20 74 68 6f 73 65 20 74 61 62 6c 65 73   of those tables
1dd0: 20 63 61 6e 20 62 65 20 71 75 65 72 69 65 64 20   can be queried 
1de0: 75 73 69 6e 67 20 5b 53 45 4c 45 43 54 5d 0a 61  using [SELECT].a
1df0: 6e 64 20 63 61 6e 20 62 65 20 64 65 6c 65 74 65  nd can be delete
1e00: 64 2c 20 61 75 67 6d 65 6e 74 65 64 2c 20 6f 72  d, augmented, or
1e10: 20 6d 6f 64 69 66 69 65 64 20 75 73 69 6e 67 20   modified using 
1e20: 74 68 65 20 5b 44 45 4c 45 54 45 5d 2c 0a 5b 49  the [DELETE],.[I
1e30: 4e 53 45 52 54 5d 2c 20 61 6e 64 20 5b 55 50 44  NSERT], and [UPD
1e40: 41 54 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 41  ATE] commands..A
1e50: 70 70 72 6f 70 72 69 61 74 65 20 63 61 72 65 20  ppropriate care 
1e60: 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 77  should be used w
1e70: 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74 68 65  hen changing the
1e80: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
1e90: 73 74 61 74 69 73 74 69 63 73 0a 74 61 62 6c 65  statistics.table
1ea0: 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63 6f 6e  s as invalid con
1eb0: 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65 20 53  tent can cause S
1ec0: 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63 74 20  QLite to select 
1ed0: 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75 65 72  inefficient.quer
1ee0: 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65 72 61  y plans.  Genera
1ef0: 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20 6f 6e  lly speaking, on
1f00: 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d 6f 64  e should not mod
1f10: 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ify the content 
1f20: 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74 69 63  of.the statistic
1f30: 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e 79 20  s tables by any 
1f40: 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65 72 20  mechanism other 
1f50: 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20 74 68  than invoking th
1f60: 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e  e.ANALYZE comman
1f70: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 53 74 61  d.</p>..<p> ^Sta
1f80: 74 69 73 74 69 63 73 20 67 61 74 68 65 72 65 64  tistics gathered
1f90: 20 62 79 20 41 4e 41 4c 59 5a 45 20 61 72 65 20   by ANALYZE are 
1fa0: 3c 75 3e 6e 6f 74 3c 2f 75 3e 20 61 75 74 6f 6d  <u>not</u> autom
1fb0: 61 74 69 63 61 6c 6c 79 20 75 70 64 61 74 65 64  atically updated
1fc0: 20 61 73 0a 74 68 65 20 63 6f 6e 74 65 6e 74 20   as.the content 
1fd0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
1fe0: 63 68 61 6e 67 65 73 2e 20 20 49 66 20 74 68 65  changes.  If the
1ff0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
2000: 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65 73  database.changes
2010: 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 2c 20   significantly, 
2020: 6f 72 20 69 66 20 74 68 65 20 64 61 74 61 62 61  or if the databa
2030: 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
2040: 73 2c 20 74 68 65 6e 20 6f 6e 65 20 73 68 6f 75  s, then one shou
2050: 6c 64 0a 63 6f 6e 73 69 64 65 72 20 72 65 72 75  ld.consider reru
2060: 6e 6e 69 6e 67 20 74 68 65 20 41 4e 41 4c 59 5a  nning the ANALYZ
2070: 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 6f 72 64  E command in ord
2080: 65 72 20 74 6f 20 75 70 64 61 74 65 20 74 68 65  er to update the
2090: 20 73 74 61 74 69 73 74 69 63 73 2e 3c 2f 70 3e   statistics.</p>
20a0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
20b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20f0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
2100: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d  ATTACH DATABASE}
2110: 20 61 74 74 61 63 68 20 2a 41 54 54 41 43 48 0a   attach *ATTACH.
2120: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  .BubbleDiagram a
2130: 74 74 61 63 68 2d 73 74 6d 74 20 31 0a 3c 2f 74  ttach-stmt 1.</t
2140: 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 54  cl>..<p> ^The AT
2150: 54 41 43 48 20 44 41 54 41 42 41 53 45 20 73 74  TACH DATABASE st
2160: 61 74 65 6d 65 6e 74 20 61 64 64 73 20 61 6e 6f  atement adds ano
2170: 74 68 65 72 20 64 61 74 61 62 61 73 65 20 0a 66  ther database .f
2180: 69 6c 65 20 74 6f 20 74 68 65 20 63 75 72 72 65  ile to the curre
2190: 6e 74 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e  nt [database con
21a0: 6e 65 63 74 69 6f 6e 5d 2e 20 0a 5e 54 68 65 20  nection]. .^The 
21b0: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 73 20 27  database-names '
21c0: 6d 61 69 6e 27 20 61 6e 64 20 0a 27 74 65 6d 70  main' and .'temp
21d0: 27 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6d  ' refer to the m
21e0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64  ain database and
21f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73   the database us
2200: 65 64 20 66 6f 72 20 0a 74 65 6d 70 6f 72 61 72  ed for .temporar
2210: 79 20 74 61 62 6c 65 73 2e 20 20 5e 54 68 65 20  y tables.  ^The 
2220: 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61  main and temp da
2230: 74 61 62 61 73 65 73 20 63 61 6e 6e 6f 74 20 62  tabases cannot b
2240: 65 20 61 74 74 61 63 68 65 64 20 6f 72 0a 64 65  e attached or.de
2250: 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tached.</p>..<p>
2260: 20 5e 28 54 61 62 6c 65 73 20 69 6e 20 61 6e 20   ^(Tables in an 
2270: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
2280: 65 20 63 61 6e 20 62 65 20 72 65 66 65 72 72 65  e can be referre
2290: 64 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20 73  d to using the s
22a0: 79 6e 74 61 78 20 0a 3c 69 3e 64 61 74 61 62 61  yntax .<i>databa
22b0: 73 65 2d 6e 61 6d 65 2e 74 61 62 6c 65 2d 6e 61  se-name.table-na
22c0: 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e 49 66 20 74  me</i>.)^  ^If t
22d0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
22e0: 61 62 6c 65 20 69 73 20 75 6e 69 71 75 65 0a 61  able is unique.a
22f0: 63 72 6f 73 73 20 61 6c 6c 20 61 74 74 61 63 68  cross all attach
2300: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ed databases and
2310: 20 74 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65   the main and te
2320: 6d 70 20 64 61 74 61 62 61 73 65 73 2c 20 74 68  mp databases, th
2330: 65 6e 20 74 68 65 0a 3c 69 3e 64 61 74 61 62 61  en the.<i>databa
2340: 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66  se-name</i> pref
2350: 69 78 20 69 73 20 6e 6f 74 20 72 65 71 75 69 72  ix is not requir
2360: 65 64 2e 20 20 5e 49 66 20 74 77 6f 20 6f 72 20  ed.  ^If two or 
2370: 6d 6f 72 65 20 74 61 62 6c 65 73 20 69 6e 0a 64  more tables in.d
2380: 69 66 66 65 72 65 6e 74 20 64 61 74 61 62 61 73  ifferent databas
2390: 65 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  es have the same
23a0: 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 0a 3c   name and the .<
23b0: 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
23c0: 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20 6e 6f  /i> prefix is no
23d0: 74 20 75 73 65 64 20 6f 6e 20 61 20 74 61 62 6c  t used on a tabl
23e0: 65 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65  e reference, the
23f0: 6e 20 74 68 65 0a 74 61 62 6c 65 20 63 68 6f 73  n the.table chos
2400: 65 6e 20 69 73 20 74 68 65 20 6f 6e 65 20 69 6e  en is the one in
2410: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68   the database th
2420: 61 74 20 77 61 73 20 6c 65 61 73 74 20 72 65 63  at was least rec
2430: 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 2e 3c  ently attached.<
2440: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61  /p>..<p>.^Transa
2450: 63 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69 6e 67  ctions involving
2460: 20 6d 75 6c 74 69 70 6c 65 20 61 74 74 61 63 68   multiple attach
2470: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72 65  ed databases are
2480: 20 61 74 6f 6d 69 63 2c 0a 61 73 73 75 6d 69 6e   atomic,.assumin
2490: 67 20 74 68 61 74 20 74 68 65 20 6d 61 69 6e 20  g that the main 
24a0: 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
24b0: 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 61 6e 64  "[:memory:]" and
24c0: 20 74 68 65 20 0a 5b 6a 6f 75 72 6e 61 6c 5f 6d   the .[journal_m
24d0: 6f 64 65 5d 20 69 73 20 6e 6f 74 20 5b 57 41 4c  ode] is not [WAL
24e0: 5d 2e 20 20 5e 28 49 66 20 74 68 65 20 6d 61 69  ].  ^(If the mai
24f0: 6e 0a 64 61 74 61 62 61 73 65 20 69 73 20 22 3a  n.database is ":
2500: 6d 65 6d 6f 72 79 3a 22 20 6f 72 20 69 66 20 74  memory:" or if t
2510: 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  he journal_mode 
2520: 69 73 20 57 41 4c 2c 20 74 68 65 6e 20 0a 74 72  is WAL, then .tr
2530: 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e 74 69  ansactions conti
2540: 6e 75 65 20 74 6f 20 62 65 20 61 74 6f 6d 69 63  nue to be atomic
2550: 20 77 69 74 68 69 6e 20 65 61 63 68 20 69 6e 64   within each ind
2560: 69 76 69 64 75 61 6c 0a 64 61 74 61 62 61 73 65  ividual.database
2570: 20 66 69 6c 65 2e 20 42 75 74 20 69 66 20 74 68   file. But if th
2580: 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 20  e host computer 
2590: 63 72 61 73 68 65 73 20 69 6e 20 74 68 65 20 6d  crashes in the m
25a0: 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43 4f 4d 4d  iddle.of a [COMM
25b0: 49 54 5d 20 77 68 65 72 65 20 74 77 6f 20 6f 72  IT] where two or
25c0: 20 6d 6f 72 65 20 64 61 74 61 62 61 73 65 20 66   more database f
25d0: 69 6c 65 73 20 61 72 65 20 75 70 64 61 74 65 64  iles are updated
25e0: 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73 65 20  ,.some of those 
25f0: 66 69 6c 65 73 20 6d 69 67 68 74 20 67 65 74 20  files might get 
2600: 74 68 65 20 63 68 61 6e 67 65 73 20 77 68 65 72  the changes wher
2610: 65 20 6f 74 68 65 72 73 0a 6d 69 67 68 74 20 6e  e others.might n
2620: 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20  ot.)^.</p>..<p> 
2630: 5e 54 68 65 72 65 20 69 73 20 69 73 20 61 20 6c  ^There is is a l
2640: 69 6d 69 74 2c 20 73 65 74 20 75 73 69 6e 67 20  imit, set using 
2650: 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29  [sqlite3_limit()
2660: 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45 5f 4c  ] and .[SQLITE_L
2670: 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d 2c 20  IMIT_ATTACHED], 
2680: 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
2690: 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74 20   databases that 
26a0: 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61 6e 65  can be.simultane
26b0: 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64 20 74  ously attached t
26c0: 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61 62  o a single datab
26d0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c  ase connection.<
26e0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
26f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2700: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2730: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
2740: 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53 41  on {BEGIN TRANSA
2750: 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69  CTION} transacti
2760: 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d 49  on {*BEGIN COMMI
2770: 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 42 75 62  T ROLLBACK}..Bub
2780: 62 6c 65 44 69 61 67 72 61 6d 20 62 65 67 69 6e  bleDiagram begin
2790: 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67  -stmt.BubbleDiag
27a0: 72 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a  ram commit-stmt.
27b0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f  BubbleDiagram ro
27c0: 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63  llback-stmt.</tc
27d0: 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e  l>..<p>.^No chan
27e0: 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20  ges can be made 
27f0: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
2800: 65 78 63 65 70 74 20 77 69 74 68 69 6e 20 61 20  except within a 
2810: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e  transaction..^An
2820: 79 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63  y command that c
2830: 68 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 62  hanges the datab
2840: 61 73 65 20 28 62 61 73 69 63 61 6c 6c 79 2c 20  ase (basically, 
2850: 61 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a  any SQL command.
2860: 6f 74 68 65 72 20 74 68 61 6e 20 5b 53 45 4c 45  other than [SELE
2870: 43 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61  CT]) will automa
2880: 74 69 63 61 6c 6c 79 20 73 74 61 72 74 20 61 20  tically start a 
2890: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f  transaction if.o
28a0: 6e 65 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64  ne is not alread
28b0: 79 20 69 6e 20 65 66 66 65 63 74 2e 20 20 5e 41  y in effect.  ^A
28c0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61  utomatically sta
28d0: 72 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  rted transaction
28e0: 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65 64 20  s.are committed 
28f0: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 71 75  when the last qu
2900: 65 72 79 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f  ery finishes..</
2910: 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63  p>..<p>.^Transac
2920: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61  tions can be sta
2930: 72 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73  rted manually us
2940: 69 6e 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f  ing the BEGIN.co
2950: 6d 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68 20 74  mmand.  ^(Such t
2960: 72 61 6e 73 61 63 74 69 6f 6e 73 20 75 73 75 61  ransactions usua
2970: 6c 6c 79 20 70 65 72 73 69 73 74 20 75 6e 74 69  lly persist unti
2980: 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49  l the next.COMMI
2990: 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f  T or ROLLBACK co
29a0: 6d 6d 61 6e 64 2e 20 20 42 75 74 20 61 20 74 72  mmand.  But a tr
29b0: 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61  ansaction will a
29c0: 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66  lso .ROLLBACK if
29d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
29e0: 20 63 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e   closed or if an
29f0: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e   error occurs.an
2a00: 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  d the ROLLBACK c
2a10: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
2a20: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
2a30: 73 70 65 63 69 66 69 65 64 2e 29 5e 0a 53 65 65  specified.)^.See
2a40: 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   the documentati
2a50: 6f 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f  on on the [ON CO
2a60: 4e 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65 20 66  NFLICT].clause f
2a70: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
2a80: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
2a90: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e  the ROLLBACK.con
2aa0: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
2ab0: 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e   algorithm..</p>
2ac0: 0a 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53  ..<p>.^END TRANS
2ad0: 41 43 54 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69  ACTION is an ali
2ae0: 61 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c  as for COMMIT..<
2af0: 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73  /p>..<p> ^(Trans
2b00: 61 63 74 69 6f 6e 73 20 63 72 65 61 74 65 64 20  actions created 
2b10: 75 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f  using BEGIN...CO
2b20: 4d 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74  MMIT do not nest
2b30: 2e 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20  .)^.^For nested 
2b40: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73  transactions, us
2b50: 65 20 74 68 65 20 5b 53 41 56 45 50 4f 49 4e 54  e the [SAVEPOINT
2b60: 5d 20 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20  ] and [RELEASE] 
2b70: 63 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54  commands..The "T
2b80: 4f 20 53 41 56 45 50 4f 49 4e 54 20 3c 69 3e 6e  O SAVEPOINT <i>n
2b90: 61 6d 65 3c 2f 69 3e 22 20 63 6c 61 75 73 65 20  ame</i>" clause 
2ba0: 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  of the ROLLBACK 
2bb0: 63 6f 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a 69 6e  command shown.in
2bc0: 20 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67   the syntax diag
2bd0: 72 61 6d 20 61 62 6f 76 65 20 69 73 20 6f 6e 6c  ram above is onl
2be0: 79 20 61 70 70 6c 69 63 61 62 6c 65 20 74 6f 20  y applicable to 
2bf0: 5b 53 41 56 45 50 4f 49 4e 54 5d 0a 74 72 61 6e  [SAVEPOINT].tran
2c00: 73 61 63 74 69 6f 6e 73 2e 20 20 5e 41 6e 20 61  sactions.  ^An a
2c10: 74 74 65 6d 70 74 20 74 6f 20 69 6e 76 6f 6b 65  ttempt to invoke
2c20: 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d 6d 61   the BEGIN comma
2c30: 6e 64 20 77 69 74 68 69 6e 0a 61 20 74 72 61 6e  nd within.a tran
2c40: 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69  saction will fai
2c50: 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2c  l with an error,
2c60: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
2c70: 68 65 74 68 65 72 0a 74 68 65 20 74 72 61 6e 73  hether.the trans
2c80: 61 63 74 69 6f 6e 20 77 61 73 20 73 74 61 72 74  action was start
2c90: 65 64 20 62 79 20 5b 53 41 56 45 50 4f 49 4e 54  ed by [SAVEPOINT
2ca0: 5d 20 6f 72 20 61 20 70 72 69 6f 72 20 42 45 47  ] or a prior BEG
2cb0: 49 4e 2e 0a 5e 54 68 65 20 43 4f 4d 4d 49 54 20  IN..^The COMMIT 
2cc0: 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68 65 20  command and the 
2cd0: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
2ce0: 20 77 69 74 68 6f 75 74 20 74 68 65 20 54 4f 20   without the TO 
2cf0: 63 6c 61 75 73 65 0a 77 6f 72 6b 20 74 68 65 20  clause.work the 
2d00: 73 61 6d 65 20 6f 6e 20 5b 53 41 56 45 50 4f 49  same on [SAVEPOI
2d10: 4e 54 5d 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  NT] transactions
2d20: 20 61 73 20 74 68 65 79 20 64 6f 20 77 69 74 68   as they do with
2d30: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 73 74   transactions.st
2d40: 61 72 74 65 64 20 62 79 20 42 45 47 49 4e 2e 3c  arted by BEGIN.<
2d50: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61  /p>..<p>.^Transa
2d60: 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64 65  ctions can be de
2d70: 66 65 72 72 65 64 2c 20 69 6d 6d 65 64 69 61 74  ferred, immediat
2d80: 65 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65 2e  e, or exclusive.
2d90: 20 20 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20    .^The default 
2da0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 68 61  transaction beha
2db0: 76 69 6f 72 20 69 73 20 64 65 66 65 72 72 65 64  vior is deferred
2dc0: 2e 0a 5e 44 65 66 65 72 72 65 64 20 6d 65 61 6e  ..^Deferred mean
2dd0: 73 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20  s that no locks 
2de0: 61 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e 20  are acquired.on 
2df0: 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74  the database unt
2e00: 69 6c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  il the database 
2e10: 69 73 20 66 69 72 73 74 20 61 63 63 65 73 73 65  is first accesse
2e20: 64 2e 20 20 5e 54 68 75 73 20 77 69 74 68 20 61  d.  ^Thus with a
2e30: 0a 64 65 66 65 72 72 65 64 20 74 72 61 6e 73 61  .deferred transa
2e40: 63 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e  ction, the BEGIN
2e50: 20 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65 6c   statement itsel
2e60: 66 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74  f does nothing t
2e70: 6f 20 74 68 65 0a 66 69 6c 65 73 79 73 74 65 6d  o the.filesystem
2e80: 2e 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f  .  ^Locks.are no
2e90: 74 20 61 63 71 75 69 72 65 64 20 75 6e 74 69 6c  t acquired until
2ea0: 20 74 68 65 20 66 69 72 73 74 20 72 65 61 64 20   the first read 
2eb0: 6f 72 20 77 72 69 74 65 20 6f 70 65 72 61 74 69  or write operati
2ec0: 6f 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20  on.  ^The first 
2ed0: 72 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61  read.operation a
2ee0: 67 61 69 6e 73 74 20 61 20 64 61 74 61 62 61 73  gainst a databas
2ef0: 65 20 63 72 65 61 74 65 73 20 61 20 5b 53 48 41  e creates a [SHA
2f00: 52 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68  RED] lock and th
2f10: 65 20 66 69 72 73 74 0a 77 72 69 74 65 20 6f 70  e first.write op
2f20: 65 72 61 74 69 6f 6e 20 63 72 65 61 74 65 73 20  eration creates 
2f30: 61 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63  a [RESERVED] loc
2f40: 6b 2e 20 20 20 5e 42 65 63 61 75 73 65 20 74 68  k.   ^Because th
2f50: 65 20 61 63 71 75 69 73 69 74 69 6f 6e 20 6f 66  e acquisition of
2f60: 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66 65 72 72  .locks is deferr
2f70: 65 64 20 75 6e 74 69 6c 20 74 68 65 79 20 61 72  ed until they ar
2f80: 65 20 6e 65 65 64 65 64 2c 20 69 74 20 69 73 20  e needed, it is 
2f90: 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e  possible that an
2fa0: 6f 74 68 65 72 0a 74 68 72 65 61 64 20 6f 72 20  other.thread or 
2fb0: 70 72 6f 63 65 73 73 20 63 6f 75 6c 64 20 63 72  process could cr
2fc0: 65 61 74 65 20 61 20 73 65 70 61 72 61 74 65 20  eate a separate 
2fd0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20  transaction and 
2fe0: 77 72 69 74 65 20 74 6f 0a 74 68 65 20 64 61 74  write to.the dat
2ff0: 61 62 61 73 65 20 61 66 74 65 72 20 74 68 65 20  abase after the 
3000: 42 45 47 49 4e 20 6f 6e 20 74 68 65 20 63 75 72  BEGIN on the cur
3010: 72 65 6e 74 20 74 68 72 65 61 64 20 68 61 73 20  rent thread has 
3020: 65 78 65 63 75 74 65 64 2e 0a 5e 49 66 20 74 68  executed..^If th
3030: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
3040: 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68 65 6e   immediate, then
3050: 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b   [RESERVED] lock
3060: 73 0a 61 72 65 20 61 63 71 75 69 72 65 64 20 6f  s.are acquired o
3070: 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 20  n all databases 
3080: 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 42  as soon as the B
3090: 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a  EGIN command is.
30a0: 65 78 65 63 75 74 65 64 2c 20 77 69 74 68 6f 75  executed, withou
30b0: 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74 68  t waiting for th
30c0: 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20 62 65  e.database to be
30d0: 20 75 73 65 64 2e 20 20 5e 41 66 74 65 72 20 61   used.  ^After a
30e0: 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45   BEGIN IMMEDIATE
30f0: 2c 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74  , .no other [dat
3100: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
3110: 5d 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74  ] will be able t
3120: 6f 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 64  o write to the d
3130: 61 74 61 62 61 73 65 20 6f 72 0a 64 6f 20 61 20  atabase or.do a 
3140: 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 20  BEGIN IMMEDIATE 
3150: 6f 72 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49  or BEGIN EXCLUSI
3160: 56 45 2e 20 20 5e 4f 74 68 65 72 20 70 72 6f 63  VE.  ^Other proc
3170: 65 73 73 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e  esses can contin
3180: 75 65 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d 20  ue.to read from 
3190: 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 68 6f  the database, ho
31a0: 77 65 76 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c  wever.  ^An excl
31b0: 75 73 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f  usive transactio
31c0: 6e 20 63 61 75 73 65 73 0a 5b 45 58 43 4c 55 53  n causes.[EXCLUS
31d0: 49 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65  IVE] locks to be
31e0: 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c   acquired on all
31f0: 20 64 61 74 61 62 61 73 65 73 2e 20 20 5e 41 66   databases.  ^Af
3200: 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43 4c  ter a BEGIN.EXCL
3210: 55 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20  USIVE, no other 
3220: 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63  [database connec
3230: 74 69 6f 6e 5d 20 65 78 63 65 70 74 20 66 6f 72  tion] except for
3240: 20 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74   [read_uncommitt
3250: 65 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ed].connections 
3260: 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20  will be able to 
3270: 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
3280: 65 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63  e and no other c
3290: 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 6f 75  onnection withou
32a0: 74 0a 65 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c  t.exception will
32b0: 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74   be able to writ
32c0: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  e the database u
32d0: 6e 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61 63  ntil the transac
32e0: 74 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65  tion is.complete
32f0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e  ..</p>..<p>.^(An
3300: 20 69 6d 70 6c 69 63 69 74 20 74 72 61 6e 73 61   implicit transa
3310: 63 74 69 6f 6e 20 28 61 20 74 72 61 6e 73 61 63  ction (a transac
3320: 74 69 6f 6e 20 74 68 61 74 20 69 73 20 73 74 61  tion that is sta
3330: 72 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  rted automatical
3340: 6c 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61  ly,.not a transa
3350: 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 62 79  ction started by
3360: 20 42 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69   BEGIN) is commi
3370: 74 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  tted automatical
3380: 6c 79 20 77 68 65 6e 0a 74 68 65 20 6c 61 73 74  ly when.the last
3390: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
33a0: 74 20 66 69 6e 69 73 68 65 73 2e 20 20 41 20 73  t finishes.  A s
33b0: 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65  tatement finishe
33c0: 73 20 77 68 65 6e 20 69 74 73 0a 70 72 65 70 61  s when its.prepa
33d0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
33e0: 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28   [sqlite3_reset(
33f0: 29 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73  ) | reset] or.[s
3400: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
3410: 29 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20  ) | finalized]. 
3420: 20 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65   An open [sqlite
3430: 33 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72  3_blob] used for
3440: 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f  .incremental BLO
3450: 42 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20  B I/O counts as 
3460: 61 6e 20 75 6e 66 69 6e 69 73 68 65 64 20 73 74  an unfinished st
3470: 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73  atement.  The [s
3480: 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e  qlite3_blob].fin
3490: 69 73 68 65 73 20 77 68 65 6e 20 69 74 20 69 73  ishes when it is
34a0: 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63   [sqlite3_blob_c
34b0: 6c 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d  lose() | closed]
34c0: 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54  .)^.</p>..<p>.^T
34d0: 68 65 20 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d  he explicit COMM
34e0: 49 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20  IT command runs 
34f0: 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65 76 65  immediately, eve
3500: 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 70  n if there are.p
3510: 65 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20  ending [SELECT] 
3520: 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f  statements.  ^Ho
3530: 77 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20  wever, if there 
3540: 61 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69 74  are pending.writ
3550: 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74 68  e operations, th
3560: 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64  e COMMIT command
3570: 0a 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20  .will fail with 
3580: 61 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51  a error code [SQ
3590: 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e  LITE_BUSY]..</p>
35a0: 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70  ..<p>.^An attemp
35b0: 74 20 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d  t to execute COM
35c0: 4d 49 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72  MIT might also r
35d0: 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c  esult in an [SQL
35e0: 49 54 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e  ITE_BUSY] return
35f0: 20 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74   code.if an anot
3600: 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72  her thread or pr
3610: 6f 63 65 73 73 20 68 61 73 20 61 20 5b 73 68 61  ocess has a [sha
3620: 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65  red lock] on the
3630: 20 64 61 74 61 62 61 73 65 0a 74 68 61 74 20 70   database.that p
3640: 72 65 76 65 6e 74 65 64 20 74 68 65 20 64 61 74  revented the dat
3650: 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67  abase from being
3660: 20 75 70 64 61 74 65 64 2e 20 20 5e 57 68 65 6e   updated.  ^When
3670: 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e   COMMIT fails in
3680: 20 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74   this.way, the t
3690: 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69  ransaction remai
36a0: 6e 73 20 61 63 74 69 76 65 20 61 6e 64 20 74 68  ns active and th
36b0: 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20  e COMMIT can be 
36c0: 72 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66  retried later.af
36d0: 74 65 72 20 74 68 65 20 72 65 61 64 65 72 20 68  ter the reader h
36e0: 61 73 20 68 61 64 20 61 20 63 68 61 6e 63 65 20  as had a chance 
36f0: 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a  to clear..</p>..
3700: 3c 70 3e 0a 5e 54 68 65 20 52 4f 4c 4c 42 41 43  <p>.^The ROLLBAC
3710: 4b 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  K will fail with
3720: 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b   an error code [
3730: 53 51 4c 49 54 45 5f 42 55 53 59 5d 20 69 66 20  SQLITE_BUSY] if 
3740: 74 68 65 72 65 0a 61 72 65 20 61 6e 79 20 70 65  there.are any pe
3750: 6e 64 69 6e 67 20 71 75 65 72 69 65 73 2e 20 20  nding queries.  
3760: 5e 42 6f 74 68 20 72 65 61 64 2d 6f 6e 6c 79 20  ^Both read-only 
3770: 61 6e 64 20 72 65 61 64 2f 77 72 69 74 65 20 71  and read/write q
3780: 75 65 72 69 65 73 20 77 69 6c 6c 0a 63 61 75 73  ueries will.caus
3790: 65 20 61 20 52 4f 4c 4c 42 41 43 4b 20 74 6f 20  e a ROLLBACK to 
37a0: 66 61 69 6c 2e 20 20 41 20 52 4f 4c 4c 42 41 43  fail.  A ROLLBAC
37b0: 4b 20 6d 75 73 74 20 66 61 69 6c 20 69 66 20 74  K must fail if t
37c0: 68 65 72 65 20 61 72 65 20 70 65 6e 64 69 6e 67  here are pending
37d0: 0a 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73  .read operations
37e0: 20 28 75 6e 6c 69 6b 65 20 43 4f 4d 4d 49 54 20   (unlike COMMIT 
37f0: 77 68 69 63 68 20 63 61 6e 20 73 75 63 63 65 65  which can succee
3800: 64 29 20 62 65 63 61 75 73 65 20 62 61 64 20 74  d) because bad t
3810: 68 69 6e 67 73 0a 77 69 6c 6c 20 68 61 70 70 65  hings.will happe
3820: 6e 20 69 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  n if the in-memo
3830: 72 79 20 69 6d 61 67 65 20 6f 66 20 74 68 65 20  ry image of the 
3840: 64 61 74 61 62 61 73 65 20 69 73 20 63 68 61 6e  database is chan
3850: 67 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64  ged out from und
3860: 65 72 0a 61 6e 20 61 63 74 69 76 65 20 71 75 65  er.an active que
3870: 72 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66  ry..</p>..<p>.If
3880: 20 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c   [PRAGMA journal
3890: 5f 6d 6f 64 65 5d 20 69 73 20 73 65 74 20 74 6f  _mode] is set to
38a0: 20 4f 46 46 20 28 74 68 75 73 20 64 69 73 61 62   OFF (thus disab
38b0: 6c 69 6e 67 20 74 68 65 20 72 6f 6c 6c 62 61 63  ling the rollbac
38c0: 6b 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c 65 29 20  k journal.file) 
38d0: 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
38e0: 72 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43  r of the ROLLBAC
38f0: 4b 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64  K command is und
3900: 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68  efined..</p>..<h
3910: 33 3e 52 65 73 70 6f 6e 73 65 20 54 6f 20 45 72  3>Response To Er
3920: 72 6f 72 73 20 57 69 74 68 69 6e 20 41 20 54 72  rors Within A Tr
3930: 61 6e 73 61 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a  ansaction</h3>..
3940: 3c 70 3e 20 5e 28 49 66 20 63 65 72 74 61 69 6e  <p> ^(If certain
3950: 20 6b 69 6e 64 73 20 6f 66 20 65 72 72 6f 72 73   kinds of errors
3960: 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 61 20   occur within a 
3970: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
3980: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79  .transaction may
3990: 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 72   or may not be r
39a0: 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d  olled back autom
39b0: 61 74 69 63 61 6c 6c 79 2e 20 20 54 68 65 0a 65  atically.  The.e
39c0: 72 72 6f 72 73 20 74 68 61 74 20 63 61 75 73 65  rrors that cause
39d0: 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 6e   the behavior in
39e0: 63 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e  clude:</p>..<ul>
39f0: 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 46 55  .<li> [SQLITE_FU
3a00: 4c 4c 5d 3a 20 64 61 74 61 62 61 73 65 20 6f 72  LL]: database or
3a10: 20 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c 69 3e 20   disk full.<li> 
3a20: 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 3a 20  [SQLITE_IOERR]: 
3a30: 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 0a 3c  disk I/O error.<
3a40: 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 42 55 53 59  li> [SQLITE_BUSY
3a50: 5d 3a 20 64 61 74 61 62 61 73 65 20 69 6e 20 75  ]: database in u
3a60: 73 65 20 62 79 20 61 6e 6f 74 68 65 72 20 70 72  se by another pr
3a70: 6f 63 65 73 73 0a 3c 6c 69 3e 20 5b 53 51 4c 49  ocess.<li> [SQLI
3a80: 54 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75 74 20 6f  TE_NOMEM]: out o
3a90: 72 20 6d 65 6d 6f 72 79 0a 3c 6c 69 3e 20 5b 53  r memory.<li> [S
3aa0: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 5d  QLITE_INTERRUPT]
3ab0: 3a 20 70 72 6f 63 65 73 73 69 6e 67 20 5b 73 71  : processing [sq
3ac0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 7c  lite3_interrupt|
3ad0: 69 6e 74 65 72 72 75 70 74 65 64 5d 0a 20 20 20  interrupted].   
3ae0: 20 20 62 79 20 61 70 70 6c 69 63 61 74 69 6f 6e    by application
3af0: 20 72 65 71 75 65 73 74 0a 3c 2f 75 6c 3e 29 5e   request.</ul>)^
3b00: 0a 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c 6c 20 6f  ..<p>.^For all o
3b10: 66 20 74 68 65 73 65 20 65 72 72 6f 72 73 2c 20  f these errors, 
3b20: 53 51 4c 69 74 65 20 61 74 74 65 6d 70 74 73 20  SQLite attempts 
3b30: 74 6f 20 75 6e 64 6f 20 6a 75 73 74 20 74 68 65  to undo just the
3b40: 20 6f 6e 65 20 73 74 61 74 65 6d 65 6e 74 0a 69   one statement.i
3b50: 74 20 77 61 73 20 77 6f 72 6b 69 6e 67 20 6f 6e  t was working on
3b60: 20 61 6e 64 20 6c 65 61 76 65 20 63 68 61 6e 67   and leave chang
3b70: 65 73 20 66 72 6f 6d 20 70 72 69 6f 72 20 73 74  es from prior st
3b80: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
3b90: 74 68 65 0a 73 61 6d 65 20 74 72 61 6e 73 61 63  the.same transac
3ba0: 74 69 6f 6e 20 69 6e 74 61 63 74 20 61 6e 64 20  tion intact and 
3bb0: 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74 68  continue with th
3bc0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  e transaction.  
3bd0: 5e 48 6f 77 65 76 65 72 2c 20 0a 64 65 70 65 6e  ^However, .depen
3be0: 64 69 6e 67 20 6f 6e 20 74 68 65 20 73 74 61 74  ding on the stat
3bf0: 65 6d 65 6e 74 20 62 65 69 6e 67 20 65 76 61 6c  ement being eval
3c00: 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 70 6f  uated and the po
3c10: 69 6e 74 20 61 74 20 77 68 69 63 68 20 74 68 65  int at which the
3c20: 0a 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 69  .error occurs, i
3c30: 74 20 6d 69 67 68 74 20 62 65 20 6e 65 63 65 73  t might be neces
3c40: 73 61 72 79 20 66 6f 72 20 53 51 4c 69 74 65 20  sary for SQLite 
3c50: 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 0a  to rollback and.
3c60: 63 61 6e 63 65 6c 20 74 68 65 20 65 6e 74 69 72  cancel the entir
3c70: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  e transaction.  
3c80: 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  ^An application 
3c90: 63 61 6e 20 74 65 6c 6c 20 77 68 69 63 68 0a 63  can tell which.c
3ca0: 6f 75 72 73 65 20 6f 66 20 61 63 74 69 6f 6e 20  ourse of action 
3cb0: 53 51 4c 69 74 65 20 74 6f 6f 6b 20 62 79 20 75  SQLite took by u
3cc0: 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65  sing the.[sqlite
3cd0: 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
3ce0: 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20 69  ()] C-language i
3cf0: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
3d00: 70 3e 49 74 20 69 73 20 72 65 63 6f 6d 6d 65 6e  p>It is recommen
3d10: 64 65 64 20 74 68 61 74 20 61 70 70 6c 69 63 61  ded that applica
3d20: 74 69 6f 6e 73 20 72 65 73 70 6f 6e 64 20 74 6f  tions respond to
3d30: 20 74 68 65 20 65 72 72 6f 72 73 0a 6c 69 73 74   the errors.list
3d40: 65 64 20 61 62 6f 76 65 20 62 79 20 65 78 70 6c  ed above by expl
3d50: 69 63 69 74 6c 79 20 69 73 73 75 69 6e 67 20 61  icitly issuing a
3d60: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
3d70: 64 2e 20 20 5e 49 66 20 74 68 65 20 0a 74 72 61  d.  ^If the .tra
3d80: 6e 73 61 63 74 69 6f 6e 20 68 61 73 20 61 6c 72  nsaction has alr
3d90: 65 61 64 79 20 62 65 65 6e 20 72 6f 6c 6c 65 64  eady been rolled
3da0: 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61   back automatica
3db0: 6c 6c 79 0a 62 79 20 74 68 65 20 65 72 72 6f 72  lly.by the error
3dc0: 20 72 65 73 70 6f 6e 73 65 2c 20 74 68 65 6e 20   response, then 
3dd0: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  the ROLLBACK com
3de0: 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c 20 77  mand will fail w
3df0: 69 74 68 20 61 6e 0a 65 72 72 6f 72 2c 20 62 75  ith an.error, bu
3e00: 74 20 6e 6f 20 68 61 72 6d 20 69 73 20 63 61 75  t no harm is cau
3e10: 73 65 64 20 62 79 20 74 68 69 73 2e 3c 2f 70 3e  sed by this.</p>
3e20: 0a 0a 3c 70 3e 46 75 74 75 72 65 20 76 65 72 73  ..<p>Future vers
3e30: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6d  ions of SQLite m
3e40: 61 79 20 65 78 74 65 6e 64 20 74 68 65 20 6c 69  ay extend the li
3e50: 73 74 20 6f 66 20 65 72 72 6f 72 73 20 77 68 69  st of errors whi
3e60: 63 68 0a 6d 69 67 68 74 20 63 61 75 73 65 20 61  ch.might cause a
3e70: 75 74 6f 6d 61 74 69 63 20 74 72 61 6e 73 61 63  utomatic transac
3e80: 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 2e 20 20  tion rollback.  
3e90: 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  Future versions 
3ea0: 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20  of.SQLite might 
3eb0: 63 68 61 6e 67 65 20 74 68 65 20 65 72 72 6f 72  change the error
3ec0: 20 72 65 73 70 6f 6e 73 65 2e 20 20 49 6e 20 70   response.  In p
3ed0: 61 72 74 69 63 75 6c 61 72 2c 20 77 65 20 6d 61  articular, we ma
3ee0: 79 0a 63 68 6f 6f 73 65 20 74 6f 20 73 69 6d 70  y.choose to simp
3ef0: 6c 69 66 79 20 74 68 65 20 69 6e 74 65 72 66 61  lify the interfa
3f00: 63 65 20 69 6e 20 66 75 74 75 72 65 20 76 65 72  ce in future ver
3f10: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
3f20: 62 79 0a 63 61 75 73 69 6e 67 20 74 68 65 20 65  by.causing the e
3f30: 72 72 6f 72 73 20 61 62 6f 76 65 20 74 6f 20 66  rrors above to f
3f40: 6f 72 63 65 20 61 6e 20 75 6e 63 6f 6e 64 69 74  orce an uncondit
3f50: 69 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63 6b 2e 3c  ional rollback.<
3f60: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
3f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3fb0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
3fc0: 6f 6e 20 7b 53 41 56 45 50 4f 49 4e 54 7d 20 73  on {SAVEPOINT} s
3fd0: 61 76 65 70 6f 69 6e 74 20 7b 53 41 56 45 50 4f  avepoint {SAVEPO
3fe0: 49 4e 54 20 52 45 4c 45 41 53 45 7d 0a 0a 42 75  INT RELEASE}..Bu
3ff0: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65  bbleDiagram save
4000: 70 6f 69 6e 74 2d 73 74 6d 74 0a 42 75 62 62 6c  point-stmt.Bubbl
4010: 65 44 69 61 67 72 61 6d 20 72 65 6c 65 61 73 65  eDiagram release
4020: 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67  -stmt.BubbleDiag
4030: 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d  ram rollback-stm
4040: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 53  t.</tcl>..<p> ^S
4050: 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 61 20  AVEPOINTs are a 
4060: 6d 65 74 68 6f 64 20 6f 66 20 63 72 65 61 74 69  method of creati
4070: 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c  ng transactions,
4080: 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42 45 47   similar to.[BEG
4090: 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49 54 5d  IN] and [COMMIT]
40a0: 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  , except that th
40b0: 65 20 53 41 56 45 50 4f 49 4e 54 20 61 6e 64 20  e SAVEPOINT and 
40c0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 73  RELEASE commands
40d0: 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e 64 20 6d  .are named and m
40e0: 61 79 20 62 65 20 6e 65 73 74 65 64 2e 3c 2f 70  ay be nested.</p
40f0: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41 56 45  >..<p> ^The SAVE
4100: 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 73 74  POINT command st
4110: 61 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e 73  arts a new trans
4120: 61 63 74 69 6f 6e 20 77 69 74 68 20 61 20 6e 61  action with a na
4130: 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73 61 63  me..^The transac
4140: 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65 64 20  tion names need 
4150: 6e 6f 74 20 62 65 20 75 6e 69 71 75 65 2e 0a 5e  not be unique..^
4160: 28 41 20 53 41 56 45 50 4f 49 4e 54 20 63 61 6e  (A SAVEPOINT can
4170: 20 62 65 20 73 74 61 72 74 65 64 20 65 69 74 68   be started eith
4180: 65 72 20 77 69 74 68 69 6e 20 6f 72 20 6f 75 74  er within or out
4190: 73 69 64 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e  side of.a [BEGIN
41a0: 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e 20  ]...[COMMIT].)^ 
41b0: 20 5e 28 57 68 65 6e 20 61 20 53 41 56 45 50 4f   ^(When a SAVEPO
41c0: 49 4e 54 20 69 73 20 74 68 65 20 6f 75 74 65 72  INT is the outer
41d0: 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 0a  -most savepoint.
41e0: 61 6e 64 20 69 74 20 69 73 20 6e 6f 74 20 77 69  and it is not wi
41f0: 74 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d 2e 2e  thin a [BEGIN]..
4200: 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e 20 74  .[COMMIT] then t
4210: 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 74  he behavior is t
4220: 68 65 0a 73 61 6d 65 20 61 73 20 42 45 47 49 4e  he.same as BEGIN
4230: 20 44 45 46 45 52 52 45 44 20 54 52 41 4e 53 41   DEFERRED TRANSA
4240: 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70  CTION.)^</p>..<p
4250: 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54  >^The ROLLBACK T
4260: 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65 72 74  O command revert
4270: 73 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74  s the state of t
4280: 68 65 20 64 61 74 61 62 61 73 65 20 62 61 63 6b  he database back
4290: 20 74 6f 20 77 68 61 74 0a 69 74 20 77 61 73 20   to what.it was 
42a0: 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20 63  just after the c
42b0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 53 41 56  orresponding SAV
42c0: 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65 20 74  EPOINT.  ^Note t
42d0: 68 61 74 20 75 6e 6c 69 6b 65 20 74 68 61 74 0a  hat unlike that.
42e0: 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b 5d  plain [ROLLBACK]
42f0: 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68 6f 75   command (withou
4300: 74 20 74 68 65 20 54 4f 20 6b 65 79 77 6f 72 64  t the TO keyword
4310: 29 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54  ) the ROLLBACK T
4320: 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20 6e  O command.does n
4330: 6f 74 20 63 61 6e 63 65 6c 20 74 68 65 20 74 72  ot cancel the tr
4340: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49 6e 73  ansaction.  ^Ins
4350: 74 65 61 64 20 6f 66 20 63 61 6e 63 65 6c 6c 69  tead of cancelli
4360: 6e 67 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ng the transacti
4370: 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b  on,.the ROLLBACK
4380: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 73 74   TO command rest
4390: 61 72 74 73 20 74 68 65 20 74 72 61 6e 73 61 63  arts the transac
43a0: 74 69 6f 6e 20 61 67 61 69 6e 20 61 74 20 74 68  tion again at th
43b0: 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41 6c  e beginning..^Al
43c0: 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 53 41  l intervening SA
43d0: 56 45 50 4f 49 4e 54 73 20 61 72 65 20 63 61 6e  VEPOINTs are can
43e0: 63 65 6c 65 64 2c 20 68 6f 77 65 76 65 72 2e 3c  celed, however.<
43f0: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c  /p>..<p>^The REL
4400: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20  EASE command is 
4410: 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20  like a [COMMIT] 
4420: 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54 2e  for a SAVEPOINT.
4430: 0a 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f  .^The RELEASE co
4440: 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61 6c 6c  mmand causes all
4450: 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b   savepoints back
4460: 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e   to and includin
4470: 67 20 74 68 65 20 0a 6d 6f 73 74 20 72 65 63 65  g the .most rece
4480: 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74  nt savepoint wit
4490: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  h a matching nam
44a0: 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 20  e to be removed 
44b0: 66 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e 73 61  from the .transa
44c0: 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20 5e 54  ction stack.  ^T
44d0: 68 65 20 52 45 4c 45 41 53 45 20 6f 66 20 61 6e  he RELEASE of an
44e0: 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69   inner transacti
44f0: 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61 75 73  on.does not caus
4500: 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f  e any changes to
4510: 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f 20 74   be written to t
4520: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
4530: 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72 65 6d 6f  ; it merely.remo
4540: 76 65 73 20 73 61 76 65 70 6f 69 6e 74 73 20 66  ves savepoints f
4550: 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 61 63 74  rom the transact
4560: 69 6f 6e 20 73 74 61 63 6b 20 73 75 63 68 20 74  ion stack such t
4570: 68 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e  hat it is.no lon
4580: 67 65 72 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  ger possible to 
4590: 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68 6f 73  ROLLBACK TO thos
45a0: 65 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a 5e 49  e savepoints..^I
45b0: 66 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  f a RELEASE comm
45c0: 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68 65  and releases the
45d0: 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70   outermost savep
45e0: 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20 74 68  oint, so.that th
45f0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e transaction st
4600: 61 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d 70 74  ack becomes empt
4610: 79 2c 20 74 68 65 6e 20 52 45 4c 45 41 53 45 20  y, then RELEASE 
4620: 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20 5b  is the same.as [
4630: 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b 43  COMMIT]..^The [C
4640: 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d  OMMIT] command m
4650: 61 79 20 62 65 20 75 73 65 64 20 74 6f 20 72 65  ay be used to re
4660: 6c 65 61 73 65 20 61 6c 6c 20 73 61 76 65 70 6f  lease all savepo
4670: 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69 74 20  ints and.commit 
4680: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
4690: 65 76 65 6e 20 69 66 20 74 68 65 20 74 72 61 6e  even if the tran
46a0: 73 61 63 74 69 6f 6e 20 77 61 73 20 6f 72 69 67  saction was orig
46b0: 69 6e 61 6c 6c 79 20 73 74 61 72 74 65 64 0a 62  inally started.b
46c0: 79 20 61 20 53 41 56 45 50 4f 49 4e 54 20 63 6f  y a SAVEPOINT co
46d0: 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64 20 6f 66  mmand instead of
46e0: 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61   a [BEGIN] comma
46f0: 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  nd.</p>..<p>^If 
4700: 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61  the savepoint-na
4710: 6d 65 20 69 6e 20 61 20 52 45 4c 45 41 53 45 20  me in a RELEASE 
4720: 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74  command does not
4730: 20 6d 61 74 63 68 20 61 6e 79 0a 73 61 76 65 70   match any.savep
4740: 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 69  oint currently i
4750: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
4760: 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 6e 6f  n stack, then no
4770: 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 0a   savepoints are.
4780: 72 65 6c 65 61 73 65 64 2c 20 74 68 65 20 64 61  released, the da
4790: 74 61 62 61 73 65 20 69 73 20 75 6e 63 68 61 6e  tabase is unchan
47a0: 67 65 64 2c 20 61 6e 64 20 74 68 65 20 52 45 4c  ged, and the REL
47b0: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 74  EASE command ret
47c0: 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f  urns.an error.</
47d0: 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61  p>..<p>^Note tha
47e0: 74 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73  t an inner trans
47f0: 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 63 6f 6d  action might com
4800: 6d 69 74 20 28 75 73 69 6e 67 20 74 68 65 20 52  mit (using the R
4810: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 29 0a  ELEASE command).
4820: 62 75 74 20 74 68 65 6e 20 6c 61 74 65 72 20 68  but then later h
4830: 61 76 65 20 69 74 73 20 77 6f 72 6b 20 75 6e 64  ave its work und
4840: 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42 41 43  one by a ROLLBAC
4850: 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72  K in an outer tr
4860: 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20 70 6f  ansaction..^A po
4870: 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 70  wer failure or p
4880: 72 6f 67 72 61 6d 20 63 72 61 73 68 20 6f 72 20  rogram crash or 
4890: 4f 53 20 63 72 61 73 68 20 77 69 6c 6c 20 63 61  OS crash will ca
48a0: 75 73 65 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f  use the outer-mo
48b0: 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 74  st.transaction t
48c0: 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f  o rollback, undo
48d0: 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  ing all changes 
48e0: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
48f0: 65 64 20 77 69 74 68 69 6e 0a 74 68 61 74 20 6f  ed within.that o
4900: 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e  uter transaction
4910: 2c 20 65 76 65 6e 20 63 68 61 6e 67 65 73 20 74  , even changes t
4920: 68 61 74 20 68 61 76 65 20 73 75 70 70 6f 73 65  hat have suppose
4930: 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d 69 74  dly been "commit
4940: 74 65 64 22 0a 62 79 20 74 68 65 20 52 45 4c 45  ted".by the RELE
4950: 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 43  ASE command.  ^C
4960: 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 61 63  ontent is not ac
4970: 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74 65 64  tually committed
4980: 20 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a 75 6e   on the disk .un
4990: 74 69 6c 20 74 68 65 20 6f 75 74 65 72 6d 6f 73  til the outermos
49a0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  t transaction co
49b0: 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  mmits.</p>..<p>T
49c0: 68 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c  here are several
49d0: 20 77 61 79 73 20 6f 66 20 74 68 69 6e 6b 69 6e   ways of thinkin
49e0: 67 20 61 62 6f 75 74 20 74 68 65 20 52 45 4c 45  g about the RELE
49f0: 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e  ASE command:</p>
4a00: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53  ..<ul>.<li><p>.S
4a10: 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69 65 77 20  ome people view 
4a20: 52 45 4c 45 41 53 45 20 61 73 20 74 68 65 20 65  RELEASE as the e
4a30: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 43 4f 4d  quivalent of COM
4a40: 4d 49 54 20 66 6f 72 20 61 20 53 41 56 45 50 4f  MIT for a SAVEPO
4a50: 49 4e 54 2e 0a 54 68 69 73 20 69 73 20 61 6e 20  INT..This is an 
4a60: 61 63 63 65 70 74 61 62 6c 65 20 70 6f 69 6e 74  acceptable point
4a70: 20 6f 66 20 76 69 65 77 20 61 73 20 6c 6f 6e 67   of view as long
4a80: 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62 65 72   as one remember
4a90: 73 20 74 68 61 74 20 74 68 65 0a 63 68 61 6e 67  s that the.chang
4aa0: 65 73 20 63 6f 6d 6d 69 74 74 65 64 20 62 79 20  es committed by 
4ab0: 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63  an inner transac
4ac0: 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74 65 72  tion might later
4ad0: 20 62 65 20 75 6e 64 6f 6e 65 20 62 79 20 61 0a   be undone by a.
4ae0: 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e 20 6f  rollback in an o
4af0: 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e  uter transaction
4b00: 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e  .</p></li>..<li>
4b10: 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69 65 77  <p>.Another view
4b20: 20 6f 66 20 52 45 4c 45 41 53 45 20 69 73 20 74   of RELEASE is t
4b30: 68 61 74 20 69 74 20 6d 65 72 67 65 73 20 61 20  hat it merges a 
4b40: 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f  named transactio
4b50: 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61 72 65 6e  n into its.paren
4b60: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73  t transaction, s
4b70: 6f 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64  o that the named
4b80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
4b90: 20 69 74 73 20 70 61 72 65 6e 74 20 62 65 63 6f   its parent beco
4ba0: 6d 65 0a 74 68 65 20 73 61 6d 65 20 74 72 61 6e  me.the same tran
4bb0: 73 61 63 74 69 6f 6e 2e 20 20 41 66 74 65 72 20  saction.  After 
4bc0: 52 45 4c 45 41 53 45 2c 20 74 68 65 20 6e 61 6d  RELEASE, the nam
4bd0: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  ed transaction a
4be0: 6e 64 20 69 74 73 20 70 61 72 65 6e 74 0a 77 69  nd its parent.wi
4bf0: 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c  ll commit or rol
4c00: 6c 62 61 63 6b 20 74 6f 67 65 74 68 65 72 2c 20  lback together, 
4c10: 77 68 61 74 65 76 65 72 20 74 68 65 69 72 20 66  whatever their f
4c20: 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e  ate may be..</p>
4c30: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f  </li>..<li><p>.O
4c40: 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74 68 69 6e  ne can also thin
4c50: 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 73 20  k of savepoints 
4c60: 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20 74 68  as."marks" in th
4c70: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 69  e transaction ti
4c80: 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68 69 73  meline.  In this
4c90: 20 76 69 65 77 2c 20 74 68 65 20 53 41 56 45 50   view, the SAVEP
4ca0: 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63 72 65  OINT command.cre
4cb0: 61 74 65 73 20 61 20 6e 65 77 20 6d 61 72 6b 2c  ates a new mark,
4cc0: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f   the ROLLBACK TO
4cd0: 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e 64 73   command rewinds
4ce0: 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 62 61   the timeline ba
4cf0: 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20 6a 75  ck.to a point ju
4d00: 73 74 20 61 66 74 65 72 20 74 68 65 20 6e 61 6d  st after the nam
4d10: 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74 68 65  ed mark, and the
4d20: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
4d30: 0a 65 72 61 73 65 73 20 6d 61 72 6b 73 20 66 72  .erases marks fr
4d40: 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20  om the timeline 
4d50: 77 69 74 68 6f 75 74 20 61 63 74 75 61 6c 6c 79  without actually
4d60: 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68 61 6e   making any.chan
4d70: 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  ges to the datab
4d80: 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c  ase..</p></li>.<
4d90: 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e  /ul>....<h3>Tran
4da0: 73 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e 67 20  saction Nesting 
4db0: 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  Rules</h3>..<p>^
4dc0: 54 68 65 20 6c 61 73 74 20 74 72 61 6e 73 61 63  The last transac
4dd0: 74 69 6f 6e 20 73 74 61 72 74 65 64 20 77 69 6c  tion started wil
4de0: 6c 20 62 65 20 74 68 65 20 66 69 72 73 74 0a 74  l be the first.t
4df0: 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69  ransaction commi
4e00: 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64 20 62  tted or rolled b
4e10: 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ack.</p>..<p>^Th
4e20: 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e  e [BEGIN] comman
4e30: 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20  d only works if 
4e40: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
4e50: 73 74 61 63 6b 20 69 73 20 65 6d 70 74 79 2c 20  stack is empty, 
4e60: 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f 72 64  or.in other word
4e70: 73 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  s if there are n
4e80: 6f 20 70 65 6e 64 69 6e 67 20 74 72 61 6e 73 61  o pending transa
4e90: 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74 68 65  ctions.  ^If the
4ea0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73 74 61   transaction.sta
4eb0: 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  ck is not empty 
4ec0: 77 68 65 6e 20 74 68 65 20 5b 42 45 47 49 4e 5d  when the [BEGIN]
4ed0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f   command is invo
4ee0: 6b 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ked, then the co
4ef0: 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69 74 68  mmand.fails with
4f00: 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a   an error.</p>..
4f10: 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d  <p>^The [COMMIT]
4f20: 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74 73   command commits
4f30: 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67   all outstanding
4f40: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e   transactions an
4f50: 64 20 6c 65 61 76 65 73 0a 74 68 65 20 74 72 61  d leaves.the tra
4f60: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65  nsaction stack e
4f70: 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  mpty.</p>..<p>^T
4f80: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
4f90: 6e 64 20 73 74 61 72 74 73 20 77 69 74 68 20 74  nd starts with t
4fa0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61  he most recent a
4fb0: 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65 0a 74  ddition to the.t
4fc0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
4fd0: 20 61 6e 64 20 72 65 6c 65 61 73 65 73 20 73 61   and releases sa
4fe0: 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 77 61 72  vepoints backwar
4ff0: 64 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e 74 69  ds .in time unti
5000: 6c 20 69 74 20 72 65 6c 65 61 73 65 73 20 61 20  l it releases a 
5010: 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61  savepoint with a
5020: 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f   matching savepo
5030: 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f 72  int-name..^Prior
5040: 20 73 61 76 65 70 6f 69 6e 74 73 2c 20 65 76 65   savepoints, eve
5050: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69 74  n savepoints wit
5060: 68 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70  h matching savep
5070: 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72 65 0a  oint-names, are.
5080: 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66 20 74  unchanged..^If t
5090: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
50a0: 6e 64 20 63 61 75 73 65 73 20 74 68 65 0a 74 72  nd causes the.tr
50b0: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
50c0: 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74 79 20  to become empty 
50d0: 28 69 66 20 74 68 65 20 52 45 4c 45 41 53 45 20  (if the RELEASE 
50e0: 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73  command releases
50f0: 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74 20 74   the.outermost t
5100: 72 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f 6d 20  ransaction from 
5110: 74 68 65 20 73 74 61 63 6b 29 20 74 68 65 6e 20  the stack) then 
5120: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
5130: 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70  commits.</p>..<p
5140: 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d  >^The [ROLLBACK]
5150: 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74   command without
5160: 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c   a TO clause rol
5170: 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20 74 72 61  ls backs all tra
5180: 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20 6c 65  nsactions.and le
5190: 61 76 65 73 20 74 68 65 20 74 72 61 6e 73 61 63  aves the transac
51a0: 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79  tion stack empty
51b0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  .</p>..<p>^The R
51c0: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
51d0: 77 69 74 68 20 61 20 54 4f 20 63 6c 61 75 73 65  with a TO clause
51e0: 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72 61 6e   rolls back tran
51f0: 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67 0a 62  sactions going.b
5200: 61 63 6b 77 61 72 64 73 20 69 6e 20 74 69 6d 65  ackwards in time
5210: 20 62 61 63 6b 20 74 6f 20 74 68 65 20 6d 6f 73   back to the mos
5220: 74 20 72 65 63 65 6e 74 20 53 41 56 45 50 4f 49  t recent SAVEPOI
5230: 4e 54 20 77 69 74 68 20 61 20 6d 61 74 63 68 69  NT with a matchi
5240: 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 53 41  ng name..^The SA
5250: 56 45 50 4f 49 4e 54 20 77 69 74 68 20 74 68 65  VEPOINT with the
5260: 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 72   matching name r
5270: 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20 74 72  emains on the tr
5280: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c  ansaction stack,
5290: 0a 62 75 74 20 61 6c 6c 20 64 61 74 61 62 61 73  .but all databas
52a0: 65 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 6f  e changes that o
52b0: 63 63 75 72 72 65 64 20 61 66 74 65 72 20 74 68  ccurred after th
52c0: 61 74 20 53 41 56 45 50 4f 49 4e 54 20 77 61 73  at SAVEPOINT was
52d0: 20 63 72 65 61 74 65 64 0a 61 72 65 20 72 6f 6c   created.are rol
52e0: 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74  led back.  ^If t
52f0: 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d  he savepoint-nam
5300: 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  e in a ROLLBACK 
5310: 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20  TO command does 
5320: 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20 53 41  not.match any SA
5330: 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65 20 73  VEPOINT on the s
5340: 74 61 63 6b 2c 20 74 68 65 6e 20 74 68 65 20 52  tack, then the R
5350: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
5360: 66 61 69 6c 73 20 77 69 74 68 20 61 6e 0a 65 72  fails with an.er
5370: 72 6f 72 20 61 6e 64 20 6c 65 61 76 65 73 20 74  ror and leaves t
5380: 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
5390: 64 61 74 61 62 61 73 65 20 75 6e 63 68 61 6e 67  database unchang
53a0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  ed.</p>..<tcl>.#
53b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
5400: 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63  ection comment c
5410: 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20  omment {comment 
5420: 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 42 75 62 62  *comments}..Bubb
5430: 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 65 6e  leDiagram commen
5440: 74 2d 73 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a  t-syntax.</tcl>.
5450: 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61 72  .<p>^Comments ar
5460: 65 20 6e 6f 74 20 53 51 4c 20 63 6f 6d 6d 61 6e  e not SQL comman
5470: 64 73 2c 20 62 75 74 20 63 61 6e 20 6f 63 63 75  ds, but can occu
5480: 72 20 77 69 74 68 69 6e 20 74 68 65 20 74 65 78  r within the tex
5490: 74 20 6f 66 0a 53 51 4c 20 71 75 65 72 69 65 73  t of.SQL queries
54a0: 20 70 61 73 73 65 64 20 74 6f 20 5b 73 71 6c 69   passed to [sqli
54b0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29  te3_prepare_v2()
54c0: 5d 20 61 6e 64 20 72 65 6c 61 74 65 64 20 69 6e  ] and related in
54d0: 74 65 72 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d 65  terfaces..^Comme
54e0: 6e 74 73 20 61 72 65 20 74 72 65 61 74 65 64 20  nts are treated 
54f0: 61 73 20 77 68 69 74 65 73 70 61 63 65 20 62 79  as whitespace by
5500: 20 74 68 65 20 70 61 72 73 65 72 2e 0a 5e 43 6f   the parser..^Co
5510: 6d 6d 65 6e 74 73 20 63 61 6e 20 62 65 67 69 6e  mments can begin
5520: 20 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73   anywhere whites
5530: 70 61 63 65 20 0a 63 61 6e 20 62 65 20 66 6f 75  pace .can be fou
5540: 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e  nd, including in
5550: 73 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73  side expressions
5560: 20 74 68 61 74 20 73 70 61 6e 20 6d 75 6c 74 69   that span multi
5570: 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a  ple lines..</p>.
5580: 0a 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e 74  .<p>^SQL comment
5590: 73 20 62 65 67 69 6e 20 77 69 74 68 20 74 77 6f  s begin with two
55a0: 20 63 6f 6e 73 65 63 75 74 69 76 65 20 22 2d 22   consecutive "-"
55b0: 20 63 68 61 72 61 63 74 65 72 73 20 28 41 53 43   characters (ASC
55c0: 49 49 20 30 78 32 64 29 0a 61 6e 64 20 65 78 74  II 0x2d).and ext
55d0: 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e  end up to and in
55e0: 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74  cluding the next
55f0: 20 6e 65 77 6c 69 6e 65 20 63 68 61 72 61 63 74   newline charact
5600: 65 72 20 28 41 53 43 49 49 20 30 78 30 61 29 0a  er (ASCII 0x0a).
5610: 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64  or until the end
5620: 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68   of input, which
5630: 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74  ever comes first
5640: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74 79  .</p>..<p>^C-sty
5650: 6c 65 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69  le comments begi
5660: 6e 0a 77 69 74 68 20 22 2f 2a 22 20 61 6e 64 20  n.with "/*" and 
5670: 65 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64  extend up to and
5680: 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e   including the n
5690: 65 78 74 20 22 2a 2f 22 20 63 68 61 72 61 63 74  ext "*/" charact
56a0: 65 72 20 70 61 69 72 0a 6f 72 20 75 6e 74 69 6c  er pair.or until
56b0: 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75   the end of inpu
56c0: 74 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d  t, whichever com
56d0: 65 73 20 66 69 72 73 74 2e 20 20 5e 43 2d 73 74  es first.  ^C-st
56e0: 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e  yle comments.can
56f0: 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c   span multiple l
5700: 69 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ines. </p>..<p>^
5710: 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 61 70 70  Comments can app
5720: 65 61 72 20 61 6e 79 77 68 65 72 65 20 77 68 69  ear anywhere whi
5730: 74 65 73 70 61 63 65 20 63 61 6e 20 6f 63 63 75  tespace can occu
5740: 72 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73  r,.including ins
5750: 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ide expressions 
5760: 61 6e 64 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  and in the middl
5770: 65 20 6f 66 20 6f 74 68 65 72 20 53 51 4c 20 73  e of other SQL s
5780: 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d 6d  tatements..^Comm
5790: 65 6e 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74  ents do not nest
57a0: 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23  ..</p>...<tcl>.#
57b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
5800: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e  ction {CREATE IN
5810: 44 45 58 7d 20 63 72 65 61 74 65 69 6e 64 65 78  DEX} createindex
5820: 20 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d   {{CREATE INDEX}
5830: 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
5840: 20 63 72 65 61 74 65 2d 69 6e 64 65 78 2d 73 74   create-index-st
5850: 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72  mt 1.BubbleDiagr
5860: 61 6d 20 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d  am indexed-colum
5870: 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  n.</tcl>..<p>^Th
5880: 65 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63  e CREATE INDEX c
5890: 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73 20  ommand consists 
58a0: 6f 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20  of the keywords 
58b0: 22 43 52 45 41 54 45 20 49 4e 44 45 58 22 20 66  "CREATE INDEX" f
58c0: 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 6e  ollowed.by the n
58d0: 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20 69  ame of the new i
58e0: 6e 64 65 78 2c 20 74 68 65 20 6b 65 79 77 6f 72  ndex, the keywor
58f0: 64 20 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65  d "ON", the name
5900: 20 6f 66 20 61 20 70 72 65 76 69 6f 75 73 6c 79   of a previously
5910: 0a 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 74  .created table t
5920: 68 61 74 20 69 73 20 74 6f 20 62 65 20 69 6e 64  hat is to be ind
5930: 65 78 65 64 2c 20 61 6e 64 20 61 20 70 61 72 65  exed, and a pare
5940: 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f  nthesized list o
5950: 66 20 6e 61 6d 65 73 20 6f 66 0a 63 6f 6c 75 6d  f names of.colum
5960: 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ns in the table 
5970: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 66 6f  that are used fo
5980: 72 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  r the index key.
5990: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 63  </p>..<p>^Each c
59a0: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62  olumn name can b
59b0: 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f 6e  e followed by on
59c0: 65 20 6f 66 20 74 68 65 20 22 41 53 43 22 20 6f  e of the "ASC" o
59d0: 72 20 22 44 45 53 43 22 20 6b 65 79 77 6f 72 64  r "DESC" keyword
59e0: 73 0a 74 6f 20 69 6e 64 69 63 61 74 65 20 73 6f  s.to indicate so
59f0: 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20  rt order.  ^The 
5a00: 73 6f 72 74 20 6f 72 64 65 72 20 6d 61 79 20 6f  sort order may o
5a10: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 69 67 6e  r may not be ign
5a20: 6f 72 65 64 20 64 65 70 65 6e 64 69 6e 67 0a 6f  ored depending.o
5a30: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
5a40: 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20 5e 54 68  ile format.  ^Th
5a50: 65 20 22 6c 65 67 61 63 79 22 20 66 69 6c 65 20  e "legacy" file 
5a60: 66 6f 72 6d 61 74 20 69 67 6e 6f 72 65 73 20 69  format ignores i
5a70: 6e 64 65 78 0a 73 6f 72 74 20 6f 72 64 65 72 2e  ndex.sort order.
5a80: 20 20 5e 54 68 65 20 64 65 73 63 65 6e 64 69 6e    ^The descendin
5a90: 67 20 69 6e 64 65 78 20 66 69 6c 65 20 66 6f 72  g index file for
5aa0: 6d 61 74 20 74 61 6b 65 73 20 69 6e 64 65 78 20  mat takes index 
5ab0: 73 6f 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20  sort order.into 
5ac0: 61 63 63 6f 75 6e 74 2e 20 20 5e 28 4f 6e 6c 79  account.  ^(Only
5ad0: 20 63 6f 70 69 65 73 20 6f 66 20 53 51 4c 69 74   copies of SQLit
5ae0: 65 20 6e 65 77 65 72 20 74 68 61 6e 20 5b 76 65  e newer than [ve
5af0: 72 73 69 6f 6e 20 33 2e 33 2e 30 5d 20 0a 28 72  rsion 3.3.0] .(r
5b00: 65 6c 65 61 73 65 64 20 6f 6e 20 32 30 30 36 2d  eleased on 2006-
5b10: 30 31 2d 31 30 29 20 61 72 65 20 61 62 6c 65 20  01-10) are able 
5b20: 74 6f 20 75 6e 64 65 72 73 74 61 6e 64 20 74 68  to understand th
5b30: 65 20 6e 65 77 65 72 20 64 65 73 63 65 6e 64 69  e newer descendi
5b40: 6e 67 0a 69 6e 64 65 78 20 66 69 6c 65 20 66 6f  ng.index file fo
5b50: 72 6d 61 74 20 61 6e 64 20 73 6f 20 66 6f 72 20  rmat and so for 
5b60: 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69  compatibility wi
5b70: 74 68 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e  th older version
5b80: 73 20 6f 66 0a 53 51 4c 69 74 65 2c 20 74 68 65  s of.SQLite, the
5b90: 20 6c 65 67 61 63 79 20 66 69 6c 65 20 66 6f 72   legacy file for
5ba0: 6d 61 74 20 69 73 20 67 65 6e 65 72 61 74 65 64  mat is generated
5bb0: 20 62 79 20 64 65 66 61 75 6c 74 2e 29 5e 20 20   by default.)^  
5bc0: 5e 55 73 65 20 74 68 65 0a 5b 6c 65 67 61 63 79  ^Use the.[legacy
5bd0: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 5d 20 70 72  _file_format] pr
5be0: 61 67 6d 61 20 74 6f 20 6d 6f 64 69 66 79 20 74  agma to modify t
5bf0: 68 69 73 20 62 65 68 61 76 69 6f 72 20 61 6e 64  his behavior and
5c00: 20 67 65 6e 65 72 61 74 65 0a 64 61 74 61 62 61   generate.databa
5c10: 73 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65  ses that use the
5c20: 20 6e 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d   newer file form
5c30: 61 74 2e 20 20 46 75 74 75 72 65 20 76 65 72 73  at.  Future vers
5c40: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 6d  ions of SQLite.m
5c50: 61 79 20 62 65 67 69 6e 20 74 6f 20 67 65 6e 65  ay begin to gene
5c60: 72 61 74 65 20 74 68 65 20 6e 65 77 65 72 20 66  rate the newer f
5c70: 69 6c 65 20 66 6f 72 6d 61 74 20 62 79 20 64 65  ile format by de
5c80: 66 61 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  fault.</p>..<p>^
5c90: 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75  The COLLATE clau
5ca0: 73 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  se optionally fo
5cb0: 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20 63 6f 6c  llowing each col
5cc0: 75 6d 6e 20 6e 61 6d 65 20 64 65 66 69 6e 65 73  umn name defines
5cd0: 20 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71   a.collating seq
5ce0: 75 65 6e 63 65 20 75 73 65 64 20 66 6f 72 20 74  uence used for t
5cf0: 65 78 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74  ext entries in t
5d00: 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54 68 65  hat column..^The
5d10: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
5d20: 6e 67 0a 73 65 71 75 65 6e 63 65 20 69 73 20 74  ng.sequence is t
5d30: 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  he collating seq
5d40: 75 65 6e 63 65 20 64 65 66 69 6e 65 64 20 66 6f  uence defined fo
5d50: 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 6e  r that column in
5d60: 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42   the.[CREATE TAB
5d70: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
5d80: 5e 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c 61 74  ^Or if no collat
5d90: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
5da0: 6f 74 68 65 72 77 69 73 65 20 64 65 66 69 6e 65  otherwise define
5db0: 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69 6e 20  d,.the built-in 
5dc0: 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67  BINARY collating
5dd0: 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65   sequence is use
5de0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65  d.</p>..<p>There
5df0: 20 61 72 65 20 6e 6f 20 61 72 62 69 74 72 61 72   are no arbitrar
5e00: 79 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68 65 20  y limits on the 
5e10: 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64 69 63 65  number of indice
5e20: 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a 61 74  s that can be.at
5e30: 74 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e 67  tached to a sing
5e40: 6c 65 20 74 61 62 6c 65 2e 20 20 5e 28 54 68 65  le table.  ^(The
5e50: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
5e60: 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 69  ns in an index i
5e70: 73 20 0a 6c 69 6d 69 74 65 64 20 74 6f 20 74 68  s .limited to th
5e80: 65 20 76 61 6c 75 65 20 73 65 74 20 62 79 0a 5b  e value set by.[
5e90: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 5b  sqlite3_limit]([
5ea0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c  SQLITE_LIMIT_COL
5eb0: 55 4d 4e 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e  UMN],...).)^</p>
5ec0: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 4e 49  ..<p>^If the UNI
5ed0: 51 55 45 20 6b 65 79 77 6f 72 64 20 61 70 70 65  QUE keyword appe
5ee0: 61 72 73 20 62 65 74 77 65 65 6e 20 43 52 45 41  ars between CREA
5ef0: 54 45 20 61 6e 64 20 49 4e 44 45 58 20 74 68 65  TE and INDEX the
5f00: 6e 20 64 75 70 6c 69 63 61 74 65 0a 69 6e 64 65  n duplicate.inde
5f10: 78 20 65 6e 74 72 69 65 73 20 61 72 65 20 6e 6f  x entries are no
5f20: 74 20 61 6c 6c 6f 77 65 64 2e 20 20 5e 41 6e 79  t allowed.  ^Any
5f30: 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 73 65   attempt to inse
5f40: 72 74 20 61 20 64 75 70 6c 69 63 61 74 65 20 65  rt a duplicate e
5f50: 6e 74 72 79 0a 77 69 6c 6c 20 72 65 73 75 6c 74  ntry.will result
5f60: 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 20 20 5e   in an error.  ^
5f70: 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
5f80: 20 6f 66 20 75 6e 69 71 75 65 20 69 6e 64 69 63   of unique indic
5f90: 65 73 2c 20 61 6c 6c 20 4e 55 4c 4c 20 76 61 6c  es, all NULL val
5fa0: 75 65 73 0a 61 72 65 20 63 6f 6e 73 69 64 65 72  ues.are consider
5fb0: 65 64 20 74 6f 20 64 69 66 66 65 72 65 6e 74 20  ed to different 
5fc0: 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 4e  from all other N
5fd0: 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 20 61  ULL values and a
5fe0: 72 65 20 74 68 75 73 20 75 6e 69 71 75 65 2e 0a  re thus unique..
5ff0: 54 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74  This is one of t
6000: 68 65 20 74 77 6f 20 70 6f 73 73 69 62 6c 65 20  he two possible 
6010: 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 73 20  interpretations 
6020: 6f 66 20 74 68 65 20 53 51 4c 2d 39 32 20 73 74  of the SQL-92 st
6030: 61 6e 64 61 72 64 0a 28 74 68 65 20 6c 61 6e 67  andard.(the lang
6040: 75 61 67 65 20 69 6e 20 74 68 65 20 73 74 61 6e  uage in the stan
6050: 64 61 72 64 20 69 73 20 61 6d 62 69 67 75 6f 75  dard is ambiguou
6060: 73 29 20 61 6e 64 20 69 73 20 74 68 65 20 69 6e  s) and is the in
6070: 74 65 72 70 72 65 74 61 74 69 6f 6e 0a 66 6f 6c  terpretation.fol
6080: 6c 6f 77 65 64 20 62 79 20 50 6f 73 74 67 72 65  lowed by Postgre
6090: 53 51 4c 2c 20 4d 79 53 51 4c 2c 20 46 69 72 65  SQL, MySQL, Fire
60a0: 62 69 72 64 2c 20 61 6e 64 20 4f 72 61 63 6c 65  bird, and Oracle
60b0: 2e 20 20 49 6e 66 6f 72 6d 69 78 20 61 6e 64 0a  .  Informix and.
60c0: 4d 69 63 72 6f 73 6f 66 74 20 53 51 4c 20 53 65  Microsoft SQL Se
60d0: 72 76 65 72 20 66 6f 6c 6c 6f 77 20 74 68 65 20  rver follow the 
60e0: 6f 74 68 65 72 20 69 6e 74 65 72 70 72 65 74 61  other interpreta
60f0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 61 6e  tion of the stan
6100: 64 61 72 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  dard.</p>..<p>^I
6110: 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49  f the optional I
6120: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63 6c 61  F NOT EXISTS cla
6130: 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 20 61  use is present a
6140: 6e 64 20 61 6e 6f 74 68 65 72 20 69 6e 64 65 78  nd another index
6150: 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e  .with the same n
6160: 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78 69 73  ame already exis
6170: 74 73 2c 20 74 68 65 6e 20 74 68 69 73 20 63 6f  ts, then this co
6180: 6d 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20 61 20  mmand becomes a 
6190: 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  no-op.</p>..<p>^
61a0: 49 6e 64 65 78 65 73 20 61 72 65 20 72 65 6d 6f  Indexes are remo
61b0: 76 65 64 20 77 69 74 68 20 74 68 65 20 5b 44 52  ved with the [DR
61c0: 4f 50 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e  OP INDEX] comman
61d0: 64 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23  d.</p>...<tcl>.#
61e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
61f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6220: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
6230: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 41  ction {CREATE TA
6240: 42 4c 45 7d 20 7b 63 72 65 61 74 65 74 61 62 6c  BLE} {createtabl
6250: 65 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c  e} {{CREATE TABL
6260: 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  E}}..BubbleDiagr
6270: 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d  am create-table-
6280: 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61  stmt 1.BubbleDia
6290: 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 64 65 66 0a  gram column-def.
62a0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 74 79  BubbleDiagram ty
62b0: 70 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65 44 69  pe-name.BubbleDi
62c0: 61 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 63 6f 6e  agram column-con
62d0: 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69  straint.BubbleDi
62e0: 61 67 72 61 6d 20 74 61 62 6c 65 2d 63 6f 6e 73  agram table-cons
62f0: 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61  traint.BubbleDia
6300: 67 72 61 6d 20 66 6f 72 65 69 67 6e 2d 6b 65 79  gram foreign-key
6310: 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a  -clause.</tcl>..
6320: 3c 70 3e 5e 41 20 43 52 45 41 54 45 20 54 41 42  <p>^A CREATE TAB
6330: 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  LE statement is 
6340: 62 61 73 69 63 61 6c 6c 79 20 74 68 65 20 6b 65  basically the ke
6350: 79 77 6f 72 64 73 20 22 43 52 45 41 54 45 20 54  ywords "CREATE T
6360: 41 42 4c 45 22 0a 66 6f 6c 6c 6f 77 65 64 20 62  ABLE".followed b
6370: 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  y the name of a 
6380: 6e 65 77 20 74 61 62 6c 65 20 61 6e 64 20 61 20  new table and a 
6390: 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69  parenthesized li
63a0: 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 0a 64 65 66  st of column.def
63b0: 69 6e 69 74 69 6f 6e 73 20 61 6e 64 20 63 6f 6e  initions and con
63c0: 73 74 72 61 69 6e 74 73 2e 20 20 0a 5e 54 61 62  straints.  .^Tab
63d0: 6c 65 73 20 6e 61 6d 65 73 20 74 68 61 74 20 62  les names that b
63e0: 65 67 69 6e 20 77 69 74 68 20 22 3c 62 3e 73 71  egin with "<b>sq
63f0: 6c 69 74 65 5f 3c 2f 62 3e 22 20 61 72 65 20 72  lite_</b>" are r
6400: 65 73 65 72 76 65 64 0a 66 6f 72 20 75 73 65 20  eserved.for use 
6410: 62 79 20 53 51 4c 69 74 65 20 69 74 73 65 6c 66  by SQLite itself
6420: 20 61 6e 64 20 63 61 6e 6e 6f 74 20 6e 6f 72 6d   and cannot norm
6430: 61 6c 6c 79 0a 61 70 70 65 61 72 20 69 6e 20 61  ally.appear in a
6440: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
6450: 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74  atement.</p>..<t
6460: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  cl>hd_fragment {
6470: 74 61 62 6c 65 63 6f 6c 64 65 66 7d 20 7b 63 6f  tablecoldef} {co
6480: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 7d  lumn definition}
6490: 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   {column definit
64a0: 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  ions}</tcl>.<p>^
64b0: 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69  Each column defi
64c0: 6e 69 74 69 6f 6e 20 69 73 20 74 68 65 20 6e 61  nition is the na
64d0: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  me of the column
64e0: 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c   optionally foll
64f0: 6f 77 65 64 20 62 79 20 74 68 65 0a 5b 64 61 74  owed by the.[dat
6500: 61 74 79 70 65 5d 20 66 6f 72 20 74 68 61 74 20  atype] for that 
6510: 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 6f 6e 65  column, then one
6520: 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61   or more optiona
6530: 6c 20 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61  l column constra
6540: 69 6e 74 73 2e 0a 5e 53 51 4c 69 74 65 20 75 73  ints..^SQLite us
6550: 65 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69  es [dynamic typi
6560: 6e 67 5d 3b 20 0a 74 68 65 20 64 61 74 61 74 79  ng]; .the dataty
6570: 70 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  pe for the colum
6580: 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 74 72  n does not restr
6590: 69 63 74 20 77 68 61 74 20 64 61 74 61 20 6d 61  ict what data ma
65a0: 79 20 62 65 20 70 75 74 0a 69 6e 20 74 68 61 74  y be put.in that
65b0: 20 63 6f 6c 75 6d 6e 2e 0a 5e 54 68 65 20 55 4e   column..^The UN
65c0: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
65d0: 63 61 75 73 65 73 20 61 6e 20 75 6e 69 71 75 65  causes an unique
65e0: 20 69 6e 64 65 78 20 74 6f 20 62 65 20 63 72 65   index to be cre
65f0: 61 74 65 64 20 6f 6e 20 74 68 65 20 73 70 65 63  ated on the spec
6600: 69 66 69 65 64 0a 63 6f 6c 75 6d 6e 73 2e 20 20  ified.columns.  
6610: 5e 41 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ^All NULL values
6620: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
6630: 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 65  different from e
6640: 61 63 68 20 6f 74 68 65 72 20 61 6e 64 20 66 72  ach other and fr
6650: 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c  om.all other val
6660: 75 65 73 20 66 6f 72 20 74 68 65 20 70 75 72 70  ues for the purp
6670: 6f 73 65 20 6f 66 20 64 65 74 65 72 6d 69 6e 69  ose of determini
6680: 6e 67 20 75 6e 69 71 75 65 6e 65 73 73 2c 20 68  ng uniqueness, h
6690: 65 6e 63 65 20 61 20 55 4e 49 51 55 45 0a 63 6f  ence a UNIQUE.co
66a0: 6c 75 6d 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e  lumn may contain
66b0: 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65   multiple entrie
66c0: 73 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  s with the value
66d0: 20 6f 66 20 4e 55 4c 4c 2e 0a 5e 54 68 65 20 43   of NULL..^The C
66e0: 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 73 70  OLLATE clause sp
66f0: 65 63 69 66 69 65 73 20 77 68 61 74 20 74 65 78  ecifies what tex
6700: 74 20 0a 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75  t .[collating fu
6710: 6e 63 74 69 6f 6e 5d 20 74 6f 20 75 73 65 20 77  nction] to use w
6720: 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 65  hen comparing te
6730: 78 74 20 65 6e 74 72 69 65 73 20 66 6f 72 20 74  xt entries for t
6740: 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 0a 5e 54 68  he column.  .^Th
6750: 65 20 62 75 69 6c 74 2d 69 6e 20 5b 42 49 4e 41  e built-in [BINA
6760: 52 59 5d 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  RY] collating fu
6770: 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 62  nction is used b
6780: 79 20 64 65 66 61 75 6c 74 2e 0a 3c 70 3e 0a 5e  y default..<p>.^
6790: 54 68 65 20 44 45 46 41 55 4c 54 20 63 6f 6e 73  The DEFAULT cons
67a0: 74 72 61 69 6e 74 20 73 70 65 63 69 66 69 65 73  traint specifies
67b0: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
67c0: 20 74 6f 20 75 73 65 20 77 68 65 6e 20 64 6f 69   to use when doi
67d0: 6e 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 0a  ng an [INSERT]..
67e0: 5e 54 68 65 20 76 61 6c 75 65 20 6d 61 79 20 62  ^The value may b
67f0: 65 20 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67  e NULL, a string
6800: 20 63 6f 6e 73 74 61 6e 74 2c 20 61 20 6e 75 6d   constant, a num
6810: 62 65 72 2c 20 6f 72 20 61 20 63 6f 6e 73 74 61  ber, or a consta
6820: 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 0a 65 6e  nt expression.en
6830: 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65 6e 74  closed in parent
6840: 68 65 73 65 73 2e 0a 5e 54 68 65 20 64 65 66 61  heses..^The defa
6850: 75 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c  ult value may al
6860: 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  so be one of the
6870: 20 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e   special case-in
6880: 64 65 70 65 6e 64 65 6e 74 0a 6b 65 79 77 6f 72  dependent.keywor
6890: 64 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c  ds CURRENT_TIME,
68a0: 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72   CURRENT_DATE or
68b0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
68c0: 4d 50 2e 20 20 5e 49 66 20 74 68 65 20 76 61 6c  MP.  ^If the val
68d0: 75 65 20 69 73 0a 4e 55 4c 4c 2c 20 61 20 73 74  ue is.NULL, a st
68e0: 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 6f 72  ring constant or
68f0: 20 6e 75 6d 62 65 72 2c 20 69 74 20 69 73 20 69   number, it is i
6900: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
6910: 20 63 6f 6c 75 6d 6e 0a 77 68 65 6e 65 76 65 72   column.whenever
6920: 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
6930: 6d 65 6e 74 20 74 68 61 74 20 64 6f 65 73 20 6e  ment that does n
6940: 6f 74 20 73 70 65 63 69 66 79 20 61 20 76 61 6c  ot specify a val
6950: 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ue for the colum
6960: 6e 20 69 73 0a 65 78 65 63 75 74 65 64 2e 20 5e  n is.executed. ^
6970: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
6980: 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55  CURRENT_TIME, CU
6990: 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43 55  RRENT_DATE or CU
69a0: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c  RRENT_TIMESTAMP,
69b0: 20 74 68 65 6e 0a 74 68 65 20 63 75 72 72 65 6e   then.the curren
69c0: 74 20 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f  t UTC date and/o
69d0: 72 20 74 69 6d 65 20 69 73 20 69 6e 73 65 72 74  r time is insert
69e0: 65 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 6c 75  ed into the colu
69f0: 6d 6e 73 2e 20 5e 46 6f 72 0a 43 55 52 52 45 4e  mns. ^For.CURREN
6a00: 54 5f 54 49 4d 45 2c 20 74 68 65 20 66 6f 72 6d  T_TIME, the form
6a10: 61 74 20 69 73 20 48 48 3a 4d 4d 3a 53 53 2e 20  at is HH:MM:SS. 
6a20: 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 44 41 54  ^For CURRENT_DAT
6a30: 45 2c 20 59 59 59 59 2d 4d 4d 2d 44 44 2e 0a 5e  E, YYYY-MM-DD..^
6a40: 54 68 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 43  The format for C
6a50: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
6a60: 20 69 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20   is "YYYY-MM-DD 
6a70: 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c 2f 70 3e 0a  HH:MM:SS"..</p>.
6a80: 0a 3c 70 3e 5e 28 54 68 65 20 50 52 49 4d 41 52  .<p>^(The PRIMAR
6a90: 59 20 4b 45 59 20 61 74 74 72 69 62 75 74 65 20  Y KEY attribute 
6aa0: 6e 6f 72 6d 61 6c 6c 79 20 63 72 65 61 74 65 73  normally creates
6ab0: 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20   a UNIQUE index 
6ac0: 6f 6e 0a 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72  on.the column or
6ad0: 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72   columns that ar
6ae0: 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  e specified as t
6af0: 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20  he PRIMARY KEY. 
6b00: 20 54 68 65 20 6f 6e 6c 79 0a 65 78 63 65 70 74   The only.except
6b10: 69 6f 6e 20 74 6f 20 74 68 69 73 20 62 65 68 61  ion to this beha
6b20: 76 69 6f 72 20 69 73 20 73 70 65 63 69 61 6c 20  vior is special 
6b30: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
6b40: 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 2c 0a 64 65   KEY] column,.de
6b50: 73 63 72 69 62 65 64 20 62 65 6c 6f 77 2e 29 5e  scribed below.)^
6b60: 0a 5e 28 41 63 63 6f 72 64 69 6e 67 20 74 6f 20  .^(According to 
6b70: 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64  the SQL standard
6b80: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20 73 68  , PRIMARY KEY sh
6b90: 6f 75 6c 64 20 69 6d 70 6c 79 20 4e 4f 54 20 4e  ould imply NOT N
6ba0: 55 4c 4c 2e 0a 55 6e 66 6f 72 74 75 6e 61 74 65  ULL..Unfortunate
6bb0: 6c 79 2c 20 64 75 65 20 74 6f 20 61 20 6c 6f 6e  ly, due to a lon
6bc0: 67 2d 73 74 61 6e 64 69 6e 67 20 63 6f 64 69 6e  g-standing codin
6bd0: 67 20 6f 76 65 72 73 69 67 68 74 2c 20 74 68 69  g oversight, thi
6be0: 73 20 69 73 20 6e 6f 74 20 0a 74 68 65 20 63 61  s is not .the ca
6bf0: 73 65 20 69 6e 20 53 51 4c 69 74 65 2e 20 20 53  se in SQLite.  S
6c00: 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c  QLite allows NUL
6c10: 4c 20 76 61 6c 75 65 73 0a 69 6e 20 61 20 50 52  L values.in a PR
6c20: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e  IMARY KEY column
6c30: 2e 29 5e 20 20 57 65 20 63 6f 75 6c 64 20 63 68  .)^  We could ch
6c40: 61 6e 67 65 20 53 51 4c 69 74 65 20 74 6f 20 63  ange SQLite to c
6c50: 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 0a 73 74  onform to the.st
6c60: 61 6e 64 61 72 64 20 28 61 6e 64 20 77 65 20 6d  andard (and we m
6c70: 69 67 68 74 20 64 6f 20 73 6f 20 69 6e 20 74 68  ight do so in th
6c80: 65 20 66 75 74 75 72 65 29 2c 20 62 75 74 20 62  e future), but b
6c90: 79 20 74 68 65 20 74 69 6d 65 20 74 68 65 0a 6f  y the time the.o
6ca0: 76 65 72 73 69 67 68 74 20 77 61 73 20 64 69 73  versight was dis
6cb0: 63 6f 76 65 72 65 64 2c 20 53 51 4c 69 74 65 20  covered, SQLite 
6cc0: 77 61 73 20 69 6e 20 73 75 63 68 20 77 69 64 65  was in such wide
6cd0: 20 75 73 65 20 74 68 61 74 20 77 65 20 66 65 61   use that we fea
6ce0: 72 65 64 0a 62 72 65 61 6b 69 6e 67 20 6c 65 67  red.breaking leg
6cf0: 61 63 79 20 63 6f 64 65 20 69 66 20 77 65 20 66  acy code if we f
6d00: 69 78 65 64 20 74 68 65 20 70 72 6f 62 6c 65 6d  ixed the problem
6d10: 2e 20 20 53 6f 20 66 6f 72 20 6e 6f 77 20 77 65  .  So for now we
6d20: 20 68 61 76 65 0a 63 68 6f 73 65 6e 20 74 6f 20   have.chosen to 
6d30: 63 6f 6e 74 69 6e 75 65 20 61 6c 6c 6f 77 69 6e  continue allowin
6d40: 67 20 4e 55 4c 4c 73 20 69 6e 20 50 52 49 4d 41  g NULLs in PRIMA
6d50: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a  RY KEY columns..
6d60: 44 65 76 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c  Developers shoul
6d70: 64 20 62 65 20 61 77 61 72 65 2c 20 68 6f 77 65  d be aware, howe
6d80: 76 65 72 2c 20 74 68 61 74 20 77 65 20 6d 61 79  ver, that we may
6d90: 20 63 68 61 6e 67 65 20 53 51 4c 69 74 65 20 74   change SQLite t
6da0: 6f 0a 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65  o.conform to the
6db0: 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 69 6e   SQL standard in
6dc0: 20 66 75 74 75 72 65 20 61 6e 64 20 73 68 6f 75   future and shou
6dd0: 6c 64 20 64 65 73 69 67 6e 20 6e 65 77 20 70 72  ld design new pr
6de0: 6f 67 72 61 6d 73 0a 61 63 63 6f 72 64 69 6e 67  ograms.according
6df0: 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53 51 4c  ly.</p>..<p>^SQL
6e00: 69 74 65 20 75 73 65 73 20 5b 64 79 6e 61 6d 69  ite uses [dynami
6e10: 63 20 74 79 70 69 6e 67 5d 20 69 6e 73 74 65 61  c typing] instea
6e20: 64 20 6f 66 20 73 74 61 74 69 63 20 74 79 70 69  d of static typi
6e30: 6e 67 2e 20 20 5e 45 78 63 65 70 74 20 66 6f 72  ng.  ^Except for
6e40: 20 74 68 65 0a 73 70 65 63 69 61 6c 20 63 61 73   the.special cas
6e50: 65 20 6f 66 20 5b 49 4e 54 45 47 45 52 20 50 52  e of [INTEGER PR
6e60: 49 4d 41 52 59 20 4b 45 59 5d 2c 20 53 51 4c 69  IMARY KEY], SQLi
6e70: 74 65 20 77 69 6c 6c 20 61 6c 6c 6f 77 20 76 61  te will allow va
6e80: 6c 75 65 73 20 6f 66 20 61 6e 79 0a 74 79 70 65  lues of any.type
6e90: 20 74 6f 20 62 65 20 73 74 6f 72 65 64 20 69 6e   to be stored in
6ea0: 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 72 65 67 61   any column rega
6eb0: 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 64 65  rdless of the de
6ec0: 63 6c 61 72 65 64 20 64 61 74 61 74 79 70 65 20  clared datatype 
6ed0: 6f 66 0a 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20  of.that column. 
6ee0: 20 5e 54 68 65 20 64 65 63 6c 61 72 65 64 20 64   ^The declared d
6ef0: 61 74 61 74 79 70 65 20 69 73 20 61 20 5b 61 66  atatype is a [af
6f00: 66 69 6e 69 74 79 20 7c 20 74 79 70 65 20 61 66  finity | type af
6f10: 66 69 6e 69 74 79 5d 20 74 68 61 74 0a 53 51 4c  finity] that.SQL
6f20: 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ite attempts to 
6f30: 63 6f 6d 70 6c 79 20 77 69 74 68 2c 20 62 75 74  comply with, but
6f40: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 77   the operation w
6f50: 69 6c 6c 20 70 72 6f 63 65 65 64 20 65 76 65 6e  ill proceed even
6f60: 20 69 66 0a 63 6f 6d 70 6c 69 61 6e 63 65 20 69   if.compliance i
6f70: 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 3c  s not possible.<
6f80: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
6f90: 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f  "TEMP" or "TEMPO
6fa0: 52 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63  RARY" keyword oc
6fb0: 63 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20  curs in between 
6fc0: 22 43 52 45 41 54 45 22 0a 61 6e 64 20 22 54 41  "CREATE".and "TA
6fd0: 42 4c 45 22 20 74 68 65 6e 20 74 68 65 20 74 61  BLE" then the ta
6fe0: 62 6c 65 20 74 68 61 74 20 69 73 20 63 72 65 61  ble that is crea
6ff0: 74 65 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69  ted is only visi
7000: 62 6c 65 0a 77 69 74 68 69 6e 20 74 68 61 74 20  ble.within that 
7010: 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 63 6f  same database co
7020: 6e 6e 65 63 74 69 6f 6e 0a 61 6e 64 20 69 73 20  nnection.and is 
7030: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
7040: 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64  leted when.the d
7050: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
7060: 6f 6e 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 5e  on is closed.  ^
7070: 41 6e 79 20 69 6e 64 69 63 65 73 20 63 72 65 61  Any indices crea
7080: 74 65 64 20 6f 6e 20 61 20 74 65 6d 70 6f 72 61  ted on a tempora
7090: 72 79 20 74 61 62 6c 65 0a 61 72 65 20 61 6c 73  ry table.are als
70a0: 6f 20 74 65 6d 70 6f 72 61 72 79 2e 20 20 5e 54  o temporary.  ^T
70b0: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20  emporary tables 
70c0: 61 6e 64 20 69 6e 64 69 63 65 73 20 61 72 65 20  and indices are 
70d0: 73 74 6f 72 65 64 20 69 6e 20 61 0a 73 65 70 61  stored in a.sepa
70e0: 72 61 74 65 20 66 69 6c 65 20 64 69 73 74 69 6e  rate file distin
70f0: 63 74 20 66 72 6f 6d 20 74 68 65 20 6d 61 69 6e  ct from the main
7100: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c   database file.<
7110: 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26  /p>..<p> ^If a &
7120: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
7130: 26 67 74 3b 20 69 73 20 73 70 65 63 69 66 69 65  &gt; is specifie
7140: 64 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  d, then the tabl
7150: 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  e is created in 
7160: 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62  .the named datab
7170: 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20 65  ase. ^It is an e
7180: 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20  rror to specify 
7190: 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61 62  both a &lt;datab
71a0: 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64  ase-name&gt;.and
71b0: 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72   the TEMP keywor
71c0: 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 26 6c  d, unless the &l
71d0: 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26  t;database-name&
71e0: 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20 5e  gt; is "temp". ^
71f0: 49 66 20 6e 6f 0a 64 61 74 61 62 61 73 65 20 6e  If no.database n
7200: 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64  ame is specified
7210: 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65   and the TEMP ke
7220: 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65  yword is not pre
7230: 73 65 6e 74 20 74 68 65 6e 0a 74 68 65 20 74 61  sent then.the ta
7240: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69  ble is created i
7250: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
7260: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ase.</p>..<p>^Th
7270: 65 20 6f 70 74 69 6f 6e 61 6c 20 5b 63 6f 6e 66  e optional [conf
7280: 6c 69 63 74 20 63 6c 61 75 73 65 5d 20 66 6f 6c  lict clause] fol
7290: 6c 6f 77 69 6e 67 20 65 61 63 68 20 63 6f 6e 73  lowing each cons
72a0: 74 72 61 69 6e 74 0a 61 6c 6c 6f 77 73 20 74 68  traint.allows th
72b0: 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  e specification 
72c0: 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  of an alternativ
72d0: 65 20 64 65 66 61 75 6c 74 0a 63 6f 6e 73 74 72  e default.constr
72e0: 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  aint conflict re
72f0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
7300: 68 6d 20 66 6f 72 20 74 68 61 74 20 63 6f 6e 73  hm for that cons
7310: 74 72 61 69 6e 74 2e 0a 5e 49 66 20 6e 6f 20 63  traint..^If no c
7320: 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 20 69  onflict clause i
7330: 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
7340: 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d   ABORT algorithm
7350: 20 69 73 20 75 73 65 64 2e 0a 5e 44 69 66 66 65   is used..^Diffe
7360: 72 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  rent constraints
7370: 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
7380: 0a 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20  .table may have 
7390: 64 69 66 66 65 72 65 6e 74 20 63 6f 6e 66 6c 69  different confli
73a0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
73b0: 67 6f 72 69 74 68 6d 73 2e 0a 5e 49 66 20 61 6e  gorithms..^If an
73c0: 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50   [INSERT] or [UP
73d0: 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 20  DATE] statement 
73e0: 73 70 65 63 69 66 69 65 73 20 61 20 63 6f 6e 66  specifies a conf
73f0: 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20  lict.resolution 
7400: 61 6c 67 6f 72 69 74 68 6d 2c 20 74 68 65 6e 20  algorithm, then 
7410: 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 70  the algorithm sp
7420: 65 63 69 66 69 65 64 20 6f 6e 20 74 68 65 20 49  ecified on the I
7430: 4e 53 45 52 54 20 6f 72 0a 55 50 44 41 54 45 20  NSERT or.UPDATE 
7440: 73 74 61 74 65 6d 65 6e 74 20 6f 76 65 72 72 69  statement overri
7450: 64 65 73 20 74 68 65 20 61 6c 67 6f 72 69 74 68  des the algorith
7460: 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  m specified in t
7470: 68 65 20 0a 43 52 45 41 54 45 20 54 41 42 4c 45  he .CREATE TABLE
7480: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 53 65 65 20   statement..See 
7490: 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
74a0: 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed.[ON CONFLICT]
74b0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
74c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e  information.</p>
74d0: 0a 0a 3c 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74  ..<p>CHECK const
74e0: 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f  raints are suppo
74f0: 72 74 65 64 20 61 73 20 6f 66 20 5b 76 65 72 73  rted as of [vers
7500: 69 6f 6e 20 33 2e 33 2e 30 5d 2e 20 20 50 72 69  ion 3.3.0].  Pri
7510: 6f 72 0a 74 6f 20 76 65 72 73 69 6f 6e 20 33 2e  or.to version 3.
7520: 33 2e 30 2c 20 43 48 45 43 4b 20 63 6f 6e 73 74  3.0, CHECK const
7530: 72 61 69 6e 74 73 20 77 65 72 65 20 70 61 72 73  raints were pars
7540: 65 64 20 62 75 74 20 6e 6f 74 20 65 6e 66 6f 72  ed but not enfor
7550: 63 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ced.</p>..<p>^Th
7560: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
7570: 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65 20 69  mns in a table i
7580: 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74 68 65  s limited by the
7590: 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c  .[SQLITE_MAX_COL
75a0: 55 4d 4e 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  UMN] compile-tim
75b0: 65 20 70 61 72 61 6d 65 74 65 72 2e 0a 5e 41 20  e parameter..^A 
75c0: 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 61 20  single row of a 
75d0: 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f  table cannot sto
75e0: 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51  re more than.[SQ
75f0: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d  LITE_MAX_LENGTH]
7600: 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 2e 0a   bytes of data..
7610: 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65 20 6c  ^Both of these l
7620: 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c 6f 77  imits can be low
7630: 65 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  ered at runtime 
7640: 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74  using the.[sqlit
7650: 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b  e3_limit()] C/C+
7660: 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  + interface.</p>
7670: 0a 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54  ...<p>^The CREAT
7680: 45 20 54 41 42 4c 45 20 41 53 20 66 6f 72 6d 20  E TABLE AS form 
7690: 64 65 66 69 6e 65 73 20 74 68 65 20 74 61 62 6c  defines the tabl
76a0: 65 20 74 6f 20 62 65 0a 74 68 65 20 72 65 73 75  e to be.the resu
76b0: 6c 74 20 73 65 74 20 6f 66 20 61 20 71 75 65 72  lt set of a quer
76c0: 79 2e 20 20 5e 54 68 65 20 6e 61 6d 65 73 20 6f  y.  ^The names o
76d0: 66 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6c 75  f the table colu
76e0: 6d 6e 73 20 61 72 65 0a 74 68 65 20 6e 61 6d 65  mns are.the name
76f0: 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  s of the columns
7700: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c   in the result.<
7710: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
7720: 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20  optional IF NOT 
7730: 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73  EXISTS clause is
7740: 20 70 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f   present and ano
7750: 74 68 65 72 20 74 61 62 6c 65 0a 77 69 74 68 20  ther table.with 
7760: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c  the same name al
7770: 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68  ready exists, th
7780: 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  en this command 
7790: 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e  becomes a no-op.
77a0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73  </p>..<p>^Tables
77b0: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69   are removed usi
77c0: 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42  ng the [DROP TAB
77d0: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
77e0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
77f0: 61 67 6d 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e  agment rowid {IN
7800: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
7810: 59 7d 20 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f  Y} ROWID rowid</
7820: 74 63 6c 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20  tcl>.<h3>ROWIDs 
7830: 61 6e 64 20 74 68 65 20 49 4e 54 45 47 45 52 20  and the INTEGER 
7840: 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e  PRIMARY KEY</h3>
7850: 0a 0a 3c 70 3e 5e 45 76 65 72 79 20 72 6f 77 20  ..<p>^Every row 
7860: 6f 66 20 65 76 65 72 79 20 53 51 4c 69 74 65 20  of every SQLite 
7870: 74 61 62 6c 65 20 68 61 73 20 61 20 36 34 2d 62  table has a 64-b
7880: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
7890: 72 20 6b 65 79 20 0a 74 68 61 74 20 69 73 20 75  r key .that is u
78a0: 6e 69 71 75 65 20 77 69 74 68 69 6e 20 74 68 65  nique within the
78b0: 20 73 61 6d 65 20 74 61 62 6c 65 2e 0a 54 68 69   same table..Thi
78c0: 73 20 69 6e 74 65 67 65 72 20 69 73 20 75 73 75  s integer is usu
78d0: 61 6c 6c 79 20 63 61 6c 6c 65 64 20 74 68 65 20  ally called the 
78e0: 22 72 6f 77 69 64 22 2e 20 20 5e 54 68 65 20 72  "rowid".  ^The r
78f0: 6f 77 69 64 20 69 73 20 74 68 65 20 61 63 74 75  owid is the actu
7900: 61 6c 20 6b 65 79 20 75 73 65 64 0a 69 6e 20 74  al key used.in t
7910: 68 65 20 42 2d 54 72 65 65 20 74 68 61 74 20 69  he B-Tree that i
7920: 6d 70 6c 65 6d 65 6e 74 73 20 61 6e 20 53 51 4c  mplements an SQL
7930: 69 74 65 20 74 61 62 6c 65 2e 20 20 5e 52 6f 77  ite table.  ^Row
7940: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 0a  s are stored in.
7950: 72 6f 77 69 64 20 6f 72 64 65 72 2e 20 5e 54 68  rowid order. ^Th
7960: 65 0a 72 6f 77 69 64 20 76 61 6c 75 65 20 63 61  e.rowid value ca
7970: 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 75 73  n be accessed us
7980: 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 73  ing one of the s
7990: 70 65 63 69 61 6c 20 6e 61 6d 65 73 0a 22 3c 62  pecial names."<b
79a0: 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 20 22 3c 62  >ROWID</b>", "<b
79b0: 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c  >OID</b>", or "<
79c0: 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 20 61  b>_ROWID_</b>" a
79d0: 73 73 75 6d 69 6e 67 20 74 68 6f 73 65 20 6e 61  ssuming those na
79e0: 6d 65 73 0a 61 72 65 20 6e 6f 20 75 73 65 64 20  mes.are no used 
79f0: 62 79 20 6f 74 68 65 72 20 63 6f 6e 76 65 6e 74  by other convent
7a00: 69 6f 6e 61 6c 20 74 61 62 6c 65 20 63 6f 6c 75  ional table colu
7a10: 6d 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49  mns.</p>..<p>.^I
7a20: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 64 65  f a column is de
7a30: 63 6c 61 72 65 64 20 74 6f 20 62 65 20 61 6e 20  clared to be an 
7a40: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
7a50: 4b 45 59 2c 20 74 68 65 6e 20 74 68 61 74 20 63  KEY, then that c
7a60: 6f 6c 75 6d 6e 20 69 73 20 6e 6f 74 0a 61 20 22  olumn is not.a "
7a70: 72 65 61 6c 22 20 64 61 74 61 62 61 73 65 20 63  real" database c
7a80: 6f 6c 75 6d 6e 20 62 75 74 20 69 6e 73 74 65 61  olumn but instea
7a90: 64 20 62 65 63 6f 6d 65 73 0a 61 6e 20 61 6c 69  d becomes.an ali
7aa0: 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  as for the rowid
7ab0: 2e 20 20 5e 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61  .  ^Unlike norma
7ac0: 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75 6d 6e 73  l SQLite columns
7ad0: 2c 20 74 68 65 20 72 6f 77 69 64 0a 6d 75 73 74  , the rowid.must
7ae0: 20 62 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 69   be a non-NULL i
7af0: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 20 5e  nteger value.  ^
7b00: 54 68 65 20 72 6f 77 69 64 20 69 73 20 6e 6f 74  The rowid is not
7b10: 20 61 62 6c 65 20 74 6f 20 68 6f 6c 64 0a 66 6c   able to hold.fl
7b20: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
7b30: 75 65 73 2c 20 73 74 72 69 6e 67 73 2c 20 42 4c  ues, strings, BL
7b40: 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 3c 2f  OBs, or NULLs.</
7b50: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
7b60: 3c 69 3e 0a 5e 41 6e 20 49 4e 54 45 47 45 52 20  <i>.^An INTEGER 
7b70: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
7b80: 6d 6e 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66  mn is an alias f
7b90: 6f 72 20 74 68 65 20 36 34 2d 62 69 74 20 73 69  or the 64-bit si
7ba0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 72 6f 77  gned integer row
7bb0: 69 64 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b 71  id..</i></blockq
7bc0: 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 41 6e 20 49 4e  uote>..<p>^An IN
7bd0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
7be0: 59 20 63 6f 6c 75 6d 6e 20 63 61 6e 20 61 6c 73  Y column can als
7bf0: 6f 20 69 6e 63 6c 75 64 65 20 74 68 65 0a 6b 65  o include the.ke
7c00: 79 77 6f 72 64 20 5b 41 55 54 4f 49 4e 43 52 45  yword [AUTOINCRE
7c10: 4d 45 4e 54 5d 2e 20 20 5e 54 68 65 20 5b 41 55  MENT].  ^The [AU
7c20: 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 20 6b 65 79  TOINCREMENT] key
7c30: 77 6f 72 64 20 6d 6f 64 69 66 69 65 64 20 74 68  word modified th
7c40: 65 20 77 61 79 0a 74 68 61 74 20 42 2d 54 72 65  e way.that B-Tre
7c50: 65 20 6b 65 79 73 20 61 72 65 20 61 75 74 6f 6d  e keys are autom
7c60: 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74  atically generat
7c70: 65 64 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 20  ed.  Additional 
7c80: 64 65 74 61 69 6c 0a 6f 6e 20 61 75 74 6f 6d 61  detail.on automa
7c90: 74 69 63 20 42 2d 54 72 65 65 20 6b 65 79 20 67  tic B-Tree key g
7ca0: 65 6e 65 72 61 74 69 6f 6e 20 69 73 20 61 76 61  eneration is ava
7cb0: 69 6c 61 62 6c 65 0a 3c 61 20 68 72 65 66 3d 22  ilable.<a href="
7cc0: 61 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e 73 65  autoinc.html">se
7cd0: 70 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70  parately</a>.</p
7ce0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 70 65 63 69  >..<p>^The speci
7cf0: 61 6c 20 62 65 68 61 76 69 6f 72 20 6f 66 20 49  al behavior of I
7d00: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
7d10: 45 59 0a 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c  EY.is only avail
7d20: 61 62 6c 65 20 69 66 20 74 68 65 20 74 79 70 65  able if the type
7d30: 20 6e 61 6d 65 20 69 73 20 65 78 61 63 74 6c 79   name is exactly
7d40: 20 22 49 4e 54 45 47 45 52 22 20 69 6e 20 61 6e   "INTEGER" in an
7d50: 79 20 6d 69 78 74 75 72 65 0a 6f 66 20 75 70 70  y mixture.of upp
7d60: 65 72 20 61 6e 64 20 6c 6f 77 65 72 20 63 61 73  er and lower cas
7d70: 65 2e 20 20 5e 4f 74 68 65 72 20 69 6e 74 65 67  e.  ^Other integ
7d80: 65 72 20 74 79 70 65 20 6e 61 6d 65 73 0a 6c 69  er type names.li
7d90: 6b 65 20 22 49 4e 54 22 20 6f 72 20 22 42 49 47  ke "INT" or "BIG
7da0: 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54 20 49  INT" or "SHORT I
7db0: 4e 54 45 47 45 52 22 20 6f 72 20 22 55 4e 53 49  NTEGER" or "UNSI
7dc0: 47 4e 45 44 20 49 4e 54 45 47 45 52 22 0a 63 61  GNED INTEGER".ca
7dd0: 75 73 65 73 20 74 68 65 20 70 72 69 6d 61 72 79  uses the primary
7de0: 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f 20 62   key column to b
7df0: 65 68 61 76 65 20 61 73 20 61 6e 20 6f 72 64 69  ehave as an ordi
7e00: 6e 61 72 79 20 74 61 62 6c 65 20 63 6f 6c 75 6d  nary table colum
7e10: 6e 20 77 69 74 68 0a 69 6e 74 65 67 65 72 20 5b  n with.integer [
7e20: 61 66 66 69 6e 69 74 79 5d 20 61 6e 64 20 61 20  affinity] and a 
7e30: 75 6e 69 71 75 65 20 69 6e 64 65 78 2c 20 6e 6f  unique index, no
7e40: 74 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  t as an alias fo
7e50: 72 20 74 68 65 20 72 6f 77 69 64 2e 0a 5e 28 54  r the rowid..^(T
7e60: 68 65 20 73 70 65 63 69 61 6c 20 62 65 68 61 76  he special behav
7e70: 69 6f 72 20 6f 66 20 49 4e 54 45 47 45 52 20 50  ior of INTEGER P
7e80: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 6f 6e  RIMARY KEY is on
7e90: 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20  ly available if 
7ea0: 74 68 65 0a 70 72 69 6d 61 72 79 20 6b 65 79 20  the.primary key 
7eb0: 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  is a single colu
7ec0: 6d 6e 2e 20 20 4d 75 6c 74 69 2d 63 6f 6c 75 6d  mn.  Multi-colum
7ed0: 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20 64  n primary keys d
7ee0: 6f 20 6e 6f 74 20 62 65 63 6f 6d 65 0a 61 6c 69  o not become.ali
7ef0: 61 73 65 73 20 66 6f 72 20 74 68 65 20 72 6f 77  ases for the row
7f00: 69 64 2e 29 5e 0a 5e 54 68 65 20 41 55 54 4f 49  id.)^.^The AUTOI
7f10: 4e 43 52 45 4d 45 4e 54 20 6b 65 79 77 6f 72 64  NCREMENT keyword
7f20: 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 61   only works on a
7f30: 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20   column that is 
7f40: 61 6e 20 61 6c 69 61 73 0a 66 6f 72 20 74 68 65  an alias.for the
7f50: 20 72 6f 77 69 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e   rowid.</p>..<p>
7f60: 4e 6f 74 65 20 74 68 61 74 20 73 65 61 72 63 68  Note that search
7f70: 65 73 20 61 67 61 69 6e 73 74 20 61 20 72 6f 77  es against a row
7f80: 69 64 20 61 72 65 20 67 65 6e 65 72 61 6c 6c 79  id are generally
7f90: 20 61 62 6f 75 74 20 74 77 69 63 65 20 61 73 0a   about twice as.
7fa0: 66 61 73 74 20 61 73 20 73 65 61 72 63 68 65 73  fast as searches
7fb0: 20 61 67 61 69 6e 73 74 20 61 6e 79 20 6f 74 68   against any oth
7fc0: 65 72 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  er PRIMARY KEY o
7fd0: 72 20 69 6e 64 65 78 65 64 20 76 61 6c 75 65 2e  r indexed value.
7fe0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 3c 62 3e 47 6f 6f  .</p>..<p><b>Goo
7ff0: 66 79 20 62 65 68 61 76 69 6f 72 20 61 6c 65 72  fy behavior aler
8000: 74 3a 3c 2f 62 3e 20 20 5e 28 54 68 65 20 66 6f  t:</b>  ^(The fo
8010: 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 64 65  llowing three de
8020: 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63  clarations all c
8030: 61 75 73 65 0a 74 68 65 20 63 6f 6c 75 6d 6e 20  ause.the column 
8040: 22 78 22 20 62 65 20 61 6e 20 61 6c 69 61 73 20  "x" be an alias 
8050: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 3a 3c 2f  for the rowid:</
8060: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74  p>..<ul>.<li><tt
8070: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
8080: 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  x INTEGER PRIMAR
8090: 59 20 4b 45 59 20 41 53 43 2c 20 79 2c 20 7a 29  Y KEY ASC, y, z)
80a0: 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43  ;</tt>.<li><tt>C
80b0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20  REATE TABLE t(x 
80c0: 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50  INTEGER, y, z, P
80d0: 52 49 4d 41 52 59 20 4b 45 59 28 78 20 41 53 43  RIMARY KEY(x ASC
80e0: 29 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74  ));</tt>.<li><tt
80f0: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
8100: 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c  x INTEGER, y, z,
8110: 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78 20 44   PRIMARY KEY(x D
8120: 45 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c  ESC));</tt>.</ul
8130: 3e 29 5e 0a 0a 3c 70 3e 42 75 74 2c 20 69 6e 20  >)^..<p>But, in 
8140: 63 6f 6e 74 72 61 73 74 2c 20 5e 28 74 68 65 20  contrast, ^(the 
8150: 66 6f 6c 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72  following declar
8160: 61 74 69 6f 6e 20 64 6f 65 73 20 3c 75 3e 6e 6f  ation does <u>no
8170: 74 3c 2f 75 3e 20 72 65 73 75 6c 74 20 69 6e 0a  t</u> result in.
8180: 22 78 22 20 62 65 69 6e 67 20 61 6e 20 61 6c 69  "x" being an ali
8190: 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  as for the rowid
81a0: 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  :</p>..<ul>.<li>
81b0: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
81c0: 20 74 28 78 20 49 4e 54 45 47 45 52 20 50 52 49   t(x INTEGER PRI
81d0: 4d 41 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79  MARY KEY DESC, y
81e0: 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e  , z);</tt>.</ul>
81f0: 29 5e 0a 0a 3c 70 3e 54 68 69 73 20 61 73 79 6d  )^..<p>This asym
8200: 6d 65 74 72 69 63 61 6c 20 62 65 68 61 76 69 6f  metrical behavio
8210: 72 20 69 73 20 75 6e 66 6f 72 74 75 6e 61 74 65  r is unfortunate
8220: 20 61 6e 64 20 69 73 20 72 65 61 6c 6c 79 20 64   and is really d
8230: 75 65 20 74 6f 20 61 20 62 75 67 0a 69 6e 20 74  ue to a bug.in t
8240: 68 65 20 70 61 72 73 65 72 20 69 6e 20 65 61 72  he parser in ear
8250: 6c 79 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  ly versions of S
8260: 51 4c 69 74 65 2e 20 20 42 75 74 20 66 69 78 69  QLite.  But fixi
8270: 6e 67 20 74 68 65 20 62 75 67 20 77 6f 75 6c 64  ng the bug would
8280: 0a 72 65 73 75 6c 74 20 69 6e 20 76 65 72 79 20  .result in very 
8290: 73 65 72 69 6f 75 73 20 62 61 63 6b 77 61 72 64  serious backward
82a0: 73 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74  s incompatibilit
82b0: 69 65 73 2e 20 20 54 68 65 20 53 51 4c 69 74 65  ies.  The SQLite
82c0: 20 64 65 76 65 6c 6f 70 65 72 73 0a 66 65 65 6c   developers.feel
82d0: 20 74 68 61 74 20 67 6f 6f 66 79 20 62 65 68 61   that goofy beha
82e0: 76 69 6f 72 20 69 6e 20 61 6e 20 63 6f 72 6e 65  vior in an corne
82f0: 72 20 63 61 73 65 20 69 73 20 66 61 72 20 62 65  r case is far be
8300: 74 74 65 72 20 74 68 61 6e 0a 61 20 63 6f 6d 70  tter than.a comp
8310: 61 74 69 62 69 6c 69 74 79 20 62 72 65 61 6b 2c  atibility break,
8320: 20 73 6f 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   so the original
8330: 20 62 65 68 61 76 69 6f 72 20 69 73 20 72 65 74   behavior is ret
8340: 61 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ained.</p>..<tcl
8350: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
8360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
83a0: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
83b0: 20 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65   TRIGGER} create
83c0: 74 72 69 67 67 65 72 20 7b 7b 43 52 45 41 54 45  trigger {{CREATE
83d0: 20 54 52 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62   TRIGGER}}..Bubb
83e0: 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65  leDiagram create
83f0: 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 20 31 0a  -trigger-stmt 1.
8400: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
8410: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73  CREATE TRIGGER s
8420: 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
8430: 20 74 6f 20 61 64 64 20 74 72 69 67 67 65 72 73   to add triggers
8440: 20 74 6f 20 74 68 65 20 0a 64 61 74 61 62 61 73   to the .databas
8450: 65 20 73 63 68 65 6d 61 2e 20 5e 54 72 69 67 67  e schema. ^Trigg
8460: 65 72 73 20 61 72 65 20 64 61 74 61 62 61 73 65  ers are database
8470: 20 6f 70 65 72 61 74 69 6f 6e 73 20 0a 74 68 61   operations .tha
8480: 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  t are automatica
8490: 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64 20 77 68  lly performed wh
84a0: 65 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 64  en a specified d
84b0: 61 74 61 62 61 73 65 20 65 76 65 6e 74 0a 6f 63  atabase event.oc
84c0: 63 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e  curs.  </p>..<p>
84d0: 5e 41 20 74 72 69 67 67 65 72 20 6d 61 79 20 62  ^A trigger may b
84e0: 65 20 73 70 65 63 69 66 69 65 64 20 74 6f 20 66  e specified to f
84f0: 69 72 65 20 77 68 65 6e 65 76 65 72 20 61 20 5b  ire whenever a [
8500: 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54  DELETE], [INSERT
8510: 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f  ],.or [UPDATE] o
8520: 66 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20 64  f a.particular d
8530: 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 63  atabase table oc
8540: 63 75 72 73 2c 20 6f 72 20 77 68 65 6e 65 76 65  curs, or wheneve
8550: 72 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 63  r an [UPDATE] oc
8560: 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f  curs on.on one o
8570: 72 20 6d 6f 72 65 20 73 70 65 63 69 66 69 65 64  r more specified
8580: 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61   columns of a ta
8590: 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74  ble.</p>..<p>^At
85a0: 20 74 68 69 73 20 74 69 6d 65 20 53 51 4c 69 74   this time SQLit
85b0: 65 20 73 75 70 70 6f 72 74 73 20 6f 6e 6c 79 20  e supports only 
85c0: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 74 72 69  FOR EACH ROW tri
85d0: 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f 52 20 45  ggers, not FOR E
85e0: 41 43 48 0a 53 54 41 54 45 4d 45 4e 54 20 74 72  ACH.STATEMENT tr
85f0: 69 67 67 65 72 73 2e 20 5e 48 65 6e 63 65 20 65  iggers. ^Hence e
8600: 78 70 6c 69 63 69 74 6c 79 20 73 70 65 63 69 66  xplicitly specif
8610: 79 69 6e 67 20 46 4f 52 20 45 41 43 48 20 52 4f  ying FOR EACH RO
8620: 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e  W is optional..^
8630: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69 6d 70  FOR EACH ROW imp
8640: 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 53 51  lies that the SQ
8650: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
8660: 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 74 72  cified in the tr
8670: 69 67 67 65 72 0a 6d 61 79 20 62 65 20 65 78 65  igger.may be exe
8680: 63 75 74 65 64 20 28 64 65 70 65 6e 64 69 6e 67  cuted (depending
8690: 20 6f 6e 20 74 68 65 20 57 48 45 4e 20 63 6c 61   on the WHEN cla
86a0: 75 73 65 29 20 66 6f 72 20 65 61 63 68 20 64 61  use) for each da
86b0: 74 61 62 61 73 65 20 72 6f 77 20 62 65 69 6e 67  tabase row being
86c0: 0a 69 6e 73 65 72 74 65 64 2c 20 75 70 64 61 74  .inserted, updat
86d0: 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79  ed or deleted by
86e0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63   the statement c
86f0: 61 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67  ausing the trigg
8700: 65 72 20 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a  er to fire.</p>.
8710: 0a 3c 70 3e 5e 28 42 6f 74 68 20 74 68 65 20 57  .<p>^(Both the W
8720: 48 45 4e 20 63 6c 61 75 73 65 20 61 6e 64 20 74  HEN clause and t
8730: 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f  he trigger actio
8740: 6e 73 20 6d 61 79 20 61 63 63 65 73 73 20 65 6c  ns may access el
8750: 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68 65 20 72  ements of .the r
8760: 6f 77 20 62 65 69 6e 67 20 69 6e 73 65 72 74 65  ow being inserte
8770: 64 2c 20 64 65 6c 65 74 65 64 20 6f 72 20 75 70  d, deleted or up
8780: 64 61 74 65 64 20 75 73 69 6e 67 20 72 65 66 65  dated using refe
8790: 72 65 6e 63 65 73 20 6f 66 20 74 68 65 20 66 6f  rences of the fo
87a0: 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75  rm ."NEW.<i>colu
87b0: 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64  mn-name</i>" and
87c0: 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d   "OLD.<i>column-
87d0: 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65  name</i>", where
87e0: 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  .<i>column-name<
87f0: 2f 69 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  /i> is the name 
8800: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d  of a column from
8810: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
8820: 74 68 65 20 74 72 69 67 67 65 72 0a 69 73 20 61  the trigger.is a
8830: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e 29  ssociated with.)
8840: 5e 20 5e 28 4f 4c 44 20 61 6e 64 20 4e 45 57 20  ^ ^(OLD and NEW 
8850: 72 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f  references may o
8860: 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 74  nly be used in t
8870: 72 69 67 67 65 72 73 20 6f 6e 0a 65 76 65 6e 74  riggers on.event
8880: 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 79  s for which they
8890: 20 61 72 65 20 72 65 6c 65 76 61 6e 74 2c 20 61   are relevant, a
88a0: 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
88b0: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20  <table border=0 
88c0: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a  cellpadding=10>.
88d0: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
88e0: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
88f0: 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69  ht" width=120><i
8900: 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e  >INSERT</i></td>
8910: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
8920: 22 3e 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73  ">NEW references
8930: 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a   are valid</td>.
8940: 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76  </tr>.<tr>.<td v
8950: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
8960: 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d  n="right" width=
8970: 31 32 30 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69  120><i>UPDATE</i
8980: 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  ></td>.<td valig
8990: 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20  n="top">NEW and 
89a0: 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61  OLD references a
89b0: 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f  re valid</td>.</
89c0: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  tr>.<tr>.<td val
89d0: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
89e0: 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32  "right" width=12
89f0: 30 3e 3c 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c  0><i>DELETE</i><
8a00: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
8a10: 22 74 6f 70 22 3e 4f 4c 44 20 72 65 66 65 72 65  "top">OLD refere
8a20: 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f  nces are valid</
8a30: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  td>.</tr>.</tabl
8a40: 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49  e>.</p>)^..<p>^I
8a50: 66 20 61 20 57 48 45 4e 20 63 6c 61 75 73 65 20  f a WHEN clause 
8a60: 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65  is supplied, the
8a70: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
8a80: 73 70 65 63 69 66 69 65 64 0a 61 72 65 20 6f 6e  specified.are on
8a90: 6c 79 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  ly executed for 
8aa0: 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
8ab0: 68 65 20 57 48 45 4e 0a 63 6c 61 75 73 65 20 69  he WHEN.clause i
8ac0: 73 20 74 72 75 65 2e 20 5e 49 66 20 6e 6f 20 57  s true. ^If no W
8ad0: 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75  HEN clause is su
8ae0: 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20  pplied, the SQL 
8af0: 73 74 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 65  statements.are e
8b00: 78 65 63 75 74 65 64 20 66 6f 72 20 61 6c 6c 20  xecuted for all 
8b10: 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  rows.</p>..<p>^T
8b20: 68 65 20 42 45 46 4f 52 45 20 6f 72 20 41 46 54  he BEFORE or AFT
8b30: 45 52 20 6b 65 79 77 6f 72 64 20 64 65 74 65 72  ER keyword deter
8b40: 6d 69 6e 65 73 20 77 68 65 6e 20 74 68 65 20 74  mines when the t
8b50: 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 0a 77  rigger actions.w
8b60: 69 6c 6c 20 62 65 20 65 78 65 63 75 74 65 64 20  ill be executed 
8b70: 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20  relative to the 
8b80: 69 6e 73 65 72 74 69 6f 6e 2c 20 6d 6f 64 69 66  insertion, modif
8b90: 69 63 61 74 69 6f 6e 20 6f 72 20 72 65 6d 6f 76  ication or remov
8ba0: 61 6c 20 6f 66 20 74 68 65 0a 61 73 73 6f 63 69  al of the.associ
8bb0: 61 74 65 64 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c  ated row.</p>..<
8bc0: 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49  p>^An [ON CONFLI
8bd0: 43 54 5d 20 63 6c 61 75 73 65 20 6d 61 79 20 62  CT] clause may b
8be0: 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  e specified as p
8bf0: 61 72 74 20 6f 66 20 61 6e 20 5b 55 50 44 41 54  art of an [UPDAT
8c00: 45 5d 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 61  E] or [INSERT].a
8c10: 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 74 68 65  ction within the
8c20: 20 62 6f 64 79 20 6f 66 20 74 68 65 20 74 72 69   body of the tri
8c30: 67 67 65 72 2e 0a 5e 48 6f 77 65 76 65 72 20 69  gger..^However i
8c40: 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  f an [ON CONFLIC
8c50: 54 5d 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  T] clause is spe
8c60: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
8c70: 66 20 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74  f .the statement
8c80: 20 63 61 75 73 69 6e 67 20 74 68 65 20 74 72 69   causing the tri
8c90: 67 67 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68  gger to fire, th
8ca0: 65 6e 20 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64  en conflict hand
8cb0: 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 6f 66 20 74  ling.policy of t
8cc0: 68 65 20 6f 75 74 65 72 20 73 74 61 74 65 6d 65  he outer stateme
8cd0: 6e 74 20 69 73 20 75 73 65 64 20 69 6e 73 74 65  nt is used inste
8ce0: 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69  ad.</p>..<p>^Tri
8cf0: 67 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61  ggers are automa
8d00: 74 69 63 61 6c 6c 79 20 5b 44 52 4f 50 20 54 52  tically [DROP TR
8d10: 49 47 47 45 52 20 7c 20 64 72 6f 70 70 65 64 5d  IGGER | dropped]
8d20: 0a 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20  .when the table 
8d30: 74 68 61 74 20 74 68 65 79 20 61 72 65 20 0a 61  that they are .a
8d40: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 28  ssociated with (
8d50: 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d  the <i>table-nam
8d60: 65 3c 2f 69 3e 20 74 61 62 6c 65 29 20 69 73 20  e</i> table) is 
8d70: 0a 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64  .[DROP TABLE | d
8d80: 72 6f 70 70 65 64 5d 2e 20 20 5e 48 6f 77 65 76  ropped].  ^Howev
8d90: 65 72 20 69 66 20 74 68 65 20 74 68 65 20 74 72  er if the the tr
8da0: 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 72 65  igger actions re
8db0: 66 65 72 65 6e 63 65 0a 6f 74 68 65 72 20 74 61  ference.other ta
8dc0: 62 6c 65 73 2c 20 74 68 65 20 74 72 69 67 67 65  bles, the trigge
8dd0: 72 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64  r is not dropped
8de0: 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 69 66 20   or modified if 
8df0: 74 68 6f 73 65 20 6f 74 68 65 72 0a 74 61 62 6c  those other.tabl
8e00: 65 73 20 61 72 65 20 5b 44 52 4f 50 20 54 41 42  es are [DROP TAB
8e10: 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 20 6f 72  LE | dropped] or
8e20: 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20   [ALTER TABLE | 
8e30: 6d 6f 64 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a  modified].</p>..
8e40: 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65  <p>^Triggers are
8e50: 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74   removed using t
8e60: 68 65 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52  he [DROP TRIGGER
8e70: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e  ] statement.</p>
8e80: 0a 0a 3c 68 33 3e 53 79 6e 74 61 78 20 52 65 73  ..<h3>Syntax Res
8e90: 74 72 69 63 74 69 6f 6e 73 20 4f 6e 20 55 50 44  trictions On UPD
8ea0: 41 54 45 2c 20 44 45 4c 45 54 45 2c 20 61 6e 64  ATE, DELETE, and
8eb0: 20 49 4e 53 45 52 54 20 53 74 61 74 65 6d 65 6e   INSERT Statemen
8ec0: 74 73 20 57 69 74 68 69 6e 0a 20 20 20 20 54 72  ts Within.    Tr
8ed0: 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
8ee0: 5e 54 68 65 20 5b 55 50 44 41 54 45 5d 2c 20 5b  ^The [UPDATE], [
8ef0: 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e  DELETE], and [IN
8f00: 53 45 52 54 5d 0a 73 74 61 74 65 6d 65 6e 74 73  SERT].statements
8f10: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
8f20: 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a   do not support.
8f30: 74 68 65 20 66 75 6c 6c 20 73 79 6e 74 61 78 20  the full syntax 
8f40: 66 6f 72 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44  for [UPDATE], [D
8f50: 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53  ELETE], and [INS
8f60: 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  ERT] statements.
8f70: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a    The following.
8f80: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70  restrictions app
8f90: 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  ly:</p>..<ul>.<l
8fa0: 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 6e 61  i><p>.  ^(The na
8fb0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
8fc0: 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20 69  to be modified i
8fd0: 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20 5b  n an [UPDATE], [
8fe0: 44 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e 53  DELETE], or [INS
8ff0: 45 52 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74  ERT].  statement
9000: 20 6d 75 73 74 20 62 65 20 61 6e 20 75 6e 71 75   must be an unqu
9010: 61 6c 69 66 69 65 64 20 74 61 62 6c 65 20 6e 61  alified table na
9020: 6d 65 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  me.  In other wo
9030: 72 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20 20  rds, one must.  
9040: 75 73 65 20 6a 75 73 74 20 22 3c 69 3e 74 61 62  use just "<i>tab
9050: 6c 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20  lename</i>" not 
9060: 22 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f 69 3e  "<i>database</i>
9070: 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65  <b>.</b><i>table
9080: 6e 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65 6e  name</i>".  when
9090: 20 73 70 65 63 69 66 79 69 6e 67 20 74 68 65 20   specifying the 
90a0: 74 61 62 6c 65 2e 29 5e 20 20 5e 54 68 65 20 74  table.)^  ^The t
90b0: 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66  able to be modif
90c0: 69 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69  ied must exist i
90d0: 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74  n the.  same dat
90e0: 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62  abase as the tab
90f0: 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
9100: 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
9110: 69 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20 3c  is attached..  <
9120: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
9130: 3e 0a 20 20 5e 54 68 65 20 22 49 4e 53 45 52 54  >.  ^The "INSERT
9140: 20 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f   INTO <i>table</
9150: 69 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  i> DEFAULT VALUE
9160: 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b  S" form of the [
9170: 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e  INSERT] statemen
9180: 74 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f  t.  is not suppo
9190: 72 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  rted..  </p></li
91a0: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68  >..<li><p>.  ^Th
91b0: 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64  e INDEXED BY and
91c0: 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
91d0: 75 73 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70  uses are not sup
91e0: 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41  ported for [UPDA
91f0: 54 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45 54  TE] and.  [DELET
9200: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  E] statements.. 
9210: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e   </p></li>..<li>
9220: 3c 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44 45  <p>.  ^(The ORDE
9230: 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63  R BY and LIMIT c
9240: 6c 61 75 73 65 73 20 6f 6e 20 5b 55 50 44 41 54  lauses on [UPDAT
9250: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20  E] and [DELETE] 
9260: 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6e  statements are n
9270: 6f 74 0a 20 20 73 75 70 70 6f 72 74 65 64 2e 20  ot.  supported. 
9280: 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49   ORDER BY and LI
9290: 4d 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72 6d  MIT are not norm
92a0: 61 6c 6c 79 20 73 75 70 70 6f 72 74 65 64 20 66  ally supported f
92b0: 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a 20  or [UPDATE] or. 
92c0: 20 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e 79   [DELETE] in any
92d0: 20 63 6f 6e 74 65 78 74 20 62 75 74 20 63 61 6e   context but can
92e0: 20 62 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20   be enabled for 
92f0: 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d  top-level statem
9300: 65 6e 74 73 0a 20 20 75 73 69 6e 67 20 74 68 65  ents.  using the
9310: 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
9320: 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
9330: 4d 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  MIT] compile-tim
9340: 65 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65 76  e option.  Howev
9350: 65 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70 69  er,.  that compi
9360: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f  le-time option o
9370: 6e 6c 79 20 61 70 70 6c 69 65 73 20 74 6f 20 74  nly applies to t
9380: 6f 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54 45  op-level [UPDATE
9390: 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a 20  ] and [DELETE]. 
93a0: 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f 74   statements, not
93b0: 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44   [UPDATE] and [D
93c0: 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  ELETE] statement
93d0: 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
93e0: 73 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  s.)^.  </p></li>
93f0: 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  .</ul>..<tcl>hd_
9400: 66 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61 64  fragment instead
9410: 5f 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e 53  _of_trigger {INS
9420: 54 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45 41  TEAD OF} {INSTEA
9430: 44 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f 74  D OF trigger}</t
9440: 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44 20  cl>.<h3>INSTEAD 
9450: 4f 46 20 74 72 69 67 67 65 72 3c 2f 68 33 3e 0a  OF trigger</h3>.
9460: 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 6d 61  .<p>^Triggers ma
9470: 79 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e 20  y be created on 
9480: 5b 76 69 65 77 73 5d 2c 20 61 73 20 77 65 6c 6c  [views], as well
9490: 20 61 73 20 6f 72 64 69 6e 61 72 79 20 74 61 62   as ordinary tab
94a0: 6c 65 73 2c 20 62 79 0a 73 70 65 63 69 66 79 69  les, by.specifyi
94b0: 6e 67 20 49 4e 53 54 45 41 44 20 4f 46 20 69 6e  ng INSTEAD OF in
94c0: 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47   the CREATE TRIG
94d0: 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a  GER statement. .
94e0: 5e 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ^If one or more 
94f0: 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44 45  ON INSERT, ON DE
9500: 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41 54  LETE.or ON UPDAT
9510: 45 20 74 72 69 67 67 65 72 73 20 61 72 65 20 64  E triggers are d
9520: 65 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65 77  efined on a view
9530: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f 74  , then it is not
9540: 20 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78 65   an.error to exe
9550: 63 75 74 65 20 61 6e 20 49 4e 53 45 52 54 2c 20  cute an INSERT, 
9560: 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
9570: 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74 68   statement on th
9580: 65 20 76 69 65 77 2c 20 0a 72 65 73 70 65 63 74  e view, .respect
9590: 69 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65 61 64  ively.  ^Instead
95a0: 2c 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20 49  ,.executing an I
95b0: 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72  NSERT, DELETE or
95c0: 20 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20 76   UPDATE on the v
95d0: 69 65 77 20 63 61 75 73 65 73 20 74 68 65 20 61  iew causes the a
95e0: 73 73 6f 63 69 61 74 65 64 0a 74 72 69 67 67 65  ssociated.trigge
95f0: 72 73 20 74 6f 20 66 69 72 65 2e 20 5e 54 68 65  rs to fire. ^The
9600: 20 72 65 61 6c 20 74 61 62 6c 65 73 20 75 6e 64   real tables und
9610: 65 72 6c 79 69 6e 67 20 74 68 65 20 76 69 65 77  erlying the view
9620: 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69 65   are not modifie
9630: 64 0a 28 65 78 63 65 70 74 20 70 6f 73 73 69 62  d.(except possib
9640: 6c 79 20 65 78 70 6c 69 63 69 74 6c 79 2c 20 62  ly explicitly, b
9650: 79 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67  y a trigger prog
9660: 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e  ram).</p>..<p>^N
9670: 6f 74 65 20 74 68 61 74 20 74 68 65 20 5b 73 71  ote that the [sq
9680: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d  lite3_changes()]
9690: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 74 6f   and [sqlite3_to
96a0: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69  tal_changes()] i
96b0: 6e 74 65 72 66 61 63 65 73 0a 64 6f 20 6e 6f 74  nterfaces.do not
96c0: 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f   count INSTEAD O
96d0: 46 20 74 72 69 67 67 65 72 20 66 69 72 69 6e 67  F trigger firing
96e0: 73 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f 75 6e  s, but the.[coun
96f0: 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61  t_changes pragma
9700: 5d 20 64 6f 65 73 20 63 6f 75 6e 74 20 49 4e 53  ] does count INS
9710: 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 20  TEAD OF trigger 
9720: 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33  firing.</p>..<h3
9730: 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a  >Examples</h3>..
9740: 3c 70 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74 68  <p>^(Assuming th
9750: 61 74 20 63 75 73 74 6f 6d 65 72 20 72 65 63 6f  at customer reco
9760: 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  rds are stored i
9770: 6e 20 74 68 65 20 22 63 75 73 74 6f 6d 65 72 73  n the "customers
9780: 22 20 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61  " table, and.tha
9790: 74 20 6f 72 64 65 72 20 72 65 63 6f 72 64 73 20  t order records 
97a0: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
97b0: 65 20 22 6f 72 64 65 72 73 22 20 74 61 62 6c 65  e "orders" table
97c0: 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
97d0: 74 72 69 67 67 65 72 0a 65 6e 73 75 72 65 73 20  trigger.ensures 
97e0: 74 68 61 74 20 61 6c 6c 20 61 73 73 6f 63 69 61  that all associa
97f0: 74 65 64 20 6f 72 64 65 72 73 20 61 72 65 20 72  ted orders are r
9800: 65 64 69 72 65 63 74 65 64 20 77 68 65 6e 20 61  edirected when a
9810: 20 63 75 73 74 6f 6d 65 72 20 63 68 61 6e 67 65   customer change
9820: 73 0a 68 69 73 20 6f 72 20 68 65 72 20 61 64 64  s.his or her add
9830: 72 65 73 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ress:</p>..<tcl>
9840: 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54 45  Example {.CREATE
9850: 20 54 52 49 47 47 45 52 20 75 70 64 61 74 65 5f   TRIGGER update_
9860: 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73  customer_address
9870: 20 55 50 44 41 54 45 20 4f 46 20 61 64 64 72 65   UPDATE OF addre
9880: 73 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72 73 20  ss ON customers 
9890: 0a 20 20 42 45 47 49 4e 0a 20 20 20 20 55 50 44  .  BEGIN.    UPD
98a0: 41 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61  ATE orders SET a
98b0: 64 64 72 65 73 73 20 3d 20 6e 65 77 2e 61 64 64  ddress = new.add
98c0: 72 65 73 73 20 57 48 45 52 45 20 63 75 73 74 6f  ress WHERE custo
98d0: 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e  mer_name = old.n
98e0: 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74  ame;.  END;.}</t
98f0: 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68 69  cl>..<p>With thi
9900: 73 20 74 72 69 67 67 65 72 20 69 6e 73 74 61 6c  s trigger instal
9910: 6c 65 64 2c 20 65 78 65 63 75 74 69 6e 67 20 74  led, executing t
9920: 68 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c 2f 70  he statement:</p
9930: 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20  >..<tcl>Example 
9940: 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65  {.UPDATE custome
9950: 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d  rs SET address =
9960: 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48   '1 Main St.' WH
9970: 45 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63 6b  ERE name = 'Jack
9980: 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e   Jones';.}</tcl>
9990: 0a 0a 3c 70 3e 63 61 75 73 65 73 20 74 68 65 20  ..<p>causes the 
99a0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65 20  following to be 
99b0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78  automatically ex
99c0: 65 63 75 74 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63  ecuted:</p>..<tc
99d0: 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41  l>Example {.UPDA
99e0: 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64  TE orders SET ad
99f0: 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20  dress = '1 Main 
9a00: 53 74 2e 27 20 57 48 45 52 45 20 63 75 73 74 6f  St.' WHERE custo
9a10: 6d 65 72 5f 6e 61 6d 65 20 3d 20 27 4a 61 63 6b  mer_name = 'Jack
9a20: 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e   Jones';.}</tcl>
9a30: 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
9a40: 6d 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f 72  ment undef_befor
9a50: 65 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45 46  e {undefined BEF
9a60: 4f 52 45 20 74 72 69 67 67 65 72 20 62 65 68 61  ORE trigger beha
9a70: 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  vior}</tcl>.<h3>
9a80: 43 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65 20  Cautions On The 
9a90: 55 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74 72  Use Of BEFORE tr
9aa0: 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
9ab0: 49 66 20 61 20 42 45 46 4f 52 45 20 55 50 44 41  If a BEFORE UPDA
9ac0: 54 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45 4c  TE or BEFORE DEL
9ad0: 45 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64 69  ETE trigger modi
9ae0: 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  fies or deletes 
9af0: 61 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20 74  a row.that was t
9b00: 6f 20 68 61 76 65 20 62 65 65 6e 20 75 70 64 61  o have been upda
9b10: 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c 20  ted or deleted, 
9b20: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
9b30: 6f 66 20 74 68 65 20 73 75 62 73 65 71 75 65 6e  of the subsequen
9b40: 74 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c 65  t.update or dele
9b50: 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  te operation is 
9b60: 75 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72 74  undefined.  Furt
9b70: 68 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42 45  hermore, if a BE
9b80: 46 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f 64  FORE trigger.mod
9b90: 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73  ifies or deletes
9ba0: 20 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74 20   a row, then it 
9bb0: 69 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68 65  is undefined whe
9bc0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54 45  ther or not AFTE
9bd0: 52 20 74 72 69 67 67 65 72 73 0a 74 68 61 74 20  R triggers.that 
9be0: 77 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65 72  would have other
9bf0: 77 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f 73  wise run on thos
9c00: 65 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20 66  e rows will in f
9c10: 61 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c  act run..</p>..<
9c20: 70 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e  p>The value of N
9c30: 45 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64 65  EW.rowid is unde
9c40: 66 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f 52  fined in a BEFOR
9c50: 45 20 49 4e 53 45 52 54 20 74 72 69 67 67 65 72  E INSERT trigger
9c60: 20 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72 6f   in which.the ro
9c70: 77 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c 69  wid is not expli
9c80: 63 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e 20  citly set to an 
9c90: 69 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70  integer.</p>..<p
9ca0: 3e 42 65 63 61 75 73 65 20 6f 66 20 74 68 65 20  >Because of the 
9cb0: 62 65 68 61 76 69 6f 72 73 20 64 65 73 63 72 69  behaviors descri
9cc0: 62 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67 72  bed above, progr
9cd0: 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75  ammers are encou
9ce0: 72 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72 20  raged to.prefer 
9cf0: 41 46 54 45 52 20 74 72 69 67 67 65 72 73 20 6f  AFTER triggers o
9d00: 76 65 72 20 42 45 46 4f 52 45 20 74 72 69 67 67  ver BEFORE trigg
9d10: 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 68  ers.</p>..<h3>Th
9d20: 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69  e RAISE() functi
9d30: 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20  on</h3>..<p>^(A 
9d40: 73 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63  special SQL func
9d50: 74 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79  tion RAISE() may
9d60: 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20   be used within 
9d70: 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
9d80: 6d 2c 29 5e 0a 77 69 74 68 20 74 68 65 20 66 6f  m,)^.with the fo
9d90: 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f  llowing syntax</
9da0: 70 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65  p> ..<tcl>Bubble
9db0: 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75  Diagram raise-fu
9dc0: 6e 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70  nction</tcl>..<p
9dd0: 3e 5e 57 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68  >^When one of th
9de0: 65 20 66 69 72 73 74 20 74 68 72 65 65 20 66 6f  e first three fo
9df0: 72 6d 73 20 69 73 20 63 61 6c 6c 65 64 20 64 75  rms is called du
9e00: 72 69 6e 67 20 74 72 69 67 67 65 72 2d 70 72 6f  ring trigger-pro
9e10: 67 72 61 6d 0a 65 78 65 63 75 74 69 6f 6e 2c 20  gram.execution, 
9e20: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 5b 4f  the specified [O
9e30: 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 70 72 6f 63  N CONFLICT] proc
9e40: 65 73 73 69 6e 67 20 69 73 20 70 65 72 66 6f 72  essing is perfor
9e50: 6d 65 64 0a 28 65 69 74 68 65 72 20 41 42 4f 52  med.(either ABOR
9e60: 54 2c 20 46 41 49 4c 20 6f 72 20 52 4f 4c 4c 42  T, FAIL or ROLLB
9e70: 41 43 4b 29 20 61 6e 64 20 74 68 65 20 63 75 72  ACK) and the cur
9e80: 72 65 6e 74 20 71 75 65 72 79 20 74 65 72 6d 69  rent query termi
9e90: 6e 61 74 65 73 2e 0a 41 6e 20 65 72 72 6f 72 20  nates..An error 
9ea0: 63 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54 45 5f  code of [SQLITE_
9eb0: 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73 20 72  CONSTRAINT] is r
9ec0: 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 61  eturned to the a
9ed0: 70 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e  pplication,.alon
9ee0: 67 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  g with the speci
9ef0: 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61  fied error messa
9f00: 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  ge.</p>..<p>^Whe
9f10: 6e 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20  n RAISE(IGNORE) 
9f20: 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 72  is called, the r
9f30: 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20  emainder of the 
9f40: 63 75 72 72 65 6e 74 20 74 72 69 67 67 65 72 20  current trigger 
9f50: 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74 61  program,.the sta
9f60: 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73  tement that caus
9f70: 65 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ed the trigger p
9f80: 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
9f90: 65 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65 71  e and any subseq
9fa0: 75 65 6e 74 0a 74 72 69 67 67 65 72 20 70 72 6f  uent.trigger pro
9fb0: 67 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c 64  grams that would
9fc0: 20 6f 66 20 62 65 65 6e 20 65 78 65 63 75 74 65   of been execute
9fd0: 64 20 61 72 65 20 61 62 61 6e 64 6f 6e 65 64 2e  d are abandoned.
9fe0: 20 5e 4e 6f 20 64 61 74 61 62 61 73 65 0a 63 68   ^No database.ch
9ff0: 61 6e 67 65 73 20 61 72 65 20 72 6f 6c 6c 65 64  anges are rolled
a000: 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65 20   back.  ^If the 
a010: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63  statement that c
a020: 61 75 73 65 64 20 74 68 65 20 74 72 69 67 67 65  aused the trigge
a030: 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20 65 78 65  r program.to exe
a040: 63 75 74 65 20 69 73 20 69 74 73 65 6c 66 20 70  cute is itself p
a050: 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
a060: 20 70 72 6f 67 72 61 6d 2c 20 74 68 65 6e 20 74   program, then t
a070: 68 61 74 20 74 72 69 67 67 65 72 20 70 72 6f 67  hat trigger prog
a080: 72 61 6d 0a 72 65 73 75 6d 65 73 20 65 78 65 63  ram.resumes exec
a090: 75 74 69 6f 6e 20 61 74 20 74 68 65 20 62 65 67  ution at the beg
a0a0: 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 6e 65  inning of the ne
a0b0: 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 0a  xt step..</p>...
a0c0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
a0d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a0e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a0f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a110: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
a120: 52 45 41 54 45 20 56 49 45 57 7d 20 7b 63 72 65  REATE VIEW} {cre
a130: 61 74 65 76 69 65 77 7d 20 7b 7b 43 52 45 41 54  ateview} {{CREAT
a140: 45 20 56 49 45 57 7d 20 76 69 65 77 20 2a 76 69  E VIEW} view *vi
a150: 65 77 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  ews}..BubbleDiag
a160: 72 61 6d 20 63 72 65 61 74 65 2d 76 69 65 77 2d  ram create-view-
a170: 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
a180: 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 56 49  p>^The CREATE VI
a190: 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69 67  EW command assig
a1a0: 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20 70  ns a name to a p
a1b0: 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b 53 45  re-packaged .[SE
a1c0: 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2e  LECT] statement.
a1d0: 20 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69 65 77   .^Once the view
a1e0: 20 69 73 20 63 72 65 61 74 65 64 2c 20 69 74 20   is created, it 
a1f0: 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 74  can be used in t
a200: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 6f  he FROM clause.o
a210: 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45 43  f another [SELEC
a220: 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  T] in place of a
a230: 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70   table name..</p
a240: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 54  >..<p>^If the "T
a250: 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41  EMP" or "TEMPORA
a260: 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75  RY" keyword occu
a270: 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43  rs in between "C
a280: 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45 57  REATE".and "VIEW
a290: 22 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20  " then the view 
a2a0: 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
a2b0: 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65 20  is only visible 
a2c0: 74 6f 20 74 68 65 0a 70 72 6f 63 65 73 73 20 74  to the.process t
a2d0: 68 61 74 20 6f 70 65 6e 65 64 20 74 68 65 20 64  hat opened the d
a2e0: 61 74 61 62 61 73 65 20 61 6e 64 20 69 73 20 61  atabase and is a
a2f0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
a300: 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61  eted when.the da
a310: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
a320: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61  .</p>..<p> ^If a
a330: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
a340: 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63 69 66  me&gt; is specif
a350: 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76 69  ied, then the vi
a360: 65 77 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  ew is created in
a370: 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61   .the named data
a380: 62 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20  base. ^It is an 
a390: 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79  error to specify
a3a0: 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61   both a &lt;data
a3b0: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e  base-name&gt;.an
a3c0: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
a3d0: 72 64 20 6f 6e 20 61 20 56 49 45 57 2c 20 75 6e  rd on a VIEW, un
a3e0: 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61 74  less the &lt;dat
a3f0: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
a400: 73 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f  s "temp"..^If no
a410: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69   database name i
a420: 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64  s specified, and
a430: 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72   the TEMP keywor
a440: 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  d is not present
a450: 2c 0a 74 68 65 20 56 49 45 57 20 69 73 20 63 72  ,.the VIEW is cr
a460: 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69  eated in the mai
a470: 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a  n database.</p>.
a480: 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74 20  .<p>^You cannot 
a490: 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52  [DELETE], [INSER
a4a0: 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20  T], or [UPDATE] 
a4b0: 61 20 76 69 65 77 2e 20 20 5e 56 69 65 77 73 20  a view.  ^Views 
a4c0: 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a 69  are read-only .i
a4d0: 6e 20 53 51 4c 69 74 65 2e 20 20 5e 48 6f 77 65  n SQLite.  ^Howe
a4e0: 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73  ver, in many cas
a4f0: 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20 61  es you can use a
a500: 6e 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20 74 72  n.[INSTEAD OF tr
a510: 69 67 67 65 72 5d 20 6f 6e 20 74 68 65 20 76 69  igger] on the vi
a520: 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68  ew to accomplish
a530: 20 0a 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67   .the same thing
a540: 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20 72 65  .  ^Views are re
a550: 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65 20  moved .with the 
a560: 5b 44 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d 6d  [DROP VIEW] comm
a570: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  and.</p>..<tcl>.
a580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a5a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a5b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a5c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
a5d0: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56  ection {CREATE V
a5e0: 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20 7b 63  IRTUAL TABLE} {c
a5f0: 72 65 61 74 65 76 74 61 62 7d 20 7b 7b 43 52 45  reatevtab} {{CRE
a600: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
a610: 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  E}}..BubbleDiagr
a620: 61 6d 20 63 72 65 61 74 65 2d 76 69 72 74 75 61  am create-virtua
a630: 6c 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a 3c  l-table-stmt 1.<
a640: 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72  /tcl>..<p>A [vir
a650: 74 75 61 6c 20 74 61 62 6c 65 5d 20 69 73 20 61  tual table] is a
a660: 6e 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 61  n interface to a
a670: 6e 20 65 78 74 65 72 6e 61 6c 20 73 74 6f 72 61  n external stora
a680: 67 65 20 6f 72 20 63 6f 6d 70 75 74 61 74 69 6f  ge or computatio
a690: 6e 0a 65 6e 67 69 6e 65 20 74 68 61 74 20 61 70  n.engine that ap
a6a0: 70 65 61 72 73 20 74 6f 20 62 65 20 61 20 74 61  pears to be a ta
a6b0: 62 6c 65 20 62 75 74 20 64 6f 65 73 20 6e 6f 74  ble but does not
a6c0: 20 61 63 74 75 61 6c 6c 79 20 73 74 6f 72 65 20   actually store 
a6d0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20 74  information.in t
a6e0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
a6f0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 67 65 6e  .</p>..<p>In gen
a700: 65 72 61 6c 2c 20 79 6f 75 20 63 61 6e 20 64 6f  eral, you can do
a710: 20 61 6e 79 74 68 69 6e 67 20 77 69 74 68 20 61   anything with a
a720: 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d   [virtual table]
a730: 20 74 68 61 74 20 63 61 6e 20 62 65 20 64 6f 6e   that can be don
a740: 65 0a 77 69 74 68 20 61 6e 20 6f 72 64 69 6e 61  e.with an ordina
a750: 72 79 20 74 61 62 6c 65 2c 20 65 78 63 65 70 74  ry table, except
a760: 20 74 68 61 74 20 5e 79 6f 75 20 63 61 6e 6e 6f   that ^you canno
a770: 74 20 63 72 65 61 74 65 20 69 6e 64 69 63 65 73  t create indices
a780: 20 6f 72 20 74 72 69 67 67 65 72 73 20 6f 6e 20   or triggers on 
a790: 61 0a 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a.virtual table.
a7a0: 20 20 5e 53 6f 6d 65 20 76 69 72 74 75 61 6c 20    ^Some virtual 
a7b0: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
a7c0: 74 69 6f 6e 73 20 6d 69 67 68 74 20 69 6d 70 6f  tions might impo
a7d0: 73 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 72 65  se additional.re
a7e0: 73 74 72 69 63 74 69 6f 6e 73 2e 20 20 46 6f 72  strictions.  For
a7f0: 20 65 78 61 6d 70 6c 65 2c 20 6d 61 6e 79 20 76   example, many v
a800: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 61 72  irtual tables ar
a810: 65 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c 2f 70 3e  e read-only.</p>
a820: 0a 0a 3c 70 3e 54 68 65 20 26 6c 74 3b 6d 6f 64  ..<p>The &lt;mod
a830: 75 6c 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20  ule-name&gt; is 
a840: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 6f  the name of an o
a850: 62 6a 65 63 74 20 74 68 61 74 20 69 6d 70 6c 65  bject that imple
a860: 6d 65 6e 74 73 0a 74 68 65 20 76 69 72 74 75 61  ments.the virtua
a870: 6c 20 74 61 62 6c 65 2e 20 20 5e 54 68 65 20 26  l table.  ^The &
a880: 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67  lt;module-name&g
a890: 74 3b 20 6d 75 73 74 20 62 65 20 72 65 67 69 73  t; must be regis
a8a0: 74 65 72 65 64 20 77 69 74 68 0a 74 68 65 20 53  tered with.the S
a8b0: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 63  QLite database c
a8c0: 6f 6e 6e 65 63 74 69 6f 6e 20 75 73 69 6e 67 0a  onnection using.
a8d0: 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
a8e0: 6d 6f 64 75 6c 65 28 29 5d 20 6f 72 20 5b 73 71  module()] or [sq
a8f0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64  lite3_create_mod
a900: 75 6c 65 5f 76 32 28 29 5d 0a 70 72 69 6f 72 20  ule_v2()].prior 
a910: 74 6f 20 69 73 73 75 69 6e 67 20 74 68 65 20 43  to issuing the C
a920: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
a930: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 5e  BLE statement..^
a940: 54 68 65 20 6d 6f 64 75 6c 65 20 74 61 6b 65 73  The module takes
a950: 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 6f   zero or more co
a960: 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 20 61 72  mma-separated ar
a970: 67 75 6d 65 6e 74 73 2e 0a 5e 54 68 65 20 61 72  guments..^The ar
a980: 67 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6a  guments can be j
a990: 75 73 74 20 61 62 6f 75 74 20 61 6e 79 20 74 65  ust about any te
a9a0: 78 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  xt as long as it
a9b0: 20 68 61 73 20 62 61 6c 61 6e 63 65 64 0a 70 61   has balanced.pa
a9c0: 72 65 6e 74 68 65 73 65 73 2e 20 20 54 68 65 20  rentheses.  The 
a9d0: 61 72 67 75 6d 65 6e 74 20 73 79 6e 74 61 78 20  argument syntax 
a9e0: 69 73 20 73 75 66 66 69 63 69 65 6e 74 6c 79 20  is sufficiently 
a9f0: 67 65 6e 65 72 61 6c 20 74 68 61 74 20 74 68 65  general that the
aa00: 0a 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62  .arguments can b
aa10: 65 20 6d 61 64 65 20 74 6f 20 61 70 70 65 61 72  e made to appear
aa20: 20 61 73 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69   as [column defi
aa30: 6e 69 74 69 6f 6e 73 5d 20 69 6e 20 61 20 74 72  nitions] in a tr
aa40: 61 64 69 74 69 6f 6e 61 6c 0a 5b 43 52 45 41 54  aditional.[CREAT
aa50: 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  E TABLE] stateme
aa60: 6e 74 2e 20 20 0a 5e 53 51 4c 69 74 65 20 70 61  nt.  .^SQLite pa
aa70: 73 73 65 73 20 74 68 65 20 6d 6f 64 75 6c 65 20  sses the module 
aa80: 61 72 67 75 6d 65 6e 74 73 20 64 69 72 65 63 74  arguments direct
aa90: 6c 79 0a 74 6f 20 74 68 65 20 5b 78 43 72 65 61  ly.to the [xCrea
aaa0: 74 65 5d 20 61 6e 64 20 5b 78 43 6f 6e 6e 65 63  te] and [xConnec
aab0: 74 5d 20 6d 65 74 68 6f 64 73 20 6f 66 20 74 68  t] methods of th
aac0: 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
aad0: 6e 74 61 74 69 6f 6e 0a 77 69 74 68 6f 75 74 20  ntation.without 
aae0: 61 6e 79 20 69 6e 74 65 72 70 72 65 74 61 74 69  any interpretati
aaf0: 6f 6e 2e 20 20 49 74 20 69 73 20 74 68 65 20 72  on.  It is the r
ab00: 65 73 70 6f 6e 73 69 62 69 6c 69 74 79 0a 6f 66  esponsibility.of
ab10: 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   the module impl
ab20: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 70 61  ementation to pa
ab30: 72 73 65 20 61 6e 64 20 69 6e 74 65 72 70 72 65  rse and interpre
ab40: 74 20 69 74 73 20 6f 77 6e 20 61 72 67 75 6d 65  t its own argume
ab50: 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  nts.</p>..<p>^A 
ab60: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73  virtual table is
ab70: 20 64 65 73 74 72 6f 79 65 64 20 75 73 69 6e 67   destroyed using
ab80: 20 74 68 65 20 6f 72 64 69 6e 61 72 79 0a 5b 44   the ordinary.[D
ab90: 52 4f 50 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ROP TABLE] state
aba0: 6d 65 6e 74 2e 20 20 54 68 65 72 65 20 69 73 20  ment.  There is 
abb0: 6e 6f 0a 44 52 4f 50 20 56 49 52 54 55 41 4c 20  no.DROP VIRTUAL 
abc0: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
abd0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
abe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac20: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
ac30: 6f 6e 20 44 45 4c 45 54 45 20 64 65 6c 65 74 65  on DELETE delete
ac40: 20 7b 44 45 4c 45 54 45 20 2a 44 45 4c 45 54 45   {DELETE *DELETE
ac50: 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  s}..BubbleDiagra
ac60: 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 20 31 0a  m delete-stmt 1.
ac70: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75  BubbleDiagram qu
ac80: 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61  alified-table-na
ac90: 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  me.</tcl>..<p>^T
aca0: 68 65 20 44 45 4c 45 54 45 20 63 6f 6d 6d 61 6e  he DELETE comman
acb0: 64 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 6d  d is used to rem
acc0: 6f 76 65 20 72 65 63 6f 72 64 73 20 66 72 6f 6d  ove records from
acd0: 20 61 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 63   a table..^The c
ace0: 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73 20  ommand consists 
acf0: 6f 66 20 74 68 65 20 22 44 45 4c 45 54 45 20 46  of the "DELETE F
ad00: 52 4f 4d 22 20 6b 65 79 77 6f 72 64 73 20 66 6f  ROM" keywords fo
ad10: 6c 6c 6f 77 65 64 20 62 79 0a 74 68 65 20 6e 61  llowed by.the na
ad20: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
ad30: 66 72 6f 6d 20 77 68 69 63 68 20 72 65 63 6f 72  from which recor
ad40: 64 73 20 61 72 65 20 74 6f 20 62 65 20 72 65 6d  ds are to be rem
ad50: 6f 76 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  oved..</p>..<p>^
ad60: 57 69 74 68 6f 75 74 20 61 20 57 48 45 52 45 20  Without a WHERE 
ad70: 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77 73  clause, all rows
ad80: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 61 72   of the table ar
ad90: 65 20 72 65 6d 6f 76 65 64 2e 0a 5e 49 66 20 61  e removed..^If a
ada0: 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
adb0: 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 6e 20   supplied, then 
adc0: 6f 6e 6c 79 20 74 68 6f 73 65 20 72 6f 77 73 20  only those rows 
add0: 74 68 61 74 20 6d 61 74 63 68 0a 74 68 65 20 65  that match.the e
ade0: 78 70 72 65 73 73 69 6f 6e 20 61 72 65 20 72 65  xpression are re
adf0: 6d 6f 76 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  moved.</p>..<h3>
ae00: 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20  Restrictions on 
ae10: 44 45 4c 45 54 45 20 53 74 61 74 65 6d 65 6e 74  DELETE Statement
ae20: 73 20 57 69 74 68 69 6e 20 43 52 45 41 54 45 20  s Within CREATE 
ae30: 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70  TRIGGER</h3>..<p
ae40: 3e 5e 54 68 65 72 65 20 61 72 65 20 61 64 64 69  >^There are addi
ae50: 74 69 6f 6e 61 6c 20 73 79 6e 74 61 78 20 72 65  tional syntax re
ae60: 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 44 45  strictions on DE
ae70: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20  LETE statements 
ae80: 74 68 61 74 0a 6f 63 63 75 72 20 77 69 74 68 69  that.occur withi
ae90: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
aea0: 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
aeb0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68   statement.  ^Th
aec0: 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  e <i>table-name<
aed0: 2f 69 3e 0a 6d 75 73 74 20 62 65 20 75 6e 71 75  /i>.must be unqu
aee0: 61 6c 69 66 69 65 64 2e 20 0a 5e 28 49 6e 20 6f  alified. .^(In o
aef0: 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
af00: 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  <i>database-name
af10: 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65  </i><b>.</b> pre
af20: 66 69 78 0a 6f 6e 20 74 68 65 20 74 61 62 6c 65  fix.on the table
af30: 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c 6c   name is not all
af40: 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72 69 67  owed within trig
af50: 67 65 72 73 2e 20 29 5e 0a 5e 54 68 65 20 74 61  gers. )^.^The ta
af60: 62 6c 65 20 66 72 6f 6d 20 77 68 69 63 68 20 74  ble from which t
af70: 6f 20 64 65 6c 65 74 65 20 6d 75 73 74 20 62 65  o delete must be
af80: 20 69 6e 20 74 68 65 20 73 61 6d 65 0a 64 61 74   in the same.dat
af90: 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62  abase as the tab
afa0: 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  le to which the 
afb0: 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63  trigger is attac
afc0: 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  hed.</p>..<p>^Th
afd0: 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64  e INDEXED BY and
afe0: 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
aff0: 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  uses are not all
b000: 6f 77 65 64 20 6f 6e 20 44 45 4c 45 54 45 0a 73  owed on DELETE.s
b010: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
b020: 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a   triggers.</p>..
b030: 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 63 6c  <p>^The LIMIT cl
b040: 61 75 73 65 20 28 64 65 73 63 72 69 62 65 64 20  ause (described 
b050: 62 65 6c 6f 77 29 20 69 73 20 75 6e 73 75 70 70  below) is unsupp
b060: 6f 72 74 65 64 20 77 69 74 68 69 6e 20 74 72 69  orted within tri
b070: 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ggers.</p>..<tcl
b080: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 72 75  >hd_fragment tru
b090: 63 61 74 65 6f 70 74 20 7b 74 72 75 6e 63 61 74  cateopt {truncat
b0a0: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 7d 3c  e optimization}<
b0b0: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 54 72  /tcl>.<h3>The Tr
b0c0: 75 6e 63 61 74 65 20 4f 70 74 69 6d 69 7a 61 74  uncate Optimizat
b0d0: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68  ion</h3>..<p>^Wh
b0e0: 65 6e 20 74 68 65 20 57 48 45 52 45 20 69 73 20  en the WHERE is 
b0f0: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20 44  omitted from a D
b100: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
b110: 61 6e 64 20 74 68 65 20 74 61 62 6c 65 0a 62 65  and the table.be
b120: 69 6e 67 20 64 65 6c 65 74 65 64 20 68 61 73 20  ing deleted has 
b130: 6e 6f 20 74 72 69 67 67 65 72 73 2c 0a 53 51 4c  no triggers,.SQL
b140: 69 74 65 20 75 73 65 73 20 61 6e 20 6f 70 74 69  ite uses an opti
b150: 6d 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72 61 73  mization to eras
b160: 65 20 74 68 65 20 65 6e 74 69 72 65 20 74 61 62  e the entire tab
b170: 6c 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74 68 6f  le content.witho
b180: 75 74 20 68 61 76 69 6e 67 20 74 6f 20 76 69 73  ut having to vis
b190: 69 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  it each row of t
b1a0: 68 65 20 74 61 62 6c 65 20 69 6e 64 69 76 69 64  he table individ
b1b0: 75 61 6c 6c 79 2e 0a 54 68 69 73 20 22 74 72 75  ually..This "tru
b1c0: 6e 63 61 74 65 22 20 6f 70 74 69 6d 69 7a 61 74  ncate" optimizat
b1d0: 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65 20 64 65  ion makes the de
b1e0: 6c 65 74 65 20 72 75 6e 20 6d 75 63 68 20 66 61  lete run much fa
b1f0: 73 74 65 72 2e 0a 50 72 69 6f 72 20 74 6f 20 53  ster..Prior to S
b200: 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33  QLite [version 3
b210: 2e 36 2e 35 5d 2c 20 74 68 65 20 74 72 75 6e 63  .6.5], the trunc
b220: 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
b230: 0a 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68 61 74  .also meant that
b240: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68   the [sqlite3_ch
b250: 61 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b 73 71  anges()] and.[sq
b260: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
b270: 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ges()] interface
b280: 73 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75 6e 74  s.and the [count
b290: 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d  _changes pragma]
b2a0: 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c  .will not actual
b2b0: 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ly return the nu
b2c0: 6d 62 65 72 20 6f 66 20 64 65 6c 65 74 65 64 20  mber of deleted 
b2d0: 72 6f 77 73 2e 20 20 0a 54 68 61 74 20 70 72 6f  rows.  .That pro
b2e0: 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20 66 69  blem has been fi
b2f0: 78 65 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69  xed as of [versi
b300: 6f 6e 20 33 2e 36 2e 35 5d 2e 0a 0a 3c 70 3e 5e  on 3.6.5]...<p>^
b310: 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74  The truncate opt
b320: 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 62 65  imization can be
b330: 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
b340: 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71 75  abled for all qu
b350: 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d 70 69  eries.by recompi
b360: 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69 74 68  ling.SQLite with
b370: 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d 49   the [SQLITE_OMI
b380: 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54 49 4d  T_TRUNCATE_OPTIM
b390: 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c 65  IZATION] compile
b3a0: 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f 70  -time switch.</p
b3b0: 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e 63 61  >..<p>The trunca
b3c0: 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  te optimization 
b3d0: 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69 73 61  can also be disa
b3e0: 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  bled at runtime 
b3f0: 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74  using.the [sqlit
b400: 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65  e3_set_authorize
b410: 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 20  r()] interface. 
b420: 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72 69 7a   ^If an authoriz
b430: 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65 74 75  er callback.retu
b440: 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47 4e 4f  rns [SQLITE_IGNO
b450: 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51 4c 49  RE] for an [SQLI
b460: 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74 69 6f  TE_DELETE] actio
b470: 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74 68 65  n code, then.the
b480: 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74 69 6f   DELETE operatio
b490: 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64 20 62  n will proceed b
b4a0: 75 74 20 74 68 65 20 74 72 75 6e 63 61 74 65 20  ut the truncate 
b4b0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77 69 6c  optimization wil
b4c0: 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20 61 6e  l.be bypassed an
b4d0: 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20 64  d rows will be d
b4e0: 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20 6f 6e  eleted one by on
b4f0: 65 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 55 73 65 20  e.</p>..<h3>Use 
b500: 4f 66 20 4c 49 4d 49 54 3c 2f 68 33 3e 0a 0a 3c  Of LIMIT</h3>..<
b510: 70 3e 5e 28 49 66 20 53 51 4c 69 74 65 20 69 73  p>^(If SQLite is
b520: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
b530: 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he [SQLITE_ENABL
b540: 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f  E_UPDATE_DELETE_
b550: 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74  LIMIT].compile-t
b560: 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e  ime option, then
b570: 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74   the syntax of t
b580: 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
b590: 65 6e 74 20 69 73 0a 65 78 74 65 6e 64 65 64 20  ent is.extended 
b5a0: 62 79 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20  by the addition 
b5b0: 6f 66 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45  of optional ORDE
b5c0: 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63  R BY and LIMIT c
b5d0: 6c 61 75 73 65 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c  lauses:)^</p>..<
b5e0: 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61  tcl>BubbleDiagra
b5f0: 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 2d 6c 69  m delete-stmt-li
b600: 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mited</tcl>..<p>
b610: 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4c 49  ^The optional LI
b620: 4d 49 54 20 63 6c 61 75 73 65 20 63 61 6e 20 62  MIT clause can b
b630: 65 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20  e used to limit 
b640: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f  the number of.ro
b650: 77 73 20 64 65 6c 65 74 65 64 2c 20 61 6e 64 20  ws deleted, and 
b660: 74 68 65 72 65 62 79 20 6c 69 6d 69 74 20 74 68  thereby limit th
b670: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 74 72  e size of the tr
b680: 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20  ansaction..^The 
b690: 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
b6a0: 6f 6e 20 61 20 44 45 4c 45 54 45 20 73 74 61 74  on a DELETE stat
b6b0: 65 6d 65 6e 74 0a 69 73 20 75 73 65 64 20 6f 6e  ement.is used on
b6c0: 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ly to determine 
b6d0: 77 68 69 63 68 20 72 6f 77 73 20 66 61 6c 6c 0a  which rows fall.
b6e0: 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54  within the LIMIT
b6f0: 2e 20 20 5e 54 68 65 20 6f 72 64 65 72 20 69 6e  .  ^The order in
b700: 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20   which rows are 
b710: 64 65 6c 65 74 65 64 20 69 73 20 61 72 62 69 74  deleted is arbit
b720: 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20  rary.and is not 
b730: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
b740: 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
b750: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  e.</p>..<p>^The 
b760: 70 72 65 73 65 6e 63 65 20 6f 66 20 61 20 4c 49  presence of a LI
b770: 4d 49 54 20 63 6c 61 75 73 65 20 64 65 66 65 61  MIT clause defea
b780: 74 73 20 74 68 65 20 74 72 75 6e 63 61 74 65 20  ts the truncate 
b790: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 63 61 75  optimization.cau
b7a0: 73 69 6e 67 20 61 6c 6c 20 72 6f 77 73 20 62 65  sing all rows be
b7b0: 69 6e 67 20 64 65 6c 65 74 65 64 20 74 6f 20 62  ing deleted to b
b7c0: 65 20 76 69 73 69 74 65 64 2e 3c 2f 70 3e 0a 0a  e visited.</p>..
b7d0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
b7e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b820: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
b830: 45 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  ETACH DATABASE} 
b840: 64 65 74 61 63 68 20 2a 44 45 54 41 43 48 0a 0a  detach *DETACH..
b850: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65  BubbleDiagram de
b860: 74 61 63 68 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  tach-stmt 1.</tc
b870: 6c 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61  l>..<p>^This sta
b880: 74 65 6d 65 6e 74 20 64 65 74 61 63 68 65 73 20  tement detaches 
b890: 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 61  an additional da
b8a0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
b8b0: 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 0a 61 74  n previously .at
b8c0: 74 61 63 68 65 64 20 75 73 69 6e 67 20 74 68 65  tached using the
b8d0: 20 5b 41 54 54 41 43 48 5d 20 73 74 61 74 65 6d   [ATTACH] statem
b8e0: 65 6e 74 2e 20 20 0a 5e 49 74 20 69 73 20 70 6f  ent.  .^It is po
b8f0: 73 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20 74  ssible to have t
b900: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
b910: 20 66 69 6c 65 20 61 74 74 61 63 68 65 64 20 6d   file attached m
b920: 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 75 73  ultiple times us
b930: 69 6e 67 20 0a 64 69 66 66 65 72 65 6e 74 20 6e  ing .different n
b940: 61 6d 65 73 2c 20 61 6e 64 20 64 65 74 61 63 68  ames, and detach
b950: 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69  ing one connecti
b960: 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20 77 69 6c  on to a file wil
b970: 6c 20 6c 65 61 76 65 20 74 68 65 20 0a 6f 74 68  l leave the .oth
b980: 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70 3e 0a  ers intact.</p>.
b990: 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d  .<p>^This statem
b9a0: 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ent will fail if
b9b0: 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74 68   SQLite is in th
b9c0: 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72  e middle of a tr
b9d0: 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a  ansaction.</p>..
b9e0: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
b9f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba30: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
ba40: 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70 69  ROP INDEX} dropi
ba50: 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44 45  ndex {{DROP INDE
ba60: 58 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  X}}..BubbleDiagr
ba70: 61 6d 20 64 72 6f 70 2d 69 6e 64 65 78 2d 73 74  am drop-index-st
ba80: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
ba90: 5e 54 68 65 20 44 52 4f 50 20 49 4e 44 45 58 20  ^The DROP INDEX 
baa0: 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65  statement remove
bab0: 73 20 61 6e 20 69 6e 64 65 78 20 61 64 64 65 64  s an index added
bac0: 0a 77 69 74 68 20 74 68 65 20 5b 43 52 45 41 54  .with the [CREAT
bad0: 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65  E INDEX] stateme
bae0: 6e 74 2e 20 20 54 68 65 20 69 6e 64 65 78 20 69  nt.  The index i
baf0: 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d  s completely rem
bb00: 6f 76 65 64 20 66 72 6f 6d 0a 74 68 65 20 64 69  oved from.the di
bb10: 73 6b 2e 20 20 54 68 65 20 6f 6e 6c 79 20 77 61  sk.  The only wa
bb20: 79 20 74 6f 20 72 65 63 6f 76 65 72 20 74 68 65  y to recover the
bb30: 20 69 6e 64 65 78 20 69 73 20 74 6f 20 72 65 65   index is to ree
bb40: 6e 74 65 72 20 74 68 65 0a 61 70 70 72 6f 70 72  nter the.appropr
bb50: 69 61 74 65 20 5b 43 52 45 41 54 45 20 49 4e 44  iate [CREATE IND
bb60: 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e  EX] command.</p>
bb70: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
bb80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bb90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bbb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bbc0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
bbd0: 44 52 4f 50 20 54 41 42 4c 45 7d 20 64 72 6f 70  DROP TABLE} drop
bbe0: 74 61 62 6c 65 20 7b 7b 44 52 4f 50 20 54 41 42  table {{DROP TAB
bbf0: 4c 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  LE}}..BubbleDiag
bc00: 72 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73  ram drop-table-s
bc10: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
bc20: 3e 5e 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45  >^The DROP TABLE
bc30: 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76   statement remov
bc40: 65 73 20 61 20 74 61 62 6c 65 20 61 64 64 65 64  es a table added
bc50: 20 77 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54   with the.[CREAT
bc60: 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  E TABLE] stateme
bc70: 6e 74 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70  nt.  The name sp
bc80: 65 63 69 66 69 65 64 20 69 73 20 74 68 65 0a 74  ecified is the.t
bc90: 61 62 6c 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65  able name.  ^The
bca0: 20 64 72 6f 70 70 65 64 20 74 61 62 6c 65 20 69   dropped table i
bcb0: 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d  s completely rem
bcc0: 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  oved from the da
bcd0: 74 61 62 61 73 65 20 0a 73 63 68 65 6d 61 20 61  tabase .schema a
bce0: 6e 64 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65  nd the disk file
bcf0: 2e 20 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e  .  The table can
bd00: 20 6e 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65   not be recovere
bd10: 64 2e 20 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65  d.  .^All indice
bd20: 73 20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61  s and triggers.a
bd30: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
bd40: 68 65 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73  he table are als
bd50: 6f 20 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a  o deleted.</p>..
bd60: 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  <p>^The optional
bd70: 20 49 46 20 45 58 49 53 54 53 20 63 6c 61 75 73   IF EXISTS claus
bd80: 65 20 73 75 70 70 72 65 73 73 65 73 20 74 68 65  e suppresses the
bd90: 20 65 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c   error that woul
bda0: 64 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c  d normally.resul
bdb0: 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 64  t if the table d
bdc0: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f  oes not exist.</
bdd0: 70 3e 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65  p>..<p>^If [fore
bde0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
bdf0: 6e 74 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64  nts] are enabled
be00: 2c 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63  , a DROP TABLE c
be10: 6f 6d 6d 61 6e 64 20 70 65 72 66 6f 72 6d 73 20  ommand performs 
be20: 61 6e 0a 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c  an.implicit [DEL
be30: 45 54 45 20 7c 20 44 45 4c 45 54 45 20 46 52 4f  ETE | DELETE FRO
be40: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 5d 20 63  M &lt;tbl&gt;] c
be50: 6f 6d 6d 61 6e 64 20 62 65 66 6f 72 65 20 72 65  ommand before re
be60: 6d 6f 76 69 6e 67 20 74 68 65 0a 74 61 62 6c 65  moving the.table
be70: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
be80: 73 65 20 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20  se schema. ^Any 
be90: 74 72 69 67 67 65 72 73 20 61 74 74 61 63 68 65  triggers attache
bea0: 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61  d to the table a
beb0: 72 65 0a 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  re.dropped from 
bec0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
bed0: 65 6d 61 20 62 65 66 6f 72 65 20 74 68 65 20 69  ema before the i
bee0: 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46  mplicit DELETE F
bef0: 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20  ROM &lt;tbl&gt; 
bf00: 0a 69 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f  .is executed, so
bf10: 20 74 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75   this cannot cau
bf20: 73 65 20 61 6e 79 20 74 72 69 67 67 65 72 73 20  se any triggers 
bf30: 74 6f 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74  to fire. By cont
bf40: 72 61 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63  rast, ^an.implic
bf50: 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26  it DELETE FROM &
bf60: 6c 74 3b 74 62 6c 26 67 74 3b 20 64 6f 65 73 20  lt;tbl&gt; does 
bf70: 63 61 75 73 65 20 61 6e 79 20 63 6f 6e 66 69 67  cause any config
bf80: 75 72 65 64 0a 5b 66 6f 72 65 69 67 6e 20 6b 65  ured.[foreign ke
bf90: 79 20 61 63 74 69 6f 6e 73 5d 20 74 6f 20 74 61  y actions] to ta
bfa0: 6b 65 20 70 6c 61 63 65 2e 20 0a 5e 49 66 20 74  ke place. .^If t
bfb0: 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
bfc0: 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
bfd0: 67 74 3b 20 65 78 65 63 75 74 65 64 0a 61 73 20  gt; executed.as 
bfe0: 70 61 72 74 20 6f 66 20 61 20 44 52 4f 50 20 54  part of a DROP T
bff0: 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f  ABLE command vio
c000: 6c 61 74 65 73 20 61 6e 79 20 69 6d 6d 65 64 69  lates any immedi
c010: 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
c020: 63 6f 6e 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20  constraints,.an 
c030: 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
c040: 64 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20  d and the table 
c050: 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20  is not dropped. 
c060: 5e 49 66 20 0a 74 68 65 20 69 6d 70 6c 69 63 69  ^If .the implici
c070: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
c080: 74 3b 74 62 6c 26 67 74 3b 20 63 61 75 73 65 73  t;tbl&gt; causes
c090: 20 61 6e 79 20 0a 64 65 66 65 72 72 65 64 20 66   any .deferred f
c0a0: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
c0b0: 72 61 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f  raints to be vio
c0c0: 6c 61 74 65 64 2c 20 61 6e 64 20 74 68 65 20 76  lated, and the v
c0d0: 69 6f 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a  iolations still.
c0e0: 65 78 69 73 74 20 77 68 65 6e 20 74 68 65 20 74  exist when the t
c0f0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 63 6f  ransaction is co
c100: 6d 6d 69 74 74 65 64 2c 20 61 6e 20 65 72 72 6f  mmitted, an erro
c110: 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 74  r is returned at
c120: 20 74 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d   the time.of com
c130: 6d 69 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  mit...<tcl>.####
c140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c180: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
c190: 6f 6e 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52  on {DROP TRIGGER
c1a0: 7d 20 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b  } droptrigger {{
c1b0: 44 52 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a  DROP TRIGGER}}..
c1c0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
c1d0: 6f 70 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 20  op-trigger-stmt 
c1e0: 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  1.</tcl>..<p>^Th
c1f0: 65 20 44 52 4f 50 20 54 52 49 47 47 45 52 20 73  e DROP TRIGGER s
c200: 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
c210: 20 61 20 74 72 69 67 67 65 72 20 63 72 65 61 74   a trigger creat
c220: 65 64 20 62 79 20 74 68 65 20 0a 5b 43 52 45 41  ed by the .[CREA
c230: 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74  TE TRIGGER] stat
c240: 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20 74 72 69  ement.  ^The tri
c250: 67 67 65 72 20 69 73 20 0a 64 65 6c 65 74 65 64  gger is .deleted
c260: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
c270: 73 65 20 73 63 68 65 6d 61 2e 20 5e 4e 6f 74 65  se schema. ^Note
c280: 20 74 68 61 74 20 74 72 69 67 67 65 72 73 20 61   that triggers a
c290: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
c2a0: 20 0a 64 72 6f 70 70 65 64 20 77 68 65 6e 20 74   .dropped when t
c2b0: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 74 61  he associated ta
c2c0: 62 6c 65 20 69 73 20 64 72 6f 70 70 65 64 2e 3c  ble is dropped.<
c2d0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
c2e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c2f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c320: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
c330: 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d 20 64 72  n {DROP VIEW} dr
c340: 6f 70 76 69 65 77 20 7b 7b 44 52 4f 50 20 56 49  opview {{DROP VI
c350: 45 57 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  EW}}..BubbleDiag
c360: 72 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74  ram drop-view-st
c370: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
c380: 5e 54 68 65 20 44 52 4f 50 20 56 49 45 57 20 73  ^The DROP VIEW s
c390: 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
c3a0: 20 61 20 76 69 65 77 20 63 72 65 61 74 65 64 20   a view created 
c3b0: 62 79 20 74 68 65 0a 5b 43 52 45 41 54 45 20 56  by the.[CREATE V
c3c0: 49 45 57 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  IEW] statement. 
c3d0: 20 5e 54 68 65 20 6e 61 6d 65 20 73 70 65 63 69   ^The name speci
c3e0: 66 69 65 64 20 69 73 20 74 68 65 20 0a 76 69 65  fied is the .vie
c3f0: 77 20 6e 61 6d 65 2e 20 20 5e 49 74 20 69 73 20  w name.  ^It is 
c400: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
c410: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
c420: 2c 20 62 75 74 20 6e 6f 20 61 63 74 75 61 6c 20  , but no actual 
c430: 64 61 74 61 20 0a 69 6e 20 74 68 65 20 75 6e 64  data .in the und
c440: 65 72 6c 79 69 6e 67 20 62 61 73 65 20 74 61 62  erlying base tab
c450: 6c 65 73 20 69 73 20 6d 6f 64 69 66 69 65 64 2e  les is modified.
c460: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
c470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69  ##########.Secti
c4c0: 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61  on EXPLAIN expla
c4d0: 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62 62  in EXPLAIN..Bubb
c4e0: 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74  leDiagram sql-st
c4f0: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41  mt.</tcl>..<p>^A
c500: 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
c510: 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64 20  can be preceded 
c520: 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22  by the keyword "
c530: 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20 74  EXPLAIN" or.by t
c540: 68 65 20 70 68 72 61 73 65 20 22 45 58 50 4c 41  he phrase "EXPLA
c550: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 22 2e 20  IN QUERY PLAN". 
c560: 20 5e 45 69 74 68 65 72 20 6d 6f 64 69 66 69 63   ^Either modific
c570: 61 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ation causes the
c580: 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74  .SQL statement t
c590: 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71 75  o behave as a qu
c5a0: 65 72 79 20 61 6e 64 20 74 6f 20 72 65 74 75 72  ery and to retur
c5b0: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  n information ab
c5c0: 6f 75 74 0a 68 6f 77 20 74 68 65 20 53 51 4c 20  out.how the SQL 
c5d0: 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
c5e0: 68 61 76 65 20 6f 70 65 72 61 74 65 64 20 69 66  have operated if
c5f0: 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79   the EXPLAIN key
c600: 77 6f 72 64 20 6f 72 0a 70 68 72 61 73 65 20 68  word or.phrase h
c610: 61 64 20 62 65 65 6e 20 6f 6d 69 74 74 65 64 2e  ad been omitted.
c620: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74  </p>..<p>^When t
c630: 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  he EXPLAIN keywo
c640: 72 64 20 61 70 70 65 61 72 73 20 62 79 20 69 74  rd appears by it
c650: 73 65 6c 66 20 69 74 20 63 61 75 73 65 73 20 74  self it causes t
c660: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 74 6f 20  he statement.to 
c670: 62 65 68 61 76 65 20 61 73 20 61 20 71 75 65 72  behave as a quer
c680: 79 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74  y that returns t
c690: 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 0a  he sequence of .
c6a0: 5b 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65  [virtual machine
c6b0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 5d 20 69   instructions] i
c6c0: 74 20 77 6f 75 6c 64 20 68 61 76 65 0a 75 73 65  t would have.use
c6d0: 64 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65  d to execute the
c6e0: 20 63 6f 6d 6d 61 6e 64 20 68 61 64 20 74 68 65   command had the
c6f0: 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64   EXPLAIN keyword
c700: 20 6e 6f 74 20 62 65 65 6e 20 70 72 65 73 65 6e   not been presen
c710: 74 2e 0a 5e 57 68 65 6e 20 74 68 65 20 45 58 50  t..^When the EXP
c720: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
c730: 70 68 72 61 73 65 20 61 70 70 65 61 72 73 2c 20  phrase appears, 
c740: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 72 65  the statement re
c750: 74 75 72 6e 73 0a 68 69 67 68 2d 6c 65 76 65 6c  turns.high-level
c760: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
c770: 75 74 20 77 68 61 74 20 69 6e 64 69 63 65 73 20  ut what indices 
c780: 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
c790: 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  used.</p>..<p>Th
c7a0: 65 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 45 58  e output from EX
c7b0: 50 4c 41 49 4e 20 61 6e 64 20 45 58 50 4c 41 49  PLAIN and EXPLAI
c7c0: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 69 73 20  N QUERY PLAN is 
c7d0: 69 6e 74 65 6e 64 65 64 20 66 6f 72 0a 69 6e 74  intended for.int
c7e0: 65 72 61 63 74 69 76 65 20 61 6e 61 6c 79 73 69  eractive analysi
c7f0: 73 20 61 6e 64 20 74 72 6f 75 62 6c 65 73 68 6f  s and troublesho
c800: 6f 74 69 6e 67 20 6f 6e 6c 79 2e 20 20 54 68 65  oting only.  The
c810: 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20   details of the 
c820: 0a 6f 75 74 70 75 74 20 66 6f 72 6d 61 74 20 61  .output format a
c830: 72 65 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68  re subject to ch
c840: 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 72 65  ange from one re
c850: 6c 65 61 73 65 20 6f 66 20 53 51 4c 69 74 65 20  lease of SQLite 
c860: 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 41 70 70  to the next..App
c870: 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64  lications should
c880: 20 6e 6f 74 20 75 73 65 20 45 58 50 4c 41 49 4e   not use EXPLAIN
c890: 20 6f 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52   or EXPLAIN QUER
c8a0: 59 20 50 4c 41 4e 20 73 69 6e 63 65 0a 74 68 65  Y PLAN since.the
c8b0: 69 72 20 65 78 61 63 74 20 62 65 68 61 76 69 6f  ir exact behavio
c8c0: 72 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65  r is undocumente
c8d0: 64 2c 20 75 6e 73 70 65 63 69 66 69 65 64 2c 20  d, unspecified, 
c8e0: 61 6e 64 20 76 61 72 69 61 62 6c 65 2e 3c 2f 70  and variable.</p
c8f0: 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
c900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c940: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
c950: 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 20  expression expr 
c960: 7b 2a 65 78 70 72 65 73 73 69 6f 6e 20 7b 65 78  {*expression {ex
c970: 70 72 65 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d  pression syntax}
c980: 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
c990: 20 65 78 70 72 20 31 0a 42 75 62 62 6c 65 44 69   expr 1.BubbleDi
c9a0: 61 67 72 61 6d 20 6c 69 74 65 72 61 6c 2d 76 61  agram literal-va
c9b0: 6c 75 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61  lue.BubbleDiagra
c9c0: 6d 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 0a  m signed-number.
c9d0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 61  BubbleDiagram ra
c9e0: 69 73 65 2d 66 75 6e 63 74 69 6f 6e 0a 3c 2f 74  ise-function.</t
c9f0: 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65 63  cl>..<p>This sec
ca00: 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65 6e  tion is differen
ca10: 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72  t from the other
ca20: 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20 73  s.  Most other s
ca30: 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73 20  ections of.this 
ca40: 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20 61  document talks a
ca50: 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c 61  bout a particula
ca60: 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20  r SQL command.  
ca70: 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f 65  This section doe
ca80: 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75 74  s.not talk about
ca90: 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f   a standalone co
caa0: 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74 20  mmand but about 
cab0: 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77 68  "expressions" wh
cac0: 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d 70  ich are .subcomp
cad0: 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20 6f  onents of most o
cae0: 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f  ther commands.</
caf0: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
cb00: 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20 7b  ment binaryops {
cb10: 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73  binary operators
cb20: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72  }</tcl>.<h3>Oper
cb30: 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28  ators</h3>.<p>^(
cb40: 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61 6e  SQLite understan
cb50: 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ds the following
cb60: 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72   binary operator
cb70: 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d  s, in order from
cb80: 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77 65  .highest to lowe
cb90: 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c 2f  st precedence:</
cba0: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
cbb0: 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f  <pre>.<font colo
cbc0: 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67  r="#2c2cf0"><big
cbd0: 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25 0a  >||.*    /    %.
cbe0: 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20  +    -.&lt;&lt; 
cbf0: 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61 6d    &gt;&gt;   &am
cc00: 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20 20  p;    |.&lt;    
cc10: 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20 20  &lt;=   &gt;    
cc20: 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20 20  &gt;=.=    ==   
cc30: 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20 20  !=   &lt;&gt;   
cc40: 3c 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e 4f  </big>IS   IS NO
cc50: 54 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20 20  T   IN   LIKE   
cc60: 47 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20 52  GLOB   MATCH   R
cc70: 45 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52 3c  EGEXP.AND   .OR<
cc80: 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62  /font>.</pre></b
cc90: 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
cca0: 3e 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e 61  >^(Supported una
ccb0: 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74  ry prefix operat
ccc0: 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c 2f  ors are these:</
ccd0: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
cce0: 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f  <pre>.<font colo
ccf0: 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67  r="#2c2cf0"><big
cd00: 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20 20  >-    +    ~    
cd10: 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e  NOT</big></font>
cd20: 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
cd30: 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f  ote>)^..<tcl>hd_
cd40: 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74 65  fragment collate
cd50: 6f 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65 72  op {COLLATE oper
cd60: 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  ator}</tcl>.<p>^
cd70: 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  The COLLATE oper
cd80: 61 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79 20  ator is a unary 
cd90: 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f 72  postfix.operator
cda0: 20 74 68 61 74 20 61 73 73 69 67 6e 73 20 61 20   that assigns a 
cdb0: 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  [collating seque
cdc0: 6e 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72 65  nce] to an expre
cdd0: 73 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c  ssion..^The COLL
cde0: 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61 73  ATE operator has
cdf0: 20 61 20 68 69 67 68 65 72 20 70 72 65 63 65 64   a higher preced
ce00: 65 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72 65  ence (binds more
ce10: 20 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20 61   tightly) than a
ce20: 6e 79 0a 70 72 65 66 69 78 20 75 6e 61 72 79 20  ny.prefix unary 
ce30: 6f 70 65 72 61 74 6f 72 20 6f 72 20 61 6e 79 20  operator or any 
ce40: 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
ce50: 0a 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  .^The collating 
ce60: 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20  sequence set by 
ce70: 74 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  the COLLATE oper
ce80: 61 74 6f 72 20 6f 76 65 72 72 69 64 65 73 20 74  ator overrides t
ce90: 68 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  he.collating seq
cea0: 75 65 6e 63 65 20 64 65 74 65 72 6d 69 6e 65 64  uence determined
ceb0: 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54 45 20   by the COLLATE 
cec0: 63 6c 61 75 73 65 20 69 6e 20 61 20 74 61 62 6c  clause in a tabl
ced0: 65 0a 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  e.[column defini
cee0: 74 69 6f 6e 5d 2e 0a 53 65 65 20 74 68 65 20 5b  tion]..See the [
cef0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
cf00: 63 65 7c 20 64 65 74 61 69 6c 65 64 20 64 69 73  ce| detailed dis
cf10: 63 75 73 73 69 6f 6e 20 6f 6e 20 63 6f 6c 6c 61  cussion on colla
cf20: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 5d 0a  ting sequences].
cf30: 69 6e 20 74 68 65 20 5b 64 61 74 61 74 79 70 65  in the [datatype
cf40: 20 7c 20 44 61 74 61 74 79 70 65 20 49 6e 20 53   | Datatype In S
cf50: 51 4c 69 74 65 33 5d 20 64 6f 63 75 6d 65 6e 74  QLite3] document
cf60: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
cf70: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 3c 2f 70  information..</p
cf80: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20  >..<tcl>hd_puts 
cf90: 22 0a 3c 70 3e 5e 54 68 65 20 75 6e 61 72 79 20  ".<p>^The unary 
cfa0: 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74  operator [Operat
cfb0: 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f 70  or +] is a no-op
cfc0: 2e 20 20 5e 49 74 20 63 61 6e 20 62 65 20 61 70  .  ^It can be ap
cfd0: 70 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e 67 73  plied.to strings
cfe0: 2c 20 6e 75 6d 62 65 72 73 2c 20 62 6c 6f 62 73  , numbers, blobs
cff0: 20 6f 72 20 4e 55 4c 4c 20 61 6e 64 20 69 74 20   or NULL and it 
d000: 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 61  always returns a
d010: 20 72 65 73 75 6c 74 0a 77 69 74 68 20 74 68 65   result.with the
d020: 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20 74   same value as t
d030: 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 22  he operand.</p>"
d040: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20  </tcl>..<p>Note 
d050: 74 68 61 74 20 74 68 65 72 65 20 61 72 65 20 74  that there are t
d060: 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20 6f 66  wo variations of
d070: 20 74 68 65 20 65 71 75 61 6c 73 20 61 6e 64 20   the equals and 
d080: 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65 72 61  not equals.opera
d090: 74 6f 72 73 2e 20 20 5e 45 71 75 61 6c 73 20 63  tors.  ^Equals c
d0a0: 61 6e 20 62 65 20 65 69 74 68 65 72 0a 0a 3c 74  an be either..<t
d0b0: 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b 4f 70  cl>.hd_puts "[Op
d0c0: 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70  erator =] or [Op
d0d0: 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54 68 65  erator ==]..^The
d0e0: 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70 65 72   non-equals oper
d0f0: 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69 74 68  ator can be eith
d100: 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d  er.[Operator !=]
d110: 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 7b 26   or [Operator {&
d120: 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68 65 20  lt;&gt;}]..^The 
d130: 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f 70  [Operator ||] op
d140: 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e 63  erator is \"conc
d150: 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74 20 6a  atenate\" - it j
d160: 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a 74 68  oins together.th
d170: 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20 6f 66  e two strings of
d180: 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a 5e   its operands..^
d190: 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70  The operator [Op
d1a0: 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70 75 74  erator %] output
d1b0: 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 69  s the value of i
d1c0: 74 73 20 6c 65 66 74 20 0a 6f 70 65 72 61 6e 64  ts left .operand
d1d0: 20 6d 6f 64 75 6c 6f 20 69 74 73 20 72 69 67 68   modulo its righ
d1e0: 74 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 0a 0a  t operand.</p>..
d1f0: 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  <p>^The result o
d200: 66 20 61 6e 79 20 62 69 6e 61 72 79 20 6f 70 65  f any binary ope
d210: 72 61 74 6f 72 20 69 73 20 65 69 74 68 65 72 20  rator is either 
d220: 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20  a numeric value 
d230: 6f 72 20 0a 4e 55 4c 4c 2c 20 65 78 63 65 70 74  or .NULL, except
d240: 20 66 6f 72 20 74 68 65 20 5b 4f 70 65 72 61 74   for the [Operat
d250: 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65 6e 61  or ||] concatena
d260: 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20 77 68  tion operator wh
d270: 69 63 68 20 61 6c 77 61 79 73 20 0a 65 76 61 6c  ich always .eval
d280: 75 61 74 65 73 20 74 6f 20 65 69 74 68 65 72 20  uates to either 
d290: 4e 55 4c 4c 20 6f 72 20 61 20 74 65 78 74 20 76  NULL or a text v
d2a0: 61 6c 75 65 2e 3c 2f 70 3e 22 0a 0a 68 64 5f 66  alue.</p>"..hd_f
d2b0: 72 61 67 6d 65 6e 74 20 7b 69 73 69 73 6e 6f 74  ragment {isisnot
d2c0: 7d 20 7b 49 53 20 6f 70 65 72 61 74 6f 72 7d 20  } {IS operator} 
d2d0: 7b 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72  {IS NOT operator
d2e0: 7d 0a 0a 68 64 5f 70 75 74 73 20 22 3c 70 3e 5e  }..hd_puts "<p>^
d2f0: 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 49 53  The [Operator IS
d300: 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20  ] and [Operator 
d310: 7b 49 53 20 4e 4f 54 7d 5d 20 6f 70 65 72 61 74  {IS NOT}] operat
d320: 6f 72 73 20 77 6f 72 6b 0a 6c 69 6b 65 20 5b 4f  ors work.like [O
d330: 70 65 72 61 74 6f 72 20 3d 5d 20 61 6e 64 20 5b  perator =] and [
d340: 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 65 78 63  Operator !=] exc
d350: 65 70 74 20 77 68 65 6e 20 6f 6e 65 20 6f 72 20  ept when one or 
d360: 62 6f 74 68 20 6f 66 20 74 68 65 0a 6f 70 65 72  both of the.oper
d370: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2e 20 5e  ands are NULL. ^
d380: 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 69 66  In this case, if
d390: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
d3a0: 72 65 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  re NULL, then th
d3b0: 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76  e.IS operator ev
d3c0: 61 6c 75 61 74 65 73 20 74 6f 20 31 20 28 74 72  aluates to 1 (tr
d3d0: 75 65 29 20 61 6e 64 20 74 68 65 20 49 53 20 4e  ue) and the IS N
d3e0: 4f 54 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c  OT operator eval
d3f0: 75 61 74 65 73 0a 74 6f 20 30 20 28 66 61 6c 73  uates.to 0 (fals
d400: 65 29 2e 20 5e 49 66 20 6f 6e 65 20 6f 70 65 72  e). ^If one oper
d410: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 61 6e 64 20  and is NULL and 
d420: 74 68 65 20 6f 74 68 65 72 20 69 73 20 6e 6f 74  the other is not
d430: 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20 6f 70  , then the.IS op
d440: 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73  erator evaluates
d450: 20 74 6f 20 30 20 28 66 61 6c 73 65 29 20 61 6e   to 0 (false) an
d460: 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f 70 65  d the IS NOT ope
d470: 72 61 74 6f 72 20 69 73 20 31 20 28 74 72 75 65  rator is 1 (true
d480: 29 2e 0a 5e 49 74 20 69 73 20 6e 6f 74 20 70 6f  )..^It is not po
d490: 73 73 69 62 6c 65 20 66 6f 72 20 61 6e 20 49 53  ssible for an IS
d4a0: 20 6f 72 20 49 53 20 4e 4f 54 20 65 78 70 72 65   or IS NOT expre
d4b0: 73 73 69 6f 6e 20 74 6f 20 65 76 61 6c 75 61 74  ssion to evaluat
d4c0: 65 20 74 6f 20 4e 55 4c 4c 2e 0a 5e 4f 70 65 72  e to NULL..^Oper
d4d0: 61 74 6f 72 73 20 5b 4f 70 65 72 61 74 6f 72 20  ators [Operator 
d4e0: 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f  IS] and [Operato
d4f0: 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 68 61 76 65  r {IS NOT}] have
d500: 20 74 68 65 20 73 61 6d 65 20 0a 70 72 65 63 65   the same .prece
d510: 64 65 6e 63 65 20 61 73 20 5b 4f 70 65 72 61 74  dence as [Operat
d520: 6f 72 20 3d 5d 2e 22 0a 0a 3c 74 63 6c 3e 68 64  or =]."..<tcl>hd
d530: 5f 66 72 61 67 6d 65 6e 74 20 6c 69 74 76 61 6c  _fragment litval
d540: 75 65 20 7b 6c 69 74 65 72 61 6c 20 76 61 6c 75  ue {literal valu
d550: 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4c 69 74  e}</tcl>.<h3>Lit
d560: 65 72 61 6c 20 56 61 6c 75 65 73 3c 2f 68 33 3e  eral Values</h3>
d570: 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20  .<p>.^A literal 
d580: 76 61 6c 75 65 20 69 73 20 61 20 63 6f 6e 73 74  value is a const
d590: 61 6e 74 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ant of some kind
d5a0: 2e 0a 5e 4c 69 74 65 72 61 6c 20 76 61 6c 75 65  ..^Literal value
d5b0: 73 20 6d 61 79 20 62 65 20 69 6e 74 65 67 65 72  s may be integer
d5c0: 73 2c 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  s, floating poin
d5d0: 74 20 6e 75 6d 62 65 72 73 2c 20 73 74 72 69 6e  t numbers, strin
d5e0: 67 73 2c 0a 42 4c 4f 42 73 2c 20 6f 72 20 4e 55  gs,.BLOBs, or NU
d5f0: 4c 4c 73 2e 0a 5e 53 63 69 65 6e 74 69 66 69 63  LLs..^Scientific
d600: 20 6e 6f 74 61 74 69 6f 6e 20 69 73 20 73 75 70   notation is sup
d610: 70 6f 72 74 65 64 20 66 6f 72 20 66 6c 6f 61 74  ported for float
d620: 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61  ing point litera
d630: 6c 20 76 61 6c 75 65 73 2e 0a 5e 28 54 68 65 20  l values..^(The 
d640: 22 2e 22 20 63 68 61 72 61 63 74 65 72 20 69 73  "." character is
d650: 20 61 6c 77 61 79 73 20 75 73 65 64 20 0a 61 73   always used .as
d660: 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
d670: 6e 74 20 65 76 65 6e 20 69 66 20 74 68 65 20 6c  nt even if the l
d680: 6f 63 61 6c 65 20 73 65 74 74 69 6e 67 20 73 70  ocale setting sp
d690: 65 63 69 66 69 65 73 20 22 2c 22 20 66 6f 72 0a  ecifies "," for.
d6a0: 74 68 69 73 20 72 6f 6c 65 20 2d 20 74 68 65 20  this role - the 
d6b0: 75 73 65 20 6f 66 20 22 2c 22 20 66 6f 72 20 74  use of "," for t
d6c0: 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
d6d0: 20 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e   would result in
d6e0: 0a 73 79 6e 74 61 63 74 69 63 20 61 6d 62 69 67  .syntactic ambig
d6f0: 75 69 74 79 2e 29 5e 20 20 5e 41 20 73 74 72 69  uity.)^  ^A stri
d700: 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 66  ng constant is f
d710: 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73 69  ormed by enclosi
d720: 6e 67 20 74 68 65 0a 73 74 72 69 6e 67 20 69 6e  ng the.string in
d730: 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 28   single quotes (
d740: 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20 71  ').  ^A single q
d750: 75 6f 74 65 20 77 69 74 68 69 6e 20 74 68 65 20  uote within the 
d760: 73 74 72 69 6e 67 20 63 61 6e 0a 62 65 20 65 6e  string can.be en
d770: 63 6f 64 65 64 20 62 79 20 70 75 74 74 69 6e 67  coded by putting
d780: 20 74 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f 74   two single quot
d790: 65 73 20 69 6e 20 61 20 72 6f 77 20 2d 20 61 73  es in a row - as
d7a0: 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73 74   in Pascal..C-st
d7b0: 79 6c 65 20 65 73 63 61 70 65 73 20 75 73 69 6e  yle escapes usin
d7c0: 67 20 74 68 65 20 62 61 63 6b 73 6c 61 73 68 20  g the backslash 
d7d0: 63 68 61 72 61 63 74 65 72 20 61 72 65 20 6e 6f  character are no
d7e0: 74 20 73 75 70 70 6f 72 74 65 64 20 62 65 63 61  t supported beca
d7f0: 75 73 65 0a 74 68 65 79 20 61 72 65 20 6e 6f 74  use.they are not
d800: 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 5e   standard SQL..^
d810: 42 4c 4f 42 20 6c 69 74 65 72 61 6c 73 20 61 72  BLOB literals ar
d820: 65 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  e string literal
d830: 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 68 65 78  s containing hex
d840: 61 64 65 63 69 6d 61 6c 20 64 61 74 61 20 61 6e  adecimal data an
d850: 64 0a 70 72 65 63 65 64 65 64 20 62 79 20 61 20  d.preceded by a 
d860: 73 69 6e 67 6c 65 20 22 78 22 20 6f 72 20 22 58  single "x" or "X
d870: 22 20 63 68 61 72 61 63 74 65 72 2e 20 20 5e 28  " character.  ^(
d880: 46 6f 72 20 65 78 61 6d 70 6c 65 3a 3c 2f 70 3e  For example:</p>
d890: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
d8a0: 72 65 3e 0a 58 27 35 33 35 31 34 43 36 39 37 34  re>.X'53514C6974
d8b0: 36 35 27 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  65'.</pre></bloc
d8c0: 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e  kquote>)^..<p>.^
d8d0: 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20  A literal value 
d8e0: 63 61 6e 20 61 6c 73 6f 20 62 65 20 74 68 65 20  can also be the 
d8f0: 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a 3c 2f  token "NULL"..</
d900: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
d910: 6d 65 6e 74 20 76 61 72 70 61 72 61 6d 20 70 61  ment varparam pa
d920: 72 61 6d 65 74 65 72 20 70 61 72 61 6d 65 74 65  rameter paramete
d930: 72 73 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65  rs {bound parame
d940: 74 65 72 7d 20 7b 62 6f 75 6e 64 20 70 61 72 61  ter} {bound para
d950: 6d 65 74 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  meters}</tcl>.<h
d960: 33 3e 50 61 72 61 6d 65 74 65 72 73 3c 2f 68 33  3>Parameters</h3
d970: 3e 0a 3c 70 3e 0a 41 20 22 76 61 72 69 61 62 6c  >.<p>.A "variabl
d980: 65 22 20 6f 72 20 22 70 61 72 61 6d 65 74 65 72  e" or "parameter
d990: 22 20 74 6f 6b 65 6e 0a 73 70 65 63 69 66 69 65  " token.specifie
d9a0: 73 20 61 20 70 6c 61 63 65 68 6f 6c 64 65 72 20  s a placeholder 
d9b0: 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  in the expressio
d9c0: 6e 20 66 6f 72 20 61 20 0a 76 61 6c 75 65 20 74  n for a .value t
d9d0: 68 61 74 20 69 73 20 66 69 6c 6c 65 64 20 69 6e  hat is filled in
d9e0: 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e   at runtime usin
d9f0: 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 62  g the.[sqlite3_b
da00: 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71 6c  ind_blob() | sql
da10: 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 66 61 6d  ite3_bind()] fam
da20: 69 6c 79 20 6f 66 20 43 2f 43 2b 2b 20 69 6e 74  ily of C/C++ int
da30: 65 72 66 61 63 65 73 2e 0a 50 61 72 61 6d 65 74  erfaces..Paramet
da40: 65 72 73 20 63 61 6e 20 74 61 6b 65 20 73 65 76  ers can take sev
da50: 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70 3e  eral forms:.</p>
da60: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  ..<blockquote>.<
da70: 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74 64 20  table>.<tr>.<td 
da80: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61  align="right" va
da90: 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c  lign="top"><b>?<
daa0: 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f 74  /b><i>NNN</i></t
dab0: 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
dac0: 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 28 41 20 71  ></td>.<td>^(A q
dad0: 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 66 6f 6c  uestion mark fol
dae0: 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65  lowed by a numbe
daf0: 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c  r <i>NNN</i> hol
db00: 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 74 68  ds a spot for th
db10: 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61 6d 65 74  e.NNN-th paramet
db20: 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74 20 62 65  er.  NNN must be
db30: 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 5b   between 1 and [
db40: 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
db50: 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 29 5e 0a 3c  BLE_NUMBER].)^.<
db60: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
db70: 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
db80: 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
db90: 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20  b>?</b></td><td 
dba0: 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
dbb0: 0a 3c 74 64 3e 5e 41 20 71 75 65 73 74 69 6f 6e  .<td>^A question
dbc0: 20 6d 61 72 6b 20 74 68 61 74 20 69 73 20 6e 6f   mark that is no
dbd0: 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  t followed by a 
dbe0: 6e 75 6d 62 65 72 20 63 72 65 61 74 65 73 20 61  number creates a
dbf0: 20 70 61 72 61 6d 65 74 65 72 0a 77 69 74 68 20   parameter.with 
dc00: 61 20 6e 75 6d 62 65 72 20 6f 6e 65 20 67 72 65  a number one gre
dc10: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6c 61  ater than the la
dc20: 72 67 65 73 74 20 70 61 72 61 6d 65 74 65 72 20  rgest parameter 
dc30: 6e 75 6d 62 65 72 20 61 6c 72 65 61 64 79 20 61  number already a
dc40: 73 73 69 67 6e 65 64 2e 0a 5e 49 66 20 74 68 69  ssigned..^If thi
dc50: 73 20 6d 65 61 6e 73 20 74 68 65 20 70 61 72 61  s means the para
dc60: 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69 73 20  meter number is 
dc70: 67 72 65 61 74 65 72 20 74 68 61 6e 0a 5b 53 51  greater than.[SQ
dc80: 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
dc90: 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69 73  E_NUMBER], it is
dca0: 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 2f 74 64 3e   an error..</td>
dcb0: 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
dcc0: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61  align="right" va
dcd0: 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c  lign="top"><b>:<
dce0: 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f  /b><i>AAAA</i></
dcf0: 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
dd00: 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 63  "></td>.<td>^A c
dd10: 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79  olon followed by
dd20: 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e   an identifier n
dd30: 61 6d 65 20 68 6f 6c 64 73 20 61 20 73 70 6f 74  ame holds a spot
dd40: 20 66 6f 72 20 61 20 0a 5b 73 71 6c 69 74 65 33   for a .[sqlite3
dd50: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
dd60: 6e 61 6d 65 7c 6e 61 6d 65 64 20 70 61 72 61 6d  name|named param
dd70: 65 74 65 72 5d 20 77 69 74 68 20 74 68 65 20 6e  eter] with the n
dd80: 61 6d 65 20 3a 41 41 41 41 2e 20 20 0a 5e 28 4e  ame :AAAA.  .^(N
dd90: 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72 73 20  amed parameters 
dda0: 61 72 65 20 61 6c 73 6f 20 6e 75 6d 62 65 72 65  are also numbere
ddb0: 64 2e 20 54 68 65 20 6e 75 6d 62 65 72 20 61 73  d. The number as
ddc0: 73 69 67 6e 65 64 20 69 73 20 6f 6e 65 20 67 72  signed is one gr
ddd0: 65 61 74 65 72 20 74 68 61 6e 0a 74 68 65 20 6c  eater than.the l
dde0: 61 72 67 65 73 74 20 70 61 72 61 6d 65 74 65 72  argest parameter
ddf0: 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64 79 20   number already 
de00: 61 73 73 69 67 6e 65 64 2e 29 5e 20 5e 49 66 20  assigned.)^ ^If 
de10: 74 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70  this means the p
de20: 61 72 61 6d 65 74 65 72 0a 77 6f 75 6c 64 20 62  arameter.would b
de30: 65 20 61 73 73 69 67 6e 65 64 20 61 20 6e 75 6d  e assigned a num
de40: 62 65 72 20 67 72 65 61 74 65 72 20 74 68 61 6e  ber greater than
de50: 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52   [SQLITE_MAX_VAR
de60: 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69  IABLE_NUMBER], i
de70: 74 20 69 73 0a 61 6e 20 65 72 72 6f 72 2e 20 54  t is.an error. T
de80: 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f  o avoid confusio
de90: 6e 2c 20 69 74 20 69 73 20 62 65 73 74 20 74 6f  n, it is best to
dea0: 20 61 76 6f 69 64 20 6d 69 78 69 6e 67 20 6e 61   avoid mixing na
deb0: 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65 72 65 64  med and numbered
dec0: 0a 70 61 72 61 6d 65 74 65 72 73 2e 3c 2f 74 64  .parameters.</td
ded0: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
dee0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
def0: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40  align="top"><b>@
df00: 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c  </b><i>AAAA</i><
df10: 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
df20: 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 6e  0"></td>.<td>^An
df30: 20 22 61 74 22 20 73 69 67 6e 20 77 6f 72 6b 73   "at" sign works
df40: 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 61 20   exactly like a 
df50: 63 6f 6c 6f 6e 2c 20 65 78 63 65 70 74 20 74 68  colon, except th
df60: 61 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 0a 74  at the name of.t
df70: 68 65 20 70 61 72 61 6d 65 74 65 72 20 63 72 65  he parameter cre
df80: 61 74 65 64 20 69 73 20 40 41 41 41 41 2e 3c 2f  ated is @AAAA.</
df90: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
dfa0: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
dfb0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
dfc0: 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69  >$</b><i>AAAA</i
dfd0: 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
dfe0: 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
dff0: 41 20 64 6f 6c 6c 61 72 2d 73 69 67 6e 20 66 6f  A dollar-sign fo
e000: 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65  llowed by an ide
e010: 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 61 6c 73  ntifier name als
e020: 6f 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66  o holds a spot f
e030: 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d  or a named.param
e040: 65 74 65 72 20 77 69 74 68 20 74 68 65 20 6e 61  eter with the na
e050: 6d 65 20 24 41 41 41 41 2e 20 20 5e 28 54 68 65  me $AAAA.  ^(The
e060: 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65   identifier name
e070: 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 63 61   in this case ca
e080: 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f 72  n include.one or
e090: 20 6d 6f 72 65 20 6f 63 63 75 72 72 65 6e 63 65   more occurrence
e0a0: 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64 20 61 20  s of "::" and a 
e0b0: 73 75 66 66 69 78 20 65 6e 63 6c 6f 73 65 64 20  suffix enclosed 
e0c0: 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f 6e 74 61  in "(...)" conta
e0d0: 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78 74 20 61  ining.any text a
e0e0: 74 20 61 6c 6c 2e 29 5e 20 20 54 68 69 73 20 73  t all.)^  This s
e0f0: 79 6e 74 61 78 20 69 73 20 74 68 65 20 66 6f 72  yntax is the for
e100: 6d 20 6f 66 20 61 20 76 61 72 69 61 62 6c 65 20  m of a variable 
e110: 6e 61 6d 65 20 69 6e 20 74 68 65 0a 5b 68 74 74  name in the.[htt
e120: 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f 20  p://www.tcl.tk/ 
e130: 7c 20 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e  | Tcl programmin
e140: 67 20 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54 68  g language].  Th
e150: 65 20 70 72 65 73 65 6e 63 65 0a 6f 66 20 74 68  e presence.of th
e160: 69 73 20 73 79 6e 74 61 78 20 72 65 73 75 6c 74  is syntax result
e170: 73 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20  s from the fact 
e180: 74 68 61 74 20 53 51 4c 69 74 65 20 69 73 20 72  that SQLite is r
e190: 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78  eally a .[Tcl ex
e1a0: 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68 61  tension] that ha
e1b0: 73 20 65 73 63 61 70 65 64 20 69 6e 74 6f 20 74  s escaped into t
e1c0: 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f  he wild.</td>.</
e1d0: 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  tr>.</table>.</b
e1e0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e  lockquote>..<p>^
e1f0: 50 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  Parameters that 
e200: 61 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65 64  are not assigned
e210: 20 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73   values using.[s
e220: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
e230: 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e  () | sqlite3_bin
e240: 64 28 29 5d 20 61 72 65 20 74 72 65 61 74 65 64  d()] are treated
e250: 0a 61 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c  .as NULL.</p>..<
e260: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
e270: 6c 69 6b 65 20 4c 49 4b 45 20 45 53 43 41 50 45  like LIKE ESCAPE
e280: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c  </tcl>.<h3>The L
e290: 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 6f 70 65  IKE and GLOB ope
e2a0: 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
e2b0: 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f  The LIKE operato
e2c0: 72 20 64 6f 65 73 20 61 20 70 61 74 74 65 72 6e  r does a pattern
e2d0: 20 6d 61 74 63 68 69 6e 67 20 63 6f 6d 70 61 72   matching compar
e2e0: 69 73 6f 6e 2e 20 5e 54 68 65 20 6f 70 65 72 61  ison. ^The opera
e2f0: 6e 64 0a 74 6f 20 74 68 65 20 72 69 67 68 74 20  nd.to the right 
e300: 6f 66 20 74 68 65 20 4c 49 4b 45 20 6f 70 65 72  of the LIKE oper
e310: 61 74 6f 72 20 63 6f 6e 74 61 69 6e 73 20 74 68  ator contains th
e320: 65 20 70 61 74 74 65 72 6e 20 61 6e 64 20 74 68  e pattern and th
e330: 65 20 6c 65 66 74 20 68 61 6e 64 0a 6f 70 65 72  e left hand.oper
e340: 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  and contains the
e350: 20 73 74 72 69 6e 67 20 74 6f 20 6d 61 74 63 68   string to match
e360: 20 61 67 61 69 6e 73 74 20 74 68 65 20 70 61 74   against the pat
e370: 74 65 72 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 70  tern...<tcl>hd_p
e380: 75 74 73 20 22 5e 41 20 70 65 72 63 65 6e 74 20  uts "^A percent 
e390: 73 79 6d 62 6f 6c 20 28 5c 22 25 5c 22 29 20 69  symbol (\"%\") i
e3a0: 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65  n the LIKE patte
e3b0: 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 0a 73  rn matches any.s
e3c0: 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20  equence of zero 
e3d0: 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65  or more characte
e3e0: 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67  rs in the string
e3f0: 2e 20 20 5e 41 6e 20 75 6e 64 65 72 73 63 6f 72  .  ^An underscor
e400: 65 0a 28 5c 22 5f 5c 22 29 20 69 6e 20 74 68 65  e.(\"_\") in the
e410: 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61   LIKE pattern ma
e420: 74 63 68 65 73 20 61 6e 79 20 73 69 6e 67 6c 65  tches any single
e430: 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74 68   character in th
e440: 65 0a 73 74 72 69 6e 67 2e 20 20 5e 28 41 6e 79  e.string.  ^(Any
e450: 20 6f 74 68 65 72 20 63 68 61 72 61 63 74 65 72   other character
e460: 20 6d 61 74 63 68 65 73 20 69 74 73 65 6c 66 20   matches itself 
e470: 6f 72 20 69 74 73 20 6c 6f 77 65 72 2f 75 70 70  or its lower/upp
e480: 65 72 20 63 61 73 65 0a 65 71 75 69 76 61 6c 65  er case.equivale
e490: 6e 74 20 28 69 2e 65 2e 20 63 61 73 65 2d 69 6e  nt (i.e. case-in
e4a0: 73 65 6e 73 69 74 69 76 65 20 6d 61 74 63 68 69  sensitive matchi
e4b0: 6e 67 29 2e 29 5e 20 20 28 41 20 62 75 67 3a 20  ng).)^  (A bug: 
e4c0: 5e 53 51 4c 69 74 65 20 6f 6e 6c 79 0a 75 6e 64  ^SQLite only.und
e4d0: 65 72 73 74 61 6e 64 73 20 75 70 70 65 72 2f 6c  erstands upper/l
e4e0: 6f 77 65 72 20 63 61 73 65 20 66 6f 72 20 41 53  ower case for AS
e4f0: 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 62  CII characters b
e500: 79 20 64 65 66 61 75 6c 74 2e 20 20 5e 54 68 65  y default.  ^The
e510: 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69  .LIKE operator i
e520: 73 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65  s case sensitive
e530: 20 62 79 20 64 65 66 61 75 6c 74 20 66 6f 72 20   by default for 
e540: 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63 74 65  unicode characte
e550: 72 73 20 74 68 61 74 20 61 72 65 0a 62 65 79 6f  rs that are.beyo
e560: 6e 64 20 74 68 65 20 41 53 43 49 49 20 72 61 6e  nd the ASCII ran
e570: 67 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ge.  For example
e580: 2c 0a 5e 74 68 65 20 65 78 70 72 65 73 73 69 6f  ,.^the expressio
e590: 6e 20 3c 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49  n <b>'a'&nbsp;LI
e5a0: 4b 45 26 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 0a  KE&nbsp;'A'</b>.
e5b0: 69 73 20 54 52 55 45 20 62 75 74 20 3c 62 3e 27  is TRUE but <b>'
e5c0: 26 61 65 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49  &aelig;'&nbsp;LI
e5d0: 4b 45 26 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b  KE&nbsp;'&AElig;
e5e0: 27 3c 2f 62 3e 20 69 73 20 46 41 4c 53 45 2e 29  '</b> is FALSE.)
e5f0: 3c 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  <p>"</tcl>..<p>^
e600: 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20  If the optional 
e610: 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73  ESCAPE clause is
e620: 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
e630: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f  he expression.fo
e640: 6c 6c 6f 77 69 6e 67 20 74 68 65 20 45 53 43 41  llowing the ESCA
e650: 50 45 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20  PE keyword must 
e660: 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20 73 74  evaluate to a st
e670: 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20  ring consisting 
e680: 6f 66 0a 61 20 73 69 6e 67 6c 65 20 63 68 61 72  of.a single char
e690: 61 63 74 65 72 2e 20 5e 54 68 69 73 20 63 68 61  acter. ^This cha
e6a0: 72 61 63 74 65 72 20 6d 61 79 20 62 65 20 75 73  racter may be us
e6b0: 65 64 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70  ed in the LIKE p
e6c0: 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64  attern.to includ
e6d0: 65 20 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e  e literal percen
e6e0: 74 20 6f 72 20 75 6e 64 65 72 73 63 6f 72 65 20  t or underscore 
e6f0: 63 68 61 72 61 63 74 65 72 73 2e 20 5e 54 68 65  characters. ^The
e700: 20 65 73 63 61 70 65 0a 63 68 61 72 61 63 74 65   escape.characte
e710: 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  r followed by a 
e720: 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28  percent symbol (
e730: 25 29 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 28  %), underscore (
e740: 5f 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e 64 0a  _), or a second.
e750: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
e760: 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65 72  escape character
e770: 20 69 74 73 65 6c 66 20 6d 61 74 63 68 65 73 20   itself matches 
e780: 61 0a 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e  a.literal percen
e790: 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73  t symbol, unders
e7a0: 63 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e 67 6c  core, or a singl
e7b0: 65 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74  e escape charact
e7c0: 65 72 2c 0a 72 65 73 70 65 63 74 69 76 65 6c 79  er,.respectively
e7d0: 2e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66 69 78  ...<p>^The infix
e7e0: 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69   LIKE operator i
e7f0: 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
e800: 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70   calling the.app
e810: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
e820: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b   SQL functions [
e830: 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69  like(<i>Y</i>,<i
e840: 3e 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b  >X</i>)] or.[lik
e850: 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c  e(<i>Y</i>,<i>X<
e860: 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f  /i>,<i>Z</i>)]</
e870: 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  a>.</p>..<p>^The
e880: 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63   LIKE operator c
e890: 61 6e 20 62 65 20 6d 61 64 65 20 63 61 73 65 20  an be made case 
e8a0: 73 65 6e 73 69 74 69 76 65 20 75 73 69 6e 67 20  sensitive using 
e8b0: 74 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73 69 74  the.[case_sensit
e8c0: 69 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d 61 5d  ive_like pragma]
e8d0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
e8e0: 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47 4c 4f  ragment glob GLO
e8f0: 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  B</tcl>.<p>^The 
e900: 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20 69 73  GLOB operator is
e910: 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49 4b 45   similar to LIKE
e920: 20 62 75 74 20 75 73 65 73 20 74 68 65 20 55 6e   but uses the Un
e930: 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69 6e 67  ix.file globbing
e940: 20 73 79 6e 74 61 78 20 66 6f 72 20 69 74 73 20   syntax for its 
e950: 77 69 6c 64 63 61 72 64 73 2e 20 20 5e 41 6c 73  wildcards.  ^Als
e960: 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61 73 65 0a  o, GLOB is case.
e970: 73 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c 69 6b  sensitive, unlik
e980: 65 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68 20 47  e LIKE.  ^Both G
e990: 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61 79  LOB and LIKE may
e9a0: 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 0a   be preceded by.
e9b0: 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20  the NOT keyword 
e9c0: 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73 65  to invert the se
e9d0: 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e  nse of the test.
e9e0: 20 20 5e 54 68 65 20 69 6e 66 69 78 20 47 4c 4f    ^The infix GLO
e9f0: 42 20 0a 6f 70 65 72 61 74 6f 72 20 69 73 20 69  B .operator is i
ea00: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
ea10: 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  lling the functi
ea20: 6f 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69  on.[glob(<i>Y</i
ea30: 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64  >,<i>X</i>)] and
ea40: 20 63 61 6e 20 62 65 20 6d 6f 64 69 66 69 65 64   can be modified
ea50: 20 62 79 20 6f 76 65 72 72 69 64 69 6e 67 0a 74   by overriding.t
ea60: 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70  hat function.</p
ea70: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
ea80: 65 6e 74 20 72 65 67 65 78 70 20 52 45 47 45 58  ent regexp REGEX
ea90: 50 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  P</tcl>.<p>^The 
eaa0: 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20  REGEXP operator 
eab0: 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e  is a special syn
eac0: 74 61 78 20 66 6f 72 20 74 68 65 20 72 65 67 65  tax for the rege
ead0: 78 70 28 29 0a 75 73 65 72 20 66 75 6e 63 74 69  xp().user functi
eae0: 6f 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78 70 28  on.  ^No regexp(
eaf0: 29 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  ) user function 
eb00: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 64 65  is defined by de
eb10: 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65  fault.and so use
eb20: 20 6f 66 20 74 68 65 20 52 45 47 45 58 50 20 6f   of the REGEXP o
eb30: 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72  perator will nor
eb40: 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20 69 6e 20  mally result in 
eb50: 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an.error message
eb60: 2e 20 20 5e 49 66 20 61 20 5b 61 70 70 6c 69 63  .  ^If a [applic
eb70: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51  ation-defined SQ
eb80: 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e 61 6d 65  L function] name
eb90: 64 20 22 72 65 67 65 78 70 22 0a 69 73 20 61 64  d "regexp".is ad
eba0: 64 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 2c  ded at run-time,
ebb0: 20 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 20 77   that function w
ebc0: 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20 69 6e  ill be called in
ebd0: 20 6f 72 64 65 72 0a 74 6f 20 69 6d 70 6c 65 6d   order.to implem
ebe0: 65 6e 74 20 74 68 65 20 52 45 47 45 58 50 20 6f  ent the REGEXP o
ebf0: 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74  perator.</p>..<t
ec00: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6d  cl>hd_fragment m
ec10: 61 74 63 68 20 4d 41 54 43 48 3c 2f 74 63 6c 3e  atch MATCH</tcl>
ec20: 0a 3c 70 3e 5e 54 68 65 20 4d 41 54 43 48 20 6f  .<p>^The MATCH o
ec30: 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70 65  perator is a spe
ec40: 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20  cial syntax for 
ec50: 74 68 65 20 6d 61 74 63 68 28 29 0a 61 70 70 6c  the match().appl
ec60: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
ec70: 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 54 68 65 20  function.  ^The 
ec80: 64 65 66 61 75 6c 74 20 6d 61 74 63 68 28 29 20  default match() 
ec90: 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  function impleme
eca0: 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65 73 20 61  ntation.raises a
ecb0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 61 6e 64 20  n exception and 
ecc0: 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 75 73  is not really us
ecd0: 65 66 75 6c 20 66 6f 72 20 61 6e 79 74 68 69 6e  eful for anythin
ece0: 67 2e 0a 5e 42 75 74 20 65 78 74 65 6e 73 69 6f  g..^But extensio
ecf0: 6e 73 20 63 61 6e 20 6f 76 65 72 72 69 64 65 20  ns can override 
ed00: 74 68 65 20 6d 61 74 63 68 28 29 20 66 75 6e 63  the match() func
ed10: 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 0a 68  tion with more.h
ed20: 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e 3c 2f 70  elpful logic.</p
ed30: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
ed40: 65 6e 74 20 62 65 74 77 65 65 6e 20 42 45 54 57  ent between BETW
ed50: 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  EEN</tcl>.<h3>Th
ed60: 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
ed70: 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 54 68 65  or</h3>.<p>^(The
ed80: 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f   BETWEEN operato
ed90: 72 20 69 73 20 6c 6f 67 69 63 61 6c 6c 79 20 65  r is logically e
eda0: 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 61 20 70  quivalent to a p
edb0: 61 69 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  air of compariso
edc0: 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e 20 3c 62  ns.."<i>x</i> <b
edd0: 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20 3c 69 3e  >BETWEEN</b> <i>
ede0: 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e  y</i> <b>AND</b>
edf0: 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73 20 0a 65   <i>z</i>" is .e
ee00: 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 0a 22 3c  quivalent to ."<
ee10: 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74 3b 3d 3c  i>x</i><b>&gt;=<
ee20: 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41  /b><i>y</i> <b>A
ee30: 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f 69 3e 3c  ND</b> <i>x</i><
ee40: 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c  b>&lt;=</b><i>z<
ee50: 2f 69 3e 22 20 65 78 63 65 70 74 0a 74 68 61 74  /i>" except.that
ee60: 20 77 69 74 68 20 42 45 54 57 45 45 4e 2c 20 74   with BETWEEN, t
ee70: 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72  he <i>x</i> expr
ee80: 65 73 73 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 65  ession is only e
ee90: 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 2e 29 5e  valuated once.)^
eea0: 0a 5e 54 68 65 20 70 72 65 63 65 64 65 6e 63 65  .^The precedence
eeb0: 20 6f 66 20 74 68 65 20 42 45 54 57 45 45 4e 20   of the BETWEEN 
eec0: 6f 70 65 72 61 74 6f 72 20 69 73 20 74 68 65 20  operator is the 
eed0: 73 61 6d 65 20 61 73 20 74 68 65 20 70 72 65 63  same as the prec
eee0: 65 64 65 6e 63 65 0a 61 73 20 6f 70 65 72 61 74  edence.as operat
eef0: 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20 61 6e  ors <b>==</b> an
ef00: 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e 64 20  d <b>!=</b> and 
ef10: 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e 64 20  <b>LIKE</b> and 
ef20: 67 72 6f 75 70 73 20 6c 65 66 74 20 74 6f 20 72  groups left to r
ef30: 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  ight...<tcl>hd_f
ef40: 72 61 67 6d 65 6e 74 20 63 61 73 65 20 7b 43 41  ragment case {CA
ef50: 53 45 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f  SE expression}</
ef60: 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 43 41 53  tcl>.<h3>The CAS
ef70: 45 20 65 78 70 72 65 73 73 69 6f 6e 3c 2f 68 33  E expression</h3
ef80: 3e 0a 3c 70 3e 41 20 43 41 53 45 20 65 78 70 72  >.<p>A CASE expr
ef90: 65 73 73 69 6f 6e 20 73 65 72 76 65 73 20 61 20  ession serves a 
efa0: 72 6f 6c 65 20 73 69 6d 69 6c 61 72 20 74 6f 20  role similar to 
efb0: 49 46 2d 54 48 45 4e 2d 45 4c 53 45 20 69 6e 20  IF-THEN-ELSE in 
efc0: 6f 74 68 65 72 0a 70 72 6f 67 72 61 6d 6d 69 6e  other.programmin
efd0: 67 20 6c 61 6e 67 75 61 67 65 73 2e 20 20 0a 0a  g languages.  ..
efe0: 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  <p>The optional 
eff0: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
f000: 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65 65  occurs in betwee
f010: 6e 20 74 68 65 20 43 41 53 45 20 6b 65 79 77 6f  n the CASE keywo
f020: 72 64 20 61 6e 64 20 74 68 65 0a 66 69 72 73 74  rd and the.first
f030: 20 57 48 45 4e 20 6b 65 79 77 6f 72 64 20 69 73   WHEN keyword is
f040: 20 63 61 6c 6c 65 64 20 74 68 65 20 22 62 61 73   called the "bas
f050: 65 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e  e" expression. ^
f060: 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 62 61  There are two ba
f070: 73 69 63 20 66 6f 72 6d 73 0a 6f 66 20 74 68 65  sic forms.of the
f080: 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
f090: 3a 20 74 68 6f 73 65 20 77 69 74 68 20 61 20 62  : those with a b
f0a0: 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61  ase expression a
f0b0: 6e 64 20 74 68 6f 73 65 20 77 69 74 68 6f 75 74  nd those without
f0c0: 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53 45  ...<p>^In a CASE
f0d0: 20 77 69 74 68 6f 75 74 20 61 20 62 61 73 65 20   without a base 
f0e0: 65 78 70 72 65 73 73 69 6f 6e 2c 20 65 61 63 68  expression, each
f0f0: 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
f100: 20 69 73 20 65 76 61 6c 75 61 74 65 64 0a 61 6e   is evaluated.an
f110: 64 20 74 68 65 20 72 65 73 75 6c 74 20 74 72 65  d the result tre
f120: 61 74 65 64 20 61 73 20 61 20 62 6f 6f 6c 65 61  ated as a boolea
f130: 6e 2c 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  n, starting with
f140: 20 74 68 65 20 6c 65 66 74 6d 6f 73 74 20 61 6e   the leftmost an
f150: 64 20 63 6f 6e 74 69 6e 75 69 6e 67 0a 74 6f 20  d continuing.to 
f160: 74 68 65 20 72 69 67 68 74 2e 20 5e 54 68 65 20  the right. ^The 
f170: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
f180: 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  SE expression is
f190: 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20   the evaluation 
f1a0: 6f 66 20 74 68 65 20 54 48 45 4e 0a 65 78 70 72  of the THEN.expr
f1b0: 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f 72 72  ession that corr
f1c0: 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 66  esponds to the f
f1d0: 69 72 73 74 20 57 48 45 4e 20 65 78 70 72 65 73  irst WHEN expres
f1e0: 73 69 6f 6e 20 74 68 61 74 20 65 76 61 6c 75 61  sion that evalua
f1f0: 74 65 73 20 74 6f 0a 74 72 75 65 2e 20 5e 4f 72  tes to.true. ^Or
f200: 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  , if none of the
f210: 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
f220: 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74 72  s evaluate to tr
f230: 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ue, the result o
f240: 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f.evaluating the
f250: 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e   ELSE expression
f260: 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74 68  , if any. ^If th
f270: 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20 65  ere is no ELSE e
f280: 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f  xpression and.no
f290: 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65  ne of the WHEN e
f2a0: 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 74  xpressions are t
f2b0: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 6f 76  rue, then the ov
f2c0: 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 20  erall result is 
f2d0: 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41 20 4e 55 4c  NULL...<p>^A NUL
f2e0: 4c 20 72 65 73 75 6c 74 20 69 73 20 63 6f 6e 73  L result is cons
f2f0: 69 64 65 72 65 64 20 75 6e 74 72 75 65 20 77 68  idered untrue wh
f300: 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 20 57 48  en evaluating WH
f310: 45 4e 20 74 65 72 6d 73 2e 0a 0a 3c 70 3e 5e 49  EN terms...<p>^I
f320: 6e 20 61 20 43 41 53 45 20 77 69 74 68 20 61 20  n a CASE with a 
f330: 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  base expression,
f340: 20 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73   the base expres
f350: 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
f360: 64 20 6a 75 73 74 0a 6f 6e 63 65 20 61 6e 64 20  d just.once and 
f370: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 63 6f  the result is co
f380: 6d 70 61 72 65 64 20 61 67 61 69 6e 73 74 20 74  mpared against t
f390: 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66  he evaluation of
f3a0: 20 65 61 63 68 20 57 48 45 4e 20 0a 65 78 70 72   each WHEN .expr
f3b0: 65 73 73 69 6f 6e 20 66 72 6f 6d 20 6c 65 66 74  ession from left
f3c0: 20 74 6f 20 72 69 67 68 74 2e 20 5e 54 68 65 20   to right. ^The 
f3d0: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
f3e0: 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  SE expression is
f3f0: 20 74 68 65 20 0a 65 76 61 6c 75 61 74 69 6f 6e   the .evaluation
f400: 20 6f 66 20 74 68 65 20 54 48 45 4e 20 65 78 70   of the THEN exp
f410: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f 72  ression that cor
f420: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
f430: 66 69 72 73 74 20 57 48 45 4e 0a 65 78 70 72 65  first WHEN.expre
f440: 73 73 69 6f 6e 20 66 6f 72 20 77 68 69 63 68 20  ssion for which 
f450: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  the comparison i
f460: 73 20 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20  s true. ^Or, if 
f470: 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e  none of the WHEN
f480: 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61  .expressions eva
f490: 6c 75 61 74 65 20 74 6f 20 61 20 76 61 6c 75 65  luate to a value
f4a0: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62 61   equal to the ba
f4b0: 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74  se expression, t
f4c0: 68 65 20 72 65 73 75 6c 74 0a 6f 66 20 65 76 61  he result.of eva
f4d0: 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45  luating the ELSE
f4e0: 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20   expression, if 
f4f0: 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69  any. ^If there i
f500: 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73  s no ELSE expres
f510: 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66  sion and.none of
f520: 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73   the WHEN expres
f530: 73 69 6f 6e 73 20 70 72 6f 64 75 63 65 20 61 20  sions produce a 
f540: 72 65 73 75 6c 74 20 65 71 75 61 6c 20 74 6f 20  result equal to 
f550: 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73 73  the base express
f560: 69 6f 6e 2c 0a 74 68 65 20 6f 76 65 72 61 6c 6c  ion,.the overall
f570: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
f580: 0a 0a 3c 70 3e 5e 57 68 65 6e 20 63 6f 6d 70 61  ..<p>^When compa
f590: 72 69 6e 67 20 61 20 62 61 73 65 20 65 78 70 72  ring a base expr
f5a0: 65 73 73 69 6f 6e 20 61 67 61 69 6e 73 74 20 61  ession against a
f5b0: 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
f5c0: 2c 20 74 68 65 20 73 61 6d 65 0a 63 6f 6c 6c 61  , the same.colla
f5d0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 61  ting sequence, a
f5e0: 66 66 69 6e 69 74 79 2c 20 61 6e 64 20 4e 55 4c  ffinity, and NUL
f5f0: 4c 2d 68 61 6e 64 6c 69 6e 67 20 72 75 6c 65 73  L-handling rules
f600: 20 61 70 70 6c 79 20 61 73 20 69 66 20 74 68 65   apply as if the
f610: 0a 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e  .base expression
f620: 20 61 6e 64 20 57 48 45 4e 20 65 78 70 72 65 73   and WHEN expres
f630: 73 69 6f 6e 20 61 72 65 20 72 65 73 70 65 63 74  sion are respect
f640: 69 76 65 6c 79 20 74 68 65 20 6c 65 66 74 2d 20  ively the left- 
f650: 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f  and.right-hand o
f660: 70 65 72 61 6e 64 73 20 6f 66 20 61 6e 20 3c 62  perands of an <b
f670: 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f 62 69 67  ig><b>=</b></big
f680: 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 20  > operator.</p> 
f690: 5e 49 66 20 74 68 65 20 62 61 73 65 20 0a 65 78  ^If the base .ex
f6a0: 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c  pression is NULL
f6b0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
f6c0: 20 6f 66 20 74 68 65 20 43 41 53 45 20 69 73 20   of the CASE is 
f6d0: 61 6c 77 61 79 73 20 74 68 65 20 72 65 73 75 6c  always the resul
f6e0: 74 20 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  t .of evaluating
f6f0: 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65 73   the ELSE expres
f700: 73 69 6f 6e 20 69 66 20 69 74 20 65 78 69 73 74  sion if it exist
f710: 73 2c 20 6f 72 20 4e 55 4c 4c 20 69 66 20 69 74  s, or NULL if it
f720: 20 64 6f 65 73 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e   does not...<p>^
f730: 42 6f 74 68 20 66 6f 72 6d 73 20 6f 66 20 74 68  Both forms of th
f740: 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
f750: 6e 20 75 73 65 20 6c 61 7a 79 2c 20 6f 72 20 73  n use lazy, or s
f760: 68 6f 72 74 2d 63 69 72 63 75 69 74 2c 20 0a 65  hort-circuit, .e
f770: 76 61 6c 75 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e  valuation...<p>^
f780: 28 54 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72  (The only differ
f790: 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 65  ence between the
f7a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f 20 43   following two C
f7b0: 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ASE expressions 
f7c0: 69 73 20 74 68 61 74 20 0a 74 68 65 20 3c 69 3e  is that .the <i>
f7d0: 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e  x</i> expression
f7e0: 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 65 78   is evaluated ex
f7f0: 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68  actly once in th
f800: 65 20 66 69 72 73 74 20 65 78 61 6d 70 6c 65 20  e first example 
f810: 62 75 74 20 0a 6d 69 67 68 74 20 62 65 20 65 76  but .might be ev
f820: 61 6c 75 61 74 65 64 20 6d 75 6c 74 69 70 6c 65  aluated multiple
f830: 20 74 69 6d 65 73 20 69 6e 20 74 68 65 20 73 65   times in the se
f840: 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e 3c 70 72 65 3e  cond:..<ul><pre>
f850: 0a 3c 6c 69 3e 43 41 53 45 20 78 20 57 48 45 4e  .<li>CASE x WHEN
f860: 20 77 31 20 54 48 45 4e 20 72 31 20 57 48 45 4e   w1 THEN r1 WHEN
f870: 20 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53 45   w2 THEN r2 ELSE
f880: 20 72 33 20 45 4e 44 0a 3c 6c 69 3e 43 41 53 45   r3 END.<li>CASE
f890: 20 57 48 45 4e 20 78 3d 77 31 20 54 48 45 4e 20   WHEN x=w1 THEN 
f8a0: 72 31 20 57 48 45 4e 20 78 3d 77 32 20 54 48 45  r1 WHEN x=w2 THE
f8b0: 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e 44  N r2 ELSE r3 END
f8c0: 0a 3c 2f 70 72 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a  .</pre></ul>)^..
f8d0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
f8e0: 74 20 69 6e 5f 6f 70 20 7b 49 4e 20 6f 70 65 72  t in_op {IN oper
f8f0: 61 74 6f 72 7d 20 7b 4e 4f 54 20 49 4e 20 6f 70  ator} {NOT IN op
f900: 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  erator}</tcl>.<h
f910: 33 3e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54  3>The IN and NOT
f920: 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68   IN operators</h
f930: 33 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 20 61 6e  3>.<p>^The IN an
f940: 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  d NOT IN operato
f950: 72 73 20 74 61 6b 65 20 61 20 73 69 6e 67 6c 65  rs take a single
f960: 20 73 63 61 6c 61 72 20 6f 70 65 72 61 6e 64 20   scalar operand 
f970: 6f 6e 20 74 68 65 0a 6c 65 66 74 20 61 6e 64 20  on the.left and 
f980: 61 20 76 65 63 74 6f 72 20 6f 70 65 72 61 6e 64  a vector operand
f990: 20 6f 6e 20 74 68 65 20 72 69 67 68 74 0a 66 6f   on the right.fo
f9a0: 72 6d 65 64 20 62 79 20 61 6e 20 65 78 70 6c 69  rmed by an expli
f9b0: 63 69 74 20 6c 69 73 74 20 6f 66 20 7a 65 72 6f  cit list of zero
f9c0: 20 6f 72 20 6d 6f 72 65 20 73 63 61 6c 61 72 73   or more scalars
f9d0: 20 6f 72 20 62 79 20 61 20 0a 73 69 6e 67 6c 65   or by a .single
f9e0: 20 73 75 62 71 75 65 72 79 2e 0a 5e 57 68 65 6e   subquery..^When
f9f0: 20 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61   the right opera
fa00: 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e  nd of an IN or N
fa10: 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 69  OT IN operator i
fa20: 73 20 61 20 73 75 62 71 75 65 72 79 2c 20 74 68  s a subquery, th
fa30: 65 0a 73 75 62 71 75 65 72 79 20 6d 75 73 74 20  e.subquery must 
fa40: 68 61 76 65 20 61 20 73 69 6e 67 6c 65 20 72 65  have a single re
fa50: 73 75 6c 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 57 68  sult column..^Wh
fa60: 65 6e 20 74 68 65 20 72 69 67 68 74 20 6f 70 65  en the right ope
fa70: 72 61 6e 64 20 69 73 20 61 6e 20 65 6d 70 74 79  rand is an empty
fa80: 20 73 65 74 2c 20 74 68 65 20 72 65 73 75 6c 74   set, the result
fa90: 20 6f 66 20 49 4e 20 69 73 20 66 61 6c 73 65 20   of IN is false 
faa0: 61 6e 64 20 74 68 65 0a 72 65 73 75 6c 74 20 6f  and the.result o
fab0: 66 20 4e 4f 54 20 49 4e 20 69 73 20 74 72 75 65  f NOT IN is true
fac0: 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
fad0: 74 68 65 20 6c 65 66 74 20 6f 70 65 72 61 6e 64  the left operand
fae0: 20 61 6e 64 20 65 76 65 6e 20 69 66 20 74 68 65   and even if the
faf0: 0a 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 69 73  .left operand is
fb00: 20 4e 55 4c 4c 2e 0a 5e 28 54 68 65 20 72 65 73   NULL..^(The res
fb10: 75 6c 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20  ult of an IN or 
fb20: 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  NOT IN operator 
fb30: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
fb40: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 6d   the following.m
fb50: 61 74 72 69 78 3a 0a 0a 3c 63 65 6e 74 65 72 3e  atrix:..<center>
fb60: 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  .<table border=1
fb70: 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 4c 65 66 74 20  >.<tr>.<th>Left 
fb80: 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20 4e  operand <br>is N
fb90: 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70  ULL.<th>Right op
fba0: 65 72 61 6e 64 20 3c 62 72 3e 63 6f 6e 74 61 69  erand <br>contai
fbb0: 6e 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68  ns NULL.<th>Righ
fbc0: 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73  t operand <br>is
fbd0: 20 61 6e 20 65 6d 70 74 79 20 73 65 74 0a 3c 74   an empty set.<t
fbe0: 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64 20 66  h>Left operand f
fbf0: 6f 75 6e 64 20 3c 62 72 3e 77 69 74 68 69 6e 20  ound <br>within 
fc00: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 0a 3c 74  right operand.<t
fc10: 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e  h>Result of <br>
fc20: 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 68 3e  IN operator.<th>
fc30: 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 4e 4f  Result of <br>NO
fc40: 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74  T IN operator.<t
fc50: 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
fc60: 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
fc70: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
fc80: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
fc90: 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
fca0: 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
fcb0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61  lign="center">fa
fcc0: 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  lse.<td align="c
fcd0: 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e  enter">true.<tr>
fce0: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
fcf0: 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74  er">does not mat
fd00: 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ter.<td align="c
fd10: 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
fd20: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73  ign="center">yes
fd30: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
fd40: 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
fd50: 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a  ="center">false.
fd60: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
fd70: 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64  r">true.<tr>.<td
fd80: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
fd90: 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
fda0: 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d  nter">does not m
fdb0: 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d  atter.<td align=
fdc0: 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
fdd0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79  align="center">y
fde0: 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  es.<td align="ce
fdf0: 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 64 20 61  nter">true.<td a
fe00: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61  lign="center">fa
fe10: 6c 73 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  lse.<tr>.<td ali
fe20: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
fe30: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
fe40: 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d  ">yes.<td align=
fe50: 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
fe60: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
fe70: 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
fe80: 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c  ter">NULL.<td al
fe90: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c  ign="center">NUL
fea0: 4c 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  L.<tr>.<td align
feb0: 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74  ="center">yes.<t
fec0: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
fed0: 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72  >does not matter
fee0: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
fef0: 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
ff00: 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e  ="center">does n
ff10: 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c  ot matter.<td al
ff20: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c  ign="center">NUL
ff30: 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  L.<td align="cen
ff40: 74 65 72 22 3e 4e 55 4c 4c 0a 3c 2f 74 61 62 6c  ter">NULL.</tabl
ff50: 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  e>.</center>)^..
ff60: 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 53 51  <p>^Note that SQ
ff70: 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65 20  Lite allows the 
ff80: 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69  parenthesized li
ff90: 73 74 20 6f 66 20 73 63 61 6c 61 72 20 76 61 6c  st of scalar val
ffa0: 75 65 73 20 6f 6e 0a 74 68 65 20 72 69 67 68 74  ues on.the right
ffb0: 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61 6e  -hand side of an
ffc0: 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70   IN or NOT IN op
ffd0: 65 72 61 74 6f 72 20 74 6f 20 62 65 20 61 6e 20  erator to be an 
ffe0: 65 6d 70 74 79 20 6c 69 73 74 20 62 75 74 0a 6d  empty list but.m
fff0: 6f 73 74 20 6f 74 68 65 72 20 53 51 4c 20 64 61  ost other SQL da
10000 74 61 62 61 73 65 20 64 61 74 61 62 61 73 65 20  tabase database 
10010 65 6e 67 69 6e 65 73 20 61 6e 64 20 74 68 65 20  engines and the 
10020 53 51 4c 39 32 20 73 74 61 6e 64 61 72 64 20 72  SQL92 standard r
10030 65 71 75 69 72 65 0a 74 68 65 20 6c 69 73 74 20  equire.the list 
10040 74 6f 20 63 6f 6e 74 61 69 6e 20 61 74 20 6c 65  to contain at le
10050 61 73 74 20 6f 6e 65 20 65 6c 65 6d 65 6e 74 2e  ast one element.
10060 3c 2f 70 3e 0a 0a 0a 3c 68 33 3e 54 61 62 6c 65  </p>...<h3>Table
10070 20 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68   Column Names</h
10080 33 3e 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20  3>.<p>^A column 
10090 6e 61 6d 65 20 63 61 6e 20 62 65 20 61 6e 79 20  name can be any 
100a0 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 64 65 66  of the names def
100b0 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 43 52 45  ined in the [CRE
100c0 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65  ATE TABLE].state
100d0 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74  ment or one of t
100e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65  he following spe
100f0 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
10100 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22  : "<b>ROWID</b>"
10110 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20  ,."<b>OID</b>", 
10120 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f  or "<b>_ROWID_</
10130 62 3e 22 2e 0a 5e 54 68 65 73 65 20 73 70 65 63  b>"..^These spec
10140 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20  ial identifiers 
10150 61 6c 6c 20 64 65 73 63 72 69 62 65 20 74 68 65  all describe the
10160 0a 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20  .unique integer 
10170 6b 65 79 20 28 74 68 65 20 5b 72 6f 77 69 64 5d  key (the [rowid]
10180 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  ) associated wit
10190 68 20 65 76 65 72 79 20 0a 72 6f 77 20 6f 66 20  h every .row of 
101a0 65 76 65 72 79 20 74 61 62 6c 65 2e 0a 5e 54 68  every table..^Th
101b0 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69  e special identi
101c0 66 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65 72  fiers only refer
101d0 20 74 6f 20 74 68 65 20 72 6f 77 20 6b 65 79 20   to the row key 
101e0 69 66 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  if the [CREATE T
101f0 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20  ABLE].statement 
10200 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
10210 61 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 20 77 69  a real column wi
10220 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
10230 2e 0a 5e 54 68 65 20 72 6f 77 69 64 20 63 61 6e  ..^The rowid can
10240 20 62 65 20 75 73 65 64 20 61 6e 79 77 68 65 72   be used anywher
10250 65 20 61 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75  e a regular.colu
10260 6d 6e 20 63 61 6e 20 62 65 20 75 73 65 64 2e 3c  mn can be used.<
10270 2f 70 3e 0a 0a 3c 68 33 3e 53 75 62 71 75 65 72  /p>..<h3>Subquer
10280 69 65 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 5b 53 45  ies</h3>.<p>^[SE
10290 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73  LECT] statements
102a0 20 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 65   can appear in e
102b0 78 70 72 65 73 73 69 6f 6e 73 20 61 73 20 65 69  xpressions as ei
102c0 74 68 65 72 20 74 68 65 0a 72 69 67 68 74 2d 68  ther the.right-h
102d0 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66 20 74  and operand of t
102e0 68 65 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20  he IN or NOT IN 
102f0 6f 70 65 72 61 74 6f 72 73 2c 20 61 73 20 61 20  operators, as a 
10300 73 63 61 6c 61 72 20 71 75 61 6e 74 69 74 79 2c  scalar quantity,
10310 20 6f 72 0a 61 73 20 74 68 65 20 6f 70 65 72 61   or.as the opera
10320 6e 64 20 6f 66 20 61 6e 20 45 58 49 53 54 53 20  nd of an EXISTS 
10330 6f 70 65 72 61 74 6f 72 2e 0a 5e 41 73 20 61 20  operator..^As a 
10340 73 63 61 6c 61 72 20 71 75 61 6e 74 69 74 79 20  scalar quantity 
10350 6f 72 20 74 68 65 20 6f 70 65 72 61 6e 64 20 6f  or the operand o
10360 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49  f an IN or NOT I
10370 4e 20 6f 70 65 72 61 74 6f 72 2c 0a 74 68 65 20  N operator,.the 
10380 53 45 4c 45 43 54 20 6d 61 79 20 68 61 76 65 20  SELECT may have 
10390 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 63 6f  only a single co
103a0 6c 75 6d 6e 20 69 6e 20 69 74 73 0a 72 65 73 75  lumn in its.resu
103b0 6c 74 2e 20 20 5e 43 6f 6d 70 6f 75 6e 64 20 53  lt.  ^Compound S
103c0 45 4c 45 43 54 73 20 28 63 6f 6e 6e 65 63 74 65  ELECTs (connecte
103d0 64 20 77 69 74 68 20 6b 65 79 77 6f 72 64 73 20  d with keywords 
103e0 6c 69 6b 65 20 55 4e 49 4f 4e 20 6f 72 0a 45 58  like UNION or.EX
103f0 43 45 50 54 29 20 61 72 65 20 61 6c 6c 6f 77 65  CEPT) are allowe
10400 64 20 69 6e 20 61 6e 79 20 73 75 62 71 75 65 72  d in any subquer
10410 79 2e 0a 5e 57 69 74 68 20 74 68 65 20 45 58 49  y..^With the EXI
10420 53 54 53 20 6f 70 65 72 61 74 6f 72 2c 20 74 68  STS operator, th
10430 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
10440 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 74   result set of t
10450 68 65 20 5b 53 45 4c 45 43 54 5d 20 61 72 65 0a  he [SELECT] are.
10460 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20  ignored and the 
10470 65 78 70 72 65 73 73 69 6f 6e 20 72 65 74 75 72  expression retur
10480 6e 73 20 54 52 55 45 20 69 66 20 6f 6e 65 20 6f  ns TRUE if one o
10490 72 20 6d 6f 72 65 20 72 6f 77 73 20 65 78 69 73  r more rows exis
104a0 74 0a 61 6e 64 20 46 41 4c 53 45 20 69 66 20 74  t.and FALSE if t
104b0 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  he result set is
104c0 20 65 6d 70 74 79 2e 0a 5e 49 66 20 6e 6f 20 74   empty..^If no t
104d0 65 72 6d 73 20 69 6e 20 74 68 65 20 5b 53 45 4c  erms in the [SEL
104e0 45 43 54 5d 20 65 78 70 72 65 73 73 69 6f 6e 20  ECT] expression 
104f0 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73 20  refer to values 
10500 69 6e 20 74 68 65 20 63 6f 6e 74 61 69 6e 69 6e  in the containin
10510 67 0a 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68  g.query, then th
10520 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
10530 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 70  evaluated once p
10540 72 69 6f 72 20 74 6f 20 61 6e 79 20 6f 74 68 65  rior to any othe
10550 72 0a 70 72 6f 63 65 73 73 69 6e 67 20 61 6e 64  r.processing and
10560 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 72   the result is r
10570 65 75 73 65 64 20 61 73 20 6e 65 63 65 73 73 61  eused as necessa
10580 72 79 2e 20 20 5e 49 66 20 74 68 65 20 5b 53 45  ry.  ^If the [SE
10590 4c 45 43 54 5d 20 65 78 70 72 65 73 73 69 6f 6e  LECT] expression
105a0 0a 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 76 61  .does contain va
105b0 72 69 61 62 6c 65 73 20 66 72 6f 6d 20 74 68 65  riables from the
105c0 20 6f 75 74 65 72 20 71 75 65 72 79 2c 20 74 68   outer query, th
105d0 65 6e 20 74 68 65 20 5b 53 45 4c 45 43 54 5d 20  en the [SELECT] 
105e0 69 73 20 72 65 65 76 61 6c 75 61 74 65 64 0a 65  is reevaluated.e
105f0 76 65 72 79 20 74 69 6d 65 20 69 74 20 69 73 20  very time it is 
10600 6e 65 65 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  needed.</p>..<p>
10610 5e 57 68 65 6e 20 61 20 53 45 4c 45 43 54 20 61  ^When a SELECT a
10620 70 70 65 61 72 73 20 77 69 74 68 69 6e 20 61 6e  ppears within an
10630 20 65 78 70 72 65 73 73 69 6f 6e 20 62 75 74 20   expression but 
10640 69 73 20 6e 6f 74 20 74 68 65 20 72 69 67 68 74  is not the right
10650 0a 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49  .operand of an I
10660 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72  N or NOT IN oper
10670 61 74 6f 72 2c 20 74 68 65 6e 20 74 68 65 20 66  ator, then the f
10680 69 72 73 74 20 72 6f 77 20 6f 66 20 74 68 65 20  irst row of the 
10690 72 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 53 45  result of the.SE
106a0 4c 45 43 54 20 62 65 63 6f 6d 65 73 20 74 68 65  LECT becomes the
106b0 20 76 61 6c 75 65 20 75 73 65 64 20 69 6e 20 74   value used in t
106c0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  he expression.  
106d0 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 79  ^If the SELECT y
106e0 69 65 6c 64 73 0a 6d 6f 72 65 20 74 68 61 6e 20  ields.more than 
106f0 6f 6e 65 20 72 65 73 75 6c 74 20 72 6f 77 2c 20  one result row, 
10700 61 6c 6c 20 72 6f 77 73 20 61 66 74 65 72 20 74  all rows after t
10710 68 65 20 66 69 72 73 74 20 61 72 65 20 69 67 6e  he first are ign
10720 6f 72 65 64 2e 20 20 5e 49 66 0a 74 68 65 20 53  ored.  ^If.the S
10730 45 4c 45 43 54 20 79 69 65 6c 64 73 20 6e 6f 20  ELECT yields no 
10740 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65 20 76  rows, then the v
10750 61 6c 75 65 20 6f 66 20 74 68 65 20 53 45 4c 45  alue of the SELE
10760 43 54 20 69 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a  CT is NULL.</p>.
10770 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
10780 74 20 63 61 73 74 65 78 70 72 20 7b 43 41 53 54  t castexpr {CAST
10790 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63   expression}</tc
107a0 6c 3e 0a 3c 68 33 3e 43 41 53 54 20 65 78 70 72  l>.<h3>CAST expr
107b0 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  essions</h3>..<p
107c0 3e 41 20 43 41 53 54 20 65 78 70 72 65 73 73 69  >A CAST expressi
107d0 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  on is used to co
107e0 6e 76 65 72 74 20 74 68 65 20 76 61 6c 75 65 20  nvert the value 
107f0 6f 66 20 26 6c 74 3b 65 78 70 72 26 67 74 3b 20  of &lt;expr&gt; 
10800 74 6f 20 0a 61 20 64 69 66 66 65 72 65 6e 74 20  to .a different 
10810 5b 73 74 6f 72 61 67 65 20 63 6c 61 73 73 5d 20  [storage class] 
10820 69 6e 20 61 20 73 69 6d 69 6c 61 72 20 77 61 79  in a similar way
10830 20 74 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69   to the conversi
10840 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 0a 70 6c  on that takes.pl
10850 61 63 65 20 77 68 65 6e 20 61 20 5b 63 6f 6c 75  ace when a [colu
10860 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 69 73 20  mn affinity] is 
10870 61 70 70 6c 69 65 64 20 74 6f 20 61 20 76 61 6c  applied to a val
10880 75 65 2e 20 5e 41 70 70 6c 69 63 61 74 69 6f 6e  ue. ^Application
10890 20 6f 66 20 61 20 43 41 53 54 0a 65 78 70 72 65   of a CAST.expre
108a0 73 73 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65  ssion is differe
108b0 6e 74 20 74 6f 20 61 70 70 6c 69 63 61 74 69 6f  nt to applicatio
108c0 6e 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 61 66  n of a column af
108d0 66 69 6e 69 74 79 2c 20 61 73 0a 77 69 74 68 20  finity, as.with 
108e0 61 20 43 41 53 54 20 65 78 70 72 65 73 73 69 6f  a CAST expressio
108f0 6e 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c  n the storage cl
10900 61 73 73 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  ass conversion i
10910 73 20 66 6f 72 63 65 64 20 65 76 65 6e 20 0a 69  s forced even .i
10920 66 20 69 74 20 69 73 20 6c 6f 73 73 79 20 61 6e  f it is lossy an
10930 64 20 69 72 72 72 65 76 65 72 73 69 62 6c 65 2e  d irrreversible.
10940 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 76 61 6c  ..<p>^If the val
10950 75 65 20 6f 66 20 26 6c 74 3b 65 78 70 72 26 67  ue of &lt;expr&g
10960 74 3b 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e  t; is NULL, then
10970 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
10980 68 65 20 43 41 53 54 0a 65 78 70 72 65 73 73 69  he CAST.expressi
10990 6f 6e 20 69 73 20 61 6c 73 6f 20 4e 55 4c 4c 2e  on is also NULL.
109a0 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65   ^Otherwise, the
109b0 20 73 74 6f 72 61 67 65 20 63 6c 61 73 73 20 6f   storage class o
109c0 66 20 74 68 65 20 72 65 73 75 6c 74 20 76 61 6c  f the result val
109d0 75 65 0a 69 73 20 64 65 74 65 72 6d 69 6e 65 64  ue.is determined
109e0 20 62 79 20 61 70 70 6c 79 69 6e 67 20 74 68 65   by applying the
109f0 20 5b 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65   [rules for dete
10a00 72 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61  rmining column a
10a10 66 66 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65 20  ffinity] to.the 
10a20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74  &lt;type-name&gt
10a30 3b 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  ; specified as p
10a40 61 72 74 20 6f 66 20 74 68 65 20 43 41 53 54 20  art of the CAST 
10a50 65 78 70 72 65 73 73 69 6f 6e 2e 0a 0a 3c 74 61  expression...<ta
10a60 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74  ble border=1>.<t
10a70 72 3e 0a 20 20 3c 74 68 3e 20 41 66 66 69 6e 69  r>.  <th> Affini
10a80 74 79 20 6f 66 20 26 6c 74 3b 74 79 70 65 2d 6e  ty of &lt;type-n
10a90 61 6d 65 26 67 74 3b 0a 20 20 3c 74 68 3e 20 43  ame&gt;.  <th> C
10aa0 6f 6e 76 65 72 73 69 6f 6e 20 50 72 6f 63 65 73  onversion Proces
10ab0 73 69 6e 67 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  sing.<tr>.  <td>
10ac0 20 4e 4f 4e 45 20 0a 20 20 3c 74 64 3e 20 5e 43   NONE .  <td> ^C
10ad0 61 73 74 69 6e 67 20 61 20 76 61 6c 75 65 20 74  asting a value t
10ae0 6f 20 61 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d  o a &lt;type-nam
10af0 65 26 67 74 3b 20 77 69 74 68 20 6e 6f 20 61 66  e&gt; with no af
10b00 66 69 6e 69 74 79 20 63 61 75 73 65 73 20 74 68  finity causes th
10b10 65 20 76 61 6c 75 65 20 74 6f 0a 20 20 62 65 20  e value to.  be 
10b20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
10b30 20 42 4c 4f 42 2e 20 20 5e 43 61 73 74 69 6e 67   BLOB.  ^Casting
10b40 20 74 6f 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69   to a BLOB consi
10b50 73 74 73 20 6f 66 20 66 69 72 73 74 20 63 61 73  sts of first cas
10b60 74 69 6e 67 0a 20 20 74 68 65 20 76 61 6c 75 65  ting.  the value
10b70 20 74 6f 20 54 45 58 54 20 69 6e 20 74 68 65 20   to TEXT in the 
10b80 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 20 74 68  [encoding] of th
10b90 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
10ba0 63 74 69 6f 6e 2c 20 74 68 65 6e 0a 20 20 69 6e  ction, then.  in
10bb0 74 65 72 70 72 65 74 69 6e 67 20 74 68 65 20 72  terpreting the r
10bc0 65 73 75 6c 74 69 6e 67 20 62 79 74 65 20 73 65  esulting byte se
10bd0 71 75 65 6e 63 65 20 61 73 20 61 20 42 4c 4f 42  quence as a BLOB
10be0 20 69 6e 73 74 65 61 64 20 6f 66 20 61 73 20 54   instead of as T
10bf0 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64  EXT...<tr>.  <td
10c00 3e 20 54 45 58 54 0a 20 20 3c 74 64 3e 20 5e 54  > TEXT.  <td> ^T
10c10 6f 20 63 61 73 74 20 61 20 42 4c 4f 42 20 76 61  o cast a BLOB va
10c20 6c 75 65 20 74 6f 20 54 45 58 54 2c 20 74 68 65  lue to TEXT, the
10c30 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74   sequence of byt
10c40 65 73 20 74 68 61 74 20 6d 61 6b 65 20 75 70 20  es that make up 
10c50 74 68 65 0a 20 20 42 4c 4f 42 20 69 73 20 69 6e  the.  BLOB is in
10c60 74 65 72 70 72 65 74 65 64 20 61 73 20 74 65 78  terpreted as tex
10c70 74 20 65 6e 63 6f 64 65 64 20 75 73 69 6e 67 20  t encoded using 
10c80 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  the database enc
10c90 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e 0a 20 20 20  oding..  <p>.   
10ca0 5e 43 61 73 74 69 6e 67 20 61 6e 20 49 4e 54 45  ^Casting an INTE
10cb0 47 45 52 20 6f 72 20 52 45 41 4c 20 76 61 6c 75  GER or REAL valu
10cc0 65 20 69 6e 74 6f 20 54 45 58 54 20 72 65 6e 64  e into TEXT rend
10cd0 65 72 73 20 74 68 65 20 76 61 6c 75 65 20 61 73  ers the value as
10ce0 20 69 66 20 76 69 61 20 0a 20 20 20 20 5b 73 71   if via .    [sq
10cf0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 29  lite3_snprintf()
10d00 5d 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  ] except that th
10d10 65 20 72 65 73 75 6c 74 69 6e 67 20 54 45 58 54  e resulting TEXT
10d20 20 75 73 65 73 20 74 68 65 20 5b 65 6e 63 6f 64   uses the [encod
10d30 69 6e 67 5d 20 6f 66 0a 20 20 20 20 74 68 65 20  ing] of.    the 
10d40 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
10d50 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64  ion...<tr>.  <td
10d60 3e 20 52 45 41 4c 0a 20 20 3c 74 64 3e 20 5e 57  > REAL.  <td> ^W
10d70 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 42 4c  hen casting a BL
10d80 4f 42 20 76 61 6c 75 65 20 74 6f 20 61 20 52 45  OB value to a RE
10d90 41 4c 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73  AL, the value is
10da0 20 66 69 72 73 74 20 63 6f 6e 76 65 72 74 65 64   first converted
10db0 20 74 6f 0a 20 20 20 20 20 20 20 20 54 45 58 54   to.        TEXT
10dc0 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65  ..       <p>^Whe
10dd0 6e 20 63 61 73 74 69 6e 67 20 61 20 54 45 58 54  n casting a TEXT
10de0 20 76 61 6c 75 65 20 74 6f 20 52 45 41 4c 2c 20   value to REAL, 
10df0 74 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73  the longest poss
10e00 69 62 6c 65 20 70 72 65 66 69 78 20 6f 66 0a 20  ible prefix of. 
10e10 20 20 20 20 20 20 20 74 68 65 20 76 61 6c 75 65         the value
10e20 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
10e30 65 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65  erpreted as a re
10e40 61 6c 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74  al number is ext
10e50 72 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20  racted from.    
10e60 20 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c      the TEXT val
10e70 75 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69  ue and the remai
10e80 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41  nder ignored. ^A
10e90 6e 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65  ny leading space
10ea0 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20  s in the.       
10eb0 20 54 45 58 54 20 76 61 6c 75 65 20 61 72 65 20   TEXT value are 
10ec0 69 67 6e 6f 72 65 64 20 77 68 65 6e 20 63 6f 6e  ignored when con
10ed0 76 65 72 67 69 6e 67 20 66 72 6f 6d 20 54 45 58  verging from TEX
10ee0 54 20 74 6f 20 52 45 41 4c 2e 20 5e 28 49 66 20  T to REAL. ^(If 
10ef0 74 68 65 72 65 20 69 73 0a 20 20 20 20 20 20 20  there is.       
10f00 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74 20   no prefix that 
10f10 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
10f20 65 64 20 61 73 20 61 20 72 65 61 6c 20 6e 75 6d  ed as a real num
10f30 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ber, the result 
10f40 6f 66 20 74 68 65 0a 20 20 20 20 20 20 20 20 63  of the.        c
10f50 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 30  onversion is 0.0
10f60 2e 29 5e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  .)^..<tr>.  <td>
10f70 20 49 4e 54 45 47 45 52 0a 20 20 3c 74 64 3e 20   INTEGER.  <td> 
10f80 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20  ^When casting a 
10f90 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 49 4e  BLOB value to IN
10fa0 54 45 47 45 52 2c 20 74 68 65 20 76 61 6c 75 65  TEGER, the value
10fb0 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72   is first conver
10fc0 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54  ted to.        T
10fd0 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e  EXT..       <p>^
10fe0 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54  When casting a T
10ff0 45 58 54 20 76 61 6c 75 65 20 74 6f 20 49 4e 54  EXT value to INT
11000 45 47 45 52 2c 20 74 68 65 20 6c 6f 6e 67 65 73  EGER, the longes
11010 74 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69  t possible prefi
11020 78 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65  x of.        the
11030 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20   value that can 
11040 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
11050 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  s an integer num
11060 62 65 72 20 69 73 20 65 78 74 72 61 63 74 65 64  ber is extracted
11070 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 74 68   from.        th
11080 65 20 54 45 58 54 20 76 61 6c 75 65 20 61 6e 64  e TEXT value and
11090 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 69   the remainder i
110a0 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61  gnored. ^Any lea
110b0 64 69 6e 67 20 73 70 61 63 65 73 20 69 6e 20 74  ding spaces in t
110c0 68 65 0a 20 20 20 20 20 20 20 20 54 45 58 54 20  he.        TEXT 
110d0 76 61 6c 75 65 20 77 68 65 6e 20 63 6f 6e 76 65  value when conve
110e0 72 74 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20  rting from TEXT 
110f0 74 6f 20 49 4e 54 45 47 45 52 20 61 72 65 20 69  to INTEGER are i
11100 67 6e 6f 72 65 64 2e 20 5e 49 66 20 74 68 65 72  gnored. ^If ther
11110 65 0a 20 20 20 20 20 20 20 20 69 73 20 6e 6f 20  e.        is no 
11120 70 72 65 66 69 78 20 74 68 61 74 20 63 61 6e 20  prefix that can 
11130 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
11140 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  s an integer num
11150 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c 74 0a  ber, the result.
11160 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
11170 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 0a  onversion is 0..
11180 0a 20 20 20 20 20 20 3c 70 3e 5e 41 20 63 61 73  .      <p>^A cas
11190 74 20 6f 66 20 61 20 52 45 41 4c 20 76 61 6c 75  t of a REAL valu
111a0 65 20 69 6e 74 6f 20 61 6e 20 49 4e 54 45 47 45  e into an INTEGE
111b0 52 20 77 69 6c 6c 20 74 72 75 6e 63 61 74 65 20  R will truncate 
111c0 74 68 65 20 66 72 61 63 74 69 6f 6e 61 6c 0a 20  the fractional. 
111d0 20 20 20 20 20 70 61 72 74 20 6f 66 20 74 68 65       part of the
111e0 20 52 45 41 4c 2e 20 20 5e 49 66 20 61 6e 20 52   REAL.  ^If an R
111f0 45 41 4c 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  EAL is too large
11200 20 74 6f 20 62 65 20 72 65 70 72 65 73 65 6e 74   to be represent
11210 65 64 20 61 73 20 61 6e 20 0a 20 20 20 20 20 20  ed as an .      
11220 49 4e 54 45 47 45 52 20 74 68 65 6e 20 74 68 65  INTEGER then the
11230 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63   result of the c
11240 61 73 74 20 69 73 20 74 68 65 20 6c 61 72 67 65  ast is the large
11250 73 74 20 6e 65 67 61 74 69 76 65 20 69 6e 74 65  st negative inte
11260 67 65 72 3a 20 0a 20 20 20 20 20 20 2d 39 32 32  ger: .      -922
11270 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
11280 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 4e  ...<tr>.  <td> N
11290 55 4d 45 52 49 43 0a 20 20 3c 74 64 3e 20 5e 43  UMERIC.  <td> ^C
112a0 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 6f 72  asting a TEXT or
112b0 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f   BLOB value into
112c0 20 4e 55 4d 45 52 49 43 20 66 69 72 73 74 20 64   NUMERIC first d
112d0 6f 65 73 20 61 20 66 6f 72 63 65 64 0a 20 20 20  oes a forced.   
112e0 63 6f 6e 76 65 72 73 69 6f 6e 20 69 6e 74 6f 20  conversion into 
112f0 52 45 41 4c 20 62 75 74 20 74 68 65 6e 20 66 75  REAL but then fu
11300 72 74 68 65 72 20 63 6f 6e 76 65 72 74 73 20 74  rther converts t
11310 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 49  he result into I
11320 4e 54 45 47 45 52 20 69 66 0a 20 20 20 61 6e 64  NTEGER if.   and
11330 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 63 6f 6e   only if the con
11340 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 52 45 41  version from REA
11350 4c 20 74 6f 20 49 4e 54 45 47 45 52 20 69 73 20  L to INTEGER is 
11360 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20 72 65 76  lossless and rev
11370 65 72 73 69 62 6c 65 2e 0a 20 20 20 54 68 69 73  ersible..   This
11380 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 6f 6e   is the only con
11390 74 65 78 74 20 69 6e 20 53 51 4c 69 74 65 20 77  text in SQLite w
113a0 68 65 72 65 20 74 68 65 20 4e 55 4d 45 52 49 43  here the NUMERIC
113b0 20 61 6e 64 20 49 4e 54 45 47 45 52 20 5b 61 66   and INTEGER [af
113c0 66 69 6e 69 74 69 65 73 5d 0a 20 20 20 62 65 68  finities].   beh
113d0 61 76 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e  ave differently.
113e0 0a 20 20 20 3c 70 3e 20 5e 43 61 73 74 69 6e 67  .   <p> ^Casting
113f0 20 61 20 52 45 41 4c 20 6f 72 20 49 4e 54 45 47   a REAL or INTEG
11400 45 52 20 76 61 6c 75 65 20 74 6f 20 4e 55 4d 45  ER value to NUME
11410 52 49 43 20 69 73 20 61 20 6e 6f 2d 6f 70 2c 20  RIC is a no-op, 
11420 65 76 65 6e 20 69 66 20 61 20 72 65 61 6c 0a 20  even if a real. 
11430 20 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 62 65    value could be
11440 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76   losslessly conv
11450 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
11460 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a 0a 3c 2f 74  ger...</tr>..</t
11470 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  able>..<p>^Note 
11480 74 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 20  that the result 
11490 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79  from casting any
114a0 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65 20   non-BLOB value 
114b0 69 6e 74 6f 20 61 20 0a 42 4c 4f 42 20 61 6e 64  into a .BLOB and
114c0 20 74 68 65 20 72 65 73 75 6c 74 20 66 72 6f 6d   the result from
114d0 20 63 61 73 74 69 6e 67 20 61 6e 79 20 42 4c 4f   casting any BLO
114e0 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e  B value into a n
114f0 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65 0a 6d 61  on-BLOB value.ma
11500 79 20 62 65 20 64 69 66 66 65 72 65 6e 74 20 64  y be different d
11510 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
11520 68 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  her the database
11530 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 69 73 20 55   [encoding] is U
11540 54 46 2d 38 2c 0a 55 54 46 2d 31 36 62 65 2c 20  TF-8,.UTF-16be, 
11550 6f 72 20 55 54 46 2d 31 36 6c 65 2e 0a 0a 3c 68  or UTF-16le...<h
11560 33 3e 46 75 6e 63 74 69 6f 6e 73 3c 2f 68 33 3e  3>Functions</h3>
11570 0a 3c 70 3e 5e 42 6f 74 68 20 5b 63 6f 72 65 66  .<p>^Both [coref
11580 75 6e 63 7c 73 69 6d 70 6c 65 5d 20 61 6e 64 20  unc|simple] and 
11590 5b 61 67 67 66 75 6e 63 7c 61 67 67 72 65 67 61  [aggfunc|aggrega
115a0 74 65 5d 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  te] functions ar
115b0 65 20 73 75 70 70 6f 72 74 65 64 2e 0a 28 46 6f  e supported..(Fo
115c0 72 20 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 70  r presentation p
115d0 75 72 70 6f 73 65 73 2c 20 73 69 6d 70 6c 65 20  urposes, simple 
115e0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 66 75  functions are fu
115f0 72 74 68 65 72 20 73 75 62 64 69 76 69 64 65 64  rther subdivided
11600 20 69 6e 74 6f 0a 5b 63 6f 72 65 66 75 6e 63 20   into.[corefunc 
11610 7c 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73  | core functions
11620 5d 20 61 6e 64 20 5b 64 61 74 65 66 75 6e 63 20  ] and [datefunc 
11630 7c 20 64 61 74 65 2d 74 69 6d 65 20 66 75 6e 63  | date-time func
11640 74 69 6f 6e 73 5d 2e 29 0a 5e 41 20 73 69 6d 70  tions].).^A simp
11650 6c 65 20 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20  le function can 
11660 62 65 20 75 73 65 64 20 69 6e 20 61 6e 79 20 65  be used in any e
11670 78 70 72 65 73 73 69 6f 6e 2e 20 20 5e 53 69 6d  xpression.  ^Sim
11680 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 72 65  ple functions re
11690 74 75 72 6e 0a 61 20 72 65 73 75 6c 74 20 69 6d  turn.a result im
116a0 6d 65 64 69 61 74 65 6c 79 20 62 61 73 65 64 20  mediately based 
116b0 6f 6e 20 74 68 65 69 72 20 69 6e 70 75 74 73 2e  on their inputs.
116c0 20 20 5e 41 67 67 72 65 67 61 74 65 20 66 75 6e    ^Aggregate fun
116d0 63 74 69 6f 6e 73 0a 6d 61 79 20 6f 6e 6c 79 20  ctions.may only 
116e0 62 65 20 75 73 65 64 20 69 6e 20 61 20 53 45 4c  be used in a SEL
116f0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
11700 5e 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74  ^Aggregate funct
11710 69 6f 6e 73 20 63 6f 6d 70 75 74 65 0a 74 68 65  ions compute.the
11720 69 72 20 72 65 73 75 6c 74 20 61 63 72 6f 73 73  ir result across
11730 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68 65   all rows of the
11740 20 72 65 73 75 6c 74 20 73 65 74 2e 3c 2f 70 3e   result set.</p>
11750 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
11760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117a0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
117b0 43 6f 72 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20  Core Functions} 
117c0 63 6f 72 65 66 75 6e 63 20 7b 2a 63 6f 72 65 66  corefunc {*coref
117d0 75 6e 63 7d 0a 70 72 6f 63 20 66 75 6e 63 64 65  unc}.proc funcde
117e0 66 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72  f {syntax keywor
117f0 64 73 20 64 65 73 63 7d 20 7b 0a 20 20 68 64 5f  ds desc} {.  hd_
11800 70 75 74 73 20 7b 3c 74 72 3e 7d 0a 20 20 72 65  puts {<tr>}.  re
11810 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 73 2b 7d 20  gsub -all {\s+} 
11820 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 73 79  [string trim $sy
11830 6e 74 61 78 5d 20 7b 3c 62 72 3e 3c 2f 62 72 3e  ntax] {<br></br>
11840 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75  } syntax.  regsu
11850 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29 5d  b -all {\(([^*)]
11860 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b 28  +)\)} $syntax {(
11870 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e 74  <i>\1</i>)} synt
11880 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
11890 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c 2f   {,} $syntax {</
118a0 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a 20  i>,<i>} syntax. 
118b0 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 69   regsub -all {<i
118c0 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73 79  >\.\.\.</i>} $sy
118d0 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74 61  ntax {...} synta
118e0 78 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 74 64  x.  hd_puts "<td
118f0 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20   valign=\"top\" 
11900 61 6c 69 67 6e 3d 5c 22 72 69 67 68 74 5c 22 20  align=\"right\" 
11910 77 69 64 74 68 3d 5c 22 31 32 30 5c 22 3e 22 0a  width=\"120\">".
11920 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $
11930 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a  keywords]==0} {.
11940 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a      regexp {[a-z
11950 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d  _]+} $syntax nam
11960 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e  e.    hd_fragmen
11970 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22  t $name *$name "
11980 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66 75  ${name}() SQL fu
11990 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65  nction".  } else
119a0 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61 67 6e   {.    set fragn
119b0 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79  ame [lindex $key
119c0 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72 65 67  words 0].    reg
119d0 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d  sub -all {[^a-z]
119e0 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66  } $fragname {} f
119f0 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66  ragname.    hd_f
11a00 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d  ragment $fragnam
11a10 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65  e.    eval hd_ke
11a20 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67 20 6d  ywords [string m
11a30 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79  ap {\n { }} $key
11a40 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f  words].  }.  hd_
11a50 70 75 74 73 20 22 24 73 79 6e 74 61 78 3c 2f 74  puts "$syntax</t
11a60 64 3e 22 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c  d>".  hd_puts {<
11a70 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
11a80 7d 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 24  }.  hd_resolve $
11a90 64 65 73 63 0a 20 20 68 64 5f 70 75 74 73 20 7b  desc.  hd_puts {
11aa0 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a 7d 0a 3c 2f  </td></tr>}.}.</
11ab0 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72  tcl>..<p>The cor
11ac0 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77  e functions show
11ad0 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69  n below are avai
11ae0 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74  lable by default
11af0 2e 20 0a 5b 64 61 74 65 66 75 6e 63 20 7c 20 44  . .[datefunc | D
11b00 61 74 65 20 26 61 6d 70 3b 20 54 69 6d 65 20 66  ate &amp; Time f
11b10 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 0a 5b 61  unctions] and.[a
11b20 67 67 66 75 6e 63 20 7c 20 61 67 67 72 65 67 61  ggfunc | aggrega
11b30 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72  te functions] ar
11b40 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70  e documented sep
11b50 61 72 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70  arately.  An.app
11b60 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20 64 65 66  lication may def
11b70 69 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66  ine additional.f
11b80 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e  unctions written
11b90 20 69 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20   in C and added 
11ba0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
11bb0 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65  engine using.the
11bc0 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   [sqlite3_create
11bd0 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49  _function()] API
11be0 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f  .</p>..<table bo
11bf0 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69  rder=0 cellpaddi
11c00 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e  ng=10>.<tcl>.fun
11c10 63 64 65 66 20 7b 61 62 73 28 58 29 7d 20 7b 7d  cdef {abs(X)} {}
11c20 20 7b 0a 20 20 5e 54 68 65 20 61 62 73 28 58 29   {.  ^The abs(X)
11c30 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
11c40 73 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76  s the absolute v
11c50 61 6c 75 65 20 6f 66 20 74 68 65 20 6e 75 6d 65  alue of the nume
11c60 72 69 63 0a 20 20 61 72 67 75 6d 65 6e 74 20 58  ric.  argument X
11c70 2e 20 20 5e 41 62 73 28 58 29 20 72 65 74 75 72  .  ^Abs(X) retur
11c80 6e 73 20 4e 55 4c 4c 20 69 66 20 58 20 69 73 20  ns NULL if X is 
11c90 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41 62 73 28 58  NULL. .  ^(Abs(X
11ca0 29 20 72 65 74 75 72 6e 20 30 2e 30 20 69 66 20  ) return 0.0 if 
11cb0 58 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72  X is a string or
11cc0 20 62 6c 6f 62 0a 20 20 74 68 61 74 20 63 61 6e   blob.  that can
11cd0 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
11ce0 20 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 76 61   to a numeric va
11cf0 6c 75 65 2e 29 5e 20 20 5e 49 66 20 58 20 69 73  lue.)^  ^If X is
11d00 20 74 68 65 20 0a 20 20 69 6e 74 65 67 65 72 20   the .  integer 
11d10 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
11d20 35 38 30 37 20 74 68 65 6e 20 61 62 73 28 58 29  5807 then abs(X)
11d30 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67   throws an integ
11d40 65 72 20 6f 76 65 72 66 6c 6f 77 0a 20 20 65 72  er overflow.  er
11d50 72 6f 72 20 73 69 6e 63 65 20 74 68 65 72 65 20  ror since there 
11d60 69 73 20 6e 6f 20 65 71 75 69 76 61 6c 65 6e 74  is no equivalent
11d70 20 70 6f 73 69 74 69 76 65 20 36 34 2d 62 69 74   positive 64-bit
11d80 20 74 77 6f 20 63 6f 6d 70 6c 65 6d 65 6e 74 20   two complement 
11d90 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65  value..}..funcde
11da0 66 20 7b 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d  f {changes()} {}
11db0 20 7b 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65   {.  ^The change
11dc0 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  s() function ret
11dd0 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
11de0 6f 66 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  of database rows
11df0 20 74 68 61 74 20 77 65 72 65 20 63 68 61 6e 67   that were chang
11e00 65 64 0a 20 20 6f 72 20 69 6e 73 65 72 74 65 64  ed.  or inserted
11e10 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74   or deleted by t
11e20 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79  he most recently
11e30 20 63 6f 6d 70 6c 65 74 65 64 20 49 4e 53 45 52   completed INSER
11e40 54 2c 20 44 45 4c 45 54 45 2c 0a 20 20 6f 72 20  T, DELETE,.  or 
11e50 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
11e60 2c 20 65 78 63 6c 75 73 69 76 65 20 6f 66 20 73  , exclusive of s
11e70 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 6c 6f 77  tatements in low
11e80 65 72 2d 6c 65 76 65 6c 20 74 72 69 67 67 65 72  er-level trigger
11e90 73 2e 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65  s..  ^The change
11ea0 73 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  s() SQL function
11eb0 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
11ec0 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65  ound the [sqlite
11ed0 33 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43  3_changes()].  C
11ee0 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 20 61 6e  /C++ function an
11ef0 64 20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77 73 20  d hence follows 
11f00 74 68 65 20 73 61 6d 65 20 72 75 6c 65 73 20 66  the same rules f
11f10 6f 72 20 63 6f 75 6e 74 69 6e 67 20 63 68 61 6e  or counting chan
11f20 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ges..}..funcdef 
11f30 7b 63 6f 61 6c 65 73 63 65 28 58 2c 59 2c 2e 2e  {coalesce(X,Y,..
11f40 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  .)} {} {.  ^The 
11f50 63 6f 61 6c 65 73 63 65 28 29 20 66 75 6e 63 74  coalesce() funct
11f60 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f  ion returns a co
11f70 70 79 20 6f 66 20 69 74 73 20 66 69 72 73 74 20  py of its first 
11f80 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e  non-NULL argumen
11f90 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20  t, or.  NULL if 
11fa0 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 61 72  all arguments ar
11fb0 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f 61 6c 65 73  e NULL.  ^Coales
11fc0 63 65 28 29 20 6d 75 73 74 20 62 65 20 61 74 20  ce() must be at 
11fd0 6c 65 61 73 74 20 0a 20 20 32 20 61 72 67 75 6d  least .  2 argum
11fe0 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ents..}..funcdef
11ff0 20 7b 67 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d 20   {glob(X,Y)} {} 
12000 7b 0a 20 20 5e 54 68 65 20 67 6c 6f 62 28 58 2c  {.  ^The glob(X,
12010 59 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65  Y) function is e
12020 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 74 68 65  quivalent to the
12030 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20 22 3c  .  expression "<
12040 62 3e 59 20 47 4c 4f 42 20 58 3c 2f 62 3e 22 2e  b>Y GLOB X</b>".
12050 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
12060 20 58 20 61 6e 64 20 59 20 61 72 67 75 6d 65 6e   X and Y argumen
12070 74 73 20 61 72 65 20 72 65 76 65 72 73 65 64 20  ts are reversed 
12080 69 6e 20 74 68 65 20 67 6c 6f 62 28 29 20 66 75  in the glob() fu
12090 6e 63 74 69 6f 6e 0a 20 20 72 65 6c 61 74 69 76  nction.  relativ
120a0 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b  e to the infix [
120b0 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 2e 0a  GLOB] operator..
120c0 20 20 5e 49 66 20 74 68 65 20 5b 73 71 6c 69 74    ^If the [sqlit
120d0 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
120e0 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20  on()] interface 
120f0 69 73 20 75 73 65 64 20 74 6f 0a 20 20 6f 76 65  is used to.  ove
12100 72 72 69 64 65 20 74 68 65 20 67 6c 6f 62 28 58  rride the glob(X
12110 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ,Y) function wit
12120 68 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  h an alternative
12130 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
12140 74 68 65 6e 0a 20 20 74 68 65 20 5b 47 4c 4f 42  then.  the [GLOB
12150 5d 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20  ] operator will 
12160 69 6e 76 6f 6b 65 20 74 68 65 20 61 6c 74 65 72  invoke the alter
12170 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74  native implement
12180 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ation..}..funcde
12190 66 20 7b 69 66 6e 75 6c 6c 28 58 2c 59 29 7d 20  f {ifnull(X,Y)} 
121a0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 66 6e 75  {} {.  ^The ifnu
121b0 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ll() function re
121c0 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
121d0 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55  its first non-NU
121e0 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a  LL argument, or.
121f0 20 20 4e 55 4c 4c 20 69 66 20 62 6f 74 68 20 61    NULL if both a
12200 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c  rguments are NUL
12210 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28 29 20 6d 75  L.  ^Ifnull() mu
12220 73 74 20 68 61 76 65 20 65 78 61 63 74 6c 79 20  st have exactly 
12230 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20 20 5e  2 arguments..  ^
12240 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e  The ifnull() fun
12250 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c  ction is equival
12260 65 6e 74 20 74 6f 20 5b 63 6f 61 6c 65 73 63 65  ent to [coalesce
12270 28 29 5d 20 77 69 74 68 20 74 77 6f 20 61 72 67  ()] with two arg
12280 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64  uments..}..funcd
12290 65 66 20 7b 68 65 78 28 58 29 7d 20 7b 7d 20 7b  ef {hex(X)} {} {
122a0 0a 20 20 5e 54 68 65 20 68 65 78 28 29 20 66 75  .  ^The hex() fu
122b0 6e 63 74 69 6f 6e 20 69 6e 74 65 72 70 72 65 74  nction interpret
122c0 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20 61  s its argument a
122d0 73 20 61 20 42 4c 4f 42 20 61 6e 64 20 72 65 74  s a BLOB and ret
122e0 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20  urns.  a string 
122f0 77 68 69 63 68 20 69 73 20 74 68 65 20 75 70 70  which is the upp
12300 65 72 2d 63 61 73 65 20 68 65 78 61 64 65 63 69  er-case hexadeci
12310 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67 20 6f 66  mal rendering of
12320 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
12330 20 20 74 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a 0a    that blob..}..
12340 66 75 6e 63 64 65 66 20 7b 6c 61 73 74 5f 69 6e  funcdef {last_in
12350 73 65 72 74 5f 72 6f 77 69 64 28 29 7d 20 7b 7d  sert_rowid()} {}
12360 20 7b 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69   {.  ^The last_i
12370 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75  nsert_rowid() fu
12380 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
12390 68 65 20 5b 52 4f 57 49 44 5d 0a 20 20 6f 66 20  he [ROWID].  of 
123a0 74 68 65 20 6c 61 73 74 20 72 6f 77 20 69 6e 73  the last row ins
123b0 65 72 74 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ert from the dat
123c0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
123d0 20 77 68 69 63 68 20 69 6e 76 6f 6b 65 64 20 74   which invoked t
123e0 68 65 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  he.  function.. 
123f0 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72   ^The last_inser
12400 74 5f 72 6f 77 69 64 28 29 20 53 51 4c 20 66 75  t_rowid() SQL fu
12410 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70  nction is a wrap
12420 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20  per around the. 
12430 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69   [sqlite3_last_i
12440 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 5d 20 43  nsert_rowid()] C
12450 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 66  /C++ interface f
12460 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63  unction..}..func
12470 64 65 66 20 7b 6c 65 6e 67 74 68 28 58 29 7d 20  def {length(X)} 
12480 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 65 6e 67  {} {.  ^The leng
12490 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  th(X) function r
124a0 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67 74  eturns the lengt
124b0 68 20 6f 66 20 58 20 69 6e 20 0a 20 20 63 68 61  h of X in .  cha
124c0 72 61 63 74 65 72 73 20 69 66 20 58 20 69 73 20  racters if X is 
124d0 61 20 73 74 72 69 6e 67 2c 20 6f 72 20 69 6e 20  a string, or in 
124e0 62 79 74 65 73 20 69 66 20 58 20 69 73 20 61 20  bytes if X is a 
124f0 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69 73  blob..  ^If X is
12500 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74   NULL then lengt
12510 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20  h(X) is NULL..  
12520 5e 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69 63  ^If X is numeric
12530 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20   then length(X) 
12540 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67  returns the leng
12550 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a 20  th of a string. 
12560 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
12570 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
12580 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65   {like(X,Y) like
12590 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20  (X,Y,Z)} {} {.  
125a0 5e 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63  ^The like() func
125b0 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
125c0 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20  implement the.  
125d0 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23 39  "<b>Y LIKE X &#9
125e0 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b 3c  1;ESCAPE Z&#93;<
125f0 2f 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e 2e  /b>" expression.
12600 20 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74 69   .  ^If the opti
12610 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75  onal ESCAPE clau
12620 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74  se is present, t
12630 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28 29  hen the.  like()
12640 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76   function is inv
12650 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65 65 20  oked with three 
12660 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68  arguments.  ^Oth
12670 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20 20  erwise, it is.  
12680 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77 6f  invoked with two
12690 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e   arguments only.
126a0 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58   Note that the X
126b0 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65 72   and Y parameter
126c0 73 20 61 72 65 0a 20 20 72 65 76 65 72 73 65 64  s are.  reversed
126d0 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20 66   in the like() f
126e0 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76 65  unction relative
126f0 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 4c   to the infix [L
12700 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20  IKE] operator.. 
12710 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 63   ^The [sqlite3_c
12720 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29  reate_function()
12730 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20  ] interface can 
12740 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72  be used to overr
12750 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28 29  ide the.  like()
12760 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68   function and th
12770 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68 65  ereby change the
12780 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68   operation of th
12790 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61  e.  [LIKE] opera
127a0 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72 72  tor.  When overr
127b0 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28 29  iding the like()
127c0 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d 61   function, it ma
127d0 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a 20  y be important. 
127e0 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f 74   to override bot
127f0 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74 68  h the two and th
12800 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65 72  ree argument ver
12810 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b  sions of the lik
12820 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e 2e  e() .  function.
12830 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66 66   Otherwise, diff
12840 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20 62  erent code may b
12850 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c  e called to impl
12860 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49 4b  ement the.  [LIK
12870 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70 65  E] operator depe
12880 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
12890 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41 50   or not an ESCAP
128a0 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20 20  E clause was .  
128b0 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 66 75  specified..}..fu
128c0 6e 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65  ncdef {load_exte
128d0 6e 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78  nsion(X) load_ex
128e0 74 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d  tension(X,Y)} {}
128f0 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65   {.  ^The load_e
12900 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66 75  xtension(X,Y) fu
12910 6e 63 74 69 6f 6e 20 6c 6f 61 64 73 20 53 51 4c  nction loads SQL
12920 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 20 6f  ite extensions o
12930 75 74 20 6f 66 20 74 68 65 20 73 68 61 72 65 64  ut of the shared
12940 0a 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20  .  library file 
12950 6e 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74 68  named X using th
12960 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e  e entry point Y.
12970 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
12980 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
12990 29 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61 20  ).  is always a 
129a0 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73 20  NULL.  ^If Y is 
129b0 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68 65  omitted then the
129c0 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20 70   default entry p
129d0 6f 69 6e 74 0a 20 20 6f 66 20 3c 62 3e 73 71 6c  oint.  of <b>sql
129e0 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69  ite3_extension_i
129f0 6e 69 74 3c 2f 62 3e 20 69 73 20 75 73 65 64 2e  nit</b> is used.
12a00 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65    ^The load_exte
12a10 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e  nsion() function
12a20 0a 20 20 72 61 69 73 65 73 20 61 6e 20 65 78 63  .  raises an exc
12a30 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65 78  eption if the ex
12a40 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f  tension fails to
12a50 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61 6c   load or initial
12a60 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a  ize correctly...
12a70 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65    <p>^The load_e
12a80 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74  xtension() funct
12a90 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ion will fail if
12aa0 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 61   the extension a
12ab0 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f  ttempts to .  mo
12ac0 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 61  dify or delete a
12ad0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 72   SQL function or
12ae0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
12af0 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20 65 78 74  nce.  ^The.  ext
12b00 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64 20 6e  ension can add n
12b10 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  ew functions or 
12b20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
12b30 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74 0a  ces, but cannot.
12b40 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65    modify or dele
12b50 74 65 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63  te existing func
12b60 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69  tions or collati
12b70 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62 65 63  ng sequences bec
12b80 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66 75 6e  ause.  those fun
12b90 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f  ctions and/or co
12ba0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
12bb0 73 20 6d 69 67 68 74 20 62 65 20 75 73 65 64 20  s might be used 
12bc0 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e 20 74  elsewhere.  in t
12bd0 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e  he currently run
12be0 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d 65  ning SQL stateme
12bf0 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e 20  nt.  To load an 
12c00 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a 20  extension that. 
12c10 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65 6c 65   changes or dele
12c20 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  tes functions or
12c30 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
12c40 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a 20 20  nces, use the.  
12c50 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78  [sqlite3_load_ex
12c60 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e  tension()] C-lan
12c70 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a 7d  guage API.</p>.}
12c80 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77 65 72  ..funcdef {lower
12c90 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
12ca0 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63 74 69   lower(X) functi
12cb0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70  on returns a cop
12cc0 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20 77 69  y of string X wi
12cd0 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63 68 61  th all ASCII cha
12ce0 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76 65 72  racters.  conver
12cf0 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63 61 73  ted to lower cas
12d00 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c 74  e.  ^The default
12d10 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65 72 28   built-in lower(
12d20 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73  ) function works
12d30 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  .  for ASCII cha
12d40 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20 20 54  racters only.  T
12d50 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76 65 72  o do case conver
12d60 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41 53 43  sions on non-ASC
12d70 49 49 0a 20 20 63 68 61 72 61 63 74 65 72 73 2c  II.  characters,
12d80 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20 65 78   load the ICU ex
12d90 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63  tension..}..func
12da0 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c 74  def {ltrim(X) lt
12db0 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  rim(X,Y)} {} {. 
12dc0 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c 59 29   ^The ltrim(X,Y)
12dd0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
12de0 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  s a string forme
12df0 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e  d by removing an
12e00 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72  y and all.  char
12e10 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65  acters that appe
12e20 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65  ar in Y from the
12e30 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20 58 2e   left side of X.
12e40 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
12e50 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
12e60 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d 6f 76  , ltrim(X) remov
12e70 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 74  es spaces from t
12e80 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20 20 6f  he left side.  o
12e90 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
12ea0 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  {max(X,Y,...)} {
12eb0 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a 6d 61  *maxCoreFunc *ma
12ec0 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66 75 6e  x {max() SQL fun
12ed0 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
12ee0 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
12ef0 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  max() function r
12f00 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d  eturns the argum
12f10 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a 20 20  ent with the .  
12f20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c 20 6f  maximum value, o
12f30 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66  r return NULL if
12f40 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 69 73   any argument is
12f50 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65 20 6d   NULL. .  ^The m
12f60 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61  ulti-argument ma
12f70 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65 61  x() function sea
12f80 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d 65  rches its argume
12f90 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  nts from left to
12fa0 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e 20   right.  for an 
12fb0 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65  argument that de
12fc0 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e  fines a collatin
12fd0 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75  g function and u
12fe0 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69  ses that collati
12ff0 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f  ng.  function fo
13000 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d  r all string com
13010 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e  parisons.  ^If n
13020 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d  one of the argum
13030 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a 20 20  ents to max().  
13040 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69  define a collati
13050 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65  ng function, the
13060 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f 6c  n the BINARY col
13070 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
13080 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f 74 65 20  is used..  Note 
13090 74 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62  that <b>max()</b
130a0 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75  > is a simple fu
130b0 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74  nction when.  it
130c0 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61   has 2 or more a
130d0 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f 70 65  rguments but ope
130e0 72 61 74 65 73 20 61 73 20 61 6e 0a 20 20 5b 6d  rates as an.  [m
130f0 69 6e 41 67 67 46 75 6e 63 20 7c 20 61 67 67 72  inAggFunc | aggr
13100 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20  egate function] 
13110 69 66 20 67 69 76 65 6e 20 6f 6e 6c 79 20 61 20  if given only a 
13120 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e  single argument.
13130 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e  .}..funcdef {min
13140 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e  (X,Y,...)} {*min
13150 43 6f 72 65 46 75 6e 63 20 2a 6d 69 6e 20 7b 6d  CoreFunc *min {m
13160 69 6e 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  in() SQL functio
13170 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c  n}} {.  ^The mul
13180 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28  ti-argument min(
13190 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
131a0 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  ns the argument 
131b0 77 69 74 68 20 74 68 65 0a 20 20 6d 69 6e 69 6d  with the.  minim
131c0 75 6d 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65  um value..  ^The
131d0 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
131e0 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 73  min() function s
131f0 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75  earches its argu
13200 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20  ments from left 
13210 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61  to right.  for a
13220 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  n argument that 
13230 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
13240 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  ing function and
13250 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61   uses that colla
13260 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20  ting.  function 
13270 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63  for all string c
13280 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66  omparisons.  ^If
13290 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67   none of the arg
132a0 75 6d 65 6e 74 73 20 74 6f 20 6d 69 6e 28 29 0a  uments to min().
132b0 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61    define a colla
132c0 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74  ting function, t
132d0 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63  hen the BINARY c
132e0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
132f0 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f 74  n is used..  Not
13300 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28 29 3c  e that <b>min()<
13310 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20  /b> is a simple 
13320 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20  function when.  
13330 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65  it has 2 or more
13340 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f   arguments but o
13350 70 65 72 61 74 65 73 20 61 73 20 61 6e 20 0a 20  perates as an . 
13360 20 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c 20 61   [maxAggFunc | a
13370 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
13380 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20 20 6f 6e  n] if given.  on
13390 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  ly a single argu
133a0 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ment..}..funcdef
133b0 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d 20 7b   {nullif(X,Y)} {
133c0 7d 20 7b 0a 20 20 5e 54 68 65 20 6e 75 6c 6c 69  } {.  ^The nulli
133d0 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  f(X,Y) function 
133e0 72 65 74 75 72 6e 73 20 69 74 73 20 66 69 72 73  returns its firs
133f0 74 20 61 72 67 75 6d 65 6e 74 20 69 66 20 74 68  t argument if th
13400 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 0a  e arguments are.
13410 20 20 64 69 66 66 65 72 65 6e 74 20 61 6e 64 20    different and 
13420 4e 55 4c 4c 20 69 66 20 74 68 65 20 61 72 67 75  NULL if the argu
13430 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20 73 61  ments are the sa
13440 6d 65 2e 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66  me.  ^The nullif
13450 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 0a 20  (X,Y) function. 
13460 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72   searches its ar
13470 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66  guments from lef
13480 74 20 74 6f 20 72 69 67 68 74 20 66 6f 72 20 61  t to right for a
13490 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  n argument that 
134a0 64 65 66 69 6e 65 73 20 61 0a 20 20 63 6f 6c 6c  defines a.  coll
134b0 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61  ating function a
134c0 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c  nd uses that col
134d0 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
134e0 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 0a 20  for all string. 
134f0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e   comparisons.  ^
13500 49 66 20 6e 65 69 74 68 65 72 20 61 72 67 75 6d  If neither argum
13510 65 6e 74 20 74 6f 20 6e 75 6c 6c 69 66 28 29 20  ent to nullif() 
13520 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
13530 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 20 20 74  ing function.  t
13540 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 69  hen the BINARY i
13550 73 20 75 73 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64  s used..}..funcd
13560 65 66 20 7b 71 75 6f 74 65 28 58 29 7d 20 7b 7d  ef {quote(X)} {}
13570 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f 74 65 28   {.  ^The quote(
13580 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
13590 72 6e 73 20 61 20 73 74 72 69 6e 67 20 77 68 69  rns a string whi
135a0 63 68 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ch is the value 
135b0 6f 66 0a 20 20 69 74 73 20 61 72 67 75 6d 65 6e  of.  its argumen
135c0 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 69  t suitable for i
135d0 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e  nclusion into an
135e0 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
135f0 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20  ent..  ^Strings 
13600 61 72 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62  are surrounded b
13610 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20  y single-quotes 
13620 77 69 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20  with escapes on 
13630 69 6e 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a  interior quotes.
13640 20 20 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42    as needed.  ^B
13650 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64  LOBs are encoded
13660 20 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20   as hexadecimal 
13670 6c 69 74 65 72 61 6c 73 2e 0a 7d 0a 0a 66 75 6e  literals..}..fun
13680 63 64 65 66 20 7b 72 61 6e 64 6f 6d 28 29 7d 20  cdef {random()} 
13690 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64  {} {.  ^The rand
136a0 6f 6d 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  om() function re
136b0 74 75 72 6e 73 20 61 20 70 73 65 75 64 6f 2d 72  turns a pseudo-r
136c0 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20  andom integer.  
136d0 62 65 74 77 65 65 6e 20 2d 39 32 32 33 33 37 32  between -9223372
136e0 30 33 36 38 35 34 37 37 35 38 30 38 20 61 6e 64  036854775808 and
136f0 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37   +92233720368547
13700 37 35 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65  75807..}..funcde
13710 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29  f {randomblob(N)
13720 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61  } {} {.  ^The ra
13730 6e 64 6f 6d 62 6c 6f 62 28 4e 29 20 66 75 6e 63  ndomblob(N) func
13740 74 69 6f 6e 20 72 65 74 75 72 6e 20 61 6e 20 4e  tion return an N
13750 2d 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e 74 61  -byte blob conta
13760 69 6e 69 6e 67 20 70 73 65 75 64 6f 2d 72 61 6e  ining pseudo-ran
13770 64 6f 6d 0a 20 20 62 79 74 65 73 2e 20 5e 49 66  dom.  bytes. ^If
13780 20 4e 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20   N is less than 
13790 31 20 74 68 65 6e 20 61 20 31 2d 62 79 74 65 20  1 then a 1-byte 
137a0 72 61 6e 64 6f 6d 20 62 6c 6f 62 20 69 73 20 72  random blob is r
137b0 65 74 75 72 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48  eturned...  <p>H
137c0 69 6e 74 3a 20 20 61 70 70 6c 69 63 61 74 69 6f  int:  applicatio
137d0 6e 73 20 63 61 6e 20 67 65 6e 65 72 61 74 65 20  ns can generate 
137e0 67 6c 6f 62 61 6c 6c 79 20 75 6e 69 71 75 65 20  globally unique 
137f0 69 64 65 6e 74 69 66 69 65 72 73 0a 20 20 75 73  identifiers.  us
13800 69 6e 67 20 74 68 69 73 20 66 75 6e 63 74 69 6f  ing this functio
13810 6e 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  n together with 
13820 5b 68 65 78 28 29 5d 20 61 6e 64 2f 6f 72 0a 20  [hex()] and/or. 
13830 20 5b 6c 6f 77 65 72 28 29 5d 20 6c 69 6b 65 20   [lower()] like 
13840 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c  this:</p>..  <bl
13850 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 68 65 78 28  ockquote>.  hex(
13860 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 3c  randomblob(16))<
13870 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f 77 65 72  br></br>.  lower
13880 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28  (hex(randomblob(
13890 31 36 29 29 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71  16))).  </blockq
138a0 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66  uote>.}..funcdef
138b0 20 7b 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29   {replace(X,Y,Z)
138c0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 65  } {} {.  ^The re
138d0 70 6c 61 63 65 28 58 2c 59 2c 5a 29 20 66 75 6e  place(X,Y,Z) fun
138e0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
138f0 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79  string formed by
13900 20 73 75 62 73 74 69 74 75 74 69 6e 67 0a 20 20   substituting.  
13910 73 74 72 69 6e 67 20 5a 20 66 6f 72 20 65 76 65  string Z for eve
13920 72 79 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66  ry occurrence of
13930 20 73 74 72 69 6e 67 20 59 20 69 6e 20 73 74 72   string Y in str
13940 69 6e 67 20 58 2e 20 20 5e 54 68 65 20 5b 42 49  ing X.  ^The [BI
13950 4e 41 52 59 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e  NARY].  collatin
13960 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73  g sequence is us
13970 65 64 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f  ed for compariso
13980 6e 73 2e 20 20 5e 49 66 20 59 20 69 73 20 61 6e  ns.  ^If Y is an
13990 20 65 6d 70 74 79 0a 20 20 73 74 72 69 6e 67 20   empty.  string 
139a0 74 68 65 6e 20 72 65 74 75 72 6e 20 58 20 75 6e  then return X un
139b0 63 68 61 6e 67 65 64 2e 20 20 5e 49 66 20 5a 20  changed.  ^If Z 
139c0 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
139d0 0a 20 20 61 20 73 74 72 69 6e 67 2c 20 69 74 20  .  a string, it 
139e0 69 73 20 63 61 73 74 20 74 6f 20 61 20 55 54 46  is cast to a UTF
139f0 2d 38 20 73 74 72 69 6e 67 20 70 72 69 6f 72 20  -8 string prior 
13a00 74 6f 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 7d  to processing..}
13a10 0a 0a 66 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64  ..funcdef {round
13a20 28 58 29 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20  (X) round(X,Y)} 
13a30 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 6f 75 6e  {} {.  ^The roun
13a40 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  d(X,Y) function 
13a50 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
13a60 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
13a70 6f 66 20 74 68 65 20 66 6c 6f 61 74 69 6e 67 2d  of the floating-
13a80 70 6f 69 6e 74 0a 20 20 76 61 6c 75 65 20 58 20  point.  value X 
13a90 72 6f 75 6e 64 65 64 20 74 6f 20 59 20 64 69 67  rounded to Y dig
13aa0 69 74 73 20 74 6f 20 74 68 65 20 72 69 67 68 74  its to the right
13ab0 20 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c 20   of the decimal 
13ac0 70 6f 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68 65  point..  ^If the
13ad0 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f   Y argument is o
13ae0 6d 69 74 74 65 64 2c 20 74 68 65 20 58 20 76 61  mitted, the X va
13af0 6c 75 65 20 69 73 20 74 72 75 6e 63 61 74 65 64  lue is truncated
13b00 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a   to an integer..
13b10 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 74 72 69  }..funcdef {rtri
13b20 6d 28 58 29 20 72 74 72 69 6d 28 58 2c 59 29 7d  m(X) rtrim(X,Y)}
13b30 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 74 72   {} {.  ^The rtr
13b40 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  im(X,Y) function
13b50 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
13b60 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
13b70 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
13b80 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
13b90 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66  at appear in Y f
13ba0 72 6f 6d 20 74 68 65 20 72 69 67 68 74 20 73 69  rom the right si
13bb0 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74  de of X..  ^If t
13bc0 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73  he Y argument is
13bd0 20 6f 6d 69 74 74 65 64 2c 20 72 74 72 69 6d 28   omitted, rtrim(
13be0 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65  X) removes space
13bf0 73 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74  s from the right
13c00 0a 20 20 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a  .  side of X..}.
13c10 0a 66 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65  .funcdef {sounde
13c20 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  x(X)} {} {.  ^Th
13c30 65 20 73 6f 75 6e 64 65 78 28 58 29 20 66 75 6e  e soundex(X) fun
13c40 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
13c50 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 74  string that is t
13c60 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64  he soundex encod
13c70 69 6e 67 20 0a 20 20 6f 66 20 74 68 65 20 73 74  ing .  of the st
13c80 72 69 6e 67 20 58 2e 0a 20 20 5e 54 68 65 20 73  ring X..  ^The s
13c90 74 72 69 6e 67 20 22 3f 30 30 30 22 20 69 73 20  tring "?000" is 
13ca0 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
13cb0 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c  argument is NULL
13cc0 20 6f 72 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e   or contains.  n
13cd0 6f 20 41 53 43 49 49 20 61 6c 70 68 61 62 65 74  o ASCII alphabet
13ce0 69 63 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20  ic characters.. 
13cf0 20 5e 28 54 68 69 73 20 66 75 6e 63 74 69 6f 6e   ^(This function
13d00 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
13d10 20 53 51 4c 69 74 65 20 62 79 20 64 65 66 61 75   SQLite by defau
13d20 6c 74 2e 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79  lt..  It is only
13d30 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68   available if th
13d40 65 20 5b 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45  e [SQLITE_SOUNDE
13d50 58 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  X] compile-time 
13d60 6f 70 74 69 6f 6e 0a 20 20 69 73 20 75 73 65 64  option.  is used
13d70 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20   when SQLite is 
13d80 62 75 69 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  built.)^.}..func
13d90 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70  def {sqlite_comp
13da0 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 4e 29  ileoption_get(N)
13db0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
13dc0 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  lite_compileopti
13dd0 6f 6e 5f 67 65 74 28 29 20 53 51 4c 20 66 75 6e  on_get() SQL fun
13de0 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
13df0 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20  er around the.  
13e00 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65  [sqlite3_compile
13e10 6f 70 74 69 6f 6e 5f 67 65 74 28 29 5d 20 43 2f  option_get()] C/
13e20 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20  C++ function..  
13e30 5e 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65  ^This routine re
13e40 74 75 72 6e 73 20 74 68 65 20 4e 2d 74 68 20 63  turns the N-th c
13e50 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
13e60 6f 6e 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64  on used to build
13e70 20 53 51 4c 69 74 65 0a 20 20 6f 72 20 4e 55 4c   SQLite.  or NUL
13e80 4c 20 69 66 20 4e 20 69 73 20 6f 75 74 20 6f 66  L if N is out of
13e90 20 72 61 6e 67 65 2e 20 20 53 65 65 20 61 6c 73   range.  See als
13ea0 6f 20 74 68 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f  o the [compile_o
13eb0 70 74 69 6f 6e 73 20 70 72 61 67 6d 61 5d 2e 0a  ptions pragma]..
13ec0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69  }..funcdef {sqli
13ed0 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  te_compileoption
13ee0 5f 75 73 65 64 28 58 29 7d 20 7b 7d 20 7b 0a 20  _used(X)} {} {. 
13ef0 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d   ^The sqlite_com
13f00 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
13f10 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  ) SQL function i
13f20 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75  s a wrapper arou
13f30 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65  nd the.  [sqlite
13f40 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
13f50 75 73 65 64 28 29 5d 20 43 2f 43 2b 2b 20 66 75  used()] C/C++ fu
13f60 6e 63 74 69 6f 6e 2e 0a 20 20 5e 57 68 65 6e 20  nction..  ^When 
13f70 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 74  the argument X t
13f80 6f 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65  o sqlite_compile
13f90 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58 29 20 69  option_used(X) i
13fa0 73 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68  s a string which
13fb0 0a 20 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  .  is the name o
13fc0 66 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  f a compile-time
13fd0 20 6f 70 74 69 6f 6e 2c 20 74 68 69 73 20 72 6f   option, this ro
13fe0 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 72  utine returns tr
13ff0 75 65 20 28 31 29 20 6f 72 0a 20 20 66 61 6c 73  ue (1) or.  fals
14000 65 20 28 30 29 20 64 65 70 65 6e 64 69 6e 67 20  e (0) depending 
14010 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
14020 74 20 74 68 61 74 20 6f 70 74 69 6f 6e 20 77 61  t that option wa
14030 73 20 75 73 65 64 20 64 75 72 69 6e 67 20 74 68  s used during th
14040 65 0a 20 20 62 75 69 6c 64 2e 0a 7d 0a 0a 66 75  e.  build..}..fu
14050 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f  ncdef {sqlite_so
14060 75 72 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a  urce_id()} {} {.
14070 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f    ^The sqlite_so
14080 75 72 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69  urce_id() functi
14090 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
140a0 69 6e 67 20 74 68 61 74 20 69 64 65 6e 74 69 66  ing that identif
140b0 69 65 73 20 74 68 65 0a 20 20 73 70 65 63 69 66  ies the.  specif
140c0 69 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ic version of th
140d0 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68  e source code th
140e0 61 74 20 77 61 73 20 75 73 65 64 20 74 6f 20 62  at was used to b
140f0 75 69 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a  uild the SQLite.
14100 20 20 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65    library.  ^The
14110 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
14120 20 62 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63   by sqlite_sourc
14130 65 5f 69 64 28 29 20 62 65 67 69 6e 73 20 77 69  e_id() begins wi
14140 74 68 0a 20 20 74 68 65 20 64 61 74 65 20 61 6e  th.  the date an
14150 64 20 74 69 6d 65 20 74 68 61 74 20 74 68 65 20  d time that the 
14160 73 6f 75 72 63 65 20 63 6f 64 65 20 77 61 73 20  source code was 
14170 63 68 65 63 6b 65 64 20 69 6e 20 61 6e 64 20 69  checked in and i
14180 73 20 66 6f 6c 6c 6f 77 73 20 62 79 0a 20 20 61  s follows by.  a
14190 6e 20 53 48 41 31 20 68 61 73 68 20 74 68 61 74  n SHA1 hash that
141a0 20 75 6e 69 71 75 65 6c 79 20 69 64 65 6e 74 69   uniquely identi
141b0 66 69 65 73 20 74 68 65 20 73 6f 75 72 63 65 20  fies the source 
141c0 74 72 65 65 2e 20 20 5e 54 68 69 73 20 66 75 6e  tree.  ^This fun
141d0 63 74 69 6f 6e 20 69 73 0a 20 20 61 6e 20 53 51  ction is.  an SQ
141e0 4c 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  L wrapper around
141f0 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 6f   the [sqlite3_so
14200 75 72 63 65 69 64 28 29 5d 20 43 20 69 6e 74 65  urceid()] C inte
14210 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65  rface..}..funcde
14220 66 20 7b 73 71 6c 69 74 65 5f 76 65 72 73 69 6f  f {sqlite_versio
14230 6e 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  n()} {} {.  ^The
14240 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28   sqlite_version(
14250 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
14260 6e 73 20 74 68 65 20 76 65 72 73 69 6f 6e 20 73  ns the version s
14270 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 53 51  tring for the SQ
14280 4c 69 74 65 0a 20 20 6c 69 62 72 61 72 79 20 74  Lite.  library t
14290 68 61 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20  hat is running. 
142a0 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20   ^This function 
142b0 69 73 20 61 6e 20 53 51 4c 0a 20 20 77 72 61 70  is an SQL.  wrap
142c0 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b  per around the [
142d0 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
142e0 6f 6e 28 29 5d 20 43 2d 69 6e 74 65 72 66 61 63  on()] C-interfac
142f0 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  e..}..funcdef {s
14300 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 73 75 62  ubstr(X,Y,Z) sub
14310 73 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  str(X,Y)} {} {. 
14320 20 5e 54 68 65 20 73 75 62 73 74 72 28 58 2c 59   ^The substr(X,Y
14330 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Z) function ret
14340 75 72 6e 73 20 61 20 73 75 62 73 74 72 69 6e 67  urns a substring
14350 20 6f 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67   of input string
14360 20 58 20 74 68 61 74 20 62 65 67 69 6e 73 0a 20   X that begins. 
14370 20 77 69 74 68 20 74 68 65 20 59 2d 74 68 20 63   with the Y-th c
14380 68 61 72 61 63 74 65 72 20 61 6e 64 20 77 68 69  haracter and whi
14390 63 68 20 69 73 20 5a 20 63 68 61 72 61 63 74 65  ch is Z characte
143a0 72 73 20 6c 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a  rs long..  ^If Z
143b0 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e   is omitted then
143c0 20 73 75 62 73 74 72 28 58 2c 59 29 20 72 65 74   substr(X,Y) ret
143d0 75 72 6e 73 20 61 6c 6c 20 63 68 61 72 61 63 74  urns all charact
143e0 65 72 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ers through the 
143f0 65 6e 64 0a 20 20 6f 66 20 74 68 65 20 73 74 72  end.  of the str
14400 69 6e 67 20 58 20 62 65 67 69 6e 6e 69 6e 67 20  ing X beginning 
14410 77 69 74 68 20 74 68 65 20 59 2d 74 68 2e 0a 20  with the Y-th.. 
14420 20 5e 54 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20   ^The left-most 
14430 63 68 61 72 61 63 74 65 72 20 6f 66 20 58 20 69  character of X i
14440 73 20 6e 75 6d 62 65 72 20 31 2e 20 20 5e 49 66  s number 1.  ^If
14450 20 59 20 69 73 20 6e 65 67 61 74 69 76 65 0a 20   Y is negative. 
14460 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20   then the first 
14470 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
14480 20 73 75 62 73 74 72 69 6e 67 20 69 73 20 66 6f   substring is fo
14490 75 6e 64 20 62 79 20 63 6f 75 6e 74 69 6e 67 20  und by counting 
144a0 66 72 6f 6d 20 74 68 65 0a 20 20 72 69 67 68 74  from the.  right
144b0 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65   rather than the
144c0 20 6c 65 66 74 2e 20 20 5e 49 66 20 5a 20 69 73   left.  ^If Z is
144d0 20 6e 65 67 61 74 69 76 65 20 74 68 65 6e 0a 20   negative then. 
144e0 20 74 68 65 20 61 62 73 28 5a 29 20 63 68 61 72   the abs(Z) char
144f0 61 63 74 65 72 73 20 70 72 65 63 65 64 69 6e 67  acters preceding
14500 20 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63   the Y-th charac
14510 74 65 72 20 61 72 65 20 72 65 74 75 72 6e 65 64  ter are returned
14520 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 61 20 73  ..  ^If X is a s
14530 74 72 69 6e 67 20 74 68 65 6e 20 63 68 61 72 61  tring then chara
14540 63 74 65 72 73 20 69 6e 64 69 63 65 73 20 72 65  cters indices re
14550 66 65 72 20 74 6f 20 61 63 74 75 61 6c 20 55 54  fer to actual UT
14560 46 2d 38 20 0a 20 20 63 68 61 72 61 63 74 65 72  F-8 .  character
14570 73 2e 20 20 5e 49 66 20 58 20 69 73 20 61 20 42  s.  ^If X is a B
14580 4c 4f 42 20 74 68 65 6e 20 74 68 65 20 69 6e 64  LOB then the ind
14590 69 63 65 73 20 72 65 66 65 72 20 74 6f 20 62 79  ices refer to by
145a0 74 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  tes..}..funcdef 
145b0 7b 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  {total_changes()
145c0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 6f  } {} {.  ^The to
145d0 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 66 75  tal_changes() fu
145e0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
145f0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
14600 20 63 68 61 6e 67 65 73 0a 20 20 63 61 75 73 65   changes.  cause
14610 64 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  d by INSERT, UPD
14620 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 20 20  ATE or DELETE.  
14630 73 74 61 74 65 6d 65 6e 74 73 20 73 69 6e 63 65  statements since
14640 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 61 74   the current dat
14650 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
14660 20 77 61 73 20 6f 70 65 6e 65 64 2e 0a 20 20 5e   was opened..  ^
14670 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
14680 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e   a wrapper aroun
14690 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 74  d the [sqlite3_t
146a0 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 0a  otal_changes()].
146b0 20 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63    C/C++ interfac
146c0 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74  e..}..funcdef {t
146d0 72 69 6d 28 58 29 20 74 72 69 6d 28 58 2c 59 29  rim(X) trim(X,Y)
146e0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 72  } {} {.  ^The tr
146f0 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  im(X,Y) function
14700 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
14710 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
14720 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
14730 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
14740 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66  at appear in Y f
14750 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20 6f 66  rom both ends of
14760 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20   X..  ^If the Y 
14770 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
14780 74 65 64 2c 20 74 72 69 6d 28 58 29 20 72 65 6d  ted, trim(X) rem
14790 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d  oves spaces from
147a0 20 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e   both ends of X.
147b0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 79 70  .}..funcdef {typ
147c0 65 6f 66 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  eof(X)} {} {.  ^
147d0 54 68 65 20 74 79 70 65 6f 66 28 58 29 20 66 75  The typeof(X) fu
147e0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
147f0 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 6e 64   string that ind
14800 69 63 61 74 65 73 20 74 68 65 20 5b 64 61 74 61  icates the [data
14810 74 79 70 65 5d 20 6f 66 0a 20 20 74 68 65 20 65  type] of.  the e
14820 78 70 72 65 73 73 69 6f 6e 20 58 3a 20 22 6e 75  xpression X: "nu
14830 6c 6c 22 2c 20 22 69 6e 74 65 67 65 72 22 2c 20  ll", "integer", 
14840 22 72 65 61 6c 22 2c 20 22 74 65 78 74 22 2c 20  "real", "text", 
14850 6f 72 20 22 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75  or "blob"..}..fu
14860 6e 63 64 65 66 20 7b 75 70 70 65 72 28 58 29 7d  ncdef {upper(X)}
14870 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 70 70   {} {.  ^The upp
14880 65 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  er(X) function r
14890 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66  eturns a copy of
148a0 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20   input string X 
148b0 69 6e 20 77 68 69 63 68 20 61 6c 6c 20 0a 20 20  in which all .  
148c0 6c 6f 77 65 72 2d 63 61 73 65 20 41 53 43 49 49  lower-case ASCII
148d0 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20   characters are 
148e0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 68 65  converted to the
148f0 69 72 20 75 70 70 65 72 2d 63 61 73 65 20 65 71  ir upper-case eq
14900 75 69 76 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e  uivalent..}..fun
14910 63 64 65 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e  cdef {zeroblob(N
14920 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a  )} {} {.  ^The z
14930 65 72 6f 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74  eroblob(N) funct
14940 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 42 4c  ion returns a BL
14950 4f 42 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66  OB consisting of
14960 20 4e 20 62 79 74 65 73 20 6f 66 20 30 78 30 30   N bytes of 0x00
14970 2e 0a 20 20 53 51 4c 69 74 65 20 6d 61 6e 61 67  ..  SQLite manag
14980 65 73 20 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f  es these zeroblo
14990 62 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e  bs very efficien
149a0 74 6c 79 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20  tly.  Zeroblobs 
149b0 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 0a 20  can be used to. 
149c0 20 72 65 73 65 72 76 65 20 73 70 61 63 65 20 66   reserve space f
149d0 6f 72 20 61 20 42 4c 4f 42 20 74 68 61 74 20 69  or a BLOB that i
149e0 73 20 6c 61 74 65 72 20 77 72 69 74 74 65 6e 20  s later written 
149f0 75 73 69 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65  using .  [sqlite
14a00 33 5f 62 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20  3_blob_open() | 
14a10 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42  incremental BLOB
14a20 20 49 2f 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53   I/O]..  ^This S
14a30 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69  QL function is i
14a40 6d 70 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67  mplemented using
14a50 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 72 65   the [sqlite3_re
14a60 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d  sult_zeroblob()]
14a70 0a 20 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20  .  routine from 
14a80 74 68 65 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  the C/C++ interf
14a90 61 63 65 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f  ace..}.</tcl>.</
14aa0 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  table>..<tcl>.##
14ab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14ad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14af0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
14b00 74 69 6f 6e 20 7b 44 61 74 65 20 41 6e 64 20 54  tion {Date And T
14b10 69 6d 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64  ime Functions} d
14b20 61 74 65 66 75 6e 63 20 7b 2a 64 61 74 65 66 75  atefunc {*datefu
14b30 6e 63 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20  nc}.hd_keywords 
14b40 7b 64 61 74 65 28 29 20 53 51 4c 20 66 75 6e 63  {date() SQL func
14b50 74 69 6f 6e 7d 20 7b 74 69 6d 65 28 29 20 53 51  tion} {time() SQ
14b60 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b  L function}.hd_k
14b70 65 79 77 6f 72 64 73 20 7b 64 61 74 65 74 69 6d  eywords {datetim
14b80 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
14b90 7d 20 7b 6a 75 6c 69 61 6e 64 61 79 28 29 20 53  } {julianday() S
14ba0 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f  QL function}.hd_
14bb0 6b 65 79 77 6f 72 64 73 20 7b 73 74 72 66 74 69  keywords {strfti
14bc0 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  me() SQL functio
14bd0 6e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53  n}.</tcl>..<p>.S
14be0 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 66  QLite supports f
14bf0 69 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ive date and tim
14c00 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 73 20 66  e functions as f
14c10 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70  ollows:.</p>..<p
14c20 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62  >.<ol>.<li> ^(<b
14c30 3e 64 61 74 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d  >date(</b><i>tim
14c40 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
14c50 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
14c60 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c  </i><b>)</b>)^ <
14c70 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74  /li>.<li> ^(<b>t
14c80 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  ime(</b><i>times
14c90 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
14ca0 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
14cb0 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c  i><b>)</b>)^ </l
14cc0 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74  i>.<li> ^(<b>dat
14cd0 65 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d  etime(</b><i>tim
14ce0 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
14cf0 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
14d00 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c  </i><b>)</b>)^ <
14d10 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a  /li>.<li> ^(<b>j
14d20 75 6c 69 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e  ulianday(</b><i>
14d30 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
14d40 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
14d50 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29  ...</i><b>)</b>)
14d60 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c  ^ </li>.<li> ^(<
14d70 62 3e 73 74 72 66 74 69 6d 65 28 3c 2f 62 3e 3c  b>strftime(</b><
14d80 69 3e 66 6f 72 6d 61 74 2c 20 74 69 6d 65 73 74  i>format, timest
14d90 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
14da0 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
14db0 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
14dc0 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c  >.</ol>..<p>.^Al
14dd0 6c 20 66 69 76 65 20 64 61 74 65 20 61 6e 64 20  l five date and 
14de0 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 74  time functions t
14df0 61 6b 65 20 61 20 74 69 6d 65 20 73 74 72 69 6e  ake a time strin
14e00 67 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74  g as an argument
14e10 2e 20 0a 5e 54 68 65 20 74 69 6d 65 20 73 74 72  . .^The time str
14e20 69 6e 67 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ing is followed 
14e30 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  by zero or more 
14e40 6d 6f 64 69 66 69 65 72 73 2e 20 0a 5e 54 68 65  modifiers. .^The
14e50 20 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63   strftime() func
14e60 74 69 6f 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20  tion also takes 
14e70 61 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  a format string 
14e80 61 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67  as its first arg
14e90 75 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ument..</p>..<p>
14ea0 0a 54 68 65 20 64 61 74 65 20 61 6e 64 20 74 69  .The date and ti
14eb0 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65  me functions use
14ec0 20 61 20 73 75 62 73 65 74 20 6f 66 0a 5b 68 74   a subset of.[ht
14ed0 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
14ee0 61 2e 6f 72 67 2f 77 69 6b 69 2f 49 53 4f 5f 38  a.org/wiki/ISO_8
14ef0 36 30 31 20 7c 20 49 53 30 2d 38 36 30 31 5d 20  601 | IS0-8601] 
14f00 64 61 74 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f  date and time.fo
14f10 72 6d 61 74 73 2e 0a 5e 54 68 65 20 64 61 74 65  rmats..^The date
14f20 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
14f30 72 6e 73 20 74 68 65 20 64 61 74 65 20 69 6e 20  rns the date in 
14f40 74 68 69 73 20 66 6f 72 6d 61 74 3a 20 59 59 59  this format: YYY
14f50 59 2d 4d 4d 2d 44 44 2e 20 0a 5e 54 68 65 20 74  Y-MM-DD. .^The t
14f60 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ime() function r
14f70 65 74 75 72 6e 73 20 74 68 65 20 74 69 6d 65 20  eturns the time 
14f80 61 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54  as HH:MM:SS. .^T
14f90 68 65 20 64 61 74 65 74 69 6d 65 28 29 20 66 75  he datetime() fu
14fa0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 22  nction returns "
14fb0 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
14fc0 3a 53 53 22 2e 20 0a 5e 28 54 68 65 20 6a 75 6c  :SS". .^(The jul
14fd0 69 61 6e 64 61 79 28 29 20 66 75 6e 63 74 69 6f  ianday() functio
14fe0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 0a 5b  n returns the .[
14ff0 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
15000 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c  dia.org/wiki/Jul
15010 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e  ian_day | Julian
15020 20 64 61 79 5d 20 2d 20 74 68 65 0a 6e 75 6d 62   day] - the.numb
15030 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65  er of days since
15040 20 6e 6f 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69   noon in Greenwi
15050 63 68 20 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32  ch on November 2
15060 34 2c 20 34 37 31 34 20 42 2e 43 2e 20 0a 28 5b  4, 4714 B.C. .([
15070 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
15080 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 50 72 6f  dia.org/wiki/Pro
15090 6c 65 70 74 69 63 5f 47 72 65 67 6f 72 69 61 6e  leptic_Gregorian
150a0 5f 63 61 6c 65 6e 64 61 72 20 7c 20 50 72 6f 6c  _calendar | Prol
150b0 65 70 74 69 63 20 47 72 65 67 6f 72 69 61 6e 20  eptic Gregorian 
150c0 63 61 6c 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54  calendar]).)^.^T
150d0 68 65 20 73 74 72 66 74 69 6d 65 28 29 20 72 6f  he strftime() ro
150e0 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68  utine returns th
150f0 65 20 64 61 74 65 20 66 6f 72 6d 61 74 74 65 64  e date formatted
15100 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 0a 74   according to .t
15110 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
15120 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
15130 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
15140 2e 0a 5e 54 68 65 20 66 6f 72 6d 61 74 20 73 74  ..^The format st
15150 72 69 6e 67 20 73 75 70 70 6f 72 74 73 20 74 68  ring supports th
15160 65 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73 75  e most common su
15170 62 73 74 69 74 75 74 69 6f 6e 73 20 66 6f 75 6e  bstitutions foun
15180 64 20 69 6e 20 74 68 65 20 0a 5b 68 74 74 70 3a  d in the .[http:
15190 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f  //opengroup.org/
151a0 6f 6e 6c 69 6e 65 70 75 62 73 2f 30 30 37 39 30  onlinepubs/00790
151b0 38 37 39 39 2f 78 73 68 2f 73 74 72 66 74 69 6d  8799/xsh/strftim
151c0 65 2e 68 74 6d 6c 20 7c 20 73 74 72 66 74 69 6d  e.html | strftim
151d0 65 28 29 20 66 75 6e 63 74 69 6f 6e 5d 0a 66 72  e() function].fr
151e0 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  om the standard 
151f0 43 20 6c 69 62 72 61 72 79 20 70 6c 75 73 20 74  C library plus t
15200 77 6f 20 6e 65 77 20 73 75 62 73 74 69 74 75 74  wo new substitut
15210 69 6f 6e 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e  ions, %f and %J.
15220 0a 5e 28 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .^(The following
15230 20 69 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c   is a complete l
15240 69 73 74 20 6f 66 20 76 61 6c 69 64 20 73 74 72  ist of valid str
15250 66 74 69 6d 65 28 29 20 73 75 62 73 74 69 74 75  ftime() substitu
15260 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  tions:.</p>..<bl
15270 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
15280 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c   border="0" cell
15290 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c  padding="0" cell
152a0 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72  spacing="0">.<tr
152b0 3e 3c 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  ><td><td width="
152c0 31 30 22 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c  10"><td></tr>..<
152d0 74 72 3e 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c  tr><td> %d <td><
152e0 74 64 3e 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68  td> day of month
152f0 3a 20 30 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66  : 00.<tr><td> %f
15300 20 3c 74 64 3e 3c 74 64 3e 20 66 72 61 63 74 69   <td><td> fracti
15310 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53  onal seconds: SS
15320 2e 53 53 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48  .SSS.<tr><td> %H
15330 20 3c 74 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20   <td><td> hour: 
15340 30 30 2d 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20  00-24 .<tr><td> 
15350 25 6a 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %j <td><td> day 
15360 6f 66 20 79 65 61 72 3a 20 30 30 31 2d 33 36 36  of year: 001-366
15370 0a 3c 74 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64  .<tr><td> %J <td
15380 3e 3c 74 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79  ><td> Julian day
15390 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e   number.<tr><td>
153a0 20 25 6d 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e   %m <td><td> mon
153b0 74 68 3a 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74  th: 01-12.<tr><t
153c0 64 3e 20 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d  d> %M <td><td> m
153d0 69 6e 75 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72  inute: 00-59.<tr
153e0 3e 3c 74 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64  ><td> %s <td><td
153f0 3e 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  > seconds since 
15400 31 39 37 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c  1970-01-01.<tr><
15410 74 64 3e 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20  td> %S <td><td> 
15420 73 65 63 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c  seconds: 00-59.<
15430 74 72 3e 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c  tr><td> %w <td><
15440 74 64 3e 20 64 61 79 20 6f 66 20 77 65 65 6b 20  td> day of week 
15450 30 2d 36 20 77 69 74 68 20 73 75 6e 64 61 79 3d  0-6 with sunday=
15460 3d 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c  =0.<tr><td> %W <
15470 74 64 3e 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20  td><td> week of 
15480 79 65 61 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e  year: 00-53.<tr>
15490 3c 74 64 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e  <td> %Y <td><td>
154a0 20 79 65 61 72 3a 20 30 30 30 30 2d 39 39 39 39   year: 0000-9999
154b0 0a 3c 74 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64  .<tr><td> %% <td
154c0 3e 3c 74 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e  ><td> %.</table>
154d0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
154e0 0a 0a 3c 70 3e 0a 5e 28 4e 6f 74 69 63 65 20 74  ..<p>.^(Notice t
154f0 68 61 74 20 61 6c 6c 20 6f 74 68 65 72 20 64 61  hat all other da
15500 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
15510 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 65 78 70  tions can be exp
15520 72 65 73 73 65 64 0a 69 6e 20 74 65 72 6d 73 20  ressed.in terms 
15530 6f 66 20 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c  of strftime():.<
15540 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
15550 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
15560 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  "0" cellpadding=
15570 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d  "0" cellspacing=
15580 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e  "0">.<tr><td><b>
15590 46 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20  Function</b><td 
155a0 77 69 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c  width="30"><td><
155b0 62 3e 45 71 75 69 76 61 6c 65 6e 74 20 73 74 72  b>Equivalent str
155c0 66 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e  ftime()</b>.<tr>
155d0 3c 74 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29  <td>   date(...)
155e0 20 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20        <td><td>  
155f0 73 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d  strftime('%Y-%m-
15600 25 64 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74  %d', ...).<tr><t
15610 64 3e 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20  d>   time(...)  
15620 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74      <td><td>  st
15630 72 66 74 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53  rftime('%H:%M:%S
15640 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e  ', ...).<tr><td>
15650 20 20 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29     datetime(...)
15660 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66    <td><td>  strf
15670 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25  time('%Y-%m-%d %
15680 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c  H:%M:%S', ...).<
15690 74 72 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e  tr><td>   julian
156a0 64 61 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64  day(...) <td><td
156b0 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 4a 27  >  strftime('%J'
156c0 2c 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a  , ...).</table>.
156d0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
156e0 0a 3c 70 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65  .<p>.The only re
156f0 61 73 6f 6e 73 20 66 6f 72 20 70 72 6f 76 69 64  asons for provid
15700 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74  ing functions ot
15710 68 65 72 20 74 68 61 6e 20 73 74 72 66 74 69 6d  her than strftim
15720 65 28 29 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65  e() is.for conve
15730 6e 69 65 6e 63 65 20 61 6e 64 20 66 6f 72 20 65  nience and for e
15740 66 66 69 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a  fficiency..</p>.
15750 0a 3c 68 33 3e 54 69 6d 65 20 53 74 72 69 6e 67  .<h3>Time String
15760 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74  s</h3>..<p>^(A t
15770 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62  ime string can b
15780 65 20 69 6e 20 61 6e 79 20 6f 66 20 74 68 65 20  e in any of the 
15790 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74  following format
157a0 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  s:</p>..<ol>.<li
157b0 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
157c0 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
157d0 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e  -MM-DD HH:MM</i>
157e0 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
157f0 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e  -DD HH:MM:SS</i>
15800 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
15810 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53  -DD HH:MM:SS.SSS
15820 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
15830 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c  Y-MM-DD</i><b>T<
15840 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a  /b><i>HH:MM</i>.
15850 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
15860 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69  DD</i><b>T</b><i
15870 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c  >HH:MM:SS</i>.<l
15880 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
15890 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48  </i><b>T</b><i>H
158a0 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a  H:MM:SS.SSS</i>.
158b0 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69  <li> <i>HH:MM</i
158c0 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a  >.<li> <i>HH:MM:
158d0 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48  SS</i>.<li> <i>H
158e0 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a  H:MM:SS.SSS</i>.
158f0 3c 6c 69 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a  <li> <b>now</b>.
15900 3c 6c 69 3e 20 3c 69 3e 44 44 44 44 44 44 44 44  <li> <i>DDDDDDDD
15910 44 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a  DD</i>.</ol>)^..
15920 3c 70 3e 0a 5e 49 6e 20 66 6f 72 6d 61 74 73 20  <p>.^In formats 
15930 35 20 74 68 72 6f 75 67 68 20 37 2c 20 74 68 65  5 through 7, the
15940 20 22 54 22 20 69 73 20 61 20 6c 69 74 65 72 61   "T" is a litera
15950 6c 20 63 68 61 72 61 63 74 65 72 20 73 65 70 61  l character sepa
15960 72 61 74 69 6e 67 20 0a 74 68 65 20 64 61 74 65  rating .the date
15970 20 61 6e 64 20 74 68 65 20 74 69 6d 65 2c 20 61   and the time, a
15980 73 20 72 65 71 75 69 72 65 64 20 62 79 20 0a 5b  s required by .[
15990 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f  http://www.w3c.o
159a0 72 67 2f 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74  rg/TR/NOTE-datet
159b0 69 6d 65 20 7c 20 49 53 4f 2d 38 36 30 31 5d 2e  ime | ISO-8601].
159c0 20 0a 5e 46 6f 72 6d 61 74 73 20 38 20 74 68 72   .^Formats 8 thr
159d0 6f 75 67 68 20 31 30 20 74 68 61 74 20 73 70 65  ough 10 that spe
159e0 63 69 66 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65  cify only a time
159f0 20 61 73 73 75 6d 65 20 61 20 64 61 74 65 20 6f   assume a date o
15a00 66 20 0a 32 30 30 30 2d 30 31 2d 30 31 2e 20 46  f .2000-01-01. F
15a10 6f 72 6d 61 74 20 31 31 2c 20 74 68 65 20 73 74  ormat 11, the st
15a20 72 69 6e 67 20 27 6e 6f 77 27 2c 20 69 73 20 63  ring 'now', is c
15a30 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 74 68  onverted into th
15a40 65 20 0a 63 75 72 72 65 6e 74 20 64 61 74 65 20  e .current date 
15a50 61 6e 64 20 74 69 6d 65 20 61 73 20 6f 62 74 61  and time as obta
15a60 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 78 43  ined from the xC
15a70 75 72 72 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f  urrentTime metho
15a80 64 0a 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65  d.of the [sqlite
15a90 33 5f 76 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e  3_vfs] object in
15aa0 20 75 73 65 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65   use..^[http://e
15ab0 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
15ac0 77 69 6b 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64  wiki/Coordinated
15ad0 5f 55 6e 69 76 65 72 73 61 6c 5f 54 69 6d 65 20  _Universal_Time 
15ae0 7c 20 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72  | Universal Coor
15af0 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54  dinated Time (UT
15b00 43 29 5d 20 69 73 20 75 73 65 64 2e 20 0a 5e 46  C)] is used. .^F
15b10 6f 72 6d 61 74 20 31 32 20 69 73 20 74 68 65 20  ormat 12 is the 
15b20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
15b30 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a  pedia.org/wiki/J
15b40 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69  ulian_day | Juli
15b50 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 5d 0a 65  an day number].e
15b60 78 70 72 65 73 73 65 64 20 61 73 20 61 20 66 6c  xpressed as a fl
15b70 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
15b80 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f  ue..</p>..<h3>Mo
15b90 64 69 66 69 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70  difiers</h3>..<p
15ba0 3e 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e  >^The time strin
15bb0 67 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65  g can be followe
15bc0 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  d by zero or mor
15bd0 65 20 6d 6f 64 69 66 69 65 72 73 20 74 68 61 74  e modifiers that
15be0 20 0a 61 6c 74 65 72 20 74 68 65 20 64 61 74 65   .alter the date
15bf0 20 61 6e 64 20 74 69 6d 65 20 73 74 72 69 6e 67   and time string
15c00 2e 20 5e 45 61 63 68 20 6d 6f 64 69 66 69 65 72  . ^Each modifier
15c10 0a 69 73 20 61 20 74 72 61 6e 73 66 6f 72 6d 61  .is a transforma
15c20 74 69 6f 6e 20 74 68 61 74 20 69 73 20 61 70 70  tion that is app
15c30 6c 69 65 64 20 74 6f 20 74 68 65 20 74 69 6d 65  lied to the time
15c40 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 6c 65   value to its le
15c50 66 74 2e 0a 5e 4d 6f 64 69 66 69 65 72 73 20 61  ft..^Modifiers a
15c60 72 65 20 61 70 70 6c 69 65 64 20 66 72 6f 6d 20  re applied from 
15c70 6c 65 66 74 20 74 6f 20 72 69 67 68 74 3b 20 6f  left to right; o
15c80 72 64 65 72 20 69 73 20 69 6d 70 6f 72 74 61 6e  rder is importan
15c90 74 2e 0a 5e 28 54 68 65 20 61 76 61 69 6c 61 62  t..^(The availab
15ca0 6c 65 20 6d 6f 64 69 66 69 65 72 73 20 61 72 65  le modifiers are
15cb0 20 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e   as follows.</p>
15cc0 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20  ..<ol>.<li> NNN 
15cd0 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f  days.<li> NNN ho
15ce0 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e  urs.<li> NNN min
15cf0 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e  utes.<li> NNN.NN
15d00 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20  NN seconds.<li> 
15d10 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20  NNN months.<li> 
15d20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c 69 3e 20 73  NNN years.<li> s
15d30 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c  tart of month.<l
15d40 69 3e 20 73 74 61 72 74 20 6f 66 20 79 65 61 72  i> start of year
15d50 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 64  .<li> start of d
15d60 61 79 0a 3c 6c 69 3e 20 77 65 65 6b 64 61 79 20  ay.<li> weekday 
15d70 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65 70 6f 63 68  N.<li> unixepoch
15d80 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a  .<li> localtime.
15d90 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29  <li> utc .</ol>)
15da0 5e 0a 0a 3c 70 3e 5e 54 68 65 20 66 69 72 73 74  ^..<p>^The first
15db0 20 73 69 78 20 6d 6f 64 69 66 69 65 72 73 20 28   six modifiers (
15dc0 31 20 74 68 72 6f 75 67 68 20 36 29 20 0a 73 69  1 through 6) .si
15dd0 6d 70 6c 79 20 61 64 64 20 74 68 65 20 73 70 65  mply add the spe
15de0 63 69 66 69 65 64 20 61 6d 6f 75 6e 74 20 6f 66  cified amount of
15df0 20 74 69 6d 65 20 74 6f 20 74 68 65 20 64 61 74   time to the dat
15e00 65 20 61 6e 64 20 74 69 6d 65 20 0a 73 70 65 63  e and time .spec
15e10 69 66 69 65 64 20 62 79 20 74 68 65 20 70 72 65  ified by the pre
15e20 63 65 64 69 6e 67 20 74 69 6d 65 73 74 72 69 6e  ceding timestrin
15e30 67 20 61 6e 64 20 6d 6f 64 69 66 69 65 72 73 2e  g and modifiers.
15e40 0a 5e 4e 6f 74 65 20 74 68 61 74 20 22 26 70 6c  .^Note that "&pl
15e50 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22  usmn;NNN months"
15e60 20 77 6f 72 6b 73 20 62 79 20 72 65 6e 64 65 72   works by render
15e70 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  ing the original
15e80 20 64 61 74 65 20 69 6e 74 6f 0a 74 68 65 20 59   date into.the Y
15e90 59 59 59 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74  YYY-MM-DD format
15ea0 2c 20 61 64 64 69 6e 67 20 74 68 65 20 26 70 6c  , adding the &pl
15eb0 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20  usmn;NNN to the 
15ec0 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20  MM month value, 
15ed0 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67  then.normalizing
15ee0 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 5e 54   the result.  ^T
15ef0 68 75 73 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65  hus, for example
15f00 2c 20 74 68 65 20 64 61 74 61 20 32 30 30 31 2d  , the data 2001-
15f10 30 33 2d 33 31 20 6d 6f 64 69 66 69 65 64 0a 62  03-31 modified.b
15f20 79 20 27 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69  y '+1 month' ini
15f30 74 69 61 6c 6c 79 20 79 69 65 6c 64 73 20 32 30  tially yields 20
15f40 30 31 2d 30 34 2d 33 31 2c 20 62 75 74 20 41 70  01-04-31, but Ap
15f50 72 69 6c 20 6f 6e 6c 79 20 68 61 73 20 33 30 20  ril only has 30 
15f60 64 61 79 73 0a 73 6f 20 74 68 65 20 64 61 74 65  days.so the date
15f70 20 69 73 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74   is normalized t
15f80 6f 20 32 30 30 31 2d 30 35 2d 30 31 2e 20 20 5e  o 2001-05-01.  ^
15f90 41 20 73 69 6d 69 6c 61 72 20 65 66 66 65 63 74  A similar effect
15fa0 20 6f 63 63 75 72 73 20 77 68 65 6e 0a 74 68 65   occurs when.the
15fb0 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65 20 69   original date i
15fc0 73 20 46 65 62 72 75 61 72 79 20 32 39 20 6f 66  s February 29 of
15fd0 20 61 20 6c 65 61 70 79 65 61 72 20 61 6e 64 20   a leapyear and 
15fe0 74 68 65 20 6d 6f 64 69 66 69 65 72 20 69 73 0a  the modifier is.
15ff0 26 70 6c 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20  &plusmn;N years 
16000 77 68 65 72 65 20 4e 20 69 73 20 6e 6f 74 20 61  where N is not a
16010 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75   multiple of fou
16020 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r.</p>..<p>^The 
16030 22 73 74 61 72 74 20 6f 66 22 20 6d 6f 64 69 66  "start of" modif
16040 69 65 72 73 20 28 37 20 74 68 72 6f 75 67 68 20  iers (7 through 
16050 39 29 20 73 68 69 66 74 20 74 68 65 20 64 61 74  9) shift the dat
16060 65 20 62 61 63 6b 77 61 72 64 73 20 0a 74 6f 20  e backwards .to 
16070 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
16080 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e   the current mon
16090 74 68 2c 20 79 65 61 72 20 6f 72 20 64 61 79 2e  th, year or day.
160a0 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 77  </p>..<p>^The "w
160b0 65 65 6b 64 61 79 22 20 6d 6f 64 69 66 69 65 72  eekday" modifier
160c0 20 61 64 76 61 6e 63 65 73 20 74 68 65 20 64 61   advances the da
160d0 74 65 20 66 6f 72 77 61 72 64 20 74 6f 20 74 68  te forward to th
160e0 65 20 6e 65 78 74 20 64 61 74 65 20 0a 77 68 65  e next date .whe
160f0 72 65 20 74 68 65 20 77 65 65 6b 64 61 79 20 6e  re the weekday n
16100 75 6d 62 65 72 20 69 73 20 4e 2e 20 53 75 6e 64  umber is N. Sund
16110 61 79 20 69 73 20 30 2c 20 4d 6f 6e 64 61 79 20  ay is 0, Monday 
16120 69 73 20 31 2c 20 61 6e 64 20 73 6f 20 66 6f 72  is 1, and so for
16130 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  th.</p>..<p>^The
16140 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
16150 69 66 69 65 72 20 28 31 31 29 20 6f 6e 6c 79 20  ifier (11) only 
16160 77 6f 72 6b 73 20 69 66 20 69 74 20 69 6d 6d 65  works if it imme
16170 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20  diately follows 
16180 0a 61 20 74 69 6d 65 73 74 72 69 6e 67 20 69 6e  .a timestring in
16190 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44 20   the DDDDDDDDDD 
161a0 66 6f 72 6d 61 74 2e 20 0a 5e 54 68 69 73 20 6d  format. .^This m
161b0 6f 64 69 66 69 65 72 20 63 61 75 73 65 73 20 74  odifier causes t
161c0 68 65 20 44 44 44 44 44 44 44 44 44 44 20 74 6f  he DDDDDDDDDD to
161d0 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
161e0 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e  not .as a Julian
161f0 20 64 61 79 20 6e 75 6d 62 65 72 20 61 73 20 69   day number as i
16200 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64  t normally would
16210 20 62 65 2c 20 62 75 74 20 61 73 0a 5b 68 74 74   be, but as.[htt
16220 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
16230 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78 5f 74  .org/wiki/Unix_t
16240 69 6d 65 20 7c 20 55 6e 69 78 20 54 69 6d 65 5d  ime | Unix Time]
16250 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65 72 20 6f   - the .number o
16260 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  f seconds since 
16270 31 39 37 30 2e 20 20 49 66 20 74 68 65 20 22 75  1970.  If the "u
16280 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
16290 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c  er does not.foll
162a0 6f 77 20 61 20 74 69 6d 65 73 74 72 69 6e 67 20  ow a timestring 
162b0 6f 66 20 74 68 65 20 66 6f 72 6d 20 44 44 44 44  of the form DDDD
162c0 44 44 44 44 44 44 20 77 68 69 63 68 20 65 78 70  DDDDDD which exp
162d0 72 65 73 73 65 73 20 74 68 65 20 6e 75 6d 62 65  resses the numbe
162e0 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r.of seconds sin
162f0 63 65 20 31 39 37 30 20 6f 72 20 69 66 20 6f 74  ce 1970 or if ot
16300 68 65 72 20 6d 6f 64 69 66 69 65 72 73 0a 73 65  her modifiers.se
16310 70 61 72 61 74 65 20 74 68 65 20 22 75 6e 69 78  parate the "unix
16320 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20  epoch" modifier 
16330 66 72 6f 6d 20 70 72 69 6f 72 20 44 44 44 44 44  from prior DDDDD
16340 44 44 44 44 44 20 74 68 65 6e 20 74 68 65 0a 62  DDDDD then the.b
16350 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66  ehavior is undef
16360 69 6e 65 64 2e 0a 44 75 65 20 74 6f 20 70 72 65  ined..Due to pre
16370 63 69 73 69 6f 6e 20 6c 69 6d 69 74 61 74 69 6f  cision limitatio
16380 6e 73 20 69 6d 70 6f 73 65 64 20 62 79 20 74 68  ns imposed by th
16390 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
163a0 73 20 75 73 65 0a 6f 66 20 36 34 2d 62 69 74 20  s use.of 64-bit 
163b0 69 6e 74 65 67 65 72 73 2c 20 74 68 65 20 22 75  integers, the "u
163c0 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
163d0 65 72 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  er only works fo
163e0 72 0a 64 61 74 65 73 20 62 65 74 77 65 65 6e 20  r.dates between 
163f0 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30 30  0000-01-01 00:00
16400 3a 30 30 20 61 6e 64 20 35 33 35 32 2d 31 31 2d  :00 and 5352-11-
16410 30 31 20 31 30 3a 35 32 3a 34 37 20 28 75 6e 69  01 10:52:47 (uni
16420 78 20 74 69 6d 65 73 0a 6f 66 20 2d 36 32 31 36  x times.of -6216
16430 37 32 31 39 32 30 30 20 74 68 72 6f 75 67 68 20  7219200 through 
16440 31 30 36 37 35 31 39 39 31 36 37 29 2e 3c 2f 70  10675199167).</p
16450 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 6c 6f 63 61  >..<p>^The "loca
16460 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69 65 72 20  ltime" modifier 
16470 28 31 32 29 20 61 73 73 75 6d 65 73 20 74 68 65  (12) assumes the
16480 20 74 69 6d 65 20 73 74 72 69 6e 67 20 74 6f 20   time string to 
16490 69 74 73 20 6c 65 66 74 20 69 73 20 69 6e 0a 55  its left is in.U
164a0 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e  niversal Coordin
164b0 61 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 20  ated Time (UTC) 
164c0 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 65 20  and adjusts the 
164d0 74 69 6d 65 0a 73 74 72 69 6e 67 20 73 6f 20 74  time.string so t
164e0 68 61 74 20 69 74 20 64 69 73 70 6c 61 79 73 20  hat it displays 
164f0 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49 66 20 22  localtime.  If "
16500 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f  localtime".follo
16510 77 73 20 61 20 74 69 6d 65 20 74 68 61 74 20 69  ws a time that i
16520 73 20 6e 6f 74 20 55 54 43 2c 20 74 68 65 6e 20  s not UTC, then 
16530 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20  the behavior is 
16540 75 6e 64 65 66 69 6e 65 64 2e 0a 5e 28 54 68 65  undefined..^(The
16550 20 22 75 74 63 22 20 69 73 20 74 68 65 20 6f 70   "utc" is the op
16560 70 6f 73 69 74 65 20 6f 66 20 22 6c 6f 63 61 6c  posite of "local
16570 74 69 6d 65 22 2e 20 20 22 75 74 63 22 20 61 73  time".  "utc" as
16580 73 75 6d 65 73 20 74 68 61 74 20 74 68 65 20 73  sumes that the s
16590 74 72 69 6e 67 0a 74 6f 20 69 74 73 20 6c 65 66  tring.to its lef
165a0 74 20 69 73 20 69 6e 20 74 68 65 20 6c 6f 63 61  t is in the loca
165b0 6c 20 74 69 6d 65 7a 6f 6e 65 20 61 6e 64 20 61  l timezone and a
165c0 64 6a 75 73 74 73 20 74 68 61 74 20 73 74 72 69  djusts that stri
165d0 6e 67 20 74 6f 20 62 65 20 69 6e 20 55 54 43 2e  ng to be in UTC.
165e0 29 5e 0a 49 66 20 74 68 65 20 70 72 69 6f 72 20  )^.If the prior 
165f0 73 74 72 69 6e 67 20 69 73 20 6e 6f 74 20 69 6e  string is not in
16600 20 6c 6f 63 61 6c 74 69 6d 65 2c 20 74 68 65 6e   localtime, then
16610 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 22   the result of "
16620 75 74 63 22 20 69 73 0a 75 6e 64 65 66 69 6e 65  utc" is.undefine
16630 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d  d.</p>..<h3>Exam
16640 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e  ples</h3>..^(<p>
16650 43 6f 6d 70 75 74 65 20 74 68 65 20 63 75 72 72  Compute the curr
16660 65 6e 74 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62  ent date.<p>..<b
16670 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54  lockquote>SELECT
16680 20 64 61 74 65 28 27 6e 6f 77 27 29 3b 3c 2f 62   date('now');</b
16690 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
166a0 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6c  <p>Compute the l
166b0 61 73 74 20 64 61 79 20 6f 66 20 74 68 65 20 63  ast day of the c
166c0 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70  urrent month.</p
166d0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53  >..<blockquote>S
166e0 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27  ELECT date('now'
166f0 2c 27 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68  ,'start of month
16700 27 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31  ','+1 month','-1
16710 20 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71   day');.</blockq
16720 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
16730 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61  mpute the date a
16740 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20  nd time given a 
16750 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31  unix timestamp 1
16760 30 39 32 39 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a  092941466.</p>..
16770 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20  <blockquote>.   
16780 20 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65   SELECT datetime
16790 28 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e  (1092941466, 'un
167a0 69 78 65 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f  ixepoch');.</blo
167b0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
167c0 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74  >Compute the dat
167d0 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e  e and time given
167e0 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d   a unix timestam
167f0 70 20 31 30 39 32 39 34 31 34 36 36 2c 20 61 6e  p 1092941466, an
16800 64 20 0a 63 6f 6d 70 65 6e 73 61 74 65 20 66 6f  d .compensate fo
16810 72 20 79 6f 75 72 20 6c 6f 63 61 6c 20 74 69 6d  r your local tim
16820 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ezone.</p>..<blo
16830 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
16840 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32 39  T datetime(10929
16850 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63  41466, 'unixepoc
16860 68 27 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29  h', 'localtime')
16870 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
16880 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
16890 74 68 65 20 63 75 72 72 65 6e 74 20 75 6e 69 78  the current unix
168a0 20 74 69 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a   timestamp.</p>.
168b0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
168c0 53 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28  SELECT strftime(
168d0 27 25 73 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62  '%s','now');.</b
168e0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
168f0 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e  <p>Compute the n
16900 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69  umber of days si
16910 6e 63 65 20 74 68 65 20 73 69 67 6e 69 6e 67 20  nce the signing 
16920 6f 66 20 74 68 65 20 55 53 20 44 65 63 6c 61 72  of the US Declar
16930 61 74 69 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e  ation.of Indepen
16940 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  dence.</p>..<blo
16950 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
16960 54 20 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77  T julianday('now
16970 27 29 20 2d 20 6a 75 6c 69 61 6e 64 61 79 28 27  ') - julianday('
16980 31 37 37 36 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f  1776-07-04');.</
16990 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
169a0 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
169b0 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64  number of second
169c0 73 20 73 69 6e 63 65 20 61 20 70 61 72 74 69 63  s since a partic
169d0 75 6c 61 72 20 6d 6f 6d 65 6e 74 20 69 6e 20 32  ular moment in 2
169e0 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  004:</p>..<block
169f0 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
16a00 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e  strftime('%s','n
16a10 6f 77 27 29 20 2d 20 73 74 72 66 74 69 6d 65 28  ow') - strftime(
16a20 27 25 73 27 2c 27 32 30 30 34 2d 30 31 2d 30 31  '%s','2004-01-01
16a30 20 30 32 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f 62   02:34:56');.</b
16a40 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
16a50 3c 70 3e 0a 43 6f 6d 70 75 74 65 20 74 68 65 20  <p>.Compute the 
16a60 64 61 74 65 20 6f 66 20 74 68 65 20 66 69 72 73  date of the firs
16a70 74 20 54 75 65 73 64 61 79 20 69 6e 20 4f 63 74  t Tuesday in Oct
16a80 6f 62 65 72 0a 66 6f 72 20 74 68 65 20 63 75 72  ober.for the cur
16a90 72 65 6e 74 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a  rent year..</p>.
16aa0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
16ab0 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77  SELECT date('now
16ac0 27 2c 27 73 74 61 72 74 20 6f 66 20 79 65 61 72  ','start of year
16ad0 27 2c 27 2b 39 20 6d 6f 6e 74 68 73 27 2c 27 77  ','+9 months','w
16ae0 65 65 6b 64 61 79 20 32 27 29 3b 0a 3c 2f 62 6c  eekday 2');.</bl
16af0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
16b00 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 74 69  p>Compute the ti
16b10 6d 65 20 73 69 6e 63 65 20 74 68 65 20 75 6e 69  me since the uni
16b20 78 20 65 70 6f 63 68 20 69 6e 20 73 65 63 6f 6e  x epoch in secon
16b30 64 73 20 0a 28 6c 69 6b 65 20 73 74 72 66 74 69  ds .(like strfti
16b40 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 65  me('%s','now') e
16b50 78 63 65 70 74 20 69 6e 63 6c 75 64 65 73 20 66  xcept includes f
16b60 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 29 3a  ractional part):
16b70 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
16b80 65 3e 0a 20 20 53 45 4c 45 43 54 20 28 6a 75 6c  e>.  SELECT (jul
16b90 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20  ianday('now') - 
16ba0 32 34 34 30 35 38 37 2e 35 29 2a 38 36 34 30 30  2440587.5)*86400
16bb0 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  .0;.</blockquote
16bc0 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76 65 61 74 73  >)^..<h3>Caveats
16bd0 20 41 6e 64 20 42 75 67 73 3c 2f 68 33 3e 0a 0a   And Bugs</h3>..
16be0 3c 70 3e 54 68 65 20 63 6f 6d 70 75 74 61 74 69  <p>The computati
16bf0 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d 65  on of local time
16c00 20 64 65 70 65 6e 64 73 20 68 65 61 76 69 6c 79   depends heavily
16c10 20 6f 6e 20 74 68 65 20 77 68 69 6d 20 0a 6f 66   on the whim .of
16c20 20 70 6f 6c 69 74 69 63 69 61 6e 73 20 61 6e 64   politicians and
16c30 20 69 73 20 74 68 75 73 20 64 69 66 66 69 63 75   is thus difficu
16c40 6c 74 20 74 6f 20 67 65 74 20 63 6f 72 72 65 63  lt to get correc
16c50 74 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c  t for .all local
16c60 65 73 2e 20 5e 49 6e 20 74 68 69 73 20 69 6d 70  es. ^In this imp
16c70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65  lementation, the
16c80 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72   standard C libr
16c90 61 72 79 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f  ary .function lo
16ca0 63 61 6c 74 69 6d 65 5f 72 28 29 20 69 73 20 75  caltime_r() is u
16cb0 73 65 64 20 74 6f 20 61 73 73 69 73 74 20 69 6e  sed to assist in
16cc0 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e   the calculation
16cd0 20 6f 66 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e   of .local time.
16ce0 20 20 5e 28 54 68 65 20 0a 6c 6f 63 61 6c 74 69    ^(The .localti
16cf0 6d 65 5f 72 28 29 20 43 20 66 75 6e 63 74 69 6f  me_r() C functio
16d00 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20  n normally only 
16d10 77 6f 72 6b 73 20 66 6f 72 20 79 65 61 72 73 0a  works for years.
16d20 62 65 74 77 65 65 6e 20 31 39 37 30 20 61 6e 64  between 1970 and
16d30 20 32 30 33 37 2e 20 46 6f 72 20 64 61 74 65 73   2037. For dates
16d40 20 6f 75 74 73 69 64 65 20 74 68 69 73 20 72 61   outside this ra
16d50 6e 67 65 2c 20 53 51 4c 69 74 65 20 0a 61 74 74  nge, SQLite .att
16d60 65 6d 70 74 73 20 74 6f 20 6d 61 70 20 74 68 65  empts to map the
16d70 20 79 65 61 72 20 69 6e 74 6f 20 61 6e 20 65 71   year into an eq
16d80 75 69 76 61 6c 65 6e 74 20 79 65 61 72 20 77 69  uivalent year wi
16d90 74 68 69 6e 20 0a 74 68 69 73 20 72 61 6e 67 65  thin .this range
16da0 2c 20 64 6f 20 74 68 65 20 63 61 6c 63 75 6c 61  , do the calcula
16db0 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 70 20 74  tion, then map t
16dc0 68 65 20 79 65 61 72 20 62 61 63 6b 2e 29 5e 3c  he year back.)^<
16dd0 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 73 65  /p>...<p>^(These
16de0 20 66 75 6e 63 74 69 6f 6e 73 20 6f 6e 6c 79 20   functions only 
16df0 77 6f 72 6b 20 66 6f 72 20 64 61 74 65 73 20 62  work for dates b
16e00 65 74 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30  etween 0000-01-0
16e10 31 20 30 30 3a 30 30 3a 30 30 0a 61 6e 64 20 39  1 00:00:00.and 9
16e20 39 39 39 2d 31 32 2d 33 31 20 32 33 3a 35 39 3a  999-12-31 23:59:
16e30 35 39 20 28 6a 75 6c 69 64 61 6e 20 64 61 79 20  59 (julidan day 
16e40 6e 75 6d 62 65 72 73 20 31 37 32 31 30 35 39 2e  numbers 1721059.
16e50 35 20 74 68 72 6f 75 67 68 20 35 33 37 33 34 38  5 through 537348
16e60 34 2e 35 29 2e 29 5e 0a 46 6f 72 20 64 61 74 65  4.5).)^.For date
16e70 73 20 6f 75 74 73 69 64 65 20 74 68 61 74 20 72  s outside that r
16e80 61 6e 67 65 2c 20 74 68 65 20 72 65 73 75 6c 74  ange, the result
16e90 73 20 6f 66 20 74 68 65 73 65 0a 66 75 6e 63 74  s of these.funct
16ea0 69 6f 6e 73 20 61 72 65 20 75 6e 64 65 66 69 6e  ions are undefin
16eb0 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d  ed.</p>..<p>Non-
16ec0 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c  Vista Windows pl
16ed0 61 74 66 6f 72 6d 73 20 6f 6e 6c 79 20 73 75 70  atforms only sup
16ee0 70 6f 72 74 20 6f 6e 65 20 73 65 74 20 6f 66 20  port one set of 
16ef0 44 53 54 20 72 75 6c 65 73 2e 20 0a 56 69 73 74  DST rules. .Vist
16f00 61 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 73 20  a only supports 
16f10 74 77 6f 2e 20 54 68 65 72 65 66 6f 72 65 2c 20  two. Therefore, 
16f20 6f 6e 20 74 68 65 73 65 20 70 6c 61 74 66 6f 72  on these platfor
16f30 6d 73 2c 20 0a 68 69 73 74 6f 72 69 63 61 6c 20  ms, .historical 
16f40 44 53 54 20 63 61 6c 63 75 6c 61 74 69 6f 6e 73  DST calculations
16f50 20 77 69 6c 6c 20 62 65 20 69 6e 63 6f 72 72 65   will be incorre
16f60 63 74 2e 20 0a 46 6f 72 20 65 78 61 6d 70 6c 65  ct. .For example
16f70 2c 20 69 6e 20 74 68 65 20 55 53 2c 20 69 6e 20  , in the US, in 
16f80 32 30 30 37 20 74 68 65 20 44 53 54 20 72 75 6c  2007 the DST rul
16f90 65 73 20 63 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e  es changed. .Non
16fa0 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70  -Vista Windows p
16fb0 6c 61 74 66 6f 72 6d 73 20 61 70 70 6c 79 20 74  latforms apply t
16fc0 68 65 20 6e 65 77 20 32 30 30 37 20 44 53 54 20  he new 2007 DST 
16fd0 72 75 6c 65 73 20 0a 74 6f 20 61 6c 6c 20 70 72  rules .to all pr
16fe0 65 76 69 6f 75 73 20 79 65 61 72 73 20 61 73 20  evious years as 
16ff0 77 65 6c 6c 2e 20 56 69 73 74 61 20 64 6f 65 73  well. Vista does
17000 20 73 6f 6d 65 77 68 61 74 20 62 65 74 74 65 72   somewhat better
17010 0a 67 65 74 74 69 6e 67 20 72 65 73 75 6c 74 73  .getting results
17020 20 63 6f 72 72 65 63 74 20 62 61 63 6b 20 74 6f   correct back to
17030 20 31 39 38 36 2c 20 77 68 65 6e 20 74 68 65 20   1986, when the 
17040 72 75 6c 65 73 20 77 65 72 65 20 61 6c 73 6f 20  rules were also 
17050 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  changed.</p>..<p
17060 3e 41 6c 6c 20 69 6e 74 65 72 6e 61 6c 20 63 6f  >All internal co
17070 6d 70 75 74 61 74 69 6f 6e 73 20 61 73 73 75 6d  mputations assum
17080 65 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65  e the .[http://e
17090 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
170a0 77 69 6b 69 2f 47 72 65 67 6f 72 69 61 6e 5f 63  wiki/Gregorian_c
170b0 61 6c 65 6e 64 61 72 20 7c 20 47 72 65 67 6f 72  alendar | Gregor
170c0 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d 0a 73 79  ian calendar].sy
170d0 73 74 65 6d 2e 20 20 49 74 20 69 73 20 61 6c 73  stem.  It is als
170e0 6f 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 65  o assumed that e
170f0 76 65 72 79 0a 64 61 79 20 69 73 20 65 78 61 63  very.day is exac
17100 74 6c 79 20 38 36 34 30 30 20 73 65 63 6f 6e 64  tly 86400 second
17110 73 20 69 6e 20 64 75 72 61 74 69 6f 6e 2e 3c 2f  s in duration.</
17120 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
17130 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17170 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
17180 20 7b 41 67 67 72 65 67 61 74 65 20 46 75 6e 63   {Aggregate Func
17190 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63 20 7b  tions} aggfunc {
171a0 2a 61 67 67 66 75 6e 63 7d 0a 3c 2f 74 63 6c 3e  *aggfunc}.</tcl>
171b0 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72 65 67  ..<p>.The aggreg
171c0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68  ate functions sh
171d0 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76  own below are av
171e0 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
171f0 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  lt.  Additional.
17200 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17210 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43  ons written in C
17220 20 6d 61 79 20 62 65 20 61 64 64 65 64 20 75 73   may be added us
17230 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69 74 65  ing the .[sqlite
17240 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
17250 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70  n()]</a>.API.</p
17260 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20 61  >..<p>.^In any a
17270 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17280 6e 20 74 68 61 74 20 74 61 6b 65 73 20 61 20 73  n that takes a s
17290 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20  ingle argument, 
172a0 74 68 61 74 20 61 72 67 75 6d 65 6e 74 0a 63 61  that argument.ca
172b0 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  n be preceded by
172c0 20 74 68 65 20 6b 65 79 77 6f 72 64 20 44 49 53   the keyword DIS
172d0 54 49 4e 43 54 2e 20 20 5e 49 6e 20 73 75 63 68  TINCT.  ^In such
172e0 20 63 61 73 65 73 2c 20 64 75 70 6c 69 63 61 74   cases, duplicat
172f0 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 66  e.elements are f
17300 69 6c 74 65 72 65 64 20 62 65 66 6f 72 65 20 62  iltered before b
17310 65 69 6e 67 20 70 61 73 73 65 64 20 69 6e 74 6f  eing passed into
17320 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 66   the aggregate f
17330 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78  unction..^For ex
17340 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63 74  ample, the funct
17350 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74 69  ion "count(disti
17360 6e 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65 74  nct X)" will ret
17370 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  urn the number.o
17380 66 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75 65  f distinct value
17390 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e  s of column X in
173a0 73 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f 74  stead of the tot
173b0 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  al number of non
173c0 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20  -null.values in 
173d0 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a  column X..</p>..
173e0 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20  <table border=0 
173f0 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a  cellpadding=10>.
17400 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61  <tcl>.funcdef {a
17410 76 67 28 58 29 7d 20 7b 2a 61 76 67 20 7b 61 76  vg(X)} {*avg {av
17420 67 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  g() aggregate fu
17430 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
17440 65 20 61 76 67 28 29 20 66 75 6e 63 74 69 6f 6e  e avg() function
17450 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  .  returns the a
17460 76 65 72 61 67 65 20 76 61 6c 75 65 20 6f 66 20  verage value of 
17470 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e  all non-NULL <i>
17480 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61 0a 20  X</i> within a. 
17490 20 67 72 6f 75 70 2e 20 20 5e 53 74 72 69 6e 67   group.  ^String
174a0 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65 73   and BLOB values
174b0 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f   that do not loo
174c0 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20 61  k like numbers a
174d0 72 65 0a 20 20 69 6e 74 65 72 70 72 65 74 65 64  re.  interpreted
174e0 20 61 73 20 30 2e 0a 20 20 5e 54 68 65 20 72 65   as 0..  ^The re
174f0 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73  sult of avg() is
17500 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69   always a floati
17510 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 61  ng point value a
17520 73 20 6c 6f 6e 67 20 61 73 0a 20 20 61 74 20 74  s long as.  at t
17530 68 65 72 65 20 69 73 20 61 74 20 6c 65 61 73 74  here is at least
17540 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e   one non-NULL in
17550 70 75 74 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a  put even if all.
17560 20 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74    inputs are int
17570 65 67 65 72 73 2e 20 20 5e 54 68 65 20 72 65 73  egers.  ^The res
17580 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73 20  ult of avg() is 
17590 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79  NULL if and only
175a0 20 69 66 0a 20 20 74 68 65 72 65 20 61 72 65 20   if.  there are 
175b0 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75  no non-NULL inpu
175c0 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64 65 66  ts.  .}..funcdef
175d0 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75 6e 74   {count(X) count
175e0 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63 6f  (*)} {*count {co
175f0 75 6e 74 28 29 20 61 67 67 72 65 67 61 74 65 20  unt() aggregate 
17600 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
17610 54 68 65 20 63 6f 75 6e 74 28 58 29 20 66 75 6e  The count(X) fun
17620 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20  ction returns.  
17630 61 20 63 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e  a count of the n
17640 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 0a 20  umber of times. 
17650 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69   that <i>X</i> i
17660 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20  s not NULL in a 
17670 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 63 6f 75  group.  ^The cou
17680 6e 74 28 2a 29 20 66 75 6e 63 74 69 6f 6e 0a 20  nt(*) function. 
17690 20 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d 65   (with no argume
176a0 6e 74 73 29 20 72 65 74 75 72 6e 73 20 74 68 65  nts) returns the
176b0 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
176c0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f   rows in the gro
176d0 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  up..}..funcdef {
176e0 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 29 20  group_concat(X) 
176f0 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 2c 59  group_concat(X,Y
17700 29 7d 20 7b 0a 20 20 2a 67 72 6f 75 70 5f 63 6f  )} {.  *group_co
17710 6e 63 61 74 20 7b 67 72 6f 75 70 5f 63 6f 6e 63  ncat {group_conc
17720 61 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66  at() aggregate f
17730 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e  unction}.} {.  ^
17740 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74  The group_concat
17750 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
17760 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77  rns.  a string w
17770 68 69 63 68 20 69 73 20 74 68 65 20 63 6f 6e 63  hich is the conc
17780 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20 61  atenation of.  a
17790 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  ll non-NULL valu
177a0 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20  es of <i>X</i>. 
177b0 20 5e 49 66 20 70 61 72 61 6d 65 74 65 72 20 3c   ^If parameter <
177c0 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65 73 65  i>Y</i> is prese
177d0 6e 74 20 74 68 65 6e 0a 20 20 69 73 20 69 73 20  nt then.  is is 
177e0 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61  used as the sepa
177f0 72 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e 20  rator.  between 
17800 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e  instances of <i>
17810 58 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d 61  X</i>.  ^A comma
17820 20 28 22 2c 22 29 20 69 73 20 75 73 65 64 20 61   (",") is used a
17830 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a  s the separator.
17840 20 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73    if <i>Y</i> is
17850 20 6f 6d 69 74 74 65 64 2e 20 20 54 68 65 20 6f   omitted.  The o
17860 72 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6e 63  rder of the conc
17870 61 74 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74  atenated element
17880 73 20 69 73 0a 20 20 61 72 62 69 74 72 61 72 79  s is.  arbitrary
17890 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61  ..}..funcdef {ma
178a0 78 28 58 29 7d 20 7b 2a 6d 61 78 41 67 67 46 75  x(X)} {*maxAggFu
178b0 6e 63 20 2a 61 67 67 5f 6d 61 78 20 7b 6d 61 78  nc *agg_max {max
178c0 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
178d0 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
178e0 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
178f0 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75   function.  retu
17900 72 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  rns the maximum 
17910 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c  value of all val
17920 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
17930 2e 0a 20 20 5e 54 68 65 20 6d 61 78 69 6d 75 6d  ..  ^The maximum
17940 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 76 61   value is the va
17950 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62  lue that would b
17960 65 20 72 65 74 75 72 6e 65 64 20 6c 61 73 74 20  e returned last 
17970 69 6e 20 61 6e 0a 20 20 4f 52 44 45 52 20 42 59  in an.  ORDER BY
17980 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 63 6f 6c   on the same col
17990 75 6d 6e 2e 20 20 5e 41 67 67 72 65 67 61 74 65  umn.  ^Aggregate
179a0 20 6d 61 78 28 29 20 72 65 74 75 72 6e 73 20 4e   max() returns N
179b0 55 4c 4c 20 0a 20 20 69 66 20 61 6e 64 20 6f 6e  ULL .  if and on
179c0 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ly if there are 
179d0 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  no non-NULL valu
179e0 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
179f0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e  .}..funcdef {min
17a00 28 58 29 7d 20 7b 2a 6d 69 6e 41 67 67 46 75 6e  (X)} {*minAggFun
17a10 63 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e 28  c *agg_min {min(
17a20 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
17a30 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20  tion}} {.  ^The 
17a40 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20  min() aggregate 
17a50 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72  function.  retur
17a60 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e  ns the minimum n
17a70 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66  on-NULL value of
17a80 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74   all values in t
17a90 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65  he group..  ^The
17aa0 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69   minimum value i
17ab0 73 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d  s the first non-
17ac0 4e 55 4c 4c 20 76 61 6c 75 65 20 74 68 61 74 20  NULL value that 
17ad0 77 6f 75 6c 64 20 61 70 70 65 61 72 0a 20 20 69  would appear.  i
17ae0 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6f 66  n an ORDER BY of
17af0 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20 5e   the column..  ^
17b00 41 67 67 72 65 67 61 74 65 20 6d 69 6e 28 29 20  Aggregate min() 
17b10 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20  returns NULL if 
17b20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72  and only if ther
17b30 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
17b40 4c 0a 20 20 76 61 6c 75 65 73 20 69 6e 20 74 68  L.  values in th
17b50 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63  e group..}..func
17b60 64 65 66 20 7b 73 75 6d 28 58 29 20 74 6f 74 61  def {sum(X) tota
17b70 6c 28 58 29 7d 20 7b 0a 20 20 2a 73 75 6d 46 75  l(X)} {.  *sumFu
17b80 6e 63 20 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a 20  nc *sum *total. 
17b90 20 7b 73 75 6d 28 29 20 61 67 67 72 65 67 61 74   {sum() aggregat
17ba0 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b 74  e function}.  {t
17bb0 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74 65  otal() aggregate
17bc0 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20   function}.} {. 
17bd0 20 5e 54 68 65 20 73 75 6d 28 29 20 61 6e 64 20   ^The sum() and 
17be0 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74  total() aggregat
17bf0 65 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20 72 65  e functions.  re
17c00 74 75 72 6e 20 73 75 6d 20 6f 66 20 61 6c 6c 20  turn sum of all 
17c10 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20  non-NULL values 
17c20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20  in the group..  
17c30 5e 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f  ^If there are no
17c40 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20   non-NULL input 
17c50 72 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29 20  rows then sum() 
17c60 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20 62  returns.  NULL b
17c70 75 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75 72  ut total() retur
17c80 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20 69  ns 0.0..  NULL i
17c90 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61  s not normally a
17ca0 20 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74 20   helpful result 
17cb0 66 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20 6e  for the sum of n
17cc0 6f 20 72 6f 77 73 0a 20 20 62 75 74 20 74 68 65  o rows.  but the
17cd0 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72 65   SQL standard re
17ce0 71 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d 6f  quires it and mo
17cf0 73 74 20 6f 74 68 65 72 0a 20 20 53 51 4c 20 64  st other.  SQL d
17d00 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20  atabase engines 
17d10 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20  implement sum() 
17d20 74 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c 69  that way so SQLi
17d30 74 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74 68  te does it in th
17d40 65 0a 20 20 73 61 6d 65 20 77 61 79 20 69 6e 20  e.  same way in 
17d50 6f 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d 70  order to be comp
17d60 61 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e 6f  atible.   The no
17d70 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61 6c  n-standard total
17d80 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69 73  () function.  is
17d90 20 70 72 6f 76 69 64 65 64 20 61 73 20 61 20 63   provided as a c
17da0 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74 6f  onvenient way to
17db0 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68 69   work around thi
17dc0 73 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65 6d  s design problem
17dd0 0a 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61  .  in the SQL la
17de0 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c  nguage.</p>..  <
17df0 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  p>^The result of
17e00 20 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77 61   total() is alwa
17e10 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ys a floating po
17e20 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68  int value..  ^Th
17e30 65 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d 28  e result of sum(
17e40 29 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  ) is an integer 
17e50 76 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e  value if all non
17e60 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72 65  -NULL inputs are
17e70 20 69 6e 74 65 67 65 72 73 2e 0a 20 20 5e 49 66   integers..  ^If
17e80 20 61 6e 79 20 69 6e 70 75 74 20 74 6f 20 73 75   any input to su
17e90 6d 28 29 20 69 73 20 6e 65 69 74 68 65 72 20 61  m() is neither a
17ea0 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 4e  n integer or a N
17eb0 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28 29  ULL.  then sum()
17ec0 20 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74   returns a float
17ed0 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a  ing point value.
17ee0 20 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65    which might be
17ef0 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f   an approximatio
17f00 6e 20 74 6f 20 74 68 65 20 74 72 75 65 20 73 75  n to the true su
17f10 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53 75  m.</p>..  <p>^Su
17f20 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f 77 20 61  m() will throw a
17f30 6e 20 22 69 6e 74 65 67 65 72 20 6f 76 65 72 66  n "integer overf
17f40 6c 6f 77 22 20 65 78 63 65 70 74 69 6f 6e 20 69  low" exception i
17f50 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61  f all inputs.  a
17f60 72 65 20 69 6e 74 65 67 65 72 73 20 6f 72 20 4e  re integers or N
17f70 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74  ULL.  and an int
17f80 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63  eger overflow oc
17f90 63 75 72 73 20 61 74 20 61 6e 79 20 70 6f 69 6e  curs at any poin
17fa0 74 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6d  t during the com
17fb0 70 75 74 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f 74  putation..  ^Tot
17fc0 61 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f 77  al() never throw
17fd0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65  s an integer ove
17fe0 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a  rflow..}.</tcl>.
17ff0 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a  </table>..<tcl>.
18000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
18050 65 63 74 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e  ection INSERT in
18060 73 65 72 74 20 7b 49 4e 53 45 52 54 20 2a 49 4e  sert {INSERT *IN
18070 53 45 52 54 73 7d 0a 0a 42 75 62 62 6c 65 44 69  SERTs}..BubbleDi
18080 61 67 72 61 6d 20 69 6e 73 65 72 74 2d 73 74 6d  agram insert-stm
18090 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  t 1.</tcl>..<p>T
180a0 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  he INSERT statem
180b0 65 6e 74 20 63 6f 6d 65 73 20 69 6e 20 74 68 72  ent comes in thr
180c0 65 65 20 62 61 73 69 63 20 66 6f 72 6d 73 2e 20  ee basic forms. 
180d0 20 5e 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d   ^The first form
180e0 0a 28 77 69 74 68 20 74 68 65 20 22 56 41 4c 55  .(with the "VALU
180f0 45 53 22 20 6b 65 79 77 6f 72 64 29 20 63 72 65  ES" keyword) cre
18100 61 74 65 73 20 61 20 73 69 6e 67 6c 65 20 6e 65  ates a single ne
18110 77 20 72 6f 77 20 69 6e 20 61 6e 20 65 78 69 73  w row in an exis
18120 74 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 49 66 20  ting table..^If 
18130 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69  no column-list i
18140 73 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  s specified then
18150 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76   the number of v
18160 61 6c 75 65 73 20 6d 75 73 74 0a 62 65 20 74 68  alues must.be th
18170 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75  e same as the nu
18180 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
18190 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 5e  in the table.  ^
181a0 49 66 20 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74  If a column-list
181b0 0a 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74  .is specified, t
181c0 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  hen the number o
181d0 66 20 76 61 6c 75 65 73 20 6d 75 73 74 20 6d 61  f values must ma
181e0 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  tch the number o
181f0 66 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75  f.specified colu
18200 6d 6e 73 2e 20 20 5e 43 6f 6c 75 6d 6e 73 20 6f  mns.  ^Columns o
18210 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
18220 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69   do not appear i
18230 6e 20 74 68 65 0a 63 6f 6c 75 6d 6e 20 6c 69 73  n the.column lis
18240 74 20 61 72 65 20 66 69 6c 6c 65 64 20 77 69 74  t are filled wit
18250 68 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  h the default va
18260 6c 75 65 2c 20 6f 72 20 77 69 74 68 20 4e 55 4c  lue, or with NUL
18270 4c 20 69 66 20 6e 6f 0a 64 65 66 61 75 6c 74 20  L if no.default 
18280 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69  value is specifi
18290 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ed..</p>..<p>^Th
182a0 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66  e second form of
182b0 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61 74   the INSERT stat
182c0 65 6d 65 6e 74 20 74 61 6b 65 73 20 69 74 73 20  ement takes its 
182d0 64 61 74 61 20 66 72 6f 6d 20 61 0a 53 45 4c 45  data from a.SELE
182e0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e  CT statement.  ^
182f0 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
18300 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73  lumns in the res
18310 75 6c 74 20 6f 66 20 74 68 65 0a 53 45 4c 45 43  ult of the.SELEC
18320 54 20 6d 75 73 74 20 65 78 61 63 74 6c 79 20 6d  T must exactly m
18330 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20  atch the number 
18340 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
18350 65 20 74 61 62 6c 65 20 69 66 0a 6e 6f 20 63 6f  e table if.no co
18360 6c 75 6d 6e 20 6c 69 73 74 20 69 73 20 73 70 65  lumn list is spe
18370 63 69 66 69 65 64 2c 20 6f 72 20 69 74 20 6d 75  cified, or it mu
18380 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d  st match the num
18390 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 6e  ber of columns.n
183a0 61 6d 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75  amed in the colu
183b0 6d 6e 20 6c 69 73 74 2e 20 20 5e 41 20 6e 65 77  mn list.  ^A new
183c0 20 65 6e 74 72 79 20 69 73 20 6d 61 64 65 20 69   entry is made i
183d0 6e 20 74 68 65 20 74 61 62 6c 65 0a 66 6f 72 20  n the table.for 
183e0 65 76 65 72 79 20 72 6f 77 20 6f 66 20 74 68 65  every row of the
183f0 20 53 45 4c 45 43 54 20 72 65 73 75 6c 74 2e 20   SELECT result. 
18400 20 5e 54 68 65 20 53 45 4c 45 43 54 20 6d 61 79   ^The SELECT may
18410 20 62 65 20 73 69 6d 70 6c 65 0a 6f 72 20 63 6f   be simple.or co
18420 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mpound.</p>..<p>
18430 5e 54 68 65 20 74 68 69 72 64 20 66 6f 72 6d 20  ^The third form 
18440 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  of an INSERT sta
18450 74 65 6d 65 6e 74 20 69 73 20 77 69 74 68 20 44  tement is with D
18460 45 46 41 55 4c 54 20 56 41 4c 55 45 53 2e 0a 5e  EFAULT VALUES..^
18470 28 54 68 65 20 49 4e 53 45 52 54 20 2e 2e 2e 20  (The INSERT ... 
18480 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 20 73  DEFAULT VALUES s
18490 74 61 74 65 6d 65 6e 74 20 73 69 6d 70 6c 79 20  tatement simply 
184a0 63 72 65 61 74 65 73 20 61 20 73 69 6e 67 6c 65  creates a single
184b0 20 6e 65 77 0a 72 6f 77 20 69 6e 20 74 68 65 20   new.row in the 
184c0 74 61 62 6c 65 20 69 6e 20 77 68 69 63 68 20 65  table in which e
184d0 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 66 69  ach column is fi
184e0 6c 6c 65 64 20 77 69 74 68 20 69 74 73 20 64 65  lled with its de
184f0 66 61 75 6c 74 20 76 61 6c 75 65 2e 29 5e 3c 2f  fault value.)^</
18500 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69  p>..<p>^The opti
18510 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c  onal conflict-cl
18520 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20  ause allows the 
18530 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66  specification of
18540 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a   an alternative.
18550 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c  constraint confl
18560 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
18570 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20  lgorithm to use 
18580 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20  during this one 
18590 49 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a  INSERT command..
185a0 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20  See the section 
185b0 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c  titled.[ON CONFL
185c0 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f  ICT] for additio
185d0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
185e0 0a 5e 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c  .^For compatibil
185f0 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2c 20  ity with MySQL, 
18600 74 68 65 20 70 61 72 73 65 72 20 61 6c 6c 6f 77  the parser allow
18610 73 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65  s the use of the
18620 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20  .single keyword 
18630 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65  <a href="lang_re
18640 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c  place.html">REPL
18650 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61  ACE</a> as an .a
18660 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52 54  lias for "INSERT
18670 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 3c 2f   OR REPLACE"..</
18680 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 70 74  p>..<p>^(The opt
18690 69 6f 6e 61 6c 20 22 3c 69 3e 64 61 74 61 62 61  ional "<i>databa
186a0 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c  se-name</i><b>.<
186b0 2f 62 3e 22 20 70 72 65 66 69 78 20 6f 6e 20 74  /b>" prefix on t
186c0 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65  he <i>table-name
186d0 3c 2f 69 3e 0a 69 73 20 73 75 70 70 6f 72 74 20  </i>.is support 
186e0 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20 49 4e  for top-level IN
186f0 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20  SERT statements 
18700 6f 6e 6c 79 2e 29 5e 20 20 5e 54 68 65 20 74 61  only.)^  ^The ta
18710 62 6c 65 20 6e 61 6d 65 20 6d 75 73 74 20 62 65  ble name must be
18720 0a 75 6e 71 75 61 6c 69 66 69 65 64 20 66 6f 72  .unqualified for
18730 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
18740 74 73 20 74 68 61 74 20 6f 63 63 75 72 20 77 69  ts that occur wi
18750 74 68 69 6e 20 5b 43 52 45 41 54 45 20 54 52 49  thin [CREATE TRI
18760 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 73  GGER] statements
18770 2e 0a 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68  ..^Similarly, th
18780 65 20 22 44 45 46 41 55 4c 54 20 56 41 4c 55 45  e "DEFAULT VALUE
18790 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49  S" form of the I
187a0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
187b0 69 73 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72  is supported for
187c0 0a 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52  .top-level INSER
187d0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c  T statements onl
187e0 79 20 61 6e 64 20 6e 6f 74 20 66 6f 72 20 49 4e  y and not for IN
187f0 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20  SERT statements 
18800 77 69 74 68 69 6e 0a 74 72 69 67 67 65 72 73 2e  within.triggers.
18810 0a 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  .<p>..<tcl>.####
18820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18860 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
18870 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  on {ON CONFLICT 
18880 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74  clause} conflict
18890 20 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75   {{conflict clau
188a0 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54  se} {ON CONFLICT
188b0 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
188c0 6d 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73  m conflict-claus
188d0 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  e.</tcl>..<p>The
188e0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
188f0 75 73 65 20 69 73 20 6e 6f 74 20 61 20 73 65 70  use is not a sep
18900 61 72 61 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e  arate SQL comman
18910 64 2e 20 20 49 74 20 69 73 20 61 0a 6e 6f 6e 2d  d.  It is a.non-
18920 73 74 61 6e 64 61 72 64 20 63 6c 61 75 73 65 20  standard clause 
18930 74 68 61 74 20 63 61 6e 20 61 70 70 65 61 72 20  that can appear 
18940 69 6e 20 6d 61 6e 79 20 6f 74 68 65 72 20 53 51  in many other SQ
18950 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69  L commands..It i
18960 73 20 67 69 76 65 6e 20 69 74 73 20 6f 77 6e 20  s given its own 
18970 73 65 63 74 69 6f 6e 20 69 6e 20 74 68 69 73 20  section in this 
18980 64 6f 63 75 6d 65 6e 74 20 62 65 63 61 75 73 65  document because
18990 20 69 74 20 69 73 20 6e 6f 74 0a 70 61 72 74 20   it is not.part 
189a0 6f 66 20 73 74 61 6e 64 61 72 64 20 53 51 4c 20  of standard SQL 
189b0 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20 6d 69  and therefore mi
189c0 67 68 74 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c  ght not be famil
189d0 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  iar.</p>..<p>^Th
189e0 65 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65  e syntax for the
189f0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
18a00 75 73 65 20 69 73 20 61 73 20 73 68 6f 77 6e 20  use is as shown 
18a10 61 62 6f 76 65 20 66 6f 72 0a 74 68 65 20 43 52  above for.the CR
18a20 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61  EATE TABLE comma
18a30 6e 64 2e 20 20 5e 46 6f 72 20 74 68 65 20 49 4e  nd.  ^For the IN
18a40 53 45 52 54 20 61 6e 64 0a 55 50 44 41 54 45 20  SERT and.UPDATE 
18a50 63 6f 6d 6d 61 6e 64 73 2c 20 74 68 65 20 6b 65  commands, the ke
18a60 79 77 6f 72 64 73 20 22 4f 4e 20 43 4f 4e 46 4c  ywords "ON CONFL
18a70 49 43 54 22 20 61 72 65 20 72 65 70 6c 61 63 65  ICT" are replace
18a80 64 20 62 79 20 22 4f 52 22 20 73 6f 20 74 68 61  d by "OR" so tha
18a90 74 0a 74 68 65 20 73 79 6e 74 61 78 20 72 65 61  t.the syntax rea
18aa0 64 73 20 6d 6f 72 65 20 6e 61 74 75 72 61 6c 6c  ds more naturall
18ab0 79 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  y.  For example,
18ac0 20 69 6e 73 74 65 61 64 20 6f 66 0a 22 49 4e 53   instead of."INS
18ad0 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ERT ON CONFLICT 
18ae0 49 47 4e 4f 52 45 22 20 77 65 20 68 61 76 65 20  IGNORE" we have 
18af0 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52  "INSERT OR IGNOR
18b00 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f 72 64 73  E"..The keywords
18b10 20 63 68 61 6e 67 65 20 62 75 74 20 74 68 65 20   change but the 
18b20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 63  meaning of the c
18b30 6c 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d  lause is the sam
18b40 65 0a 65 69 74 68 65 72 20 77 61 79 2e 3c 2f 70  e.either way.</p
18b50 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e  >..<p>The ON CON
18b60 46 4c 49 43 54 20 63 6c 61 75 73 65 20 61 70 70  FLICT clause app
18b70 6c 69 65 73 20 74 6f 20 55 4e 49 51 55 45 2c 20  lies to UNIQUE, 
18b80 4e 4f 54 20 4e 55 4c 4c 2c 20 61 6e 64 20 43 48  NOT NULL, and CH
18b90 45 43 4b 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20  ECK.constraints 
18ba0 28 61 6e 64 20 74 6f 20 50 52 49 4d 41 52 59 20  (and to PRIMARY 
18bb0 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  KEY constraints 
18bc0 77 68 69 63 68 20 66 6f 72 20 74 68 65 20 70 75  which for the pu
18bd0 72 70 6f 73 65 73 20 0a 6f 66 20 74 68 69 73 20  rposes .of this 
18be0 73 65 63 74 69 6f 6e 20 61 72 65 20 74 68 65 20  section are the 
18bf0 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 55 4e  same thing as UN
18c00 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73  IQUE constraints
18c10 29 2e 0a 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  )..The ON CONFLI
18c20 43 54 20 61 6c 67 6f 72 69 74 68 6d 20 64 6f 65  CT algorithm doe
18c30 73 20 6e 6f 74 0a 61 70 70 6c 79 20 74 6f 20 5b  s not.apply to [
18c40 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
18c50 74 72 61 69 6e 74 73 5d 2e 0a 54 68 65 72 65 20  traints]..There 
18c60 61 72 65 20 66 69 76 65 20 63 6f 6e 66 6c 69 63  are five conflic
18c70 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
18c80 6f 72 69 74 68 6d 20 63 68 6f 69 63 65 73 3a 0a  orithm choices:.
18c90 52 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c  ROLLBACK, ABORT,
18ca0 20 46 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61   FAIL, IGNORE, a
18cb0 6e 64 20 52 45 50 4c 41 43 45 2e 0a 5e 54 68 65  nd REPLACE..^The
18cc0 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63   default conflic
18cd0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
18ce0 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e  orithm is ABORT.
18cf0 20 20 54 68 69 73 0a 69 73 20 77 68 61 74 20 74    This.is what t
18d00 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c  hey mean:</p>..<
18d10 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42  dl>.<dt><b>ROLLB
18d20 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ACK</b></dt>.<dd
18d30 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
18d40 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
18d50 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
18d60 63 75 72 73 2c 20 74 68 65 20 52 4f 4c 4c 42 41  curs, the ROLLBA
18d70 43 4b 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  CK.resolution al
18d80 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74  gorithm aborts t
18d90 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73  he current SQL s
18da0 74 61 74 65 6d 65 6e 74 20 77 69 74 68 0a 61 6e  tatement with.an
18db0 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
18dc0 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 72 6f 6c  NT error and rol
18dd0 6c 73 20 62 61 63 6b 20 74 68 65 20 63 75 72 72  ls back the curr
18de0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
18df0 0a 5e 49 66 20 6e 6f 20 74 72 61 6e 73 61 63 74  .^If no transact
18e00 69 6f 6e 20 69 73 0a 61 63 74 69 76 65 20 28 6f  ion is.active (o
18e10 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 69 6d  ther than the im
18e20 70 6c 69 65 64 20 74 72 61 6e 73 61 63 74 69 6f  plied transactio
18e30 6e 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65  n that is create
18e40 64 20 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61  d on every.comma
18e50 6e 64 29 20 74 68 65 6e 20 74 68 65 20 52 4f 4c  nd) then the ROL
18e60 4c 42 41 43 4b 20 72 65 73 6f 6c 75 74 69 6f 6e  LBACK resolution
18e70 20 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73   algorithm works
18e80 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
18e90 0a 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d  .ABORT algorithm
18ea0 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  .</p></dd>..<dt>
18eb0 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74  <b>ABORT</b></dt
18ec0 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
18ed0 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f  an applicable co
18ee0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
18ef0 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 41  on occurs, the A
18f00 42 4f 52 54 0a 72 65 73 6f 6c 75 74 69 6f 6e 20  BORT.resolution 
18f10 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73  algorithm aborts
18f20 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c   the current SQL
18f30 20 73 74 61 74 65 6d 65 6e 74 0a 77 69 74 68 20   statement.with 
18f40 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  an SQLITE_CONSTR
18f50 41 49 54 20 65 72 72 6f 72 20 61 6e 64 20 62 61  AIT error and ba
18f60 63 6b 73 20 6f 75 74 20 61 6e 79 20 63 68 61 6e  cks out any chan
18f70 67 65 73 0a 6d 61 64 65 20 62 79 20 74 68 65 20  ges.made by the 
18f80 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
18f90 65 6d 65 6e 74 3b 20 62 75 74 20 63 68 61 6e 67  ement; but chang
18fa0 65 73 20 63 61 75 73 65 64 0a 62 79 20 70 72 69  es caused.by pri
18fb0 6f 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  or SQL statement
18fc0 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
18fd0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 72  e transaction ar
18fe0 65 20 70 72 65 73 65 72 76 65 64 20 61 6e 64 20  e preserved and 
18ff0 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  the.transaction 
19000 72 65 6d 61 69 6e 73 20 61 63 74 69 76 65 2e 0a  remains active..
19010 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61  This is the defa
19020 75 6c 74 20 62 65 68 61 76 69 6f 72 20 61 6e 64  ult behavior and
19030 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 70 72   the behavior pr
19040 6f 73 63 72 69 62 65 64 20 74 68 65 20 74 68 65  oscribed the the
19050 20 53 51 4c 0a 73 74 61 6e 64 61 72 64 2e 3c 2f   SQL.standard.</
19060 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e  p></dd>..<dt><b>
19070 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  FAIL</b></dt>.<d
19080 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61  d><p> ^When an a
19090 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72  pplicable constr
190a0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
190b0 63 63 75 72 73 2c 20 74 68 65 20 46 41 49 4c 0a  ccurs, the FAIL.
190c0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
190d0 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20  ithm aborts the 
190e0 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
190f0 65 6d 65 6e 74 20 77 69 74 68 20 61 6e 0a 53 51  ement with an.SQ
19100 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
19110 65 72 72 6f 72 2e 20 20 5e 42 75 74 20 74 68 65  error.  ^But the
19120 20 46 41 49 4c 20 72 65 73 6f 6c 75 74 69 6f 6e   FAIL resolution
19130 20 64 6f 65 73 20 6e 6f 74 0a 62 61 63 6b 20 6f   does not.back o
19140 75 74 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ut prior changes
19150 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74   of the SQL stat
19160 65 6d 65 6e 74 20 74 68 61 74 20 66 61 69 6c 65  ement that faile
19170 64 20 6e 6f 72 20 64 6f 65 73 0a 69 74 20 65 6e  d nor does.it en
19180 64 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  d the transactio
19190 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c  n..^For example,
191a0 20 69 66 20 61 6e 20 55 50 44 41 54 45 0a 73 74   if an UPDATE.st
191b0 61 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65  atement encounte
191c0 72 65 64 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  red a constraint
191d0 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68   violation on th
191e0 65 20 31 30 30 74 68 20 72 6f 77 20 74 68 61 74  e 100th row that
191f0 0a 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  .it attempts to 
19200 75 70 64 61 74 65 2c 20 74 68 65 6e 20 74 68 65  update, then the
19210 20 66 69 72 73 74 20 39 39 20 72 6f 77 20 63 68   first 99 row ch
19220 61 6e 67 65 73 20 61 72 65 20 70 72 65 73 65 72  anges are preser
19230 76 65 64 0a 62 75 74 20 63 68 61 6e 67 65 73 20  ved.but changes 
19240 74 6f 20 72 6f 77 73 20 31 30 30 20 61 6e 64 20  to rows 100 and 
19250 62 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63  beyond never occ
19260 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 28 3c  ur.</p></dd>..(<
19270 64 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e  dt><b>IGNORE</b>
19280 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57  </dt>.<dd><p> ^W
19290 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c  hen an applicabl
192a0 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
192b0 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a  lation occurs, .
192c0 74 68 65 20 49 47 4e 4f 52 45 20 72 65 73 6f 6c  the IGNORE resol
192d0 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
192e0 73 6b 69 70 73 20 74 68 65 20 6f 6e 65 20 72 6f  skips the one ro
192f0 77 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a  w that contains.
19300 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
19310 69 6f 6c 61 74 69 6f 6e 20 61 6e 64 20 63 6f 6e  iolation and con
19320 74 69 6e 75 65 73 20 70 72 6f 63 65 73 73 69 6e  tinues processin
19330 67 20 73 75 62 73 65 71 75 65 6e 74 20 72 6f 77  g subsequent row
19340 73 0a 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61  s.of the SQL sta
19350 74 65 6d 65 6e 74 20 61 73 20 69 66 20 6e 6f 74  tement as if not
19360 68 69 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67 2e  hing went wrong.
19370 0a 4f 74 68 65 72 20 72 6f 77 73 20 62 65 66 6f  .Other rows befo
19380 72 65 20 61 6e 64 20 61 66 74 65 72 20 74 68 65  re and after the
19390 20 72 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61 69   row that.contai
193a0 6e 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69  ned the constrai
193b0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
193c0 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
193d0 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e  ated.normally. ^
193e0 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74 75  No error is retu
193f0 72 6e 65 64 20 77 68 65 6e 20 74 68 65 20 49 47  rned when the IG
19400 4e 4f 52 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  NORE conflict re
19410 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74  solution.algorit
19420 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 3c  hm is used.</p><
19430 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50  /dd>..<dt><b>REP
19440 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  LACE</b></dt>.<d
19450 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 20 55 4e  d><p> ^When a UN
19460 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
19470 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
19480 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20 61 6c  , the REPLACE al
19490 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74 65 73 20  gorithm.deletes 
194a0 70 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f 77  pre-existing row
194b0 73 20 74 68 61 74 20 61 72 65 20 63 61 75 73 69  s that are causi
194c0 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ng the constrain
194d0 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f  t violation.prio
194e0 72 20 74 6f 20 69 6e 73 65 72 74 69 6e 67 20 6f  r to inserting o
194f0 72 20 75 70 64 61 74 69 6e 67 20 74 68 65 20 63  r updating the c
19500 75 72 72 65 6e 74 20 72 6f 77 20 61 6e 64 20 74  urrent row and t
19510 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69  he command conti
19520 6e 75 65 73 20 0a 65 78 65 63 75 74 69 6e 67 20  nues .executing 
19530 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61 20  normally..^If a 
19540 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
19550 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
19560 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43  curs, the REPLAC
19570 45 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c  E conflict.resol
19580 75 74 69 6f 6e 20 72 65 70 6c 61 63 65 73 20 74  ution replaces t
19590 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77 69  he NULL value wi
195a0 74 68 0a 68 65 20 64 65 66 61 75 6c 74 20 76 61  th.he default va
195b0 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c  lue for that col
195c0 75 6d 6e 2c 20 6f 72 20 69 66 20 74 68 65 20 63  umn, or if the c
195d0 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66  olumn has no def
195e0 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e  ault.value, then
195f0 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
19600 69 74 68 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49  ithm is used..^I
19610 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  f a CHECK constr
19620 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
19630 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41  ccurs, the REPLA
19640 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  CE conflict reso
19650 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d  lution.algorithm
19660 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 6c 69   always works li
19670 6b 65 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c  ke ABORT.</p>..<
19680 70 3e 5e 57 68 65 6e 20 74 68 65 20 52 45 50 4c  p>^When the REPL
19690 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ACE conflict res
196a0 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79  olution strategy
196b0 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20 69 6e   deletes rows in
196c0 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69 73 66   order to.satisf
196d0 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  y a constraint, 
196e0 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20  [CREATE TRIGGER 
196f0 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67 65 72  | delete trigger
19700 73 5d 20 66 69 72 65 20 69 66 20 61 6e 64 20 6f  s] fire if and o
19710 6e 6c 79 20 69 66 0a 5b 72 65 63 75 72 73 69 76  nly if.[recursiv
19720 65 5f 74 72 69 67 67 65 72 73 20 70 72 61 67 6d  e_triggers pragm
19730 61 20 7c 20 72 65 63 75 72 73 69 76 65 20 74 72  a | recursive tr
19740 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e 61 62  iggers] are enab
19750 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  led.</p>..<p>^Th
19760 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64 61 74  e [sqlite3_updat
19770 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74 65 20  e_hook | update 
19780 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69 6e 76  hook] is not inv
19790 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20 74 68  oked for rows th
197a0 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64 20 62  at.are deleted b
197b0 79 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f  y the REPLACE co
197c0 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
197d0 6e 20 73 74 72 65 74 65 67 79 2e 20 20 5e 4e 6f  n stretegy.  ^No
197e0 72 20 64 6f 65 73 0a 52 45 50 4c 41 43 45 20 69  r does.REPLACE i
197f0 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 5b 73 71  ncrement the [sq
19800 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20 7c 20  lite3_changes | 
19810 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 2e  change counter].
19820 0a 54 68 65 20 65 78 63 65 70 74 69 6f 6e 61 6c  .The exceptional
19830 20 62 65 68 61 76 69 6f 72 73 20 64 65 66 69 6e   behaviors defin
19840 65 64 20 69 6e 20 74 68 69 73 20 70 61 72 61 67  ed in this parag
19850 72 61 70 68 20 6d 69 67 68 74 20 63 68 61 6e 67  raph might chang
19860 65 20 0a 69 6e 20 61 20 66 75 74 75 72 65 20 72  e .in a future r
19870 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c  elease.</p>.</dl
19880 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72  >..<p>^The algor
19890 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69  ithm specified i
198a0 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65 20  n the OR clause 
198b0 6f 66 20 61 20 49 4e 53 45 52 54 20 6f 72 20 55  of a INSERT or U
198c0 50 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20  PDATE.overrides 
198d0 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70  any algorithm sp
198e0 65 63 69 66 69 65 64 20 69 6e 20 61 20 43 52 45  ecified in a CRE
198f0 41 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20 6e  ATE TABLE..^If n
19900 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73  o algorithm is s
19910 70 65 63 69 66 69 65 64 20 61 6e 79 77 68 65 72  pecified anywher
19920 65 2c 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67  e, the ABORT alg
19930 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c  orithm is used.<
19940 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
19950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19990 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
199a0 6e 20 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65  n REINDEX reinde
199b0 78 20 52 45 49 4e 44 45 58 0a 0a 42 75 62 62 6c  x REINDEX..Bubbl
199c0 65 44 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78  eDiagram reindex
199d0 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
199e0 3c 70 3e 5e 54 68 65 20 52 45 49 4e 44 45 58 20  <p>^The REINDEX 
199f0 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20  command is used 
19a00 74 6f 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65  to delete and re
19a10 63 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 66  create indices f
19a20 72 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54 68 69  rom scratch..Thi
19a30 73 20 69 73 20 75 73 65 66 75 6c 20 77 68 65 6e  s is useful when
19a40 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   the definition 
19a50 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  of a collation s
19a60 65 71 75 65 6e 63 65 20 68 61 73 20 63 68 61 6e  equence has chan
19a70 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  ged..</p>..<p>^I
19a80 6e 20 74 68 65 20 66 69 72 73 74 20 66 6f 72 6d  n the first form
19a90 2c 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e  , all indices in
19aa0 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
19ab0 74 61 62 61 73 65 73 20 74 68 61 74 20 75 73 65  tabases that use
19ac0 20 74 68 65 0a 6e 61 6d 65 64 20 63 6f 6c 6c 61   the.named colla
19ad0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 72  tion sequence ar
19ae0 65 20 72 65 63 72 65 61 74 65 64 2e 20 5e 28 49  e recreated. ^(I
19af0 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  n the second for
19b00 6d 2c 20 69 66 20 0a 3c 69 3e 26 23 39 31 3b 64  m, if .<i>&#91;d
19b10 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26 23 39  atabase-name.&#9
19b20 33 3b 74 61 62 6c 65 2f 69 6e 64 65 78 2d 6e 61  3;table/index-na
19b30 6d 65 3c 2f 69 3e 20 69 64 65 6e 74 69 66 69 65  me</i> identifie
19b40 73 20 61 20 74 61 62 6c 65 2c 0a 74 68 65 6e 20  s a table,.then 
19b50 61 6c 6c 20 69 6e 64 69 63 65 73 0a 61 73 73 6f  all indices.asso
19b60 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
19b70 74 61 62 6c 65 20 61 72 65 20 72 65 62 75 69 6c  table are rebuil
19b80 74 2e 29 5e 20 5e 49 66 20 61 6e 20 69 6e 64 65  t.)^ ^If an inde
19b90 78 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 2c  x is identified,
19ba0 20 74 68 65 6e 20 6f 6e 6c 79 0a 74 68 69 73 20   then only.this 
19bb0 73 70 65 63 69 66 69 63 20 69 6e 64 65 78 20 69  specific index i
19bc0 73 20 64 65 6c 65 74 65 64 20 61 6e 64 20 72 65  s deleted and re
19bd0 63 72 65 61 74 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c  created..</p>..<
19be0 70 3e 5e 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61  p>^If no <i>data
19bf0 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73  base-name</i> is
19c00 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74   specified and t
19c10 68 65 72 65 20 65 78 69 73 74 73 20 62 6f 74 68  here exists both
19c20 20 61 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65   a table or.inde
19c30 78 20 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f  x and a collatio
19c40 6e 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  n sequence of th
19c50 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 6d 65  e specified name
19c60 2c 20 74 68 65 6e 20 69 6e 64 69 63 65 73 20 61  , then indices a
19c70 73 73 6f 63 69 61 74 65 64 0a 77 69 74 68 20 74  ssociated.with t
19c80 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
19c90 75 65 6e 63 65 20 6f 6e 6c 79 20 61 72 65 20 72  uence only are r
19ca0 65 63 6f 6e 73 74 72 75 63 74 65 64 2e 20 54 68  econstructed. Th
19cb0 69 73 20 61 6d 62 69 67 75 69 74 79 20 6d 61 79  is ambiguity may
19cc0 20 62 65 0a 64 69 73 70 65 6c 6c 65 64 20 62 79   be.dispelled by
19cd0 20 61 6c 77 61 79 73 20 73 70 65 63 69 66 79 69   always specifyi
19ce0 6e 67 20 61 20 3c 69 3e 64 61 74 61 62 61 73 65  ng a <i>database
19cf0 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72  -name</i> when r
19d00 65 69 6e 64 65 78 69 6e 67 20 61 0a 73 70 65 63  eindexing a.spec
19d10 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e  ific table or in
19d20 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  dex...<tcl>.####
19d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19d70 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
19d80 69 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c  ion REPLACE repl
19d90 61 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74  ace REPLACE..</t
19da0 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50  cl>..<p>^The REP
19db0 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20  LACE command is 
19dc0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
19dd0 20 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c   "[ON CONFLICT |
19de0 20 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41   INSERT OR REPLA
19df0 43 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66 20  CE]".variant of 
19e00 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d  the [INSERT] com
19e10 6d 61 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c 69  mand.  .This ali
19e20 61 73 20 69 73 20 70 72 6f 76 69 64 65 64 20 66  as is provided f
19e30 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  or compatibility
19e40 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62   other SQL datab
19e50 61 73 65 20 65 6e 67 69 6e 65 73 2e 20 20 53 65  ase engines.  Se
19e60 65 20 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20  e the .[INSERT] 
19e70 63 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74  command document
19e80 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69  ation for additi
19e90 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
19ea0 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23  .</p>  ..<tcl>.#
19eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ef0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
19f00 65 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65  ection SELECT se
19f10 6c 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65  lect {SELECT que
19f20 72 79 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  ry}..BubbleDiagr
19f30 61 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74 20 31  am select-stmt 1
19f40 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  .BubbleDiagram s
19f50 65 6c 65 63 74 2d 63 6f 72 65 0a 42 75 62 62 6c  elect-core.Bubbl
19f60 65 44 69 61 67 72 61 6d 20 72 65 73 75 6c 74 2d  eDiagram result-
19f70 63 6f 6c 75 6d 6e 0a 42 75 62 62 6c 65 44 69 61  column.BubbleDia
19f80 67 72 61 6d 20 6a 6f 69 6e 2d 73 6f 75 72 63 65  gram join-source
19f90 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  .BubbleDiagram s
19fa0 69 6e 67 6c 65 2d 73 6f 75 72 63 65 0a 42 75 62  ingle-source.Bub
19fb0 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d  bleDiagram join-
19fc0 6f 70 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  op.BubbleDiagram
19fd0 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74   join-constraint
19fe0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6f  .BubbleDiagram o
19ff0 72 64 65 72 69 6e 67 2d 74 65 72 6d 0a 42 75 62  rdering-term.Bub
1a000 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f  bleDiagram compo
1a010 75 6e 64 2d 6f 70 65 72 61 74 6f 72 0a 3c 2f 74  und-operator.</t
1a020 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45  cl>..<p>The SELE
1a030 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
1a040 75 73 65 64 20 74 6f 20 71 75 65 72 79 20 74 68  used to query th
1a050 65 20 64 61 74 61 62 61 73 65 2e 20 20 5e 54 68  e database.  ^Th
1a060 65 0a 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45  e.result of a SE
1a070 4c 45 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20  LECT is zero or 
1a080 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74  more rows of dat
1a090 61 20 77 68 65 72 65 20 65 61 63 68 20 72 6f 77  a where each row
1a0a0 0a 68 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d  .has a fixed num
1a0b0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20  ber of columns. 
1a0c0 20 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20   ^The number of 
1a0d0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 72  columns in the.r
1a0e0 65 73 75 6c 74 20 69 73 20 73 70 65 63 69 66 69  esult is specifi
1a0f0 65 64 20 62 79 20 74 68 65 20 65 78 70 72 65 73  ed by the expres
1a100 73 69 6f 6e 20 6c 69 73 74 20 69 6e 20 62 65 74  sion list in bet
1a110 77 65 65 6e 20 74 68 65 0a 53 45 4c 45 43 54 20  ween the.SELECT 
1a120 61 6e 64 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64  and FROM keyword
1a130 73 2e 20 20 5e 41 6e 79 20 61 72 62 69 74 72 61  s.  ^Any arbitra
1a140 72 79 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61  ry expression ca
1a150 6e 20 62 65 20 75 73 65 64 0a 61 73 20 61 20 72  n be used.as a r
1a160 65 73 75 6c 74 2e 20 20 5e 49 66 20 61 20 72 65  esult.  ^If a re
1a170 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
1a180 69 73 20 7d 0a 68 64 5f 70 75 74 73 20 22 5b 4f  is }.hd_puts "[O
1a190 70 65 72 61 74 6f 72 20 2a 5d 20 74 68 65 6e 20  perator *] then 
1a1a0 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  all columns of a
1a1b0 6c 6c 20 74 61 62 6c 65 73 20 61 72 65 20 73 75  ll tables are su
1a1c0 62 73 74 69 74 75 74 65 64 5c 6e 22 0a 68 64 5f  bstituted\n".hd_
1a1d0 70 75 74 73 20 22 66 6f 72 20 74 68 61 74 20 6f  puts "for that o
1a1e0 6e 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  ne expression.  
1a1f0 5e 28 49 66 20 74 68 65 20 65 78 70 72 65 73 73  ^(If the express
1a200 69 6f 6e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ion is the name 
1a210 6f 66 5c 6e 22 0a 68 64 5f 70 75 74 73 20 22 61  of\n".hd_puts "a
1a220 20 74 61 62 6c 65 20 66 6f 6c 6c 6f 77 65 64 20   table followed 
1a230 62 79 20 5b 4f 70 65 72 61 74 6f 72 20 2e 2a 5d  by [Operator .*]
1a240 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
1a250 20 69 73 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 5c   is all columns\
1a260 6e 22 0a 68 64 5f 70 75 74 73 20 7b 69 6e 20 74  n".hd_puts {in t
1a270 68 61 74 20 6f 6e 65 20 74 61 62 6c 65 2e 3c 2f  hat one table.</
1a280 70 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 44 49  p>)^..<p>^The DI
1a290 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 63  STINCT keyword c
1a2a0 61 75 73 65 73 20 61 20 73 75 62 73 65 74 20 6f  auses a subset o
1a2b0 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 74 6f  f result rows to
1a2c0 20 62 65 20 72 65 74 75 72 6e 65 64 2c 20 0a 69   be returned, .i
1a2d0 6e 20 77 68 69 63 68 20 65 61 63 68 20 72 65 73  n which each res
1a2e0 75 6c 74 20 72 6f 77 20 69 73 20 64 69 66 66 65  ult row is diffe
1a2f0 72 65 6e 74 2e 20 20 5e 4e 55 4c 4c 20 76 61 6c  rent.  ^NULL val
1a300 75 65 73 20 61 72 65 20 6e 6f 74 20 74 72 65 61  ues are not trea
1a310 74 65 64 20 61 73 20 0a 64 69 73 74 69 6e 63 74  ted as .distinct
1a320 20 66 72 6f 6d 20 65 61 63 68 20 6f 74 68 65 72   from each other
1a330 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20  .  ^The default 
1a340 62 65 68 61 76 69 6f 72 20 69 73 20 74 68 61 74  behavior is that
1a350 20 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77 73   all result rows
1a360 20 0a 62 65 20 72 65 74 75 72 6e 65 64 2c 20 77   .be returned, w
1a370 68 69 63 68 20 63 61 6e 20 62 65 20 6d 61 64 65  hich can be made
1a380 20 65 78 70 6c 69 63 69 74 20 77 69 74 68 20 74   explicit with t
1a390 68 65 20 6b 65 79 77 6f 72 64 20 41 4c 4c 2e 3c  he keyword ALL.<
1a3a0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 71 75 65  /p>..<p>^The que
1a3b0 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20 61  ry is executed a
1a3c0 67 61 69 6e 73 74 20 6f 6e 65 20 6f 72 20 6d 6f  gainst one or mo
1a3d0 72 65 20 74 61 62 6c 65 73 20 73 70 65 63 69 66  re tables specif
1a3e0 69 65 64 20 61 66 74 65 72 0a 74 68 65 20 46 52  ied after.the FR
1a3f0 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 20 5e 49 66  OM keyword.  ^If
1a400 20 6d 75 6c 74 69 70 6c 65 20 74 61 62 6c 65 73   multiple tables
1a410 20 6e 61 6d 65 73 20 61 72 65 20 73 65 70 61 72   names are separ
1a420 61 74 65 64 20 62 79 20 63 6f 6d 6d 61 73 2c 0a  ated by commas,.
1a430 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 69  then the query i
1a440 73 20 61 67 61 69 6e 73 74 20 74 68 65 20 63 72  s against the cr
1a450 6f 73 73 20 6a 6f 69 6e 20 6f 66 20 74 68 65 20  oss join of the 
1a460 76 61 72 69 6f 75 73 20 74 61 62 6c 65 73 2e 0a  various tables..
1a470 5e 54 68 65 20 66 75 6c 6c 20 53 51 4c 2d 39 32  ^The full SQL-92
1a480 20 6a 6f 69 6e 20 73 79 6e 74 61 78 20 63 61 6e   join syntax can
1a490 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
1a4a0 20 73 70 65 63 69 66 79 20 6a 6f 69 6e 73 2e 0a   specify joins..
1a4b0 5e 41 20 73 75 62 2d 71 75 65 72 79 0a 69 6e 20  ^A sub-query.in 
1a4c0 70 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20  parentheses may 
1a4d0 62 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66  be substituted f
1a4e0 6f 72 20 61 6e 79 20 74 61 62 6c 65 20 6e 61 6d  or any table nam
1a4f0 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
1a500 61 75 73 65 2e 0a 5e 54 68 65 20 65 6e 74 69 72  ause..^The entir
1a510 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6d 61  e FROM clause ma
1a520 79 20 62 65 20 6f 6d 69 74 74 65 64 2c 20 69 6e  y be omitted, in
1a530 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
1a540 72 65 73 75 6c 74 20 69 73 20 61 0a 73 69 6e 67  result is a.sing
1a550 6c 65 20 72 6f 77 20 63 6f 6e 73 69 73 74 69 6e  le row consistin
1a560 67 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  g of the values 
1a570 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
1a580 6e 20 6c 69 73 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70  n list..</p>..<p
1a590 3e 5e 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  >^The WHERE clau
1a5a0 73 65 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  se can be used t
1a5b0 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62  o limit the numb
1a5c0 65 72 20 6f 66 20 72 6f 77 73 20 6f 76 65 72 0a  er of rows over.
1a5d0 77 68 69 63 68 20 74 68 65 20 71 75 65 72 79 20  which the query 
1a5e0 6f 70 65 72 61 74 65 73 2e 3c 2f 70 3e 0a 0a 3c  operates.</p>..<
1a5f0 70 3e 5e 54 68 65 20 47 52 4f 55 50 20 42 59 20  p>^The GROUP BY 
1a600 63 6c 61 75 73 65 20 63 61 75 73 65 73 20 6f 6e  clause causes on
1a610 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f  e or more rows o
1a620 66 20 74 68 65 20 72 65 73 75 6c 74 20 74 6f 0a  f the result to.
1a630 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f  be combined into
1a640 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
1a650 20 6f 75 74 70 75 74 2e 20 20 54 68 69 73 20 69   output.  This i
1a660 73 20 65 73 70 65 63 69 61 6c 6c 79 20 75 73 65  s especially use
1a670 66 75 6c 0a 77 68 65 6e 20 74 68 65 20 72 65 73  ful.when the res
1a680 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67  ult contains agg
1a690 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1a6a0 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73 73 69  .  ^The expressi
1a6b0 6f 6e 73 20 69 6e 0a 74 68 65 20 47 52 4f 55 50  ons in.the GROUP
1a6c0 20 42 59 20 63 6c 61 75 73 65 20 64 6f 20 3c 65   BY clause do <e
1a6d0 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65 20  m>not</em> have 
1a6e0 74 6f 20 62 65 20 65 78 70 72 65 73 73 69 6f 6e  to be expression
1a6f0 73 20 74 68 61 74 0a 61 70 70 65 61 72 20 69 6e  s that.appear in
1a700 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 5e 54   the result.  ^T
1a710 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
1a720 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 57   is similar to W
1a730 48 45 52 45 20 65 78 63 65 70 74 0a 74 68 61 74  HERE except.that
1a740 20 48 41 56 49 4e 47 20 61 70 70 6c 69 65 73 20   HAVING applies 
1a750 61 66 74 65 72 20 67 72 6f 75 70 69 6e 67 20 68  after grouping h
1a760 61 73 20 6f 63 63 75 72 72 65 64 2e 20 20 5e 54  as occurred.  ^T
1a770 68 65 20 48 41 56 49 4e 47 20 65 78 70 72 65 73  he HAVING expres
1a780 73 69 6f 6e 0a 6d 61 79 20 72 65 66 65 72 20 74  sion.may refer t
1a790 6f 20 76 61 6c 75 65 73 2c 20 65 76 65 6e 20 61  o values, even a
1a7a0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1a7b0 6e 73 2c 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ns, that are not
1a7c0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c   in the result.<
1a7d0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4f 52 44  /p>..<p>^The ORD
1a7e0 45 52 20 42 59 20 63 6c 61 75 73 65 20 63 61 75  ER BY clause cau
1a7f0 73 65 73 20 74 68 65 20 6f 75 74 70 75 74 20 72  ses the output r
1a800 6f 77 73 20 74 6f 20 62 65 20 73 6f 72 74 65 64  ows to be sorted
1a810 2e 20 20 0a 5e 54 68 65 20 61 72 67 75 6d 65 6e  .  .^The argumen
1a820 74 20 74 6f 20 4f 52 44 45 52 20 42 59 20 69 73  t to ORDER BY is
1a830 20 61 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   a list of expre
1a840 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20  ssions that are 
1a850 75 73 65 64 20 61 73 20 74 68 65 0a 6b 65 79 20  used as the.key 
1a860 66 6f 72 20 74 68 65 20 73 6f 72 74 2e 20 20 5e  for the sort.  ^
1a870 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  The expressions 
1a880 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 62  do not have to b
1a890 65 20 70 61 72 74 20 6f 66 20 74 68 65 0a 72 65  e part of the.re
1a8a0 73 75 6c 74 20 66 6f 72 20 61 20 73 69 6d 70 6c  sult for a simpl
1a8b0 65 20 53 45 4c 45 43 54 2c 20 62 75 74 20 69 6e  e SELECT, but in
1a8c0 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45   a compound SELE
1a8d0 43 54 20 65 61 63 68 20 73 6f 72 74 0a 65 78 70  CT each sort.exp
1a8e0 72 65 73 73 69 6f 6e 20 6d 75 73 74 20 65 78 61  ression must exa
1a8f0 63 74 6c 79 20 6d 61 74 63 68 20 6f 6e 65 20 6f  ctly match one o
1a900 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  f the result col
1a910 75 6d 6e 73 2e 20 20 5e 45 61 63 68 0a 73 6f 72  umns.  ^Each.sor
1a920 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  t expression may
1a930 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66   be optionally f
1a940 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 43 4f 4c  ollowed by a COL
1a950 4c 41 54 45 20 6b 65 79 77 6f 72 64 20 61 6e 64  LATE keyword and
1a960 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63  .the name of a c
1a970 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1a980 6e 20 75 73 65 64 20 66 6f 72 20 6f 72 64 65 72  n used for order
1a990 69 6e 67 20 74 65 78 74 20 61 6e 64 2f 6f 72 0a  ing text and/or.
1a9a0 6b 65 79 77 6f 72 64 73 20 41 53 43 20 6f 72 20  keywords ASC or 
1a9b0 44 45 53 43 20 74 6f 20 73 70 65 63 69 66 79 20  DESC to specify 
1a9c0 74 68 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 3c  the sort order.<
1a9d0 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 74 65 72  /p>..<p>Each ter
1a9e0 6d 20 6f 66 20 61 6e 20 4f 52 44 45 52 20 42 59  m of an ORDER BY
1a9f0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 70   expression is p
1aa00 72 6f 63 65 73 73 65 64 20 61 73 20 66 6f 6c 6c  rocessed as foll
1aa10 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  ows:</p>..<ol>.<
1aa20 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52  li><p>^If the OR
1aa30 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
1aa40 6e 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  n is a constant 
1aa50 69 6e 74 65 67 65 72 20 4b 20 74 68 65 6e 20 74  integer K then t
1aa60 68 65 0a 6f 75 74 70 75 74 20 69 73 20 6f 72 64  he.output is ord
1aa70 65 72 65 64 20 62 79 20 74 68 65 20 4b 2d 74 68  ered by the K-th
1aa80 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72   column of the r
1aa90 65 73 75 6c 74 20 73 65 74 2e 3c 2f 70 3e 3c 2f  esult set.</p></
1aaa0 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  li>.<li><p>^If t
1aab0 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
1aac0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65  ession is an ide
1aad0 6e 74 69 66 69 65 72 20 61 6e 64 20 6f 6e 65 20  ntifier and one 
1aae0 6f 66 20 74 68 65 0a 6f 75 74 70 75 74 20 63 6f  of the.output co
1aaf0 6c 75 6d 6e 73 20 68 61 73 20 61 6e 20 61 6c 69  lumns has an ali
1ab00 61 73 20 62 79 20 74 68 65 20 73 61 6d 65 20 6e  as by the same n
1ab10 61 6d 65 2c 20 74 68 65 6e 20 74 68 65 20 6f 75  ame, then the ou
1ab20 74 70 75 74 20 69 73 0a 6f 72 64 65 72 65 64 20  tput is.ordered 
1ab30 62 79 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  by the identifie
1ab40 64 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 3c 2f 6c  d column.</p></l
1ab50 69 3e 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72  i>.<li><p>^Other
1ab60 77 69 73 65 2c 20 74 68 65 20 4f 52 44 45 52 20  wise, the ORDER 
1ab70 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
1ab80 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74   evaluated and t
1ab90 68 65 20 6f 75 74 70 75 74 20 0a 69 73 20 6f 72  he output .is or
1aba0 64 65 72 65 64 20 62 79 20 74 68 65 20 76 61 6c  dered by the val
1abb0 75 65 20 6f 66 20 74 68 61 74 20 65 78 70 72 65  ue of that expre
1abc0 73 73 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ssion.</p></li>.
1abd0 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20  </ol>..<p>^In a 
1abe0 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20  compound SELECT 
1abf0 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 20 74  statement, the t
1ac00 68 69 72 64 20 4f 52 44 45 52 20 42 59 20 6d 61  hird ORDER BY ma
1ac10 74 63 68 69 6e 67 20 72 75 6c 65 0a 72 65 71 75  tching rule.requ
1ac20 69 72 65 73 20 74 68 61 74 20 74 68 65 20 65 78  ires that the ex
1ac30 70 72 65 73 73 69 6f 6e 20 62 65 20 69 64 65 6e  pression be iden
1ac40 74 69 63 61 6c 20 74 6f 20 6f 6e 65 20 6f 66 20  tical to one of 
1ac50 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 0a 74  the columns in.t
1ac60 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20  he result set.  
1ac70 5e 28 54 68 65 20 74 68 72 65 65 20 72 75 6c 65  ^(The three rule
1ac80 73 20 61 72 65 20 66 69 72 73 74 20 61 70 70 6c  s are first appl
1ac90 69 65 64 20 74 6f 20 74 68 65 20 6c 65 66 74 2d  ied to the left-
1aca0 6d 6f 73 74 0a 53 45 4c 45 43 54 20 69 6e 20 74  most.SELECT in t
1acb0 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 20 20 49 66  he compound.  If
1acc0 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
1acd0 64 2c 20 74 68 65 20 73 65 61 72 63 68 20 73 74  d, the search st
1ace0 6f 70 73 2e 20 20 4f 74 68 65 72 77 69 73 65 2c  ops.  Otherwise,
1acf0 0a 74 68 65 20 6e 65 78 74 20 53 45 4c 45 43 54  .the next SELECT
1ad00 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 69 73   to the right is
1ad10 20 74 72 69 65 64 2e 20 20 54 68 69 73 20 63 6f   tried.  This co
1ad20 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 61 20  ntinues until a 
1ad30 6d 61 74 63 68 0a 69 73 20 66 6f 75 6e 64 2e 29  match.is found.)
1ad40 5e 20 20 5e 45 61 63 68 20 74 65 72 6d 20 6f 66  ^  ^Each term of
1ad50 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1ad60 61 75 73 65 20 69 73 20 70 72 6f 63 65 73 73 65  ause is processe
1ad70 64 20 73 65 70 61 72 61 74 65 6c 79 20 0a 61 6e  d separately .an
1ad80 64 20 6d 61 79 20 63 6f 6d 65 20 66 72 6f 6d 20  d may come from 
1ad90 64 69 66 66 65 72 65 6e 74 20 53 45 4c 45 43 54  different SELECT
1ada0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
1adb0 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e  he compound.</p>
1adc0 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  ..<p>^The LIMIT 
1add0 63 6c 61 75 73 65 20 70 6c 61 63 65 73 20 61 6e  clause places an
1ade0 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20   upper bound on 
1adf0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
1ae00 77 73 0a 72 65 74 75 72 6e 65 64 20 69 6e 20 74  ws.returned in t
1ae10 68 65 20 72 65 73 75 6c 74 2e 20 20 5e 41 20 6e  he result.  ^A n
1ae20 65 67 61 74 69 76 65 20 4c 49 4d 49 54 20 69 6e  egative LIMIT in
1ae30 64 69 63 61 74 65 73 20 6e 6f 20 75 70 70 65 72  dicates no upper
1ae40 20 62 6f 75 6e 64 2e 0a 5e 54 68 65 20 6f 70 74   bound..^The opt
1ae50 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 66 6f 6c  ional OFFSET fol
1ae60 6c 6f 77 69 6e 67 20 4c 49 4d 49 54 20 73 70 65  lowing LIMIT spe
1ae70 63 69 66 69 65 73 20 68 6f 77 20 6d 61 6e 79 0a  cifies how many.
1ae80 72 6f 77 73 20 74 6f 20 73 6b 69 70 20 61 74 20  rows to skip at 
1ae90 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
1aea0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
1aeb0 0a 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  .^In a compound 
1aec0 71 75 65 72 79 2c 20 74 68 65 20 4c 49 4d 49 54  query, the LIMIT
1aed0 20 63 6c 61 75 73 65 20 6d 61 79 20 6f 6e 6c 79   clause may only
1aee0 20 61 70 70 65 61 72 20 6f 6e 20 74 68 65 0a 66   appear on the.f
1aef0 69 6e 61 6c 20 53 45 4c 45 43 54 20 73 74 61 74  inal SELECT stat
1af00 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 6c 69 6d 69  ement..^The limi
1af10 74 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20  t is applied to 
1af20 74 68 65 20 65 6e 74 69 72 65 20 71 75 65 72 79  the entire query
1af30 20 6e 6f 74 0a 74 6f 20 74 68 65 20 69 6e 64 69   not.to the indi
1af40 76 69 64 75 61 6c 20 53 45 4c 45 43 54 20 73 74  vidual SELECT st
1af50 61 74 65 6d 65 6e 74 20 74 6f 20 77 68 69 63 68  atement to which
1af60 20 69 74 20 69 73 20 61 74 74 61 63 68 65 64 2e   it is attached.
1af70 0a 5e 4e 6f 74 65 20 74 68 61 74 20 69 66 20 74  .^Note that if t
1af80 68 65 20 4f 46 46 53 45 54 20 6b 65 79 77 6f 72  he OFFSET keywor
1af90 64 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  d is used in the
1afa0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
1afb0 68 65 6e 20 74 68 65 0a 6c 69 6d 69 74 20 69 73  hen the.limit is
1afc0 20 74 68 65 20 66 69 72 73 74 20 6e 75 6d 62 65   the first numbe
1afd0 72 20 61 6e 64 20 74 68 65 20 6f 66 66 73 65 74  r and the offset
1afe0 20 69 73 20 74 68 65 20 73 65 63 6f 6e 64 20 6e   is the second n
1aff0 75 6d 62 65 72 2e 20 20 5e 49 66 20 61 0a 63 6f  umber.  ^If a.co
1b000 6d 6d 61 20 69 73 20 75 73 65 64 20 69 6e 73 74  mma is used inst
1b010 65 61 64 20 6f 66 20 74 68 65 20 4f 46 46 53 45  ead of the OFFSE
1b020 54 20 6b 65 79 77 6f 72 64 2c 20 74 68 65 6e 20  T keyword, then 
1b030 74 68 65 20 6f 66 66 73 65 74 20 69 73 20 74 68  the offset is th
1b040 65 0a 66 69 72 73 74 20 6e 75 6d 62 65 72 20 61  e.first number a
1b050 6e 64 20 74 68 65 20 6c 69 6d 69 74 20 69 73 20  nd the limit is 
1b060 74 68 65 20 73 65 63 6f 6e 64 20 6e 75 6d 62 65  the second numbe
1b070 72 2e 20 20 54 68 69 73 20 73 65 65 6d 69 6e 67  r.  This seeming
1b080 0a 63 6f 6e 74 72 61 64 69 63 74 69 6f 6e 20 69  .contradiction i
1b090 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 20 2d 20  s intentional - 
1b0a0 69 74 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d  it maximizes com
1b0b0 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
1b0c0 6c 65 67 61 63 79 0a 53 51 4c 20 64 61 74 61 62  legacy.SQL datab
1b0d0 61 73 65 20 73 79 73 74 65 6d 73 2e 0a 3c 2f 70  ase systems..</p
1b0e0 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6d 70 6f 75 6e  >..<p>^A compoun
1b0f0 64 20 53 45 4c 45 43 54 20 69 73 20 66 6f 72 6d  d SELECT is form
1b100 65 64 20 66 72 6f 6d 20 74 77 6f 20 6f 72 20 6d  ed from two or m
1b110 6f 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  ore simple SELEC
1b120 54 73 20 63 6f 6e 6e 65 63 74 65 64 0a 62 79 20  Ts connected.by 
1b130 6f 6e 65 20 6f 66 20 74 68 65 20 6f 70 65 72 61  one of the opera
1b140 74 6f 72 73 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f  tors UNION, UNIO
1b150 4e 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54  N ALL, INTERSECT
1b160 2c 20 6f 72 20 45 58 43 45 50 54 2e 20 20 5e 49  , or EXCEPT.  ^I
1b170 6e 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  n.a compound SEL
1b180 45 43 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6e  ECT, all the con
1b190 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54 73  stituent SELECTs
1b1a0 20 6d 75 73 74 20 73 70 65 63 69 66 79 20 74 68   must specify th
1b1b0 65 0a 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66  e.same number of
1b1c0 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e   result columns.
1b1d0 20 20 5e 54 68 65 72 65 20 6d 61 79 20 62 65 20    ^There may be 
1b1e0 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 4f 52  only a single OR
1b1f0 44 45 52 20 42 59 0a 63 6c 61 75 73 65 20 61 74  DER BY.clause at
1b200 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
1b210 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e  compound SELECT.
1b220 20 20 5e 54 68 65 20 55 4e 49 4f 4e 20 61 6e 64    ^The UNION and
1b230 20 55 4e 49 4f 4e 20 41 4c 4c 0a 6f 70 65 72 61   UNION ALL.opera
1b240 74 6f 72 73 20 63 6f 6d 62 69 6e 65 20 74 68 65  tors combine the
1b250 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
1b260 53 45 4c 45 43 54 73 20 74 6f 20 74 68 65 20 72  SELECTs to the r
1b270 69 67 68 74 20 61 6e 64 20 6c 65 66 74 20 69 6e  ight and left in
1b280 74 6f 0a 61 20 73 69 6e 67 6c 65 20 62 69 67 20  to.a single big 
1b290 74 61 62 6c 65 2e 20 20 5e 54 68 65 20 64 69 66  table.  ^The dif
1b2a0 66 65 72 65 6e 63 65 20 69 73 20 74 68 61 74 20  ference is that 
1b2b0 69 6e 20 55 4e 49 4f 4e 20 61 6c 6c 20 72 65 73  in UNION all res
1b2c0 75 6c 74 20 72 6f 77 73 0a 61 72 65 20 64 69 73  ult rows.are dis
1b2d0 74 69 6e 63 74 20 77 68 65 72 65 20 69 6e 20 55  tinct where in U
1b2e0 4e 49 4f 4e 20 41 4c 4c 20 74 68 65 72 65 20 6d  NION ALL there m
1b2f0 61 79 20 62 65 20 64 75 70 6c 69 63 61 74 65 73  ay be duplicates
1b300 2e 0a 5e 54 68 65 20 49 4e 54 45 52 53 45 43 54  ..^The INTERSECT
1b310 20 6f 70 65 72 61 74 6f 72 20 74 61 6b 65 73 20   operator takes 
1b320 74 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f 6e  the intersection
1b330 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20   of the results 
1b340 6f 66 20 74 68 65 0a 6c 65 66 74 20 61 6e 64 20  of the.left and 
1b350 72 69 67 68 74 20 53 45 4c 45 43 54 73 2e 20 20  right SELECTs.  
1b360 5e 45 58 43 45 50 54 20 74 61 6b 65 73 20 74 68  ^EXCEPT takes th
1b370 65 20 72 65 73 75 6c 74 20 6f 66 20 6c 65 66 74  e result of left
1b380 20 53 45 4c 45 43 54 20 61 66 74 65 72 0a 72 65   SELECT after.re
1b390 6d 6f 76 69 6e 67 20 74 68 65 20 72 65 73 75 6c  moving the resul
1b3a0 74 73 20 6f 66 20 74 68 65 20 72 69 67 68 74 20  ts of the right 
1b3b0 53 45 4c 45 43 54 2e 20 20 5e 57 68 65 6e 20 74  SELECT.  ^When t
1b3c0 68 72 65 65 20 6f 72 20 6d 6f 72 65 20 53 45 4c  hree or more SEL
1b3d0 45 43 54 73 0a 61 72 65 20 63 6f 6e 6e 65 63 74  ECTs.are connect
1b3e0 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d 70 6f 75  ed into a compou
1b3f0 6e 64 2c 20 74 68 65 79 20 67 72 6f 75 70 20 66  nd, they group f
1b400 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
1b410 74 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23  t.</p>...<tcl>.#
1b420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b460 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1b470 63 74 69 6f 6e 20 55 50 44 41 54 45 20 75 70 64  ction UPDATE upd
1b480 61 74 65 20 7b 55 50 44 41 54 45 20 2a 55 50 44  ate {UPDATE *UPD
1b490 41 54 45 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61  ATEs}..BubbleDia
1b4a0 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74  gram update-stmt
1b4b0 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d   1.BubbleDiagram
1b4c0 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65   qualified-table
1b4d0 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -name.</tcl>..<p
1b4e0 3e 5e 54 68 65 20 55 50 44 41 54 45 20 73 74 61  >^The UPDATE sta
1b4f0 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74  tement is used t
1b500 6f 20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c  o change the val
1b510 75 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  ue of columns in
1b520 20 0a 73 65 6c 65 63 74 65 64 20 72 6f 77 73 20   .selected rows 
1b530 6f 66 20 61 20 74 61 62 6c 65 2e 20 20 5e 45 61  of a table.  ^Ea
1b540 63 68 20 61 73 73 69 67 6e 6d 65 6e 74 20 69 6e  ch assignment in
1b550 20 61 6e 20 55 50 44 41 54 45 20 73 70 65 63 69   an UPDATE speci
1b560 66 69 65 73 0a 61 20 63 6f 6c 75 6d 6e 20 6e 61  fies.a column na
1b570 6d 65 20 74 6f 20 74 68 65 20 6c 65 66 74 20 6f  me to the left o
1b580 66 20 74 68 65 20 65 71 75 61 6c 73 20 73 69 67  f the equals sig
1b590 6e 20 61 6e 64 20 61 6e 20 61 72 62 69 74 72 61  n and an arbitra
1b5a0 72 79 20 65 78 70 72 65 73 73 69 6f 6e 0a 74 6f  ry expression.to
1b5b0 20 74 68 65 20 72 69 67 68 74 2e 20 20 5e 54 68   the right.  ^Th
1b5c0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 61  e expressions ma
1b5d0 79 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 73  y use the values
1b5e0 20 6f 66 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e   of other column
1b5f0 73 2e 0a 5e 41 6c 6c 20 65 78 70 72 65 73 73 69  s..^All expressi
1b600 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65  ons are evaluate
1b610 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73  d before any ass
1b620 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64  ignments are mad
1b630 65 2e 0a 5e 41 20 57 48 45 52 45 20 63 6c 61 75  e..^A WHERE clau
1b640 73 65 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  se can be used t
1b650 6f 20 72 65 73 74 72 69 63 74 20 77 68 69 63 68  o restrict which
1b660 20 72 6f 77 73 20 61 72 65 20 75 70 64 61 74 65   rows are update
1b670 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  d.</p>..<p>^The 
1b680 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63  optional conflic
1b690 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20  t-clause allows 
1b6a0 74 68 65 20 73 70 65 63 69 66 69 63 61 74 69 6f  the specificatio
1b6b0 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74  n of an alternat
1b6c0 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63  ive.constraint c
1b6d0 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
1b6e0 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  on algorithm to 
1b6f0 75 73 65 20 64 75 72 69 6e 67 20 74 68 69 73 20  use during this 
1b700 6f 6e 65 20 55 50 44 41 54 45 20 63 6f 6d 6d 61  one UPDATE comma
1b710 6e 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74  nd..See the sect
1b720 69 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43  ion titled.[ON C
1b730 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64  ONFLICT] for add
1b740 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
1b750 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65  ion.</p>..<h3>Re
1b760 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 55 50  strictions on UP
1b770 44 41 54 45 20 53 74 61 74 65 6d 65 6e 74 73 20  DATE Statements 
1b780 57 69 74 68 69 6e 20 43 52 45 41 54 45 20 54 52  Within CREATE TR
1b790 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  IGGER</h3>..<p>^
1b7a0 54 68 65 72 65 20 61 72 65 20 61 64 64 69 74 69  There are additi
1b7b0 6f 6e 61 6c 20 73 79 6e 74 61 78 20 72 65 73 74  onal syntax rest
1b7c0 72 69 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41  rictions on UPDA
1b7d0 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  TE statements th
1b7e0 61 74 0a 6f 63 63 75 72 20 77 69 74 68 69 6e 20  at.occur within 
1b7f0 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 5b 43  the body of a [C
1b800 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73  REATE TRIGGER] s
1b810 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20  tatement.  ^The 
1b820 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  <i>table-name</i
1b830 3e 0a 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  >.of the UPDATE 
1b840 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66  must be unqualif
1b850 69 65 64 2e 20 0a 5e 28 49 6e 20 6f 74 68 65 72  ied. .^(In other
1b860 20 77 6f 72 64 73 2c 20 74 68 65 20 3c 69 3e 64   words, the <i>d
1b870 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
1b880 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20  <b>.</b> prefix 
1b890 0a 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61  .on the table na
1b8a0 6d 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  me of the UPDATE
1b8b0 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
1b8c0 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
1b8d0 29 5e 0a 5e 54 68 65 20 74 61 62 6c 65 20 74 6f  )^.^The table to
1b8e0 20 62 65 20 75 70 64 61 74 65 64 20 6d 75 73 74   be updated must
1b8f0 20 62 65 20 69 6e 20 74 68 65 20 73 61 6d 65 0a   be in the same.
1b900 64 61 74 61 62 61 73 65 20 61 73 20 74 68 65 20  database as the 
1b910 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74  table to which t
1b920 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74  he trigger is at
1b930 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tached.</p>..<p>
1b940 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
1b950 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  and NOT INDEXED 
1b960 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20  clauses are not 
1b970 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50 44 41 54  allowed on UPDAT
1b980 45 0a 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  E.statements wit
1b990 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70  hin triggers.</p
1b9a0 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54  >..<p>^The LIMIT
1b9b0 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41   clause for UPDA
1b9c0 54 45 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65  TE is unsupporte
1b9d0 64 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  d within trigger
1b9e0 73 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 4f 70 74 69  s.</p>..<h3>Opti
1b9f0 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f  onal LIMIT and O
1ba00 52 44 45 52 20 42 59 20 43 6c 61 75 73 65 73 3c  RDER BY Clauses<
1ba10 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51  /h3>..<p>^(If SQ
1ba20 4c 69 74 65 20 69 73 20 62 75 69 6c 74 20 77 69  Lite is built wi
1ba30 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45  th the [SQLITE_E
1ba40 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
1ba50 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69  ETE_LIMIT].compi
1ba60 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74  le-time option t
1ba70 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f  hen the syntax o
1ba80 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
1ba90 74 65 6d 65 6e 74 20 69 73 20 65 78 74 65 6e 64  tement is extend
1baa0 65 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c  ed.with optional
1bab0 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49   ORDER BY and LI
1bac0 4d 49 54 20 63 6c 61 75 73 65 73 29 5e 20 61 73  MIT clauses)^ as
1bad0 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
1bae0 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61  tcl>BubbleDiagra
1baf0 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69  m update-stmt-li
1bb00 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mited</tcl>..<p>
1bb10 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4c 49  ^The optional LI
1bb20 4d 49 54 20 63 6c 61 75 73 65 20 63 61 6e 20 62  MIT clause can b
1bb30 65 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20  e used to limit 
1bb40 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f  the number of.ro
1bb50 77 73 20 6d 6f 64 69 66 69 65 64 2c 20 61 6e 64  ws modified, and
1bb60 20 74 68 65 72 65 62 79 20 6c 69 6d 69 74 20 74   thereby limit t
1bb70 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 74  he size of the t
1bb80 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 54 68 65  ransaction..^The
1bb90 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1bba0 20 6f 6e 20 61 6e 20 55 50 44 41 54 45 20 73 74   on an UPDATE st
1bbb0 61 74 65 6d 65 6e 74 0a 69 73 20 75 73 65 64 20  atement.is used 
1bbc0 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e  only to determin
1bbd0 65 20 77 68 69 63 68 20 72 6f 77 73 20 66 61 6c  e which rows fal
1bbe0 6c 0a 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d  l.within the LIM
1bbf0 49 54 2e 20 20 5e 54 68 65 20 6f 72 64 65 72 20  IT.  ^The order 
1bc00 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72  in which rows ar
1bc10 65 20 6d 6f 64 69 66 69 65 64 20 69 73 20 61 72  e modified is ar
1bc20 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e  bitrary.and is n
1bc30 6f 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  ot determined by
1bc40 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1bc50 61 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ause.</p>..<tcl>
1bc60 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
1bc70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bca0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
1bcb0 53 65 63 74 69 6f 6e 20 56 41 43 55 55 4d 20 76  Section VACUUM v
1bcc0 61 63 75 75 6d 20 56 41 43 55 55 4d 0a 0a 42 75  acuum VACUUM..Bu
1bcd0 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61 63 75  bbleDiagram vacu
1bce0 75 6d 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  um-stmt 1.</tcl>
1bcf0 0a 0a 3c 70 3e 5e 57 68 65 6e 20 61 6e 20 6f 62  ..<p>^When an ob
1bd00 6a 65 63 74 20 28 74 61 62 6c 65 2c 20 69 6e 64  ject (table, ind
1bd10 65 78 2c 20 74 72 69 67 67 65 72 2c 20 6f 72 20  ex, trigger, or 
1bd20 76 69 65 77 29 20 69 73 20 64 72 6f 70 70 65 64  view) is dropped
1bd30 20 66 72 6f 6d 20 74 68 65 20 0a 64 61 74 61 62   from the .datab
1bd40 61 73 65 2c 20 69 74 20 6c 65 61 76 65 73 20 62  ase, it leaves b
1bd50 65 68 69 6e 64 20 65 6d 70 74 79 20 73 70 61 63  ehind empty spac
1bd60 65 2e 20 0a 5e 54 68 69 73 20 65 6d 70 74 79 20  e. .^This empty 
1bd70 73 70 61 63 65 20 77 69 6c 6c 20 62 65 20 72 65  space will be re
1bd80 75 73 65 64 20 74 68 65 20 6e 65 78 74 20 74 69  used the next ti
1bd90 6d 65 20 6e 65 77 20 69 6e 66 6f 72 6d 61 74 69  me new informati
1bda0 6f 6e 20 69 73 0a 61 64 64 65 64 20 74 6f 20 74  on is.added to t
1bdb0 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 42 75  he database.  Bu
1bdc0 74 20 69 6e 20 74 68 65 20 6d 65 61 6e 74 69 6d  t in the meantim
1bdd0 65 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  e, the database 
1bde0 66 69 6c 65 20 6d 69 67 68 74 0a 62 65 20 6c 61  file might.be la
1bdf0 72 67 65 72 20 74 68 61 6e 20 73 74 72 69 63 74  rger than strict
1be00 6c 79 20 6e 65 63 65 73 73 61 72 79 2e 20 20 41  ly necessary.  A
1be10 6c 73 6f 2c 20 66 72 65 71 75 65 6e 74 20 69 6e  lso, frequent in
1be20 73 65 72 74 73 2c 20 75 70 64 61 74 65 73 2c 0a  serts, updates,.
1be30 61 6e 64 20 64 65 6c 65 74 65 73 20 63 61 6e 20  and deletes can 
1be40 63 61 75 73 65 20 74 68 65 20 69 6e 66 6f 72 6d  cause the inform
1be50 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 64 61 74  ation in the dat
1be60 61 62 61 73 65 20 74 6f 20 62 65 63 6f 6d 65 0a  abase to become.
1be70 66 72 61 67 6d 65 6e 74 65 64 20 2d 20 73 63 61  fragmented - sca
1be80 74 74 65 72 65 64 20 6f 75 74 20 61 6c 6c 20 61  ttered out all a
1be90 63 72 6f 73 73 20 74 68 65 20 64 61 74 61 62 61  cross the databa
1bea0 73 65 20 66 69 6c 65 20 72 61 74 68 65 72 0a 74  se file rather.t
1beb0 68 61 6e 20 63 6c 75 73 74 65 72 65 64 20 74 6f  han clustered to
1bec0 67 65 74 68 65 72 20 69 6e 20 6f 6e 65 20 70 6c  gether in one pl
1bed0 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ace.</p>..<p>^Th
1bee0 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64  e VACUUM command
1bef0 20 63 6c 65 61 6e 73 0a 74 68 65 20 6d 61 69 6e   cleans.the main
1bf00 20 64 61 74 61 62 61 73 65 20 62 79 20 63 6f 70   database by cop
1bf10 79 69 6e 67 20 69 74 73 20 63 6f 6e 74 65 6e 74  ying its content
1bf20 73 20 74 6f 20 61 20 74 65 6d 70 6f 72 61 72 79  s to a temporary
1bf30 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
1bf40 6e 64 20 0a 72 65 6c 6f 61 64 69 6e 67 20 74 68  nd .reloading th
1bf50 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61 62  e original datab
1bf60 61 73 65 20 66 69 6c 65 20 66 72 6f 6d 20 74 68  ase file from th
1bf70 65 20 63 6f 70 79 2e 20 20 54 68 69 73 20 65 6c  e copy.  This el
1bf80 69 6d 69 6e 61 74 65 73 20 0a 66 72 65 65 20 70  iminates .free p
1bf90 61 67 65 73 2c 20 20 61 6c 69 67 6e 73 20 74 61  ages,  aligns ta
1bfa0 62 6c 65 20 64 61 74 61 20 74 6f 20 62 65 20 63  ble data to be c
1bfb0 6f 6e 74 69 67 75 6f 75 73 2c 20 61 6e 64 20 6f  ontiguous, and o
1bfc0 74 68 65 72 77 69 73 65 20 63 6c 65 61 6e 73 20  therwise cleans 
1bfd0 0a 75 70 20 74 68 65 20 64 61 74 61 62 61 73 65  .up the database
1bfe0 20 66 69 6c 65 20 73 74 72 75 63 74 75 72 65 2e   file structure.
1bff0 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41  </p>..<p>^The VA
1c000 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79  CUUM command may
1c010 20 63 68 61 6e 67 65 20 74 68 65 20 0a 5b 52 4f   change the .[RO
1c020 57 49 44 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66  WID | ROWIDs] of
1c030 20 65 6e 74 72 69 65 73 20 69 6e 20 74 61 62 6c   entries in tabl
1c040 65 73 20 74 68 61 74 20 64 6f 0a 6e 6f 74 20 68  es that do.not h
1c050 61 76 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20  ave an explicit 
1c060 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
1c070 20 4b 45 59 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   KEY].</p>..<p>^
1c080 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b  VACUUM only work
1c090 73 20 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s on the main da
1c0a0 74 61 62 61 73 65 2e 0a 49 74 20 69 73 20 6e 6f  tabase..It is no
1c0b0 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 56 41  t possible to VA
1c0c0 43 55 55 4d 20 61 6e 20 61 74 74 61 63 68 65 64  CUUM an attached
1c0d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c   database file.<
1c0e0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43  /p>..<p>^The VAC
1c0f0 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  UUM command will
1c100 20 66 61 69 6c 20 69 66 20 74 68 65 72 65 20 69   fail if there i
1c110 73 20 61 6e 20 61 63 74 69 76 65 20 74 72 61 6e  s an active tran
1c120 73 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 56 41  saction..^The VA
1c130 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 69 73 20  CUUM command is 
1c140 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 69 6e 2d 6d  a no-op for in-m
1c150 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 73 2e  emory databases.
1c160 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66  </p>..<p>^(As of
1c170 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
1c180 33 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74  3.1, an alternat
1c190 69 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65  ive to using the
1c1a0 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 0a   VACUUM command.
1c1b0 69 73 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d  is auto-vacuum m
1c1c0 6f 64 65 2c 20 65 6e 61 62 6c 65 64 20 75 73 69  ode, enabled usi
1c1d0 6e 67 20 74 68 65 20 0a 5b 61 75 74 6f 5f 76 61  ng the .[auto_va
1c1e0 63 75 75 6d 5d 20 70 72 61 67 6d 61 2e 29 5e 20  cuum] pragma.)^ 
1c1f0 20 5e 57 68 65 6e 20 5b 61 75 74 6f 5f 76 61 63   ^When [auto_vac
1c200 75 75 6d 5d 20 69 73 20 65 6e 61 62 6c 65 64 20  uum] is enabled 
1c210 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 2c 20  for a database, 
1c220 0a 6c 61 72 67 65 20 64 65 6c 65 74 65 73 20 63  .large deletes c
1c230 61 75 73 65 0a 74 68 65 20 73 69 7a 65 20 6f 66  ause.the size of
1c240 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1c250 6c 65 20 74 6f 20 73 68 72 69 6e 6b 2e 20 20 48  le to shrink.  H
1c260 6f 77 65 76 65 72 2c 20 5b 61 75 74 6f 5f 76 61  owever, [auto_va
1c270 63 75 75 6d 5d 0a 61 6c 73 6f 20 63 61 75 73 65  cuum].also cause
1c280 73 20 65 78 63 65 73 73 20 66 72 61 67 6d 65 6e  s excess fragmen
1c290 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
1c2a0 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 5e 41  tabase file.  ^A
1c2b0 6e 64 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  nd [auto_vacuum]
1c2c0 0a 64 6f 65 73 20 6e 6f 74 20 63 6f 6d 70 61 63  .does not compac
1c2d0 74 20 70 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c  t partially fill
1c2e0 65 64 20 70 61 67 65 73 20 6f 66 20 74 68 65 20  ed pages of the 
1c2f0 64 61 74 61 62 61 73 65 20 61 73 20 56 41 43 55  database as VACU
1c300 55 4d 0a 64 6f 65 73 2e 3c 2f 70 3e 0a 0a 3c 70  UM.does.</p>..<p
1c310 3e 5e 54 68 65 20 5b 70 61 67 65 5f 73 69 7a 65  >^The [page_size
1c320 5d 20 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76  ] and/or [auto_v
1c330 61 63 75 75 6d 5d 20 6d 6f 64 65 20 6f 66 20 61  acuum] mode of a
1c340 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62 65   database can be
1c350 20 63 68 61 6e 67 65 64 0a 62 79 20 69 6e 76 6f   changed.by invo
1c360 6b 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73  king the [page_s
1c370 69 7a 65 20 70 72 61 67 6d 61 5d 20 61 6e 64 2f  ize pragma] and/
1c380 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 20  or [auto_vacuum 
1c390 70 72 61 67 6d 61 5d 20 61 6e 64 20 74 68 65 6e  pragma] and then
1c3a0 0a 69 6d 6d 65 64 69 61 74 65 6c 79 20 56 41 43  .immediately VAC
1c3b0 55 55 4d 69 6e 67 20 74 68 65 20 64 61 74 61 62  UUMing the datab
1c3c0 61 73 65 2e 20 5e 45 78 63 65 70 74 2c 20 74 68  ase. ^Except, th
1c3d0 65 20 70 61 67 65 20 73 69 7a 65 20 63 61 6e 6e  e page size cann
1c3e0 6f 74 20 62 65 0a 63 68 61 6e 67 65 64 20 77 68  ot be.changed wh
1c3f0 65 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20  en [write-ahead 
1c400 6c 6f 67 5d 20 6d 6f 64 65 20 69 73 20 69 6e 20  log] mode is in 
1c410 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  use.</p>..<tcl>.
1c420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
1c470 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20  ection {INDEXED 
1c480 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b 7b  BY} indexedby {{
1c490 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54  INDEXED BY} {NOT
1c4a0 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63   INDEXED}}..</tc
1c4b0 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58  l>.<p>^The INDEX
1c4c0 45 44 20 42 59 20 70 68 72 61 73 65 20 69 73 20  ED BY phrase is 
1c4d0 61 20 53 51 4c 20 65 78 74 65 6e 73 69 6f 6e 20  a SQL extension 
1c4e0 66 6f 75 6e 64 20 6f 6e 6c 79 20 69 6e 20 53 51  found only in SQ
1c4f0 4c 69 74 65 20 77 68 69 63 68 20 63 61 6e 0a 62  Lite which can.b
1c500 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79  e used to verify
1c510 20 74 68 61 74 20 74 68 65 20 63 6f 72 72 65 63   that the correc
1c520 74 20 69 6e 64 69 63 65 73 20 61 72 65 20 62 65  t indices are be
1c530 69 6e 67 20 75 73 65 64 20 6f 6e 20 61 20 5b 44  ing used on a [D
1c540 45 4c 45 54 45 5d 2c 0a 5b 53 45 4c 45 43 54 5d  ELETE],.[SELECT]
1c550 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74  , or [UPDATE] st
1c560 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 49 4e  atement..^The IN
1c570 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20  DEXED BY phrase 
1c580 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 74  always follows t
1c590 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 74 61 62  he name of a tab
1c5a0 6c 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 77  le that SQLite w
1c5b0 69 6c 6c 0a 62 65 20 72 65 61 64 69 6e 67 2e 20  ill.be reading. 
1c5c0 20 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20   The INDEXED BY 
1c5d0 70 68 72 61 73 65 20 63 61 6e 20 62 65 20 73 65  phrase can be se
1c5e0 65 6e 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  en in the follow
1c5f0 69 6e 67 20 73 79 6e 74 61 78 0a 64 69 61 67 72  ing syntax.diagr
1c600 61 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ams:</p>..<tcl>.
1c610 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75  BubbleDiagram qu
1c620 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61  alified-table-na
1c630 6d 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  me.BubbleDiagram
1c640 20 73 69 6e 67 6c 65 2d 73 6f 75 72 63 65 0a 3c   single-source.<
1c650 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22  /tcl>..<p>^The "
1c660 49 4e 44 45 58 45 44 20 42 59 20 69 6e 64 65 78  INDEXED BY index
1c670 2d 6e 61 6d 65 22 20 63 6c 61 75 73 65 20 73 70  -name" clause sp
1c680 65 63 69 66 69 65 73 20 74 68 61 74 20 74 68 65  ecifies that the
1c690 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a 6d 75 73   named index.mus
1c6a0 74 20 62 65 20 75 73 65 64 20 69 6e 20 6f 72 64  t be used in ord
1c6b0 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 76 61  er to look up va
1c6c0 6c 75 65 73 20 6f 6e 20 74 68 65 20 70 72 65 63  lues on the prec
1c6d0 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 49 66  eding table..^If
1c6e0 20 69 6e 64 65 78 2d 6e 61 6d 65 20 64 6f 65 73   index-name does
1c6f0 20 6e 6f 74 20 65 78 69 73 74 20 6f 72 20 63 61   not exist or ca
1c700 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 66 6f 72  nnot be used for
1c710 20 74 68 65 20 71 75 65 72 79 2c 20 74 68 65 6e   the query, then
1c720 0a 74 68 65 20 70 72 65 70 61 72 61 74 69 6f 6e  .the preparation
1c730 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74   of the SQL stat
1c740 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 5e 28 54  ement fails..^(T
1c750 68 65 20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22  he "NOT INDEXED"
1c760 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
1c770 73 20 74 68 61 74 20 6e 6f 20 69 6e 64 65 78 20  s that no index 
1c780 73 68 61 6c 6c 20 62 65 20 75 73 65 64 20 77 68  shall be used wh
1c790 65 6e 0a 61 63 63 65 73 73 69 6e 67 20 74 68 65  en.accessing the
1c7a0 20 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65   preceding table
1c7b0 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c  , including impl
1c7c0 69 65 64 20 69 6e 64 69 63 65 73 20 63 72 65 61  ied indices crea
1c7d0 74 65 20 62 79 0a 55 4e 49 51 55 45 20 61 6e 64  te by.UNIQUE and
1c7e0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e   PRIMARY KEY con
1c7f0 73 74 72 61 69 6e 74 73 2e 20 20 48 6f 77 65 76  straints.  Howev
1c800 65 72 2c 20 74 68 65 20 49 4e 54 45 47 45 52 20  er, the INTEGER 
1c810 50 52 49 4d 41 52 59 20 4b 45 59 0a 63 61 6e 20  PRIMARY KEY.can 
1c820 73 74 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f  still be used to
1c830 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65 73   look up entries
1c840 20 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54 20   even when "NOT 
1c850 49 4e 44 45 58 45 44 22 20 69 73 20 73 70 65 63  INDEXED" is spec
1c860 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70  ified.)^</p>..<p
1c870 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74 61 62 61  >Some SQL databa
1c880 73 65 20 65 6e 67 69 6e 65 73 20 70 72 6f 76 69  se engines provi
1c890 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20  de non-standard 
1c8a0 22 68 69 6e 74 22 20 6d 65 63 68 61 6e 69 73 6d  "hint" mechanism
1c8b0 73 20 77 68 69 63 68 0a 63 61 6e 20 62 65 20 75  s which.can be u
1c8c0 73 65 64 20 74 6f 20 67 69 76 65 20 74 68 65 20  sed to give the 
1c8d0 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
1c8e0 63 6c 75 65 73 20 61 62 6f 75 74 20 77 68 61 74  clues about what
1c8f0 20 69 6e 64 69 63 65 73 20 69 74 20 73 68 6f 75   indices it shou
1c900 6c 64 0a 75 73 65 20 66 6f 72 20 61 20 70 61 72  ld.use for a par
1c910 74 69 63 75 6c 61 72 20 73 74 61 74 65 6d 65 6e  ticular statemen
1c920 74 2e 20 20 54 68 65 20 49 4e 44 45 58 20 42 59  t.  The INDEX BY
1c930 20 63 6c 61 75 73 65 20 6f 66 20 53 51 4c 69 74   clause of SQLit
1c940 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65  e is .<em>not</e
1c950 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d 65 63  m> a hinting mec
1c960 68 61 6e 69 73 6d 20 61 6e 64 20 69 74 20 73 68  hanism and it sh
1c970 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64  ould not be used
1c980 20 61 73 20 73 75 63 68 2e 0a 5e 54 68 65 20 49   as such..^The I
1c990 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
1c9a0 20 64 6f 65 73 20 6e 6f 74 20 67 69 76 65 20 74   does not give t
1c9b0 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 68 69 6e  he optimizer hin
1c9c0 74 73 20 61 62 6f 75 74 20 77 68 69 63 68 20 69  ts about which i
1c9d0 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20 69 74 20  ndex.to use; it 
1c9e0 67 69 76 65 73 20 74 68 65 20 6f 70 74 69 6d 69  gives the optimi
1c9f0 7a 65 72 20 61 20 72 65 71 75 69 72 65 6d 65 6e  zer a requiremen
1ca00 74 20 6f 66 20 77 68 69 63 68 20 69 6e 64 65 78  t of which index
1ca10 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74 68 65   to use..^If the
1ca20 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
1ca30 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 75 73   is unable to us
1ca40 65 20 74 68 65 20 69 6e 64 65 78 20 73 70 65 63  e the index spec
1ca50 69 66 69 65 64 20 62 79 20 74 68 65 0a 49 4e 44  ified by the.IND
1ca60 45 58 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68  EX BY clause, th
1ca70 65 6e 20 74 68 65 20 71 75 65 72 79 20 77 69 6c  en the query wil
1ca80 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65  l fail with an e
1ca90 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  rror.</p>..<p>Th
1caa0 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  e INDEXED BY cla
1cab0 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f  use is <em>not</
1cac0 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f 72  em> intended for
1cad0 20 75 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a 74   use in tuning.t
1cae0 68 65 20 70 72 65 66 6f 72 6d 61 6e 63 65 20 6f  he preformance o
1caf0 66 20 61 20 71 75 65 72 79 2e 20 20 54 68 65 20  f a query.  The 
1cb00 69 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 49 4e  intent of the IN
1cb10 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
1cb20 69 73 0a 74 6f 20 72 61 69 73 65 20 61 20 72 75  is.to raise a ru
1cb30 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20 69 66 20  n-time error if 
1cb40 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2c  a schema change,
1cb50 20 73 75 63 68 20 61 73 20 64 72 6f 70 70 69 6e   such as droppin
1cb60 67 20 6f 72 0a 63 72 65 61 74 69 6e 67 20 61 6e  g or.creating an
1cb70 20 69 6e 64 65 78 2c 20 63 61 75 73 65 73 20 74   index, causes t
1cb80 68 65 20 71 75 65 72 79 20 70 6c 61 6e 20 66 6f  he query plan fo
1cb90 72 20 61 20 74 69 6d 65 2d 73 65 6e 73 69 74 69  r a time-sensiti
1cba0 76 65 20 71 75 65 72 79 0a 74 6f 20 63 68 61 6e  ve query.to chan
1cbb0 67 65 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44  ge.  The INDEXED
1cbc0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 64 65   BY clause is de
1cbd0 73 69 67 6e 65 64 20 74 6f 20 68 65 6c 70 20 64  signed to help d
1cbe0 65 74 65 63 74 0a 75 6e 64 65 73 69 72 61 62 6c  etect.undesirabl
1cbf0 65 20 71 75 65 72 79 20 70 6c 61 6e 20 63 68 61  e query plan cha
1cc00 6e 67 65 73 20 64 75 72 69 6e 67 20 72 65 67 72  nges during regr
1cc10 65 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e 0a  ession testing..
1cc20 44 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61  Developers are a
1cc30 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d 69  dmonished to omi
1cc40 74 20 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e 44  t all use of IND
1cc50 45 58 45 44 20 42 59 20 64 75 72 69 6e 67 0a 61  EXED BY during.a
1cc60 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 73 69 67  pplication desig
1cc70 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  n, implementatio
1cc80 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e 64 20  n, testing, and 
1cc90 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44 45  tuning.  If.INDE
1cca0 58 45 44 20 42 59 20 69 73 20 74 6f 20 62 65 20  XED BY is to be 
1ccb0 75 73 65 64 20 61 74 20 61 6c 6c 2c 20 69 74 20  used at all, it 
1ccc0 73 68 6f 75 6c 64 20 62 65 20 69 6e 73 65 72 74  should be insert
1ccd0 65 64 20 61 74 20 74 68 65 20 76 65 72 79 0a 65  ed at the very.e
1cce0 6e 64 20 6f 66 20 74 68 65 20 64 65 76 65 6c 6f  nd of the develo
1ccf0 70 6d 65 6e 74 20 70 72 6f 63 65 73 73 20 77 68  pment process wh
1cd00 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e  en "locking down
1cd10 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a  " a design.</p>.
1cd20 0a 3c 68 33 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f  .<h3>See Also:</
1cd30 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 5b 73 71 6c  h3>..<p>The [sql
1cd40 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73  ite3_stmt_status
1cd50 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  ()] C/C++ interf
1cd60 61 63 65 20 74 6f 67 65 74 68 65 72 20 77 69 74  ace together wit
1cd70 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 53 54  h the.[SQLITE_ST
1cd80 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43 41  MTSTATUS_FULLSCA
1cd90 4e 5f 53 54 45 50 5d 20 61 6e 64 20 5b 53 51 4c  N_STEP] and [SQL
1cda0 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53  ITE_STMTSTATUS_S
1cdb0 4f 52 54 5d 20 76 65 72 62 73 0a 63 61 6e 20 62  ORT] verbs.can b
1cdc0 65 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74  e used to detect
1cdd0 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 77 68 65   at run-time whe
1cde0 6e 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  n an SQL stateme
1cdf0 6e 74 20 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67  nt is not.making
1ce00 20 65 66 66 65 63 74 69 76 65 20 75 73 65 20 6f   effective use o
1ce10 66 20 69 6e 64 69 63 65 73 2e 20 20 4d 61 6e 79  f indices.  Many
1ce20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61   applications ma
1ce30 79 20 70 72 65 66 65 72 20 74 6f 0a 75 73 65 20  y prefer to.use 
1ce40 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d  the [sqlite3_stm
1ce50 74 5f 73 74 61 74 75 73 28 29 5d 20 69 6e 74 65  t_status()] inte
1ce60 72 66 61 63 65 20 74 6f 20 64 65 74 65 63 74 20  rface to detect 
1ce70 69 6e 64 65 78 20 6d 69 73 75 73 65 0a 72 61 74  index misuse.rat
1ce80 68 65 72 20 74 68 61 6e 20 74 68 65 20 49 4e 44  her than the IND
1ce90 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 64  EXED BY phrase d
1cea0 65 73 63 72 69 62 65 64 20 68 65 72 65 2e 3c 2f  escribed here.</
1ceb0 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
1cec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ced0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cef0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cf00 23 23 23 23 23 23 23 0a 23 20 41 20 6c 69 73 74  #######.# A list
1cf10 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 41   of keywords.  A
1cf20 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75 72 73   asterisk occurs
1cf30 20 61 66 74 65 72 20 74 68 65 20 6b 65 79 77 6f   after the keywo
1cf40 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e 0a 23  rd if it is on.#
1cf50 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69   the fallback li
1cf60 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72  st..#.set keywor
1cf70 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a  d_list [lsort {.
1cf80 20 20 20 41 42 4f 52 54 0a 20 20 20 41 43 54 49     ABORT.   ACTI
1cf90 4f 4e 0a 20 20 20 41 44 44 0a 20 20 20 41 46 54  ON.   ADD.   AFT
1cfa0 45 52 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54  ER.   ALL.   ALT
1cfb0 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45 0a 20 20  ER.   ANALYZE.  
1cfc0 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20 41 53   AND.   AS.   AS
1cfd0 43 0a 20 20 20 41 54 54 41 43 48 0a 20 20 20 41  C.   ATTACH.   A
1cfe0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20  UTOINCREMENT.   
1cff0 42 45 46 4f 52 45 0a 20 20 20 42 45 47 49 4e 0a  BEFORE.   BEGIN.
1d000 20 20 20 42 45 54 57 45 45 4e 0a 20 20 20 42 59     BETWEEN.   BY
1d010 0a 20 20 20 43 41 53 43 41 44 45 0a 20 20 20 43  .   CASCADE.   C
1d020 41 53 45 0a 20 20 20 43 41 53 54 0a 20 20 20 43  ASE.   CAST.   C
1d030 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a  HECK.   COLLATE.
1d040 20 20 20 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d     COLUMN.   COM
1d050 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54 0a  MIT.   CONFLICT.
1d060 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20     CONSTRAINT.  
1d070 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f 53 53   CREATE.   CROSS
1d080 0a 20 20 20 43 55 52 52 45 4e 54 5f 44 41 54 45  .   CURRENT_DATE
1d090 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  .   CURRENT_TIME
1d0a0 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  .   CURRENT_TIME
1d0b0 53 54 41 4d 50 0a 20 20 20 44 41 54 41 42 41 53  STAMP.   DATABAS
1d0c0 45 0a 20 20 20 44 45 46 41 55 4c 54 0a 20 20 20  E.   DEFAULT.   
1d0d0 44 45 46 45 52 52 45 44 0a 20 20 20 44 45 46 45  DEFERRED.   DEFE
1d0e0 52 52 41 42 4c 45 0a 20 20 20 44 45 4c 45 54 45  RRABLE.   DELETE
1d0f0 0a 20 20 20 44 45 53 43 0a 20 20 20 44 45 54 41  .   DESC.   DETA
1d100 43 48 0a 20 20 20 44 49 53 54 49 4e 43 54 0a 20  CH.   DISTINCT. 
1d110 20 20 44 52 4f 50 0a 20 20 20 45 4e 44 0a 20 20    DROP.   END.  
1d120 20 45 41 43 48 0a 20 20 20 45 4c 53 45 0a 20 20   EACH.   ELSE.  
1d130 20 45 53 43 41 50 45 0a 20 20 20 45 58 43 45 50   ESCAPE.   EXCEP
1d140 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45 0a 20  T.   EXCLUSIVE. 
1d150 20 20 45 58 49 53 54 53 0a 20 20 20 45 58 50 4c    EXISTS.   EXPL
1d160 41 49 4e 0a 20 20 20 46 41 49 4c 0a 20 20 20 46  AIN.   FAIL.   F
1d170 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20 20  OR.   FOREIGN.  
1d180 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20   FROM.   FULL.  
1d190 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55 50 0a 20   GLOB.   GROUP. 
1d1a0 20 20 48 41 56 49 4e 47 0a 20 20 20 49 46 0a 20    HAVING.   IF. 
1d1b0 20 20 49 47 4e 4f 52 45 0a 20 20 20 49 4d 4d 45    IGNORE.   IMME
1d1c0 44 49 41 54 45 0a 20 20 20 49 4e 0a 20 20 20 49  DIATE.   IN.   I
1d1d0 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45 44 0a  NDEX.   INDEXED.
1d1e0 20 20 20 49 4e 49 54 49 41 4c 4c 59 0a 20 20 20     INITIALLY.   
1d1f0 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52 54 0a  INNER.   INSERT.
1d200 20 20 20 49 4e 53 54 45 41 44 0a 20 20 20 49 4e     INSTEAD.   IN
1d210 54 45 52 53 45 43 54 0a 20 20 20 49 4e 54 4f 0a  TERSECT.   INTO.
1d220 20 20 20 49 53 0a 20 20 20 49 53 4e 55 4c 4c 0a     IS.   ISNULL.
1d230 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59 0a 20     JOIN.   KEY. 
1d240 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45 0a 20    LEFT.   LIKE. 
1d250 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54 43 48    LIMIT.   MATCH
1d260 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20 20 20 4e  .   NATURAL.   N
1d270 4f 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e  O.   NOT.   NOTN
1d280 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f  ULL.   NULL.   O
1d290 46 0a 20 20 20 4f 46 46 53 45 54 0a 20 20 20 4f  F.   OFFSET.   O
1d2a0 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44 45 52  N.   OR.   ORDER
1d2b0 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50 4c 41  .   OUTER.   PLA
1d2c0 4e 0a 20 20 20 50 52 41 47 4d 41 0a 20 20 20 50  N.   PRAGMA.   P
1d2d0 52 49 4d 41 52 59 0a 20 20 20 51 55 45 52 59 0a  RIMARY.   QUERY.
1d2e0 20 20 20 52 41 49 53 45 0a 20 20 20 52 45 46 45     RAISE.   REFE
1d2f0 52 45 4e 43 45 53 0a 20 20 20 52 45 47 45 58 50  RENCES.   REGEXP
1d300 0a 20 20 20 52 45 49 4e 44 45 58 0a 20 20 20 52  .   REINDEX.   R
1d310 45 4c 45 41 53 45 0a 20 20 20 52 45 4e 41 4d 45  ELEASE.   RENAME
1d320 0a 20 20 20 52 45 50 4c 41 43 45 0a 20 20 20 52  .   REPLACE.   R
1d330 45 53 54 52 49 43 54 0a 20 20 20 52 49 47 48 54  ESTRICT.   RIGHT
1d340 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20  .   ROLLBACK.   
1d350 52 4f 57 0a 20 20 20 53 41 56 45 50 4f 49 4e 54  ROW.   SAVEPOINT
1d360 0a 20 20 20 53 45 4c 45 43 54 0a 20 20 20 53 45  .   SELECT.   SE
1d370 54 0a 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45  T.   TABLE.   TE
1d380 4d 50 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 0a  MP.   TEMPORARY.
1d390 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20     THEN.   TO.  
1d3a0 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20   TRANSACTION.   
1d3b0 54 52 49 47 47 45 52 0a 20 20 20 55 4e 49 4f 4e  TRIGGER.   UNION
1d3c0 0a 20 20 20 55 4e 49 51 55 45 0a 20 20 20 55 50  .   UNIQUE.   UP
1d3d0 44 41 54 45 0a 20 20 20 55 53 49 4e 47 0a 20 20  DATE.   USING.  
1d3e0 20 56 41 43 55 55 4d 0a 20 20 20 56 41 4c 55 45   VACUUM.   VALUE
1d3f0 53 0a 20 20 20 56 49 45 57 0a 20 20 20 56 49 52  S.   VIEW.   VIR
1d400 54 55 41 4c 0a 20 20 20 57 48 45 4e 0a 20 20 20  TUAL.   WHEN.   
1d410 57 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74  WHERE.}]..hd_put
1d420 73 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d 22 70  s {<DIV class="p
1d430 64 66 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a 53 65  df_section">}.Se
1d440 63 74 69 6f 6e 20 7b 53 51 4c 69 74 65 20 4b 65  ction {SQLite Ke
1d450 79 77 6f 72 64 73 7d 20 6b 65 79 77 6f 72 64 73  ywords} keywords
1d460 20 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f 72 64 7d   {{*SQL keyword}
1d470 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d   {SQL keywords}}
1d480 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44 49 56 3e  .hd_puts {</DIV>
1d490 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  }.</tcl>..<p>The
1d4a0 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 73 70   SQL standard sp
1d4b0 65 63 69 66 69 65 73 20 61 20 68 75 67 65 20 6e  ecifies a huge n
1d4c0 75 6d 62 65 72 20 6f 66 20 6b 65 79 77 6f 72 64  umber of keyword
1d4d0 73 20 77 68 69 63 68 20 6d 61 79 20 6e 6f 74 0a  s which may not.
1d4e0 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 6e  be used as the n
1d4f0 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73 2c 20  ames of tables, 
1d500 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75 6d 6e 73  indices, columns
1d510 2c 20 64 61 74 61 62 61 73 65 73 2c 20 75 73 65  , databases, use
1d520 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e 63 74 69  r-defined.functi
1d530 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c  ons, collations,
1d540 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
1d550 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e 79 20 6f  odules, or any o
1d560 74 68 65 72 20 6e 61 6d 65 64 20 6f 62 6a 65 63  ther named objec
1d570 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f 66 20 6b  t..The list of k
1d580 65 79 77 6f 72 64 73 20 69 73 20 73 6f 20 6c 6f  eywords is so lo
1d590 6e 67 20 74 68 61 74 20 66 65 77 20 70 65 6f 70  ng that few peop
1d5a0 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62 65 72 20  le can remember 
1d5b0 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f  them all..For mo
1d5c0 73 74 20 53 51 4c 20 63 6f 64 65 2c 20 79 6f 75  st SQL code, you
1d5d0 72 20 73 61 66 65 73 74 20 62 65 74 20 69 73 20  r safest bet is 
1d5e0 74 6f 20 6e 65 76 65 72 20 75 73 65 20 61 6e 79  to never use any
1d5f0 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   English languag
1d600 65 0a 77 6f 72 64 20 61 73 20 74 68 65 20 6e 61  e.word as the na
1d610 6d 65 20 6f 66 20 61 20 75 73 65 72 2d 64 65 66  me of a user-def
1d620 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e  ined object.</p>
1d630 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61 6e 74  ..<p>If you want
1d640 20 74 6f 20 75 73 65 20 61 20 6b 65 79 77 6f 72   to use a keywor
1d650 64 20 61 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75  d as a name, you
1d660 20 6e 65 65 64 20 74 6f 20 71 75 6f 74 65 20 69   need to quote i
1d670 74 2e 20 20 54 68 65 72 65 0a 61 72 65 20 74 68  t.  There.are th
1d680 72 65 65 20 77 61 79 73 20 6f 66 20 71 75 6f 74  ree ways of quot
1d690 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  ing keywords in 
1d6a0 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e  SQLite:</p>..<p>
1d6b0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
1d6c0 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76  able>.<tr>.<td v
1d6d0 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27  align="top"><b>'
1d6e0 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64  keyword'</b></td
1d6f0 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
1d700 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65  </td>..<td>^A ke
1d710 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 20  yword in single 
1d720 71 75 6f 74 65 73 20 69 73 20 61 20 73 74 72 69  quotes is a stri
1d730 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64 3e  ng literal.</td>
1d740 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20  </tr>..<tr>.<td 
1d750 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
1d760 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74  "keyword"</b></t
1d770 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64  d><td></td>..<td
1d780 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 64  >^A keyword in d
1d790 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73 20  ouble-quotes is 
1d7a0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f  an identifier.</
1d7b0 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c  td></tr>..<tr>.<
1d7c0 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
1d7d0 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64 26  <b>&#91;keyword&
1d7e0 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  #93;</b></td><td
1d7f0 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
1d800 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20  eyword enclosed 
1d810 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65  in square bracke
1d820 74 73 20 69 73 20 0a 20 20 20 20 20 20 20 20 61  ts is .        a
1d830 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54  n identifier.  T
1d840 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64  his is not stand
1d850 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71  ard SQL.  This q
1d860 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d  uoting mechanism
1d870 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65 64  .        is used
1d880 20 62 79 20 4d 53 20 41 63 63 65 73 73 20 61 6e   by MS Access an
1d890 64 20 53 51 4c 20 53 65 72 76 65 72 20 61 6e 64  d SQL Server and
1d8a0 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
1d8b0 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20  SQLite for.     
1d8c0 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79     compatibility
1d8d0 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72  .</td></tr>..<tr
1d8e0 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
1d8f0 70 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77 6f  p"><b>&#96;keywo
1d900 72 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e  rd&#96;</b></td>
1d910 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e  <td></td>..<td>^
1d920 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73  A keyword enclos
1d930 65 64 20 69 6e 20 67 72 61 76 65 20 61 63 63 65  ed in grave acce
1d940 6e 74 73 20 28 41 53 43 49 49 20 63 6f 64 65 20  nts (ASCII code 
1d950 39 36 29 20 69 73 20 0a 20 20 20 20 20 20 20 20  96) is .        
1d960 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20  an identifier.  
1d970 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e  This is not stan
1d980 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20  dard SQL.  This 
1d990 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73  quoting mechanis
1d9a0 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65  m.        is use
1d9b0 64 20 62 79 20 4d 79 53 51 4c 20 61 6e 64 20 69  d by MySQL and i
1d9c0 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51  s included in SQ
1d9d0 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20  Lite for.       
1d9e0 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c   compatibility.<
1d9f0 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  /td></tr>.</tabl
1da00 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  e>.</blockquote>
1da10 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65  .</p>..<p>For re
1da20 73 69 6c 69 65 6e 63 65 20 77 68 65 6e 20 63 6f  silience when co
1da30 6e 66 72 6f 6e 74 65 64 20 77 69 74 68 20 68 69  nfronted with hi
1da40 73 74 6f 72 69 63 61 6c 20 53 51 4c 20 73 74 61  storical SQL sta
1da50 74 65 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65 0a  tements, SQLite.
1da60 77 69 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20 62  will sometimes b
1da70 65 6e 64 20 74 68 65 20 71 75 6f 74 69 6e 67 20  end the quoting 
1da80 72 75 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70 3e  rules above:</p>
1da90 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49  ..<ul>.<li><p>^I
1daa0 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 73  f a keyword in s
1dab0 69 6e 67 6c 65 0a 71 75 6f 74 65 73 20 28 65 78  ingle.quotes (ex
1dac0 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f  : <b>'key'</b> o
1dad0 72 20 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29  r <b>'glob'</b>)
1dae0 20 69 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f   is used in a co
1daf0 6e 74 65 78 74 20 77 68 65 72 65 0a 61 6e 20 69  ntext where.an i
1db00 64 65 6e 74 69 66 69 65 72 20 69 73 20 61 6c 6c  dentifier is all
1db10 6f 77 65 64 20 62 75 74 20 77 68 65 72 65 20 61  owed but where a
1db20 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20   string literal 
1db30 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c 20  is not allowed, 
1db40 74 68 65 6e 0a 74 68 65 20 74 6f 6b 65 6e 20 69  then.the token i
1db50 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20  s understood to 
1db60 62 65 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  be an identifier
1db70 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 73 74   instead of a st
1db80 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f  ring literal..</
1db90 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
1dba0 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e  ^If a keyword in
1dbb0 20 64 6f 75 62 6c 65 0a 71 75 6f 74 65 73 20 28   double.quotes (
1dbc0 65 78 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e  ex: <b>"key"</b>
1dbd0 20 6f 72 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62   or <b>"glob"</b
1dbe0 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20 61 20  >) is used in a 
1dbf0 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 69 74  context where.it
1dc00 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 73 6f 6c   cannot be resol
1dc10 76 65 64 20 74 6f 20 61 6e 20 69 64 65 6e 74 69  ved to an identi
1dc20 66 69 65 72 20 62 75 74 20 77 68 65 72 65 20 61  fier but where a
1dc30 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 0a   string literal.
1dc40 69 73 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e  is allowed, then
1dc50 20 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e   the token is un
1dc60 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61  derstood to be a
1dc70 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20   string literal 
1dc80 69 6e 73 74 65 61 64 0a 6f 66 20 61 6e 20 69 64  instead.of an id
1dc90 65 6e 74 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c  entifier.</p></l
1dca0 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f  i>.</ul>..<p>Pro
1dcb0 67 72 61 6d 6d 65 72 73 20 61 72 65 20 63 61 75  grammers are cau
1dcc0 74 69 6f 6e 65 64 20 6e 6f 74 20 74 6f 20 75 73  tioned not to us
1dcd0 65 20 74 68 65 20 74 77 6f 20 65 78 63 65 70 74  e the two except
1dce0 69 6f 6e 73 20 64 65 73 63 72 69 62 65 64 20 69  ions described i
1dcf0 6e 0a 74 68 65 20 70 72 65 76 69 6f 75 73 20 62  n.the previous b
1dd00 75 6c 6c 65 74 73 2e 20 20 57 65 20 65 6d 70 68  ullets.  We emph
1dd10 61 73 69 7a 65 20 74 68 61 74 20 74 68 65 79 20  asize that they 
1dd20 65 78 69 73 74 20 6f 6e 6c 79 20 73 6f 20 74 68  exist only so th
1dd30 61 74 20 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66  at old.and ill-f
1dd40 6f 72 6d 65 64 20 53 51 4c 20 73 74 61 74 65 6d  ormed SQL statem
1dd50 65 6e 74 73 20 77 69 6c 6c 20 72 75 6e 20 63 6f  ents will run co
1dd60 72 72 65 63 74 6c 79 2e 20 20 46 75 74 75 72 65  rrectly.  Future
1dd70 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c   versions of.SQL
1dd80 69 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67 65  ite might change
1dd90 20 74 6f 20 72 61 69 73 65 20 65 72 72 6f 72 73   to raise errors
1dda0 20 69 6e 73 74 65 61 64 20 6f 66 20 61 63 63 65   instead of acce
1ddb0 70 74 69 6e 67 20 74 68 65 20 6d 61 6c 66 6f 72  pting the malfor
1ddc0 6d 65 64 0a 73 74 61 74 65 6d 65 6e 74 73 20 63  med.statements c
1ddd0 6f 76 65 72 65 64 20 62 79 20 74 68 65 20 65 78  overed by the ex
1dde0 63 65 70 74 69 6f 6e 73 20 61 62 6f 76 65 2e 3c  ceptions above.<
1ddf0 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20  /p>..<p>.SQLite 
1de00 61 64 64 73 20 6e 65 77 20 6b 65 79 77 6f 72 64  adds new keyword
1de10 73 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74  s from time to t
1de20 69 6d 65 20 77 68 65 6e 20 69 74 20 74 61 6b 65  ime when it take
1de30 73 20 6f 6e 20 6e 65 77 20 66 65 61 74 75 72 65  s on new feature
1de40 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e 74  s..So to prevent
1de50 20 79 6f 75 72 20 63 6f 64 65 20 66 72 6f 6d 20   your code from 
1de60 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79 20  being broken by 
1de70 66 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65  future enhanceme
1de80 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64 0a  nts, you should.
1de90 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20 61  normally quote a
1dea0 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20 74 68  ny identifier th
1deb0 61 74 20 69 73 20 61 6e 20 45 6e 67 6c 69 73 68  at is an English
1dec0 20 6c 61 6e 67 75 61 67 65 20 77 6f 72 64 2c 20   language word, 
1ded0 65 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f 20 6e  even if.you do n
1dee0 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e  ot have to..</p>
1def0 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69 73 74 20 62  ..<p>.The list b
1df00 65 6c 6f 77 20 73 68 6f 77 73 20 61 6c 6c 20 70  elow shows all p
1df10 6f 73 73 69 62 6c 65 20 6b 65 79 77 6f 72 64 73  ossible keywords
1df20 20 75 73 65 64 20 62 79 20 61 6e 79 20 62 75 69   used by any bui
1df30 6c 64 20 6f 66 0a 53 51 4c 69 74 65 20 72 65 67  ld of.SQLite reg
1df40 61 72 64 6c 65 73 73 20 6f 66 20 5b 63 6f 6d 70  ardless of [comp
1df50 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
1df60 5d 2e 20 20 0a 4d 6f 73 74 20 72 65 61 73 6f 6e  ].  .Most reason
1df70 61 62 6c 65 20 63 6f 6e 66 69 67 75 72 61 74 69  able configurati
1df80 6f 6e 73 20 75 73 65 20 6d 6f 72 65 20 6f 72 20  ons use more or 
1df90 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 6b 65 79  all of these key
1dfa0 77 6f 72 64 73 2c 0a 62 75 74 20 73 6f 6d 65 20  words,.but some 
1dfb0 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 62 65 20  keywords may be 
1dfc0 6f 6d 69 74 74 65 64 20 77 68 65 6e 20 53 51 4c  omitted when SQL
1dfd0 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75 72   language featur
1dfe0 65 73 20 61 72 65 0a 64 69 73 61 62 6c 65 64 2e  es are.disabled.
1dff0 0a 5e 28 52 65 67 61 72 64 6c 65 73 73 20 6f 66  .^(Regardless of
1e000 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   the compile-tim
1e010 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  e configuration,
1e020 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20   any identifier 
1e030 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 6e 0a 74  that is not on.t
1e040 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 74 63  he following <tc
1e050 6c 3e 68 64 5f 70 75 74 73 20 5b 6c 6c 65 6e 67  l>hd_puts [lleng
1e060 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74  th $keyword_list
1e070 5d 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65 6e 74 0a  ]</tcl> element.
1e080 6c 69 73 74 20 69 73 20 6e 6f 74 20 61 20 6b 65  list is not a ke
1e090 79 77 6f 72 64 20 74 6f 20 74 68 65 20 53 51 4c  yword to the SQL
1e0a0 20 70 61 72 73 65 72 20 69 6e 20 53 51 4c 69 74   parser in SQLit
1e0b0 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  e:.</p>..<blockq
1e0c0 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 77 69 64  uote>.<table wid
1e0d0 74 68 3d 22 31 30 30 25 22 3e 3c 74 72 3e 0a 3c  th="100%"><tr>.<
1e0e0 74 64 20 61 6c 69 67 6e 3d 22 6c 65 66 74 22 20  td align="left" 
1e0f0 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 77 69 64  valign="top" wid
1e100 74 68 3d 22 32 30 25 22 3e 0a 3c 74 63 6c 3e 0a  th="20%">.<tcl>.
1e110 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24  set n [llength $
1e120 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 0a 73 65  keyword_list].se
1e130 74 20 6e 43 6f 6c 20 35 0a 73 65 74 20 6e 52 6f  t nCol 5.set nRo
1e140 77 20 5b 65 78 70 72 20 7b 28 24 6e 2b 24 6e 43  w [expr {($n+$nC
1e150 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65  ol-1)/$nCol}].se
1e160 74 20 69 20 30 0a 66 6f 72 65 61 63 68 20 77 6f  t i 0.foreach wo
1e170 72 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74  rd $keyword_list
1e180 20 7b 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6e 52   {.  if {$i==$nR
1e190 6f 77 7d 20 7b 0a 20 20 20 20 68 64 5f 70 75 74  ow} {.    hd_put
1e1a0 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61 6c 69  s "</td><td vali
1e1b0 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e  gn=\"top\" align
1e1c0 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64 74 68 3d  =\"left\" width=
1e1d0 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20 20 73 65  \"20%\">".    se
1e1e0 74 20 69 20 31 0a 20 20 7d 20 65 6c 73 65 20 7b  t i 1.  } else {
1e1f0 0a 20 20 20 20 69 6e 63 72 20 69 0a 20 20 7d 0a  .    incr i.  }.
1e200 20 20 68 64 5f 70 75 74 73 20 22 24 77 6f 72 64    hd_puts "$word
1e210 3c 62 72 3e 5c 6e 22 0a 7d 0a 3c 2f 74 63 6c 3e  <br>\n".}.</tcl>
1e220 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62  .</td></tr></tab
1e230 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  le></blockquote>
1e240 29 5e 0a                                         )^.