Documentation Source Text

Hex Artifact Content
Login

Artifact 3fb61133a70433f60a03e5ed2934c954c19179b4:


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 32 3e 53 51 4c 20 41 73 20 55  e>..<h2>SQL As U
0040: 6e 64 65 72 73 74 6f 6f 64 20 42 79 20 53 51 4c  nderstood By SQL
0050: 69 74 65 3c 2f 68 32 3e 0a 0a 3c 70 3e 53 51 4c  ite</h2>..<p>SQL
0060: 69 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20  ite understands 
0070: 6d 6f 73 74 20 6f 66 20 74 68 65 20 73 74 61 6e  most of the stan
0080: 64 61 72 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67  dard SQL.languag
0090: 65 2e 20 20 42 75 74 20 69 74 20 64 6f 65 73 20  e.  But it does 
00a0: 3c 61 20 68 72 65 66 3d 22 6f 6d 69 74 74 65 64  <a href="omitted
00b0: 2e 68 74 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65  .html">omit some
00c0: 20 66 65 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68   features</a>.wh
00d0: 69 6c 65 20 61 74 20 74 68 65 20 73 61 6d 65 20  ile at the same 
00e0: 74 69 6d 65 0a 61 64 64 69 6e 67 20 61 20 66 65  time.adding a fe
00f0: 77 20 66 65 61 74 75 72 65 73 20 6f 66 20 69 74  w features of it
0100: 73 20 6f 77 6e 2e 20 20 54 68 69 73 20 64 6f 63  s own.  This doc
0110: 75 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74  ument attempts t
0120: 6f 0a 64 65 73 63 72 69 62 65 20 70 72 65 63 69  o.describe preci
0130: 73 65 6c 79 20 77 68 61 74 20 70 61 72 74 73 20  sely what parts 
0140: 6f 66 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75  of the SQL langu
0150: 61 67 65 20 53 51 4c 69 74 65 20 64 6f 65 73 0a  age SQLite does.
0160: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  and does not sup
0170: 70 6f 72 74 2e 20 20 41 20 6c 69 73 74 20 6f 66  port.  A list of
0180: 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 6b   <a href="lang_k
0190: 65 79 77 6f 72 64 73 2e 68 74 6d 6c 22 3e 6b 65  eywords.html">ke
01a0: 79 77 6f 72 64 73 3c 2f 61 3e 20 69 73 20 0a 61  ywords</a> is .a
01b0: 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20 20 54  lso provided.  T
01c0: 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20  he SQL language 
01d0: 73 79 6e 74 61 78 20 69 73 20 64 65 73 63 72 69  syntax is descri
01e0: 62 65 64 20 62 79 0a 3c 61 20 68 72 65 66 3d 22  bed by.<a href="
01f0: 73 79 6e 74 61 78 64 69 61 67 72 61 6d 73 2e 68  syntaxdiagrams.h
0200: 74 6d 6c 22 3e 73 79 6e 74 61 78 20 64 69 61 67  tml">syntax diag
0210: 72 61 6d 73 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c  rams</a>.</p>..<
0220: 70 3e 49 6e 20 61 6c 6c 20 6f 66 20 74 68 65 20  p>In all of the 
0230: 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20  syntax diagrams 
0240: 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 20 6c 69 74  that follow, lit
0250: 65 72 61 6c 20 74 65 78 74 20 69 73 20 73 68 6f  eral text is sho
0260: 77 6e 20 69 6e 0a 62 6f 6c 64 20 62 6c 75 65 2e  wn in.bold blue.
0270: 20 20 4e 6f 6e 2d 74 65 72 6d 69 6e 61 6c 20 73    Non-terminal s
0280: 79 6d 62 6f 6c 73 20 61 72 65 20 73 68 6f 77 6e  ymbols are shown
0290: 20 69 6e 20 69 74 61 6c 69 63 20 72 65 64 2e 20   in italic red. 
02a0: 20 4f 70 65 72 61 74 6f 72 73 0a 74 68 61 74 20   Operators.that 
02b0: 61 72 65 20 70 61 72 74 20 6f 66 20 74 68 65 20  are part of the 
02c0: 73 79 6e 74 61 63 74 69 63 20 6d 61 72 6b 75 70  syntactic markup
02d0: 20 69 74 73 65 6c 66 20 61 72 65 20 73 68 6f 77   itself are show
02e0: 6e 20 69 6e 20 62 6c 61 63 6b 20 72 6f 6d 61 6e  n in black roman
02f0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64  .</p>..<p>This d
0300: 6f 63 75 6d 65 6e 74 20 69 73 20 6a 75 73 74 20  ocument is just 
0310: 61 6e 20 6f 76 65 72 76 69 65 77 20 6f 66 20 74  an overview of t
0320: 68 65 20 53 51 4c 20 73 79 6e 74 61 78 20 69 6d  he SQL syntax im
0330: 70 6c 65 6d 65 6e 74 65 64 0a 62 79 20 53 51 4c  plemented.by SQL
0340: 69 74 65 2e 20 20 4d 61 6e 79 20 6c 6f 77 2d 6c  ite.  Many low-l
0350: 65 76 65 6c 20 70 72 6f 64 75 63 74 69 6f 6e 73  evel productions
0360: 20 61 72 65 20 6f 6d 69 74 74 65 64 2e 20 20 46   are omitted.  F
0370: 6f 72 20 64 65 74 61 69 6c 65 64 20 69 6e 66 6f  or detailed info
0380: 72 6d 61 74 69 6f 6e 0a 6f 6e 20 74 68 65 20 6c  rmation.on the l
0390: 61 6e 67 75 61 67 65 20 74 68 61 74 20 53 51 4c  anguage that SQL
03a0: 69 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 2c  ite understands,
03b0: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 6f   refer to the so
03c0: 75 72 63 65 20 63 6f 64 65 20 61 6e 64 0a 74 68  urce code and.th
03d0: 65 20 67 72 61 6d 6d 61 72 20 66 69 6c 65 20 22  e grammar file "
03e0: 70 61 72 73 65 2e 79 22 2e 3c 2f 70 3e 0a 0a 3c  parse.y".</p>..<
03f0: 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  p>The following 
0400: 73 79 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61  syntax documenta
0410: 74 69 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20  tion topics are 
0420: 61 76 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a  available:</p>..
0430: 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30  <table width="10
0440: 30 25 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  0%" cellpadding=
0450: 22 35 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a  "5" border="0">.
0460: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22  <tr><td valign="
0470: 74 6f 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e  top"><ul>..<tcl>
0480: 0a 73 65 74 20 69 20 30 0a 73 65 74 20 6c 61 6e  .set i 0.set lan
0490: 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74 20 7b  g_section_list {
04a0: 0a 20 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c  .  {{CREATE TABL
04b0: 45 7d 20 63 72 65 61 74 65 74 61 62 6c 65 7d 0a  E} createtable}.
04c0: 20 20 7b 7b 43 52 45 41 54 45 20 56 49 52 54 55    {{CREATE VIRTU
04d0: 41 4c 20 54 41 42 4c 45 7d 20 63 72 65 61 74 65  AL TABLE} create
04e0: 76 74 61 62 7d 0a 20 20 7b 7b 43 52 45 41 54 45  vtab}.  {{CREATE
04f0: 20 49 4e 44 45 58 7d 20 63 72 65 61 74 65 69 6e   INDEX} createin
0500: 64 65 78 7d 0a 20 20 7b 56 41 43 55 55 4d 20 76  dex}.  {VACUUM v
0510: 61 63 75 75 6d 7d 0a 20 20 7b 7b 44 52 4f 50 20  acuum}.  {{DROP 
0520: 54 41 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65  TABLE} droptable
0530: 7d 0a 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58  }.  {{DROP INDEX
0540: 7d 20 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 7b  } dropindex}.  {
0550: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0560: 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63   {REPLACE replac
0570: 65 7d 0a 20 20 7b 44 45 4c 45 54 45 20 64 65 6c  e}.  {DELETE del
0580: 65 74 65 7d 0a 20 20 7b 55 50 44 41 54 45 20 75  ete}.  {UPDATE u
0590: 70 64 61 74 65 7d 0a 20 20 7b 53 45 4c 45 43 54  pdate}.  {SELECT
05a0: 20 73 65 6c 65 63 74 7d 0a 20 20 7b 63 6f 6d 6d   select}.  {comm
05b0: 65 6e 74 20 63 6f 6d 6d 65 6e 74 7d 0a 20 20 7b  ent comment}.  {
05c0: 45 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 7d  EXPLAIN explain}
05d0: 0a 20 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 65  .  {expression e
05e0: 78 70 72 7d 0a 20 20 7b 7b 42 45 47 49 4e 20 54  xpr}.  {{BEGIN T
05f0: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
0600: 73 61 63 74 69 6f 6e 7d 0a 20 20 7b 7b 43 4f 4d  saction}.  {{COM
0610: 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d  MIT TRANSACTION}
0620: 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 0a 20 20   transaction}.  
0630: 7b 7b 45 4e 44 20 54 52 41 4e 53 41 43 54 49 4f  {{END TRANSACTIO
0640: 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 0a  N} transaction}.
0650: 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b 20 54 52 41    {{ROLLBACK TRA
0660: 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61  NSACTION} transa
0670: 63 74 69 6f 6e 7d 0a 20 20 7b 53 41 56 45 50 4f  ction}.  {SAVEPO
0680: 49 4e 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20  INT savepoint}. 
0690: 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45 50   {{RELEASE SAVEP
06a0: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 7d  OINT} savepoint}
06b0: 0a 20 20 7b 50 52 41 47 4d 41 20 70 72 61 67 6d  .  {PRAGMA pragm
06c0: 61 2e 68 74 6d 6c 7d 0a 20 20 7b 7b 4f 4e 20 43  a.html}.  {{ON C
06d0: 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20  ONFLICT clause} 
06e0: 63 6f 6e 66 6c 69 63 74 7d 0a 20 20 7b 7b 43 52  conflict}.  {{CR
06f0: 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61 74  EATE VIEW} creat
0700: 65 76 69 65 77 7d 0a 20 20 7b 7b 44 52 4f 50 20  eview}.  {{DROP 
0710: 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77 7d 0a  VIEW} dropview}.
0720: 20 20 7b 7b 43 52 45 41 54 45 20 54 52 49 47 47    {{CREATE TRIGG
0730: 45 52 7d 20 63 72 65 61 74 65 74 72 69 67 67 65  ER} createtrigge
0740: 72 7d 0a 20 20 7b 7b 44 52 4f 50 20 54 52 49 47  r}.  {{DROP TRIG
0750: 47 45 52 7d 20 64 72 6f 70 74 72 69 67 67 65 72  GER} droptrigger
0760: 7d 0a 20 20 7b 7b 41 54 54 41 43 48 20 44 41 54  }.  {{ATTACH DAT
0770: 41 42 41 53 45 7d 20 61 74 74 61 63 68 7d 0a 20  ABASE} attach}. 
0780: 20 7b 7b 44 45 54 41 43 48 20 44 41 54 41 42 41   {{DETACH DATABA
0790: 53 45 7d 20 64 65 74 61 63 68 7d 0a 20 20 7b 52  SE} detach}.  {R
07a0: 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a  EINDEX reindex}.
07b0: 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d    {{ALTER TABLE}
07c0: 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 7b   altertable}.  {
07d0: 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a  {ANALYZE} analyz
07e0: 65 7d 0a 20 20 7b 7b 49 4e 44 45 58 45 44 20 42  e}.  {{INDEXED B
07f0: 59 7d 20 69 6e 64 65 78 65 64 62 79 7d 0a 20 20  Y} indexedby}.  
0800: 7b 7b 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  {{aggregate func
0810: 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63 7d 0a  tions} aggfunc}.
0820: 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f    {{core functio
0830: 6e 73 7d 20 63 6f 72 65 66 75 6e 63 7d 0a 20 20  ns} corefunc}.  
0840: 7b 7b 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  {{date and time 
0850: 66 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66  functions} datef
0860: 75 6e 63 7d 0a 20 20 7b 6b 65 79 77 6f 72 64 73  unc}.  {keywords
0870: 20 6b 65 79 77 6f 72 64 73 7d 0a 7d 0a 73 65 74   keywords}.}.set
0880: 20 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 62 72   lang_section_br
0890: 65 61 6b 20 5b 65 78 70 72 20 7b 28 5b 6c 6c 65  eak [expr {([lle
08a0: 6e 67 74 68 20 24 6c 61 6e 67 5f 73 65 63 74 69  ngth $lang_secti
08b0: 6f 6e 5f 6c 69 73 74 5d 2b 32 29 2f 33 7d 5d 0a  on_list]+2)/3}].
08c0: 66 6f 72 65 61 63 68 20 7b 73 65 63 74 69 6f 6e  foreach {section
08d0: 7d 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20  } [lsort -index 
08e0: 30 20 2d 64 69 63 74 69 6f 6e 61 72 79 20 24 6c  0 -dictionary $l
08f0: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
0900: 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 73  ] {.  foreach {s
0910: 5f 74 69 74 6c 65 20 73 5f 74 61 67 7d 20 24 73  _title s_tag} $s
0920: 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20 7b  ection {}.  if {
0930: 24 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e  $s_tag=="pragma.
0940: 68 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74  html"} {.    set
0950: 20 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20   url $s_tag.  } 
0960: 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75  else {.    set u
0970: 72 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68  rl lang_$s_tag.h
0980: 74 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74  tml.  }.  hd_put
0990: 73 20 22 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 5c  s "<li><a href=\
09a0: 22 24 75 72 6c 5c 22 3e 24 73 5f 74 69 74 6c 65  "$url\">$s_title
09b0: 3c 2f 61 3e 3c 2f 6c 69 3e 22 0a 20 20 69 6e 63  </a></li>".  inc
09c0: 72 20 69 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6c  r i.  if {$i==$l
09d0: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 62 72 65 61  ang_section_brea
09e0: 6b 20 7c 7c 20 24 69 3d 3d 32 2a 24 6c 61 6e 67  k || $i==2*$lang
09f0: 5f 73 65 63 74 69 6f 6e 5f 62 72 65 61 6b 7d 20  _section_break} 
0a00: 7b 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c  {.    hd_puts "<
0a10: 2f 75 6c 3e 3c 2f 74 64 3e 3c 74 64 20 76 61 6c  /ul></td><td val
0a20: 69 67 6e 3d 5c 22 74 6f 70 5c 22 3e 3c 75 6c 3e  ign=\"top\"><ul>
0a30: 22 0a 20 20 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c  ".  }.}.</tcl>.<
0a40: 2f 75 6c 3e 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f  /ul></td></tr></
0a50: 74 61 62 6c 65 3e 0a 0a 3c 70 3e 54 68 65 20 72  table>..<p>The r
0a60: 6f 75 74 69 6e 65 73 20 5b 73 71 6c 69 74 65 33  outines [sqlite3
0a70: 5f 70 72 65 70 61 72 65 5f 76 32 28 29 5d 2c 20  _prepare_v2()], 
0a80: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0a90: 28 29 5d 2c 0a 5b 73 71 6c 69 74 65 33 5f 70 72  ()],.[sqlite3_pr
0aa0: 65 70 61 72 65 31 36 28 29 5d 2c 20 5b 73 71 6c  epare16()], [sql
0ab0: 69 74 65 33 5f 65 78 65 63 28 29 5d 2c 20 61 6e  ite3_exec()], an
0ac0: 64 20 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 74  d [sqlite3_get_t
0ad0: 61 62 6c 65 28 29 5d 20 61 63 63 65 70 74 0a 61  able()] accept.a
0ae0: 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
0af0: 6c 69 73 74 20 28 73 71 6c 2d 73 74 6d 74 2d 6c  list (sql-stmt-l
0b00: 69 73 74 29 20 77 68 69 63 68 20 69 73 20 61 20  ist) which is a 
0b10: 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65 70 61 72 61  semicolon-separa
0b20: 74 65 64 0a 6c 69 73 74 20 6f 66 20 73 74 61 74  ted.list of stat
0b30: 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 74 63  ements.</p>..<tc
0b40: 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  l>BubbleDiagram 
0b50: 73 71 6c 2d 73 74 6d 74 2d 6c 69 73 74 3c 2f 74  sql-stmt-list</t
0b60: 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68 20 53 51 4c  cl>..<p>Each SQL
0b70: 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74 68   statement in th
0b80: 65 20 73 74 61 74 65 6d 65 6e 74 20 6c 69 73 74  e statement list
0b90: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
0ba0: 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f 77 69 6e 67  of the.following
0bb0: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62  :</p>..<tcl>Bubb
0bc0: 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74  leDiagram sql-st
0bd0: 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74 63 6c 3e 0a  mt</tcl>..<tcl>.
0be0: 70 72 6f 63 20 4f 70 65 72 61 74 6f 72 20 7b 6e  proc Operator {n
0bf0: 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20  ame} {.  return 
0c00: 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23  "<font color=\"#
0c10: 32 63 32 63 66 30 5c 22 3e 3c 62 69 67 3e 24 6e  2c2cf0\"><big>$n
0c20: 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e  ame</big></font>
0c30: 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74 65 72 6d  ".}.proc Nonterm
0c40: 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20  inal {name} {.  
0c50: 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66 6f 6e 74  return "<i><font
0c60: 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33 34 33 34   color=\"#ff3434
0c70: 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 3c  \">$name</font><
0c80: 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b 65 79 77  /i>".}.proc Keyw
0c90: 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72  ord {name} {.  r
0ca0: 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c  eturn "<font col
0cb0: 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e 24  or=\"#2c2cf0\">$
0cc0: 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a 70  name</font>".}.p
0cd0: 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b 74 65 78  roc Example {tex
0ce0: 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73 20 22  t} {.  hd_puts "
0cf0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
0d00: 3e 24 74 65 78 74 3c 2f 70 72 65 3e 3c 2f 62 6c  >$text</pre></bl
0d10: 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d 0a 0a 70 72  ockquote>".}..pr
0d20: 6f 63 20 53 65 63 74 69 6f 6e 20 7b 6e 61 6d 65  oc Section {name
0d30: 20 6c 61 62 65 6c 20 6b 65 79 77 6f 72 64 73 7d   label keywords}
0d40: 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 44 4f 43 0a   {.  global DOC.
0d50: 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61 69 6e 0a    hd_close_main.
0d60: 20 20 68 64 5f 6f 70 65 6e 5f 6d 61 69 6e 20 6c    hd_open_main l
0d70: 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74 6d 6c 0a  ang_$label.html.
0d80: 20 20 68 64 5f 68 65 61 64 65 72 20 22 53 51 4c    hd_header "SQL
0d90: 69 74 65 20 51 75 65 72 79 20 4c 61 6e 67 75 61  ite Query Langua
0da0: 67 65 3a 20 24 6e 61 6d 65 22 20 24 44 4f 43 2f  ge: $name" $DOC/
0db0: 70 61 67 65 73 2f 6c 61 6e 67 2e 69 6e 0a 20 20  pages/lang.in.  
0dc0: 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73  eval hd_keywords
0dd0: 20 24 6b 65 79 77 6f 72 64 73 0a 20 20 68 64 5f   $keywords.  hd_
0de0: 70 75 74 73 20 7b 3c 61 20 68 72 65 66 3d 22 6c  puts {<a href="l
0df0: 61 6e 67 2e 68 74 6d 6c 22 3e 0a 20 20 20 20 20  ang.html">.     
0e00: 20 20 20 20 20 20 3c 68 32 20 61 6c 69 67 6e 3d        <h2 align=
0e10: 22 63 65 6e 74 65 72 22 3e 53 51 4c 20 41 73 20  "center">SQL As 
0e20: 55 6e 64 65 72 73 74 6f 6f 64 20 42 79 20 53 51  Understood By SQ
0e30: 4c 69 74 65 3c 2f 68 32 3e 3c 2f 61 3e 7d 0a 20  Lite</h2></a>}. 
0e40: 20 68 64 5f 70 75 74 73 20 22 3c 68 31 3e 24 6e   hd_puts "<h1>$n
0e50: 61 6d 65 3c 2f 68 31 3e 22 0a 7d 0a 0a 23 23 23  ame</h1>".}..###
0e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ea0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
0eb0: 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c  tion {ALTER TABL
0ec0: 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 7b  E} altertable {{
0ed0: 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 41 4c  ALTER TABLE} {AL
0ee0: 54 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  TER}}..BubbleDia
0ef0: 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62 6c 65  gram alter-table
0f00: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
0f10: 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70 6f 72  <p>SQLite suppor
0f20: 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73 75 62  ts a limited sub
0f30: 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54 41 42  set of ALTER TAB
0f40: 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20 54 41  LE..The ALTER TA
0f50: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 53  BLE command in S
0f60: 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65  QLite allows the
0f70: 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d 65 20   user to rename 
0f80: 61 20 74 61 62 6c 65 0a 6f 72 20 74 6f 20 61 64  a table.or to ad
0f90: 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74  d a new column t
0fa0: 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  o an existing ta
0fb0: 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74 20 70  ble. It is not p
0fc0: 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6e 61 6d  ossible.to renam
0fd0: 65 20 61 20 63 6f 6c 75 6d 2c 20 72 65 6d 6f 76  e a colum, remov
0fe0: 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 61  e a column, or a
0ff0: 64 64 20 6f 72 20 72 65 6d 6f 76 65 20 63 6f 6e  dd or remove con
1000: 73 74 72 61 69 6e 74 73 20 66 72 6f 6d 20 61 20  straints from a 
1010: 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  table..</p>..<p>
1020: 54 68 65 20 52 45 4e 41 4d 45 20 54 4f 20 73 79  The RENAME TO sy
1030: 6e 74 61 78 20 69 73 20 75 73 65 64 20 74 6f 20  ntax is used to 
1040: 72 65 6e 61 6d 65 20 74 68 65 20 74 61 62 6c 65  rename the table
1050: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 0a   identified by .
1060: 3c 69 3e 26 23 39 31 3b 64 61 74 61 62 61 73 65  <i>&#91;database
1070: 2d 6e 61 6d 65 2e 26 23 39 33 3b 74 61 62 6c 65  -name.&#93;table
1080: 2d 6e 61 6d 65 3c 2f 69 3e 20 74 6f 20 3c 69 3e  -name</i> to <i>
1090: 6e 65 77 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  new-table-name</
10a0: 69 3e 2e 0a 54 68 69 73 20 63 6f 6d 6d 61 6e 64  i>..This command
10b0: 20 0a 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64   .cannot be used
10c0: 20 74 6f 20 6d 6f 76 65 20 61 20 74 61 62 6c 65   to move a table
10d0: 20 62 65 74 77 65 65 6e 20 61 74 74 61 63 68 65   between attache
10e0: 64 20 64 61 74 61 62 61 73 65 73 2c 20 6f 6e 6c  d databases, onl
10f0: 79 20 74 6f 20 72 65 6e 61 6d 65 20 0a 61 20 74  y to rename .a t
1100: 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68 65 20  able within the 
1110: 73 61 6d 65 20 64 61 74 61 62 61 73 65 2e 3c 2f  same database.</
1120: 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20 74 61  p>..<p>If the ta
1130: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1140: 64 20 68 61 73 20 74 72 69 67 67 65 72 73 20 6f  d has triggers o
1150: 72 20 69 6e 64 69 63 65 73 2c 20 74 68 65 6e 20  r indices, then 
1160: 74 68 65 73 65 20 72 65 6d 61 69 6e 0a 61 74 74  these remain.att
1170: 61 63 68 65 64 20 74 6f 20 74 68 65 20 74 61 62  ached to the tab
1180: 6c 65 20 61 66 74 65 72 20 69 74 20 68 61 73 20  le after it has 
1190: 62 65 65 6e 20 72 65 6e 61 6d 65 64 2e 20 48 6f  been renamed. Ho
11a0: 77 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20  wever, if there 
11b0: 61 72 65 0a 61 6e 79 20 76 69 65 77 20 64 65 66  are.any view def
11c0: 69 6e 69 74 69 6f 6e 73 2c 20 6f 72 20 73 74 61  initions, or sta
11d0: 74 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64  tements executed
11e0: 20 62 79 20 74 72 69 67 67 65 72 73 20 74 68 61   by triggers tha
11f0: 74 20 72 65 66 65 72 20 74 6f 0a 74 68 65 20 74  t refer to.the t
1200: 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d  able being renam
1210: 65 64 2c 20 74 68 65 73 65 20 61 72 65 20 6e 6f  ed, these are no
1220: 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  t automatically 
1230: 6d 6f 64 69 66 69 65 64 20 74 6f 20 75 73 65 20  modified to use 
1240: 74 68 65 20 6e 65 77 0a 74 61 62 6c 65 20 6e 61  the new.table na
1250: 6d 65 2e 20 49 66 20 74 68 69 73 20 69 73 20 72  me. If this is r
1260: 65 71 75 69 72 65 64 2c 20 74 68 65 20 74 72 69  equired, the tri
1270: 67 67 65 72 73 20 6f 72 20 76 69 65 77 20 64 65  ggers or view de
1280: 66 69 6e 69 74 69 6f 6e 73 20 6d 75 73 74 20 62  finitions must b
1290: 65 0a 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65  e.dropped and re
12a0: 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74  created to use t
12b0: 68 65 20 6e 65 77 20 74 61 62 6c 65 20 6e 61 6d  he new table nam
12c0: 65 20 62 79 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a  e by hand..</p>.
12d0: 0a 3c 70 3e 54 68 65 20 41 44 44 20 43 4f 4c 55  .<p>The ADD COLU
12e0: 4d 4e 20 73 79 6e 74 61 78 0a 69 73 20 75 73 65  MN syntax.is use
12f0: 64 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63  d to add a new c
1300: 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69 73  olumn to an exis
1310: 74 69 6e 67 20 74 61 62 6c 65 2e 0a 54 68 65 20  ting table..The 
1320: 6e 65 77 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6c  new column is al
1330: 77 61 79 73 20 61 70 70 65 6e 64 65 64 20 74 6f  ways appended to
1340: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
1350: 6c 69 73 74 20 6f 66 20 65 78 69 73 74 69 6e 67  list of existing
1360: 20 63 6f 6c 75 6d 6e 73 2e 0a 54 68 65 20 5b 63   columns..The [c
1370: 6f 6c 75 6d 6e 2d 64 65 66 5d 20 72 75 6c 65 20  olumn-def] rule 
1380: 64 65 66 69 6e 65 73 20 74 68 65 20 63 68 61 72  defines the char
1390: 61 63 74 65 72 69 73 74 69 63 73 20 6f 66 20 74  acteristics of t
13a0: 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 2e 0a 54  he new column..T
13b0: 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 6d 61  he new column ma
13c0: 79 20 74 61 6b 65 20 61 6e 79 20 6f 66 20 74 68  y take any of th
13d0: 65 20 66 6f 72 6d 73 20 70 65 72 6d 69 73 73 61  e forms permissa
13e0: 62 6c 65 20 69 6e 20 61 20 5b 43 52 45 41 54 45  ble in a [CREATE
13f0: 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e   TABLE].statemen
1400: 74 2c 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c  t, with the foll
1410: 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69 6f  owing restrictio
1420: 6e 73 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 54 68 65  ns:.<ul>.<li>The
1430: 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20   column may not 
1440: 68 61 76 65 20 61 20 50 52 49 4d 41 52 59 20 4b  have a PRIMARY K
1450: 45 59 20 6f 72 20 55 4e 49 51 55 45 20 63 6f 6e  EY or UNIQUE con
1460: 73 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c  straint.</li>.<l
1470: 69 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79  i>The column may
1480: 20 6e 6f 74 20 68 61 76 65 20 61 20 64 65 66 61   not have a defa
1490: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 43 55 52  ult value of CUR
14a0: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
14b0: 4e 54 5f 44 41 54 45 20 0a 20 20 20 20 6f 72 20  NT_DATE .    or 
14c0: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
14d0: 50 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 49 66 20 61  P.</li>.<li>If a
14e0: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
14f0: 61 69 6e 74 20 69 73 20 73 70 65 63 69 66 69 65  aint is specifie
1500: 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75  d, then the colu
1510: 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 0a 20  mn must have a. 
1520: 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65     default value
1530: 20 6f 74 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c   other than NULL
1540: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 54 68 65 20  ..</ul>..<p>The 
1550: 65 78 65 63 75 74 69 6f 6e 20 74 69 6d 65 20 6f  execution time o
1560: 66 20 74 68 65 20 41 4c 54 45 52 20 54 41 42 4c  f the ALTER TABL
1570: 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 64  E command is ind
1580: 65 70 65 6e 64 65 6e 74 20 6f 66 0a 74 68 65 20  ependent of.the 
1590: 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61 20 69  amount of data i
15a0: 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68  n the table.  Th
15b0: 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f  e ALTER TABLE co
15c0: 6d 6d 61 6e 64 20 72 75 6e 73 20 61 73 20 71 75  mmand runs as qu
15d0: 69 63 6b 6c 79 0a 6f 6e 20 61 20 74 61 62 6c 65  ickly.on a table
15e0: 20 77 69 74 68 20 31 30 20 6d 69 6c 6c 69 6f 6e   with 10 million
15f0: 20 72 6f 77 73 20 61 73 20 69 74 20 64 6f 65 73   rows as it does
1600: 20 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68   on a table with
1610: 20 31 20 72 6f 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70   1 row..</p>..<p
1620: 3e 41 66 74 65 72 20 41 44 44 20 43 4f 4c 55 4d  >After ADD COLUM
1630: 4e 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20 6f  N has been run o
1640: 6e 20 61 20 64 61 74 61 62 61 73 65 2c 20 74 68  n a database, th
1650: 61 74 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c  at database will
1660: 20 6e 6f 74 0a 62 65 20 72 65 61 64 61 62 6c 65   not.be readable
1670: 20 62 79 20 53 51 4c 69 74 65 20 76 65 72 73 69   by SQLite versi
1680: 6f 6e 20 33 2e 31 2e 33 20 61 6e 64 20 65 61 72  on 3.1.3 and ear
1690: 6c 69 65 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  lier.</p>..<tcl>
16a0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
16b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
16f0: 53 65 63 74 69 6f 6e 20 7b 41 4e 41 4c 59 5a 45  Section {ANALYZE
1700: 7d 20 61 6e 61 6c 79 7a 65 20 41 4e 41 4c 59 5a  } analyze ANALYZ
1710: 45 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  E..BubbleDiagram
1720: 20 61 6e 61 6c 79 7a 65 2d 73 74 6d 74 20 31 0a   analyze-stmt 1.
1730: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 41  </tcl>..<p>The A
1740: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67  NALYZE command g
1750: 61 74 68 65 72 73 20 73 74 61 74 69 73 74 69 63  athers statistic
1760: 73 20 61 62 6f 75 74 20 69 6e 64 69 63 65 73 20  s about indices 
1770: 61 6e 64 20 73 74 6f 72 65 73 20 74 68 65 6d 0a  and stores them.
1780: 69 6e 20 61 20 73 70 65 63 69 61 6c 20 74 61 62  in a special tab
1790: 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
17a0: 61 73 65 20 77 68 65 72 65 20 74 68 65 20 71 75  ase where the qu
17b0: 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 61  ery optimizer ca
17c0: 6e 20 75 73 65 0a 74 68 65 6d 20 74 6f 20 68 65  n use.them to he
17d0: 6c 70 20 6d 61 6b 65 20 62 65 74 74 65 72 20 69  lp make better i
17e0: 6e 64 65 78 20 63 68 6f 69 63 65 73 2e 0a 49 66  ndex choices..If
17f0: 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 61 72   no arguments ar
1800: 65 20 67 69 76 65 6e 2c 20 61 6c 6c 20 69 6e 64  e given, all ind
1810: 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61  ices in all atta
1820: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
1830: 72 65 0a 61 6e 61 6c 79 7a 65 64 2e 20 20 49 66  re.analyzed.  If
1840: 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
1850: 20 69 73 20 67 69 76 65 6e 20 61 73 20 74 68 65   is given as the
1860: 20 61 72 67 75 6d 65 6e 74 2c 20 61 6c 6c 20 69   argument, all i
1870: 6e 64 69 63 65 73 0a 69 6e 20 74 68 61 74 20 6f  ndices.in that o
1880: 6e 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20  ne database are 
1890: 61 6e 61 6c 79 7a 65 64 2e 20 20 49 66 20 74 68  analyzed.  If th
18a0: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
18b0: 74 61 62 6c 65 20 6e 61 6d 65 2c 0a 74 68 65 6e  table name,.then
18c0: 20 6f 6e 6c 79 20 69 6e 64 69 63 65 73 20 61 73   only indices as
18d0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
18e0: 61 74 20 6f 6e 65 20 74 61 62 6c 65 20 61 72 65  at one table are
18f0: 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a   analyzed.</p>..
1900: 3c 70 3e 54 68 65 20 69 6e 69 74 69 61 6c 20 69  <p>The initial i
1910: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74  mplementation st
1920: 6f 72 65 73 20 61 6c 6c 20 73 74 61 74 69 73 74  ores all statist
1930: 69 63 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a  ics in a single.
1940: 74 61 62 6c 65 20 6e 61 6d 65 64 20 3c 62 3e 73  table named <b>s
1950: 71 6c 69 74 65 5f 73 74 61 74 31 3c 2f 62 3e 2e  qlite_stat1</b>.
1960: 20 20 46 75 74 75 72 65 20 65 6e 68 61 6e 63 65    Future enhance
1970: 6d 65 6e 74 73 20 6d 61 79 20 63 72 65 61 74 65  ments may create
1980: 0a 61 64 64 69 74 69 6f 6e 61 6c 20 74 61 62 6c  .additional tabl
1990: 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  es with the same
19a0: 20 6e 61 6d 65 20 70 61 74 74 65 72 6e 20 65 78   name pattern ex
19b0: 63 65 70 74 20 77 69 74 68 20 74 68 65 20 22 31  cept with the "1
19c0: 22 0a 63 68 61 6e 67 65 64 20 74 6f 20 61 20 64  ".changed to a d
19d0: 69 66 66 65 72 65 6e 74 20 64 69 67 69 74 2e 20  ifferent digit. 
19e0: 20 54 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45   The [DROP TABLE
19f0: 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 0a 6e  ] command does.n
1a00: 6f 74 20 77 6f 72 6b 20 6f 6e 20 74 68 65 20 3c  ot work on the <
1a10: 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 31 3c 2f  b>sqlite_stat1</
1a20: 62 3e 20 74 61 62 6c 65 2c 0a 62 75 74 20 61 6c  b> table,.but al
1a30: 6c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 63 61  l the content ca
1a40: 6e 20 62 65 20 72 65 6d 6f 76 65 64 20 75 73 69  n be removed usi
1a50: 6e 67 20 74 68 65 20 5b 44 45 4c 45 54 45 5d 20  ng the [DELETE] 
1a60: 63 6f 6d 6d 61 6e 64 2c 0a 77 68 69 63 68 20 68  command,.which h
1a70: 61 73 20 74 68 65 20 73 61 6d 65 20 65 66 66 65  as the same effe
1a80: 63 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  ct.</p>..<tcl>.#
1a90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1aa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1ae0: 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44 41  ction {ATTACH DA
1af0: 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 20 41  TABASE} attach A
1b00: 54 54 41 43 48 0a 0a 42 75 62 62 6c 65 44 69 61  TTACH..BubbleDia
1b10: 67 72 61 6d 20 61 74 74 61 63 68 2d 73 74 6d 74  gram attach-stmt
1b20: 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68   1.</tcl>..<p>Th
1b30: 65 20 41 54 54 41 43 48 20 44 41 54 41 42 41 53  e ATTACH DATABAS
1b40: 45 20 73 74 61 74 65 6d 65 6e 74 20 61 64 64 73  E statement adds
1b50: 20 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73   another databas
1b60: 65 20 0a 66 69 6c 65 20 74 6f 20 74 68 65 20 63  e .file to the c
1b70: 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65 20  urrent database 
1b80: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20  connection.  If 
1b90: 74 68 65 20 66 69 6c 65 6e 61 6d 65 20 63 6f 6e  the filename con
1ba0: 74 61 69 6e 73 20 0a 70 75 6e 63 74 75 61 74 69  tains .punctuati
1bb0: 6f 6e 20 63 68 61 72 61 63 74 65 72 73 20 69 74  on characters it
1bc0: 20 6d 75 73 74 20 62 65 20 71 75 6f 74 65 64 2e   must be quoted.
1bd0: 20 20 54 68 65 20 6e 61 6d 65 73 20 27 6d 61 69    The names 'mai
1be0: 6e 27 20 61 6e 64 20 0a 27 74 65 6d 70 27 20 72  n' and .'temp' r
1bf0: 65 66 65 72 20 74 6f 20 74 68 65 20 6d 61 69 6e  efer to the main
1c00: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 68   database and th
1c10: 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  e database used 
1c20: 66 6f 72 20 0a 74 65 6d 70 6f 72 61 72 79 20 74  for .temporary t
1c30: 61 62 6c 65 73 2e 20 20 54 68 65 73 65 20 63 61  ables.  These ca
1c40: 6e 6e 6f 74 20 62 65 20 64 65 74 61 63 68 65 64  nnot be detached
1c50: 2e 20 20 41 74 74 61 63 68 65 64 20 64 61 74 61  .  Attached data
1c60: 62 61 73 65 73 20 0a 61 72 65 20 72 65 6d 6f 76  bases .are remov
1c70: 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 45  ed using the [DE
1c80: 54 41 43 48 5d 20 73 74 61 74 65 6d 65 6e 74 2e  TACH] statement.
1c90: 3c 2f 70 3e 0a 0a 3c 70 3e 59 6f 75 20 63 61 6e  </p>..<p>You can
1ca0: 6e 6f 74 20 63 72 65 61 74 65 20 61 20 6e 65 77  not create a new
1cb0: 20 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20   table with the 
1cc0: 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 20 74  same name as a t
1cd0: 61 62 6c 65 20 69 6e 20 0a 61 6e 20 61 74 74 61  able in .an atta
1ce0: 63 68 65 64 20 64 61 74 61 62 61 73 65 2c 20 62  ched database, b
1cf0: 75 74 20 79 6f 75 20 63 61 6e 20 61 74 74 61 63  ut you can attac
1d00: 68 20 61 20 64 61 74 61 62 61 73 65 20 77 68 69  h a database whi
1d10: 63 68 20 63 6f 6e 74 61 69 6e 73 0a 74 61 62 6c  ch contains.tabl
1d20: 65 73 20 77 68 6f 73 65 20 6e 61 6d 65 73 20 61  es whose names a
1d30: 72 65 20 64 75 70 6c 69 63 61 74 65 73 20 6f 66  re duplicates of
1d40: 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 6d   tables in the m
1d50: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 49  ain database.  I
1d60: 74 20 69 73 20 0a 61 6c 73 6f 20 70 65 72 6d 69  t is .also permi
1d70: 73 73 69 62 6c 65 20 74 6f 20 61 74 74 61 63 68  ssible to attach
1d80: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
1d90: 73 65 20 66 69 6c 65 20 6d 75 6c 74 69 70 6c 65  se file multiple
1da0: 20 74 69 6d 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e   times.</p>..<p>
1db0: 54 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74 74  Tables in an att
1dc0: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 63  ached database c
1dd0: 61 6e 20 62 65 20 72 65 66 65 72 72 65 64 20 74  an be referred t
1de0: 6f 20 75 73 69 6e 67 20 74 68 65 20 73 79 6e 74  o using the synt
1df0: 61 78 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d  ax .<i>database-
1e00: 6e 61 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c  name.table-name<
1e10: 2f 69 3e 2e 20 20 49 66 20 61 6e 20 61 74 74 61  /i>.  If an atta
1e20: 63 68 65 64 20 74 61 62 6c 65 20 64 6f 65 73 6e  ched table doesn
1e30: 27 74 20 68 61 76 65 20 0a 61 20 64 75 70 6c 69  't have .a dupli
1e40: 63 61 74 65 20 74 61 62 6c 65 20 6e 61 6d 65 20  cate table name 
1e50: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
1e60: 62 61 73 65 2c 20 69 74 20 64 6f 65 73 6e 27 74  base, it doesn't
1e70: 20 72 65 71 75 69 72 65 20 61 20 0a 64 61 74 61   require a .data
1e80: 62 61 73 65 20 6e 61 6d 65 20 70 72 65 66 69 78  base name prefix
1e90: 2e 20 20 57 68 65 6e 20 61 20 64 61 74 61 62 61  .  When a databa
1ea0: 73 65 20 69 73 20 61 74 74 61 63 68 65 64 2c 20  se is attached, 
1eb0: 61 6c 6c 20 6f 66 20 69 74 73 20 0a 74 61 62 6c  all of its .tabl
1ec0: 65 73 20 77 68 69 63 68 20 64 6f 6e 27 74 20 68  es which don't h
1ed0: 61 76 65 20 64 75 70 6c 69 63 61 74 65 20 6e 61  ave duplicate na
1ee0: 6d 65 73 20 62 65 63 6f 6d 65 20 74 68 65 20 64  mes become the d
1ef0: 65 66 61 75 6c 74 20 74 61 62 6c 65 0a 6f 66 20  efault table.of 
1f00: 74 68 61 74 20 6e 61 6d 65 2e 20 20 41 6e 79 20  that name.  Any 
1f10: 74 61 62 6c 65 73 20 6f 66 20 74 68 61 74 20 6e  tables of that n
1f20: 61 6d 65 20 61 74 74 61 63 68 65 64 20 61 66 74  ame attached aft
1f30: 65 72 77 61 72 64 73 20 72 65 71 75 69 72 65 20  erwards require 
1f40: 74 68 65 0a 64 61 74 61 62 61 73 65 20 70 72 65  the.database pre
1f50: 66 69 78 2e 20 49 66 20 74 68 65 20 64 65 66 61  fix. If the defa
1f60: 75 6c 74 20 74 61 62 6c 65 20 6f 66 20 61 20 67  ult table of a g
1f70: 69 76 65 6e 20 6e 61 6d 65 20 69 73 20 64 65 74  iven name is det
1f80: 61 63 68 65 64 2c 20 74 68 65 6e 0a 74 68 65 20  ached, then.the 
1f90: 6c 61 73 74 20 74 61 62 6c 65 20 6f 66 20 74 68  last table of th
1fa0: 61 74 20 6e 61 6d 65 20 61 74 74 61 63 68 65 64  at name attached
1fb0: 20 62 65 63 6f 6d 65 73 20 74 68 65 20 6e 65 77   becomes the new
1fc0: 20 64 65 66 61 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c   default.</p>..<
1fd0: 70 3e 0a 54 72 61 6e 73 61 63 74 69 6f 6e 73 20  p>.Transactions 
1fe0: 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
1ff0: 6c 65 20 61 74 74 61 63 68 65 64 20 64 61 74 61  le attached data
2000: 62 61 73 65 73 20 61 72 65 20 61 74 6f 6d 69 63  bases are atomic
2010: 2c 0a 61 73 73 75 6d 69 6e 67 20 74 68 61 74 20  ,.assuming that 
2020: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2030: 65 20 69 73 20 6e 6f 74 20 22 3a 6d 65 6d 6f 72  e is not ":memor
2040: 79 3a 22 2e 20 20 49 66 20 74 68 65 20 6d 61 69  y:".  If the mai
2050: 6e 0a 64 61 74 61 62 61 73 65 20 69 73 20 22 3a  n.database is ":
2060: 6d 65 6d 6f 72 79 3a 22 20 74 68 65 6e 20 0a 74  memory:" then .t
2070: 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e 74  ransactions cont
2080: 69 6e 75 65 20 74 6f 20 62 65 20 61 74 6f 6d 69  inue to be atomi
2090: 63 20 77 69 74 68 69 6e 20 65 61 63 68 20 69 6e  c within each in
20a0: 64 69 76 69 64 75 61 6c 0a 64 61 74 61 62 61 73  dividual.databas
20b0: 65 20 66 69 6c 65 2e 20 42 75 74 20 69 66 20 74  e file. But if t
20c0: 68 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72  he host computer
20d0: 20 63 72 61 73 68 65 73 20 69 6e 20 74 68 65 20   crashes in the 
20e0: 6d 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43 4f 4d  middle.of a [COM
20f0: 4d 49 54 5d 20 77 68 65 72 65 20 74 77 6f 20 6f  MIT] where two o
2100: 72 20 6d 6f 72 65 20 64 61 74 61 62 61 73 65 20  r more database 
2110: 66 69 6c 65 73 20 61 72 65 20 75 70 64 61 74 65  files are update
2120: 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73 65  d,.some of those
2130: 20 66 69 6c 65 73 20 6d 69 67 68 74 20 67 65 74   files might get
2140: 20 74 68 65 20 63 68 61 6e 67 65 73 20 77 68 65   the changes whe
2150: 72 65 20 6f 74 68 65 72 73 0a 6d 69 67 68 74 20  re others.might 
2160: 6e 6f 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  not..</p>..<p>Th
2170: 65 72 65 20 69 73 20 61 20 63 6f 6d 70 69 6c 65  ere is a compile
2180: 2d 74 69 6d 65 20 6c 69 6d 69 74 20 6f 66 20 5b  -time limit of [
2190: 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
21a0: 48 45 44 5d 0a 61 74 74 61 63 68 65 64 20 64 61  HED].attached da
21b0: 74 61 62 61 73 65 20 66 69 6c 65 73 2e 3c 2f 70  tabase files.</p
21c0: 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
21d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2210: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
2220: 20 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54   {BEGIN TRANSACT
2230: 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e  ION} transaction
2240: 20 7b 42 45 47 49 4e 20 43 4f 4d 4d 49 54 20 52   {BEGIN COMMIT R
2250: 4f 4c 4c 42 41 43 4b 7d 0a 0a 42 75 62 62 6c 65  OLLBACK}..Bubble
2260: 44 69 61 67 72 61 6d 20 62 65 67 69 6e 2d 73 74  Diagram begin-st
2270: 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  mt.BubbleDiagram
2280: 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a 42 75 62   commit-stmt.Bub
2290: 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62  bleDiagram rollb
22a0: 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ack-stmt.</tcl>.
22b0: 0a 3c 70 3e 0a 4e 6f 20 63 68 61 6e 67 65 73 20  .<p>.No changes 
22c0: 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
22d0: 68 65 20 64 61 74 61 62 61 73 65 20 65 78 63 65  he database exce
22e0: 70 74 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  pt within a tran
22f0: 73 61 63 74 69 6f 6e 2e 0a 41 6e 79 20 63 6f 6d  saction..Any com
2300: 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e 67 65  mand that change
2310: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  s the database (
2320: 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79 20 53  basically, any S
2330: 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65 72  QL command.other
2340: 20 74 68 61 6e 20 5b 53 45 4c 45 43 54 5d 29 20   than [SELECT]) 
2350: 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c  will automatical
2360: 6c 79 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ly start a trans
2370: 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20 69 73  action if.one is
2380: 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69 6e 20   not already in 
2390: 65 66 66 65 63 74 2e 20 20 41 75 74 6f 6d 61 74  effect.  Automat
23a0: 69 63 61 6c 6c 79 20 73 74 61 72 74 65 64 20 74  ically started t
23b0: 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 72 65 20  ransactions.are 
23c0: 63 6f 6d 6d 69 74 74 65 64 20 77 68 65 6e 20 74  committed when t
23d0: 68 65 20 6c 61 73 74 20 71 75 65 72 79 20 66 69  he last query fi
23e0: 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70  nishes..</p>..<p
23f0: 3e 0a 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63  >.Transactions c
2400: 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 6d 61  an be started ma
2410: 6e 75 61 6c 6c 79 20 75 73 69 6e 67 20 74 68 65  nually using the
2420: 20 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20   BEGIN.command. 
2430: 20 53 75 63 68 20 74 72 61 6e 73 61 63 74 69 6f   Such transactio
2440: 6e 73 20 75 73 75 61 6c 6c 79 20 70 65 72 73 69  ns usually persi
2450: 73 74 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  st until the nex
2460: 74 0a 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c  t.COMMIT or ROLL
2470: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 42  BACK command.  B
2480: 75 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ut a transaction
2490: 20 77 69 6c 6c 20 61 6c 73 6f 20 0a 52 4f 4c 4c   will also .ROLL
24a0: 42 41 43 4b 20 69 66 20 74 68 65 20 64 61 74 61  BACK if the data
24b0: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 6f  base is closed o
24c0: 72 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  r if an error oc
24d0: 63 75 72 73 0a 61 6e 64 20 74 68 65 20 52 4f 4c  curs.and the ROL
24e0: 4c 42 41 43 4b 20 63 6f 6e 66 6c 69 63 74 20 72  LBACK conflict r
24f0: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
2500: 74 68 6d 20 69 73 20 73 70 65 63 69 66 69 65 64  thm is specified
2510: 2e 0a 53 65 65 20 74 68 65 20 64 6f 63 75 6d 65  ..See the docume
2520: 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 5b  ntation on the [
2530: 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 0a 63 6c 61  ON CONFLICT].cla
2540: 75 73 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  use for addition
2550: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  al information a
2560: 62 6f 75 74 20 74 68 65 20 52 4f 4c 4c 42 41 43  bout the ROLLBAC
2570: 4b 0a 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  K.conflict resol
2580: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e  ution algorithm.
2590: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 45 4e 44 20 54  .</p>..<p>.END T
25a0: 52 41 4e 53 41 43 54 49 4f 4e 20 69 73 20 61 6e  RANSACTION is an
25b0: 20 61 6c 69 61 73 20 66 6f 72 20 43 4f 4d 4d 49   alias for COMMI
25c0: 54 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 72 61 6e  T..</p>..<p>Tran
25d0: 73 61 63 74 69 6f 6e 73 20 63 72 65 61 74 65 64  sactions created
25e0: 20 75 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43   using BEGIN...C
25f0: 4f 4d 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73  OMMIT do not nes
2600: 74 2e 0a 46 6f 72 20 6e 65 73 74 65 64 20 74 72  t..For nested tr
2610: 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73 65 20  ansactions, use 
2620: 74 68 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20  the [SAVEPOINT] 
2630: 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f  and [RELEASE] co
2640: 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20  mmands..The "TO 
2650: 53 41 56 45 50 4f 49 4e 54 20 3c 69 3e 6e 61 6d  SAVEPOINT <i>nam
2660: 65 3c 2f 69 3e 22 20 63 6c 61 75 73 65 20 6f 66  e</i>" clause of
2670: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
2680: 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a 69 6e 20 74  mmand shown.in t
2690: 68 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  he syntax diagra
26a0: 6d 20 61 62 6f 76 65 20 69 73 20 6f 6e 6c 79 20  m above is only 
26b0: 61 70 70 6c 69 63 61 62 6c 65 20 74 6f 20 5b 53  applicable to [S
26c0: 41 56 45 50 4f 49 4e 54 5d 0a 74 72 61 6e 73 61  AVEPOINT].transa
26d0: 63 74 69 6f 6e 73 2e 20 20 41 6e 20 61 74 74 65  ctions.  An atte
26e0: 6d 70 74 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68  mpt to invoke th
26f0: 65 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20  e BEGIN command 
2700: 77 69 74 68 69 6e 0a 61 20 74 72 61 6e 73 61 63  within.a transac
2710: 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77  tion will fail w
2720: 69 74 68 20 61 6e 20 65 72 72 6f 72 2c 20 72 65  ith an error, re
2730: 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
2740: 68 65 72 0a 74 68 65 20 74 72 61 6e 73 61 63 74  her.the transact
2750: 69 6f 6e 20 77 61 73 20 73 74 61 72 74 65 64 20  ion was started 
2760: 62 79 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f  by [SAVEPOINT] o
2770: 72 20 61 20 70 72 69 6f 72 20 42 45 47 49 4e 2e  r a prior BEGIN.
2780: 0a 54 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d  .The COMMIT comm
2790: 61 6e 64 20 61 6e 64 20 74 68 65 20 52 4f 4c 4c  and and the ROLL
27a0: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74  BACK command wit
27b0: 68 6f 75 74 20 74 68 65 20 54 4f 20 63 6c 61 75  hout the TO clau
27c0: 73 65 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d 65  se.work the same
27d0: 20 6f 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20   on [SAVEPOINT] 
27e0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 73 20  transactions as 
27f0: 74 68 65 79 20 64 6f 20 77 69 74 68 20 74 72 61  they do with tra
2800: 6e 73 61 63 74 69 6f 6e 73 0a 73 74 61 72 74 65  nsactions.starte
2810: 64 20 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a  d by BEGIN.</p>.
2820: 0a 3c 70 3e 0a 54 72 61 6e 73 61 63 74 69 6f 6e  .<p>.Transaction
2830: 73 20 63 61 6e 20 62 65 20 64 65 66 65 72 72 65  s can be deferre
2840: 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72  d, immediate, or
2850: 20 65 78 63 6c 75 73 69 76 65 2e 20 20 0a 54 68   exclusive.  .Th
2860: 65 20 64 65 66 61 75 6c 74 20 74 72 61 6e 73 61  e default transa
2870: 63 74 69 6f 6e 20 62 65 68 61 76 69 6f 72 20 69  ction behavior i
2880: 73 20 64 65 66 65 72 72 65 64 2e 0a 44 65 66 65  s deferred..Defe
2890: 72 72 65 64 20 6d 65 61 6e 73 20 74 68 61 74 20  rred means that 
28a0: 6e 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61 63 71  no locks are acq
28b0: 75 69 72 65 64 0a 6f 6e 20 74 68 65 20 64 61 74  uired.on the dat
28c0: 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20  abase until the 
28d0: 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72 73  database is firs
28e0: 74 20 61 63 63 65 73 73 65 64 2e 20 20 54 68 75  t accessed.  Thu
28f0: 73 20 77 69 74 68 20 61 0a 64 65 66 65 72 72 65  s with a.deferre
2900: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  d transaction, t
2910: 68 65 20 42 45 47 49 4e 20 73 74 61 74 65 6d 65  he BEGIN stateme
2920: 6e 74 20 69 74 73 65 6c 66 20 64 6f 65 73 20 6e  nt itself does n
2930: 6f 74 68 69 6e 67 2e 20 20 4c 6f 63 6b 73 0a 61  othing.  Locks.a
2940: 72 65 20 6e 6f 74 20 61 63 71 75 69 72 65 64 20  re not acquired 
2950: 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73 74 20  until the first 
2960: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 6f 70  read or write op
2970: 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 66 69  eration.  The fi
2980: 72 73 74 20 72 65 61 64 0a 6f 70 65 72 61 74 69  rst read.operati
2990: 6f 6e 20 61 67 61 69 6e 73 74 20 61 20 64 61 74  on against a dat
29a0: 61 62 61 73 65 20 63 72 65 61 74 65 73 20 61 20  abase creates a 
29b0: 5b 53 48 41 52 45 44 5d 20 6c 6f 63 6b 20 61 6e  [SHARED] lock an
29c0: 64 20 74 68 65 20 66 69 72 73 74 0a 77 72 69 74  d the first.writ
29d0: 65 20 6f 70 65 72 61 74 69 6f 6e 20 63 72 65 61  e operation crea
29e0: 74 65 73 20 61 20 5b 52 45 53 45 52 56 45 44 5d  tes a [RESERVED]
29f0: 20 6c 6f 63 6b 2e 20 20 20 42 65 63 61 75 73 65   lock.   Because
2a00: 20 74 68 65 20 61 63 71 75 69 73 69 74 69 6f 6e   the acquisition
2a10: 20 6f 66 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66   of.locks is def
2a20: 65 72 72 65 64 20 75 6e 74 69 6c 20 74 68 65 79  erred until they
2a30: 20 61 72 65 20 6e 65 65 64 65 64 2c 20 69 74 20   are needed, it 
2a40: 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74  is possible that
2a50: 20 61 6e 6f 74 68 65 72 0a 74 68 72 65 61 64 20   another.thread 
2a60: 6f 72 20 70 72 6f 63 65 73 73 20 63 6f 75 6c 64  or process could
2a70: 20 63 72 65 61 74 65 20 61 20 73 65 70 61 72 61   create a separa
2a80: 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  te transaction a
2a90: 6e 64 20 77 72 69 74 65 20 74 6f 0a 74 68 65 20  nd write to.the 
2aa0: 64 61 74 61 62 61 73 65 20 61 66 74 65 72 20 74  database after t
2ab0: 68 65 20 42 45 47 49 4e 20 6f 6e 20 74 68 65 20  he BEGIN on the 
2ac0: 63 75 72 72 65 6e 74 20 74 68 72 65 61 64 20 68  current thread h
2ad0: 61 73 20 65 78 65 63 75 74 65 64 2e 0a 49 66 20  as executed..If 
2ae0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
2af0: 69 73 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68  is immediate, th
2b00: 65 6e 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f  en [RESERVED] lo
2b10: 63 6b 73 0a 61 72 65 20 61 63 71 75 69 72 65 64  cks.are acquired
2b20: 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65   on all database
2b30: 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  s as soon as the
2b40: 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69   BEGIN command i
2b50: 73 0a 65 78 65 63 75 74 65 64 2c 20 77 69 74 68  s.executed, with
2b60: 6f 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20  out waiting for 
2b70: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
2b80: 62 65 20 75 73 65 64 2e 20 20 41 66 74 65 72 20  be used.  After 
2b90: 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54  a BEGIN IMMEDIAT
2ba0: 45 2c 20 79 6f 75 20 61 72 65 20 67 75 61 72 61  E, you are guara
2bb0: 6e 74 65 65 64 20 74 68 61 74 0a 6e 6f 20 6f 74  nteed that.no ot
2bc0: 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72  her thread or pr
2bd0: 6f 63 65 73 73 20 77 69 6c 6c 20 62 65 20 61 62  ocess will be ab
2be0: 6c 65 20 74 6f 20 77 72 69 74 65 20 74 6f 20 74  le to write to t
2bf0: 68 65 20 64 61 74 61 62 61 73 65 20 6f 72 0a 64  he database or.d
2c00: 6f 20 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49  o a BEGIN IMMEDI
2c10: 41 54 45 20 6f 72 20 42 45 47 49 4e 20 45 58 43  ATE or BEGIN EXC
2c20: 4c 55 53 49 56 45 2e 20 20 4f 74 68 65 72 20 70  LUSIVE.  Other p
2c30: 72 6f 63 65 73 73 65 73 20 63 61 6e 20 63 6f 6e  rocesses can con
2c40: 74 69 6e 75 65 0a 74 6f 20 72 65 61 64 20 66 72  tinue.to read fr
2c50: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 2c  om the database,
2c60: 20 68 6f 77 65 76 65 72 2e 20 20 41 6e 20 65 78   however.  An ex
2c70: 63 6c 75 73 69 76 65 20 74 72 61 6e 73 61 63 74  clusive transact
2c80: 69 6f 6e 20 63 61 75 73 65 73 0a 5b 45 58 43 4c  ion causes.[EXCL
2c90: 55 53 49 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20  USIVE] locks to 
2ca0: 62 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61  be acquired on a
2cb0: 6c 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20 41  ll databases.  A
2cc0: 66 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43  fter a BEGIN.EXC
2cd0: 4c 55 53 49 56 45 2c 20 79 6f 75 20 61 72 65 20  LUSIVE, you are 
2ce0: 67 75 61 72 61 6e 74 65 65 64 20 74 68 61 74 20  guaranteed that 
2cf0: 6e 6f 20 6f 74 68 65 72 20 74 68 72 65 61 64 20  no other thread 
2d00: 6f 72 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 0a  or process will.
2d10: 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20  be able to read 
2d20: 6f 72 20 77 72 69 74 65 20 74 68 65 20 64 61 74  or write the dat
2d30: 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20  abase until the 
2d40: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 63  transaction is.c
2d50: 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c  omplete..</p>..<
2d60: 70 3e 0a 41 6e 20 69 6d 70 6c 69 63 69 74 20 74  p>.An implicit t
2d70: 72 61 6e 73 61 63 74 69 6f 6e 20 28 61 20 74 72  ransaction (a tr
2d80: 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74 20 69  ansaction that i
2d90: 73 20 73 74 61 72 74 65 64 20 61 75 74 6f 6d 61  s started automa
2da0: 74 69 63 61 6c 6c 79 2c 0a 6e 6f 74 20 61 20 74  tically,.not a t
2db0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 72 74  ransaction start
2dc0: 65 64 20 62 79 20 42 45 47 49 4e 29 20 69 73 20  ed by BEGIN) is 
2dd0: 63 6f 6d 6d 69 74 74 65 64 20 61 75 74 6f 6d 61  committed automa
2de0: 74 69 63 61 6c 6c 79 20 77 68 65 6e 0a 74 68 65  tically when.the
2df0: 20 6c 61 73 74 20 61 63 74 69 76 65 20 73 74 61   last active sta
2e00: 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73 2e  tement finishes.
2e10: 20 20 41 20 73 74 61 74 65 6d 65 6e 74 20 66 69    A statement fi
2e20: 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74 73 0a  nishes when its.
2e30: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
2e40: 6e 74 20 69 73 20 5b 73 71 6c 69 74 65 33 5f 72  nt is [sqlite3_r
2e50: 65 73 65 74 28 29 20 7c 20 72 65 73 65 74 5d 20  eset() | reset] 
2e60: 6f 72 0a 5b 73 71 6c 69 74 65 33 5f 66 69 6e 61  or.[sqlite3_fina
2e70: 6c 69 7a 65 28 29 20 7c 20 66 69 6e 61 6c 69 7a  lize() | finaliz
2e80: 65 64 5d 2e 20 20 41 6e 20 6f 70 65 6e 20 5b 73  ed].  An open [s
2e90: 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 20 75 73 65  qlite3_blob] use
2ea0: 64 20 66 6f 72 0a 69 6e 63 72 65 6d 65 6e 74 61  d for.incrementa
2eb0: 6c 20 42 4c 4f 42 20 49 2f 4f 20 63 6f 75 6e 74  l BLOB I/O count
2ec0: 73 20 61 73 20 61 6e 20 75 6e 66 69 6e 69 73 68  s as an unfinish
2ed0: 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  ed statement.  T
2ee0: 68 65 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  he [sqlite3_blob
2ef0: 5d 0a 66 69 6e 69 73 68 65 73 20 77 68 65 6e 20  ].finishes when 
2f00: 69 74 20 69 73 20 5b 73 71 6c 69 74 65 33 5f 62  it is [sqlite3_b
2f10: 6c 6f 62 5f 63 6c 6f 73 65 28 29 20 7c 20 63 6c  lob_close() | cl
2f20: 6f 73 65 64 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  osed]..</p>..<p>
2f30: 0a 54 68 65 20 65 78 70 6c 69 63 69 74 20 43 4f  .The explicit CO
2f40: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e  MMIT command run
2f50: 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65  s immediately, e
2f60: 76 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65  ven if there are
2f70: 0a 70 65 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54  .pending [SELECT
2f80: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 48  ] statements.  H
2f90: 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72 65  owever, if there
2fa0: 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69   are pending.wri
2fb0: 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74  te operations, t
2fc0: 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e  he COMMIT comman
2fd0: 64 0a 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  d.will fail with
2fe0: 20 61 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53   a error code [S
2ff0: 51 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70  QLITE_BUSY]..</p
3000: 3e 0a 0a 3c 70 3e 0a 41 6e 20 61 74 74 65 6d 70  >..<p>.An attemp
3010: 74 20 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d  t to execute COM
3020: 4d 49 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72  MIT might also r
3030: 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c  esult in an [SQL
3040: 49 54 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e  ITE_BUSY] return
3050: 20 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74   code.if an anot
3060: 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72  her thread or pr
3070: 6f 63 65 73 73 20 68 61 73 20 61 20 5b 73 68 61  ocess has a [sha
3080: 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65  red lock] on the
3090: 20 64 61 74 61 62 61 73 65 0a 74 68 61 74 20 70   database.that p
30a0: 72 65 76 65 6e 74 65 64 20 74 68 65 20 64 61 74  revented the dat
30b0: 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67  abase from being
30c0: 20 75 70 64 61 74 65 64 2e 20 20 57 68 65 6e 20   updated.  When 
30d0: 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e 20  COMMIT fails in 
30e0: 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74 72  this.way, the tr
30f0: 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e  ansaction remain
3100: 73 20 61 63 74 69 76 65 20 61 6e 64 20 74 68 65  s active and the
3110: 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20 72   COMMIT can be r
3120: 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66 74  etried later.aft
3130: 65 72 20 74 68 65 20 72 65 61 64 65 72 20 68 61  er the reader ha
3140: 73 20 68 61 64 20 61 20 63 68 61 6e 63 65 20 74  s had a chance t
3150: 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c  o clear..</p>..<
3160: 70 3e 0a 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20  p>.The ROLLBACK 
3170: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
3180: 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51  n error code [SQ
3190: 4c 49 54 45 5f 42 55 53 59 5d 20 69 66 20 74 68  LITE_BUSY] if th
31a0: 65 72 65 0a 61 72 65 20 61 6e 79 20 70 65 6e 64  ere.are any pend
31b0: 69 6e 67 20 71 75 65 72 69 65 73 2e 20 20 42 6f  ing queries.  Bo
31c0: 74 68 20 72 65 61 64 2d 6f 6e 6c 79 20 61 6e 64  th read-only and
31d0: 20 72 65 61 64 2f 77 72 69 74 65 20 71 75 65 72   read/write quer
31e0: 69 65 73 20 77 69 6c 6c 0a 63 61 75 73 65 20 61  ies will.cause a
31f0: 20 52 4f 4c 4c 42 41 43 4b 20 74 6f 20 66 61 69   ROLLBACK to fai
3200: 6c 2e 20 20 41 20 52 4f 4c 4c 42 41 43 4b 20 6d  l.  A ROLLBACK m
3210: 75 73 74 20 66 61 69 6c 20 69 66 20 74 68 65 72  ust fail if ther
3220: 65 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 72 65  e are pending.re
3230: 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 20 28 75  ad operations (u
3240: 6e 6c 69 6b 65 20 43 4f 4d 4d 49 54 20 77 68 69  nlike COMMIT whi
3250: 63 68 20 63 61 6e 20 73 75 63 63 65 65 64 29 20  ch can succeed) 
3260: 62 65 63 61 75 73 65 20 62 61 64 20 74 68 69 6e  because bad thin
3270: 67 73 0a 77 69 6c 6c 20 68 61 70 70 65 6e 20 69  gs.will happen i
3280: 66 20 6d 65 6d 6f 72 79 20 69 6d 61 67 65 20 6f  f memory image o
3290: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
32a0: 73 20 63 68 61 6e 67 65 64 20 6f 75 74 20 66 72  s changed out fr
32b0: 6f 6d 20 75 6e 64 65 72 0a 61 6e 20 61 63 74 69  om under.an acti
32c0: 76 65 20 71 75 65 72 79 2e 0a 3c 2f 70 3e 0a 0a  ve query..</p>..
32d0: 3c 68 33 3e 52 65 73 70 6f 6e 73 65 20 54 6f 20  <h3>Response To 
32e0: 45 72 72 6f 72 73 20 57 69 74 68 69 6e 20 41 20  Errors Within A 
32f0: 54 72 61 6e 73 61 63 74 69 6f 6e 3c 2f 68 33 3e  Transaction</h3>
3300: 0a 0a 3c 70 3e 49 66 20 63 65 72 74 61 69 6e 20  ..<p>If certain 
3310: 6b 69 6e 64 73 20 6f 66 20 65 72 72 6f 72 73 20  kinds of errors 
3320: 6f 63 63 75 72 20 77 69 74 68 69 6e 20 61 20 74  occur within a t
3330: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 0a  ransaction, the.
3340: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
3350: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 6f  or may not be ro
3360: 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61  lled back automa
3370: 74 69 63 61 6c 6c 79 2e 20 20 54 68 65 0a 65 72  tically.  The.er
3380: 72 6f 72 73 20 74 68 61 74 20 63 61 75 73 65 20  rors that cause 
3390: 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 6e 63  the behavior inc
33a0: 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a  lude:</p>..<ul>.
33b0: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 46 55 4c  <li> [SQLITE_FUL
33c0: 4c 5d 3a 20 64 61 74 61 62 61 73 65 20 6f 72 20  L]: database or 
33d0: 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c 69 3e 20 5b  disk full.<li> [
33e0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 3a 20 64  SQLITE_IOERR]: d
33f0: 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 0a 3c 6c  isk I/O error.<l
3400: 69 3e 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d  i> [SQLITE_BUSY]
3410: 3a 20 64 61 74 61 62 61 73 65 20 69 6e 20 75 73  : database in us
3420: 65 20 62 79 20 61 6e 6f 74 68 65 72 20 70 72 6f  e by another pro
3430: 63 65 73 73 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54  cess.<li> [SQLIT
3440: 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75 74 20 6f 72  E_NOMEM]: out or
3450: 20 6d 65 6d 6f 72 79 0a 3c 6c 69 3e 20 5b 53 51   memory.<li> [SQ
3460: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 5d 3a  LITE_INTERRUPT]:
3470: 20 70 72 6f 63 65 73 73 69 6e 67 20 5b 73 71 6c   processing [sql
3480: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 7c 69  ite3_interrupt|i
3490: 6e 74 65 72 72 75 70 74 65 64 5d 0a 20 20 20 20  nterrupted].    
34a0: 20 62 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   by application 
34b0: 72 65 71 75 65 73 74 0a 3c 2f 75 6c 3e 0a 0a 3c  request.</ul>..<
34c0: 70 3e 0a 46 6f 72 20 61 6c 6c 20 6f 66 20 74 68  p>.For all of th
34d0: 65 73 65 20 65 72 72 6f 72 73 2c 20 53 51 4c 69  ese errors, SQLi
34e0: 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75  te attempts to u
34f0: 6e 64 6f 20 6a 75 73 74 20 74 68 65 20 6f 6e 65  ndo just the one
3500: 20 73 74 61 74 65 6d 65 6e 74 0a 69 74 20 77 61   statement.it wa
3510: 73 20 77 6f 72 6b 69 6e 67 20 6f 6e 20 61 6e 64  s working on and
3520: 20 6c 65 61 76 65 20 63 68 61 6e 67 65 73 20 66   leave changes f
3530: 72 6f 6d 20 70 72 69 6f 72 20 73 74 61 74 65 6d  rom prior statem
3540: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 0a  ents within the.
3550: 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  same transaction
3560: 20 69 6e 74 61 63 74 20 61 6e 64 20 63 6f 6e 74   intact and cont
3570: 69 6e 75 65 20 77 69 74 68 20 74 68 65 20 74 72  inue with the tr
3580: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 6f 77 65  ansaction.  Howe
3590: 76 65 72 2c 20 0a 64 65 70 65 6e 64 69 6e 67 20  ver, .depending 
35a0: 6f 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  on the statement
35b0: 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64   being evaluated
35c0: 20 61 6e 64 20 74 68 65 20 70 6f 69 6e 74 20 61   and the point a
35d0: 74 20 77 68 69 63 68 20 74 68 65 0a 65 72 72 6f  t which the.erro
35e0: 72 20 6f 63 63 75 72 73 2c 20 69 74 20 6d 69 67  r occurs, it mig
35f0: 68 74 20 62 65 20 6e 65 63 65 73 73 61 72 79 20  ht be necessary 
3600: 66 6f 72 20 53 51 4c 69 74 65 20 74 6f 20 72 6f  for SQLite to ro
3610: 6c 6c 62 61 63 6b 20 61 6e 64 0a 63 61 6e 63 65  llback and.cance
3620: 6c 20 74 68 65 20 65 6e 74 69 72 65 20 74 72 61  l the entire tra
3630: 6e 73 61 63 74 69 6f 6e 2e 20 20 41 6e 20 61 70  nsaction.  An ap
3640: 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e 20 74 65  plication can te
3650: 6c 6c 20 77 68 69 63 68 0a 63 6f 75 72 73 65 20  ll which.course 
3660: 6f 66 20 61 63 74 69 6f 6e 20 53 51 4c 69 74 65  of action SQLite
3670: 20 74 6f 6f 6b 20 62 79 20 75 73 69 6e 67 20 74   took by using t
3680: 68 65 0a 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f  he.[sqlite3_get_
3690: 61 75 74 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d  autocommit()] C-
36a0: 6c 61 6e 67 75 61 67 65 20 69 6e 74 65 72 66 61  language interfa
36b0: 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69  ce.</p>..<p>It i
36c0: 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68  s recommended th
36d0: 61 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  at applications 
36e0: 72 65 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 65  respond to the e
36f0: 72 72 6f 72 73 0a 6c 69 73 74 65 64 20 61 62 6f  rrors.listed abo
3700: 76 65 20 62 79 20 65 78 70 6c 69 63 69 74 6c 79  ve by explicitly
3710: 20 69 73 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42   issuing a ROLLB
3720: 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 66  ACK command.  If
3730: 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f   the .transactio
3740: 6e 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  n has already be
3750: 65 6e 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61  en rolled back a
3760: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20  utomatically.by 
3770: 74 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e  the error respon
3780: 73 65 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c  se, then the ROL
3790: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69  LBACK command wi
37a0: 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 0a  ll fail with an.
37b0: 65 72 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61  error, but no ha
37c0: 72 6d 20 69 73 20 63 61 75 73 65 64 20 62 79 20  rm is caused by 
37d0: 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75  this.</p>..<p>Fu
37e0: 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
37f0: 20 53 51 4c 69 74 65 20 6d 61 79 20 65 78 74 65   SQLite may exte
3800: 6e 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65  nd the list of e
3810: 72 72 6f 72 73 20 77 68 69 63 68 0a 6d 69 67 68  rrors which.migh
3820: 74 20 63 61 75 73 65 20 61 75 74 6f 6d 61 74 69  t cause automati
3830: 63 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f  c transaction ro
3840: 6c 6c 62 61 63 6b 2e 20 20 46 75 74 75 72 65 20  llback.  Future 
3850: 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69  versions of.SQLi
3860: 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  te might change 
3870: 74 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e  the error respon
3880: 73 65 2e 20 20 49 6e 20 70 61 72 74 69 63 75 6c  se.  In particul
3890: 61 72 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73  ar, we may.choos
38a0: 65 20 74 6f 20 73 69 6d 70 6c 69 66 79 20 74 68  e to simplify th
38b0: 65 20 69 6e 74 65 72 66 61 63 65 20 69 6e 20 66  e interface in f
38c0: 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f  uture versions o
38d0: 66 20 53 51 4c 69 74 65 20 62 79 0a 63 61 75 73  f SQLite by.caus
38e0: 69 6e 67 20 74 68 65 20 65 72 72 6f 72 73 20 61  ing the errors a
38f0: 62 6f 76 65 20 74 6f 20 66 6f 72 63 65 20 61 6e  bove to force an
3900: 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72   unconditional r
3910: 6f 6c 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74  ollback.</p>..<t
3920: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
3930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3970: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56  ###.Section {SAV
3980: 45 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e  EPOINT} savepoin
3990: 74 20 7b 53 41 56 45 50 4f 49 4e 54 20 52 45 4c  t {SAVEPOINT REL
39a0: 45 41 53 45 7d 0a 0a 42 75 62 62 6c 65 44 69 61  EASE}..BubbleDia
39b0: 67 72 61 6d 20 73 61 76 65 70 6f 69 6e 74 2d 73  gram savepoint-s
39c0: 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61  tmt.BubbleDiagra
39d0: 6d 20 72 65 6c 65 61 73 65 2d 73 74 6d 74 0a 42  m release-stmt.B
39e0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c  ubbleDiagram rol
39f0: 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c  lback-stmt.</tcl
3a00: 3e 0a 0a 3c 70 3e 53 41 56 45 50 4f 49 4e 54 73  >..<p>SAVEPOINTs
3a10: 20 61 72 65 20 61 20 6d 65 74 68 6f 64 20 6f 66   are a method of
3a20: 20 63 72 65 61 74 69 6e 67 20 74 72 61 6e 73 61   creating transa
3a30: 63 74 69 6f 6e 73 2c 20 73 69 6d 69 6c 61 72 20  ctions, similar 
3a40: 74 6f 0a 5b 42 45 47 49 4e 5d 20 61 6e 64 20 5b  to.[BEGIN] and [
3a50: 43 4f 4d 4d 49 54 5d 2c 20 65 78 63 65 70 74 20  COMMIT], except 
3a60: 74 68 61 74 20 74 68 65 20 53 41 56 45 50 4f 49  that the SAVEPOI
3a70: 4e 54 20 61 6e 64 20 52 45 4c 45 41 53 45 20 63  NT and RELEASE c
3a80: 6f 6d 6d 61 6e 64 73 0a 61 72 65 20 6e 61 6d 65  ommands.are name
3a90: 64 20 61 6e 64 20 6d 61 79 20 62 65 20 6e 65 73  d and may be nes
3aa0: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ted.</p>..<p>The
3ab0: 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61   SAVEPOINT comma
3ac0: 6e 64 20 73 74 61 72 74 73 20 61 20 6e 65 77 20  nd starts a new 
3ad0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68  transaction with
3ae0: 20 61 20 6e 61 6d 65 2e 0a 54 68 65 20 74 72 61   a name..The tra
3af0: 6e 73 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e  nsaction names n
3b00: 65 65 64 20 6e 6f 74 20 62 65 20 75 6e 69 71 75  eed not be uniqu
3b10: 65 2e 0a 41 20 53 41 56 45 50 4f 49 4e 54 20 63  e..A SAVEPOINT c
3b20: 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 65 69  an be started ei
3b30: 74 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20 6f  ther within or o
3b40: 75 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45 47  utside of.a [BEG
3b50: 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 20  IN]...[COMMIT]. 
3b60: 20 57 68 65 6e 20 61 20 53 41 56 45 50 4f 49 4e   When a SAVEPOIN
3b70: 54 20 69 73 20 74 68 65 20 6f 75 74 65 72 2d 6d  T is the outer-m
3b80: 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 0a 61 6e  ost savepoint.an
3b90: 64 20 69 74 20 69 73 20 6e 6f 74 20 77 69 74 68  d it is not with
3ba0: 69 6e 20 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b  in a [BEGIN]...[
3bb0: 43 4f 4d 4d 49 54 5d 20 74 68 65 6e 20 74 68 65  COMMIT] then the
3bc0: 20 62 65 68 61 76 69 6f 72 20 69 73 20 74 68 65   behavior is the
3bd0: 0a 73 61 6d 65 20 61 73 20 42 45 47 49 4e 20 44  .same as BEGIN D
3be0: 45 46 45 52 52 45 44 20 54 52 41 4e 53 41 43 54  EFERRED TRANSACT
3bf0: 49 4f 4e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ION.</p>..<p>The
3c00: 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d   ROLLBACK TO com
3c10: 6d 61 6e 64 20 72 65 76 65 72 74 73 20 74 68 65  mand reverts the
3c20: 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64 61   state of the da
3c30: 74 61 62 61 73 65 20 62 61 63 6b 20 74 6f 20 77  tabase back to w
3c40: 68 61 74 0a 69 74 20 77 61 73 20 6a 75 73 74 20  hat.it was just 
3c50: 61 66 74 65 72 20 74 68 65 20 63 6f 72 72 65 73  after the corres
3c60: 70 6f 6e 64 69 6e 67 20 53 41 56 45 50 4f 49 4e  ponding SAVEPOIN
3c70: 54 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 75 6e  T.  Note that un
3c80: 6c 69 6b 65 20 74 68 61 74 0a 70 6c 61 69 6e 20  like that.plain 
3c90: 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61  [ROLLBACK] comma
3ca0: 6e 64 20 28 77 69 74 68 6f 75 74 20 74 68 65 20  nd (without the 
3cb0: 54 4f 20 6b 65 79 77 6f 72 64 29 20 74 68 65 20  TO keyword) the 
3cc0: 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d  ROLLBACK TO comm
3cd0: 61 6e 64 0a 64 6f 65 73 20 6e 6f 74 20 63 61 6e  and.does not can
3ce0: 63 65 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74  cel the transact
3cf0: 69 6f 6e 2e 20 20 49 6e 73 74 65 61 64 20 6f 66  ion.  Instead of
3d00: 20 63 61 6e 63 65 6c 6c 69 6e 67 20 74 68 65 20   cancelling the 
3d10: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 0a 74 68 65  transaction,.the
3d20: 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d   ROLLBACK TO com
3d30: 6d 61 6e 64 20 72 65 73 74 61 72 74 73 20 74 68  mand restarts th
3d40: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 67  e transaction ag
3d50: 61 69 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e  ain at the begin
3d60: 6e 69 6e 67 2e 0a 41 6c 6c 20 69 6e 74 65 72 76  ning..All interv
3d70: 65 6e 69 6e 67 20 53 41 56 45 50 4f 49 4e 54 73  ening SAVEPOINTs
3d80: 20 61 72 65 20 63 61 6e 63 65 6c 6c 65 64 2c 20   are cancelled, 
3d90: 68 6f 77 65 76 65 72 2e 3c 2f 70 3e 0a 0a 3c 70  however.</p>..<p
3da0: 3e 54 68 65 20 52 45 4c 45 41 53 45 20 69 73 20  >The RELEASE is 
3db0: 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20  like a [COMMIT] 
3dc0: 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54 2e  for a SAVEPOINT.
3dd0: 0a 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  .The RELEASE com
3de0: 6d 61 6e 64 20 63 61 75 73 65 73 20 61 6c 6c 20  mand causes all 
3df0: 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 20  savepoints back 
3e00: 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67  to and including
3e10: 20 74 68 65 20 66 69 72 73 74 0a 73 61 76 65 70   the first.savep
3e20: 6f 69 6e 74 20 77 69 74 68 20 61 20 6d 61 74 63  oint with a matc
3e30: 68 69 6e 67 20 6e 61 6d 65 20 74 6f 20 62 65 20  hing name to be 
3e40: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
3e50: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
3e60: 63 6b 2e 20 20 54 68 65 0a 52 45 4c 45 41 53 45  ck.  The.RELEASE
3e70: 20 6f 66 20 61 6e 20 69 6e 6e 65 72 20 74 72 61   of an inner tra
3e80: 6e 73 61 63 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f  nsaction.does no
3e90: 74 20 63 61 75 73 65 20 61 6e 79 20 63 68 61 6e  t cause any chan
3ea0: 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  ges to the datab
3eb0: 61 73 65 20 66 69 6c 65 2c 20 69 74 20 6d 65 72  ase file, it mer
3ec0: 65 6c 79 0a 72 65 6d 6f 76 65 73 20 73 61 76 65  ely.removes save
3ed0: 70 6f 69 6e 74 73 20 66 72 6f 6d 20 74 68 65 20  points from the 
3ee0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
3ef0: 6b 20 73 75 63 68 20 74 68 61 74 20 69 74 20 69  k such that it i
3f00: 73 0a 6e 6f 20 6c 6f 6e 67 65 72 20 70 6f 73 73  s.no longer poss
3f10: 69 62 6c 65 20 74 6f 20 52 4f 4c 4c 42 41 43 4b  ible to ROLLBACK
3f20: 20 54 4f 20 74 68 6f 73 65 20 73 61 76 65 70 6f   TO those savepo
3f30: 69 6e 74 73 2e 0a 49 66 20 61 20 52 45 4c 45 41  ints..If a RELEA
3f40: 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61  SE command relea
3f50: 73 65 73 20 74 68 65 20 6f 75 74 65 72 6d 6f 73  ses the outermos
3f60: 74 20 73 61 76 65 70 6f 69 6e 74 2c 20 73 6f 0a  t savepoint, so.
3f70: 74 68 61 74 20 74 68 65 20 74 72 61 6e 73 61 63  that the transac
3f80: 74 69 6f 6e 20 73 74 61 63 6b 20 62 65 63 6f 6d  tion stack becom
3f90: 65 73 20 65 6d 70 74 79 2c 20 74 68 65 6e 20 52  es empty, then R
3fa0: 45 4c 45 41 53 45 20 69 73 20 74 68 65 20 73 61  ELEASE is the sa
3fb0: 6d 65 0a 61 73 20 5b 43 4f 4d 4d 49 54 5d 2e 0a  me.as [COMMIT]..
3fc0: 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d  The [COMMIT] com
3fd0: 6d 61 6e 64 20 6d 61 79 20 75 73 65 64 20 74 6f  mand may used to
3fe0: 20 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76   release all sav
3ff0: 65 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d  epoints and.comm
4000: 69 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  it the transacti
4010: 6f 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 74  on even if the t
4020: 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f  ransaction was o
4030: 72 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65  riginally starte
4040: 64 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54  d.by a SAVEPOINT
4050: 20 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64   command instead
4060: 20 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f   of a [BEGIN] co
4070: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  mmand.</p>..<p>I
4080: 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d  f the savepoint-
4090: 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41 53  name in a RELEAS
40a0: 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e  E command does n
40b0: 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61 76  ot match any.sav
40c0: 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  epoint currently
40d0: 20 69 6e 20 74 68 65 20 74 72 61 6e 61 63 74 69   in the tranacti
40e0: 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 6e  on stack, then n
40f0: 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65  o savepoints are
4100: 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65 20 64  .released, the d
4110: 61 74 61 62 61 73 65 20 69 73 20 75 6e 63 68 61  atabase is uncha
4120: 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20 52 45  nged, and the RE
4130: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65  LEASE command re
4140: 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e 3c  turns.an error.<
4150: 2f 70 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61  /p>..<p>Note tha
4160: 74 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73  t an inner trans
4170: 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 63 6f 6d  action might com
4180: 6d 69 74 20 28 75 73 69 6e 67 20 74 68 65 20 52  mit (using the R
4190: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 29 0a  ELEASE command).
41a0: 62 75 74 20 74 68 65 6e 20 6c 61 74 65 72 20 68  but then later h
41b0: 61 76 65 20 69 74 73 20 77 6f 72 6b 20 75 6e 64  ave its work und
41c0: 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42 41 43  one by a ROLLBAC
41d0: 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72  K in an outer tr
41e0: 61 6e 73 61 63 74 69 6f 6e 2e 0a 41 20 70 6f 77  ansaction..A pow
41f0: 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 70 72  er failure or pr
4200: 6f 67 72 61 6d 20 63 72 61 73 68 20 6f 72 20 4f  ogram crash or O
4210: 53 20 63 72 61 73 68 20 77 69 6c 6c 20 63 61 75  S crash will cau
4220: 73 65 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73  se the outer-mos
4230: 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f  t.transaction to
4240: 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f 69   rollback, undoi
4250: 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74  ng all changes t
4260: 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65  hat have occurre
4270: 64 20 77 69 74 68 69 6e 0a 74 68 61 74 20 6f 75  d within.that ou
4280: 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ter transaction,
4290: 20 65 76 65 6e 20 63 68 61 6e 67 65 73 20 74 68   even changes th
42a0: 61 74 20 68 61 76 65 20 73 75 70 70 6f 73 65 64  at have supposed
42b0: 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d 69 74 74  ly been "committ
42c0: 65 64 22 0a 62 79 20 74 68 65 20 52 45 4c 45 41  ed".by the RELEA
42d0: 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 43 6f 6e  SE command.  Con
42e0: 74 65 6e 74 20 69 73 20 6e 6f 74 20 61 63 74 75  tent is not actu
42f0: 61 6c 6c 79 20 63 6f 6d 6d 69 74 74 65 64 20 6f  ally committed o
4300: 6e 20 74 68 65 20 64 69 73 6b 20 0a 75 6e 74 69  n the disk .unti
4310: 6c 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20  l the outermost 
4320: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d  transaction comm
4330: 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  its.</p>..<p>The
4340: 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 20 77  re are several w
4350: 61 79 73 20 6f 66 20 74 68 69 6e 6b 69 6e 67 20  ays of thinking 
4360: 61 62 6f 75 74 20 74 68 65 20 52 45 4c 45 41 53  about the RELEAS
4370: 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a 0a  E command:</p>..
4380: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f 6d  <ul>.<li><p>.Som
4390: 65 20 70 65 6f 70 6c 65 20 76 69 65 77 20 52 45  e people view RE
43a0: 4c 45 41 53 45 20 61 73 20 74 68 65 20 65 71 75  LEASE as the equ
43b0: 69 76 61 6c 65 6e 74 20 6f 66 20 43 4f 4d 4d 49  ivalent of COMMI
43c0: 54 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e  T for a SAVEPOIN
43d0: 54 2e 0a 54 68 69 73 20 69 73 20 61 6e 20 61 63  T..This is an ac
43e0: 63 65 70 74 61 62 6c 65 20 70 6f 69 6e 74 20 6f  ceptable point o
43f0: 66 20 76 69 65 77 20 61 73 20 6c 6f 6e 67 20 61  f view as long a
4400: 73 20 6f 6e 65 20 72 65 6d 65 6d 62 65 72 73 20  s one remembers 
4410: 74 68 61 74 20 74 68 65 0a 63 68 61 6e 67 65 73  that the.changes
4420: 20 63 6f 6d 6d 69 74 74 65 64 20 62 79 20 61 6e   committed by an
4430: 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69   inner transacti
4440: 6f 6e 20 6d 69 67 68 74 20 6c 61 74 65 72 20 62  on might later b
4450: 65 20 75 6e 64 6f 6e 65 20 62 79 20 61 0a 72 6f  e undone by a.ro
4460: 6c 6c 62 61 63 6b 20 69 6e 20 61 6e 20 6f 75 74  llback in an out
4470: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c  er transaction.<
4480: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
4490: 3e 0a 41 6e 6f 74 68 65 72 20 76 69 65 77 20 6f  >.Another view o
44a0: 66 20 52 45 4c 45 41 53 45 20 69 73 20 74 68 61  f RELEASE is tha
44b0: 74 20 69 74 20 6d 65 72 67 65 73 20 61 20 6e 61  t it merges a na
44c0: 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  med transaction 
44d0: 69 6e 74 6f 20 69 74 73 0a 70 61 72 65 6e 74 20  into its.parent 
44e0: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 6f 20  transaction, so 
44f0: 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20 74  that the named t
4500: 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 69  ransaction and i
4510: 74 73 20 70 61 72 65 6e 74 20 62 65 63 6f 6d 65  ts parent become
4520: 0a 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61  .the same transa
4530: 63 74 69 6f 6e 2e 20 20 41 66 74 65 72 20 52 45  ction.  After RE
4540: 4c 45 41 53 45 2c 20 74 68 65 20 6e 61 6d 65 64  LEASE, the named
4550: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
4560: 20 69 74 73 20 70 61 72 65 6e 74 0a 77 69 6c 6c   its parent.will
4570: 20 63 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c 62   commit or rollb
4580: 61 63 6b 20 74 6f 67 65 74 68 65 72 2c 20 77 68  ack together, wh
4590: 61 74 65 76 65 72 20 74 68 65 69 72 20 66 61 74  atever their fat
45a0: 65 20 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e 3c 2f  e may be..</p></
45b0: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e 65  li>..<li><p>.One
45c0: 20 63 61 6e 20 61 6c 73 6f 20 74 68 69 6e 6b 20   can also think 
45d0: 6f 66 20 73 61 76 65 70 6f 69 6e 74 73 20 61 73  of savepoints as
45e0: 0a 22 6d 61 72 6b 73 22 20 69 6e 20 74 68 65 20  ."marks" in the 
45f0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 69 6d 65  transaction time
4600: 6c 69 6e 65 2e 20 20 49 6e 20 74 68 69 73 20 76  line.  In this v
4610: 69 65 77 2c 20 74 68 65 20 53 41 56 45 50 4f 49  iew, the SAVEPOI
4620: 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63 72 65 61 74  NT command.creat
4630: 65 73 20 61 20 6e 65 77 20 6d 61 72 6b 2c 20 74  es a new mark, t
4640: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63  he ROLLBACK TO c
4650: 6f 6d 6d 61 6e 64 20 72 65 77 69 6e 64 73 20 74  ommand rewinds t
4660: 68 65 20 74 69 6d 65 6c 69 6e 65 20 62 61 63 6b  he timeline back
4670: 0a 74 6f 20 61 20 70 6f 69 6e 74 20 6a 75 73 74  .to a point just
4680: 20 61 66 74 65 72 20 74 68 65 20 6e 61 6d 65 64   after the named
4690: 20 6d 61 72 6b 2c 20 61 6e 64 20 74 68 65 20 52   mark, and the R
46a0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 0a 65  ELEASE command.e
46b0: 72 61 73 65 73 20 6d 61 72 6b 73 20 66 72 6f 6d  rases marks from
46c0: 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 77 69   the timeline wi
46d0: 74 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20 6d  thout actually m
46e0: 61 6b 69 6e 67 20 61 6e 79 0a 63 68 61 6e 67 65  aking any.change
46f0: 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  s to the databas
4700: 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75  e..</p></li>.</u
4710: 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e 73 61  l>....<h3>Transa
4720: 63 74 69 6f 6e 20 4e 65 73 74 69 6e 67 20 52 75  ction Nesting Ru
4730: 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 72 61  les</h3>..<p>Tra
4740: 6e 73 61 63 74 69 6f 6e 73 20 73 74 61 63 6b 2e  nsactions stack.
4750: 20 20 54 68 65 20 6c 61 73 74 20 74 72 61 6e 73    The last trans
4760: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 77  action started w
4770: 69 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73 74  ill be the first
4780: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d  .transaction com
4790: 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64  mitted or rolled
47a0: 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54   back.</p>..<p>T
47b0: 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61  he [BEGIN] comma
47c0: 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66  nd only works if
47d0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
47e0: 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74 79 2c   stack is empty,
47f0: 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f 72   or.in other wor
4800: 64 73 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ds if there are 
4810: 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61 6e 73  no pending trans
4820: 61 63 74 69 6f 6e 73 2e 20 20 49 66 20 74 68 65  actions.  If the
4830: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73 74 61   transaction.sta
4840: 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  ck is not empty 
4850: 77 68 65 6e 20 74 68 65 20 5b 42 45 47 49 4e 5d  when the [BEGIN]
4860: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f   command is invo
4870: 6b 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ked, then the co
4880: 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69 74 68  mmand.fails with
4890: 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a   an error.</p>..
48a0: 3c 70 3e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20  <p>The [COMMIT] 
48b0: 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74 73 20  command commits 
48c0: 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20  all outstanding 
48d0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64  transactions and
48e0: 20 6c 65 61 76 65 73 0a 74 68 65 20 74 72 61 6e   leaves.the tran
48f0: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d  saction stack em
4900: 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  pty.</p>..<p>The
4910: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
4920: 20 73 74 61 72 74 73 20 77 69 74 68 20 74 68 65   starts with the
4930: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 64 64   most recent add
4940: 69 74 69 6f 6e 20 74 6f 20 74 68 65 0a 74 72 61  ition to the.tra
4950: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 61  nsaction stack a
4960: 6e 64 20 72 65 6c 65 61 73 65 73 20 73 61 76 65  nd releases save
4970: 70 6f 69 6e 74 73 20 62 61 63 6b 77 61 72 64 73  points backwards
4980: 20 0a 69 6e 20 74 69 6d 65 20 75 6e 74 69 6c 20   .in time until 
4990: 69 74 20 72 65 6c 65 61 73 65 73 20 61 20 73 61  it releases a sa
49a0: 76 65 70 6f 69 6e 74 20 6d 61 72 6b 20 77 69 74  vepoint mark wit
49b0: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76  h a matching sav
49c0: 65 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 50 72 69  epoint-name..Pri
49d0: 6f 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20 65  or savepoints, e
49e0: 76 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 77  ven savepoints w
49f0: 69 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61 76  ith matching sav
4a00: 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72  epoint-names, ar
4a10: 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 49 66 20  e.unchanged..If 
4a20: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
4a30: 61 6e 64 20 63 61 75 73 65 73 20 74 68 65 0a 74  and causes the.t
4a40: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
4a50: 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74 79   to become empty
4a60: 20 28 69 66 20 74 68 65 20 52 45 4c 45 41 53 45   (if the RELEASE
4a70: 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65   command release
4a80: 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74 20  s the.outermost 
4a90: 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f 6d  transaction from
4aa0: 20 74 68 65 20 73 74 61 63 6b 29 20 74 68 65 6e   the stack) then
4ab0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4ac0: 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c   commits.</p>..<
4ad0: 70 3e 54 68 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d  p>The [ROLLBACK]
4ae0: 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74   command without
4af0: 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c   a TO clause rol
4b00: 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20 74 72 61  ls backs all tra
4b10: 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20 6c 65  nsactions.and le
4b20: 61 76 65 73 20 74 68 65 20 74 72 61 6e 73 61 63  aves the transac
4b30: 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79  tion stack empty
4b40: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 52 4f  .</p>..<p>The RO
4b50: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77  LLBACK command w
4b60: 69 74 68 20 61 20 54 4f 20 63 6c 61 75 73 65 20  ith a TO clause 
4b70: 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72 61 6e 73  rolls back trans
4b80: 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67 0a 62 61  actions going.ba
4b90: 63 6b 77 61 72 64 73 20 69 6e 20 74 69 6d 65 20  ckwards in time 
4ba0: 62 61 63 6b 20 74 6f 20 74 68 65 20 6d 6f 73 74  back to the most
4bb0: 20 72 65 63 65 6e 74 20 53 41 56 45 50 4f 49 4e   recent SAVEPOIN
4bc0: 54 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e  T with a matchin
4bd0: 67 20 6e 61 6d 65 2e 0a 54 68 65 20 53 41 56 45  g name..The SAVE
4be0: 50 4f 49 4e 54 20 77 69 74 68 20 74 68 65 20 6d  POINT with the m
4bf0: 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 72 65 6d  atching name rem
4c00: 61 69 6e 73 20 6f 6e 20 74 68 65 20 74 72 61 6e  ains on the tran
4c10: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 0a 62  saction stack,.b
4c20: 75 74 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20  ut all database 
4c30: 63 68 61 6e 67 65 73 20 74 68 61 74 20 6f 63 63  changes that occ
4c40: 75 72 72 65 64 20 61 66 74 65 72 20 74 68 61 74  urred after that
4c50: 20 53 41 56 45 50 4f 49 4e 54 20 77 61 73 20 63   SAVEPOINT was c
4c60: 72 65 61 74 65 64 0a 61 72 65 20 72 6f 6c 6c 65  reated.are rolle
4c70: 64 20 62 61 63 6b 2e 20 20 49 66 20 74 68 65 20  d back.  If the 
4c80: 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20 69  savepoint-name i
4c90: 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  n a ROLLBACK TO 
4ca0: 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74  command does not
4cb0: 0a 6d 61 74 63 68 20 61 6e 79 20 53 41 56 45 50  .match any SAVEP
4cc0: 4f 49 4e 54 20 6f 6e 20 74 68 65 20 73 74 61 63  OINT on the stac
4cd0: 6b 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c  k, then the ROLL
4ce0: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 66 61 69  BACK command fai
4cf0: 6c 73 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72  ls with an.error
4d00: 20 61 6e 64 20 6c 65 61 76 65 73 20 74 68 65 20   and leaves the 
4d10: 73 74 61 74 65 20 6f 66 20 74 68 65 20 64 61 74  state of the dat
4d20: 61 62 61 73 65 20 75 6e 63 68 61 6e 67 65 64 2e  abase unchanged.
4d30: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
4d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4d70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4d80: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
4d90: 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d  ion comment comm
4da0: 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f 6d  ent {comment com
4db0: 6d 65 6e 74 73 7d 0a 0a 42 75 62 62 6c 65 44 69  ments}..BubbleDi
4dc0: 61 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79  agram comment-sy
4dd0: 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ntax.</tcl>..<p>
4de0: 43 6f 6d 6d 65 6e 74 73 20 61 72 65 6e 27 74 20  Comments aren't 
4df0: 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62 75  SQL commands, bu
4e00: 74 20 63 61 6e 20 6f 63 63 75 72 20 77 69 74 68  t can occur with
4e10: 69 6e 20 74 68 65 20 74 65 78 74 20 6f 66 0a 53  in the text of.S
4e20: 51 4c 20 71 75 65 72 69 65 73 20 70 61 73 73 65  QL queries passe
4e30: 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 70 72  d to [sqlite3_pr
4e40: 65 70 61 72 65 5f 76 32 28 29 5d 20 61 6e 64 20  epare_v2()] and 
4e50: 72 65 6c 61 74 65 64 20 69 6e 74 65 72 66 61 63  related interfac
4e60: 65 73 2e 2e 0a 43 6f 6d 6d 65 6e 74 73 20 61 72  es...Comments ar
4e70: 65 20 0a 74 72 65 61 74 65 64 20 61 73 20 77 68  e .treated as wh
4e80: 69 74 65 73 70 61 63 65 20 62 79 20 74 68 65 20  itespace by the 
4e90: 70 61 72 73 65 72 2e 20 20 54 68 65 79 20 63 61  parser.  They ca
4ea0: 6e 20 62 65 67 69 6e 20 61 6e 79 77 68 65 72 65  n begin anywhere
4eb0: 20 77 68 69 74 65 73 70 61 63 65 20 0a 63 61 6e   whitespace .can
4ec0: 20 62 65 20 66 6f 75 6e 64 2c 20 69 6e 63 6c 75   be found, inclu
4ed0: 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72  ding inside expr
4ee0: 65 73 73 69 6f 6e 73 20 74 68 61 74 20 73 70 61  essions that spa
4ef0: 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73  n multiple lines
4f00: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 53 51 4c 20  ..</p>..<p> SQL 
4f10: 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 20 77  comments begin w
4f20: 69 74 68 20 74 77 6f 20 63 6f 6e 73 65 63 75 74  ith two consecut
4f30: 69 76 65 20 22 2d 22 20 63 68 61 72 61 63 74 65  ive "-" characte
4f40: 72 73 20 28 41 53 43 49 49 20 30 78 32 64 29 0a  rs (ASCII 0x2d).
4f50: 61 6e 64 20 65 78 74 65 6e 64 20 75 70 20 74 6f  and extend up to
4f60: 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74   and including t
4f70: 68 65 20 6e 65 78 74 20 6e 65 77 6c 69 6e 65 20  he next newline 
4f80: 63 68 61 72 61 63 74 65 72 20 28 41 53 43 49 49  character (ASCII
4f90: 20 30 78 30 61 29 0a 6f 72 20 75 6e 74 69 6c 20   0x0a).or until 
4fa0: 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
4fb0: 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65  , whichever come
4fc0: 73 20 66 69 72 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  s first.</p>..<p
4fd0: 3e 20 43 20 63 6f 6d 6d 65 6e 74 73 20 63 61 6e  > C comments can
4fe0: 20 73 70 61 6e 20 61 6e 79 20 6e 75 6d 62 65 72   span any number
4ff0: 20 6f 66 20 6c 69 6e 65 73 2e 20 20 43 2d 73 74   of lines.  C-st
5000: 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67  yle comments beg
5010: 69 6e 0a 77 69 74 68 20 22 2f 2a 22 20 61 6e 64  in.with "/*" and
5020: 20 65 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e   extend up to an
5030: 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  d including the 
5040: 6e 65 78 74 20 22 2a 2f 22 20 63 68 61 72 61 63  next "*/" charac
5050: 74 65 72 20 70 61 69 72 0a 6f 72 20 75 6e 74 69  ter pair.or unti
5060: 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70  l the end of inp
5070: 75 74 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f  ut, whichever co
5080: 6d 65 73 20 66 69 72 73 74 2e 20 20 43 2d 73 74  mes first.  C-st
5090: 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e  yle comments.can
50a0: 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c   span multiple l
50b0: 69 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 20  ines. </p>..<p> 
50c0: 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 61 70 70  Comments can app
50d0: 65 61 72 20 61 6e 79 77 68 65 72 65 20 77 68 69  ear anywhere whi
50e0: 74 65 73 70 61 63 65 20 63 61 6e 20 6f 63 63 75  tespace can occu
50f0: 72 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73  r,.including ins
5100: 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ide expressions 
5110: 61 6e 64 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  and in the middl
5120: 65 20 6f 66 20 6f 74 68 65 72 20 53 51 4c 20 73  e of other SQL s
5130: 74 61 74 65 6d 65 6e 74 73 2e 0a 43 6f 6d 6d 65  tatements..Comme
5140: 6e 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e  nts do not nest.
5150: 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  .</p>...<tcl>.##
5160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
51a0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
51b0: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e 44  tion {CREATE IND
51c0: 45 58 7d 20 63 72 65 61 74 65 69 6e 64 65 78 20  EX} createindex 
51d0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 7d  {{CREATE INDEX}}
51e0: 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
51f0: 63 72 65 61 74 65 2d 69 6e 64 65 78 2d 73 74 6d  create-index-stm
5200: 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61  t 1.BubbleDiagra
5210: 6d 20 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e  m indexed-column
5220: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
5230: 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f 6d  CREATE INDEX com
5240: 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f 66  mand consists of
5250: 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 43   the keywords "C
5260: 52 45 41 54 45 20 49 4e 44 45 58 22 20 66 6f 6c  REATE INDEX" fol
5270: 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 6e 61 6d  lowed.by the nam
5280: 65 20 6f 66 20 74 68 65 20 6e 65 77 20 69 6e 64  e of the new ind
5290: 65 78 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 20  ex, the keyword 
52a0: 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65 20 6f  "ON", the name o
52b0: 66 20 61 20 70 72 65 76 69 6f 75 73 6c 79 0a 63  f a previously.c
52c0: 72 65 61 74 65 64 20 74 61 62 6c 65 20 74 68 61  reated table tha
52d0: 74 20 69 73 20 74 6f 20 62 65 20 69 6e 64 65 78  t is to be index
52e0: 65 64 2c 20 61 6e 64 20 61 20 70 61 72 65 6e 74  ed, and a parent
52f0: 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20  hesized list of 
5300: 6e 61 6d 65 73 20 6f 66 0a 63 6f 6c 75 6d 6e 73  names of.columns
5310: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68   in the table th
5320: 61 74 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  at are used for 
5330: 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 3c 2f  the index key.</
5340: 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 63 6f 6c 75  p>..<p>Each colu
5350: 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 66  mn name can be f
5360: 6f 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20 6f  ollowed by one o
5370: 66 20 74 68 65 20 22 41 53 43 22 20 6f 72 20 22  f the "ASC" or "
5380: 44 45 53 43 22 20 6b 65 79 77 6f 72 64 73 0a 74  DESC" keywords.t
5390: 6f 20 69 6e 64 69 63 61 74 65 20 73 6f 72 74 20  o indicate sort 
53a0: 6f 72 64 65 72 2e 20 20 54 68 65 20 73 6f 72 74  order.  The sort
53b0: 20 6f 72 64 65 72 20 6d 61 79 20 6f 72 20 6d 61   order may or ma
53c0: 79 20 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64  y not be ignored
53d0: 20 64 65 70 65 6e 64 69 6e 67 0a 6f 6e 20 74 68   depending.on th
53e0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
53f0: 66 6f 72 6d 61 74 2e 20 20 54 68 65 20 22 6c 65  format.  The "le
5400: 67 61 63 79 22 20 66 69 6c 65 20 66 6f 72 6d 61  gacy" file forma
5410: 74 20 69 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a  t ignores index.
5420: 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 54 68 65  sort order.  The
5430: 20 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65   descending inde
5440: 78 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 74 61  x file format ta
5450: 6b 65 73 20 69 6e 64 65 78 20 73 6f 72 74 20 6f  kes index sort o
5460: 72 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f 75 6e  rder.into accoun
5470: 74 2e 20 20 4f 6e 6c 79 20 63 6f 70 69 65 73 20  t.  Only copies 
5480: 6f 66 20 53 51 4c 69 74 65 20 6e 65 77 65 72 20  of SQLite newer 
5490: 74 68 61 6e 20 5b 76 65 72 73 69 6f 6e 20 33 2e  than [version 3.
54a0: 33 2e 30 5d 20 0a 28 72 65 6c 65 61 73 65 64 20  3.0] .(released 
54b0: 6f 6e 20 32 30 30 36 2d 30 31 2d 31 30 29 20 61  on 2006-01-10) a
54c0: 72 65 20 61 62 6c 65 20 74 6f 20 75 6e 64 65 72  re able to under
54d0: 73 74 61 6e 64 20 74 68 65 20 6e 65 77 65 72 20  stand the newer 
54e0: 64 65 73 63 65 6e 64 69 6e 67 0a 69 6e 64 65 78  descending.index
54f0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 61 6e 64   file format and
5500: 20 73 6f 20 66 6f 72 20 63 6f 6d 70 61 74 69 62   so for compatib
5510: 69 6c 69 74 79 20 77 69 74 68 20 6f 6c 64 65 72  ility with older
5520: 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c   versions of.SQL
5530: 69 74 65 2c 20 74 68 65 20 6c 65 67 61 63 79 20  ite, the legacy 
5540: 66 69 6c 65 20 66 6f 72 6d 61 74 20 69 73 20 67  file format is g
5550: 65 6e 65 72 61 74 65 64 20 62 79 20 64 65 66 61  enerated by defa
5560: 75 6c 74 2e 20 20 55 73 65 20 74 68 65 0a 5b 6c  ult.  Use the.[l
5570: 65 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61  egacy_file_forma
5580: 74 5d 20 70 72 61 67 6d 61 20 74 6f 20 6d 6f 64  t] pragma to mod
5590: 69 66 79 20 74 68 69 73 20 62 65 68 61 76 69 6f  ify this behavio
55a0: 72 20 61 6e 64 20 67 65 6e 65 72 61 74 65 0a 64  r and generate.d
55b0: 61 74 61 62 61 73 65 73 20 74 68 61 74 20 75 73  atabases that us
55c0: 65 20 74 68 65 20 6e 65 77 65 72 20 66 69 6c 65  e the newer file
55d0: 20 66 6f 72 6d 61 74 2e 20 20 46 75 74 75 72 65   format.  Future
55e0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
55f0: 69 74 65 0a 6d 61 79 20 62 65 67 69 6e 20 74 6f  ite.may begin to
5600: 20 67 65 6e 65 72 61 74 65 20 74 68 65 20 6e 65   generate the ne
5610: 77 65 72 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  wer file format 
5620: 62 79 20 64 65 66 61 75 6c 74 2e 3c 2f 70 3e 0a  by default.</p>.
5630: 0a 3c 70 3e 54 68 65 20 43 4f 4c 4c 41 54 45 20  .<p>The COLLATE 
5640: 63 6c 61 75 73 65 20 66 6f 6c 6c 6f 77 69 6e 67  clause following
5650: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d   each column nam
5660: 65 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c  e defines a coll
5670: 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20 75  ating.sequence u
5680: 73 65 64 20 66 6f 72 20 74 65 78 74 20 65 6e 74  sed for text ent
5690: 72 69 65 73 20 69 6e 20 74 68 61 74 20 63 6f 6c  ries in that col
56a0: 75 6d 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c  umn.  The defaul
56b0: 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75  t collating.sequ
56c0: 65 6e 63 65 20 69 73 20 74 68 65 20 63 6f 6c 6c  ence is the coll
56d0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64  ating sequence d
56e0: 65 66 69 6e 65 64 20 66 6f 72 20 74 68 61 74 20  efined for that 
56f0: 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 0a 5b 43  column in the.[C
5700: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
5710: 74 65 6d 65 6e 74 2e 20 20 4f 72 20 69 66 20 6e  tement.  Or if n
5720: 6f 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  o collating sequ
5730: 65 6e 63 65 20 69 73 20 6f 74 68 65 72 77 69 73  ence is otherwis
5740: 65 20 64 65 66 69 6e 65 64 2c 0a 74 68 65 20 62  e defined,.the b
5750: 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63  uilt-in BINARY c
5760: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
5770: 65 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  e is used.</p>..
5780: 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20  <p>There are no 
5790: 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73  arbitrary limits
57a0: 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
57b0: 66 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 63  f indices that c
57c0: 61 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20 74  an be.attached t
57d0: 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  o a single table
57e0: 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  .  The number of
57f0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20 69   columns in an i
5800: 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69 74 65 64  ndex is .limited
5810: 20 74 6f 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f   to [SQLITE_MAX_
5820: 43 4f 4c 55 4d 4e 5d 2e 3c 2f 70 3e 0a 0a 3c 70  COLUMN].</p>..<p
5830: 3e 49 66 20 74 68 65 20 55 4e 49 51 55 45 20 6b  >If the UNIQUE k
5840: 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62  eyword appears b
5850: 65 74 77 65 65 6e 20 43 52 45 41 54 45 20 61 6e  etween CREATE an
5860: 64 20 49 4e 44 45 58 20 74 68 65 6e 20 64 75 70  d INDEX then dup
5870: 6c 69 63 61 74 65 0a 69 6e 64 65 78 20 65 6e 74  licate.index ent
5880: 72 69 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  ries are not all
5890: 6f 77 65 64 2e 20 20 41 6e 79 20 61 74 74 65 6d  owed.  Any attem
58a0: 70 74 20 74 6f 20 69 6e 73 65 72 74 20 61 20 64  pt to insert a d
58b0: 75 70 6c 69 63 61 74 65 20 65 6e 74 72 79 0a 77  uplicate entry.w
58c0: 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  ill result in an
58d0: 20 65 72 72 6f 72 2e 20 20 46 6f 72 20 74 68 65   error.  For the
58e0: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 75 6e 69   purposes of uni
58f0: 71 75 65 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c  que indices, all
5900: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65   NULL values.are
5910: 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 64   considered to d
5920: 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c  ifferent from al
5930: 6c 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c  l other NULL val
5940: 75 65 73 20 61 6e 64 20 61 72 65 20 74 68 75 73  ues and are thus
5950: 20 75 6e 69 71 75 65 2e 3c 2f 70 3e 0a 0a 3c 70   unique.</p>..<p
5960: 3e 54 68 65 20 74 65 78 74 0a 6f 66 20 65 61 63  >The text.of eac
5970: 68 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  h CREATE INDEX s
5980: 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72  tatement is stor
5990: 65 64 20 69 6e 20 74 68 65 20 3c 62 3e 73 71 6c  ed in the <b>sql
59a0: 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 0a 6f  ite_master</b>.o
59b0: 72 20 3c 62 3e 73 71 6c 69 74 65 5f 74 65 6d 70  r <b>sqlite_temp
59c0: 5f 6d 61 73 74 65 72 3c 2f 62 3e 20 74 61 62 6c  _master</b> tabl
59d0: 65 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  e, depending on 
59e0: 77 68 65 74 68 65 72 20 74 68 65 20 74 61 62 6c  whether the tabl
59f0: 65 0a 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  e.being indexed 
5a00: 69 73 20 74 65 6d 70 6f 72 61 72 79 2e 20 20 45  is temporary.  E
5a10: 76 65 72 79 20 74 69 6d 65 20 74 68 65 20 64 61  very time the da
5a20: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64  tabase is opened
5a30: 2c 0a 61 6c 6c 20 43 52 45 41 54 45 20 49 4e 44  ,.all CREATE IND
5a40: 45 58 20 73 74 61 74 65 6d 65 6e 74 73 0a 61 72  EX statements.ar
5a50: 65 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20  e read from the 
5a60: 3c 62 3e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  <b>sqlite_master
5a70: 3c 2f 62 3e 20 74 61 62 6c 65 20 61 6e 64 20 75  </b> table and u
5a80: 73 65 64 20 74 6f 20 72 65 67 65 6e 65 72 61 74  sed to regenerat
5a90: 65 0a 53 51 4c 69 74 65 27 73 20 69 6e 74 65 72  e.SQLite's inter
5aa0: 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
5ab0: 6f 6e 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  on of the index 
5ac0: 6c 61 79 6f 75 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  layout.</p>..<p>
5ad0: 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20  If the optional 
5ae0: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63 6c  IF NOT EXISTS cl
5af0: 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 20  ause is present 
5b00: 61 6e 64 20 61 6e 6f 74 68 65 72 20 69 6e 64 65  and another inde
5b10: 78 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  x.with the same 
5b20: 6e 61 6d 65 20 61 6c 65 61 64 79 20 65 78 69 73  name aleady exis
5b30: 74 73 2c 20 74 68 65 6e 20 74 68 69 73 20 63 6f  ts, then this co
5b40: 6d 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20 61 20  mmand becomes a 
5b50: 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  no-op.</p>..<p>I
5b60: 6e 64 65 78 65 73 20 61 72 65 20 72 65 6d 6f 76  ndexes are remov
5b70: 65 64 20 77 69 74 68 20 74 68 65 20 3c 61 20 68  ed with the <a h
5b80: 72 65 66 3d 22 6c 61 6e 67 5f 64 72 6f 70 69 6e  ref="lang_dropin
5b90: 64 65 78 2e 68 74 6d 6c 22 3e 44 52 4f 50 20 49  dex.html">DROP I
5ba0: 4e 44 45 58 3c 2f 61 3e 20 0a 63 6f 6d 6d 61 6e  NDEX</a> .comman
5bb0: 64 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23  d.</p>...<tcl>.#
5bc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5bd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5be0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5bf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5c00: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
5c10: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 41  ction {CREATE TA
5c20: 42 4c 45 7d 20 7b 63 72 65 61 74 65 74 61 62 6c  BLE} {createtabl
5c30: 65 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c  e} {{CREATE TABL
5c40: 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  E}}..BubbleDiagr
5c50: 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d  am create-table-
5c60: 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61  stmt 1.BubbleDia
5c70: 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 64 65 66 0a  gram column-def.
5c80: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 74 79  BubbleDiagram ty
5c90: 70 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65 44 69  pe-name.BubbleDi
5ca0: 61 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 63 6f 6e  agram column-con
5cb0: 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69  straint.BubbleDi
5cc0: 61 67 72 61 6d 20 74 61 62 6c 65 2d 63 6f 6e 73  agram table-cons
5cd0: 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61  traint.BubbleDia
5ce0: 67 72 61 6d 20 66 6f 72 65 69 67 6e 2d 6b 65 79  gram foreign-key
5cf0: 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a  -clause.</tcl>..
5d00: 3c 70 3e 41 20 43 52 45 41 54 45 20 54 41 42 4c  <p>A CREATE TABL
5d10: 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 62  E statement is b
5d20: 61 73 69 63 61 6c 6c 79 20 74 68 65 20 6b 65 79  asically the key
5d30: 77 6f 72 64 73 20 22 43 52 45 41 54 45 20 54 41  words "CREATE TA
5d40: 42 4c 45 22 0a 66 6f 6c 6c 6f 77 65 64 20 62 79  BLE".followed by
5d50: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 6e   the name of a n
5d60: 65 77 20 74 61 62 6c 65 20 61 6e 64 20 61 20 70  ew table and a p
5d70: 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73  arenthesized lis
5d80: 74 20 6f 66 20 63 6f 6c 75 6d 6e 0a 64 65 66 69  t of column.defi
5d90: 6e 69 74 69 6f 6e 73 20 61 6e 64 20 63 6f 6e 73  nitions and cons
5da0: 74 72 61 69 6e 74 73 2e 20 20 0a 54 61 62 6c 65  traints.  .Table
5db0: 73 20 6e 61 6d 65 73 20 74 68 61 74 20 62 65 67  s names that beg
5dc0: 69 6e 20 77 69 74 68 20 22 3c 62 3e 73 71 6c 69  in with "<b>sqli
5dd0: 74 65 5f 3c 2f 62 3e 22 20 61 72 65 20 72 65 73  te_</b>" are res
5de0: 65 72 76 65 64 0a 66 6f 72 20 75 73 65 20 62 79  erved.for use by
5df0: 20 74 68 65 20 65 6e 67 69 6e 65 2e 3c 2f 70 3e   the engine.</p>
5e00: 0a 0a 3c 70 3e 45 61 63 68 20 63 6f 6c 75 6d 6e  ..<p>Each column
5e10: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73 20 74   definition is t
5e20: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
5e30: 6f 6c 75 6d 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79  olumn optionally
5e40: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65   followed by the
5e50: 0a 5b 64 61 74 61 74 79 70 65 5d 20 66 6f 72 20  .[datatype] for 
5e60: 74 68 61 74 20 63 6f 6c 75 6d 6e 2c 20 74 68 65  that column, the
5e70: 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 70  n one or more op
5e80: 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 20 63 6f  tional column co
5e90: 6e 73 74 72 61 69 6e 74 73 2e 0a 53 51 4c 69 74  nstraints..SQLit
5ea0: 65 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63 20  e uses [dynamic 
5eb0: 74 79 70 69 6e 67 5d 3b 20 0a 74 68 65 20 64 61  typing]; .the da
5ec0: 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 63  tatype for the c
5ed0: 6f 6c 75 6d 6e 20 64 6f 65 73 20 6e 6f 74 20 72  olumn does not r
5ee0: 65 73 74 72 69 63 74 20 77 68 61 74 20 64 61 74  estrict what dat
5ef0: 61 20 6d 61 79 20 62 65 20 70 75 74 0a 69 6e 20  a may be put.in 
5f00: 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 54 68 65  that column..The
5f10: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
5f20: 6e 74 20 63 61 75 73 65 73 20 61 6e 20 75 6e 69  nt causes an uni
5f30: 71 75 65 20 69 6e 64 65 78 20 74 6f 20 62 65 20  que index to be 
5f40: 63 72 65 61 74 65 64 20 6f 6e 20 74 68 65 20 73  created on the s
5f50: 70 65 63 69 66 69 65 64 0a 63 6f 6c 75 6d 6e 73  pecified.columns
5f60: 2e 20 20 41 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75  .  All NULL valu
5f70: 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
5f80: 64 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  d different from
5f90: 20 65 61 63 68 20 6f 74 68 65 72 20 61 6e 64 20   each other and 
5fa0: 66 72 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72 20 76  from.all other v
5fb0: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 70 75  alues for the pu
5fc0: 72 70 6f 73 65 20 6f 66 20 64 65 74 65 72 6d 69  rpose of determi
5fd0: 6e 69 6e 67 20 75 6e 69 71 75 65 6e 65 73 73 2c  ning uniqueness,
5fe0: 20 68 65 6e 63 65 20 61 20 55 4e 49 51 55 45 0a   hence a UNIQUE.
5ff0: 63 6f 6c 75 6d 6e 20 6d 61 79 20 63 6f 6e 74 61  column may conta
6000: 69 6e 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72  in multiple entr
6010: 69 65 73 20 77 69 74 68 20 74 68 65 20 76 61 6c  ies with the val
6020: 75 65 20 6f 66 20 4e 55 4c 4c 2e 0a 54 68 65 20  ue of NULL..The 
6030: 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 73  COLLATE clause s
6040: 70 65 63 69 66 69 65 73 20 77 68 61 74 20 74 65  pecifies what te
6050: 78 74 20 0a 5b 63 6f 6c 6c 61 74 69 6e 67 20 66  xt .[collating f
6060: 75 6e 63 74 69 6f 6e 5d 20 74 6f 20 75 73 65 20  unction] to use 
6070: 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74  when comparing t
6080: 65 78 74 20 65 6e 74 72 69 65 73 20 66 6f 72 20  ext entries for 
6090: 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 0a 54 68  the column.  .Th
60a0: 65 20 62 75 69 6c 74 2d 69 6e 20 5b 42 49 4e 41  e built-in [BINA
60b0: 52 59 5d 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  RY] collating fu
60c0: 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 62  nction is used b
60d0: 79 20 64 65 66 61 75 6c 74 2e 0a 3c 70 3e 0a 54  y default..<p>.T
60e0: 68 65 20 44 45 46 41 55 4c 54 20 63 6f 6e 73 74  he DEFAULT const
60f0: 72 61 69 6e 74 20 73 70 65 63 69 66 69 65 73 20  raint specifies 
6100: 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  a default value 
6110: 74 6f 20 75 73 65 20 77 68 65 6e 20 64 6f 69 6e  to use when doin
6120: 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 0a 54  g an [INSERT]..T
6130: 68 65 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  he value may be 
6140: 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67 20 63  NULL, a string c
6150: 6f 6e 73 74 61 6e 74 20 6f 72 20 61 20 6e 75 6d  onstant or a num
6160: 62 65 72 2e 0a 54 68 65 20 64 65 66 61 75 6c 74  ber..The default
6170: 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73 6f 20   value may also 
6180: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70  be one of the sp
6190: 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64 65 70  ecial case-indep
61a0: 65 6e 64 61 6e 74 0a 6b 65 79 77 6f 72 64 73 20  endant.keywords 
61b0: 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55  CURRENT_TIME, CU
61c0: 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43 55  RRENT_DATE or CU
61d0: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2e  RRENT_TIMESTAMP.
61e0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
61f0: 0a 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67 20  .NULL, a string 
6200: 63 6f 6e 73 74 61 6e 74 20 6f 72 20 6e 75 6d 62  constant or numb
6210: 65 72 2c 20 69 74 20 69 73 20 6c 69 74 65 72 61  er, it is litera
6220: 6c 6c 79 20 69 6e 73 65 72 74 65 64 20 69 6e 74  lly inserted int
6230: 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 77 68 65  o the column.whe
6240: 6e 65 76 65 72 20 61 6e 20 49 4e 53 45 52 54 20  never an INSERT 
6250: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 64  statement that d
6260: 6f 65 73 20 6e 6f 74 20 73 70 65 63 69 66 79 20  oes not specify 
6270: 61 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  a value for the 
6280: 63 6f 6c 75 6d 6e 20 69 73 0a 65 78 65 63 75 74  column is.execut
6290: 65 64 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65  ed. If the value
62a0: 20 69 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45   is CURRENT_TIME
62b0: 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f  , CURRENT_DATE o
62c0: 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  r CURRENT_TIMEST
62d0: 41 4d 50 2c 20 74 68 65 6e 0a 74 68 65 20 63 75  AMP, then.the cu
62e0: 72 72 65 6e 74 20 55 54 43 20 64 61 74 65 20 61  rrent UTC date a
62f0: 6e 64 2f 6f 72 20 74 69 6d 65 20 69 73 20 69 6e  nd/or time is in
6300: 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
6310: 63 6f 6c 75 6d 6e 73 2e 20 46 6f 72 0a 43 55 52  columns. For.CUR
6320: 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65 20 66  RENT_TIME, the f
6330: 6f 72 6d 61 74 20 69 73 20 48 48 3a 4d 4d 3a 53  ormat is HH:MM:S
6340: 53 2e 20 46 6f 72 20 43 55 52 52 45 4e 54 5f 44  S. For CURRENT_D
6350: 41 54 45 2c 20 59 59 59 59 2d 4d 4d 2d 44 44 2e  ATE, YYYY-MM-DD.
6360: 20 54 68 65 20 66 6f 72 6d 61 74 0a 66 6f 72 20   The format.for 
6370: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
6380: 50 20 69 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44  P is "YYYY-MM-DD
6390: 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c 2f 70 3e   HH:MM:SS"..</p>
63a0: 0a 0a 3c 70 3e 54 68 65 20 50 52 49 4d 41 52 59  ..<p>The PRIMARY
63b0: 20 4b 45 59 20 61 74 74 72 69 62 75 74 65 20 6e   KEY attribute n
63c0: 6f 72 6d 61 6c 6c 79 20 63 72 65 61 74 65 73 20  ormally creates 
63d0: 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20 6f  a UNIQUE index o
63e0: 6e 0a 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20  n.the column or 
63f0: 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65  columns that are
6400: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
6410: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20  e PRIMARY KEY.  
6420: 54 68 65 20 6f 6e 6c 79 0a 65 78 63 65 70 74 69  The only.excepti
6430: 6f 6e 20 74 6f 20 74 68 69 73 20 62 65 68 61 76  on to this behav
6440: 69 6f 72 20 69 73 20 73 70 65 63 69 61 6c 20 5b  ior is special [
6450: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
6460: 4b 45 59 5d 20 63 6f 6c 75 6d 6e 2c 0a 64 65 73  KEY] column,.des
6470: 63 72 69 62 65 64 20 62 65 6c 6f 77 2e 0a 41 63  cribed below..Ac
6480: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 53  cording to the S
6490: 51 4c 20 73 74 61 6e 64 61 72 64 2c 20 50 52 49  QL standard, PRI
64a0: 4d 41 52 59 20 4b 45 59 20 73 68 6f 75 6c 64 20  MARY KEY should 
64b0: 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c 2e 0a  imply NOT NULL..
64c0: 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 64  Unfortunately, d
64d0: 75 65 20 74 6f 20 61 20 6c 6f 6e 67 2d 73 74 61  ue to a long-sta
64e0: 6e 64 69 6e 67 20 63 6f 64 69 6e 67 20 6f 76 65  nding coding ove
64f0: 72 73 69 67 68 74 2c 20 74 68 69 73 20 69 73 20  rsight, this is 
6500: 6e 6f 74 20 0a 74 68 65 20 63 61 73 65 20 69 6e  not .the case in
6510: 20 53 51 4c 69 74 65 2e 20 20 53 51 4c 69 74 65   SQLite.  SQLite
6520: 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c   allows NULL val
6530: 75 65 73 0a 69 6e 20 61 20 50 52 49 4d 41 52 59  ues.in a PRIMARY
6540: 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20 20 57 65   KEY column.  We
6550: 20 63 6f 75 6c 64 20 63 68 61 6e 67 65 20 53 51   could change SQ
6560: 4c 69 74 65 20 74 6f 20 63 6f 6e 66 6f 72 6d 20  Lite to conform 
6570: 74 6f 20 74 68 65 0a 73 74 61 6e 64 61 72 64 20  to the.standard 
6580: 28 61 6e 64 20 77 65 20 6d 69 67 68 74 20 64 6f  (and we might do
6590: 20 73 6f 20 69 6e 20 74 68 65 20 66 75 74 75 72   so in the futur
65a0: 65 29 2c 20 62 75 74 20 62 79 20 74 68 65 20 74  e), but by the t
65b0: 69 6d 65 20 74 68 65 0a 6f 76 65 72 73 69 67 68  ime the.oversigh
65c0: 74 20 77 61 73 20 64 69 73 63 6f 76 65 72 65 64  t was discovered
65d0: 2c 20 53 51 4c 69 74 65 20 77 61 73 20 69 6e 20  , SQLite was in 
65e0: 73 75 63 68 20 77 69 64 65 20 75 73 65 20 74 68  such wide use th
65f0: 61 74 20 77 65 20 66 65 61 72 65 64 0a 62 72 65  at we feared.bre
6600: 61 6b 69 6e 67 20 6c 65 67 61 63 79 20 63 6f 64  aking legacy cod
6610: 65 20 69 66 20 77 65 20 66 69 78 65 64 20 74 68  e if we fixed th
6620: 65 20 70 72 6f 62 6c 65 6d 2e 20 20 53 6f 20 66  e problem.  So f
6630: 6f 72 20 6e 6f 77 20 77 65 20 68 61 76 65 0a 63  or now we have.c
6640: 68 6f 73 65 6e 20 74 6f 20 63 6f 6e 74 69 6e 75  hosen to continu
6650: 65 20 61 6c 6c 6f 77 69 6e 67 20 4e 55 4c 4c 73  e allowing NULLs
6660: 20 69 6e 20 50 52 49 4d 41 52 59 20 4b 45 59 20   in PRIMARY KEY 
6670: 63 6f 6c 75 6d 6e 73 2e 0a 44 65 76 65 6c 6f 70  columns..Develop
6680: 65 72 73 20 73 68 6f 75 6c 64 20 62 65 20 61 77  ers should be aw
6690: 61 72 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68  are, however, th
66a0: 61 74 20 77 65 20 6d 61 79 20 63 68 61 6e 67 65  at we may change
66b0: 20 53 51 4c 69 74 65 20 74 6f 0a 63 6f 6e 66 6f   SQLite to.confo
66c0: 72 6d 20 74 6f 20 74 68 65 20 53 51 4c 20 73 74  rm to the SQL st
66d0: 61 6e 64 61 72 64 20 69 6e 20 66 75 74 75 72 65  andard in future
66e0: 20 61 6e 64 20 73 68 6f 75 6c 64 20 64 65 73 69   and should desi
66f0: 67 6e 20 6e 65 77 20 70 72 6f 67 72 61 6d 73 0a  gn new programs.
6700: 61 63 63 6f 72 64 69 6e 67 6c 79 2e 3c 2f 70 3e  accordingly.</p>
6710: 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 75 73 65 73  ..<p>SQLite uses
6720: 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69 6e 67   [dynamic typing
6730: 5d 20 69 6e 73 74 65 61 64 20 6f 66 20 73 74 61  ] instead of sta
6740: 74 69 63 20 74 79 70 69 6e 67 2e 20 20 45 78 63  tic typing.  Exc
6750: 65 70 74 20 66 6f 72 20 74 68 65 0a 73 70 65 63  ept for the.spec
6760: 69 61 6c 20 63 61 73 65 20 6f 66 20 5b 49 4e 54  ial case of [INT
6770: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
6780: 5d 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 61  ], SQLite will a
6790: 6c 6c 6f 77 20 76 61 6c 75 65 73 20 6f 66 20 61  llow values of a
67a0: 6e 79 0a 74 79 70 65 20 74 6f 20 62 65 20 73 74  ny.type to be st
67b0: 6f 72 65 64 20 69 6e 20 61 6e 79 20 63 6f 6c 75  ored in any colu
67c0: 6d 6e 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  mn regardless of
67d0: 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 64 61   the declared da
67e0: 74 61 74 79 70 65 20 6f 66 0a 74 68 61 74 20 63  tatype of.that c
67f0: 6f 6c 75 6d 6e 2e 20 20 54 68 65 20 64 65 63 6c  olumn.  The decl
6800: 61 72 65 64 20 64 61 74 61 74 79 70 65 20 69 73  ared datatype is
6810: 20 61 20 5b 61 66 66 69 6e 69 74 79 20 7c 20 74   a [affinity | t
6820: 79 70 65 20 61 66 66 69 6e 69 74 79 5d 20 74 68  ype affinity] th
6830: 61 74 0a 53 51 4c 69 74 65 20 61 74 74 65 6d 70  at.SQLite attemp
6840: 74 73 20 74 6f 20 63 6f 6d 70 6c 79 20 77 69 74  ts to comply wit
6850: 68 2c 20 62 75 74 20 74 68 65 20 6f 70 65 72 61  h, but the opera
6860: 74 69 6f 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65  tion will procee
6870: 64 20 65 76 65 6e 20 69 66 0a 63 6f 6d 70 6c 69  d even if.compli
6880: 61 6e 63 65 20 69 73 20 6e 6f 74 20 70 6f 73 73  ance is not poss
6890: 69 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66  ible.</p>..<p>If
68a0: 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22   the "TEMP" or "
68b0: 54 45 4d 50 4f 52 41 52 59 22 20 6b 65 79 77 6f  TEMPORARY" keywo
68c0: 72 64 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74  rd occurs in bet
68d0: 77 65 65 6e 20 22 43 52 45 41 54 45 22 0a 61 6e  ween "CREATE".an
68e0: 64 20 22 54 41 42 4c 45 22 20 74 68 65 6e 20 74  d "TABLE" then t
68f0: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
6900: 20 63 72 65 61 74 65 64 20 69 73 20 6f 6e 6c 79   created is only
6910: 20 76 69 73 69 62 6c 65 0a 77 69 74 68 69 6e 20   visible.within 
6920: 74 68 61 74 20 73 61 6d 65 20 64 61 74 61 62 61  that same databa
6930: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 61 6e  se connection.an
6940: 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c  d is automatical
6950: 6c 79 20 64 65 6c 65 74 65 64 20 77 68 65 6e 0a  ly deleted when.
6960: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
6970: 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65  nection is close
6980: 64 2e 20 20 41 6e 79 20 69 6e 64 69 63 65 73 20  d.  Any indices 
6990: 63 72 65 61 74 65 64 20 6f 6e 20 61 20 74 65 6d  created on a tem
69a0: 70 6f 72 61 72 79 20 74 61 62 6c 65 0a 61 72 65  porary table.are
69b0: 20 61 6c 73 6f 20 74 65 6d 70 6f 72 61 72 79 2e   also temporary.
69c0: 20 20 54 65 6d 70 6f 72 61 72 79 20 74 61 62 6c    Temporary tabl
69d0: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 20 61  es and indices a
69e0: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 0a 73  re stored in a.s
69f0: 65 70 61 72 61 74 65 20 66 69 6c 65 20 64 69 73  eparate file dis
6a00: 74 69 6e 63 74 20 66 72 6f 6d 20 74 68 65 20 6d  tinct from the m
6a10: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
6a20: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 49 66 20 61  e.</p>..<p> If a
6a30: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
6a40: 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63 69 66  me&gt; is specif
6a50: 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 74 61  ied, then the ta
6a60: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69  ble is created i
6a70: 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74  n .the named dat
6a80: 61 62 61 73 65 2e 20 49 74 20 69 73 20 61 6e 20  abase. It is an 
6a90: 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79  error to specify
6aa0: 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61   both a &lt;data
6ab0: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e  base-name&gt;.an
6ac0: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
6ad0: 72 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 26  rd, unless the &
6ae0: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
6af0: 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20  &gt; is "temp". 
6b00: 49 66 20 6e 6f 0a 64 61 74 61 62 61 73 65 20 6e  If no.database n
6b10: 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64  ame is specified
6b20: 2c 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b  , and the TEMP k
6b30: 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72  eyword is not pr
6b40: 65 73 65 6e 74 2c 0a 74 68 65 20 74 61 62 6c 65  esent,.the table
6b50: 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74   is created in t
6b60: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
6b70: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70  .</p>..<p>The op
6b80: 74 69 6f 6e 61 6c 20 5b 63 6f 6e 66 6c 69 63 74  tional [conflict
6b90: 20 63 6c 61 75 73 65 5d 20 66 6f 6c 6c 6f 77 69   clause] followi
6ba0: 6e 67 20 65 61 63 68 20 63 6f 6e 73 74 72 61 69  ng each constrai
6bb0: 6e 74 0a 61 6c 6c 6f 77 73 20 74 68 65 20 73 70  nt.allows the sp
6bc0: 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61  ecification of a
6bd0: 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 64 65  n alternative de
6be0: 66 61 75 6c 74 0a 63 6f 6e 73 74 72 61 69 6e 74  fault.constraint
6bf0: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
6c00: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 66  tion algorithm f
6c10: 6f 72 20 74 68 61 74 20 63 6f 6e 73 74 72 61 69  or that constrai
6c20: 6e 74 2e 0a 54 68 65 20 64 65 66 61 75 6c 74 20  nt..The default 
6c30: 69 73 20 61 62 6f 72 74 20 41 42 4f 52 54 2e 20  is abort ABORT. 
6c40: 20 44 69 66 66 65 72 65 6e 74 20 63 6f 6e 73 74   Different const
6c50: 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20 74 68  raints within th
6c60: 65 20 73 61 6d 65 0a 74 61 62 6c 65 20 6d 61 79  e same.table may
6c70: 20 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 20   have different 
6c80: 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74  default conflict
6c90: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
6ca0: 72 69 74 68 6d 73 2e 0a 49 66 20 61 6e 20 5b 49  rithms..If an [I
6cb0: 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50 44 41 54  NSERT] or [UPDAT
6cc0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65  E] statement spe
6cd0: 63 69 66 69 65 73 20 61 20 64 69 66 66 65 72 65  cifies a differe
6ce0: 6e 74 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f  nt conflict.reso
6cf0: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
6d00: 2c 20 74 68 65 6e 20 74 68 61 74 20 61 6c 67 6f  , then that algo
6d10: 72 69 74 68 6d 20 69 73 20 75 73 65 64 20 69 6e  rithm is used in
6d20: 20 70 6c 61 63 65 20 6f 66 20 74 68 65 0a 64 65   place of the.de
6d30: 66 61 75 6c 74 20 61 6c 67 6f 72 69 74 68 6d 20  fault algorithm 
6d40: 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
6d50: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
6d60: 61 74 65 6d 65 6e 74 2e 0a 53 65 65 20 74 68 65  atement..See the
6d70: 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a   section titled.
6d80: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f  [ON CONFLICT] fo
6d90: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
6da0: 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c  ormation.</p>..<
6db0: 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  p>CHECK constrai
6dc0: 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
6dd0: 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69 6f 6e  d as of [version
6de0: 20 33 2e 33 2e 30 5d 2e 20 20 50 72 69 6f 72 0a   3.3.0].  Prior.
6df0: 74 6f 20 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30  to version 3.3.0
6e00: 2c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  , CHECK constrai
6e10: 6e 74 73 20 77 65 72 65 20 70 61 72 73 65 64 20  nts were parsed 
6e20: 62 75 74 20 6e 6f 74 20 65 6e 66 6f 72 63 65 64  but not enforced
6e30: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6e 75  .</p>..<p>The nu
6e40: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
6e50: 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20 6c 69  in a table is li
6e60: 6d 69 74 65 64 20 62 79 20 74 68 65 0a 5b 53 51  mited by the.[SQ
6e70: 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d  LITE_MAX_COLUMN]
6e80: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70 61   compile-time pa
6e90: 72 61 6d 65 74 65 72 2e 0a 41 20 73 69 6e 67 6c  rameter..A singl
6ea0: 65 20 72 6f 77 20 6f 66 20 61 20 74 61 62 6c 65  e row of a table
6eb0: 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20 6d 6f   cannot store mo
6ec0: 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f  re than.[SQLITE_
6ed0: 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79 74 65  MAX_LENGTH] byte
6ee0: 73 20 6f 66 20 64 61 74 61 2e 0a 42 6f 74 68 20  s of data..Both 
6ef0: 6f 66 20 74 68 65 73 65 20 6c 69 6d 69 74 73 20  of these limits 
6f00: 63 61 6e 20 62 65 20 6c 6f 77 65 72 65 64 20 61  can be lowered a
6f10: 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20  t runtime using 
6f20: 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 6c 69 6d  the.[sqlite3_lim
6f30: 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65  it()] C/C++ inte
6f40: 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 0a 3c 70 3e  rface.</p>...<p>
6f50: 54 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  The CREATE TABLE
6f60: 20 41 53 20 66 6f 72 6d 20 64 65 66 69 6e 65 73   AS form defines
6f70: 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
6f80: 0a 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20  .the result set 
6f90: 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54 68 65  of a query.  The
6fa0: 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 74 61   names of the ta
6fb0: 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 61 72 65 0a  ble columns are.
6fc0: 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65  the names of the
6fd0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
6fe0: 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  result.</p>..<p>
6ff0: 54 68 65 20 74 65 78 74 0a 6f 66 20 65 61 63 68  The text.of each
7000: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
7010: 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65  atement is store
7020: 64 20 69 6e 20 74 68 65 20 3c 62 3e 73 71 6c 69  d in the <b>sqli
7030: 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 0a 74 61  te_master</b>.ta
7040: 62 6c 65 2e 20 20 45 76 65 72 79 20 74 69 6d 65  ble.  Every time
7050: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
7060: 20 6f 70 65 6e 65 64 2c 20 61 6c 6c 20 43 52 45   opened, all CRE
7070: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
7080: 65 6e 74 73 0a 61 72 65 20 72 65 61 64 20 66 72  ents.are read fr
7090: 6f 6d 20 74 68 65 20 3c 62 3e 73 71 6c 69 74 65  om the <b>sqlite
70a0: 5f 6d 61 73 74 65 72 3c 2f 62 3e 20 74 61 62 6c  _master</b> tabl
70b0: 65 20 61 6e 64 20 75 73 65 64 20 74 6f 20 72 65  e and used to re
70c0: 67 65 6e 65 72 61 74 65 0a 53 51 4c 69 74 65 27  generate.SQLite'
70d0: 73 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  s internal repre
70e0: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
70f0: 20 74 61 62 6c 65 20 6c 61 79 6f 75 74 2e 0a 49   table layout..I
7100: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63  f the original c
7110: 6f 6d 6d 61 6e 64 20 77 61 73 20 61 20 43 52 45  ommand was a CRE
7120: 41 54 45 20 54 41 42 4c 45 20 41 53 20 74 68 65  ATE TABLE AS the
7130: 6e 20 74 68 65 6e 20 61 6e 20 65 71 75 69 76 61  n then an equiva
7140: 6c 65 6e 74 0a 43 52 45 41 54 45 20 54 41 42 4c  lent.CREATE TABL
7150: 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73  E statement is s
7160: 79 6e 74 68 65 73 69 7a 65 64 20 61 6e 64 20 73  ynthesized and s
7170: 74 6f 72 65 20 69 6e 20 3c 62 3e 73 71 6c 69 74  tore in <b>sqlit
7180: 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 0a 69 6e 20  e_master</b>.in 
7190: 70 6c 61 63 65 20 6f 66 20 74 68 65 20 6f 72 69  place of the ori
71a0: 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 2e 0a 54  ginal command..T
71b0: 68 65 20 74 65 78 74 20 6f 66 20 43 52 45 41 54  he text of CREAT
71c0: 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
71d0: 45 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65  E statements are
71e0: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 0a 3c   stored in the.<
71f0: 62 3e 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  b>sqlite_temp_ma
7200: 73 74 65 72 3c 2f 62 3e 20 74 61 62 6c 65 2e 0a  ster</b> table..
7210: 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20  </p>..<p>If the 
7220: 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20  optional IF NOT 
7230: 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73  EXISTS clause is
7240: 20 70 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f   present and ano
7250: 74 68 65 72 20 74 61 62 6c 65 0a 77 69 74 68 20  ther table.with 
7260: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c  the same name al
7270: 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65  eady exists, the
7280: 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62  n this command b
7290: 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c  ecomes a no-op.<
72a0: 2f 70 3e 0a 0a 3c 70 3e 54 61 62 6c 65 73 20 61  /p>..<p>Tables a
72b0: 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67  re removed using
72c0: 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 6c 61   the <a href="la
72d0: 6e 67 5f 64 72 6f 70 74 61 62 6c 65 2e 68 74 6d  ng_droptable.htm
72e0: 6c 22 3e 44 52 4f 50 20 54 41 42 4c 45 3c 2f 61  l">DROP TABLE</a
72f0: 3e 20 0a 73 74 61 74 65 6d 65 6e 74 2e 20 20 3c  > .statement.  <
7300: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
7310: 67 6d 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54  gment rowid {INT
7320: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
7330: 7d 20 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74  } ROWID rowid</t
7340: 63 6c 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61  cl>.<h3>ROWIDs a
7350: 6e 64 20 74 68 65 20 49 4e 54 45 47 45 52 20 50  nd the INTEGER P
7360: 52 49 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a  RIMARY KEY</h3>.
7370: 0a 3c 70 3e 45 76 65 72 79 20 72 6f 77 20 6f 66  .<p>Every row of
7380: 20 65 76 65 72 79 20 53 51 4c 69 74 65 20 74 61   every SQLite ta
7390: 62 6c 65 20 68 61 73 20 61 20 36 34 2d 62 69 74  ble has a 64-bit
73a0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
73b0: 6b 65 79 20 0a 74 68 61 74 20 69 73 20 75 6e 69  key .that is uni
73c0: 71 75 65 20 77 69 74 68 69 6e 20 74 68 65 20 73  que within the s
73d0: 61 6d 65 20 74 61 62 6c 65 2e 0a 54 68 69 73 20  ame table..This 
73e0: 69 6e 74 65 67 65 72 20 69 73 20 75 73 75 61 6c  integer is usual
73f0: 6c 79 20 63 61 6c 6c 65 64 20 74 68 65 20 22 72  ly called the "r
7400: 6f 77 69 64 22 2e 20 20 54 68 65 20 72 6f 77 69  owid".  The rowi
7410: 64 20 69 73 20 74 68 65 20 61 63 74 75 61 6c 20  d is the actual 
7420: 6b 65 79 20 75 73 65 64 0a 69 6e 20 74 68 65 20  key used.in the 
7430: 42 2d 54 72 65 65 20 74 68 61 74 20 69 6d 70 6c  B-Tree that impl
7440: 65 6d 65 6e 74 73 20 61 6e 20 53 51 4c 69 74 65  ements an SQLite
7450: 20 74 61 62 6c 65 2e 20 20 52 6f 77 73 20 61 72   table.  Rows ar
7460: 65 20 73 74 6f 72 65 64 20 69 6e 0a 72 6f 77 69  e stored in.rowi
7470: 64 20 6f 72 64 65 72 2e 20 54 68 65 0a 72 6f 77  d order. The.row
7480: 69 64 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20  id value can be 
7490: 61 63 63 65 73 73 65 64 20 75 73 69 6e 67 20 6f  accessed using o
74a0: 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 61  ne of the specia
74b0: 6c 20 6e 61 6d 65 73 0a 22 3c 62 3e 52 4f 57 49  l names."<b>ROWI
74c0: 44 3c 2f 62 3e 22 2c 20 22 3c 62 3e 4f 49 44 3c  D</b>", "<b>OID<
74d0: 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f 52 4f  /b>", or "<b>_RO
74e0: 57 49 44 5f 3c 2f 62 3e 22 2e 3c 2f 70 3e 0a 0a  WID_</b>".</p>..
74f0: 3c 70 3e 0a 49 66 20 61 20 63 6f 6c 75 6d 6e 20  <p>.If a column 
7500: 69 73 20 64 65 63 6c 61 72 65 64 20 74 6f 20 62  is declared to b
7510: 65 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49  e an INTEGER PRI
7520: 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 74  MARY KEY, then t
7530: 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 6f  hat column is no
7540: 74 0a 61 20 22 72 65 61 6c 22 20 64 61 74 61 62  t.a "real" datab
7550: 61 73 65 20 63 6f 6c 75 6d 6e 20 62 75 74 20 69  ase column but i
7560: 6e 73 74 65 61 64 20 62 65 63 6f 6d 65 73 0a 61  nstead becomes.a
7570: 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
7580: 72 6f 77 69 64 2e 20 20 55 6e 6c 69 6b 65 20 6e  rowid.  Unlike n
7590: 6f 72 6d 61 6c 20 53 51 4c 69 74 65 20 63 6f 6c  ormal SQLite col
75a0: 75 6d 6e 73 2c 20 74 68 65 20 72 6f 77 69 64 0a  umns, the rowid.
75b0: 6d 75 73 74 20 62 65 20 61 20 6e 6f 6e 2d 4e 55  must be a non-NU
75c0: 4c 4c 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  LL integer value
75d0: 2e 20 20 54 68 65 20 72 6f 77 69 64 20 69 73 20  .  The rowid is 
75e0: 6e 6f 74 20 61 62 6c 65 20 74 6f 20 68 6f 6c 64  not able to hold
75f0: 0a 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20  .floating point 
7600: 76 61 6c 75 65 73 2c 20 73 74 72 69 6e 67 73 2c  values, strings,
7610: 20 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73   BLOBs, or NULLs
7620: 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
7630: 74 65 3e 3c 69 3e 0a 41 6e 20 49 4e 54 45 47 45  te><i>.An INTEGE
7640: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  R PRIMARY KEY co
7650: 6c 75 6d 6e 20 69 73 20 61 6e 20 61 6c 69 61 73  lumn is an alias
7660: 20 66 6f 72 20 74 68 65 20 36 34 2d 62 69 74 20   for the 64-bit 
7670: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 72  signed integer r
7680: 6f 77 69 64 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63  owid..</i></bloc
7690: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 41 6e 20 49  kquote>..<p>An I
76a0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
76b0: 45 59 20 63 6f 6c 75 6d 6e 20 63 61 6e 20 61 6c  EY column can al
76c0: 73 6f 20 69 6e 63 6c 75 64 65 20 74 68 65 0a 6b  so include the.k
76d0: 65 79 77 6f 72 64 20 5b 41 55 54 4f 49 4e 43 52  eyword [AUTOINCR
76e0: 45 4d 45 4e 54 5d 2e 20 20 54 68 65 20 5b 41 55  EMENT].  The [AU
76f0: 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 20 6b 65 79  TOINCREMENT] key
7700: 77 6f 72 64 20 6d 6f 64 69 66 69 65 64 20 74 68  word modified th
7710: 65 20 77 61 79 0a 74 68 61 74 20 42 2d 54 72 65  e way.that B-Tre
7720: 65 20 6b 65 79 73 20 61 72 65 20 61 75 74 6f 6d  e keys are autom
7730: 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74  atically generat
7740: 65 64 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 20  ed.  Additional 
7750: 64 65 74 61 69 6c 0a 6f 6e 20 61 75 74 6f 6d 61  detail.on automa
7760: 74 69 63 20 42 2d 54 72 65 65 20 6b 65 79 20 67  tic B-Tree key g
7770: 65 6e 65 72 61 74 69 6f 6e 20 69 73 20 61 76 61  eneration is ava
7780: 69 6c 61 62 6c 65 0a 3c 61 20 68 72 65 66 3d 22  ilable.<a href="
7790: 61 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e 73 65  autoinc.html">se
77a0: 70 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70  parately</a>.</p
77b0: 3e 0a 0a 3c 70 3e 54 68 65 20 73 70 65 63 69 61  >..<p>The specia
77c0: 6c 20 62 65 68 61 76 69 6f 72 20 6f 66 20 49 4e  l behavior of IN
77d0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
77e0: 59 0a 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61  Y.is only availa
77f0: 62 6c 65 20 69 66 20 74 68 65 20 74 79 70 65 20  ble if the type 
7800: 6e 61 6d 65 20 69 73 20 65 78 61 63 74 6c 79 20  name is exactly 
7810: 22 49 4e 54 45 47 45 52 22 20 28 69 6e 20 61 6e  "INTEGER" (in an
7820: 79 20 6d 69 78 74 75 72 65 0a 6f 66 20 75 70 70  y mixture.of upp
7830: 65 72 20 61 6e 64 20 6c 6f 77 65 72 20 63 61 73  er and lower cas
7840: 65 2e 29 20 20 4f 74 68 65 72 20 69 6e 74 65 67  e.)  Other integ
7850: 65 72 20 74 79 70 65 20 6e 61 6d 65 73 0a 6c 69  er type names.li
7860: 6b 65 20 22 49 4e 54 22 20 6f 72 20 22 42 49 47  ke "INT" or "BIG
7870: 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54 20 49  INT" or "SHORT I
7880: 4e 54 45 47 45 52 22 20 6f 72 20 22 55 4e 53 49  NTEGER" or "UNSI
7890: 47 4e 45 44 20 49 4e 54 45 47 45 52 22 0a 63 61  GNED INTEGER".ca
78a0: 75 73 65 73 20 74 68 65 20 70 72 69 6d 61 72 79  uses the primary
78b0: 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f 20 62   key column to b
78c0: 65 68 61 76 65 20 61 73 20 61 6e 20 6f 72 64 69  ehave as an ordi
78d0: 6e 61 72 79 20 74 61 62 6c 65 20 63 6f 6c 75 6d  nary table colum
78e0: 6e 20 77 69 74 68 0a 69 6e 74 65 67 65 72 20 5b  n with.integer [
78f0: 61 66 66 69 6e 69 74 79 5d 20 61 6e 64 20 61 20  affinity] and a 
7900: 75 6e 69 71 75 65 20 69 6e 64 65 78 2c 20 6e 6f  unique index, no
7910: 74 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  t as an alias fo
7920: 72 20 74 68 65 20 72 6f 77 69 64 2e 0a 54 68 65  r the rowid..The
7930: 20 73 70 65 63 69 61 6c 20 62 65 68 61 76 69 6f   special behavio
7940: 72 20 6f 66 20 49 4e 54 45 47 45 52 20 50 52 49  r of INTEGER PRI
7950: 4d 41 52 59 20 4b 45 59 20 69 73 20 6f 6e 6c 79  MARY KEY is only
7960: 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68   available if th
7970: 65 0a 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  e.primary key is
7980: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
7990: 2e 20 20 4d 75 6c 74 69 2d 63 6f 6c 75 6d 6e 20  .  Multi-column 
79a0: 70 72 69 6d 61 72 79 20 6b 65 79 73 20 64 6f 20  primary keys do 
79b0: 6e 6f 74 20 62 65 63 6f 6d 65 0a 61 6c 69 61 73  not become.alias
79c0: 65 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  es for the rowid
79d0: 2e 0a 54 68 65 20 41 55 54 4f 49 4e 43 52 45 4d  ..The AUTOINCREM
79e0: 45 4e 54 20 6b 65 79 77 6f 72 64 20 6f 6e 6c 79  ENT keyword only
79f0: 20 77 6f 72 6b 73 20 6f 6e 20 61 20 63 6f 6c 75   works on a colu
7a00: 6d 6e 20 74 68 61 74 20 69 73 20 61 6e 20 61 6c  mn that is an al
7a10: 69 61 73 0a 66 6f 72 20 74 68 65 20 72 6f 77 69  ias.for the rowi
7a20: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 74 65 20  d.</p>..<p>Note 
7a30: 74 68 61 74 20 73 65 61 72 63 68 65 73 20 61 67  that searches ag
7a40: 61 69 6e 73 74 20 61 20 72 6f 77 69 64 20 61 72  ainst a rowid ar
7a50: 65 20 67 65 6e 65 72 61 6c 6c 79 20 61 62 6f 75  e generally abou
7a60: 74 20 74 77 69 63 65 20 61 73 0a 66 61 73 74 20  t twice as.fast 
7a70: 61 73 20 73 65 61 72 63 68 65 73 20 61 67 61 69  as searches agai
7a80: 6e 73 74 20 61 6e 79 20 6f 74 68 65 72 20 50 52  nst any other PR
7a90: 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 69 6e 64  IMARY KEY or ind
7aa0: 65 78 65 64 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e  exed value..</p>
7ab0: 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
7ac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7ad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7ae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7af0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7b00: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
7b10: 7b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 7d  {CREATE TRIGGER}
7b20: 20 63 72 65 61 74 65 74 72 69 67 67 65 72 20 7b   createtrigger {
7b30: 7b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 7d  {CREATE TRIGGER}
7b40: 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
7b50: 20 63 72 65 61 74 65 2d 74 72 69 67 67 65 72 2d   create-trigger-
7b60: 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
7b70: 70 3e 54 68 65 20 43 52 45 41 54 45 20 54 52 49  p>The CREATE TRI
7b80: 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 69  GGER statement i
7b90: 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 74 72  s used to add tr
7ba0: 69 67 67 65 72 73 20 74 6f 20 74 68 65 20 0a 64  iggers to the .d
7bb0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
7bc0: 54 72 69 67 67 65 72 73 20 61 72 65 20 64 61 74  Triggers are dat
7bd0: 61 62 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73  abase operations
7be0: 20 28 74 68 65 20 3c 69 3e 74 72 69 67 67 65 72   (the <i>trigger
7bf0: 2d 61 63 74 69 6f 6e 3c 2f 69 3e 29 20 0a 74 68  -action</i>) .th
7c00: 61 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  at are automatic
7c10: 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64 20 77  ally performed w
7c20: 68 65 6e 20 61 20 73 70 65 63 69 66 69 65 64 20  hen a specified 
7c30: 64 61 74 61 62 61 73 65 20 65 76 65 6e 74 20 28  database event (
7c40: 74 68 65 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d  the.<i>database-
7c50: 65 76 65 6e 74 3c 2f 69 3e 29 20 6f 63 63 75 72  event</i>) occur
7c60: 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 74  s.  </p>..<p>A t
7c70: 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 73 70  rigger may be sp
7c80: 65 63 69 66 69 65 64 20 74 6f 20 66 69 72 65 20  ecified to fire 
7c90: 77 68 65 6e 65 76 65 72 20 61 20 5b 44 45 4c 45  whenever a [DELE
7ca0: 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f  TE], [INSERT],.o
7cb0: 72 20 5b 55 50 44 41 54 45 5d 20 6f 66 20 61 0a  r [UPDATE] of a.
7cc0: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
7cd0: 61 73 65 20 74 61 62 6c 65 20 6f 63 63 75 72 73  ase table occurs
7ce0: 2c 20 6f 72 20 77 68 65 6e 65 76 65 72 20 61 6e  , or whenever an
7cf0: 20 5b 55 50 44 41 54 45 5d 20 6f 66 20 6f 6e 65   [UPDATE] of one
7d00: 20 6f 72 20 6d 6f 72 65 0a 73 70 65 63 69 66 69   or more.specifi
7d10: 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 20  ed columns of a 
7d20: 74 61 62 6c 65 20 61 72 65 20 75 70 64 61 74 65  table are update
7d30: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 74 20 74 68  d.</p>..<p>At th
7d40: 69 73 20 74 69 6d 65 20 53 51 4c 69 74 65 20 73  is time SQLite s
7d50: 75 70 70 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52  upports only FOR
7d60: 20 45 41 43 48 20 52 4f 57 20 74 72 69 67 67 65   EACH ROW trigge
7d70: 72 73 2c 20 6e 6f 74 20 46 4f 52 20 45 41 43 48  rs, not FOR EACH
7d80: 0a 53 54 41 54 45 4d 45 4e 54 20 74 72 69 67 67  .STATEMENT trigg
7d90: 65 72 73 2e 20 48 65 6e 63 65 20 65 78 70 6c 69  ers. Hence expli
7da0: 63 69 74 6c 79 20 73 70 65 63 69 66 79 69 6e 67  citly specifying
7db0: 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69 73   FOR EACH ROW is
7dc0: 20 6f 70 74 69 6f 6e 61 6c 2e 20 20 46 4f 52 0a   optional.  FOR.
7dd0: 45 41 43 48 20 52 4f 57 20 69 6d 70 6c 69 65 73  EACH ROW implies
7de0: 20 74 68 61 74 20 74 68 65 20 53 51 4c 20 73 74   that the SQL st
7df0: 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
7e00: 65 64 20 61 73 20 3c 69 3e 74 72 69 67 67 65 72  ed as <i>trigger
7e10: 2d 73 74 65 70 73 3c 2f 69 3e 20 0a 6d 61 79 20  -steps</i> .may 
7e20: 62 65 20 65 78 65 63 75 74 65 64 20 28 64 65 70  be executed (dep
7e30: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 57 48  ending on the WH
7e40: 45 4e 20 63 6c 61 75 73 65 29 20 66 6f 72 20 65  EN clause) for e
7e50: 61 63 68 20 64 61 74 61 62 61 73 65 20 72 6f 77  ach database row
7e60: 20 62 65 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c   being.inserted,
7e70: 20 75 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65   updated or dele
7e80: 74 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  ted by the state
7e90: 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65  ment causing the
7ea0: 20 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65   trigger to fire
7eb0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 6f 74 68 20 74  .</p>..<p>Both t
7ec0: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 61  he WHEN clause a
7ed0: 6e 64 20 74 68 65 20 3c 69 3e 74 72 69 67 67 65  nd the <i>trigge
7ee0: 72 2d 73 74 65 70 73 3c 2f 69 3e 20 6d 61 79 20  r-steps</i> may 
7ef0: 61 63 63 65 73 73 20 65 6c 65 6d 65 6e 74 73 20  access elements 
7f00: 6f 66 20 0a 74 68 65 20 72 6f 77 20 62 65 69 6e  of .the row bein
7f10: 67 20 69 6e 73 65 72 74 65 64 2c 20 64 65 6c 65  g inserted, dele
7f20: 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 20 75  ted or updated u
7f30: 73 69 6e 67 20 72 65 66 65 72 65 6e 63 65 73 20  sing references 
7f40: 6f 66 20 74 68 65 20 66 6f 72 6d 20 0a 22 4e 45  of the form ."NE
7f50: 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  W.<i>column-name
7f60: 3c 2f 69 3e 22 20 61 6e 64 20 22 4f 4c 44 2e 3c  </i>" and "OLD.<
7f70: 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69  i>column-name</i
7f80: 3e 22 2c 20 77 68 65 72 65 0a 3c 69 3e 63 6f 6c  >", where.<i>col
7f90: 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20  umn-name</i> is 
7fa0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f  the name of a co
7fb0: 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 74 61  lumn from the ta
7fc0: 62 6c 65 20 74 68 61 74 20 74 68 65 20 74 72 69  ble that the tri
7fd0: 67 67 65 72 0a 69 73 20 61 73 73 6f 63 69 61 74  gger.is associat
7fe0: 65 64 20 77 69 74 68 2e 20 4f 4c 44 20 61 6e 64  ed with. OLD and
7ff0: 20 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73 20   NEW references 
8000: 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  may only be used
8010: 20 69 6e 20 74 72 69 67 67 65 72 73 20 6f 6e 0a   in triggers on.
8020: 3c 69 3e 74 72 69 67 67 65 72 2d 65 76 65 6e 74  <i>trigger-event
8030: 3c 2f 69 3e 73 20 66 6f 72 20 77 68 69 63 68 20  </i>s for which 
8040: 74 68 65 79 20 61 72 65 20 72 65 6c 65 76 61 6e  they are relevan
8050: 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  t, as follows:</
8060: 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  p>..<table borde
8070: 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  r=0 cellpadding=
8080: 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  10>.<tr>.<td val
8090: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
80a0: 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32  "right" width=12
80b0: 30 3e 3c 69 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c  0><i>INSERT</i><
80c0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
80d0: 22 74 6f 70 22 3e 4e 45 57 20 72 65 66 65 72 65  "top">NEW refere
80e0: 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f  nces are valid</
80f0: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
8100: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
8110: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69  align="right" wi
8120: 64 74 68 3d 31 32 30 3e 3c 69 3e 55 50 44 41 54  dth=120><i>UPDAT
8130: 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76  E</i></td>.<td v
8140: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20  align="top">NEW 
8150: 61 6e 64 20 4f 4c 44 20 72 65 66 65 72 65 6e 63  and OLD referenc
8160: 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64  es are valid</td
8170: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
8180: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
8190: 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74  ign="right" widt
81a0: 68 3d 31 32 30 3e 3c 69 3e 44 45 4c 45 54 45 3c  h=120><i>DELETE<
81b0: 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  /i></td>.<td val
81c0: 69 67 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20 72 65  ign="top">OLD re
81d0: 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c  ferences are val
81e0: 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f  id</td>.</tr>.</
81f0: 74 61 62 6c 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  table>.</p>..<p>
8200: 49 66 20 61 20 57 48 45 4e 20 63 6c 61 75 73 65  If a WHEN clause
8210: 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68   is supplied, th
8220: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
8230: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 0a 3c   specified as .<
8240: 69 3e 74 72 69 67 67 65 72 2d 73 74 65 70 73 3c  i>trigger-steps<
8250: 2f 69 3e 20 61 72 65 20 6f 6e 6c 79 20 65 78 65  /i> are only exe
8260: 63 75 74 65 64 20 66 6f 72 20 72 6f 77 73 20 66  cuted for rows f
8270: 6f 72 20 77 68 69 63 68 20 74 68 65 20 57 48 45  or which the WHE
8280: 4e 0a 63 6c 61 75 73 65 20 69 73 20 74 72 75 65  N.clause is true
8290: 2e 20 49 66 20 6e 6f 20 57 48 45 4e 20 63 6c 61  . If no WHEN cla
82a0: 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c  use is supplied,
82b0: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
82c0: 6e 74 73 0a 61 72 65 20 65 78 65 63 75 74 65 64  nts.are executed
82d0: 20 66 6f 72 20 61 6c 6c 20 72 6f 77 73 2e 3c 2f   for all rows.</
82e0: 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 70 65 63 69  p>..<p>The speci
82f0: 66 69 65 64 20 3c 69 3e 74 72 69 67 67 65 72 2d  fied <i>trigger-
8300: 74 69 6d 65 3c 2f 69 3e 20 64 65 74 65 72 6d 69  time</i> determi
8310: 6e 65 73 20 77 68 65 6e 20 74 68 65 20 3c 69 3e  nes when the <i>
8320: 74 72 69 67 67 65 72 2d 73 74 65 70 73 3c 2f 69  trigger-steps</i
8330: 3e 0a 77 69 6c 6c 20 62 65 20 65 78 65 63 75 74  >.will be execut
8340: 65 64 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74  ed relative to t
8350: 68 65 20 69 6e 73 65 72 74 69 6f 6e 2c 20 6d 6f  he insertion, mo
8360: 64 69 66 69 63 61 74 69 6f 6e 20 6f 72 20 72 65  dification or re
8370: 6d 6f 76 61 6c 20 6f 66 20 74 68 65 0a 61 73 73  moval of the.ass
8380: 6f 63 69 61 74 65 64 20 72 6f 77 2e 3c 2f 70 3e  ociated row.</p>
8390: 0a 0a 3c 70 3e 41 6e 20 5b 4f 4e 20 43 4f 4e 46  ..<p>An [ON CONF
83a0: 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 6d 61 79  LICT] clause may
83b0: 20 62 65 20 73 70 65 63 69 66 69 65 64 20 61 73   be specified as
83c0: 20 70 61 72 74 20 6f 66 20 61 6e 20 5b 55 50 44   part of an [UPD
83d0: 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45 52 54 5d  ATE] or [INSERT]
83e0: 0a 3c 69 3e 74 72 69 67 67 65 72 2d 73 74 65 70  .<i>trigger-step
83f0: 3c 2f 69 3e 2e 20 48 6f 77 65 76 65 72 20 69 66  </i>. However if
8400: 20 61 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54   an [ON CONFLICT
8410: 5d 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63  ] clause is spec
8420: 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
8430: 20 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20   .the statement 
8440: 63 61 75 73 69 6e 67 20 74 68 65 20 74 72 69 67  causing the trig
8450: 67 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68 65  ger to fire, the
8460: 6e 20 74 68 69 73 20 63 6f 6e 66 6c 69 63 74 20  n this conflict 
8470: 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20  handling.policy 
8480: 69 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e  is used instead.
8490: 3c 2f 70 3e 0a 0a 3c 70 3e 54 72 69 67 67 65 72  </p>..<p>Trigger
84a0: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
84b0: 6c 6c 79 20 64 72 6f 70 70 65 64 20 77 68 65 6e  lly dropped when
84c0: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
84d0: 74 68 65 79 20 61 72 65 20 0a 61 73 73 6f 63 69  they are .associ
84e0: 61 74 65 64 20 77 69 74 68 20 69 73 20 64 72 6f  ated with is dro
84f0: 70 70 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  pped.</p>..<tcl>
8500: 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 73 74  hd_fragment inst
8510: 65 61 64 5f 6f 66 5f 74 72 69 67 67 65 72 20 7b  ead_of_trigger {
8520: 49 4e 53 54 45 41 44 20 4f 46 7d 20 7b 49 4e 53  INSTEAD OF} {INS
8530: 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 7d  TEAD OF trigger}
8540: 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 72 69 67 67 65  </tcl>.<p>Trigge
8550: 72 73 20 6d 61 79 20 62 65 20 63 72 65 61 74 65  rs may be create
8560: 64 20 6f 6e 20 5b 76 69 65 77 73 5d 2c 20 61 73  d on [views], as
8570: 20 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e 61 72   well as ordinar
8580: 79 20 74 61 62 6c 65 73 2c 20 62 79 0a 73 70 65  y tables, by.spe
8590: 63 69 66 79 69 6e 67 20 49 4e 53 54 45 41 44 20  cifying INSTEAD 
85a0: 4f 46 20 69 6e 20 74 68 65 20 43 52 45 41 54 45  OF in the CREATE
85b0: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
85c0: 6e 74 2e 20 0a 49 66 20 6f 6e 65 20 6f 72 20 6d  nt. .If one or m
85d0: 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f  ore ON INSERT, O
85e0: 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55  N DELETE.or ON U
85f0: 50 44 41 54 45 20 74 72 69 67 67 65 72 73 20 61  PDATE triggers a
8600: 72 65 20 64 65 66 69 6e 65 64 20 6f 6e 20 61 20  re defined on a 
8610: 76 69 65 77 2c 20 74 68 65 6e 20 69 74 20 69 73  view, then it is
8620: 20 6e 6f 74 20 61 6e 0a 65 72 72 6f 72 20 74 6f   not an.error to
8630: 20 65 78 65 63 75 74 65 20 61 6e 20 49 4e 53 45   execute an INSE
8640: 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50  RT, DELETE or UP
8650: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 6f  DATE statement o
8660: 6e 20 74 68 65 20 76 69 65 77 2c 20 0a 72 65 73  n the view, .res
8670: 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 72 65  pectively. There
8680: 61 66 74 65 72 2c 0a 65 78 65 63 75 74 69 6e 67  after,.executing
8690: 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
86a0: 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 6e 20  TE or UPDATE on 
86b0: 74 68 65 20 76 69 65 77 20 63 61 75 73 65 73 20  the view causes 
86c0: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 74  the associated.t
86d0: 72 69 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e  riggers to fire.
86e0: 20 54 68 65 20 72 65 61 6c 20 74 61 62 6c 65 73   The real tables
86f0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 68 65 20   underlying the 
8700: 76 69 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64  view are not mod
8710: 69 66 69 65 64 0a 28 65 78 63 65 70 74 20 70 6f  ified.(except po
8720: 73 73 69 62 6c 79 20 65 78 70 6c 69 63 69 74 6c  ssibly explicitl
8730: 79 2c 20 62 79 20 61 20 74 72 69 67 67 65 72 20  y, by a trigger 
8740: 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c  program).</p>..<
8750: 70 3e 3c 62 3e 45 78 61 6d 70 6c 65 3a 3c 2f 62  p><b>Example:</b
8760: 3e 3c 2f 70 3e 0a 0a 3c 70 3e 41 73 73 75 6d 69  ></p>..<p>Assumi
8770: 6e 67 20 74 68 61 74 20 63 75 73 74 6f 6d 65 72  ng that customer
8780: 20 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f   records are sto
8790: 72 65 64 20 69 6e 20 74 68 65 20 22 63 75 73 74  red in the "cust
87a0: 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c 20 61 6e  omers" table, an
87b0: 64 0a 74 68 61 74 20 6f 72 64 65 72 20 72 65 63  d.that order rec
87c0: 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20  ords are stored 
87d0: 69 6e 20 74 68 65 20 22 6f 72 64 65 72 73 22 20  in the "orders" 
87e0: 74 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f  table, the follo
87f0: 77 69 6e 67 20 74 72 69 67 67 65 72 0a 65 6e 73  wing trigger.ens
8800: 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20 61 73  ures that all as
8810: 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72 73 20  sociated orders 
8820: 61 72 65 20 72 65 64 69 72 65 63 74 65 64 20 77  are redirected w
8830: 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72 20 63  hen a customer c
8840: 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20 68 65  hanges.his or he
8850: 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a 0a  r address:</p>..
8860: 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43  <tcl>Example {.C
8870: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 75 70  REATE TRIGGER up
8880: 64 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61 64  date_customer_ad
8890: 64 72 65 73 73 20 55 50 44 41 54 45 20 4f 46 20  dress UPDATE OF 
88a0: 61 64 64 72 65 73 73 20 4f 4e 20 63 75 73 74 6f  address ON custo
88b0: 6d 65 72 73 20 0a 20 20 42 45 47 49 4e 0a 20 20  mers .  BEGIN.  
88c0: 20 20 55 50 44 41 54 45 20 6f 72 64 65 72 73 20    UPDATE orders 
88d0: 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 6e 65  SET address = ne
88e0: 77 2e 61 64 64 72 65 73 73 20 57 48 45 52 45 20  w.address WHERE 
88f0: 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20  customer_name = 
8900: 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b  old.name;.  END;
8910: 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74  .}</tcl>..<p>Wit
8920: 68 20 74 68 69 73 20 74 72 69 67 67 65 72 20 69  h this trigger i
8930: 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65 63 75 74  nstalled, execut
8940: 69 6e 67 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ing the statemen
8950: 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61  t:</p>..<tcl>Exa
8960: 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75  mple {.UPDATE cu
8970: 73 74 6f 6d 65 72 73 20 53 45 54 20 61 64 64 72  stomers SET addr
8980: 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74  ess = '1 Main St
8990: 2e 27 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20  .' WHERE name = 
89a0: 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c  'Jack Jones';.}<
89b0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73 65 73  /tcl>..<p>causes
89c0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
89d0: 6f 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c  o be automatical
89e0: 6c 79 20 65 78 65 63 75 74 65 64 3a 3c 2f 70 3e  ly executed:</p>
89f0: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
8a00: 0a 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53  .UPDATE orders S
8a10: 45 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20  ET address = '1 
8a20: 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20  Main St.' WHERE 
8a30: 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20  customer_name = 
8a40: 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c  'Jack Jones';.}<
8a50: 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74  /tcl>..<p>Note t
8a60: 68 61 74 20 63 75 72 72 65 6e 74 6c 79 2c 20 74  hat currently, t
8a70: 72 69 67 67 65 72 73 20 6d 61 79 20 62 65 68 61  riggers may beha
8a80: 76 65 20 6f 64 64 6c 79 20 77 68 65 6e 20 63 72  ve oddly when cr
8a90: 65 61 74 65 64 20 6f 6e 20 74 61 62 6c 65 73 0a  eated on tables.
8aa0: 20 20 77 69 74 68 20 5b 49 4e 54 45 47 45 52 20    with [INTEGER 
8ab0: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 66 69 65  PRIMARY KEY] fie
8ac0: 6c 64 73 2e 20 49 66 20 61 20 42 45 46 4f 52 45  lds. If a BEFORE
8ad0: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
8ae0: 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 0a 20   modifies the . 
8af0: 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
8b00: 59 20 4b 45 59 5d 20 66 69 65 6c 64 20 6f 66 20  Y KEY] field of 
8b10: 61 20 72 6f 77 20 74 68 61 74 20 77 69 6c 6c 20  a row that will 
8b20: 62 65 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20  be subsequently 
8b30: 75 70 64 61 74 65 64 20 62 79 20 74 68 65 0a 20  updated by the. 
8b40: 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
8b50: 63 61 75 73 65 73 20 74 68 65 20 74 72 69 67 67  causes the trigg
8b60: 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68 65 6e  er to fire, then
8b70: 20 74 68 65 20 75 70 64 61 74 65 20 6d 61 79 20   the update may 
8b80: 6e 6f 74 20 6f 63 63 75 72 2e 20 0a 20 20 54 68  not occur. .  Th
8b90: 65 20 77 6f 72 6b 61 72 6f 75 6e 64 20 69 73 20  e workaround is 
8ba0: 74 6f 20 64 65 63 6c 61 72 65 20 74 68 65 20 74  to declare the t
8bb0: 61 62 6c 65 20 77 69 74 68 20 61 20 50 52 49 4d  able with a PRIM
8bc0: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 69  ARY KEY column i
8bd0: 6e 73 74 65 61 64 0a 20 20 6f 66 20 61 6e 20 5b  nstead.  of an [
8be0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
8bf0: 4b 45 59 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e  KEY] column.</p>
8c00: 0a 0a 3c 70 3e 41 20 73 70 65 63 69 61 6c 20 53  ..<p>A special S
8c10: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 52 41 49 53  QL function RAIS
8c20: 45 28 29 20 6d 61 79 20 62 65 20 75 73 65 64 20  E() may be used 
8c30: 77 69 74 68 69 6e 20 61 20 74 72 69 67 67 65 72  within a trigger
8c40: 2d 70 72 6f 67 72 61 6d 2c 0a 77 69 74 68 20 74  -program,.with t
8c50: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e  he following syn
8c60: 74 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63 6c 3e 42  tax</p> ..<tcl>B
8c70: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 61 69  ubbleDiagram rai
8c80: 73 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f 74 63 6c  se-function</tcl
8c90: 3e 0a 0a 3c 70 3e 57 68 65 6e 20 6f 6e 65 20 6f  >..<p>When one o
8ca0: 66 20 74 68 65 20 66 69 72 73 74 20 74 68 72 65  f the first thre
8cb0: 65 20 66 6f 72 6d 73 20 69 73 20 63 61 6c 6c 65  e forms is calle
8cc0: 64 20 64 75 72 69 6e 67 20 74 72 69 67 67 65 72  d during trigger
8cd0: 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63 75 74 69  -program.executi
8ce0: 6f 6e 2c 20 74 68 65 20 73 70 65 63 69 66 69 65  on, the specifie
8cf0: 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  d [ON CONFLICT] 
8d00: 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70 65  processing is pe
8d10: 72 66 6f 72 6d 65 64 0a 28 65 69 74 68 65 72 20  rformed.(either 
8d20: 41 42 4f 52 54 2c 20 46 41 49 4c 20 6f 72 20 52  ABORT, FAIL or R
8d30: 4f 4c 4c 42 41 43 4b 29 20 61 6e 64 20 74 68 65  OLLBACK) and the
8d40: 20 63 75 72 72 65 6e 74 20 71 75 65 72 79 20 74   current query t
8d50: 65 72 6d 69 6e 61 74 65 73 2e 0a 41 6e 20 65 72  erminates..An er
8d60: 72 6f 72 20 63 6f 64 65 20 6f 66 20 5b 53 51 4c  ror code of [SQL
8d70: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5d 20  ITE_CONSTRAINT] 
8d80: 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  is returned to t
8d90: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2c 0a  he application,.
8da0: 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 65 20 73  along with the s
8db0: 70 65 63 69 66 69 65 64 20 65 72 72 6f 72 20 6d  pecified error m
8dc0: 65 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  essage.</p>..<p>
8dd0: 57 68 65 6e 20 52 41 49 53 45 28 49 47 4e 4f 52  When RAISE(IGNOR
8de0: 45 29 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68  E) is called, th
8df0: 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74  e remainder of t
8e00: 68 65 20 63 75 72 72 65 6e 74 20 74 72 69 67 67  he current trigg
8e10: 65 72 20 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20  er program,.the 
8e20: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63  statement that c
8e30: 61 75 73 65 64 20 74 68 65 20 74 72 69 67 67 65  aused the trigge
8e40: 72 20 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65  r program to exe
8e50: 63 75 74 65 20 61 6e 64 20 61 6e 79 20 73 75 62  cute and any sub
8e60: 73 65 71 75 65 6e 74 0a 74 72 69 67 67 65 72 20  sequent.trigger 
8e70: 70 72 6f 67 72 61 6d 73 20 74 68 61 74 20 77 6f  programs that wo
8e80: 75 6c 64 20 6f 66 20 62 65 65 6e 20 65 78 65 63  uld of been exec
8e90: 75 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e  uted are abandon
8ea0: 65 64 2e 20 4e 6f 20 64 61 74 61 62 61 73 65 0a  ed. No database.
8eb0: 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f 6c 6c  changes are roll
8ec0: 65 64 20 62 61 63 6b 2e 20 20 49 66 20 74 68 65  ed back.  If the
8ed0: 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
8ee0: 63 61 75 73 65 64 20 74 68 65 20 74 72 69 67 67  caused the trigg
8ef0: 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20 65 78  er program.to ex
8f00: 65 63 75 74 65 20 69 73 20 69 74 73 65 6c 66 20  ecute is itself 
8f10: 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
8f20: 72 20 70 72 6f 67 72 61 6d 2c 20 74 68 65 6e 20  r program, then 
8f30: 74 68 61 74 20 74 72 69 67 67 65 72 20 70 72 6f  that trigger pro
8f40: 67 72 61 6d 0a 72 65 73 75 6d 65 73 20 65 78 65  gram.resumes exe
8f50: 63 75 74 69 6f 6e 20 61 74 20 74 68 65 20 62 65  cution at the be
8f60: 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 6e  ginning of the n
8f70: 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a  ext step..</p>..
8f80: 3c 70 3e 54 72 69 67 67 65 72 73 20 61 72 65 20  <p>Triggers are 
8f90: 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68  removed using th
8fa0: 65 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d  e [DROP TRIGGER]
8fb0: 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a   statement.</p>.
8fc0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
8fd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8fe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8ff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9010: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
9020: 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20 7b 63  {CREATE VIEW} {c
9030: 72 65 61 74 65 76 69 65 77 7d 20 7b 7b 43 52 45  reateview} {{CRE
9040: 41 54 45 20 56 49 45 57 7d 20 76 69 65 77 20 76  ATE VIEW} view v
9050: 69 65 77 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61  iews}..BubbleDia
9060: 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69 65 77  gram create-view
9070: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
9080: 3c 70 3e 54 68 65 20 43 52 45 41 54 45 20 56 49  <p>The CREATE VI
9090: 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69 67  EW command assig
90a0: 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20 70  ns a name to a p
90b0: 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 3c 61 20  re-packaged .<a 
90c0: 68 72 65 66 3d 22 6c 61 6e 67 5f 73 65 6c 65 63  href="lang_selec
90d0: 74 2e 68 74 6d 6c 22 3e 53 45 4c 45 43 54 3c 2f  t.html">SELECT</
90e0: 61 3e 0a 73 74 61 74 65 6d 65 6e 74 2e 20 20 4f  a>.statement.  O
90f0: 6e 63 65 20 74 68 65 20 76 69 65 77 20 69 73 20  nce the view is 
9100: 63 72 65 61 74 65 64 2c 20 69 74 20 63 61 6e 20  created, it can 
9110: 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 46  be used in the F
9120: 52 4f 4d 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e  ROM clause.of an
9130: 6f 74 68 65 72 20 5b 53 45 4c 45 43 54 5d 20 69  other [SELECT] i
9140: 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
9150: 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c  le name..</p>..<
9160: 70 3e 49 66 20 74 68 65 20 22 54 45 4d 50 22 20  p>If the "TEMP" 
9170: 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20 6b  or "TEMPORARY" k
9180: 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20 69 6e  eyword occurs in
9190: 20 62 65 74 77 65 65 6e 20 22 43 52 45 41 54 45   between "CREATE
91a0: 22 0a 61 6e 64 20 22 56 49 45 57 22 20 74 68 65  ".and "VIEW" the
91b0: 6e 20 74 68 65 20 76 69 65 77 20 74 68 61 74 20  n the view that 
91c0: 69 73 20 63 72 65 61 74 65 64 20 69 73 20 6f 6e  is created is on
91d0: 6c 79 20 76 69 73 69 62 6c 65 20 74 6f 20 74 68  ly visible to th
91e0: 65 0a 70 72 6f 63 65 73 73 20 74 68 61 74 20 6f  e.process that o
91f0: 70 65 6e 65 64 20 74 68 65 20 64 61 74 61 62 61  pened the databa
9200: 73 65 20 61 6e 64 20 69 73 20 61 75 74 6f 6d 61  se and is automa
9210: 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 20  tically deleted 
9220: 77 68 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73  when.the databas
9230: 65 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 70 3e  e is closed.</p>
9240: 0a 0a 3c 70 3e 20 49 66 20 61 20 26 6c 74 3b 64  ..<p> If a &lt;d
9250: 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b  atabase-name&gt;
9260: 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74   is specified, t
9270: 68 65 6e 20 74 68 65 20 76 69 65 77 20 69 73 20  hen the view is 
9280: 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68 65 20  created in .the 
9290: 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  named database. 
92a0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  It is an error t
92b0: 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68 20 61  o specify both a
92c0: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
92d0: 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68 65 20 54  me&gt;.and the T
92e0: 45 4d 50 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c  EMP keyword, unl
92f0: 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61 74 61  ess the &lt;data
9300: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73  base-name&gt; is
9310: 20 22 74 65 6d 70 22 2e 20 49 66 20 6e 6f 0a 64   "temp". If no.d
9320: 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20  atabase name is 
9330: 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64 20 74  specified, and t
9340: 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20  he TEMP keyword 
9350: 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 0a  is not present,.
9360: 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 72 65  the table is cre
9370: 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e  ated in the main
9380: 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a   database.</p>..
9390: 3c 70 3e 59 6f 75 20 63 61 6e 6e 6f 74 20 5b 44  <p>You cannot [D
93a0: 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d  ELETE], [INSERT]
93b0: 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 20  , or [UPDATE] a 
93c0: 76 69 65 77 2e 20 20 56 69 65 77 73 20 61 72 65  view.  Views are
93d0: 20 72 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53   read-only .in S
93e0: 51 4c 69 74 65 2e 20 20 48 6f 77 65 76 65 72 2c  QLite.  However,
93f0: 20 69 6e 20 6d 61 6e 79 20 63 61 73 65 73 20 79   in many cases y
9400: 6f 75 20 63 61 6e 20 75 73 65 20 61 6e 0a 5b 49  ou can use an.[I
9410: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
9420: 72 5d 20 6f 6e 20 74 68 65 20 76 69 65 77 20 74  r] on the view t
9430: 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20 0a 74 68  o accomplish .th
9440: 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 56  e same thing.  V
9450: 69 65 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  iews are removed
9460: 20 0a 77 69 74 68 20 74 68 65 20 5b 44 52 4f 50   .with the [DROP
9470: 20 56 49 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e 3c   VIEW] command.<
9480: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
9490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
94a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
94b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
94c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
94d0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
94e0: 6e 20 7b 43 52 45 41 54 45 20 56 49 52 54 55 41  n {CREATE VIRTUA
94f0: 4c 20 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65  L TABLE} {create
9500: 76 74 61 62 7d 20 7b 7b 43 52 45 41 54 45 20 56  vtab} {{CREATE V
9510: 49 52 54 55 41 4c 5f 54 41 42 4c 45 7d 7d 0a 0a  IRTUAL_TABLE}}..
9520: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72  BubbleDiagram cr
9530: 65 61 74 65 2d 76 69 72 74 75 61 6c 2d 74 61 62  eate-virtual-tab
9540: 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  le-stmt 1.</tcl>
9550: 0a 0a 3c 70 3e 41 20 76 69 72 74 75 61 6c 20 74  ..<p>A virtual t
9560: 61 62 6c 65 20 69 73 20 61 6e 20 69 6e 74 65 72  able is an inter
9570: 66 61 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72  face to an exter
9580: 6e 61 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63  nal storage or c
9590: 6f 6d 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e  omputation.engin
95a0: 65 20 74 68 61 74 20 61 70 70 65 61 72 73 20 74  e that appears t
95b0: 6f 20 62 65 20 61 20 74 61 62 6c 65 20 62 75 74  o be a table but
95c0: 20 64 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c   does not actual
95d0: 6c 79 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61  ly store informa
95e0: 74 69 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61  tion.in the data
95f0: 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
9600: 3c 70 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79  <p>In general, y
9610: 6f 75 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69  ou can do anythi
9620: 6e 67 20 77 69 74 68 20 61 20 76 69 72 74 75 61  ng with a virtua
9630: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 63 61 6e  l table that can
9640: 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e   be done.with an
9650: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 2c   ordinary table,
9660: 20 65 78 63 65 70 74 20 74 68 61 74 20 79 6f 75   except that you
9670: 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 69   cannot create i
9680: 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67 67 65  ndices or trigge
9690: 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c 20  rs on a.virtual 
96a0: 74 61 62 6c 65 2e 20 20 53 6f 6d 65 20 76 69 72  table.  Some vir
96b0: 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
96c0: 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74  mentations might
96d0: 20 69 6d 70 6f 73 65 20 61 64 64 69 74 69 6f 6e   impose addition
96e0: 61 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e 73 2e  al.restrictions.
96f0: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 6d    For example, m
9700: 61 6e 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c  any virtual tabl
9710: 65 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79  es are read-only
9720: 2e 0a 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  ..Virtual tables
9730: 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20   cannot be used 
9740: 69 6e 0a 5b 73 71 6c 69 74 65 33 5f 65 6e 61 62  in.[sqlite3_enab
9750: 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 20  le_shared_cache 
9760: 7c 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  | shared cache m
9770: 6f 64 65 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ode].</p>..<p>Th
9780: 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d  e &lt;module-nam
9790: 65 26 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d  e&gt; is the nam
97a0: 65 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74  e of an object t
97b0: 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74  hat implements.t
97c0: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
97d0: 2e 20 20 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c  .  The &lt;modul
97e0: 65 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74 20  e-name&gt; must 
97f0: 62 65 20 72 65 67 69 73 74 65 72 65 64 20 77 69  be registered wi
9800: 74 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61  th.the SQLite da
9810: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
9820: 6e 20 75 73 69 6e 67 0a 73 71 6c 69 74 65 33 5f  n using.sqlite3_
9830: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 0a  create_module().
9840: 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69 6e 67  prior to issuing
9850: 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54   the CREATE VIRT
9860: 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d  UAL TABLE statem
9870: 65 6e 74 2e 0a 54 68 65 20 6d 6f 64 75 6c 65 20  ent..The module 
9880: 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f  takes zero or mo
9890: 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74  re comma-separat
98a0: 65 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a 54 68  ed arguments..Th
98b0: 65 20 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20  e arguments can 
98c0: 62 65 20 6a 75 73 74 20 61 62 6f 75 74 20 61 6e  be just about an
98d0: 79 20 74 65 78 74 20 61 73 20 6c 6f 6e 67 20 61  y text as long a
98e0: 73 20 69 74 20 68 61 73 20 62 61 6c 61 6e 63 65  s it has balance
98f0: 64 0a 70 61 72 65 6e 74 68 65 73 65 73 2e 20 20  d.parentheses.  
9900: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 73 79 6e  The argument syn
9910: 74 61 78 20 69 73 20 73 75 66 66 69 63 69 65 6e  tax is sufficien
9920: 74 6c 79 20 67 65 6e 65 72 61 6c 20 74 68 61 74  tly general that
9930: 20 74 68 65 0a 61 72 67 75 6d 65 6e 74 73 20 63   the.arguments c
9940: 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 61 70  an be made to ap
9950: 70 65 61 72 20 61 73 20 63 6f 6c 75 6d 6e 20 64  pear as column d
9960: 65 66 69 6e 69 74 69 6f 6e 73 20 69 6e 20 61 20  efinitions in a 
9970: 74 72 61 64 69 74 69 6f 6e 61 6c 0a 5b 43 52 45  traditional.[CRE
9980: 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
9990: 6d 65 6e 74 2e 20 20 0a 53 51 4c 69 74 65 20 70  ment.  .SQLite p
99a0: 61 73 73 65 73 20 74 68 65 20 6d 6f 64 75 6c 65  asses the module
99b0: 20 61 72 67 75 6d 65 6e 74 73 20 64 69 72 65 63   arguments direc
99c0: 74 6c 79 0a 74 6f 20 74 68 65 20 6d 6f 64 75 6c  tly.to the modul
99d0: 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e  e without any in
99e0: 74 65 72 70 72 65 74 61 74 69 6f 6e 2e 20 20 49  terpretation.  I
99f0: 74 20 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73  t is the respons
9a00: 69 62 69 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d  ibility.of the m
9a10: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
9a20: 74 69 6f 6e 20 74 6f 20 70 61 72 73 65 20 61 6e  tion to parse an
9a30: 64 20 69 6e 74 65 72 70 72 65 74 20 69 74 73 20  d interpret its 
9a40: 6f 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f  own arguments.</
9a50: 70 3e 0a 0a 3c 70 3e 41 20 76 69 72 74 75 61 6c  p>..<p>A virtual
9a60: 20 74 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f   table is destro
9a70: 79 65 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72  yed using the or
9a80: 64 69 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42  dinary.[DROP TAB
9a90: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
9aa0: 54 68 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50  There is no.DROP
9ab0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73   VIRTUAL TABLE s
9ac0: 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c  tatement.</p>..<
9ad0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
9ae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9af0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9b00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9b10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9b20: 23 23 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45  ###.Section DELE
9b30: 54 45 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54  TE delete {DELET
9b40: 45 20 44 45 4c 45 54 45 73 7d 0a 0a 42 75 62 62  E DELETEs}..Bubb
9b50: 6c 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65  leDiagram delete
9b60: 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69  -stmt 1.BubbleDi
9b70: 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d  agram qualified-
9b80: 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c  table-name.</tcl
9b90: 3e 0a 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54 45  >..<p>The DELETE
9ba0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64   command is used
9bb0: 20 74 6f 20 72 65 6d 6f 76 65 20 72 65 63 6f 72   to remove recor
9bc0: 64 73 20 66 72 6f 6d 20 61 20 74 61 62 6c 65 2e  ds from a table.
9bd0: 0a 54 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e  .The command con
9be0: 73 69 73 74 73 20 6f 66 20 74 68 65 20 22 44 45  sists of the "DE
9bf0: 4c 45 54 45 20 46 52 4f 4d 22 20 6b 65 79 77 6f  LETE FROM" keywo
9c00: 72 64 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a  rds followed by.
9c10: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
9c20: 74 61 62 6c 65 20 66 72 6f 6d 20 77 68 69 63 68  table from which
9c30: 20 72 65 63 6f 72 64 73 20 61 72 65 20 74 6f 20   records are to 
9c40: 62 65 20 72 65 6d 6f 76 65 64 2e 0a 3c 2f 70 3e  be removed..</p>
9c50: 0a 0a 3c 70 3e 57 69 74 68 6f 75 74 20 61 20 57  ..<p>Without a W
9c60: 48 45 52 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c  HERE clause, all
9c70: 20 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62   rows of the tab
9c80: 6c 65 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a  le are removed..
9c90: 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  If a WHERE claus
9ca0: 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74  e is supplied, t
9cb0: 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72  hen only those r
9cc0: 6f 77 73 20 74 68 61 74 20 6d 61 74 63 68 0a 74  ows that match.t
9cd0: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 72  he expression ar
9ce0: 65 20 72 65 6d 6f 76 65 64 2e 3c 2f 70 3e 0a 0a  e removed.</p>..
9cf0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
9d00: 20 74 72 75 63 61 74 65 6f 70 74 20 7b 74 72 75   trucateopt {tru
9d10: 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
9d20: 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 57 68 65  on}</tcl>.<p>Whe
9d30: 6e 20 74 68 65 20 57 48 45 52 45 20 69 73 20 6f  n the WHERE is o
9d40: 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20 44 45  mitted from a DE
9d50: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  LETE statement a
9d60: 6e 64 20 74 68 65 20 74 61 62 6c 65 0a 62 65 69  nd the table.bei
9d70: 6e 67 20 64 65 6c 65 74 65 64 20 68 61 73 20 6e  ng deleted has n
9d80: 6f 20 74 72 69 67 67 65 72 73 2c 0a 53 51 4c 69  o triggers,.SQLi
9d90: 74 65 20 75 73 65 73 20 61 6e 20 6f 70 74 69 6d  te uses an optim
9da0: 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72 61 73 65  ization to erase
9db0: 20 74 68 65 20 65 6e 74 69 72 65 20 74 61 62 6c   the entire tabl
9dc0: 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74 68 6f 75  e content.withou
9dd0: 74 20 68 61 76 69 6e 67 20 74 6f 20 76 69 73 69  t having to visi
9de0: 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68  t each row of th
9df0: 65 20 74 61 62 6c 65 20 69 6e 64 69 76 69 64 75  e table individu
9e00: 61 6c 2e 0a 54 68 69 73 20 22 74 72 75 6e 63 61  al..This "trunca
9e10: 74 65 22 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  te" optimization
9e20: 20 6d 61 6b 65 73 20 74 68 65 20 64 65 6c 65 74   makes the delet
9e30: 65 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74 65  e run much faste
9e40: 72 2e 0a 50 72 69 6f 72 20 74 6f 20 53 51 4c 69  r..Prior to SQLi
9e50: 74 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e  te [version 3.6.
9e60: 35 5d 2c 20 74 68 65 20 74 72 75 6e 63 61 74 65  5], the truncate
9e70: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 61 6c   optimization.al
9e80: 73 6f 20 6d 65 61 6e 74 20 74 68 61 74 20 74 68  so meant that th
9e90: 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  e [sqlite3_chang
9ea0: 65 73 28 29 5d 20 61 6e 64 0a 5b 73 71 6c 69 74  es()] and.[sqlit
9eb0: 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
9ec0: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73 0a 61  ()] interfaces.a
9ed0: 6e 64 20 74 68 65 20 5b 63 6f 75 6e 74 5f 63 68  nd the [count_ch
9ee0: 61 6e 67 65 73 20 70 72 61 67 6d 61 5d 0a 77 69  anges pragma].wi
9ef0: 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  ll not actually 
9f00: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
9f10: 72 20 6f 66 20 64 65 6c 65 74 65 64 20 72 6f 77  r of deleted row
9f20: 73 2e 20 20 0a 54 68 61 74 20 70 72 6f 62 6c 65  s.  .That proble
9f30: 6d 20 68 61 73 20 62 65 65 6e 20 66 69 78 65 64  m has been fixed
9f40: 20 61 73 20 6f 66 20 5b 76 65 72 73 69 6f 6e 20   as of [version 
9f50: 33 2e 36 2e 35 5d 2e 0a 0a 3c 70 3e 54 68 65 20  3.6.5]...<p>The 
9f60: 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
9f70: 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 64 69 73  ation can be dis
9f80: 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71 75  abled for all qu
9f90: 65 72 69 65 73 20 62 79 20 72 65 63 6f 6d 70 69  eries by recompi
9fa0: 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69 74 68  ling.SQLite with
9fb0: 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d 49   the [SQLITE_OMI
9fc0: 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54 49 4d  T_TRUNCATE_OPTIM
9fd0: 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c 65  IZATION] compile
9fe0: 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f 70  -time switch.</p
9ff0: 3e 0a 0a 3c 70 3e 49 66 20 53 51 4c 69 74 65 20  >..<p>If SQLite 
a000: 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  is compiled with
a010: 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41   the [SQLITE_ENA
a020: 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
a030: 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65  E_LIMIT].compile
a040: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68  -time option, th
a050: 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66  en the syntax of
a060: 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
a070: 65 6d 65 6e 74 20 69 73 0a 65 78 74 65 6e 64 65  ement is.extende
a080: 64 20 62 79 20 74 68 65 20 61 64 64 69 74 69 6f  d by the additio
a090: 6e 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20 4f 52  n of optional OR
a0a0: 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54  DER BY and LIMIT
a0b0: 20 63 6c 61 75 73 65 73 3a 3c 2f 70 3e 0a 0a 3c   clauses:</p>..<
a0c0: 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61  tcl>BubbleDiagra
a0d0: 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 2d 6c 69  m delete-stmt-li
a0e0: 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mited</tcl>..<p>
a0f0: 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4c 49 4d  The optional LIM
a100: 49 54 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65  IT clause can be
a110: 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74   used to limit t
a120: 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77  he number of.row
a130: 73 20 64 65 6c 65 74 65 64 2c 20 61 6e 64 20 74  s deleted, and t
a140: 68 65 72 65 62 79 20 6c 69 6d 69 74 20 74 68 65  hereby limit the
a150: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 74 72 61   size of the tra
a160: 6e 73 61 63 74 69 6f 6e 2e 0a 54 68 65 20 4f 52  nsaction..The OR
a170: 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
a180: 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65   used only to de
a190: 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20 72 6f  termine which ro
a1a0: 77 73 20 66 61 6c 6c 0a 77 69 74 68 69 6e 20 74  ws fall.within t
a1b0: 68 65 20 4c 49 4d 49 54 2e 20 20 54 68 65 20 6f  he LIMIT.  The o
a1c0: 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
a1d0: 77 73 20 61 72 65 20 64 65 6c 65 74 65 64 20 69  ws are deleted i
a1e0: 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20  s arbitrary.and 
a1f0: 69 73 20 6e 6f 74 20 64 65 74 65 72 6d 69 6e 65  is not determine
a200: 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42  d by the ORDER B
a210: 59 20 63 6c 61 75 73 65 2e 3c 2f 70 3e 0a 0a 3c  Y clause.</p>..<
a220: 70 3e 54 68 65 20 70 72 65 73 65 6e 63 65 20 6f  p>The presence o
a230: 66 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  f a LIMIT clause
a240: 20 64 65 66 65 61 74 73 20 74 68 65 20 74 72 75   defeats the tru
a250: 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
a260: 6f 6e 0a 63 61 75 73 69 6e 67 20 61 6c 6c 20 72  on.causing all r
a270: 6f 77 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65  ows being delete
a280: 64 20 74 6f 20 62 65 20 76 69 73 69 74 65 64 2e  d to be visited.
a290: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
a2a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a2b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a2c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a2d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a2e0: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
a2f0: 69 6f 6e 20 7b 44 45 54 41 43 48 20 44 41 54 41  ion {DETACH DATA
a300: 42 41 53 45 7d 20 64 65 74 61 63 68 20 44 45 54  BASE} detach DET
a310: 41 43 48 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  ACH..BubbleDiagr
a320: 61 6d 20 64 65 74 61 63 68 2d 73 74 6d 74 20 31  am detach-stmt 1
a330: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73  .</tcl>..<p>This
a340: 20 73 74 61 74 65 6d 65 6e 74 20 64 65 74 61 63   statement detac
a350: 68 65 73 20 61 6e 20 61 64 64 69 74 69 6f 6e 61  hes an additiona
a360: 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  l database conne
a370: 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79  ction previously
a380: 20 0a 61 74 74 61 63 68 65 64 20 75 73 69 6e 67   .attached using
a390: 20 74 68 65 20 5b 41 54 54 41 43 48 5d 20 73 74   the [ATTACH] st
a3a0: 61 74 65 6d 65 6e 74 2e 20 20 0a 49 74 20 69 73  atement.  .It is
a3b0: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76   possible to hav
a3c0: 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  e the same datab
a3d0: 61 73 65 20 66 69 6c 65 20 61 74 74 61 63 68 65  ase file attache
a3e0: 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  d multiple times
a3f0: 20 75 73 69 6e 67 20 0a 64 69 66 66 65 72 65 6e   using .differen
a400: 74 20 6e 61 6d 65 73 2c 20 61 6e 64 20 64 65 74  t names, and det
a410: 61 63 68 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65  aching one conne
a420: 63 74 69 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20  ction to a file 
a430: 77 69 6c 6c 20 6c 65 61 76 65 20 74 68 65 20 0a  will leave the .
a440: 6f 74 68 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f  others intact.</
a450: 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 74 61 74  p>..<p>This stat
a460: 65 6d 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20  ement will fail 
a470: 69 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20  if SQLite is in 
a480: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20  the middle of a 
a490: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e  transaction.</p>
a4a0: 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
a4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a4c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a4f0: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
a500: 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f  {DROP INDEX} dro
a510: 70 69 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e  pindex {{DROP IN
a520: 44 45 58 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  DEX}}..BubbleDia
a530: 67 72 61 6d 20 64 72 6f 70 2d 69 6e 64 65 78 2d  gram drop-index-
a540: 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
a550: 70 3e 54 68 65 20 44 52 4f 50 20 49 4e 44 45 58  p>The DROP INDEX
a560: 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76   statement remov
a570: 65 73 20 61 6e 20 69 6e 64 65 78 20 61 64 64 65  es an index adde
a580: 64 0a 77 69 74 68 20 74 68 65 20 5b 43 52 45 41  d.with the [CREA
a590: 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d  TE INDEX] statem
a5a0: 65 6e 74 2e 20 20 54 68 65 20 69 6e 64 65 78 20  ent.  The index 
a5b0: 6e 61 6d 65 64 20 69 73 20 63 6f 6d 70 6c 65 74  named is complet
a5c0: 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  ely removed from
a5d0: 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65 20  .the disk.  The 
a5e0: 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63 6f  only way to reco
a5f0: 76 65 72 20 74 68 65 20 69 6e 64 65 78 20 69 73  ver the index is
a600: 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65 0a   to reenter the.
a610: 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43 52 45  appropriate [CRE
a620: 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61  ATE INDEX] comma
a630: 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  nd.</p>..<p>The 
a640: 44 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65  DROP INDEX state
a650: 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 72 65  ment does not re
a660: 64 75 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66  duce the size of
a670: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a 66   the database .f
a680: 69 6c 65 20 69 6e 20 74 68 65 20 64 65 66 61 75  ile in the defau
a690: 6c 74 20 6d 6f 64 65 2e 0a 45 6d 70 74 79 20 73  lt mode..Empty s
a6a0: 70 61 63 65 20 69 6e 20 74 68 65 20 64 61 74 61  pace in the data
a6b0: 62 61 73 65 20 69 73 20 72 65 74 61 69 6e 65 64  base is retained
a6c0: 20 66 6f 72 20 6c 61 74 65 72 20 5b 49 4e 53 45   for later [INSE
a6d0: 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  RT] statements. 
a6e0: 20 54 6f 20 0a 72 65 6d 6f 76 65 20 66 72 65 65   To .remove free
a6f0: 20 73 70 61 63 65 20 69 6e 20 74 68 65 20 64 61   space in the da
a700: 74 61 62 61 73 65 2c 20 75 73 65 20 74 68 65 20  tabase, use the 
a710: 5b 56 41 43 55 55 4d 5d 0a 63 6f 6d 6d 61 6e 64  [VACUUM].command
a720: 2e 20 20 49 66 20 5b 61 75 74 6f 5f 76 61 63 75  .  If [auto_vacu
a730: 75 6d 5d 20 6d 6f 64 65 20 69 73 20 65 6e 61 62  um] mode is enab
a740: 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61  led for a databa
a750: 73 65 20 74 68 65 6e 20 73 70 61 63 65 0a 77 69  se then space.wi
a760: 6c 6c 20 62 65 20 66 72 65 65 64 20 61 75 74 6f  ll be freed auto
a770: 6d 61 74 69 63 61 6c 6c 79 20 62 79 20 44 52 4f  matically by DRO
a780: 50 20 49 4e 44 45 58 2e 3c 2f 70 3e 0a 0a 0a 3c  P INDEX.</p>...<
a790: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
a7a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a7b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a7c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a7e0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f  ###.Section {DRO
a7f0: 50 20 54 41 42 4c 45 7d 20 64 72 6f 70 74 61 62  P TABLE} droptab
a800: 6c 65 20 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d  le {{DROP TABLE}
a810: 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
a820: 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74   drop-table-stmt
a830: 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68   1.</tcl>..<p>Th
a840: 65 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61  e DROP TABLE sta
a850: 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61  tement removes a
a860: 20 74 61 62 6c 65 20 61 64 64 65 64 20 77 69 74   table added wit
a870: 68 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41  h the.[CREATE TA
a880: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
a890: 20 54 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66   The name specif
a8a0: 69 65 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65  ied is the.table
a8b0: 20 6e 61 6d 65 2e 20 20 49 74 20 69 73 20 63 6f   name.  It is co
a8c0: 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64  mpletely removed
a8d0: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
a8e0: 73 65 20 73 63 68 65 6d 61 20 61 6e 64 20 74 68  se schema and th
a8f0: 65 20 0a 64 69 73 6b 20 66 69 6c 65 2e 20 20 54  e .disk file.  T
a900: 68 65 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74  he table can not
a910: 20 62 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20   be recovered.  
a920: 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20  All indices and 
a930: 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
a940: 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
a950: 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65  le are also dele
a960: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ted.</p>..<p>The
a970: 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74   DROP TABLE stat
a980: 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 72  ement does not r
a990: 65 64 75 63 65 20 74 68 65 20 73 69 7a 65 20 6f  educe the size o
a9a0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a  f the database .
a9b0: 66 69 6c 65 20 69 6e 20 74 68 65 20 64 65 66 61  file in the defa
a9c0: 75 6c 74 20 6d 6f 64 65 2e 20 20 45 6d 70 74 79  ult mode.  Empty
a9d0: 20 73 70 61 63 65 20 69 6e 20 74 68 65 20 64 61   space in the da
a9e0: 74 61 62 61 73 65 20 69 73 20 72 65 74 61 69 6e  tabase is retain
a9f0: 65 64 20 66 6f 72 0a 6c 61 74 65 72 20 5b 49 4e  ed for.later [IN
aa00: 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73  SERT] statements
aa10: 2e 20 20 54 6f 20 0a 72 65 6d 6f 76 65 20 66 72  .  To .remove fr
aa20: 65 65 20 73 70 61 63 65 20 69 6e 20 74 68 65 20  ee space in the 
aa30: 64 61 74 61 62 61 73 65 2c 20 0a 75 73 65 20 74  database, .use t
aa40: 68 65 20 5b 56 41 43 55 55 4d 5d 20 73 74 61 74  he [VACUUM] stat
aa50: 65 6d 65 6e 74 2e 0a 49 66 20 5b 61 75 74 6f 5f  ement..If [auto_
aa60: 76 61 63 75 75 6d 5d 20 6d 6f 64 65 20 69 73 20  vacuum] mode is 
aa70: 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61  enabled for a da
aa80: 74 61 62 61 73 65 20 74 68 65 6e 20 73 70 61 63  tabase then spac
aa90: 65 0a 77 69 6c 6c 20 62 65 20 66 72 65 65 64 20  e.will be freed 
aaa0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
aab0: 20 44 52 4f 50 20 54 41 42 4c 45 2e 3c 2f 70 3e   DROP TABLE.</p>
aac0: 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61  ..<p>The optiona
aad0: 6c 20 49 46 20 45 58 49 53 54 53 20 63 6c 61 75  l IF EXISTS clau
aae0: 73 65 20 73 75 70 70 72 65 73 73 65 73 20 74 68  se suppresses th
aaf0: 65 20 65 72 72 6f 72 20 74 68 61 74 20 77 6f 75  e error that wou
ab00: 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75  ld normally.resu
ab10: 6c 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  lt if the table 
ab20: 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c  does not exist.<
ab30: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
ab40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab80: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
ab90: 6e 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d  n {DROP TRIGGER}
aba0: 20 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44   droptrigger {{D
abb0: 52 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 42  ROP TRIGGER}}..B
abc0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
abd0: 70 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 20 31  p-trigger-stmt 1
abe0: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
abf0: 44 52 4f 50 20 54 52 49 47 47 45 52 20 73 74 61  DROP TRIGGER sta
ac00: 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61  tement removes a
ac10: 20 74 72 69 67 67 65 72 20 63 72 65 61 74 65 64   trigger created
ac20: 20 62 79 20 74 68 65 20 0a 5b 43 52 45 41 54 45   by the .[CREATE
ac30: 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
ac40: 65 6e 74 2e 20 20 54 68 65 20 74 72 69 67 67 65  ent.  The trigge
ac50: 72 20 69 73 20 0a 64 65 6c 65 74 65 64 20 66 72  r is .deleted fr
ac60: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
ac70: 73 63 68 65 6d 61 2e 20 4e 6f 74 65 20 74 68 61  schema. Note tha
ac80: 74 20 74 72 69 67 67 65 72 73 20 61 72 65 20 61  t triggers are a
ac90: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 0a 64 72  utomatically .dr
aca0: 6f 70 70 65 64 20 77 68 65 6e 20 74 68 65 20 61  opped when the a
acb0: 73 73 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20  ssociated table 
acc0: 69 73 20 64 72 6f 70 70 65 64 2e 3c 2f 70 3e 0a  is dropped.</p>.
acd0: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
ace0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
acf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ad00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ad10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ad20: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
ad30: 52 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69  ROP VIEW} dropvi
ad40: 65 77 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d  ew {{DROP VIEW}}
ad50: 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
ad60: 64 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 20 31  drop-view-stmt 1
ad70: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
ad80: 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d  DROP VIEW statem
ad90: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69  ent removes a vi
ada0: 65 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68  ew created by th
adb0: 65 0a 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20  e.[CREATE VIEW] 
adc0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
add0: 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64 20 69  name specified i
ade0: 73 20 74 68 65 20 0a 76 69 65 77 20 6e 61 6d 65  s the .view name
adf0: 2e 20 20 49 74 20 69 73 20 72 65 6d 6f 76 65 64  .  It is removed
ae00: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
ae10: 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20 6e  se schema, but n
ae20: 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 0a 69  o actual data .i
ae30: 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  n the underlying
ae40: 20 62 61 73 65 20 74 61 62 6c 65 73 20 69 73 20   base tables is 
ae50: 6d 6f 64 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c  modified.</p>..<
ae60: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
ae70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ae80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ae90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aeb0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 45 58 50 4c  ###.Section EXPL
aec0: 41 49 4e 20 65 78 70 6c 61 69 6e 20 45 58 50 4c  AIN explain EXPL
aed0: 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  AIN..BubbleDiagr
aee0: 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c 2f 74 63  am sql-stmt.</tc
aef0: 6c 3e 0a 0a 3c 70 3e 41 6e 20 53 51 4c 20 73 74  l>..<p>An SQL st
af00: 61 74 65 6d 65 6e 74 20 63 61 6e 20 62 65 20 70  atement can be p
af10: 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20 6b  receded by the k
af20: 65 79 77 6f 72 64 20 22 45 58 50 4c 41 49 4e 22  eyword "EXPLAIN"
af30: 20 6f 72 0a 62 79 20 74 68 65 20 70 68 72 61 73   or.by the phras
af40: 65 20 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59  e "EXPLAIN QUERY
af50: 20 50 4c 41 4e 22 2e 20 20 45 69 74 68 65 72 20   PLAN".  Either 
af60: 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 63 61 75  modification cau
af70: 73 65 73 20 74 68 65 0a 53 51 4c 20 73 74 61 74  ses the.SQL stat
af80: 65 6d 65 6e 74 20 74 6f 20 62 65 68 61 76 65 20  ement to behave 
af90: 61 73 20 61 20 71 75 65 72 79 20 61 6e 64 20 74  as a query and t
afa0: 6f 20 72 65 74 75 72 6e 20 69 6e 66 6f 72 6d 61  o return informa
afb0: 74 69 6f 6e 20 61 62 6f 75 74 0a 68 6f 77 20 74  tion about.how t
afc0: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
afd0: 20 77 6f 75 6c 64 20 68 61 76 65 20 6f 70 65 72   would have oper
afe0: 61 74 65 64 20 69 66 20 74 68 65 20 45 58 50 4c  ated if the EXPL
aff0: 41 49 4e 20 6b 65 79 77 6f 72 64 20 6f 72 0a 70  AIN keyword or.p
b000: 68 72 61 73 65 20 68 61 64 20 62 65 65 6e 20 6f  hrase had been o
b010: 6d 69 74 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mitted.</p>..<p>
b020: 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  When the EXPLAIN
b030: 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72 73   keyword appears
b040: 20 62 79 20 69 74 73 65 6c 66 20 69 74 20 63 61   by itself it ca
b050: 75 73 65 73 20 74 68 65 20 73 74 61 74 65 6d 65  uses the stateme
b060: 6e 74 0a 74 6f 20 62 65 68 61 76 65 20 61 73 20  nt.to behave as 
b070: 61 20 71 75 65 72 79 20 74 68 61 74 20 72 65 74  a query that ret
b080: 75 72 6e 73 20 74 68 65 20 73 65 71 75 65 6e 63  urns the sequenc
b090: 65 20 6f 66 20 0a 3c 61 20 68 72 65 66 3d 22 6f  e of .<a href="o
b0a0: 70 63 6f 64 65 2e 68 74 6d 6c 22 3e 76 69 72 74  pcode.html">virt
b0b0: 75 61 6c 20 6d 61 63 68 69 6e 65 20 69 6e 73 74  ual machine inst
b0c0: 72 75 63 74 69 6f 6e 73 3c 2f 61 3e 20 69 74 20  ructions</a> it 
b0d0: 77 6f 75 6c 64 20 68 61 76 65 0a 75 73 65 64 20  would have.used 
b0e0: 74 6f 20 65 78 65 63 75 74 65 20 74 68 65 20 63  to execute the c
b0f0: 6f 6d 6d 61 6e 64 20 68 61 64 20 74 68 65 20 45  ommand had the E
b100: 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6e  XPLAIN keyword n
b110: 6f 74 20 62 65 65 6e 20 70 72 65 73 65 6e 74 2e  ot been present.
b120: 0a 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49  .When the EXPLAI
b130: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 70 68 72  N QUERY PLAN phr
b140: 61 73 65 20 61 70 70 65 61 72 73 2c 20 74 68 65  ase appears, the
b150: 20 73 74 61 74 65 6d 65 6e 74 20 72 65 74 75 72   statement retur
b160: 6e 73 0a 68 69 67 68 2d 6c 65 76 65 6c 20 69 6e  ns.high-level in
b170: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
b180: 77 68 61 74 20 69 6e 64 69 63 65 73 20 77 6f 75  what indices wou
b190: 6c 64 20 68 61 76 65 20 62 65 65 6e 20 75 73 65  ld have been use
b1a0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f  d.</p>..<p>The o
b1b0: 75 74 70 75 74 20 66 72 6f 6d 20 45 58 50 4c 41  utput from EXPLA
b1c0: 49 4e 20 61 6e 64 20 45 58 50 4c 41 49 4e 20 51  IN and EXPLAIN Q
b1d0: 55 45 52 59 20 50 4c 41 4e 20 69 73 20 69 6e 74  UERY PLAN is int
b1e0: 65 6e 64 65 64 20 66 6f 72 0a 69 6e 74 65 72 61  ended for.intera
b1f0: 63 74 69 76 65 20 61 6e 61 6c 79 73 69 73 20 61  ctive analysis a
b200: 6e 64 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69  nd troubleshooti
b210: 6e 67 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65  ng only.  The de
b220: 74 61 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75  tails of the .ou
b230: 74 70 75 74 20 66 6f 72 6d 61 74 20 61 72 65 20  tput format are 
b240: 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67  subject to chang
b250: 65 20 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61  e from one relea
b260: 73 65 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20  se of SQLite to 
b270: 74 68 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63  the next..Applic
b280: 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f  ations should no
b290: 74 20 75 73 65 20 45 58 50 4c 41 49 4e 20 6f 72  t use EXPLAIN or
b2a0: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
b2b0: 4c 41 4e 20 73 69 6e 63 65 0a 74 68 65 69 72 20  LAN since.their 
b2c0: 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 6f  behavior is undo
b2d0: 63 75 6d 65 6e 74 65 64 2c 20 75 6e 73 70 65 63  cumented, unspec
b2e0: 69 66 69 65 64 2c 20 61 6e 64 20 76 61 72 69 61  ified, and varia
b2f0: 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ble.</p>..<tcl>.
b300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
b350: 65 63 74 69 6f 6e 20 65 78 70 72 65 73 73 69 6f  ection expressio
b360: 6e 20 65 78 70 72 20 7b 65 78 70 72 65 73 73 69  n expr {expressi
b370: 6f 6e 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 73  on {expression s
b380: 79 6e 74 61 78 7d 7d 0a 0a 42 75 62 62 6c 65 44  yntax}}..BubbleD
b390: 69 61 67 72 61 6d 20 65 78 70 72 20 31 0a 42 75  iagram expr 1.Bu
b3a0: 62 62 6c 65 44 69 61 67 72 61 6d 20 6c 69 74 65  bbleDiagram lite
b3b0: 72 61 6c 2d 76 61 6c 75 65 0a 42 75 62 62 6c 65  ral-value.Bubble
b3c0: 44 69 61 67 72 61 6d 20 73 69 67 6e 65 64 2d 6e  Diagram signed-n
b3d0: 75 6d 62 65 72 0a 42 75 62 62 6c 65 44 69 61 67  umber.BubbleDiag
b3e0: 72 61 6d 20 72 61 69 73 65 2d 66 75 6e 63 74 69  ram raise-functi
b3f0: 6f 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  on.</tcl>..<p>Th
b400: 69 73 20 73 65 63 74 69 6f 6e 20 69 73 20 64 69  is section is di
b410: 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65  fferent from the
b420: 20 6f 74 68 65 72 73 2e 20 20 4d 6f 73 74 20 6f   others.  Most o
b430: 74 68 65 72 20 73 65 63 74 69 6f 6e 73 20 6f 66  ther sections of
b440: 0a 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 74  .this document t
b450: 61 6c 6b 73 20 61 62 6f 75 74 20 61 20 70 61 72  alks about a par
b460: 74 69 63 75 6c 61 72 20 53 51 4c 20 63 6f 6d 6d  ticular SQL comm
b470: 61 6e 64 2e 20 20 54 68 69 73 20 73 65 63 74 69  and.  This secti
b480: 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20 74 61 6c 6b  on does.not talk
b490: 20 61 62 6f 75 74 20 61 20 73 74 61 6e 64 61 6c   about a standal
b4a0: 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20 62 75 74 20  one command but 
b4b0: 61 62 6f 75 74 20 22 65 78 70 72 65 73 73 69 6f  about "expressio
b4c0: 6e 73 22 20 77 68 69 63 68 20 61 72 65 20 0a 73  ns" which are .s
b4d0: 75 62 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20  ubcomponents of 
b4e0: 6d 6f 73 74 20 6f 74 68 65 72 20 63 6f 6d 6d 61  most other comma
b4f0: 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  nds.</p>..<tcl>h
b500: 64 5f 66 72 61 67 6d 65 6e 74 20 62 69 6e 61 72  d_fragment binar
b510: 79 6f 70 73 20 7b 62 69 6e 61 72 79 20 6f 70 65  yops {binary ope
b520: 72 61 74 6f 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 70  rators}</tcl>.<p
b530: 3e 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61  >SQLite understa
b540: 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nds the followin
b550: 67 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  g binary operato
b560: 72 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f  rs, in order fro
b570: 6d 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77  m.highest to low
b580: 65 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c  est precedence:<
b590: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
b5a0: 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
b5b0: 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
b5c0: 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25  g>||.*    /    %
b5d0: 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b  .+    -.&lt;&lt;
b5e0: 20 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61     &gt;&gt;   &a
b5f0: 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20  mp;    |.&lt;   
b600: 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20   &lt;=   &gt;   
b610: 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20   &gt;=.=    ==  
b620: 20 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20   !=   &lt;&gt;  
b630: 20 3c 2f 62 69 67 3e 49 4e 20 20 4c 49 4b 45 20   </big>IN  LIKE 
b640: 20 47 4c 4f 42 20 20 4d 41 54 43 48 20 20 52 45   GLOB  MATCH  RE
b650: 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f  GEXP.AND   .OR</
b660: 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  font>.</pre></bl
b670: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 53 75  ockquote>..<p>Su
b680: 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70 72  pported unary pr
b690: 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20 61  efix operators a
b6a0: 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a 3c  re these:</p>..<
b6b0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
b6c0: 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32  .<font color="#2
b6d0: 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20 20  c2cf0"><big>-   
b6e0: 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c 2f   +    ~    NOT</
b6f0: 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72  big></font>.</pr
b700: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
b710: 0a 3c 70 3e 54 68 65 20 43 4f 4c 4c 41 54 45 20  .<p>The COLLATE 
b720: 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20  operator can be 
b730: 74 68 6f 75 67 68 74 20 6f 66 20 61 73 20 61 20  thought of as a 
b740: 75 6e 61 72 79 20 70 6f 73 74 66 69 78 0a 6f 70  unary postfix.op
b750: 65 72 61 74 6f 72 2e 20 20 54 68 65 20 43 4f 4c  erator.  The COL
b760: 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61  LATE operator ha
b770: 73 20 74 68 65 20 68 69 67 68 65 73 74 20 70 72  s the highest pr
b780: 65 63 65 64 65 6e 63 65 2e 0a 49 74 20 61 6c 77  ecedence..It alw
b790: 61 79 73 20 62 69 6e 64 73 20 6d 6f 72 65 20 74  ays binds more t
b7a0: 69 67 68 74 6c 79 20 74 68 61 6e 20 61 6e 79 20  ightly than any 
b7b0: 70 72 65 66 69 78 20 75 6e 61 72 79 20 6f 70 65  prefix unary ope
b7c0: 72 61 74 6f 72 20 6f 72 0a 61 6e 79 20 62 69 6e  rator or.any bin
b7d0: 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70  ary operator.</p
b7e0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20  >..<tcl>hd_puts 
b7f0: 22 0a 3c 70 3e 54 68 65 20 75 6e 61 72 79 20 6f  ".<p>The unary o
b800: 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f  perator [Operato
b810: 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  r +] is a no-op.
b820: 20 20 49 74 20 63 61 6e 20 62 65 20 61 70 70 6c    It can be appl
b830: 69 65 64 0a 74 6f 20 73 74 72 69 6e 67 73 2c 20  ied.to strings, 
b840: 6e 75 6d 62 65 72 73 2c 20 6f 72 20 62 6c 6f 62  numbers, or blob
b850: 73 20 61 6e 64 20 69 74 20 61 6c 77 61 79 73 20  s and it always 
b860: 67 69 76 65 73 20 61 73 20 69 74 73 20 72 65 73  gives as its res
b870: 75 6c 74 20 74 68 65 0a 76 61 6c 75 65 20 6f 66  ult the.value of
b880: 20 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70   the operand.</p
b890: 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74  >"</tcl>..<p>Not
b8a0: 65 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65  e that there are
b8b0: 20 74 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20   two variations 
b8c0: 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 61 6e  of the equals an
b8d0: 64 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65  d not equals.ope
b8e0: 72 61 74 6f 72 73 2e 20 20 45 71 75 61 6c 73 20  rators.  Equals 
b8f0: 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 0a 3c  can be either..<
b900: 74 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b 4f  tcl>.hd_puts "[O
b910: 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b 4f  perator =] or [O
b920: 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 54 68 65  perator ==]..The
b930: 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70 65 72   non-equals oper
b940: 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69 74 68  ator can be eith
b950: 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d  er.[Operator !=]
b960: 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 7b 26   or [Operator {&
b970: 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 54 68 65 20 5b  lt;&gt;}]..The [
b980: 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f 70 65  Operator ||] ope
b990: 72 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e 63 61  rator is \"conca
b9a0: 74 65 6e 61 74 65 5c 22 20 2d 20 69 74 20 6a 6f  tenate\" - it jo
b9b0: 69 6e 73 20 74 6f 67 65 74 68 65 72 0a 74 68 65  ins together.the
b9c0: 20 74 77 6f 20 73 74 72 69 6e 67 73 20 6f 66 20   two strings of 
b9d0: 69 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a 54 68  its operands..Th
b9e0: 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72  e operator [Oper
b9f0: 61 74 6f 72 20 25 5d 20 6f 75 74 70 75 74 73 20  ator %] outputs 
ba00: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  the remainder of
ba10: 20 69 74 73 20 6c 65 66 74 20 0a 6f 70 65 72 61   its left .opera
ba20: 6e 64 20 6d 6f 64 75 6c 6f 20 69 74 73 20 72 69  nd modulo its ri
ba30: 67 68 74 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e  ght operand.</p>
ba40: 0a 0a 3c 70 3e 54 68 65 20 72 65 73 75 6c 74 20  ..<p>The result 
ba50: 6f 66 20 61 6e 79 20 62 69 6e 61 72 79 20 6f 70  of any binary op
ba60: 65 72 61 74 6f 72 20 69 73 20 61 20 6e 75 6d 65  erator is a nume
ba70: 72 69 63 20 76 61 6c 75 65 2c 20 65 78 63 65 70  ric value, excep
ba80: 74 0a 66 6f 72 20 74 68 65 20 5b 4f 70 65 72 61  t.for the [Opera
ba90: 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65 6e  tor ||] concaten
baa0: 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20 77  ation operator w
bab0: 68 69 63 68 20 67 69 76 65 73 20 61 20 73 74 72  hich gives a str
bac0: 69 6e 67 0a 72 65 73 75 6c 74 2e 3c 2f 70 3e 22  ing.result.</p>"
bad0: 3c 2f 74 63 6c 3e 0a 0a 3c 61 20 6e 61 6d 65 3d  </tcl>..<a name=
bae0: 22 6c 69 74 65 72 61 6c 5f 76 61 6c 75 65 22 3e  "literal_value">
baf0: 3c 2f 61 3e 0a 3c 70 3e 0a 41 20 6c 69 74 65 72  </a>.<p>.A liter
bb00: 61 6c 20 76 61 6c 75 65 20 69 73 20 61 6e 20 69  al value is an i
bb10: 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 72  nteger number or
bb20: 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
bb30: 74 20 6e 75 6d 62 65 72 2e 0a 53 63 69 65 6e 74  t number..Scient
bb40: 69 66 69 63 20 6e 6f 74 61 74 69 6f 6e 20 69 73  ific notation is
bb50: 20 73 75 70 70 6f 72 74 65 64 2e 20 20 54 68 65   supported.  The
bb60: 20 22 2e 22 20 63 68 61 72 61 63 74 65 72 20 69   "." character i
bb70: 73 20 61 6c 77 61 79 73 20 75 73 65 64 0a 61 73  s always used.as
bb80: 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
bb90: 6e 74 20 65 76 65 6e 20 69 66 20 74 68 65 20 6c  nt even if the l
bba0: 6f 63 61 6c 65 20 73 65 74 74 69 6e 67 20 73 70  ocale setting sp
bbb0: 65 63 69 66 69 65 73 20 22 2c 22 20 66 6f 72 0a  ecifies "," for.
bbc0: 74 68 69 73 20 72 6f 6c 65 20 2d 20 74 68 65 20  this role - the 
bbd0: 75 73 65 20 6f 66 20 22 2c 22 20 66 6f 72 20 74  use of "," for t
bbe0: 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
bbf0: 20 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e   would result in
bc00: 0a 73 79 6e 74 61 63 74 69 63 20 61 6d 62 69 67  .syntactic ambig
bc10: 75 69 74 79 2e 20 20 41 20 73 74 72 69 6e 67 20  uity.  A string 
bc20: 63 6f 6e 73 74 61 6e 74 20 69 73 20 66 6f 72 6d  constant is form
bc30: 65 64 20 62 79 20 65 6e 63 6c 6f 73 69 6e 67 20  ed by enclosing 
bc40: 74 68 65 0a 73 74 72 69 6e 67 20 69 6e 20 73 69  the.string in si
bc50: 6e 67 6c 65 20 71 75 6f 74 65 73 20 28 27 29 2e  ngle quotes (').
bc60: 20 20 41 20 73 69 6e 67 6c 65 20 71 75 6f 74 65    A single quote
bc70: 20 77 69 74 68 69 6e 20 74 68 65 20 73 74 72 69   within the stri
bc80: 6e 67 20 63 61 6e 0a 62 65 20 65 6e 63 6f 64 65  ng can.be encode
bc90: 64 20 62 79 20 70 75 74 74 69 6e 67 20 74 77 6f  d by putting two
bca0: 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69   single quotes i
bcb0: 6e 20 61 20 72 6f 77 20 2d 20 61 73 20 69 6e 20  n a row - as in 
bcc0: 50 61 73 63 61 6c 2e 0a 43 2d 73 74 79 6c 65 20  Pascal..C-style 
bcd0: 65 73 63 61 70 65 73 20 75 73 69 6e 67 20 74 68  escapes using th
bce0: 65 20 62 61 63 6b 73 6c 61 73 68 20 63 68 61 72  e backslash char
bcf0: 61 63 74 65 72 20 61 72 65 20 6e 6f 74 20 73 75  acter are not su
bd00: 70 70 6f 72 74 65 64 20 62 65 63 61 75 73 65 0a  pported because.
bd10: 74 68 65 79 20 61 72 65 20 6e 6f 74 20 73 74 61  they are not sta
bd20: 6e 64 61 72 64 20 53 51 4c 2e 0a 42 4c 4f 42 20  ndard SQL..BLOB 
bd30: 6c 69 74 65 72 61 6c 73 20 61 72 65 20 73 74 72  literals are str
bd40: 69 6e 67 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e  ing literals con
bd50: 74 61 69 6e 69 6e 67 20 68 65 78 61 64 65 63 69  taining hexadeci
bd60: 6d 61 6c 20 64 61 74 61 20 61 6e 64 0a 70 72 65  mal data and.pre
bd70: 63 65 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c  ceded by a singl
bd80: 65 20 22 78 22 20 6f 72 20 22 58 22 20 63 68 61  e "x" or "X" cha
bd90: 72 61 63 74 65 72 2e 20 20 46 6f 72 20 65 78 61  racter.  For exa
bda0: 6d 70 6c 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  mple:</p>..<bloc
bdb0: 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 58 27 35  kquote><pre>.X'5
bdc0: 33 35 31 34 43 36 39 37 34 36 35 27 0a 3c 2f 70  3514C697465'.</p
bdd0: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
bde0: 0a 0a 3c 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20  ..<p>.A literal 
bdf0: 76 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f 20 62  value can also b
be00: 65 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e 55 4c  e the token "NUL
be10: 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 41 20  L"..</p>..<p>.A 
be20: 70 61 72 61 6d 65 74 65 72 20 73 70 65 63 69 66  parameter specif
be30: 69 65 73 20 61 20 70 6c 61 63 65 68 6f 6c 64 65  ies a placeholde
be40: 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73  r in the express
be50: 69 6f 6e 20 66 6f 72 20 61 20 6c 69 74 65 72 61  ion for a litera
be60: 6c 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73 20  l.value that is 
be70: 66 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75 6e  filled in at run
be80: 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 5b  time using the.[
be90: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
bea0: 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69  b() | sqlite3_bi
beb0: 6e 64 28 29 5d 20 41 50 49 73 2e 0a 50 61 72 61  nd()] APIs..Para
bec0: 6d 65 74 65 72 73 20 63 61 6e 20 74 61 6b 65 20  meters can take 
bed0: 73 65 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c  several forms:.<
bee0: 2f 70 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  /p..<blockquote>
bef0: 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74  .<table>.<tr>.<t
bf00: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  d align="right" 
bf10: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
bf20: 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c  ?</b><i>NNN</i><
bf30: 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
bf40: 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20 71  0"></td>.<td>A q
bf50: 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 66 6f 6c  uestion mark fol
bf60: 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65  lowed by a numbe
bf70: 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c  r <i>NNN</i> hol
bf80: 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 74 68  ds a spot for th
bf90: 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61 6d 65 74  e.NNN-th paramet
bfa0: 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74 20 62 65  er.  NNN must be
bfb0: 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 5b   between 1 and [
bfc0: 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
bfd0: 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 3c 2f 74 64  BLE_NUMBER].</td
bfe0: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
bff0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
c000: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f  align="top"><b>?
c010: 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </b></td><td wid
c020: 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
c030: 64 3e 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72  d>A question mar
c040: 6b 20 74 68 61 74 20 69 73 20 6e 6f 74 20 66 6f  k that is not fo
c050: 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62  llowed by a numb
c060: 65 72 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20  er holds a spot 
c070: 66 6f 72 0a 74 68 65 20 6e 65 78 74 20 75 6e 75  for.the next unu
c080: 73 65 64 20 70 61 72 61 6d 65 74 65 72 2e 3c 2f  sed parameter.</
c090: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
c0a0: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
c0b0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
c0c0: 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69  >:</b><i>AAAA</i
c0d0: 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
c0e0: 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41  "20"></td>.<td>A
c0f0: 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20   colon followed 
c100: 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  by an identifier
c110: 20 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20 73 70   name holds a sp
c120: 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70  ot for a named.p
c130: 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 74 68  arameter with th
c140: 65 20 6e 61 6d 65 20 41 41 41 41 2e 20 20 4e 61  e name AAAA.  Na
c150: 6d 65 64 20 70 61 72 61 6d 65 74 65 72 73 20 61  med parameters a
c160: 72 65 20 61 6c 73 6f 20 6e 75 6d 62 65 72 65 64  re also numbered
c170: 2e 0a 54 68 65 20 6e 75 6d 62 65 72 20 61 73 73  ..The number ass
c180: 69 67 6e 65 64 20 69 73 20 74 68 65 20 6e 65 78  igned is the nex
c190: 74 20 75 6e 75 73 65 64 20 6e 75 6d 62 65 72 2e  t unused number.
c1a0: 20 20 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75    To avoid confu
c1b0: 73 69 6f 6e 2c 0a 69 74 20 69 73 20 62 65 73 74  sion,.it is best
c1c0: 20 74 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e 67   to avoid mixing
c1d0: 20 6e 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65   named and numbe
c1e0: 72 65 64 20 70 61 72 61 6d 65 74 65 72 73 2e 3c  red parameters.<
c1f0: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
c200: 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
c210: 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
c220: 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f  b>@</b><i>AAAA</
c230: 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  i></td><td width
c240: 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
c250: 41 6e 20 22 61 74 22 20 73 69 67 6e 20 77 6f 72  An "at" sign wor
c260: 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20  ks exactly like 
c270: 61 20 63 6f 6c 6f 6e 2e 3c 2f 74 64 3e 0a 3c 2f  a colon.</td>.</
c280: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
c290: 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
c2a0: 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e  n="top"><b>$</b>
c2b0: 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e  <i>AAAA</i></td>
c2c0: 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
c2d0: 2f 74 64 3e 0a 3c 74 64 3e 41 20 64 6f 6c 6c 61  /td>.<td>A dolla
c2e0: 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64 20  r-sign followed 
c2f0: 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  by an identifier
c300: 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64 73   name also holds
c310: 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e 61   a spot for a na
c320: 6d 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77 69  med.parameter wi
c330: 74 68 20 74 68 65 20 6e 61 6d 65 20 41 41 41 41  th the name AAAA
c340: 2e 20 20 54 68 65 20 69 64 65 6e 74 69 66 69 65  .  The identifie
c350: 72 20 6e 61 6d 65 20 69 6e 20 74 68 69 73 20 63  r name in this c
c360: 61 73 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 0a  ase can include.
c370: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 63 63 75  one or more occu
c380: 72 61 6e 63 65 73 20 6f 66 20 22 3a 3a 22 20 61  rances of "::" a
c390: 6e 64 20 61 20 73 75 66 66 69 78 20 65 6e 63 6c  nd a suffix encl
c3a0: 6f 73 65 64 20 69 6e 20 22 28 2e 2e 2e 29 22 20  osed in "(...)" 
c3b0: 63 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e 79 20 74  containing.any t
c3c0: 65 78 74 20 61 74 20 61 6c 6c 2e 20 20 54 68 69  ext at all.  Thi
c3d0: 73 20 73 79 6e 74 61 78 20 69 73 20 74 68 65 20  s syntax is the 
c3e0: 66 6f 72 6d 20 6f 66 20 61 20 76 61 72 69 61 62  form of a variab
c3f0: 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 54  le name in the T
c400: 63 6c 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c  cl.programming l
c410: 61 6e 67 75 61 67 65 2e 3c 2f 74 64 3e 0a 3c 2f  anguage.</td>.</
c420: 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  tr>.</table>.</b
c430: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 50  lockquote>..<p>P
c440: 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 61  arameters that a
c450: 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20  re not assigned 
c460: 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73 71  values using.[sq
c470: 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28  lite3_bind_blob(
c480: 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  ) | sqlite3_bind
c490: 28 29 5d 20 61 72 65 20 74 72 65 61 74 65 64 0a  ()] are treated.
c4a0: 61 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 74  as NULL.</p>..<t
c4b0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c  cl>hd_fragment l
c4c0: 69 6b 65 20 4c 49 4b 45 20 45 53 43 41 50 45 3c  ike LIKE ESCAPE<
c4d0: 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 4c 49 4b  /tcl>.<p>The LIK
c4e0: 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65 73 20  E operator does 
c4f0: 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 69  a pattern matchi
c500: 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 54  ng comparison. T
c510: 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f 20 74 68  he operand.to th
c520: 65 20 72 69 67 68 74 20 63 6f 6e 74 61 69 6e 73  e right contains
c530: 20 74 68 65 20 70 61 74 74 65 72 6e 2c 20 74 68   the pattern, th
c540: 65 20 6c 65 66 74 20 68 61 6e 64 20 6f 70 65 72  e left hand oper
c550: 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  and contains the
c560: 0a 73 74 72 69 6e 67 20 74 6f 20 6d 61 74 63 68  .string to match
c570: 20 61 67 61 69 6e 73 74 20 74 68 65 20 70 61 74   against the pat
c580: 74 65 72 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 70  tern...<tcl>hd_p
c590: 75 74 73 20 22 41 20 70 65 72 63 65 6e 74 20 73  uts "A percent s
c5a0: 79 6d 62 6f 6c 20 5b 4f 70 65 72 61 74 6f 72 20  ymbol [Operator 
c5b0: 25 5d 20 69 6e 20 74 68 65 20 70 61 74 74 65 72  %] in the patter
c5c0: 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 0a 73 65  n matches any.se
c5d0: 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f  quence of zero o
c5e0: 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65 72  r more character
c5f0: 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 2e  s in the string.
c600: 20 20 41 6e 20 75 6e 64 65 72 73 63 6f 72 65 0a    An underscore.
c610: 5b 4f 70 65 72 61 74 6f 72 20 5f 5d 20 69 6e 20  [Operator _] in 
c620: 74 68 65 20 70 61 74 74 65 72 6e 20 6d 61 74 63  the pattern matc
c630: 68 65 73 20 61 6e 79 20 73 69 6e 67 6c 65 20 63  hes any single c
c640: 68 61 72 61 63 74 65 72 20 69 6e 20 74 68 65 0a  haracter in the.
c650: 73 74 72 69 6e 67 2e 20 20 41 6e 79 20 6f 74 68  string.  Any oth
c660: 65 72 20 63 68 61 72 61 63 74 65 72 20 6d 61 74  er character mat
c670: 63 68 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69  ches itself or i
c680: 74 27 73 20 6c 6f 77 65 72 2f 75 70 70 65 72 20  t's lower/upper 
c690: 63 61 73 65 0a 65 71 75 69 76 61 6c 65 6e 74 20  case.equivalent 
c6a0: 28 69 2e 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e  (i.e. case-insen
c6b0: 73 69 74 69 76 65 20 6d 61 74 63 68 69 6e 67 29  sitive matching)
c6c0: 2e 20 20 28 41 20 62 75 67 3a 20 53 51 4c 69 74  .  (A bug: SQLit
c6d0: 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61 6e  e only.understan
c6e0: 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20 63  ds upper/lower c
c6f0: 61 73 65 20 66 6f 72 20 37 2d 62 69 74 20 4c 61  ase for 7-bit La
c700: 74 69 6e 20 63 68 61 72 61 63 74 65 72 73 2e 20  tin characters. 
c710: 20 48 65 6e 63 65 20 74 68 65 0a 4c 49 4b 45 20   Hence the.LIKE 
c720: 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61 73 65  operator is case
c730: 20 73 65 6e 73 69 74 69 76 65 20 66 6f 72 20 38   sensitive for 8
c740: 2d 62 69 74 20 69 73 6f 38 38 35 39 20 63 68 61  -bit iso8859 cha
c750: 72 61 63 74 65 72 73 20 6f 72 20 55 54 46 2d 38  racters or UTF-8
c760: 0a 63 68 61 72 61 63 74 65 72 73 2e 20 20 46 6f  .characters.  Fo
c770: 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 65  r example, the e
c780: 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61 27  xpression <b>'a'
c790: 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b  &nbsp;LIKE&nbsp;
c7a0: 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45 20  'A'</b>.is TRUE 
c7b0: 62 75 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b 27  but <b>'&aelig;'
c7c0: 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b  &nbsp;LIKE&nbsp;
c7d0: 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73  '&AElig;'</b> is
c7e0: 20 46 41 4c 53 45 2e 29 2e 3c 2f 70 3e 22 3c 2f   FALSE.).</p>"</
c7f0: 74 63 6c 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20  tcl>..<p>If the 
c800: 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20  optional ESCAPE 
c810: 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
c820: 74 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72  t, then the expr
c830: 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67  ession.following
c840: 20 74 68 65 20 45 53 43 41 50 45 20 6b 65 79 77   the ESCAPE keyw
c850: 6f 72 64 20 6d 75 73 74 20 65 76 61 6c 75 61 74  ord must evaluat
c860: 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f  e to a string co
c870: 6e 73 69 73 74 69 6e 67 20 6f 66 0a 61 20 73 69  nsisting of.a si
c880: 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 2e 20  ngle character. 
c890: 54 68 69 73 20 63 68 61 72 61 63 74 65 72 20 6d  This character m
c8a0: 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 68  ay be used in th
c8b0: 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 0a 74  e LIKE pattern.t
c8c0: 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74 65 72 61  o include litera
c8d0: 6c 20 70 65 72 63 65 6e 74 20 6f 72 20 75 6e 64  l percent or und
c8e0: 65 72 73 63 6f 72 65 20 63 68 61 72 61 63 74 65  erscore characte
c8f0: 72 73 2e 20 54 68 65 20 65 73 63 61 70 65 0a 63  rs. The escape.c
c900: 68 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f 77 65  haracter followe
c910: 64 20 62 79 20 61 20 70 65 72 63 65 6e 74 20 73  d by a percent s
c920: 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72  ymbol, underscor
c930: 65 20 6f 72 20 69 74 73 65 6c 66 20 6d 61 74 63  e or itself matc
c940: 68 65 73 20 61 0a 6c 69 74 65 72 61 6c 20 70 65  hes a.literal pe
c950: 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e  rcent symbol, un
c960: 64 65 72 73 63 6f 72 65 20 6f 72 20 65 73 63 61  derscore or esca
c970: 70 65 20 63 68 61 72 61 63 74 65 72 20 69 6e 20  pe character in 
c980: 74 68 65 20 73 74 72 69 6e 67 2c 0a 72 65 73 70  the string,.resp
c990: 65 63 74 69 76 65 6c 79 2e 20 54 68 65 20 69 6e  ectively. The in
c9a0: 66 69 78 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f  fix LIKE operato
c9b0: 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  r is implemented
c9c0: 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a   by calling the.
c9d0: 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
c9e0: 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ned SQL function
c9f0: 73 20 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e  s [like(<i>Y</i>
ca00: 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b  ,<i>X</i>)] or.[
ca10: 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69  like(<i>Y</i>,<i
ca20: 3e 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29  >X</i>,<i>Z</i>)
ca30: 5d 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 54 68 65 20  ]</a>.</p>..The 
ca40: 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73  LIKE operator is
ca50: 20 6e 6f 74 20 63 61 73 65 20 73 65 6e 73 69 74   not case sensit
ca60: 69 76 65 20 61 6e 64 20 77 69 6c 6c 20 6d 61 74  ive and will mat
ca70: 63 68 20 75 70 70 65 72 20 63 61 73 65 0a 63 68  ch upper case.ch
ca80: 61 72 61 63 74 65 72 73 20 6f 6e 20 6f 6e 65 20  aracters on one 
ca90: 73 69 64 65 20 61 67 61 69 6e 73 74 20 6c 6f 77  side against low
caa0: 65 72 20 63 61 73 65 20 63 68 61 72 61 63 74 65  er case characte
cab0: 72 73 20 6f 6e 20 74 68 65 20 6f 74 68 65 72 2e  rs on the other.
cac0: 20 20 0a 28 41 20 62 75 67 3a 20 53 51 4c 69 74    .(A bug: SQLit
cad0: 65 20 6f 6e 6c 79 20 75 6e 64 65 72 73 74 61 6e  e only understan
cae0: 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20 63  ds upper/lower c
caf0: 61 73 65 20 66 6f 72 20 37 2d 62 69 74 20 4c 61  ase for 7-bit La
cb00: 74 69 6e 0a 63 68 61 72 61 63 74 65 72 73 2e 20  tin.characters. 
cb10: 20 48 65 6e 63 65 20 74 68 65 20 4c 49 4b 45 20   Hence the LIKE 
cb20: 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61 73 65  operator is case
cb30: 20 73 65 6e 73 69 74 69 76 65 20 66 6f 72 20 38   sensitive for 8
cb40: 2d 62 69 74 0a 69 73 6f 38 38 35 39 20 63 68 61  -bit.iso8859 cha
cb50: 72 61 63 74 65 72 73 20 6f 72 20 55 54 46 2d 38  racters or UTF-8
cb60: 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 46 6f   characters.  Fo
cb70: 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 65  r example, the e
cb80: 78 70 72 65 73 73 69 6f 6e 0a 3c 62 3e 27 61 27  xpression.<b>'a'
cb90: 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b  &nbsp;LIKE&nbsp;
cba0: 27 41 27 3c 2f 62 3e 20 69 73 20 54 52 55 45 20  'A'</b> is TRUE 
cbb0: 62 75 74 0a 3c 62 3e 27 26 61 65 6c 69 67 3b 27  but.<b>'&aelig;'
cbc0: 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b  &nbsp;LIKE&nbsp;
cbd0: 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73  '&AElig;'</b> is
cbe0: 20 46 41 4c 53 45 2e 29 2e 3c 2f 70 3e 0a 0a 3c   FALSE.).</p>..<
cbf0: 70 3e 54 68 65 20 69 6e 66 69 78 20 4c 49 4b 45  p>The infix LIKE
cc00: 0a 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70  .operator is imp
cc10: 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c  lemented by call
cc20: 69 6e 67 20 74 68 65 20 75 73 65 72 20 66 75 6e  ing the user fun
cc30: 63 74 69 6f 6e 20 3c 61 20 68 72 65 66 3d 22 23  ction <a href="#
cc40: 6c 69 6b 65 46 75 6e 63 22 3e 0a 6c 69 6b 65 28  likeFunc">.like(
cc50: 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69  <i>X</i>,<i>Y</i
cc60: 3e 29 3c 2f 61 3e 2e 20 20 49 66 20 61 6e 20 45  >)</a>.  If an E
cc70: 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73 20  SCAPE clause is 
cc80: 70 72 65 73 65 6e 74 2c 20 69 74 20 61 64 64 73  present, it adds
cc90: 0a 61 20 74 68 69 72 64 20 70 61 72 61 6d 65 74  .a third paramet
cca0: 65 72 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69  er to the functi
ccb0: 6f 6e 20 63 61 6c 6c 2e 20 49 66 20 74 68 65 20  on call. If the 
ccc0: 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 6f 66  functionality of
ccd0: 20 4c 49 4b 45 20 63 61 6e 20 62 65 0a 6f 76 65   LIKE can be.ove
cce0: 72 72 69 64 64 65 6e 20 62 79 20 64 65 66 69 6e  rridden by defin
ccf0: 69 6e 67 20 61 6e 20 61 6c 74 65 72 6e 61 74 69  ing an alternati
cd00: 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ve implementatio
cd10: 6e 20 6f 66 20 74 68 65 0a 6c 69 6b 65 28 29 20  n of the.like() 
cd20: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70  SQL function.</p
cd30: 3e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  >.</p>..<tcl>hd_
cd40: 66 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47 4c  fragment glob GL
cd50: 4f 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20  OB</tcl>.<p>The 
cd60: 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20 69 73  GLOB operator is
cd70: 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49 4b 45   similar to LIKE
cd80: 20 62 75 74 20 75 73 65 73 20 74 68 65 20 55 6e   but uses the Un
cd90: 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69 6e 67  ix.file globbing
cda0: 20 73 79 6e 74 61 78 20 66 6f 72 20 69 74 73 20   syntax for its 
cdb0: 77 69 6c 64 63 61 72 64 73 2e 20 20 41 6c 73 6f  wildcards.  Also
cdc0: 2c 20 47 4c 4f 42 20 69 73 20 63 61 73 65 0a 73  , GLOB is case.s
cdd0: 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c 69 6b 65  ensitive, unlike
cde0: 20 4c 49 4b 45 2e 20 20 42 6f 74 68 20 47 4c 4f   LIKE.  Both GLO
cdf0: 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61 79 20 62  B and LIKE may b
ce00: 65 20 70 72 65 63 65 64 65 64 20 62 79 0a 74 68  e preceded by.th
ce10: 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f  e NOT keyword to
ce20: 20 69 6e 76 65 72 74 20 74 68 65 20 73 65 6e 73   invert the sens
ce30: 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e 20 20  e of the test.  
ce40: 54 68 65 20 69 6e 66 69 78 20 47 4c 4f 42 20 0a  The infix GLOB .
ce50: 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c  operator is impl
ce60: 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69  emented by calli
ce70: 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a  ng the function.
ce80: 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c  [glob(<i>Y</i>,<
ce90: 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64 20 63 61  i>X</i>)] and ca
cea0: 6e 20 62 65 20 6d 6f 64 69 66 69 65 64 20 62 79  n be modified by
ceb0: 20 6f 76 65 72 72 69 64 69 6e 67 0a 74 68 61 74   overriding.that
cec0: 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a   function.</p>..
ced0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
cee0: 20 72 65 67 65 78 70 20 52 45 47 45 58 50 3c 2f   regexp REGEXP</
cef0: 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 52 45 47 45  tcl>.<p>The REGE
cf00: 58 50 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61  XP operator is a
cf10: 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20   special syntax 
cf20: 66 6f 72 20 74 68 65 20 72 65 67 65 78 70 28 29  for the regexp()
cf30: 0a 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20  .user function. 
cf40: 20 4e 6f 20 72 65 67 65 78 70 28 29 20 75 73 65   No regexp() use
cf50: 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  r function is de
cf60: 66 69 6e 65 64 20 62 79 20 64 65 66 61 75 6c 74  fined by default
cf70: 0a 61 6e 64 20 73 6f 20 75 73 65 20 6f 66 20 74  .and so use of t
cf80: 68 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74  he REGEXP operat
cf90: 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79  or will normally
cfa0: 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 0a 65 72   result in an.er
cfb0: 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 20 49 66  ror message.  If
cfc0: 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20   a user-defined 
cfd0: 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22  function named "
cfe0: 72 65 67 65 78 70 22 0a 69 73 20 61 64 64 65 64  regexp".is added
cff0: 20 61 74 20 72 75 6e 2d 74 69 6d 65 2c 20 74 68   at run-time, th
d000: 61 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c  at function will
d010: 20 62 65 20 63 61 6c 6c 65 64 20 69 6e 20 6f 72   be called in or
d020: 64 65 72 0a 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  der.to implement
d030: 20 74 68 65 20 52 45 47 45 58 50 20 6f 70 65 72   the REGEXP oper
d040: 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ator.</p>..<tcl>
d050: 68 64 5f 66 72 61 67 6d 65 6e 74 20 6d 61 74 63  hd_fragment matc
d060: 68 20 4d 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70  h MATCH</tcl>.<p
d070: 3e 54 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61  >The MATCH opera
d080: 74 6f 72 20 69 73 20 61 20 73 70 65 63 69 61 6c  tor is a special
d090: 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20   syntax for the 
d0a0: 6d 61 74 63 68 28 29 0a 75 73 65 72 20 66 75 6e  match().user fun
d0b0: 63 74 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61  ction.  The defa
d0c0: 75 6c 74 20 6d 61 74 63 68 28 29 20 66 75 6e 63  ult match() func
d0d0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tion implementat
d0e0: 69 6f 6e 0a 72 61 69 73 65 73 20 61 6e 64 20 65  ion.raises and e
d0f0: 78 63 65 70 74 69 6f 6e 20 61 6e 64 20 69 73 20  xception and is 
d100: 6e 6f 74 20 72 65 61 6c 6c 79 20 75 73 65 66 75  not really usefu
d110: 6c 20 66 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a  l for anything..
d120: 42 75 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63  But extensions c
d130: 61 6e 20 6f 76 65 72 72 69 64 65 20 74 68 65 20  an override the 
d140: 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e  match() function
d150: 20 77 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66   with more.helpf
d160: 75 6c 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c  ul logic.</p>..<
d170: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
d180: 62 65 74 77 65 65 6e 20 42 45 54 57 45 45 4e 3c  between BETWEEN<
d190: 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 42 45 54  /tcl>.<p>The BET
d1a0: 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73  WEEN operator is
d1b0: 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 61   equivalent to a
d1c0: 20 70 61 69 72 20 6f 66 20 63 6f 6d 70 61 72 69   pair of compari
d1d0: 73 6f 6e 73 2e 0a 22 3c 69 3e 61 3c 2f 69 3e 20  sons.."<i>a</i> 
d1e0: 3c 62 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20 3c  <b>BETWEEN</b> <
d1f0: 69 3e 62 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f  i>b</i> <b>AND</
d200: 62 3e 20 3c 69 3e 63 3c 2f 69 3e 22 20 69 73 20  b> <i>c</i>" is 
d210: 0a 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 0a  .equivalent to .
d220: 22 3c 69 3e 61 3c 2f 69 3e 3c 62 3e 26 67 74 3b  "<i>a</i><b>&gt;
d230: 3d 3c 2f 62 3e 3c 69 3e 62 3c 2f 69 3e 20 3c 62  =</b><i>b</i> <b
d240: 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 61 3c 2f 69  >AND</b> <i>a</i
d250: 3e 3c 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e  ><b>&lt;=</b><i>
d260: 63 3c 2f 69 3e 22 2e 0a 54 68 65 20 70 72 65 63  c</i>"..The prec
d270: 65 64 65 6e 63 65 20 6f 66 20 74 68 65 20 42 45  edence of the BE
d280: 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69  TWEEN operator i
d290: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
d2a0: 65 20 70 72 65 63 65 64 65 6e 63 65 0a 61 73 20  e precedence.as 
d2b0: 6f 70 65 72 61 74 6f 72 73 20 3c 62 3e 3d 3d 3c  operators <b>==<
d2c0: 2f 62 3e 20 61 6e 64 20 3c 62 3e 21 3d 3c 2f 62  /b> and <b>!=</b
d2d0: 3e 20 61 6e 64 20 3c 62 3e 4c 49 4b 45 3c 2f 62  > and <b>LIKE</b
d2e0: 3e 20 61 6e 64 20 67 72 6f 75 70 73 20 6c 65 66  > and groups lef
d2f0: 74 20 74 6f 20 72 69 67 68 74 2e 0a 0a 3c 70 3e  t to right...<p>
d300: 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61  A column name ca
d310: 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68 65 20  n be any of the 
d320: 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20 69 6e  names defined in
d330: 20 74 68 65 20 5b 43 52 45 41 54 45 20 54 41 42   the [CREATE TAB
d340: 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 6f 72  LE].statement or
d350: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
d360: 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20 69 64  owing special id
d370: 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62 3e 52  entifiers: "<b>R
d380: 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e 4f  OWID</b>",."<b>O
d390: 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e  ID</b>", or "<b>
d3a0: 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 54 68  _ROWID_</b>"..Th
d3b0: 65 73 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e  ese special iden
d3c0: 74 69 66 69 65 72 73 20 61 6c 6c 20 64 65 73 63  tifiers all desc
d3d0: 72 69 62 65 20 74 68 65 0a 75 6e 69 71 75 65 20  ribe the.unique 
d3e0: 69 6e 74 65 67 65 72 20 6b 65 79 20 28 74 68 65  integer key (the
d3f0: 20 5b 72 6f 77 69 64 5d 29 20 61 73 73 6f 63 69   [rowid]) associ
d400: 61 74 65 64 20 77 69 74 68 20 65 76 65 72 79 20  ated with every 
d410: 0a 72 6f 77 20 6f 66 20 65 76 65 72 79 20 74 61  .row of every ta
d420: 62 6c 65 2e 0a 54 68 65 20 73 70 65 63 69 61 6c  ble..The special
d430: 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c   identifiers onl
d440: 79 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 72  y refer to the r
d450: 6f 77 20 6b 65 79 20 69 66 20 74 68 65 20 5b 43  ow key if the [C
d460: 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61  REATE TABLE].sta
d470: 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20  tement does not 
d480: 64 65 66 69 6e 65 20 61 20 72 65 61 6c 20 63 6f  define a real co
d490: 6c 75 6d 6e 20 77 69 74 68 20 74 68 65 20 73 61  lumn with the sa
d4a0: 6d 65 20 6e 61 6d 65 2e 20 20 52 6f 77 20 6b 65  me name.  Row ke
d4b0: 79 73 0a 61 63 74 20 6c 69 6b 65 20 72 65 61 64  ys.act like read
d4c0: 2d 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 73 2e 20 20  -only columns.  
d4d0: 41 20 72 6f 77 20 6b 65 79 20 63 61 6e 20 62 65  A row key can be
d4e0: 20 75 73 65 64 20 61 6e 79 77 68 65 72 65 20 61   used anywhere a
d4f0: 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20   regular.column 
d500: 63 61 6e 20 62 65 20 75 73 65 64 2c 20 65 78 63  can be used, exc
d510: 65 70 74 20 74 68 61 74 20 79 6f 75 20 63 61 6e  ept that you can
d520: 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 76  not change the v
d530: 61 6c 75 65 0a 6f 66 20 61 20 72 6f 77 20 6b 65  alue.of a row ke
d540: 79 20 69 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d  y in an [UPDATE]
d550: 20 6f 72 20 5b 49 4e 53 45 52 54 5d 20 73 74 61   or [INSERT] sta
d560: 74 65 6d 65 6e 74 2e 0a 22 53 45 4c 45 43 54 20  tement.."SELECT 
d570: 2a 20 2e 2e 2e 22 20 64 6f 65 73 20 6e 6f 74 20  * ..." does not 
d580: 72 65 74 75 72 6e 20 74 68 65 20 72 6f 77 20 6b  return the row k
d590: 65 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5b 53 45 4c  ey.</p>..<p>[SEL
d5a0: 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 20  ECT] statements 
d5b0: 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 65 78  can appear in ex
d5c0: 70 72 65 73 73 69 6f 6e 73 20 61 73 20 65 69 74  pressions as eit
d5d0: 68 65 72 20 74 68 65 0a 72 69 67 68 74 2d 68 61  her the.right-ha
d5e0: 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66 20 74 68  nd operand of th
d5f0: 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20 61  e IN operator, a
d600: 73 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74  s a scalar quant
d610: 69 74 79 2c 20 6f 72 0a 61 73 20 74 68 65 20 6f  ity, or.as the o
d620: 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 45 58 49  perand of an EXI
d630: 53 54 53 20 6f 70 65 72 61 74 6f 72 2e 0a 41 73  STS operator..As
d640: 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69   a scalar quanti
d650: 74 79 20 6f 72 20 74 68 65 20 6f 70 65 72 61 6e  ty or the operan
d660: 64 20 6f 66 20 61 6e 20 49 4e 20 6f 70 65 72 61  d of an IN opera
d670: 74 6f 72 2c 0a 74 68 65 20 53 45 4c 45 43 54 20  tor,.the SELECT 
d680: 73 68 6f 75 6c 64 20 68 61 76 65 20 6f 6e 6c 79  should have only
d690: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
d6a0: 20 69 6e 20 69 74 73 0a 72 65 73 75 6c 74 2e 20   in its.result. 
d6b0: 20 43 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   Compound SELECT
d6c0: 73 20 28 63 6f 6e 6e 65 63 74 65 64 20 77 69 74  s (connected wit
d6d0: 68 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20  h keywords like 
d6e0: 55 4e 49 4f 4e 20 6f 72 0a 45 58 43 45 50 54 29  UNION or.EXCEPT)
d6f0: 20 61 72 65 20 61 6c 6c 6f 77 65 64 2e 0a 57 69   are allowed..Wi
d700: 74 68 20 74 68 65 20 45 58 49 53 54 53 20 6f 70  th the EXISTS op
d710: 65 72 61 74 6f 72 2c 20 74 68 65 20 63 6f 6c 75  erator, the colu
d720: 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
d730: 74 20 73 65 74 20 6f 66 20 74 68 65 20 5b 53 45  t set of the [SE
d740: 4c 45 43 54 5d 20 61 72 65 0a 69 67 6e 6f 72 65  LECT] are.ignore
d750: 64 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  d and the expres
d760: 73 69 6f 6e 20 72 65 74 75 72 6e 73 20 54 52 55  sion returns TRU
d770: 45 20 69 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  E if one or more
d780: 20 72 6f 77 73 20 65 78 69 73 74 0a 61 6e 64 20   rows exist.and 
d790: 46 41 4c 53 45 20 69 66 20 74 68 65 20 72 65 73  FALSE if the res
d7a0: 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
d7b0: 2e 0a 49 66 20 6e 6f 20 74 65 72 6d 73 20 69 6e  ..If no terms in
d7c0: 20 74 68 65 20 5b 53 45 4c 45 43 54 5d 20 65 78   the [SELECT] ex
d7d0: 70 72 65 73 73 69 6f 6e 20 72 65 66 65 72 20 74  pression refer t
d7e0: 6f 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 63  o value in the c
d7f0: 6f 6e 74 61 69 6e 69 6e 67 0a 71 75 65 72 79 2c  ontaining.query,
d800: 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73   then the expres
d810: 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
d820: 64 20 6f 6e 63 65 20 70 72 69 6f 72 20 74 6f 20  d once prior to 
d830: 61 6e 79 20 6f 74 68 65 72 0a 70 72 6f 63 65 73  any other.proces
d840: 73 69 6e 67 20 61 6e 64 20 74 68 65 20 72 65 73  sing and the res
d850: 75 6c 74 20 69 73 20 72 65 75 73 65 64 20 61 73  ult is reused as
d860: 20 6e 65 63 65 73 73 61 72 79 2e 20 20 49 66 20   necessary.  If 
d870: 74 68 65 20 5b 53 45 4c 45 43 54 5d 20 65 78 70  the [SELECT] exp
d880: 72 65 73 73 69 6f 6e 0a 64 6f 65 73 20 63 6f 6e  ression.does con
d890: 74 61 69 6e 20 76 61 72 69 61 62 6c 65 73 20 66  tain variables f
d8a0: 72 6f 6d 20 74 68 65 20 6f 75 74 65 72 20 71 75  rom the outer qu
d8b0: 65 72 79 2c 20 74 68 65 6e 20 74 68 65 20 5b 53  ery, then the [S
d8c0: 45 4c 45 43 54 5d 20 69 73 20 72 65 65 76 61 6c  ELECT] is reeval
d8d0: 75 61 74 65 64 0a 65 76 65 72 79 20 74 69 6d 65  uated.every time
d8e0: 20 69 74 20 69 73 20 6e 65 65 64 65 64 2e 3c 2f   it is needed.</
d8f0: 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61 20 53 45  p>..<p>When a SE
d900: 4c 45 43 54 20 69 73 20 74 68 65 20 72 69 67 68  LECT is the righ
d910: 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65  t operand of the
d920: 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20 74 68   IN operator, th
d930: 65 20 49 4e 0a 6f 70 65 72 61 74 6f 72 20 72 65  e IN.operator re
d940: 74 75 72 6e 73 20 54 52 55 45 20 69 66 20 74 68  turns TRUE if th
d950: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
d960: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 69 73 20  left operand is 
d970: 61 6e 79 20 6f 66 0a 74 68 65 20 76 61 6c 75 65  any of.the value
d980: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74  s generated by t
d990: 68 65 20 73 65 6c 65 63 74 2e 20 20 54 68 65 20  he select.  The 
d9a0: 49 4e 20 6f 70 65 72 61 74 6f 72 20 6d 61 79 20  IN operator may 
d9b0: 62 65 20 70 72 65 63 65 64 65 64 0a 62 79 20 74  be preceded.by t
d9c0: 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74  he NOT keyword t
d9d0: 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73 65 6e  o invert the sen
d9e0: 73 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e 3c  se of the test.<
d9f0: 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61 20 53  /p>..<p>When a S
da00: 45 4c 45 43 54 20 61 70 70 65 61 72 73 20 77 69  ELECT appears wi
da10: 74 68 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69  thin an expressi
da20: 6f 6e 20 62 75 74 20 69 73 20 6e 6f 74 20 74 68  on but is not th
da30: 65 20 72 69 67 68 74 0a 6f 70 65 72 61 6e 64 20  e right.operand 
da40: 6f 66 20 61 6e 20 49 4e 20 6f 70 65 72 61 74 6f  of an IN operato
da50: 72 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73  r, then the firs
da60: 74 20 72 6f 77 20 6f 66 20 74 68 65 20 72 65 73  t row of the res
da70: 75 6c 74 20 6f 66 20 74 68 65 0a 53 45 4c 45 43  ult of the.SELEC
da80: 54 20 62 65 63 6f 6d 65 73 20 74 68 65 20 76 61  T becomes the va
da90: 6c 75 65 20 75 73 65 64 20 69 6e 20 74 68 65 20  lue used in the 
daa0: 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 49 66 20  expression.  If 
dab0: 74 68 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64  the SELECT yield
dac0: 73 0a 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  s.more than one 
dad0: 72 65 73 75 6c 74 20 72 6f 77 2c 20 61 6c 6c 20  result row, all 
dae0: 72 6f 77 73 20 61 66 74 65 72 20 74 68 65 20 66  rows after the f
daf0: 69 72 73 74 20 61 72 65 20 69 67 6e 6f 72 65 64  irst are ignored
db00: 2e 20 20 49 66 0a 74 68 65 20 53 45 4c 45 43 54  .  If.the SELECT
db10: 20 79 69 65 6c 64 73 20 6e 6f 20 72 6f 77 73 2c   yields no rows,
db20: 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
db30: 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 69 73  of the SELECT is
db40: 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41   NULL.</p>..<p>A
db50: 20 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e   CAST expression
db60: 20 63 68 61 6e 67 65 73 20 74 68 65 20 5b 64 61   changes the [da
db70: 74 61 74 79 70 65 5d 20 6f 66 20 74 68 65 20 3c  tatype] of the <
db80: 65 78 70 72 3e 20 69 6e 74 6f 20 74 68 65 0a 74  expr> into the.t
db90: 79 70 65 20 73 70 65 63 69 66 69 65 64 20 62 79  ype specified by
dba0: 20 26 6c 74 3b 74 79 70 65 26 67 74 3b 2e 20 0a   &lt;type&gt;. .
dbb0: 26 6c 74 3b 74 79 70 65 26 67 74 3b 20 63 61 6e  &lt;type&gt; can
dbc0: 20 62 65 20 61 6e 79 20 6e 6f 6e 2d 65 6d 70 74   be any non-empt
dbd0: 79 20 74 79 70 65 20 6e 61 6d 65 20 74 68 61 74  y type name that
dbe0: 20 69 73 20 76 61 6c 69 64 0a 66 6f 72 20 74 68   is valid.for th
dbf0: 65 20 74 79 70 65 20 69 6e 20 61 20 63 6f 6c 75  e type in a colu
dc00: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  mn definition of
dc10: 20 61 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45   a [CREATE TABLE
dc20: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e  ] statement.</p>
dc30: 0a 0a 3c 70 3e 42 6f 74 68 20 5b 63 6f 72 65 66  ..<p>Both [coref
dc40: 75 6e 63 7c 73 69 6d 70 6c 65 5d 20 61 6e 64 20  unc|simple] and 
dc50: 5b 61 67 67 66 75 6e 63 7c 61 67 67 72 65 67 61  [aggfunc|aggrega
dc60: 74 65 5d 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  te] functions ar
dc70: 65 20 73 75 70 70 6f 72 74 65 64 2e 0a 28 46 6f  e supported..(Fo
dc80: 72 20 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 70  r presentation p
dc90: 75 72 70 6f 73 65 73 2c 20 73 69 6d 70 6c 65 20  urposes, simple 
dca0: 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 66 75  functions are fu
dcb0: 72 74 68 65 72 20 73 75 62 64 69 76 69 64 65 64  rther subdivided
dcc0: 20 69 6e 74 6f 0a 5b 63 6f 72 65 66 75 6e 63 20   into.[corefunc 
dcd0: 7c 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73  | core functions
dce0: 5d 20 61 6e 64 20 5b 64 61 74 65 66 75 6e 63 20  ] and [datefunc 
dcf0: 7c 20 64 61 74 65 2d 74 69 6d 65 20 66 75 6e 63  | date-time func
dd00: 74 69 6f 6e 73 5d 2e 29 0a 41 20 73 69 6d 70 6c  tions].).A simpl
dd10: 65 20 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 62  e function can b
dd20: 65 20 75 73 65 64 20 69 6e 20 61 6e 79 20 65 78  e used in any ex
dd30: 70 72 65 73 73 69 6f 6e 2e 20 20 53 69 6d 70 6c  pression.  Simpl
dd40: 65 20 66 75 6e 63 74 69 6f 6e 73 20 72 65 74 75  e functions retu
dd50: 72 6e 0a 61 20 72 65 73 75 6c 74 20 69 6d 6d 65  rn.a result imme
dd60: 64 69 61 74 65 6c 79 20 62 61 73 65 64 20 6f 6e  diately based on
dd70: 20 74 68 65 69 72 20 69 6e 70 75 74 73 2e 20 20   their inputs.  
dd80: 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
dd90: 6f 6e 73 0a 6d 61 79 20 6f 6e 6c 79 20 62 65 20  ons.may only be 
dda0: 75 73 65 64 20 69 6e 20 61 20 53 45 4c 45 43 54  used in a SELECT
ddb0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 67 67   statement.  Agg
ddc0: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
ddd0: 20 63 6f 6d 70 75 74 65 0a 74 68 65 69 72 20 72   compute.their r
dde0: 65 73 75 6c 74 20 61 63 72 6f 73 73 20 61 6c 6c  esult across all
ddf0: 20 72 6f 77 73 20 6f 66 20 74 68 65 20 72 65 73   rows of the res
de00: 75 6c 74 20 73 65 74 2e 3c 2f 70 3e 0a 0a 3c 74  ult set.</p>..<t
de10: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
de20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
de30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
de40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
de50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
de60: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 6f 72 65  ##.Section {Core
de70: 20 46 75 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65   Functions} core
de80: 66 75 6e 63 20 7b 63 6f 72 65 66 75 6e 63 7d 0a  func {corefunc}.
de90: 70 72 6f 63 20 66 75 6e 63 64 65 66 20 7b 73 79  proc funcdef {sy
dea0: 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65  ntax keywords de
deb0: 73 63 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73 20  sc} {.  hd_puts 
dec0: 7b 3c 74 72 3e 7d 0a 20 20 72 65 67 73 75 62 20  {<tr>}.  regsub 
ded0: 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69  -all {\s+} [stri
dee0: 6e 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d  ng trim $syntax]
def0: 20 7b 3c 62 72 3e 3c 2f 62 72 3e 7d 20 73 79 6e   {<br></br>} syn
df00: 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  tax.  regsub -al
df10: 6c 20 7b 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d  l {\(([^*)]+)\)}
df20: 20 24 73 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31   $syntax {(<i>\1
df30: 3c 2f 69 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20  </i>)} syntax.  
df40: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20  regsub -all {,} 
df50: 24 73 79 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69  $syntax {</i>,<i
df60: 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73  >} syntax.  regs
df70: 75 62 20 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e  ub -all {<i>\.\.
df80: 5c 2e 3c 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20  \.</i>} $syntax 
df90: 7b 2e 2e 2e 7d 20 73 79 6e 74 61 78 0a 20 20 68  {...} syntax.  h
dfa0: 64 5f 70 75 74 73 20 22 3c 74 64 20 76 61 6c 69  d_puts "<td vali
dfb0: 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e  gn=\"top\" align
dfc0: 3d 5c 22 72 69 67 68 74 5c 22 20 77 69 64 74 68  =\"right\" width
dfd0: 3d 5c 22 31 32 30 5c 22 3e 24 73 79 6e 74 61 78  =\"120\">$syntax
dfe0: 3c 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75 74 73  </td>".  hd_puts
dff0: 20 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f   {<td valign="to
e000: 70 22 3e 7d 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e  p">}.  if {[llen
e010: 67 74 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d  gth $keywords]==
e020: 30 7d 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20  0} {.    regexp 
e030: 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61  {[a-z_]+} $synta
e040: 78 20 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72  x name.    hd_fr
e050: 61 67 6d 65 6e 74 20 24 6e 61 6d 65 20 24 6e 61  agment $name $na
e060: 6d 65 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  me.  } else {.  
e070: 20 20 65 76 61 6c 20 68 64 5f 66 72 61 67 6d 65    eval hd_fragme
e080: 6e 74 20 24 6b 65 79 77 6f 72 64 73 0a 20 20 20  nt $keywords.   
e090: 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 24 6b 65   hd_keywords $ke
e0a0: 79 77 6f 72 64 73 0a 20 20 7d 0a 20 20 68 64 5f  ywords.  }.  hd_
e0b0: 72 65 73 6f 6c 76 65 20 24 64 65 73 63 0a 20 20  resolve $desc.  
e0c0: 68 64 5f 70 75 74 73 20 7b 3c 2f 74 64 3e 3c 2f  hd_puts {</td></
e0d0: 74 72 3e 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  tr>}.}.</tcl>..<
e0e0: 70 3e 54 68 65 20 63 6f 72 65 20 66 75 6e 63 74  p>The core funct
e0f0: 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77  ions shown below
e100: 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62   are available b
e110: 79 20 64 65 66 61 75 6c 74 2e 20 0a 5b 64 61 74  y default. .[dat
e120: 65 66 75 6e 63 20 7c 20 44 61 74 65 20 26 61 6d  efunc | Date &am
e130: 70 3b 20 54 69 6d 65 20 66 75 6e 63 74 69 6f 6e  p; Time function
e140: 73 5d 20 61 6e 64 0a 5b 61 67 67 66 75 6e 63 20  s] and.[aggfunc 
e150: 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  | aggregate func
e160: 74 69 6f 6e 73 5d 20 61 72 65 20 64 6f 63 75 6d  tions] are docum
e170: 65 6e 74 65 64 20 73 65 70 61 72 61 74 65 6c 79  ented separately
e180: 2e 20 20 41 6e 0a 61 70 70 6c 69 63 61 74 69 6f  .  An.applicatio
e190: 6e 20 6d 61 79 20 64 65 66 69 6e 65 20 61 64 64  n may define add
e1a0: 69 74 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e  itional.function
e1b0: 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 61  s written in C a
e1c0: 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  nd added to the 
e1d0: 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20  database engine 
e1e0: 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74  using.the [sqlit
e1f0: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
e200: 6f 6e 28 29 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a  on()] API.</p>..
e210: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20  <table border=0 
e220: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a  cellpadding=10>.
e230: 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61  <tcl>.funcdef {a
e240: 62 73 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 52 65  bs(X)} {} {.  Re
e250: 74 75 72 6e 20 74 68 65 20 61 62 73 6f 6c 75 74  turn the absolut
e260: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6e  e value of the n
e270: 75 6d 65 72 69 63 0a 20 20 61 72 67 75 6d 65 6e  umeric.  argumen
e280: 74 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 52 65 74  t <i>X</i>.  Ret
e290: 75 72 6e 20 4e 55 4c 4c 20 69 66 20 3c 69 3e 58  urn NULL if <i>X
e2a0: 3c 2f 69 3e 20 69 73 20 4e 55 4c 4c 2e 20 20 52  </i> is NULL.  R
e2b0: 65 74 75 72 6e 20 30 2e 30 20 69 66 0a 20 20 3c  eturn 0.0 if.  <
e2c0: 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 61  i>X</i> is not a
e2d0: 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 2e 0a   numeric value..
e2e0: 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c  }..funcdef {coal
e2f0: 65 73 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  esce(X,Y,...)} {
e300: 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 61 20 63  } {.  Return a c
e310: 6f 70 79 20 6f 66 20 74 68 65 20 66 69 72 73 74  opy of the first
e320: 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65   non-NULL argume
e330: 6e 74 2e 20 20 49 66 0a 20 20 61 6c 6c 20 61 72  nt.  If.  all ar
e340: 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c  guments are NULL
e350: 20 74 68 65 6e 20 4e 55 4c 4c 20 69 73 20 72 65   then NULL is re
e360: 74 75 72 6e 65 64 2e 20 20 54 68 65 72 65 20 6d  turned.  There m
e370: 75 73 74 20 62 65 20 61 74 20 6c 65 61 73 74 20  ust be at least 
e380: 0a 20 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a  .  2 arguments..
e390: 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 6c 6f 62  }..funcdef {glob
e3a0: 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 54 68  (X,Y)} {} {.  Th
e3b0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75  is function is u
e3c0: 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
e3d0: 20 74 68 65 0a 20 20 22 3c 62 3e 59 20 47 4c 4f   the.  "<b>Y GLO
e3e0: 42 20 58 3c 2f 62 3e 22 20 73 79 6e 74 61 78 20  B X</b>" syntax 
e3f0: 6f 66 20 53 51 4c 69 74 65 2e 0a 20 20 4e 6f 74  of SQLite..  Not
e400: 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e 64  e that the X and
e410: 20 59 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65   Y arguments are
e420: 20 72 65 76 65 72 73 65 64 20 69 6e 20 74 68 65   reversed in the
e430: 20 67 6c 6f 62 28 29 20 66 75 6e 63 74 69 6f 6e   glob() function
e440: 0a 20 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74  .  relative to t
e450: 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f 42 5d 20  he infix [GLOB] 
e460: 6f 70 65 72 61 74 6f 72 2e 0a 20 20 54 68 65 20  operator..  The 
e470: 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
e480: 66 75 6e 63 74 69 6f 6e 28 29 5d 0a 20 20 69 6e  function()].  in
e490: 74 65 72 66 61 63 65 20 63 61 6e 0a 20 20 62 65  terface can.  be
e4a0: 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72 69 64   used to overrid
e4b0: 65 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  e this function 
e4c0: 61 6e 64 20 74 68 65 72 65 62 79 20 63 68 61 6e  and thereby chan
e4d0: 67 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ge the operation
e4e0: 0a 20 20 6f 66 20 74 68 65 20 5b 47 4c 4f 42 5d  .  of the [GLOB]
e4f0: 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 74 64 3e 0a   operator.</td>.
e500: 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69 66 6e 75  }..funcdef {ifnu
e510: 6c 6c 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  ll(X,Y)} {} {.  
e520: 52 65 74 75 72 6e 20 61 20 63 6f 70 79 20 6f 66  Return a copy of
e530: 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   the first non-N
e540: 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2e 20 20 49  ULL argument.  I
e550: 66 0a 20 20 62 6f 74 68 20 61 72 67 75 6d 65 6e  f.  both argumen
e560: 74 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ts are NULL then
e570: 20 4e 55 4c 4c 20 69 73 20 72 65 74 75 72 6e 65   NULL is returne
e580: 64 2e 20 54 68 65 20 69 66 6e 75 6c 6c 28 29 20  d. The ifnull() 
e590: 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 0a 20 20  functions and.  
e5a0: 5b 63 6f 61 6c 65 73 63 65 28 29 5d 20 77 69 74  [coalesce()] wit
e5b0: 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20  h two arguments 
e5c0: 61 72 65 20 69 6e 74 65 72 63 68 61 6e 67 65 61  are interchangea
e5d0: 62 6c 65 2e 3c 2f 74 64 3e 0a 7d 0a 0a 66 75 6e  ble.</td>.}..fun
e5e0: 63 64 65 66 20 7b 68 65 78 28 58 29 7d 20 7b 7d  cdef {hex(X)} {}
e5f0: 20 7b 0a 20 20 54 68 65 20 61 72 67 75 6d 65 6e   {.  The argumen
e600: 74 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64  t is interpreted
e610: 20 61 73 20 61 20 42 4c 4f 42 2e 20 20 54 68 65   as a BLOB.  The
e620: 20 72 65 73 75 6c 74 0a 20 20 69 73 20 61 20 68   result.  is a h
e630: 65 78 61 64 65 63 69 6d 61 6c 20 72 65 6e 64 65  exadecimal rende
e640: 72 69 6e 67 20 6f 66 20 74 68 65 20 63 6f 6e 74  ring of the cont
e650: 65 6e 74 20 6f 66 20 74 68 61 74 20 62 6c 6f 62  ent of that blob
e660: 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .  .}..funcdef {
e670: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
e680: 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75  d()} {} {.  Retu
e690: 72 6e 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20  rn the [ROWID]. 
e6a0: 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f 77   of the last row
e6b0: 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68 69   insert from thi
e6c0: 73 0a 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  s.  connection t
e6d0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  o the database. 
e6e0: 0a 20 20 54 68 69 73 20 69 73 20 74 68 65 20 73  .  This is the s
e6f0: 61 6d 65 20 76 61 6c 75 65 20 74 68 61 74 20 77  ame value that w
e700: 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64  ould be returned
e710: 0a 20 20 66 72 6f 6d 20 74 68 65 20 5b 73 71 6c  .  from the [sql
e720: 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
e730: 5f 72 6f 77 69 64 28 29 5d 20 41 50 49 20 66 75  _rowid()] API fu
e740: 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64  nction..}..funcd
e750: 65 66 20 7b 6c 65 6e 67 74 68 28 58 29 7d 20 7b  ef {length(X)} {
e760: 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65  } {.  Return the
e770: 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 6f   string length o
e780: 66 20 3c 69 3e 58 3c 2f 69 3e 20 69 6e 20 63 68  f <i>X</i> in ch
e790: 61 72 61 63 74 65 72 73 20 69 66 20 3c 69 3e 58  aracters if <i>X
e7a0: 3c 2f 69 3e 20 69 73 20 61 20 73 74 72 69 6e 67  </i> is a string
e7b0: 2c 0a 20 20 6f 72 20 69 6e 20 62 79 74 65 73 20  ,.  or in bytes 
e7c0: 69 66 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 61  if <i>X</i> is a
e7d0: 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e 63 64 65   blob..}..funcde
e7e0: 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b  f {like(X,Y) lik
e7f0: 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20  e(X,Y,Z)} {} {. 
e800: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   This function i
e810: 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
e820: 65 6e 74 20 74 68 65 20 22 3c 62 3e 59 20 4c 49  ent the "<b>Y LI
e830: 4b 45 20 58 20 26 23 39 31 3b 45 53 43 41 50 45  KE X &#91;ESCAPE
e840: 20 5a 26 23 39 33 3b 3c 2f 62 3e 22 0a 20 20 73   Z&#93;</b>".  s
e850: 79 6e 74 61 78 20 6f 66 20 53 51 4c 2e 20 49 66  yntax of SQL. If
e860: 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53   the optional ES
e870: 43 41 50 45 20 63 6c 61 75 73 65 20 69 73 20 70  CAPE clause is p
e880: 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  resent, then the
e890: 0a 20 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e  .  user-function
e8a0: 20 69 73 20 69 6e 76 6f 6b 65 64 20 77 69 74 68   is invoked with
e8b0: 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 73   three arguments
e8c0: 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20  . Otherwise, it 
e8d0: 69 73 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69 74  is.  invoked wit
e8e0: 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20  h two arguments 
e8f0: 6f 6e 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74 20  only. Note that 
e900: 74 68 65 20 58 20 61 6e 64 20 59 20 70 61 72 61  the X and Y para
e910: 6d 65 74 65 72 73 20 61 72 65 0a 20 20 72 65 76  meters are.  rev
e920: 65 72 73 65 64 20 69 6e 20 74 68 65 20 6c 69 6b  ersed in the lik
e930: 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 6c  e() function rel
e940: 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66  ative to the inf
e950: 69 78 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74  ix [LIKE] operat
e960: 6f 72 2e 0a 20 20 54 68 65 20 5b 73 71 6c 69 74  or..  The [sqlit
e970: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
e980: 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20  on()] interface 
e990: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6f  can be used to o
e9a0: 76 65 72 72 69 64 65 20 74 68 69 73 0a 20 20 66  verride this.  f
e9b0: 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 72  unction and ther
e9c0: 65 62 79 20 63 68 61 6e 67 65 20 74 68 65 20 6f  eby change the o
e9d0: 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  peration of the.
e9e0: 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f    [LIKE] operato
e9f0: 72 2e 20 57 68 65 6e 20 64 6f 69 6e 67 20 74 68  r. When doing th
ea00: 69 73 2c 20 69 74 20 6d 61 79 20 62 65 20 69 6d  is, it may be im
ea10: 70 6f 72 74 61 6e 74 0a 20 20 74 6f 20 6f 76 65  portant.  to ove
ea20: 72 72 69 64 65 20 62 6f 74 68 20 74 68 65 20 74  rride both the t
ea30: 77 6f 20 61 6e 64 20 74 68 72 65 65 20 61 72 67  wo and three arg
ea40: 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f  ument versions o
ea50: 66 20 74 68 65 20 6c 69 6b 65 28 29 20 0a 20 20  f the like() .  
ea60: 66 75 6e 63 74 69 6f 6e 2e 20 4f 74 68 65 72 77  function. Otherw
ea70: 69 73 65 2c 20 64 69 66 66 65 72 65 6e 74 20 63  ise, different c
ea80: 6f 64 65 20 6d 61 79 20 62 65 20 63 61 6c 6c 65  ode may be calle
ea90: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
eaa0: 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72  he.  [LIKE] oper
eab0: 61 74 6f 72 20 64 65 70 65 6e 64 69 6e 67 20 6f  ator depending o
eac0: 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  n whether or not
ead0: 20 61 6e 20 45 53 43 41 50 45 20 63 6c 61 75 73   an ESCAPE claus
eae0: 65 20 77 61 73 20 0a 20 20 73 70 65 63 69 66 69  e was .  specifi
eaf0: 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ed..}..funcdef {
eb00: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58  load_extension(X
eb10: 29 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  ) load_extension
eb20: 28 58 2c 59 29 7d 20 7b 6c 6f 61 64 5f 65 78 74  (X,Y)} {load_ext
eb30: 65 6e 73 69 6f 6e 7d 20 7b 0a 20 20 4c 6f 61 64  ension} {.  Load
eb40: 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f   SQLite extensio
eb50: 6e 73 20 6f 75 74 20 6f 66 20 74 68 65 20 73 68  ns out of the sh
eb60: 61 72 65 64 20 6c 69 62 72 61 72 79 0a 20 20 66  ared library.  f
eb70: 69 6c 65 20 6e 61 6d 65 64 20 3c 69 3e 58 3c 2f  ile named <i>X</
eb80: 69 3e 20 75 73 69 6e 67 20 74 68 65 20 65 6e 74  i> using the ent
eb90: 72 79 20 70 6f 69 6e 74 20 3c 69 3e 59 3c 2f 69  ry point <i>Y</i
eba0: 3e 2e 20 20 54 68 65 20 72 65 73 75 6c 74 0a 20  >.  The result. 
ebb0: 20 69 73 20 61 20 4e 55 4c 4c 2e 20 20 49 66 20   is a NULL.  If 
ebc0: 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74  <i>Y</i> is omit
ebd0: 74 65 64 20 74 68 65 6e 20 74 68 65 20 64 65 66  ted then the def
ebe0: 61 75 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e 74  ault entry point
ebf0: 0a 20 20 6f 66 20 3c 62 3e 73 71 6c 69 74 65 33  .  of <b>sqlite3
ec00: 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 3c  _extension_init<
ec10: 2f 62 3e 20 69 73 20 75 73 65 64 2e 20 20 54 68  /b> is used.  Th
ec20: 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 61 69 73  is function rais
ec30: 65 73 0a 20 20 61 6e 20 65 78 63 65 70 74 69 6f  es.  an exceptio
ec40: 6e 20 69 66 20 74 68 65 20 65 78 74 65 6e 73 69  n if the extensi
ec50: 6f 6e 20 66 61 69 6c 73 20 74 6f 20 6c 6f 61 64  on fails to load
ec60: 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 20 63   or initialize c
ec70: 6f 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70 3e  orrectly...  <p>
ec80: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69  This function wi
ec90: 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 20 65  ll fail if the e
eca0: 78 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d 70 74  xtension attempt
ecb0: 73 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 6f 72  s to modify.  or
ecc0: 20 64 65 6c 65 74 65 20 61 20 53 51 4c 20 66 75   delete a SQL fu
ecd0: 6e 63 74 69 6f 6e 20 6f 72 20 63 6f 6c 6c 61 74  nction or collat
ece0: 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 54  ing sequence.  T
ecf0: 68 65 0a 20 20 65 78 74 65 6e 73 69 6f 6e 20 63  he.  extension c
ed00: 61 6e 20 61 64 64 20 6e 65 77 20 66 75 6e 63 74  an add new funct
ed10: 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e  ions or collatin
ed20: 67 20 73 65 71 75 65 6e 63 65 73 2c 20 62 75 74  g sequences, but
ed30: 20 63 61 6e 6e 6f 74 0a 20 20 6d 6f 64 69 66 79   cannot.  modify
ed40: 20 6f 72 20 64 65 6c 65 74 65 20 65 78 69 73 74   or delete exist
ed50: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  ing functions or
ed60: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
ed70: 6e 63 65 73 20 62 65 63 61 75 73 65 0a 20 20 74  nces because.  t
ed80: 68 6f 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  hose functions a
ed90: 6e 64 2f 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20  nd/or collating 
eda0: 73 65 71 75 65 6e 63 65 73 20 6d 69 67 68 74 20  sequences might 
edb0: 62 65 20 75 73 65 64 20 65 6c 73 65 77 68 65 72  be used elsewher
edc0: 65 0a 20 20 69 6e 20 74 68 65 20 63 75 72 72 65  e.  in the curre
edd0: 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 53 51 4c  ntly running SQL
ede0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 6f 20   statement.  To 
edf0: 6c 6f 61 64 20 61 6e 20 65 78 74 65 6e 73 69 6f  load an extensio
ee00: 6e 20 74 68 61 74 0a 20 20 63 68 61 6e 67 65 73  n that.  changes
ee10: 20 6f 72 20 64 65 6c 65 74 65 73 20 66 75 6e 63   or deletes func
ee20: 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69  tions or collati
ee30: 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20 75 73  ng sequences, us
ee40: 65 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33  e the.  [sqlite3
ee50: 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  _load_extension(
ee60: 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20 41 50  )] C-language AP
ee70: 49 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65  I.</p>.}..funcde
ee80: 66 20 7b 6c 6f 77 65 72 28 58 29 7d 20 7b 7d 20  f {lower(X)} {} 
ee90: 7b 0a 20 20 52 65 74 75 72 6e 20 61 20 63 6f 70  {.  Return a cop
eea0: 79 20 6f 66 20 73 74 72 69 6e 67 20 3c 69 3e 58  y of string <i>X
eeb0: 3c 2f 69 3e 20 77 69 74 68 20 61 6c 6c 20 41 53  </i> with all AS
eec0: 43 49 49 20 63 68 61 72 61 63 74 65 72 73 0a 20  CII characters. 
eed0: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f   converted to lo
eee0: 77 65 72 20 63 61 73 65 2e 20 20 54 68 65 20 64  wer case.  The d
eef0: 65 66 61 75 6c 74 20 62 75 69 6c 74 2d 69 6e 20  efault built-in 
ef00: 6c 6f 77 65 72 28 29 20 66 75 6e 63 74 69 6f 6e  lower() function
ef10: 20 77 6f 72 6b 73 0a 20 20 66 6f 72 20 41 53 43   works.  for ASC
ef20: 49 49 20 63 68 61 72 61 63 74 65 72 73 20 6f 6e  II characters on
ef30: 6c 79 2e 20 20 54 6f 20 64 6f 20 63 61 73 65 20  ly.  To do case 
ef40: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 6f 6e 20 6e  conversions on n
ef50: 6f 6e 2d 41 53 43 49 49 0a 20 20 63 68 61 72 61  on-ASCII.  chara
ef60: 63 74 65 72 73 2c 20 6c 6f 61 64 20 74 68 65 20  cters, load the 
ef70: 49 43 55 20 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d  ICU extension..}
ef80: 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 74 72 69 6d  ..funcdef {ltrim
ef90: 28 58 29 20 6c 74 72 69 6d 28 58 2c 59 29 7d 20  (X) ltrim(X,Y)} 
efa0: 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 61 20  {} {.  Return a 
efb0: 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79  string formed by
efc0: 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e   removing any an
efd0: 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65  d all.  characte
efe0: 72 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69  rs that appear i
eff0: 6e 20 3c 69 3e 59 3c 2f 69 3e 20 66 72 6f 6d 20  n <i>Y</i> from 
f000: 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66  the left side of
f010: 20 3c 69 3e 58 3c 2f 69 3e 2e 0a 20 20 49 66 20   <i>X</i>..  If 
f020: 74 68 65 20 3c 69 3e 59 3c 2f 69 3e 20 61 72 67  the <i>Y</i> arg
f030: 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
f040: 2c 20 73 70 61 63 65 73 20 61 72 65 20 72 65 6d  , spaces are rem
f050: 6f 76 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  oved..}..funcdef
f060: 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d 20   {max(X,Y,...)} 
f070: 7b 6d 61 78 43 6f 72 65 46 75 6e 63 20 6d 61 78  {maxCoreFunc max
f080: 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65  } {.  Return the
f090: 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74   argument with t
f0a0: 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
f0b0: 2e 20 20 4f 72 20 72 65 74 75 72 6e 20 4e 55 4c  .  Or return NUL
f0c0: 4c 20 69 66 20 61 6e 79 20 61 72 67 75 6d 65 6e  L if any argumen
f0d0: 74 0a 20 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 4e  t.  is NULL..  N
f0e0: 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28  ote that <b>max(
f0f0: 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c  )</b> is a simpl
f100: 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a  e function when.
f110: 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f    it has 2 or mo
f120: 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74  re arguments but
f130: 20 63 6f 6e 76 65 72 74 73 20 74 6f 20 61 6e 20   converts to an 
f140: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
f150: 6f 6e 20 69 66 20 67 69 76 65 6e 0a 20 20 6f 6e  on if given.  on
f160: 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  ly a single argu
f170: 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ment..}..funcdef
f180: 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20   {min(X,Y,...)} 
f190: 7b 6d 69 6e 43 6f 72 65 46 75 6e 63 20 6d 69 6e  {minCoreFunc min
f1a0: 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65  } {.  Return the
f1b0: 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74   argument with t
f1c0: 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65  he minimum value
f1d0: 2e 20 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 3c  . .  Note that <
f1e0: 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61  b>min()</b> is a
f1f0: 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
f200: 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32   when.  it has 2
f210: 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e   or more argumen
f220: 74 73 20 62 75 74 20 63 6f 6e 76 65 72 74 73 20  ts but converts 
f230: 74 6f 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  to an aggregate 
f240: 66 75 6e 63 74 69 6f 6e 20 69 66 20 67 69 76 65  function if give
f250: 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c  n.  only a singl
f260: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66  e argument..}..f
f270: 75 6e 63 64 65 66 20 7b 6e 75 6c 6c 69 66 28 58  uncdef {nullif(X
f280: 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75  ,Y)} {} {.  Retu
f290: 72 6e 20 74 68 65 20 66 69 72 73 74 20 61 72 67  rn the first arg
f2a0: 75 6d 65 6e 74 20 69 66 20 74 68 65 20 61 72 67  ument if the arg
f2b0: 75 6d 65 6e 74 73 20 61 72 65 20 64 69 66 66 65  uments are diffe
f2c0: 72 65 6e 74 2c 20 0a 20 20 6f 74 68 65 72 77 69  rent, .  otherwi
f2d0: 73 65 20 72 65 74 75 72 6e 20 4e 55 4c 4c 2e 0a  se return NULL..
f2e0: 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 71 75 6f 74  }..funcdef {quot
f2f0: 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 54 68 69  e(X)} {} {.  Thi
f300: 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  s routine return
f310: 73 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68  s a string which
f320: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
f330: 0a 20 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20  .  its argument 
f340: 73 75 69 74 61 62 6c 65 20 66 6f 72 20 69 6e 63  suitable for inc
f350: 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e 6f 74  lusion into anot
f360: 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  her SQL statemen
f370: 74 2e 0a 20 20 53 74 72 69 6e 67 73 20 61 72 65  t..  Strings are
f380: 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 20 73   surrounded by s
f390: 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77 69 74  ingle-quotes wit
f3a0: 68 20 65 73 63 61 70 65 73 20 6f 6e 20 69 6e 74  h escapes on int
f3b0: 65 72 69 6f 72 20 71 75 6f 74 65 73 0a 20 20 61  erior quotes.  a
f3c0: 73 20 6e 65 65 64 65 64 2e 20 20 42 4c 4f 42 73  s needed.  BLOBs
f3d0: 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20   are encoded as 
f3e0: 68 65 78 61 64 65 63 69 6d 61 6c 20 6c 69 74 65  hexadecimal lite
f3f0: 72 61 6c 73 2e 0a 20 20 53 51 4c 69 74 65 20 75  rals..  SQLite u
f400: 73 65 73 20 74 68 69 73 20 66 75 6e 63 74 69 6f  ses this functio
f410: 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 20 69 6e 20  n internally in 
f420: 69 74 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  its implementati
f430: 6f 6e 20 6f 66 20 5b 56 41 43 55 55 4d 5d 0a 20  on of [VACUUM]. 
f440: 20 73 6f 20 69 66 20 74 68 69 73 20 66 75 6e 63   so if this func
f450: 74 69 6f 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  tion is overload
f460: 69 6e 67 20 74 6f 20 70 72 6f 76 69 64 65 20 69  ing to provide i
f470: 6e 63 6f 6d 70 61 74 69 62 6c 65 20 62 65 68 61  ncompatible beha
f480: 76 69 6f 72 2c 20 74 68 65 0a 20 20 5b 56 41 43  vior, the.  [VAC
f490: 55 55 4d 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c  UUM] command wil
f4a0: 6c 20 6c 69 6b 65 6c 79 20 63 65 61 73 65 20 74  l likely cease t
f4b0: 6f 20 77 6f 72 6b 2e 0a 7d 0a 0a 66 75 6e 63 64  o work..}..funcd
f4c0: 65 66 20 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d  ef {random()} {}
f4d0: 20 7b 0a 20 20 52 65 74 75 72 6e 20 61 20 70 73   {.  Return a ps
f4e0: 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74 65  eudo-random inte
f4f0: 67 65 72 0a 20 20 62 65 74 77 65 65 6e 20 2d 39  ger.  between -9
f500: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
f510: 30 38 20 61 6e 64 20 2b 39 32 32 33 33 37 32 30  08 and +92233720
f520: 33 36 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a 0a  36854775807..}..
f530: 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 62  funcdef {randomb
f540: 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 52  lob(N)} {} {.  R
f550: 65 74 75 72 6e 20 61 6e 20 3c 69 3e 4e 3c 2f 69  eturn an <i>N</i
f560: 3e 2d 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e 74  >-byte blob cont
f570: 61 69 6e 69 6e 67 20 70 73 65 75 64 6f 2d 72 61  aining pseudo-ra
f580: 6e 64 6f 6d 20 62 79 74 65 73 2e 0a 20 20 3c 69  ndom bytes..  <i
f590: 3e 4e 3c 2f 69 3e 20 73 68 6f 75 6c 64 20 62 65  >N</i> should be
f5a0: 20 61 20 70 6f 73 74 69 76 65 20 69 6e 74 65 67   a postive integ
f5b0: 65 72 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a 20  er...  <p>Hint: 
f5c0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61   applications ca
f5d0: 6e 20 67 65 6e 65 72 61 74 65 20 67 6c 6f 62 61  n generate globa
f5e0: 6c 6c 79 20 75 6e 69 71 75 65 20 69 64 65 6e 74  lly unique ident
f5f0: 69 66 69 65 72 73 0a 20 20 75 73 69 6e 67 20 74  ifiers.  using t
f600: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f 67  his function tog
f610: 65 74 68 65 72 20 77 69 74 68 20 5b 68 65 78 28  ether with [hex(
f620: 29 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77  )] and/or.  [low
f630: 65 72 28 29 5d 20 6c 69 6b 65 20 74 68 69 73 3a  er()] like this:
f640: 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75  </p>..  <blockqu
f650: 6f 74 65 3e 0a 20 20 68 65 78 28 72 61 6e 64 6f  ote>.  hex(rando
f660: 6d 62 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c 2f  mblob(16))<br></
f670: 62 72 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78 28  br>.  lower(hex(
f680: 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 29  randomblob(16)))
f690: 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  .  </blockquote>
f6a0: 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65 70  .}..funcdef {rep
f6b0: 6c 61 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20  lace(X,Y,Z)} {} 
f6c0: 7b 0a 20 20 52 65 74 75 72 6e 20 61 20 73 74 72  {.  Return a str
f6d0: 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 73 75  ing formed by su
f6e0: 62 73 74 69 74 75 74 69 6e 67 20 73 74 72 69 6e  bstituting strin
f6f0: 67 20 3c 69 3e 5a 3c 2f 69 3e 20 66 6f 72 0a 20  g <i>Z</i> for. 
f700: 20 65 76 65 72 79 20 6f 63 63 75 72 72 61 6e 63   every occurranc
f710: 65 20 6f 66 20 73 74 72 69 6e 67 20 3c 69 3e 59  e of string <i>Y
f720: 3c 2f 69 3e 20 69 6e 20 73 74 72 69 6e 67 20 3c  </i> in string <
f730: 69 3e 58 3c 2f 69 3e 2e 20 20 54 68 65 20 5b 42  i>X</i>.  The [B
f740: 49 4e 41 52 59 5d 0a 20 20 63 6f 6c 6c 61 74 69  INARY].  collati
f750: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
f760: 73 65 64 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  sed for comparis
f770: 6f 6e 73 2e 20 20 49 66 20 3c 69 3e 59 3c 2f 69  ons.  If <i>Y</i
f780: 3e 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 20 20  > is an empty.  
f790: 73 74 72 69 6e 67 20 74 68 65 6e 20 72 65 74 75  string then retu
f7a0: 72 6e 20 3c 69 3e 58 3c 2f 69 3e 20 75 6e 63 68  rn <i>X</i> unch
f7b0: 61 6e 67 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65  anged..}..funcde
f7c0: 66 20 7b 72 6f 75 6e 64 28 58 29 20 72 6f 75 6e  f {round(X) roun
f7d0: 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 52  d(X,Y)} {} {.  R
f7e0: 6f 75 6e 64 20 6f 66 66 20 74 68 65 20 6e 75 6d  ound off the num
f7f0: 62 65 72 20 3c 69 3e 58 3c 2f 69 3e 20 74 6f 20  ber <i>X</i> to 
f800: 3c 69 3e 59 3c 2f 69 3e 20 64 69 67 69 74 73 20  <i>Y</i> digits 
f810: 74 6f 20 74 68 65 0a 20 20 72 69 67 68 74 20 6f  to the.  right o
f820: 66 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f  f the decimal po
f830: 69 6e 74 2e 20 20 49 66 20 74 68 65 20 3c 69 3e  int.  If the <i>
f840: 59 3c 2f 69 3e 20 61 72 67 75 6d 65 6e 74 20 69  Y</i> argument i
f850: 73 20 6f 6d 69 74 74 65 64 2c 20 30 20 69 73 20  s omitted, 0 is 
f860: 0a 20 20 61 73 73 75 6d 65 64 2e 0a 7d 0a 0a 66  .  assumed..}..f
f870: 75 6e 63 64 65 66 20 7b 72 74 72 69 6d 28 58 29  uncdef {rtrim(X)
f880: 20 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20   rtrim(X,Y)} {} 
f890: 7b 0a 20 20 52 65 74 75 72 6e 20 61 20 73 74 72  {.  Return a str
f8a0: 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65  ing formed by re
f8b0: 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61  moving any and a
f8c0: 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73 20  ll.  characters 
f8d0: 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 3c  that appear in <
f8e0: 69 3e 59 3c 2f 69 3e 20 66 72 6f 6d 20 74 68 65  i>Y</i> from the
f8f0: 20 72 69 67 68 74 20 73 69 64 65 20 6f 66 20 3c   right side of <
f900: 69 3e 58 3c 2f 69 3e 2e 0a 20 20 49 66 20 74 68  i>X</i>..  If th
f910: 65 20 3c 69 3e 59 3c 2f 69 3e 20 61 72 67 75 6d  e <i>Y</i> argum
f920: 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
f930: 73 70 61 63 65 73 20 61 72 65 20 72 65 6d 6f 76  spaces are remov
f940: 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ed..}..funcdef {
f950: 73 6f 75 6e 64 65 78 28 58 29 7d 20 7b 7d 20 7b  soundex(X)} {} {
f960: 0a 20 20 43 6f 6d 70 75 74 65 20 74 68 65 20 73  .  Compute the s
f970: 6f 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67 20  oundex encoding 
f980: 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 3c 69  of the string <i
f990: 3e 58 3c 2f 69 3e 2e 0a 20 20 54 68 65 20 73 74  >X</i>..  The st
f9a0: 72 69 6e 67 20 22 3f 30 30 30 22 20 69 73 20 72  ring "?000" is r
f9b0: 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 61  eturned if the a
f9c0: 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 2e  rgument is NULL.
f9d0: 0a 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  .  This function
f9e0: 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
f9f0: 20 53 51 4c 69 74 65 20 62 79 20 64 65 66 61 75   SQLite by defau
fa00: 6c 74 2e 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79  lt..  It is only
fa10: 20 61 76 61 69 6c 61 62 6c 65 20 74 68 65 20 2d   available the -
fa20: 44 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 3d  DSQLITE_SOUNDEX=
fa30: 31 20 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f  1 compiler optio
fa40: 6e 0a 20 20 69 73 20 75 73 65 64 20 77 68 65 6e  n.  is used when
fa50: 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74   SQLite is built
fa60: 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ..}..funcdef {sq
fa70: 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20  lite_version()} 
fa80: 7b 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 7d  {sqlite_version}
fa90: 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20   {.  Return the 
faa0: 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67 20 66  version string f
fab0: 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
fac0: 62 72 61 72 79 0a 20 20 74 68 61 74 20 69 73 20  brary.  that is 
fad0: 72 75 6e 6e 69 6e 67 2e 20 20 45 78 61 6d 70 6c  running.  Exampl
fae0: 65 3a 20 20 22 33 2e 35 2e 39 22 0a 7d 0a 0a 66  e:  "3.5.9".}..f
faf0: 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72 28 58  uncdef {substr(X
fb00: 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58 2c 59  ,Y,Z) substr(X,Y
fb10: 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e  )} {} {.  Return
fb20: 20 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20   a substring of 
fb30: 69 6e 70 75 74 20 73 74 72 69 6e 67 20 3c 69 3e  input string <i>
fb40: 58 3c 2f 69 3e 20 74 68 61 74 20 62 65 67 69 6e  X</i> that begin
fb50: 73 0a 20 20 77 69 74 68 20 74 68 65 20 3c 69 3e  s.  with the <i>
fb60: 59 3c 2f 69 3e 2d 74 68 20 63 68 61 72 61 63 74  Y</i>-th charact
fb70: 65 72 20 61 6e 64 20 77 68 69 63 68 20 69 73 20  er and which is 
fb80: 3c 69 3e 5a 3c 2f 69 3e 20 63 68 61 72 61 63 74  <i>Z</i> charact
fb90: 65 72 73 20 6c 6f 6e 67 2e 0a 20 20 49 66 20 3c  ers long..  If <
fba0: 69 3e 5a 3c 2f 69 3e 20 69 73 20 6f 6d 69 74 74  i>Z</i> is omitt
fbb0: 65 64 20 74 68 65 6e 20 61 6c 6c 20 63 68 61 72  ed then all char
fbc0: 61 63 74 65 72 20 74 68 72 6f 75 67 68 20 74 68  acter through th
fbd0: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74 72  e end of the str
fbe0: 69 6e 67 0a 20 20 61 72 65 20 72 65 74 75 72 6e  ing.  are return
fbf0: 65 64 2e 0a 20 20 54 68 65 20 6c 65 66 74 2d 6d  ed..  The left-m
fc00: 6f 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  ost character of
fc10: 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 75 6d   <i>X</i> is num
fc20: 62 65 72 20 31 2e 20 20 49 66 20 3c 69 3e 59 3c  ber 1.  If <i>Y<
fc30: 2f 69 3e 20 69 73 20 6e 65 67 61 74 69 76 65 0a  /i> is negative.
fc40: 20 20 74 68 65 20 74 68 65 20 66 69 72 73 74 20    the the first 
fc50: 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
fc60: 20 73 75 62 73 74 72 69 6e 67 20 69 73 20 66 6f   substring is fo
fc70: 75 6e 64 20 62 79 20 63 6f 75 6e 74 69 6e 67 20  und by counting 
fc80: 66 72 6f 6d 20 74 68 65 0a 20 20 72 69 67 68 74  from the.  right
fc90: 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65   rather than the
fca0: 20 6c 65 66 74 2e 20 20 49 66 20 3c 69 3e 58 3c   left.  If <i>X<
fcb0: 2f 69 3e 20 69 73 20 73 74 72 69 6e 67 0a 20 20  /i> is string.  
fcc0: 74 68 65 6e 20 63 68 61 72 61 63 74 65 72 73 20  then characters 
fcd0: 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74 6f  indices refer to
fce0: 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20 63 68   actual UTF-8 ch
fcf0: 61 72 61 63 74 65 72 73 2e 20 20 49 66 0a 20 20  aracters.  If.  
fd00: 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 61 20 42 4c  <i>X</i> is a BL
fd10: 4f 42 20 74 68 65 6e 20 74 68 65 20 69 6e 64 69  OB then the indi
fd20: 63 65 73 20 72 65 66 65 72 20 74 6f 20 62 79 74  ces refer to byt
fd30: 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  es..}..funcdef {
fd40: 74 72 69 6d 28 58 29 20 74 72 69 6d 28 58 2c 59  trim(X) trim(X,Y
fd50: 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e  )} {} {.  Return
fd60: 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64   a string formed
fd70: 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79   by removing any
fd80: 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61   and all.  chara
fd90: 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61  cters that appea
fda0: 72 20 69 6e 20 3c 69 3e 59 3c 2f 69 3e 20 66 72  r in <i>Y</i> fr
fdb0: 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20 6f 66 20  om both ends of 
fdc0: 3c 69 3e 58 3c 2f 69 3e 2e 0a 20 20 49 66 20 74  <i>X</i>..  If t
fdd0: 68 65 20 3c 69 3e 59 3c 2f 69 3e 20 61 72 67 75  he <i>Y</i> argu
fde0: 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
fdf0: 20 73 70 61 63 65 73 20 61 72 65 20 72 65 6d 6f   spaces are remo
fe00: 76 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ved..}..funcdef 
fe10: 7b 74 79 70 65 6f 66 28 58 29 7d 20 7b 7d 20 7b  {typeof(X)} {} {
fe20: 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20 5b 64  .  Return the [d
fe30: 61 74 61 74 79 70 65 5d 20 6f 66 20 74 68 65 20  atatype] of the 
fe40: 65 78 70 72 65 73 73 69 6f 6e 20 3c 69 3e 58 3c  expression <i>X<
fe50: 2f 69 3e 2e 20 20 54 68 65 20 6f 6e 6c 79 20 0a  /i>.  The only .
fe60: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20    return values 
fe70: 61 72 65 20 22 6e 75 6c 6c 22 2c 20 22 69 6e 74  are "null", "int
fe80: 65 67 65 72 22 2c 20 22 72 65 61 6c 22 2c 20 22  eger", "real", "
fe90: 74 65 78 74 22 2c 20 61 6e 64 20 22 62 6c 6f 62  text", and "blob
fea0: 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75  "..}..funcdef {u
feb0: 70 70 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  pper(X)} {} {.  
fec0: 52 65 74 75 72 6e 20 61 20 63 6f 70 79 20 6f 66  Return a copy of
fed0: 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 3c 69   input string <i
fee0: 3e 58 3c 2f 69 3e 20 63 6f 6e 76 65 72 74 65 64  >X</i> converted
fef0: 20 74 6f 20 61 6c 6c 0a 20 20 75 70 70 65 72 2d   to all.  upper-
ff00: 63 61 73 65 20 6c 65 74 74 65 72 73 2e 20 20 54  case letters.  T
ff10: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
ff20: 6e 20 6f 66 20 74 68 69 73 20 66 75 6e 63 74 69  n of this functi
ff30: 6f 6e 20 75 73 65 73 20 74 68 65 20 43 20 6c 69  on uses the C li
ff40: 62 72 61 72 79 0a 20 20 72 6f 75 74 69 6e 65 20  brary.  routine 
ff50: 3c 62 3e 74 6f 75 70 70 65 72 28 29 3c 2f 62 3e  <b>toupper()</b>
ff60: 20 77 68 69 63 68 20 6d 65 61 6e 73 20 69 74 20   which means it 
ff70: 6d 61 79 20 6e 6f 74 20 77 6f 72 6b 20 63 6f 72  may not work cor
ff80: 72 65 63 74 6c 79 20 6f 6e 20 0a 20 20 6e 6f 6e  rectly on .  non
ff90: 2d 41 53 43 49 49 20 55 54 46 2d 38 20 73 74 72  -ASCII UTF-8 str
ffa0: 69 6e 67 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ings..}..funcdef
ffb0: 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b   {zeroblob(N)} {
ffc0: 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 61 20 42  } {.  Return a B
ffd0: 4c 4f 42 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f  LOB consisting o
ffe0: 66 20 4e 20 62 79 74 65 73 20 6f 66 20 30 78 30  f N bytes of 0x0
fff0: 30 2e 20 20 53 51 4c 69 74 65 0a 20 20 6d 61 6e  0.  SQLite.  man
10000 61 67 65 73 20 74 68 65 73 65 20 7a 65 72 6f 62  ages these zerob
10010 6c 6f 62 73 20 76 65 72 79 20 65 66 66 69 63 69  lobs very effici
10020 65 6e 74 6c 79 2e 20 20 5a 65 72 6f 62 6c 6f 62  ently.  Zeroblob
10030 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
10040 0a 20 20 72 65 73 65 72 76 65 20 73 70 61 63 65  .  reserve space
10050 20 66 6f 72 20 61 20 42 4c 4f 42 20 74 68 61 74   for a BLOB that
10060 20 69 73 20 6c 61 74 65 72 20 77 72 69 74 74 65   is later writte
10070 6e 20 75 73 69 6e 67 20 0a 20 20 5b 73 71 6c 69  n using .  [sqli
10080 74 65 33 5f 62 6c 6f 62 5f 6f 70 65 6e 28 29 20  te3_blob_open() 
10090 7c 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c  | incremental BL
100a0 4f 42 20 49 2f 4f 5d 2e 0a 7d 0a 3c 2f 74 63 6c  OB I/O]..}.</tcl
100b0 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c  >.</table>..<tcl
100c0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
100d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
100e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
100f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10110 0a 53 65 63 74 69 6f 6e 20 7b 44 61 74 65 20 41  .Section {Date A
10120 6e 64 20 54 69 6d 65 20 46 75 6e 63 74 69 6f 6e  nd Time Function
10130 73 7d 20 64 61 74 65 66 75 6e 63 20 7b 64 61 74  s} datefunc {dat
10140 65 66 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  efunc}.</tcl>..<
10150 70 3e 0a 53 51 4c 69 74 65 20 73 75 70 70 6f 72  p>.SQLite suppor
10160 74 73 20 66 69 76 65 20 64 61 74 65 20 61 6e 64  ts five date and
10170 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
10180 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e  as follows:.</p>
10190 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  ..<p>.<ol>.<li> 
101a0 3c 62 3e 64 61 74 65 28 3c 2f 62 3e 3c 69 3e 74  <b>date(</b><i>t
101b0 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66  imestring, modif
101c0 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e  ier, modifier, .
101d0 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 20 3c  ..</i><b>)</b> <
101e0 2f 6c 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 74 69 6d  /li>.<li> <b>tim
101f0 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72  e(</b><i>timestr
10200 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
10210 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
10220 3c 62 3e 29 3c 2f 62 3e 20 3c 2f 6c 69 3e 0a 3c  <b>)</b> </li>.<
10230 6c 69 3e 20 3c 62 3e 64 61 74 65 74 69 6d 65 28  li> <b>datetime(
10240 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e  </b><i>timestrin
10250 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
10260 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
10270 3e 29 3c 2f 62 3e 20 3c 2f 6c 69 3e 0a 3c 6c 69  >)</b> </li>.<li
10280 3e 20 3c 62 3e 6a 75 6c 69 61 6e 64 61 79 28 3c  > <b>julianday(<
10290 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67  /b><i>timestring
102a0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
102b0 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
102c0 29 3c 2f 62 3e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  )</b> </li>.<li>
102d0 20 3c 62 3e 73 74 72 66 74 69 6d 65 28 3c 2f 62   <b>strftime(</b
102e0 3e 3c 69 3e 66 6f 72 6d 61 74 2c 20 74 69 6d 65  ><i>format, time
102f0 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
10300 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
10310 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 20 3c 2f 6c 69  /i><b>)</b> </li
10320 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 41 6c 6c  >.</ol>..<p>.All
10330 20 66 69 76 65 20 66 75 6e 63 74 69 6f 6e 73 20   five functions 
10340 74 61 6b 65 20 61 20 74 69 6d 65 20 73 74 72 69  take a time stri
10350 6e 67 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e  ng as an argumen
10360 74 2e 20 54 68 65 20 74 69 6d 65 20 73 74 72 69  t. The time stri
10370 6e 67 0a 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62  ng.is followed b
10380 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d  y zero or more m
10390 6f 64 69 66 69 65 72 73 2e 20 0a 54 68 65 20 73  odifiers. .The s
103a0 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69  trftime() functi
103b0 6f 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20 61 20  on also takes a 
103c0 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 61 73  format string as
103d0 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d   its first argum
103e0 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54  ent..</p>..<p>.T
103f0 68 65 20 64 61 74 65 28 29 20 66 75 6e 63 74 69  he date() functi
10400 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  on returns the d
10410 61 74 65 20 69 6e 20 74 68 69 73 20 66 6f 72 6d  ate in this form
10420 61 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44 2e 20  at: YYYY-MM-DD. 
10430 0a 54 68 65 20 74 69 6d 65 28 29 20 66 75 6e 63  .The time() func
10440 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
10450 20 74 69 6d 65 20 61 73 20 48 48 3a 4d 4d 3a 53   time as HH:MM:S
10460 53 2e 20 0a 54 68 65 20 64 61 74 65 74 69 6d 65  S. .The datetime
10470 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
10480 72 6e 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20  rns "YYYY-MM-DD 
10490 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a 54 68 65 20  HH:MM:SS". .The 
104a0 6a 75 6c 69 61 6e 64 61 79 28 29 20 66 75 6e 63  julianday() func
104b0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
104c0 20 0a 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a   .<a href="http:
104d0 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
104e0 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64  rg/wiki/Julian_d
104f0 61 79 22 3e 4a 75 6c 69 61 6e 20 64 61 79 3c 2f  ay">Julian day</
10500 61 3e 20 2d 20 0a 6e 75 6d 62 65 72 20 6f 66 20  a> - .number of 
10510 64 61 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20  days since noon 
10520 69 6e 20 47 72 65 65 6e 77 69 63 68 20 6f 6e 20  in Greenwich on 
10530 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20 34 37 31  November 24, 471
10540 34 20 42 2e 43 2e 20 0a 28 3c 61 20 68 72 65 66  4 B.C. .(<a href
10550 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  ="http://en.wiki
10560 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 50  pedia.org/wiki/P
10570 72 6f 6c 65 70 74 69 63 5f 47 72 65 67 6f 72 69  roleptic_Gregori
10580 61 6e 5f 63 61 6c 65 6e 64 61 72 22 3e 0a 50 72  an_calendar">.Pr
10590 6f 6c 65 70 74 69 63 20 47 72 65 67 6f 72 69 61  oleptic Gregoria
105a0 6e 20 63 61 6c 65 6e 64 61 72 3c 2f 61 3e 29 2e  n calendar</a>).
105b0 20 0a 54 68 65 20 73 74 72 66 74 69 6d 65 28 29   .The strftime()
105c0 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
105d0 20 74 68 65 20 64 61 74 65 20 66 6f 72 6d 61 74   the date format
105e0 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ted according to
105f0 20 0a 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72   .the format str
10600 69 6e 67 20 73 70 65 63 69 66 69 65 64 20 61 73  ing specified as
10610 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   the first argum
10620 65 6e 74 2e 0a 54 68 65 20 66 6f 72 6d 61 74 20  ent..The format 
10630 73 74 72 69 6e 67 20 73 75 70 70 6f 72 74 73 20  string supports 
10640 74 68 65 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e 20  the most common 
10650 73 75 62 73 74 69 74 75 74 69 6f 6e 73 20 66 6f  substitutions fo
10660 75 6e 64 20 69 6e 20 74 68 65 20 0a 3c 61 20 68  und in the .<a h
10670 72 65 66 3d 22 68 74 74 70 3a 2f 2f 6f 70 65 6e  ref="http://open
10680 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65  group.org/online
10690 70 75 62 73 2f 30 30 37 39 30 38 37 39 39 2f 78  pubs/007908799/x
106a0 73 68 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c  sh/strftime.html
106b0 22 3e 0a 73 74 72 66 74 69 6d 65 28 29 20 66 75  ">.strftime() fu
106c0 6e 63 74 69 6f 6e 3c 2f 61 3e 20 66 72 6f 6d 20  nction</a> from 
106d0 0a 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20  .the standard C 
106e0 6c 69 62 72 61 72 79 20 70 6c 75 73 20 74 77 6f  library plus two
106f0 20 6e 65 77 20 73 75 62 73 74 69 74 75 74 69 6f   new substitutio
10700 6e 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a 54  ns, %f and %J..T
10710 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20  he following is 
10720 61 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74 20  a complete list 
10730 6f 66 20 76 61 6c 69 64 20 73 74 72 66 74 69 6d  of valid strftim
10740 65 28 29 20 73 75 62 73 74 69 74 75 74 69 6f 6e  e() substitution
10750 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  s:.</p>..<blockq
10760 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  uote>.<table bor
10770 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64  der="0" cellpadd
10780 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63  ing="0" cellspac
10790 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64  ing="0">.<tr><td
107a0 3e 3c 74 64 20 77 69 64 74 68 3d 22 31 30 22 3e  ><td width="10">
107b0 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c  <td></tr>..<tr><
107c0 74 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e 20  td> %d <td><td> 
107d0 64 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30 30  day of month: 00
107e0 0a 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74 64  .<tr><td> %f <td
107f0 3e 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e 61 6c  ><td> fractional
10800 20 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53 53   seconds: SS.SSS
10810 0a 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74 64  .<tr><td> %H <td
10820 3e 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d 32  ><td> hour: 00-2
10830 34 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20 3c  4 .<tr><td> %j <
10840 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 79  td><td> day of y
10850 65 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74 72  ear: 001-366.<tr
10860 3e 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74 64  ><td> %J <td><td
10870 3e 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d  > Julian day num
10880 62 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d 20  ber.<tr><td> %m 
10890 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20  <td><td> month: 
108a0 30 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20 25  01-12.<tr><td> %
108b0 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75 74  M <td><td> minut
108c0 65 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64  e: 00-59.<tr><td
108d0 3e 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73 65  > %s <td><td> se
108e0 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30  conds since 1970
108f0 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e 20  -01-01.<tr><td> 
10900 25 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f  %S <td><td> seco
10910 6e 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c  nds: 00-59.<tr><
10920 74 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e 20  td> %w <td><td> 
10930 64 61 79 20 6f 66 20 77 65 65 6b 20 30 2d 36 20  day of week 0-6 
10940 77 69 74 68 20 73 75 6e 64 61 79 3d 3d 30 0a 3c  with sunday==0.<
10950 74 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e 3c  tr><td> %W <td><
10960 74 64 3e 20 77 65 65 6b 20 6f 66 20 79 65 61 72  td> week of year
10970 3a 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e  : 00-53.<tr><td>
10980 20 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65 61   %Y <td><td> yea
10990 72 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c 74 72  r: 0000-9999.<tr
109a0 3e 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74 64  ><td> %% <td><td
109b0 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  > %.</table>.</b
109c0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a  lockquote>..<p>.
109d0 4e 6f 74 69 63 65 20 74 68 61 74 20 61 6c 6c 20  Notice that all 
109e0 6f 74 68 65 72 20 64 61 74 65 20 61 6e 64 20 74  other date and t
109f0 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61  ime functions ca
10a00 6e 20 62 65 20 65 78 70 72 65 73 73 65 64 0a 69  n be expressed.i
10a10 6e 20 74 65 72 6d 73 20 6f 66 20 73 74 72 66 74  n terms of strft
10a20 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  ime():.</p>..<bl
10a30 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
10a40 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c   border="0" cell
10a50 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c  padding="0" cell
10a60 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72  spacing="0">.<tr
10a70 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e  ><td><b>Function
10a80 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d 22 33  </b><td width="3
10a90 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76 61  0"><td><b>Equiva
10aa0 6c 65 6e 74 20 73 74 72 66 74 69 6d 65 28 29 3c  lent strftime()<
10ab0 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64  /b>.<tr><td>   d
10ac0 61 74 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74  ate(...)      <t
10ad0 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65  d><td>  strftime
10ae0 28 22 25 59 2d 25 6d 2d 25 64 22 2c 20 2e 2e 2e  ("%Y-%m-%d", ...
10af0 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69 6d  ).<tr><td>   tim
10b00 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e  e(...)      <td>
10b10 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 22  <td>  strftime("
10b20 25 48 3a 25 4d 3a 25 53 22 2c 20 2e 2e 2e 29 0a  %H:%M:%S", ...).
10b30 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 74  <tr><td>   datet
10b40 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74  ime(...)  <td><t
10b50 64 3e 20 20 73 74 72 66 74 69 6d 65 28 22 25 59  d>  strftime("%Y
10b60 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 22  -%m-%d %H:%M:%S"
10b70 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
10b80 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e 29    julianday(...)
10b90 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
10ba0 69 6d 65 28 22 25 4a 22 2c 20 2e 2e 2e 29 0a 3c  ime("%J", ...).<
10bb0 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
10bc0 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6f  uote>..<p>.The o
10bd0 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66 6f 72 20  nly reasons for 
10be0 70 72 6f 76 69 64 69 6e 67 20 66 75 6e 63 74 69  providing functi
10bf0 6f 6e 73 20 6f 74 68 65 72 20 74 68 61 6e 20 73  ons other than s
10c00 74 72 66 74 69 6d 65 28 29 20 69 73 0a 66 6f 72  trftime() is.for
10c10 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 61 6e 64   convenience and
10c20 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63 79 2e   for efficiency.
10c30 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65 20  .</p>..<h3>Time 
10c40 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70  Strings</h3>..<p
10c50 3e 41 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63  >A time string c
10c60 61 6e 20 62 65 20 69 6e 20 61 6e 79 20 6f 66 20  an be in any of 
10c70 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f  the following fo
10c80 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  rmats:</p>..<ol>
10c90 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
10ca0 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  -DD</i>.<li> <i>
10cb0 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
10cc0 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
10cd0 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
10ce0 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
10cf0 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
10d00 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  .SSS</i>.<li> <i
10d10 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c  >YYYY-MM-DD</i><
10d20 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3c  b>T</b><i>HH:MM<
10d30 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
10d40 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f  -MM-DD</i><b>T</
10d50 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69  b><i>HH:MM:SS</i
10d60 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d  >.<li> <i>YYYY-M
10d70 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e  M-DD</i><b>T</b>
10d80 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c  <i>HH:MM:SS.SSS<
10d90 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d  /i>.<li> <i>HH:M
10da0 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48  M</i>.<li> <i>HH
10db0 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  :MM:SS</i>.<li> 
10dc0 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c  <i>HH:MM:SS.SSS<
10dd0 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e 6f 77 3c  /i>.<li> <b>now<
10de0 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44 44 44 44  /b>.<li> <i>DDDD
10df0 44 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e  DDDDDD</i>.</ol>
10e00 0a 0a 3c 70 3e 0a 49 6e 20 66 6f 72 6d 61 74 73  ..<p>.In formats
10e10 20 35 20 74 68 72 6f 75 67 68 20 37 2c 20 74 68   5 through 7, th
10e20 65 20 22 54 22 20 69 73 20 61 20 6c 69 74 65 72  e "T" is a liter
10e30 61 6c 20 63 68 61 72 61 63 74 65 72 20 73 65 70  al character sep
10e40 61 72 61 74 69 6e 67 20 0a 74 68 65 20 64 61 74  arating .the dat
10e50 65 20 61 6e 64 20 74 68 65 20 74 69 6d 65 2c 20  e and the time, 
10e60 61 73 20 72 65 71 75 69 72 65 64 20 62 79 20 0a  as required by .
10e70 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  <a href="http://
10e80 77 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e  www.w3c.org/TR/N
10e90 4f 54 45 2d 64 61 74 65 74 69 6d 65 22 3e 49 53  OTE-datetime">IS
10ea0 4f 2d 38 36 30 31 3c 2f 61 3e 2e 20 0a 46 6f 72  O-8601</a>. .For
10eb0 6d 61 74 73 20 38 20 74 68 72 6f 75 67 68 20 31  mats 8 through 1
10ec0 30 20 74 68 61 74 20 73 70 65 63 69 66 79 20 6f  0 that specify o
10ed0 6e 6c 79 20 61 20 74 69 6d 65 20 61 73 73 75 6d  nly a time assum
10ee0 65 20 61 20 64 61 74 65 20 6f 66 20 0a 32 30 30  e a date of .200
10ef0 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20  0-01-01. Format 
10f00 31 31 2c 20 74 68 65 20 73 74 72 69 6e 67 20 27  11, the string '
10f10 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76 65 72 74  now', is convert
10f20 65 64 20 69 6e 74 6f 20 74 68 65 20 0a 63 75 72  ed into the .cur
10f30 72 65 6e 74 20 64 61 74 65 20 61 6e 64 20 74 69  rent date and ti
10f40 6d 65 20 61 73 20 6f 62 74 61 69 6e 65 64 20 66  me as obtained f
10f50 72 6f 6d 20 74 68 65 20 78 43 75 72 72 65 6e 74  rom the xCurrent
10f60 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74  Time method.of t
10f70 68 65 20 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d  he [sqlite3_vfs]
10f80 20 6f 62 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a   object in use..
10f90 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  <a href="http://
10fa0 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
10fb0 2f 77 69 6b 69 2f 43 6f 6f 72 64 69 6e 61 74 65  /wiki/Coordinate
10fc0 64 5f 55 6e 69 76 65 72 73 61 6c 5f 54 69 6d 65  d_Universal_Time
10fd0 22 3e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f  ">.Universal Coo
10fe0 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55  rdinated Time (U
10ff0 54 43 29 3c 2f 61 3e 20 69 73 20 75 73 65 64 2e  TC)</a> is used.
11000 20 0a 46 6f 72 6d 61 74 20 31 32 20 69 73 20 74   .Format 12 is t
11010 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 68 74 74  he .<a href="htt
11020 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
11030 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e  .org/wiki/Julian
11040 5f 64 61 79 22 3e 4a 75 6c 69 61 6e 20 64 61 79  _day">Julian day
11050 20 6e 75 6d 62 65 72 3c 2f 61 3e 0a 65 78 70 72   number</a>.expr
11060 65 73 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74  essed as a float
11070 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
11080 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66  .</p>..<h3>Modif
11090 69 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  iers</h3>..<p>Th
110a0 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61  e time string ca
110b0 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  n be followed by
110c0 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f   zero or more mo
110d0 64 69 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c  difiers that .al
110e0 74 65 72 20 74 68 65 20 64 61 74 65 20 61 6e 64  ter the date and
110f0 20 74 69 6d 65 20 73 74 72 69 6e 67 2e 20 20 45   time string.  E
11100 61 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20  ach modifier.is 
11110 61 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  a transformation
11120 20 74 68 61 74 20 69 73 20 61 70 70 6c 69 65 64   that is applied
11130 20 74 6f 20 74 68 65 20 74 69 6d 65 20 73 74 72   to the time str
11140 69 6e 67 20 74 6f 20 69 74 73 20 6c 65 66 74 2e  ing to its left.
11150 0a 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61  .Modifiers are a
11160 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74  pplied from left
11170 20 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72   to right; order
11180 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 54   is important..T
11190 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f 64  he available mod
111a0 69 66 69 65 72 73 20 61 72 65 20 61 73 20 66 6f  ifiers are as fo
111b0 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  llows.</p>..<ol>
111c0 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a 3c  .<li> NNN days.<
111d0 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c 6c  li> NNN hours.<l
111e0 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a 3c  i> NNN minutes.<
111f0 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65 63  li> NNN.NNNN sec
11200 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f  onds.<li> NNN mo
11210 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79 65  nths.<li> NNN ye
11220 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f  ars.<li> start o
11230 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74 61  f month.<li> sta
11240 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e 20  rt of year.<li> 
11250 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c 69  start of day.<li
11260 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69 3e  > weekday N.<li>
11270 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e 20   unixepoch.<li> 
11280 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20 75  localtime.<li> u
11290 74 63 20 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68  tc .</ol>..<p>Th
112a0 65 20 66 69 72 73 74 20 73 69 78 20 6d 6f 64 69  e first six modi
112b0 66 69 65 72 73 20 28 31 20 74 68 72 6f 75 67 68  fiers (1 through
112c0 20 36 29 20 0a 73 69 6d 70 6c 79 20 61 64 64 20   6) .simply add 
112d0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 61 6d  the specified am
112e0 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f 20  ount of time to 
112f0 74 68 65 20 64 61 74 65 20 0a 73 70 65 63 69 66  the date .specif
11300 69 65 64 20 62 79 20 74 68 65 20 70 72 65 63 65  ied by the prece
11310 64 69 6e 67 20 74 69 6d 65 73 74 72 69 6e 67 2e  ding timestring.
11320 0a 4e 6f 74 65 20 74 68 61 74 20 22 26 70 6c 75  .Note that "&plu
11330 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20  smn;NNN months" 
11340 77 6f 72 6b 73 20 62 79 20 72 65 6e 64 65 72 69  works by renderi
11350 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  ng the original 
11360 64 61 74 65 20 69 6e 74 6f 0a 74 68 65 20 59 59  date into.the YY
11370 59 59 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c  YY-MM-DD format,
11380 20 61 64 64 69 6e 67 20 74 68 65 20 26 70 6c 75   adding the &plu
11390 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d  smn;NNN to the M
113a0 4d 20 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74  M month value, t
113b0 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20  hen.normalizing 
113c0 74 68 65 20 72 65 73 75 6c 74 2e 20 20 54 68 75  the result.  Thu
113d0 73 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20  s, for example, 
113e0 74 68 65 20 64 61 74 61 20 32 30 30 31 2d 30 33  the data 2001-03
113f0 2d 33 31 20 6d 6f 64 69 66 69 65 64 0a 62 79 20  -31 modified.by 
11400 27 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69  '+1 month' initi
11410 61 6c 6c 79 20 79 69 65 6c 64 73 20 32 30 30 31  ally yields 2001
11420 2d 30 34 2d 33 31 2c 20 62 75 74 20 41 70 72 69  -04-31, but Apri
11430 6c 20 6f 6e 6c 79 20 68 61 73 20 33 30 20 64 61  l only has 30 da
11440 79 73 0a 73 6f 20 74 68 65 20 64 61 74 65 20 69  ys.so the date i
11450 73 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20  s normalized to 
11460 32 30 30 31 2d 30 35 2d 30 31 2e 20 20 41 20 73  2001-05-01.  A s
11470 69 6d 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63  imilar effect oc
11480 63 75 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72  curs when.the or
11490 69 67 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46  iginal date is F
114a0 65 62 72 75 61 72 79 20 32 39 20 6f 66 20 61 20  ebruary 29 of a 
114b0 6c 65 61 70 79 65 61 72 20 61 6e 64 20 74 68 65  leapyear and the
114c0 20 6d 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c   modifier is.&pl
114d0 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65  usmn;N years whe
114e0 72 65 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75  re N is not a mu
114f0 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c  ltiple of four.<
11500 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 22 73 74 61  /p>..<p>The "sta
11510 72 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72 73  rt of" modifiers
11520 20 28 37 20 74 68 72 6f 75 67 68 20 39 29 20 73   (7 through 9) s
11530 68 69 66 74 20 74 68 65 20 64 61 74 65 20 62 61  hift the date ba
11540 63 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65 20  ckwards .to the 
11550 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
11560 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20   current month, 
11570 79 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e  year or day.</p>
11580 0a 0a 3c 70 3e 54 68 65 20 22 77 65 65 6b 64 61  ..<p>The "weekda
11590 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76 61  y" modifier adva
115a0 6e 63 65 73 20 74 68 65 20 64 61 74 65 20 66 6f  nces the date fo
115b0 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e 65 78  rward to the nex
115c0 74 20 64 61 74 65 20 0a 77 68 65 72 65 20 74 68  t date .where th
115d0 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65 72  e weekday number
115e0 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69 73   is N. Sunday is
115f0 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31 2c   0, Monday is 1,
11600 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c 2f   and so forth.</
11610 70 3e 0a 0a 3c 70 3e 54 68 65 20 22 75 6e 69 78  p>..<p>The "unix
11620 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20  epoch" modifier 
11630 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  (11) only works 
11640 69 66 20 69 74 20 69 6d 6d 65 64 69 61 74 65 6c  if it immediatel
11650 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74 69 6d  y follows .a tim
11660 65 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 44  estring in the D
11670 44 44 44 44 44 44 44 44 44 20 66 6f 72 6d 61 74  DDDDDDDDD format
11680 2e 20 0a 54 68 69 73 20 6d 6f 64 69 66 69 65 72  . .This modifier
11690 20 63 61 75 73 65 73 20 74 68 65 20 44 44 44 44   causes the DDDD
116a0 44 44 44 44 44 44 20 74 6f 20 62 65 20 69 6e 74  DDDDDD to be int
116b0 65 72 70 72 65 74 65 64 20 6e 6f 74 20 0a 61 73  erpreted not .as
116c0 20 61 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75   a Julian day nu
116d0 6d 62 65 72 20 61 73 20 69 74 20 6e 6f 72 6d 61  mber as it norma
116e0 6c 6c 79 20 77 6f 75 6c 64 20 62 65 2c 20 62 75  lly would be, bu
116f0 74 20 61 73 0a 3c 61 20 68 72 65 66 3d 22 68 74  t as.<a href="ht
11700 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
11710 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78 5f  a.org/wiki/Unix_
11720 74 69 6d 65 22 3e 55 6e 69 78 20 54 69 6d 65 3c  time">Unix Time<
11730 2f 61 3e 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65  /a> - the .numbe
11740 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r of seconds sin
11750 63 65 20 31 39 37 30 2e 20 20 49 66 20 74 68 65  ce 1970.  If the
11760 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
11770 69 66 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66  ifier does not.f
11780 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74 72 69  ollow a timestri
11790 6e 67 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 44  ng of the form D
117a0 44 44 44 44 44 44 44 44 44 20 77 68 69 63 68 20  DDDDDDDDD which 
117b0 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6e 75  expresses the nu
117c0 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20  mber.of seconds 
117d0 73 69 6e 63 65 20 31 39 37 30 20 6f 72 20 69 66  since 1970 or if
117e0 20 6f 74 68 65 72 20 6d 6f 64 69 66 69 65 72 73   other modifiers
117f0 0a 73 65 70 61 72 61 74 65 20 74 68 65 20 22 75  .separate the "u
11800 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
11810 65 72 20 66 72 6f 6d 20 70 72 69 6f 72 20 44 44  er from prior DD
11820 44 44 44 44 44 44 44 44 20 74 68 65 6e 20 74 68  DDDDDDDD then th
11830 65 0a 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e.behavior is un
11840 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  defined.</p>..<p
11850 3e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65 22  >The "localtime"
11860 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29 20 61   modifier (12) a
11870 73 73 75 6d 65 73 20 74 68 65 20 74 69 6d 65 20  ssumes the time 
11880 73 74 72 69 6e 67 20 74 6f 20 69 74 73 20 6c 65  string to its le
11890 66 74 20 69 73 20 69 6e 0a 55 6e 69 76 65 72 73  ft is in.Univers
118a0 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54  al Coordinated T
118b0 69 6d 65 20 28 55 54 43 29 20 61 6e 64 20 61 64  ime (UTC) and ad
118c0 6a 75 73 74 73 20 74 68 65 20 74 69 6d 65 0a 73  justs the time.s
118d0 74 72 69 6e 67 20 73 6f 20 74 68 61 74 20 69 74  tring so that it
118e0 20 64 69 73 70 6c 61 79 73 20 6c 6f 63 61 6c 74   displays localt
118f0 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61 6c 74  ime.  If "localt
11900 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61 20 74  ime".follows a t
11910 69 6d 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ime that is not 
11920 55 54 43 2c 20 74 68 65 6e 20 74 68 65 20 62 65  UTC, then the be
11930 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69  havior is undefi
11940 6e 65 64 2e 0a 54 68 65 20 22 75 74 63 22 20 69  ned..The "utc" i
11950 73 20 74 68 65 20 6f 70 70 6f 73 69 74 65 20 6f  s the opposite o
11960 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 2e 20 20  f "localtime".  
11970 22 75 74 63 22 20 61 73 73 75 6d 65 73 20 74 68  "utc" assumes th
11980 61 74 20 74 68 65 20 73 74 72 69 6e 67 0a 74 6f  at the string.to
11990 20 69 74 73 20 6c 65 66 74 20 69 73 20 69 6e 20   its left is in 
119a0 74 68 65 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f  the local timezo
119b0 6e 65 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74  ne and adjusts t
119c0 68 61 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65  hat string to be
119d0 20 69 6e 20 55 54 43 2e 0a 49 66 20 74 68 65 20   in UTC..If the 
119e0 70 72 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20  prior string is 
119f0 6e 6f 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65  not in localtime
11a00 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
11a10 74 20 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e  t of "utc" is.un
11a20 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68  defined.</p>..<h
11a30 33 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a  3>Examples</h3>.
11a40 0a 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  .<p>Compute the 
11a50 63 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e  current date.<p>
11a60 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45  ..<blockquote>SE
11a70 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 29  LECT date('now')
11a80 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ;</blockquote>..
11a90 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6c  <p>Compute the l
11aa0 61 73 74 20 64 61 79 20 6f 66 20 74 68 65 20 63  ast day of the c
11ab0 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70  urrent month.</p
11ac0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53  >..<blockquote>S
11ad0 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27  ELECT date('now'
11ae0 2c 27 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68  ,'start of month
11af0 27 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31  ','+1 month','-1
11b00 20 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71   day');.</blockq
11b10 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74  uote>..<p>Comput
11b20 65 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74  e the date and t
11b30 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78  ime given a unix
11b40 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39   timestamp 10929
11b50 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  41466.</p>..<blo
11b60 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c  ckquote>.    SEL
11b70 45 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39  ECT datetime(109
11b80 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70  2941466, 'unixep
11b90 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  och');.</blockqu
11ba0 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65  ote>..<p>Compute
11bb0 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69   the date and ti
11bc0 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20  me given a unix 
11bd0 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34  timestamp 109294
11be0 31 34 36 36 2c 20 61 6e 64 20 0a 63 6f 6d 70 65  1466, and .compe
11bf0 6e 73 61 74 65 20 66 6f 72 20 79 6f 75 72 20 6c  nsate for your l
11c00 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f  ocal timezone.</
11c10 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
11c20 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65 74 69  .  SELECT dateti
11c30 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c 20 27  me(1092941466, '
11c40 75 6e 69 78 65 70 6f 63 68 27 2c 20 27 6c 6f 63  unixepoch', 'loc
11c50 61 6c 74 69 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63  altime');.</bloc
11c60 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70  kquote>..<p>Comp
11c70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ute the current 
11c80 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c  unix timestamp.<
11c90 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
11ca0 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74  >.  SELECT strft
11cb0 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b  ime('%s','now');
11cc0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
11cd0 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e  <p>Compute the n
11ce0 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69  umber of days si
11cf0 6e 63 65 20 74 68 65 20 73 69 67 6e 69 6e 67 20  nce the signing 
11d00 6f 66 20 74 68 65 20 55 53 20 44 65 63 6c 61 72  of the US Declar
11d10 61 74 69 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e  ation.of Indepen
11d20 64 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  dent.</p>..<bloc
11d30 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
11d40 20 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27   julianday('now'
11d50 29 20 2d 20 6a 75 6c 69 61 6e 64 61 79 28 27 31  ) - julianday('1
11d60 37 37 36 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62  776-07-04');.</b
11d70 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43  lockquote>..<p>C
11d80 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65  ompute the numbe
11d90 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r of seconds sin
11da0 63 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  ce a particular 
11db0 6d 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a 3c  moment in 2004:<
11dc0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
11dd0 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74  >.  SELECT strft
11de0 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20  ime('%s','now') 
11df0 2d 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c  - strftime('%s',
11e00 27 32 30 30 34 2d 30 31 2d 30 31 20 30 32 3a 33  '2004-01-01 02:3
11e10 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  4:56');.</blockq
11e20 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 43 6f 6d 70 75  uote>..<p>.Compu
11e30 74 65 20 74 68 65 20 64 61 74 65 20 6f 66 20 74  te the date of t
11e40 68 65 20 66 69 72 73 74 20 54 75 65 73 64 61 79  he first Tuesday
11e50 20 69 6e 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20   in October.for 
11e60 74 68 65 20 63 75 72 72 65 6e 74 20 79 65 61 72  the current year
11e70 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  ..</p>..<blockqu
11e80 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61  ote>.  SELECT da
11e90 74 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20  te('now','start 
11ea0 6f 66 20 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e  of year','+9 mon
11eb0 74 68 73 27 2c 27 77 65 65 6b 64 61 79 20 32 27  ths','weekday 2'
11ec0 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
11ed0 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ..<p>Compute the
11ee0 20 74 69 6d 65 20 73 69 6e 63 65 20 74 68 65 20   time since the 
11ef0 75 6e 69 78 20 65 70 6f 63 68 20 69 6e 20 73 65  unix epoch in se
11f00 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74 72  conds .(like str
11f10 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27  ftime('%s','now'
11f20 29 20 65 78 63 65 70 74 20 69 6e 63 6c 75 64 65  ) except include
11f30 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72  s fractional par
11f40 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  t):</p>..<blockq
11f50 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 28  uote>.  SELECT (
11f60 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29  julianday('now')
11f70 20 2d 20 32 34 34 30 35 38 37 2e 35 29 2a 38 36   - 2440587.5)*86
11f80 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  400.0;.</blockqu
11f90 6f 74 65 3e 0a 0a 3c 68 33 3e 43 61 76 65 61 74  ote>..<h3>Caveat
11fa0 73 20 41 6e 64 20 42 75 67 73 3c 2f 68 33 3e 0a  s And Bugs</h3>.
11fb0 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75 74 61 74  .<p>The computat
11fc0 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d  ion of local tim
11fd0 65 20 64 65 70 65 6e 64 73 20 68 65 61 76 69 6c  e depends heavil
11fe0 79 20 6f 6e 20 74 68 65 20 77 68 69 6d 20 0a 6f  y on the whim .o
11ff0 66 20 70 6f 6c 69 74 69 63 69 61 6e 73 20 61 6e  f politicians an
12000 64 20 69 73 20 74 68 75 73 20 64 69 66 66 69 63  d is thus diffic
12010 75 6c 74 20 74 6f 20 67 65 74 20 63 6f 72 72 65  ult to get corre
12020 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61  ct for .all loca
12030 6c 65 73 2e 20 49 6e 20 74 68 69 73 20 69 6d 70  les. In this imp
12040 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65  lementation, the
12050 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72   standard C libr
12060 61 72 79 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f  ary .function lo
12070 63 61 6c 74 69 6d 65 5f 72 28 29 20 69 73 20 75  caltime_r() is u
12080 73 65 64 20 74 6f 20 61 73 73 69 73 74 20 69 6e  sed to assist in
12090 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e   the calculation
120a0 20 6f 66 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e   of .local time.
120b0 20 20 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65    The .localtime
120c0 5f 72 28 29 20 43 20 66 75 6e 63 74 69 6f 6e 20  _r() C function 
120d0 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f  normally only wo
120e0 72 6b 73 20 66 6f 72 20 79 65 61 72 73 0a 62 65  rks for years.be
120f0 74 77 65 65 6e 20 31 39 37 30 20 61 6e 64 20 32  tween 1970 and 2
12100 30 33 37 2e 20 46 6f 72 20 64 61 74 65 73 20 6f  037. For dates o
12110 75 74 73 69 64 65 20 74 68 69 73 20 72 61 6e 67  utside this rang
12120 65 2c 20 53 51 4c 69 74 65 20 0a 61 74 74 65 6d  e, SQLite .attem
12130 70 74 73 20 74 6f 20 6d 61 70 20 74 68 65 20 79  pts to map the y
12140 65 61 72 20 69 6e 74 6f 20 61 6e 20 65 71 75 69  ear into an equi
12150 76 61 6c 65 6e 74 20 79 65 61 72 20 77 69 74 68  valent year with
12160 69 6e 20 0a 74 68 69 73 20 72 61 6e 67 65 2c 20  in .this range, 
12170 64 6f 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69  do the calculati
12180 6f 6e 2c 20 74 68 65 6e 20 6d 61 70 20 74 68 65  on, then map the
12190 20 79 65 61 72 20 62 61 63 6b 2e 3c 2f 70 3e 0a   year back.</p>.
121a0 0a 0a 3c 70 3e 44 61 74 65 20 63 6f 6d 70 75 74  ..<p>Date comput
121b0 61 74 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 67 69  ations do not gi
121c0 76 65 20 63 6f 72 72 65 63 74 20 72 65 73 75 6c  ve correct resul
121d0 74 73 20 66 6f 72 20 64 61 74 65 73 20 0a 62 65  ts for dates .be
121e0 66 6f 72 65 20 4a 75 6c 69 61 6e 20 64 61 79 20  fore Julian day 
121f0 6e 75 6d 62 65 72 20 30 20 28 2d 34 37 31 33 2d  number 0 (-4713-
12200 31 31 2d 32 34 20 31 32 3a 30 30 3a 30 30 29 2e  11-24 12:00:00).
12210 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73  </p>..<p>Non-Vis
12220 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66  ta Windows platf
12230 6f 72 6d 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72  orms only suppor
12240 74 20 6f 6e 65 20 73 65 74 20 6f 66 20 44 53 54  t one set of DST
12250 20 72 75 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f   rules. .Vista o
12260 6e 6c 79 20 73 75 70 70 6f 72 74 73 20 74 77 6f  nly supports two
12270 2e 20 54 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20  . Therefore, on 
12280 74 68 65 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c  these platforms,
12290 20 0a 68 69 73 74 6f 72 69 63 61 6c 20 44 53 54   .historical DST
122a0 20 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69   calculations wi
122b0 6c 6c 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e  ll be incorrect.
122c0 20 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69   .For example, i
122d0 6e 20 74 68 65 20 55 53 2c 20 69 6e 20 32 30 30  n the US, in 200
122e0 37 20 74 68 65 20 44 53 54 20 72 75 6c 65 73 20  7 the DST rules 
122f0 63 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69  changed. .Non-Vi
12300 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74  sta Windows plat
12310 66 6f 72 6d 73 20 61 70 70 6c 79 20 74 68 65 20  forms apply the 
12320 6e 65 77 20 32 30 30 37 20 44 53 54 20 72 75 6c  new 2007 DST rul
12330 65 73 20 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69  es .to all previ
12340 6f 75 73 20 79 65 61 72 73 20 61 73 20 77 65 6c  ous years as wel
12350 6c 2e 20 56 69 73 74 61 20 64 6f 65 73 20 73 6f  l. Vista does so
12360 6d 65 77 68 61 74 20 62 65 74 74 65 72 0a 67 65  mewhat better.ge
12370 74 74 69 6e 67 20 72 65 73 75 6c 74 73 20 63 6f  tting results co
12380 72 72 65 63 74 20 62 61 63 6b 20 74 6f 20 31 39  rrect back to 19
12390 38 36 2c 20 77 68 65 6e 20 74 68 65 20 72 75 6c  86, when the rul
123a0 65 73 20 77 65 72 65 20 61 6c 73 6f 20 63 68 61  es were also cha
123b0 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c  nged.</p>..<p>Al
123c0 6c 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75  l internal compu
123d0 74 61 74 69 6f 6e 73 20 61 73 73 75 6d 65 20 74  tations assume t
123e0 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 68 74 74  he .<a href="htt
123f0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
12400 2e 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72  .org/wiki/Gregor
12410 69 61 6e 5f 63 61 6c 65 6e 64 61 72 22 3e 0a 47  ian_calendar">.G
12420 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61  regorian calenda
12430 72 3c 2f 61 3e 20 73 79 73 74 65 6d 2e 20 20 49  r</a> system.  I
12440 74 20 69 73 20 61 6c 73 6f 20 61 73 73 75 6d 65  t is also assume
12450 64 20 74 68 61 74 20 65 76 65 72 79 0a 64 61 79  d that every.day
12460 20 69 73 20 65 78 61 63 74 6c 79 20 38 36 34 30   is exactly 8640
12470 30 20 73 65 63 6f 6e 64 73 20 69 6e 20 64 75 72  0 seconds in dur
12480 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ation.</p>..<tcl
12490 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
124a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
124b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
124c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
124d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
124e0 0a 53 65 63 74 69 6f 6e 20 7b 41 67 67 72 65 67  .Section {Aggreg
124f0 61 74 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 61  ate Functions} a
12500 67 67 66 75 6e 63 20 7b 61 67 67 66 75 6e 63 7d  ggfunc {aggfunc}
12510 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65  .</tcl>..<p>.The
12520 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
12530 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77  ions shown below
12540 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62   are available b
12550 79 20 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69  y default.  Addi
12560 74 69 6f 6e 61 6c 0a 61 67 67 72 65 67 61 74 65  tional.aggregate
12570 20 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74   functions writt
12580 65 6e 20 69 6e 20 43 20 6d 61 79 20 62 65 20 61  en in C may be a
12590 64 64 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a  dded using the .
125a0 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
125b0 66 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a  function()]</a>.
125c0 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 6e  API.</p>..<p>.In
125d0 20 61 6e 79 20 61 67 67 72 65 67 61 74 65 20 66   any aggregate f
125e0 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b  unction that tak
125f0 65 73 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  es a single argu
12600 6d 65 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d  ment, that argum
12610 65 6e 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65  ent.can be prece
12620 65 64 65 64 20 62 79 20 74 68 65 20 6b 65 79 77  eded by the keyw
12630 6f 72 64 20 44 49 53 54 49 4e 43 54 2e 20 20 49  ord DISTINCT.  I
12640 6e 20 73 75 63 68 20 63 61 73 65 73 2c 20 64 75  n such cases, du
12650 70 6c 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73  plicate.elements
12660 20 61 72 65 20 66 69 6c 74 65 72 65 64 20 62 65   are filtered be
12670 66 6f 72 65 20 62 65 69 6e 67 20 70 61 73 73 65  fore being passe
12680 64 20 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65  d into the aggre
12690 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 46  gate function..F
126a0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
126b0 66 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28  function "count(
126c0 64 69 73 74 69 6e 63 74 20 58 29 22 20 77 69 6c  distinct X)" wil
126d0 6c 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  l return the num
126e0 62 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74 20  ber.of distinct 
126f0 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e  values of column
12700 20 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68   X instead of th
12710 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
12720 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65  f non-null.value
12730 73 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c  s in column X..<
12740 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64  /p>..<table bord
12750 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67  er=0 cellpadding
12760 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64  =10>.<tcl>.funcd
12770 65 66 20 7b 61 76 67 28 58 29 7d 20 7b 7d 20 7b  ef {avg(X)} {} {
12780 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20 61 76  .  Return the av
12790 65 72 61 67 65 20 76 61 6c 75 65 20 6f 66 20 61  erage value of a
127a0 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58  ll non-NULL <i>X
127b0 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61 0a 20 20  </i> within a.  
127c0 67 72 6f 75 70 2e 20 20 53 74 72 69 6e 67 20 61  group.  String a
127d0 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65 73 20 74  nd BLOB values t
127e0 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20  hat do not look 
127f0 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20 61 72 65  like numbers are
12800 0a 20 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  .  interpreted a
12810 73 20 30 2e 0a 20 20 54 68 65 20 72 65 73 75 6c  s 0..  The resul
12820 74 20 6f 66 20 61 76 67 28 29 20 69 73 20 61 6c  t of avg() is al
12830 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  ways a floating 
12840 70 6f 69 6e 74 20 76 61 6c 75 65 20 65 76 65 6e  point value even
12850 20 69 66 20 61 6c 6c 0a 20 20 69 6e 70 75 74 73   if all.  inputs
12860 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 7d   are integers..}
12870 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 75 6e 74  ..funcdef {count
12880 28 58 29 20 63 6f 75 6e 74 28 2a 29 7d 20 7b 7d  (X) count(*)} {}
12890 20 7b 0a 20 20 54 68 65 20 66 69 72 73 74 20 66   {.  The first f
128a0 6f 72 6d 20 72 65 74 75 72 6e 20 61 20 63 6f 75  orm return a cou
128b0 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72  nt of the number
128c0 20 6f 66 20 74 69 6d 65 73 0a 20 20 74 68 61 74   of times.  that
128d0 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74   <i>X</i> is not
128e0 20 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70   NULL in a group
128f0 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
12900 72 6d 20 28 77 69 74 68 20 6e 6f 20 61 72 67 75  rm (with no argu
12910 6d 65 6e 74 29 0a 20 20 72 65 74 75 72 6e 73 20  ment).  returns 
12920 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
12930 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
12940 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65  group..}..funcde
12950 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  f {group_concat(
12960 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  X) group_concat(
12970 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 54 68 65  X,Y)} {} {.  The
12980 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 74 72   result is a str
12990 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65  ing which is the
129a0 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f   concatenation o
129b0 66 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c  f.  all non-NULL
129c0 20 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c   values of <i>X<
129d0 2f 69 3e 2e 20 20 49 66 20 70 61 72 61 6d 65 74  /i>.  If paramet
129e0 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 74  er <i>Y</i> is t
129f0 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20 62  he separator.  b
12a00 65 74 77 65 65 6e 20 69 6e 73 74 61 6e 63 65 73  etween instances
12a10 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 41   of <i>X</i>.  A
12a20 20 63 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20   comma (",") is 
12a30 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61  used as the sepa
12a40 72 61 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c  rator.  if <i>Y<
12a50 2f 69 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a  /i> is omitted..
12a60 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28  }..funcdef {max(
12a70 58 29 7d 20 7b 6d 61 78 41 67 67 46 75 6e 63 20  X)} {maxAggFunc 
12a80 61 67 67 5f 6d 61 78 7d 20 7b 0a 20 20 52 65 74  agg_max} {.  Ret
12a90 75 72 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  urn the maximum 
12aa0 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c  value of all val
12ab0 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
12ac0 2e 0a 20 20 54 68 65 20 75 73 75 61 6c 20 73 6f  ..  The usual so
12ad0 72 74 20 6f 72 64 65 72 20 69 73 20 75 73 65 64  rt order is used
12ae0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
12af0 65 20 6d 61 78 69 6d 75 6d 2e 0a 7d 0a 0a 66 75  e maximum..}..fu
12b00 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d 20 7b  ncdef {min(X)} {
12b10 6d 69 6e 41 67 67 46 75 6e 63 20 61 67 67 5f 6d  minAggFunc agg_m
12b20 69 6e 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74  in} {.  Return t
12b30 68 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e  he minimum non-N
12b40 55 4c 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  ULL value of all
12b50 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
12b60 72 6f 75 70 2e 0a 20 20 54 68 65 20 75 73 75 61  roup..  The usua
12b70 6c 20 73 6f 72 74 20 6f 72 64 65 72 20 69 73 20  l sort order is 
12b80 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
12b90 65 20 74 68 65 20 6d 69 6e 69 6d 75 6d 2e 20 20  e the minimum.  
12ba0 0a 20 20 4e 55 4c 4c 20 69 73 20 6f 6e 6c 79 20  .  NULL is only 
12bb0 72 65 74 75 72 6e 65 64 0a 20 20 69 66 20 61 6c  returned.  if al
12bc0 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  l values in the 
12bd0 67 72 6f 75 70 20 61 72 65 20 4e 55 4c 4c 2e 0a  group are NULL..
12be0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 6d 28  }..funcdef {sum(
12bf0 58 29 20 74 6f 74 61 6c 28 58 29 7d 20 7b 73 75  X) total(X)} {su
12c00 6d 46 75 6e 63 20 73 75 6d 20 74 6f 74 61 6c 7d  mFunc sum total}
12c10 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20   {.  Return the 
12c20 6e 75 6d 65 72 69 63 20 73 75 6d 20 6f 66 20 61  numeric sum of a
12c30 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  ll non-NULL valu
12c40 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
12c50 0a 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
12c60 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75  no non-NULL inpu
12c70 74 20 72 6f 77 73 20 74 68 65 6e 20 73 75 6d 28  t rows then sum(
12c80 29 20 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c  ) returns.  NULL
12c90 20 62 75 74 20 74 6f 74 61 6c 28 29 20 72 65 74   but total() ret
12ca0 75 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c  urns 0.0..  NULL
12cb0 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79   is not normally
12cc0 20 61 20 68 65 6c 70 66 75 6c 20 72 65 73 75 6c   a helpful resul
12cd0 74 20 66 6f 72 20 74 68 65 20 73 75 6d 20 6f 66  t for the sum of
12ce0 20 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74 20 74   no rows.  but t
12cf0 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20  he SQL standard 
12d00 72 65 71 75 69 72 65 73 20 69 74 20 61 6e 64 20  requires it and 
12d10 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20 53 51 4c  most other.  SQL
12d20 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
12d30 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28  s implement sum(
12d40 29 20 74 68 61 74 20 77 61 79 20 73 6f 20 53 51  ) that way so SQ
12d50 4c 69 74 65 20 64 6f 65 73 20 69 74 20 69 6e 20  Lite does it in 
12d60 74 68 65 0a 20 20 73 61 6d 65 20 77 61 79 20 69  the.  same way i
12d70 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 63 6f  n order to be co
12d80 6d 70 61 74 69 62 6c 65 2e 20 20 20 54 68 65 20  mpatible.   The 
12d90 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f 74  non-standard tot
12da0 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  al() function.  
12db0 69 73 20 70 72 6f 76 69 64 65 64 20 61 73 20 61  is provided as a
12dc0 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79 20   convenient way 
12dd0 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74  to work around t
12de0 68 69 73 20 64 65 73 69 67 6e 20 70 72 6f 62 6c  his design probl
12df0 65 6d 0a 20 20 69 6e 20 74 68 65 20 53 51 4c 20  em.  in the SQL 
12e00 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20  language.</p>.. 
12e10 20 3c 70 3e 54 68 65 20 72 65 73 75 6c 74 20 6f   <p>The result o
12e20 66 20 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77  f total() is alw
12e30 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70  ays a floating p
12e40 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20 54 68  oint value..  Th
12e50 65 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d 28  e result of sum(
12e60 29 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  ) is an integer 
12e70 76 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e  value if all non
12e80 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72 65  -NULL inputs are
12e90 20 69 6e 74 65 67 65 72 73 2e 0a 20 20 49 66 20   integers..  If 
12ea0 61 6e 79 20 69 6e 70 75 74 20 74 6f 20 73 75 6d  any input to sum
12eb0 28 29 20 69 73 20 6e 65 69 74 68 65 72 20 61 6e  () is neither an
12ec0 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 4e 55   integer or a NU
12ed0 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28 29 20  LL.  then sum() 
12ee0 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69  returns a floati
12ef0 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20  ng point value. 
12f00 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20   which might be 
12f10 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  an approximation
12f20 20 74 6f 20 74 68 65 20 74 72 75 65 20 73 75 6d   to the true sum
12f30 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 53 75 6d 28  .</p>..  <p>Sum(
12f40 29 20 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20  ) will throw an 
12f50 22 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f  "integer overflo
12f60 77 22 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20  w" exception if 
12f70 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61 72 65  all inputs.  are
12f80 20 69 6e 74 65 67 65 72 73 20 6f 72 20 4e 55 4c   integers or NUL
12f90 4c 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74 65 67  L.  and an integ
12fa0 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75  er overflow occu
12fb0 72 73 20 61 74 20 61 6e 79 20 70 6f 69 6e 74 20  rs at any point 
12fc0 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6d 70 75  during the compu
12fd0 74 61 74 69 6f 6e 2e 0a 20 20 54 6f 74 61 6c 28  tation..  Total(
12fe0 29 20 6e 65 76 65 72 20 74 68 72 6f 77 73 20 61  ) never throws a
12ff0 6e 20 65 78 63 65 70 74 69 6f 6e 2e 0a 7d 0a 3c  n exception..}.<
13000 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a  /tcl>.</table>..
13010 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
13020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13060 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53  ####.Section INS
13070 45 52 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45  ERT insert {INSE
13080 52 54 20 49 4e 53 45 52 54 73 7d 0a 0a 42 75 62  RT INSERTs}..Bub
13090 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 73 65 72  bleDiagram inser
130a0 74 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  t-stmt 1.</tcl>.
130b0 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20 73  .<p>The INSERT s
130c0 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69  tatement comes i
130d0 6e 20 74 77 6f 20 62 61 73 69 63 20 66 6f 72 6d  n two basic form
130e0 73 2e 20 20 54 68 65 20 66 69 72 73 74 20 66 6f  s.  The first fo
130f0 72 6d 0a 28 77 69 74 68 20 74 68 65 20 22 56 41  rm.(with the "VA
13100 4c 55 45 53 22 20 6b 65 79 77 6f 72 64 29 20 63  LUES" keyword) c
13110 72 65 61 74 65 73 20 61 20 73 69 6e 67 6c 65 20  reates a single 
13120 6e 65 77 20 72 6f 77 20 69 6e 20 61 6e 20 65 78  new row in an ex
13130 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 49 66  isting table..If
13140 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20   no column-list 
13150 69 73 20 73 70 65 63 69 66 69 65 64 20 74 68 65  is specified the
13160 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
13170 76 61 6c 75 65 73 20 6d 75 73 74 0a 62 65 20 74  values must.be t
13180 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e  he same as the n
13190 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
131a0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
131b0 49 66 20 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74  If a column-list
131c0 0a 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74  .is specified, t
131d0 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  hen the number o
131e0 66 20 76 61 6c 75 65 73 20 6d 75 73 74 20 6d 61  f values must ma
131f0 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  tch the number o
13200 66 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75  f.specified colu
13210 6d 6e 73 2e 20 20 43 6f 6c 75 6d 6e 73 20 6f 66  mns.  Columns of
13220 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
13230 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e  do not appear in
13240 20 74 68 65 0a 63 6f 6c 75 6d 6e 20 6c 69 73 74   the.column list
13250 20 61 72 65 20 66 69 6c 6c 65 64 20 77 69 74 68   are filled with
13260 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
13270 75 65 2c 20 6f 72 20 77 69 74 68 20 4e 55 4c 4c  ue, or with NULL
13280 20 69 66 20 6e 6f 0a 64 65 66 61 75 6c 74 20 76   if no.default v
13290 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69 65  alue is specifie
132a0 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  d..</p>..<p>The 
132b0 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74  second form of t
132c0 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  he INSERT statem
132d0 65 6e 74 20 74 61 6b 65 73 20 69 74 20 64 61 74  ent takes it dat
132e0 61 20 66 72 6f 6d 20 61 0a 53 45 4c 45 43 54 20  a from a.SELECT 
132f0 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
13300 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
13310 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  s in the result 
13320 6f 66 20 74 68 65 0a 53 45 4c 45 43 54 20 6d 75  of the.SELECT mu
13330 73 74 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68  st exactly match
13340 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
13350 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
13360 62 6c 65 20 69 66 0a 6e 6f 20 63 6f 6c 75 6d 6e  ble if.no column
13370 20 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69   list is specifi
13380 65 64 2c 20 6f 72 20 69 74 20 6d 75 73 74 20 6d  ed, or it must m
13390 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20  atch the number 
133a0 6f 66 20 63 6f 6c 75 6d 6e 73 0a 6e 61 6d 65 20  of columns.name 
133b0 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69  in the column li
133c0 73 74 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79  st.  A new entry
133d0 20 69 73 20 6d 61 64 65 20 69 6e 20 74 68 65 20   is made in the 
133e0 74 61 62 6c 65 0a 66 6f 72 20 65 76 65 72 79 20  table.for every 
133f0 72 6f 77 20 6f 66 20 74 68 65 20 53 45 4c 45 43  row of the SELEC
13400 54 20 72 65 73 75 6c 74 2e 20 20 54 68 65 20 53  T result.  The S
13410 45 4c 45 43 54 20 6d 61 79 20 62 65 20 73 69 6d  ELECT may be sim
13420 70 6c 65 0a 6f 72 20 63 6f 6d 70 6f 75 6e 64 2e  ple.or compound.
13430 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74  </p>..<p>The opt
13440 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63  ional conflict-c
13450 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65  lause allows the
13460 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f   specification o
13470 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  f an alternative
13480 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66  .constraint conf
13490 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
134a0 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65  algorithm to use
134b0 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65   during this one
134c0 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68   command..See th
134d0 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64  e section titled
134e0 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66  .[ON CONFLICT] f
134f0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
13500 66 6f 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20 63  formation..For c
13510 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74  ompatibility wit
13520 68 20 4d 79 53 51 4c 2c 20 74 68 65 20 70 61 72  h MySQL, the par
13530 73 65 72 20 61 6c 6c 6f 77 73 20 74 68 65 20 75  ser allows the u
13540 73 65 20 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65  se of the.single
13550 20 6b 65 79 77 6f 72 64 20 3c 61 20 68 72 65 66   keyword <a href
13560 3d 22 6c 61 6e 67 5f 72 65 70 6c 61 63 65 2e 68  ="lang_replace.h
13570 74 6d 6c 22 3e 52 45 50 4c 41 43 45 3c 2f 61 3e  tml">REPLACE</a>
13580 20 61 73 20 61 6e 20 0a 61 6c 69 61 73 20 66 6f   as an .alias fo
13590 72 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50  r "INSERT OR REP
135a0 4c 41 43 45 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63  LACE"..</p>..<tc
135b0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
135c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13600 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f  #.Section {ON CO
13610 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
13620 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e 66 6c 69  onflict {{confli
13630 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f 4e 20 43  ct clause} {ON C
13640 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 42 75 62 62 6c  ONFLICT}}..Bubbl
13650 65 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63  eDiagram conflic
13660 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a  t-clause.</tcl>.
13670 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c  .<p>The ON CONFL
13680 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  ICT clause is no
13690 74 20 61 20 73 65 70 61 72 61 74 65 20 53 51 4c  t a separate SQL
136a0 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73   command.  It is
136b0 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20   a.non-standard 
136c0 63 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e 20  clause that can 
136d0 61 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f  appear in many o
136e0 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ther SQL command
136f0 73 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20 69  s..It is given i
13700 74 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69  ts own section i
13710 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20  n this document 
13720 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f  because it is no
13730 74 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61  t.part of standa
13740 72 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72 65  rd SQL and there
13750 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20 62  fore might not b
13760 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a  e familiar.</p>.
13770 0a 3c 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66  .<p>The syntax f
13780 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  or the ON CONFLI
13790 43 54 20 63 6c 61 75 73 65 20 69 73 20 61 73 20  CT clause is as 
137a0 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a  shown above for.
137b0 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
137c0 20 63 6f 6d 6d 61 6e 64 2e 20 20 46 6f 72 20 74   command.  For t
137d0 68 65 20 49 4e 53 45 52 54 20 61 6e 64 0a 55 50  he INSERT and.UP
137e0 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74  DATE commands, t
137f0 68 65 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20  he keywords "ON 
13800 43 4f 4e 46 4c 49 43 54 22 20 61 72 65 20 72 65  CONFLICT" are re
13810 70 6c 61 63 65 64 20 62 79 20 22 4f 52 22 2c 20  placed by "OR", 
13820 74 6f 20 6d 61 6b 65 0a 74 68 65 20 73 79 6e 74  to make.the synt
13830 61 78 20 73 65 65 6d 20 6d 6f 72 65 20 6e 61 74  ax seem more nat
13840 75 72 61 6c 2e 20 20 46 6f 72 20 65 78 61 6d 70  ural.  For examp
13850 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 0a 22  le, instead of."
13860 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49  INSERT ON CONFLI
13870 43 54 20 49 47 4e 4f 52 45 22 20 77 65 20 68 61  CT IGNORE" we ha
13880 76 65 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47  ve "INSERT OR IG
13890 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f  NORE"..The keywo
138a0 72 64 73 20 63 68 61 6e 67 65 20 62 75 74 20 74  rds change but t
138b0 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68  he meaning of th
138c0 65 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20  e clause is the 
138d0 73 61 6d 65 0a 65 69 74 68 65 72 20 77 61 79 2e  same.either way.
138e0 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20  </p>..<p>The ON 
138f0 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
13900 73 70 65 63 69 66 69 65 73 20 61 6e 20 61 6c 67  specifies an alg
13910 6f 72 69 74 68 6d 20 75 73 65 64 20 74 6f 20 72  orithm used to r
13920 65 73 6f 6c 76 65 0a 63 6f 6e 73 74 72 61 69 6e  esolve.constrain
13930 74 20 63 6f 6e 66 6c 69 63 74 73 2e 20 20 54 68  t conflicts.  Th
13940 65 72 65 20 61 72 65 20 66 69 76 65 20 63 68 6f  ere are five cho
13950 69 63 65 73 3a 20 52 4f 4c 4c 42 41 43 4b 2c 20  ices: ROLLBACK, 
13960 41 42 4f 52 54 2c 0a 46 41 49 4c 2c 20 49 47 4e  ABORT,.FAIL, IGN
13970 4f 52 45 2c 20 61 6e 64 20 52 45 50 4c 41 43 45  ORE, and REPLACE
13980 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 61 6c  . The default al
13990 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54  gorithm is ABORT
139a0 2e 20 20 54 68 69 73 0a 69 73 20 77 68 61 74 20  .  This.is what 
139b0 74 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a  they mean:</p>..
139c0 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c  <dl>.<dt><b>ROLL
139d0 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  BACK</b></dt>.<d
139e0 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73  d><p>When a cons
139f0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
13a00 20 6f 63 63 75 72 73 2c 20 61 6e 20 69 6d 6d 65   occurs, an imme
13a10 64 69 61 74 65 20 52 4f 4c 4c 42 41 43 4b 0a 6f  diate ROLLBACK.o
13a20 63 63 75 72 73 2c 20 74 68 75 73 20 65 6e 64 69  ccurs, thus endi
13a30 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ng the current t
13a40 72 61 6e 73 61 63 74 69 6f 6e 2c 20 61 6e 64 20  ransaction, and 
13a50 74 68 65 20 63 6f 6d 6d 61 6e 64 20 61 62 6f 72  the command abor
13a60 74 73 0a 77 69 74 68 20 61 20 72 65 74 75 72 6e  ts.with a return
13a70 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54 45 5f   code of SQLITE_
13a80 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20 49 66 20  CONSTRAINT.  If 
13a90 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
13aa0 73 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20  s.active (other 
13ab0 74 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64  than the implied
13ac0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61   transaction tha
13ad0 74 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20  t is created on 
13ae0 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74  every.command) t
13af0 68 65 6e 20 74 68 69 73 20 61 6c 67 6f 72 69 74  hen this algorit
13b00 68 6d 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d  hm works the sam
13b10 65 20 61 73 20 41 42 4f 52 54 2e 3c 2f 70 3e 3c  e as ABORT.</p><
13b20 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f  /dd>..<dt><b>ABO
13b30 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  RT</b></dt>.<dd>
13b40 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72  <p>When a constr
13b50 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
13b60 63 63 75 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61  ccurs, the comma
13b70 6e 64 20 62 61 63 6b 73 20 6f 75 74 0a 61 6e 79  nd backs out.any
13b80 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 69   prior changes i
13b90 74 20 6d 69 67 68 74 20 68 61 76 65 20 6d 61 64  t might have mad
13ba0 65 20 61 6e 64 20 61 62 6f 72 74 73 20 77 69 74  e and aborts wit
13bb0 68 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 0a  h a return code.
13bc0 6f 66 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  of SQLITE_CONSTR
13bd0 41 49 4e 54 2e 20 20 42 75 74 20 6e 6f 20 52 4f  AINT.  But no RO
13be0 4c 4c 42 41 43 4b 20 69 73 20 65 78 65 63 75 74  LLBACK is execut
13bf0 65 64 20 73 6f 20 63 68 61 6e 67 65 73 0a 66 72  ed so changes.fr
13c00 6f 6d 20 70 72 69 6f 72 20 63 6f 6d 6d 61 6e 64  om prior command
13c10 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
13c20 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 61 72  e transaction.ar
13c30 65 20 70 72 65 73 65 72 76 65 64 2e 20 20 54 68  e preserved.  Th
13c40 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  is is the defaul
13c50 74 20 62 65 68 61 76 69 6f 72 2e 3c 2f 70 3e 3c  t behavior.</p><
13c60 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49  /dd>..<dt><b>FAI
13c70 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  L</b></dt>.<dd><
13c80 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  p>When a constra
13c90 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
13ca0 63 75 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61 6e  curs, the comman
13cb0 64 20 61 62 6f 72 74 73 20 77 69 74 68 20 61 0a  d aborts with a.
13cc0 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49  return code SQLI
13cd0 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20  TE_CONSTRAINT.  
13ce0 42 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 20  But any changes 
13cf0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
13d00 74 68 61 74 0a 74 68 65 20 63 6f 6d 6d 61 6e 64  that.the command
13d10 20 6d 61 64 65 20 70 72 69 6f 72 20 74 6f 20 65   made prior to e
13d20 6e 63 6f 75 6e 74 65 72 69 6e 67 20 74 68 65 20  ncountering the 
13d30 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
13d40 74 69 6f 6e 0a 61 72 65 20 70 72 65 73 65 72 76  tion.are preserv
13d50 65 64 20 61 6e 64 20 61 72 65 20 6e 6f 74 20 62  ed and are not b
13d60 61 63 6b 65 64 20 6f 75 74 2e 20 20 46 6f 72 20  acked out.  For 
13d70 65 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55  example, if an U
13d80 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20  PDATE.statement 
13d90 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 20 63 6f  encountered a co
13da0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
13db0 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30 74 68 20  on on the 100th 
13dc0 72 6f 77 20 74 68 61 74 0a 69 74 20 61 74 74 65  row that.it atte
13dd0 6d 70 74 73 20 74 6f 20 75 70 64 61 74 65 2c 20  mpts to update, 
13de0 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 39  then the first 9
13df0 39 20 72 6f 77 20 63 68 61 6e 67 65 73 20 61 72  9 row changes ar
13e00 65 20 70 72 65 73 65 72 76 65 64 0a 62 75 74 20  e preserved.but 
13e10 63 68 61 6e 67 65 73 20 74 6f 20 72 6f 77 73 20  changes to rows 
13e20 31 30 30 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e  100 and beyond n
13e30 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c  ever occur.</p><
13e40 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e  /dd>..<dt><b>IGN
13e50 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORE</b></dt>.<dd
13e60 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74  ><p>When a const
13e70 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
13e80 6f 63 63 75 72 73 2c 20 74 68 65 20 6f 6e 65 20  occurs, the one 
13e90 72 6f 77 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  row that contain
13ea0 73 0a 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  s.the constraint
13eb0 20 76 69 6f 6c 61 74 69 6f 6e 20 69 73 20 6e 6f   violation is no
13ec0 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 63 68  t inserted or ch
13ed0 61 6e 67 65 64 2e 20 20 42 75 74 20 74 68 65 20  anged.  But the 
13ee0 63 6f 6d 6d 61 6e 64 0a 63 6f 6e 74 69 6e 75 65  command.continue
13ef0 73 20 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d  s executing norm
13f00 61 6c 6c 79 2e 20 20 4f 74 68 65 72 20 72 6f 77  ally.  Other row
13f10 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  s before and aft
13f20 65 72 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a  er the row that.
13f30 63 6f 6e 74 61 69 6e 65 64 20 74 68 65 20 63 6f  contained the co
13f40 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
13f50 6f 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62  on continue to b
13f60 65 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  e inserted or up
13f70 64 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20  dated.normally. 
13f80 20 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74   No error is ret
13f90 75 72 6e 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a  urned.</p></dd>.
13fa0 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c  .<dt><b>REPLACE<
13fb0 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
13fc0 57 68 65 6e 20 61 20 55 4e 49 51 55 45 20 63 6f  When a UNIQUE co
13fd0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
13fe0 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 70  on occurs, the p
13ff0 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f 77 73  re-existing rows
14000 0a 74 68 61 74 20 61 72 65 20 63 61 75 73 69 6e  .that are causin
14010 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  g the constraint
14020 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72   violation are r
14030 65 6d 6f 76 65 64 20 70 72 69 6f 72 20 74 6f 20  emoved prior to 
14040 69 6e 73 65 72 74 69 6e 67 0a 6f 72 20 75 70 64  inserting.or upd
14050 61 74 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e  ating the curren
14060 74 20 72 6f 77 2e 20 20 54 68 75 73 20 74 68 65  t row.  Thus the
14070 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74   insert or updat
14080 65 20 61 6c 77 61 79 73 20 6f 63 63 75 72 73 2e  e always occurs.
14090 0a 54 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e  .The command con
140a0 74 69 6e 75 65 73 20 65 78 65 63 75 74 69 6e 67  tinues executing
140b0 20 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4e 6f 20 65   normally.  No e
140c0 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
140d0 2e 0a 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20  ..If a NOT NULL 
140e0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
140f0 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
14100 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 72   NULL value is r
14110 65 70 6c 61 63 65 64 0a 62 79 20 74 68 65 20 64  eplaced.by the d
14120 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
14130 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 49   that column.  I
14140 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73  f the column has
14150 20 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c 75   no default.valu
14160 65 2c 20 74 68 65 6e 20 74 68 65 20 41 42 4f 52  e, then the ABOR
14170 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75  T algorithm is u
14180 73 65 64 2e 20 20 49 66 20 61 20 43 48 45 43 4b  sed.  If a CHECK
14190 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
141a0 61 74 69 6f 6e 0a 6f 63 63 75 72 73 20 74 68 65  ation.occurs the
141b0 6e 20 74 68 65 20 49 47 4e 4f 52 45 20 61 6c 67  n the IGNORE alg
141c0 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c  orithm is used.<
141d0 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 69  /p>..<p>When thi
141e0 73 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  s conflict resol
141f0 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64  ution strategy d
14200 65 6c 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f  eletes rows in o
14210 72 64 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20  rder to.satisfy 
14220 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 69 74  a constraint, it
14230 20 64 6f 65 73 20 6e 6f 74 20 69 6e 76 6f 6b 65   does not invoke
14240 20 64 65 6c 65 74 65 20 74 72 69 67 67 65 72 73   delete triggers
14250 20 6f 6e 20 74 68 6f 73 65 0a 72 6f 77 73 2e 20   on those.rows. 
14260 20 54 68 69 73 20 62 65 68 61 76 69 6f 72 20 6d   This behavior m
14270 69 67 68 74 20 63 68 61 6e 67 65 20 69 6e 20 61  ight change in a
14280 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 2e   future release.
14290 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 54  </p>.</dl>..<p>T
142a0 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65  he algorithm spe
142b0 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 4f 52  cified in the OR
142c0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 49 4e 53   clause of a INS
142d0 45 52 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76  ERT or UPDATE.ov
142e0 65 72 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f  errides any algo
142f0 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20  rithm specified 
14300 69 6e 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  in a CREATE TABL
14310 45 2e 0a 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74  E..If no algorit
14320 68 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 20  hm is specified 
14330 61 6e 79 77 68 65 72 65 2c 20 74 68 65 20 41 42  anywhere, the AB
14340 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ORT algorithm is
14350 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   used.</p>..<tcl
14360 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
14370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143b0 0a 53 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58  .Section REINDEX
143c0 20 72 65 69 6e 64 65 78 20 52 45 49 4e 44 45 58   reindex REINDEX
143d0 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
143e0 72 65 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c  reindex-stmt 1.<
143f0 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 52 45  /tcl>..<p>The RE
14400 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73  INDEX command is
14410 20 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65 20   used to delete 
14420 61 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e 64  and recreate ind
14430 69 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74 63  ices from scratc
14440 68 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66 75  h..This is usefu
14450 6c 20 77 68 65 6e 20 74 68 65 20 64 65 66 69 6e  l when the defin
14460 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61  ition of a colla
14470 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68 61  tion sequence ha
14480 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a  s changed..</p>.
14490 0a 3c 70 3e 49 6e 20 74 68 65 20 66 69 72 73 74  .<p>In the first
144a0 20 66 6f 72 6d 2c 20 61 6c 6c 20 69 6e 64 69 63   form, all indic
144b0 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68  es in all attach
144c0 65 64 20 64 61 74 61 62 61 73 65 73 20 74 68 61  ed databases tha
144d0 74 20 75 73 65 20 74 68 65 0a 6e 61 6d 65 64 20  t use the.named 
144e0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
144f0 63 65 20 61 72 65 20 72 65 63 72 65 61 74 65 64  ce are recreated
14500 2e 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20  . In the second 
14510 66 6f 72 6d 2c 20 69 66 20 0a 3c 69 3e 26 23 39  form, if .<i>&#9
14520 31 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e  1;database-name.
14530 26 23 39 33 3b 74 61 62 6c 65 2f 69 6e 64 65 78  &#93;table/index
14540 2d 6e 61 6d 65 3c 2f 69 3e 20 69 64 65 6e 74 69  -name</i> identi
14550 66 69 65 73 20 61 20 74 61 62 6c 65 2c 0a 74 68  fies a table,.th
14560 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 0a 61  en all indices.a
14570 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
14580 68 65 20 74 61 62 6c 65 20 61 72 65 20 72 65 62  he table are reb
14590 75 69 6c 74 2e 20 49 66 20 61 6e 20 69 6e 64 65  uilt. If an inde
145a0 78 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 2c  x is identified,
145b0 20 74 68 65 6e 20 6f 6e 6c 79 0a 74 68 69 73 20   then only.this 
145c0 73 70 65 63 69 66 69 63 20 69 6e 64 65 78 20 69  specific index i
145d0 73 20 64 65 6c 65 74 65 64 20 61 6e 64 20 72 65  s deleted and re
145e0 63 72 65 61 74 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c  created..</p>..<
145f0 70 3e 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61 62  p>If no <i>datab
14600 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20  ase-name</i> is 
14610 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74 68  specified and th
14620 65 72 65 20 65 78 69 73 74 73 20 62 6f 74 68 20  ere exists both 
14630 61 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78  a table or.index
14640 20 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e   and a collation
14650 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
14660 20 73 70 65 63 69 66 69 65 64 20 6e 61 6d 65 2c   specified name,
14670 20 74 68 65 6e 20 69 6e 64 69 63 65 73 20 61 73   then indices as
14680 73 6f 63 69 61 74 65 64 0a 77 69 74 68 20 74 68  sociated.with th
14690 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
146a0 65 6e 63 65 20 6f 6e 6c 79 20 61 72 65 20 72 65  ence only are re
146b0 63 6f 6e 73 74 72 75 63 74 65 64 2e 20 54 68 69  constructed. Thi
146c0 73 20 61 6d 62 69 67 75 69 74 79 20 6d 61 79 20  s ambiguity may 
146d0 62 65 0a 64 69 73 70 65 6c 6c 65 64 20 62 79 20  be.dispelled by 
146e0 61 6c 77 61 79 73 20 73 70 65 63 69 66 79 69 6e  always specifyin
146f0 67 20 61 20 3c 69 3e 64 61 74 61 62 61 73 65 2d  g a <i>database-
14700 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72 65  name</i> when re
14710 69 6e 64 65 78 69 6e 67 20 61 0a 73 70 65 63 69  indexing a.speci
14720 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  fic table or ind
14730 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ex...<tcl>.#####
14740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14780 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
14790 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61  on REPLACE repla
147a0 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63  ce REPLACE..</tc
147b0 6c 3e 0a 0a 3c 70 3e 54 68 65 20 52 45 50 4c 41  l>..<p>The REPLA
147c0 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e  CE command is an
147d0 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 22   alias for the "
147e0 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43  INSERT OR REPLAC
147f0 45 22 20 76 61 72 69 61 6e 74 0a 6f 66 20 74 68  E" variant.of th
14800 65 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f  e <a href="lang_
14810 69 6e 73 65 72 74 2e 68 74 6d 6c 22 3e 49 4e 53  insert.html">INS
14820 45 52 54 3c 2f 61 3e 20 63 6f 6d 6d 61 6e 64 2e  ERT</a> command.
14830 20 20 0a 54 68 69 73 20 61 6c 69 61 73 20 69 73    .This alias is
14840 20 70 72 6f 76 69 64 65 64 20 66 6f 72 0a 63 6f   provided for.co
14850 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
14860 20 4d 79 53 51 4c 2e 20 20 53 65 65 20 74 68 65   MySQL.  See the
14870 20 0a 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f   .<a href="lang_
14880 69 6e 73 65 72 74 2e 68 74 6d 6c 22 3e 49 4e 53  insert.html">INS
14890 45 52 54 3c 2f 61 3e 20 63 6f 6d 6d 61 6e 64 20  ERT</a> command 
148a0 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f  documentation fo
148b0 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 69 6e 66  r additional.inf
148c0 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a  ormation.</p>  .
148d0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
148e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
148f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14920 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53  ######.Section S
14930 45 4c 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45  ELECT select {SE
14940 4c 45 43 54 20 71 75 65 72 79 7d 0a 0a 42 75 62  LECT query}..Bub
14950 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63  bleDiagram selec
14960 74 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44  t-stmt 1.BubbleD
14970 69 61 67 72 61 6d 20 72 65 73 75 6c 74 2d 63 6f  iagram result-co
14980 6c 75 6d 6e 0a 42 75 62 62 6c 65 44 69 61 67 72  lumn.BubbleDiagr
14990 61 6d 20 6a 6f 69 6e 2d 73 6f 75 72 63 65 0a 42  am join-source.B
149a0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 6e  ubbleDiagram sin
149b0 67 6c 65 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c  gle-source.Bubbl
149c0 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 6f 70  eDiagram join-op
149d0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6a  .BubbleDiagram j
149e0 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 0a 42  oin-constraint.B
149f0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6f 72 64  ubbleDiagram ord
14a00 65 72 69 6e 67 2d 74 65 72 6d 0a 42 75 62 62 6c  ering-term.Bubbl
14a10 65 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f 75 6e  eDiagram compoun
14a20 64 2d 6f 70 65 72 61 74 6f 72 0a 3c 2f 74 63 6c  d-operator.</tcl
14a30 3e 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54  >..<p>The SELECT
14a40 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
14a50 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20  ed to query the 
14a60 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a 72  database.  The.r
14a70 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45 43  esult of a SELEC
14a80 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  T is zero or mor
14a90 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20 77  e rows of data w
14aa0 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68 61  here each row.ha
14ab0 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72  s a fixed number
14ac0 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68   of columns.  Th
14ad0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
14ae0 6d 6e 73 20 69 6e 20 74 68 65 0a 72 65 73 75 6c  mns in the.resul
14af0 74 20 69 73 20 73 70 65 63 69 66 69 65 64 20 62  t is specified b
14b00 79 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  y the expression
14b10 20 6c 69 73 74 20 69 6e 20 62 65 74 77 65 65 6e   list in between
14b20 20 74 68 65 0a 53 45 4c 45 43 54 20 61 6e 64 20   the.SELECT and 
14b30 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73 2e 20 20  FROM keywords.  
14b40 41 6e 79 20 61 72 62 69 74 72 61 72 79 20 65 78  Any arbitrary ex
14b50 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20  pression can be 
14b60 75 73 65 64 0a 61 73 20 61 20 72 65 73 75 6c 74  used.as a result
14b70 2e 20 20 49 66 20 61 20 72 65 73 75 6c 74 20 65  .  If a result e
14b80 78 70 72 65 73 73 69 6f 6e 20 69 73 20 7d 0a 68  xpression is }.h
14b90 64 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f  d_puts "[Operato
14ba0 72 20 2a 5d 20 74 68 65 6e 20 61 6c 6c 20 63 6f  r *] then all co
14bb0 6c 75 6d 6e 73 20 6f 66 20 61 6c 6c 20 74 61 62  lumns of all tab
14bc0 6c 65 73 20 61 72 65 20 73 75 62 73 74 69 74 75  les are substitu
14bd0 74 65 64 5c 6e 22 0a 68 64 5f 70 75 74 73 20 22  ted\n".hd_puts "
14be0 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 65 78 70  for that one exp
14bf0 72 65 73 73 69 6f 6e 2e 20 20 49 66 20 74 68 65  ression.  If the
14c00 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74   expression is t
14c10 68 65 20 6e 61 6d 65 20 6f 66 5c 6e 22 0a 68 64  he name of\n".hd
14c20 5f 70 75 74 73 20 22 61 20 74 61 62 6c 65 20 66  _puts "a table f
14c30 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4f 70 65 72  ollowed by [Oper
14c40 61 74 6f 72 20 2e 2a 5d 20 74 68 65 6e 20 74 68  ator .*] then th
14c50 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 6c 20  e result is all 
14c60 63 6f 6c 75 6d 6e 73 5c 6e 22 0a 68 64 5f 70 75  columns\n".hd_pu
14c70 74 73 20 7b 69 6e 20 74 68 61 74 20 6f 6e 65 20  ts {in that one 
14c80 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  table.</p>..<p>T
14c90 68 65 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  he DISTINCT keyw
14ca0 6f 72 64 20 63 61 75 73 65 73 20 61 20 73 75 62  ord causes a sub
14cb0 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
14cc0 77 73 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65  ws to be returne
14cd0 64 2c 20 0a 69 6e 20 77 68 69 63 68 20 65 61 63  d, .in which eac
14ce0 68 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20  h result row is 
14cf0 64 69 66 66 65 72 65 6e 74 2e 20 20 4e 55 4c 4c  different.  NULL
14d00 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 74 20   values are not 
14d10 74 72 65 61 74 65 64 20 61 73 20 0a 64 69 73 74  treated as .dist
14d20 69 6e 63 74 20 66 72 6f 6d 20 65 61 63 68 20 6f  inct from each o
14d30 74 68 65 72 2e 20 20 54 68 65 20 64 65 66 61 75  ther.  The defau
14d40 6c 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 74  lt behavior is t
14d50 68 61 74 20 61 6c 6c 20 72 65 73 75 6c 74 20 72  hat all result r
14d60 6f 77 73 20 0a 62 65 20 72 65 74 75 72 6e 65 64  ows .be returned
14d70 2c 20 77 68 69 63 68 20 63 61 6e 20 62 65 20 6d  , which can be m
14d80 61 64 65 20 65 78 70 6c 69 63 69 74 20 77 69 74  ade explicit wit
14d90 68 20 74 68 65 20 6b 65 79 77 6f 72 64 20 41 4c  h the keyword AL
14da0 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 71  L.</p>..<p>The q
14db0 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65 64  uery is executed
14dc0 20 61 67 61 69 6e 73 74 20 6f 6e 65 20 6f 72 20   against one or 
14dd0 6d 6f 72 65 20 74 61 62 6c 65 73 20 73 70 65 63  more tables spec
14de0 69 66 69 65 64 20 61 66 74 65 72 0a 74 68 65 20  ified after.the 
14df0 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 20 49  FROM keyword.  I
14e00 66 20 6d 75 6c 74 69 70 6c 65 20 74 61 62 6c 65  f multiple table
14e10 73 20 6e 61 6d 65 73 20 61 72 65 20 73 65 70 61  s names are sepa
14e20 72 61 74 65 64 20 62 79 20 63 6f 6d 6d 61 73 2c  rated by commas,
14e30 0a 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20  .then the query 
14e40 69 73 20 61 67 61 69 6e 73 74 20 74 68 65 20 63  is against the c
14e50 72 6f 73 73 20 6a 6f 69 6e 20 6f 66 20 74 68 65  ross join of the
14e60 20 76 61 72 69 6f 75 73 20 74 61 62 6c 65 73 2e   various tables.
14e70 0a 54 68 65 20 66 75 6c 6c 20 53 51 4c 2d 39 32  .The full SQL-92
14e80 20 6a 6f 69 6e 20 73 79 6e 74 61 78 20 63 61 6e   join syntax can
14e90 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
14ea0 20 73 70 65 63 69 66 79 20 6a 6f 69 6e 73 2e 0a   specify joins..
14eb0 41 20 73 75 62 2d 71 75 65 72 79 0a 69 6e 20 70  A sub-query.in p
14ec0 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20 62  arentheses may b
14ed0 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66 6f  e substituted fo
14ee0 72 20 61 6e 79 20 74 61 62 6c 65 20 6e 61 6d 65  r any table name
14ef0 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
14f00 75 73 65 2e 0a 54 68 65 20 65 6e 74 69 72 65 20  use..The entire 
14f10 46 52 4f 4d 20 63 6c 61 75 73 65 20 6d 61 79 20  FROM clause may 
14f20 62 65 20 6f 6d 69 74 74 65 64 2c 20 69 6e 20 77  be omitted, in w
14f30 68 69 63 68 20 63 61 73 65 20 74 68 65 20 72 65  hich case the re
14f40 73 75 6c 74 20 69 73 20 61 0a 73 69 6e 67 6c 65  sult is a.single
14f50 20 72 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 20   row consisting 
14f60 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  of the values of
14f70 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
14f80 6c 69 73 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54  list..</p>..<p>T
14f90 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
14fa0 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6c  can be used to l
14fb0 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20  imit the number 
14fc0 6f 66 20 72 6f 77 73 20 6f 76 65 72 0a 77 68 69  of rows over.whi
14fd0 63 68 20 74 68 65 20 71 75 65 72 79 20 6f 70 65  ch the query ope
14fe0 72 61 74 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  rates.</p>..<p>T
14ff0 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
15000 73 65 20 63 61 75 73 65 73 20 6f 6e 65 20 6f 72  se causes one or
15010 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68   more rows of th
15020 65 20 72 65 73 75 6c 74 20 74 6f 0a 62 65 20 63  e result to.be c
15030 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61 20 73  ombined into a s
15040 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 6f 75 74  ingle row of out
15050 70 75 74 2e 20 20 54 68 69 73 20 69 73 20 65 73  put.  This is es
15060 70 65 63 69 61 6c 6c 79 20 75 73 65 66 75 6c 0a  pecially useful.
15070 77 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  when the result 
15080 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  contains aggrega
15090 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54  te functions.  T
150a0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  he expressions i
150b0 6e 0a 74 68 65 20 47 52 4f 55 50 20 42 59 20 63  n.the GROUP BY c
150c0 6c 61 75 73 65 20 64 6f 20 3c 65 6d 3e 6e 6f 74  lause do <em>not
150d0 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62 65  </em> have to be
150e0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
150f0 74 0a 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t.appear in the 
15100 72 65 73 75 6c 74 2e 20 20 54 68 65 20 48 41 56  result.  The HAV
15110 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73 69  ING clause is si
15120 6d 69 6c 61 72 20 74 6f 20 57 48 45 52 45 20 65  milar to WHERE e
15130 78 63 65 70 74 0a 74 68 61 74 20 48 41 56 49 4e  xcept.that HAVIN
15140 47 20 61 70 70 6c 69 65 73 20 61 66 74 65 72 20  G applies after 
15150 67 72 6f 75 70 69 6e 67 20 68 61 73 20 6f 63 63  grouping has occ
15160 75 72 72 65 64 2e 20 20 54 68 65 20 48 41 56 49  urred.  The HAVI
15170 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 0a 6d 61  NG expression.ma
15180 79 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65  y refer to value
15190 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61 74  s, even aggregat
151a0 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61  e functions, tha
151b0 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65  t are not in the
151c0 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70   result.</p>..<p
151d0 3e 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c  >The ORDER BY cl
151e0 61 75 73 65 20 63 61 75 73 65 73 20 74 68 65 20  ause causes the 
151f0 6f 75 74 70 75 74 20 72 6f 77 73 20 74 6f 20 62  output rows to b
15200 65 20 73 6f 72 74 65 64 2e 20 20 0a 54 68 65 20  e sorted.  .The 
15210 61 72 67 75 6d 65 6e 74 20 74 6f 20 4f 52 44 45  argument to ORDE
15220 52 20 42 59 20 69 73 20 61 20 6c 69 73 74 20 6f  R BY is a list o
15230 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68  f expressions th
15240 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74  at are used as t
15250 68 65 0a 6b 65 79 20 66 6f 72 20 74 68 65 20 73  he.key for the s
15260 6f 72 74 2e 20 20 54 68 65 20 65 78 70 72 65 73  ort.  The expres
15270 73 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 68 61 76  sions do not hav
15280 65 20 74 6f 20 62 65 20 70 61 72 74 20 6f 66 20  e to be part of 
15290 74 68 65 0a 72 65 73 75 6c 74 20 66 6f 72 20 61  the.result for a
152a0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20   simple SELECT, 
152b0 62 75 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  but in a compoun
152c0 64 20 53 45 4c 45 43 54 20 65 61 63 68 20 73 6f  d SELECT each so
152d0 72 74 0a 65 78 70 72 65 73 73 69 6f 6e 20 6d 75  rt.expression mu
152e0 73 74 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68  st exactly match
152f0 20 6f 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75   one of the resu
15300 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 61 63  lt columns.  Eac
15310 68 0a 73 6f 72 74 20 65 78 70 72 65 73 73 69 6f  h.sort expressio
15320 6e 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61  n may be optiona
15330 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  lly followed by 
15340 61 20 43 4f 4c 4c 41 54 45 20 6b 65 79 77 6f 72  a COLLATE keywor
15350 64 20 61 6e 64 0a 74 68 65 20 6e 61 6d 65 20 6f  d and.the name o
15360 66 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  f a collating fu
15370 6e 63 74 69 6f 6e 20 75 73 65 64 20 66 6f 72 20  nction used for 
15380 6f 72 64 65 72 69 6e 67 20 74 65 78 74 20 61 6e  ordering text an
15390 64 2f 6f 72 0a 6b 65 79 77 6f 72 64 73 20 41 53  d/or.keywords AS
153a0 43 20 6f 72 20 44 45 53 43 20 74 6f 20 73 70 65  C or DESC to spe
153b0 63 69 66 79 20 74 68 65 20 73 6f 72 74 20 6f 72  cify the sort or
153c0 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63  der.</p>..<p>Eac
153d0 68 20 74 65 72 6d 20 6f 66 20 61 6e 20 4f 52 44  h term of an ORD
153e0 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
153f0 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73   is processed as
15400 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
15410 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49 66 20 74 68  ol>.<li><p>If th
15420 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
15430 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73 74  ssion is a const
15440 61 6e 74 20 69 6e 74 65 67 65 72 20 4b 20 74 68  ant integer K th
15450 65 6e 20 74 68 65 0a 6f 75 74 70 75 74 20 69 73  en the.output is
15460 20 6f 72 64 65 72 65 64 20 62 79 20 74 68 65 20   ordered by the 
15470 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  K-th column of t
15480 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 3c 2f  he result set.</
15490 70 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 49  p></li>.<li><p>I
154a0 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65  f the ORDER BY e
154b0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
154c0 69 64 65 6e 74 69 66 69 65 72 20 61 6e 64 20 6f  identifier and o
154d0 6e 65 20 6f 66 20 74 68 65 0a 6f 75 74 70 75 74  ne of the.output
154e0 20 63 6f 6c 75 6d 6e 73 20 68 61 73 20 61 6e 20   columns has an 
154f0 61 6c 69 61 73 20 62 79 20 74 68 65 20 73 61 6d  alias by the sam
15500 65 20 6e 61 6d 65 2c 20 74 68 65 6e 20 74 68 65  e name, then the
15510 20 6f 75 74 70 75 74 20 69 73 0a 6f 72 64 65 72   output is.order
15520 65 64 20 62 79 20 74 68 65 20 69 64 65 6e 74 69  ed by the identi
15530 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e  fied column.</p>
15540 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 4f 74 68  </li>.<li><p>Oth
15550 65 72 77 69 73 65 2c 20 74 68 65 20 4f 52 44 45  erwise, the ORDE
15560 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
15570 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  is evaluated and
15580 20 74 68 65 20 6f 75 74 70 75 74 20 0a 69 73 20   the output .is 
15590 6f 72 64 65 72 65 64 20 62 79 20 74 68 65 20 76  ordered by the v
155a0 61 6c 75 65 20 6f 66 20 74 68 61 74 20 65 78 70  alue of that exp
155b0 72 65 73 73 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69  ression.</p></li
155c0 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61  >.</ol>..<p>In a
155d0 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
155e0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 20   statement, the 
155f0 74 68 69 72 64 20 4f 52 44 45 52 20 42 59 20 6d  third ORDER BY m
15600 61 74 63 68 69 6e 67 20 72 75 6c 65 0a 72 65 71  atching rule.req
15610 75 69 72 65 73 20 74 68 61 74 20 74 68 65 20 65  uires that the e
15620 78 70 72 65 73 73 69 6f 6e 20 62 65 20 69 64 65  xpression be ide
15630 6e 74 69 63 61 6c 20 74 6f 20 6f 6e 65 20 6f 66  ntical to one of
15640 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 0a   the columns in.
15650 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20  the result set. 
15660 20 54 68 65 20 74 68 72 65 65 20 72 75 6c 65 73   The three rules
15670 20 61 72 65 20 66 69 72 73 74 20 61 70 70 6c 69   are first appli
15680 65 64 20 74 6f 20 74 68 65 20 6c 65 66 74 2d 6d  ed to the left-m
15690 6f 73 74 0a 53 45 4c 45 43 54 20 69 6e 20 74 68  ost.SELECT in th
156a0 65 20 63 6f 6d 70 6f 75 6e 64 2e 20 20 49 66 20  e compound.  If 
156b0 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
156c0 2c 20 74 68 65 20 73 65 61 72 63 68 20 73 74 6f  , the search sto
156d0 70 73 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 0a  ps.  Otherwise,.
156e0 74 68 65 20 6e 65 78 74 20 53 45 4c 45 43 54 20  the next SELECT 
156f0 74 6f 20 74 68 65 20 72 69 67 68 74 20 69 73 20  to the right is 
15700 74 72 69 65 64 2e 20 20 54 68 69 73 20 63 6f 6e  tried.  This con
15710 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 61 20 6d  tinues until a m
15720 61 74 63 68 0a 69 73 20 66 6f 75 6e 64 2e 20 20  atch.is found.  
15730 45 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  Each term of the
15740 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
15750 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 73 65   is processed se
15760 70 61 72 61 74 65 6c 79 20 0a 61 6e 64 20 6d 61  parately .and ma
15770 79 20 63 6f 6d 65 20 66 72 6f 6d 20 64 69 66 66  y come from diff
15780 65 72 65 6e 74 20 53 45 4c 45 43 54 20 73 74 61  erent SELECT sta
15790 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63  tements in the c
157a0 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70  ompound.</p>..<p
157b0 3e 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73  >The LIMIT claus
157c0 65 20 70 6c 61 63 65 73 20 61 6e 20 75 70 70 65  e places an uppe
157d0 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e  r bound on the n
157e0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65  umber of rows.re
157f0 74 75 72 6e 65 64 20 69 6e 20 74 68 65 20 72 65  turned in the re
15800 73 75 6c 74 2e 20 20 41 20 6e 65 67 61 74 69 76  sult.  A negativ
15810 65 20 4c 49 4d 49 54 20 69 6e 64 69 63 61 74 65  e LIMIT indicate
15820 73 20 6e 6f 20 75 70 70 65 72 20 62 6f 75 6e 64  s no upper bound
15830 2e 0a 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4f  ..The optional O
15840 46 46 53 45 54 20 66 6f 6c 6c 6f 77 69 6e 67 20  FFSET following 
15850 4c 49 4d 49 54 20 73 70 65 63 69 66 69 65 73 20  LIMIT specifies 
15860 68 6f 77 20 6d 61 6e 79 0a 72 6f 77 73 20 74 6f  how many.rows to
15870 20 73 6b 69 70 20 61 74 20 74 68 65 20 62 65 67   skip at the beg
15880 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 65  inning of the re
15890 73 75 6c 74 20 73 65 74 2e 0a 49 6e 20 61 20 63  sult set..In a c
158a0 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 2c 20 74  ompound query, t
158b0 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
158c0 6d 61 79 20 6f 6e 6c 79 20 61 70 70 65 61 72 20  may only appear 
158d0 6f 6e 20 74 68 65 0a 66 69 6e 61 6c 20 53 45 4c  on the.final SEL
158e0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54  ECT statement..T
158f0 68 65 20 6c 69 6d 69 74 20 69 73 20 61 70 70 6c  he limit is appl
15900 69 65 64 20 74 6f 20 74 68 65 20 65 6e 74 69 72  ied to the entir
15910 65 20 71 75 65 72 79 20 6e 6f 74 0a 74 6f 20 74  e query not.to t
15920 68 65 20 69 6e 64 69 76 69 64 75 61 6c 20 53 45  he individual SE
15930 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74  LECT statement t
15940 6f 20 77 68 69 63 68 20 69 74 20 69 73 20 61 74  o which it is at
15950 74 61 63 68 65 64 2e 0a 4e 6f 74 65 20 74 68 61  tached..Note tha
15960 74 20 69 66 20 74 68 65 20 4f 46 46 53 45 54 20  t if the OFFSET 
15970 6b 65 79 77 6f 72 64 20 69 73 20 75 73 65 64 20  keyword is used 
15980 69 6e 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  in the LIMIT cla
15990 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 6c 69  use, then the.li
159a0 6d 69 74 20 69 73 20 74 68 65 20 66 69 72 73 74  mit is the first
159b0 20 6e 75 6d 62 65 72 20 61 6e 64 20 74 68 65 20   number and the 
159c0 6f 66 66 73 65 74 20 69 73 20 74 68 65 20 73 65  offset is the se
159d0 63 6f 6e 64 20 6e 75 6d 62 65 72 2e 20 20 49 66  cond number.  If
159e0 20 61 0a 63 6f 6d 6d 61 20 69 73 20 75 73 65 64   a.comma is used
159f0 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
15a00 4f 46 46 53 45 54 20 6b 65 79 77 6f 72 64 2c 20  OFFSET keyword, 
15a10 74 68 65 6e 20 74 68 65 20 6f 66 66 73 65 74 20  then the offset 
15a20 69 73 20 74 68 65 0a 66 69 72 73 74 20 6e 75 6d  is the.first num
15a30 62 65 72 20 61 6e 64 20 74 68 65 20 6c 69 6d 69  ber and the limi
15a40 74 20 69 73 20 74 68 65 20 73 65 63 6f 6e 64 20  t is the second 
15a50 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 73 65  number.  This se
15a60 65 6d 69 6e 67 0a 63 6f 6e 74 72 61 64 69 74 69  eming.contraditi
15a70 6f 6e 20 69 73 20 69 6e 74 65 6e 74 69 6f 6e 61  on is intentiona
15a80 6c 20 2d 20 69 74 20 6d 61 78 69 6d 69 7a 65 73  l - it maximizes
15a90 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
15aa0 69 74 68 20 6c 65 67 61 63 79 0a 53 51 4c 20 64  ith legacy.SQL d
15ab0 61 74 61 62 61 73 65 20 73 79 73 74 65 6d 73 2e  atabase systems.
15ac0 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 63 6f 6d 70  .</p>..<p>A comp
15ad0 6f 75 6e 64 20 53 45 4c 45 43 54 20 69 73 20 66  ound SELECT is f
15ae0 6f 72 6d 65 64 20 66 72 6f 6d 20 74 77 6f 20 6f  ormed from two o
15af0 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53 45  r more simple SE
15b00 4c 45 43 54 73 20 63 6f 6e 6e 65 63 74 65 64 0a  LECTs connected.
15b10 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 70  by one of the op
15b20 65 72 61 74 6f 72 73 20 55 4e 49 4f 4e 2c 20 55  erators UNION, U
15b30 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e 54 45 52 53  NION ALL, INTERS
15b40 45 43 54 2c 20 6f 72 20 45 58 43 45 50 54 2e 20  ECT, or EXCEPT. 
15b50 20 49 6e 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53   In.a compound S
15b60 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65 20 63  ELECT, all the c
15b70 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43  onstituent SELEC
15b80 54 73 20 6d 75 73 74 20 73 70 65 63 69 66 79 20  Ts must specify 
15b90 74 68 65 0a 73 61 6d 65 20 6e 75 6d 62 65 72 20  the.same number 
15ba0 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  of result column
15bb0 73 2e 20 20 54 68 65 72 65 20 6d 61 79 20 62 65  s.  There may be
15bc0 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 4f   only a single O
15bd0 52 44 45 52 20 42 59 0a 63 6c 61 75 73 65 20 61  RDER BY.clause a
15be0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
15bf0 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
15c00 2e 20 20 54 68 65 20 55 4e 49 4f 4e 20 61 6e 64  .  The UNION and
15c10 20 55 4e 49 4f 4e 20 41 4c 4c 0a 6f 70 65 72 61   UNION ALL.opera
15c20 74 6f 72 73 20 63 6f 6d 62 69 6e 65 20 74 68 65  tors combine the
15c30 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
15c40 53 45 4c 45 43 54 73 20 74 6f 20 74 68 65 20 72  SELECTs to the r
15c50 69 67 68 74 20 61 6e 64 20 6c 65 66 74 20 69 6e  ight and left in
15c60 74 6f 0a 61 20 73 69 6e 67 6c 65 20 62 69 67 20  to.a single big 
15c70 74 61 62 6c 65 2e 20 20 54 68 65 20 64 69 66 66  table.  The diff
15c80 65 72 65 6e 63 65 20 69 73 20 74 68 61 74 20 69  erence is that i
15c90 6e 20 55 4e 49 4f 4e 20 61 6c 6c 20 72 65 73 75  n UNION all resu
15ca0 6c 74 20 72 6f 77 73 0a 61 72 65 20 64 69 73 74  lt rows.are dist
15cb0 69 6e 63 74 20 77 68 65 72 65 20 69 6e 20 55 4e  inct where in UN
15cc0 49 4f 4e 20 41 4c 4c 20 74 68 65 72 65 20 6d 61  ION ALL there ma
15cd0 79 20 62 65 20 64 75 70 6c 69 63 61 74 65 73 2e  y be duplicates.
15ce0 0a 54 68 65 20 49 4e 54 45 52 53 45 43 54 20 6f  .The INTERSECT o
15cf0 70 65 72 61 74 6f 72 20 74 61 6b 65 73 20 74 68  perator takes th
15d00 65 20 69 6e 74 65 72 73 65 63 74 69 6f 6e 20 6f  e intersection o
15d10 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  f the results of
15d20 20 74 68 65 0a 6c 65 66 74 20 61 6e 64 20 72 69   the.left and ri
15d30 67 68 74 20 53 45 4c 45 43 54 73 2e 20 20 45 58  ght SELECTs.  EX
15d40 43 45 50 54 20 74 61 6b 65 73 20 74 68 65 20 72  CEPT takes the r
15d50 65 73 75 6c 74 20 6f 66 20 6c 65 66 74 20 53 45  esult of left SE
15d60 4c 45 43 54 20 61 66 74 65 72 0a 72 65 6d 6f 76  LECT after.remov
15d70 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 73 20  ing the results 
15d80 6f 66 20 74 68 65 20 72 69 67 68 74 20 53 45 4c  of the right SEL
15d90 45 43 54 2e 20 20 57 68 65 6e 20 74 68 72 65 65  ECT.  When three
15da0 20 6f 72 20 6d 6f 72 65 20 53 45 4c 45 43 54 73   or more SELECTs
15db0 0a 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 20 69  .are connected i
15dc0 6e 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 2c 20  nto a compound, 
15dd0 74 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20  they group from 
15de0 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 3c 2f  left to right.</
15df0 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  p>...<tcl>.#####
15e00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15e10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15e30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15e40 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
15e50 6e 20 55 50 44 41 54 45 20 75 70 64 61 74 65 20  n UPDATE update 
15e60 7b 55 50 44 41 54 45 20 55 50 44 41 54 45 73 7d  {UPDATE UPDATEs}
15e70 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
15e80 75 70 64 61 74 65 2d 73 74 6d 74 20 31 0a 42 75  update-stmt 1.Bu
15e90 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c  bbleDiagram qual
15ea0 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
15eb0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
15ec0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
15ed0 20 69 73 20 75 73 65 64 20 74 6f 20 63 68 61 6e   is used to chan
15ee0 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ge the value of 
15ef0 63 6f 6c 75 6d 6e 73 20 69 6e 20 0a 73 65 6c 65  columns in .sele
15f00 63 74 65 64 20 72 6f 77 73 20 6f 66 20 61 20 74  cted rows of a t
15f10 61 62 6c 65 2e 20 20 45 61 63 68 20 61 73 73 69  able.  Each assi
15f20 67 6e 6d 65 6e 74 20 69 6e 20 61 6e 20 55 50 44  gnment in an UPD
15f30 41 54 45 20 73 70 65 63 69 66 69 65 73 0a 61 20  ATE specifies.a 
15f40 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74  column name to t
15f50 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20 65  he left of the e
15f60 71 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20 61  quals sign and a
15f70 6e 20 61 72 62 69 74 72 61 72 79 20 65 78 70 72  n arbitrary expr
15f80 65 73 73 69 6f 6e 0a 74 6f 20 74 68 65 20 72 69  ession.to the ri
15f90 67 68 74 2e 20 20 54 68 65 20 65 78 70 72 65 73  ght.  The expres
15fa0 73 69 6f 6e 73 20 6d 61 79 20 75 73 65 20 74 68  sions may use th
15fb0 65 20 76 61 6c 75 65 73 20 6f 66 20 6f 74 68 65  e values of othe
15fc0 72 20 63 6f 6c 75 6d 6e 73 2e 0a 41 6c 6c 20 65  r columns..All e
15fd0 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65  xpressions are e
15fe0 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20  valuated before 
15ff0 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74 73 20  any assignments 
16000 61 72 65 20 6d 61 64 65 2e 0a 41 20 57 48 45 52  are made..A WHER
16010 45 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20  E clause can be 
16020 75 73 65 64 20 74 6f 20 72 65 73 74 72 69 63 74  used to restrict
16030 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20   which rows are 
16040 75 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  updated.</p>..<p
16050 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f  >The optional co
16060 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c  nflict-clause al
16070 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69 66 69  lows the specifi
16080 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74  cation of an alt
16090 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61  ernative.constra
160a0 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  int conflict res
160b0 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
160c0 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20  m to use during 
160d0 74 68 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64  this one command
160e0 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f  ..See the sectio
160f0 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e  n titled.[ON CON
16100 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74  FLICT] for addit
16110 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
16120 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 53 51  n.</p>..<p>If SQ
16130 4c 69 74 65 20 69 73 20 62 75 69 6c 74 20 77 69  Lite is built wi
16140 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45  th the [SQLITE_E
16150 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
16160 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69  ETE_LIMIT].compi
16170 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74  le-time option t
16180 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f  hen the syntax o
16190 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
161a0 74 65 6d 65 6e 74 20 69 73 20 65 78 74 65 6e 64  tement is extend
161b0 65 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c  ed.with optional
161c0 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49   ORDER BY and LI
161d0 4d 49 54 20 63 6c 61 75 73 65 73 20 61 73 20 66  MIT clauses as f
161e0 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63  ollows:</p>..<tc
161f0 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  l>BubbleDiagram 
16200 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d 69  update-stmt-limi
16210 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  ted</tcl>..<p>Th
16220 65 20 6f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54  e optional LIMIT
16230 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20 75   clause can be u
16240 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  sed to limit the
16250 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20   number of.rows 
16260 6d 6f 64 69 66 65 64 2c 20 61 6e 64 20 74 68 65  modifed, and the
16270 72 65 62 79 20 6c 69 6d 69 74 20 74 68 65 20 73  reby limit the s
16280 69 7a 65 20 6f 66 20 74 68 65 20 74 72 61 6e 73  ize of the trans
16290 61 63 74 69 6f 6e 2e 0a 54 68 65 20 4f 52 44 45  action..The ORDE
162a0 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 75  R BY clause is u
162b0 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65  sed only to dete
162c0 72 6d 69 6e 65 20 77 68 69 63 68 20 72 6f 77 73  rmine which rows
162d0 20 66 61 6c 6c 0a 77 69 74 68 69 6e 20 74 68 65   fall.within the
162e0 20 4c 49 4d 49 54 2e 20 20 54 68 65 20 6f 72 64   LIMIT.  The ord
162f0 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73  er in which rows
16300 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 69 73   are modified is
16310 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69   arbitrary.and i
16320 73 20 6e 6f 74 20 64 65 74 65 72 6d 69 6e 65 64  s not determined
16330 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42 59   by the ORDER BY
16340 20 63 6c 61 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 74   clause.</p>..<t
16350 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
16360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
163a0 23 23 0a 53 65 63 74 69 6f 6e 20 56 41 43 55 55  ##.Section VACUU
163b0 4d 20 76 61 63 75 75 6d 20 56 41 43 55 55 4d 0a  M vacuum VACUUM.
163c0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 76  .BubbleDiagram v
163d0 61 63 75 75 6d 2d 73 74 6d 74 20 31 0a 3c 2f 74  acuum-stmt 1.</t
163e0 63 6c 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61 6e 20  cl>..<p>When an 
163f0 6f 62 6a 65 63 74 20 28 74 61 62 6c 65 2c 20 69  object (table, i
16400 6e 64 65 78 2c 20 6f 72 20 74 72 69 67 67 65 72  ndex, or trigger
16410 29 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f  ) is dropped fro
16420 6d 20 74 68 65 20 0a 64 61 74 61 62 61 73 65 2c  m the .database,
16430 20 69 74 20 6c 65 61 76 65 73 20 62 65 68 69 6e   it leaves behin
16440 64 20 65 6d 70 74 79 20 73 70 61 63 65 2e 20 20  d empty space.  
16450 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20 64  This makes the d
16460 61 74 61 62 61 73 65 20 0a 66 69 6c 65 20 6c 61  atabase .file la
16470 72 67 65 72 20 74 68 61 6e 20 69 74 20 6e 65 65  rger than it nee
16480 64 73 20 74 6f 20 62 65 2c 20 62 75 74 20 63 61  ds to be, but ca
16490 6e 20 73 70 65 65 64 20 75 70 20 69 6e 73 65 72  n speed up inser
164a0 74 73 2e 20 20 49 6e 20 74 69 6d 65 20 0a 69 6e  ts.  In time .in
164b0 73 65 72 74 73 20 61 6e 64 20 64 65 6c 65 74 65  serts and delete
164c0 73 20 63 61 6e 20 6c 65 61 76 65 20 74 68 65 20  s can leave the 
164d0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 73 74  database file st
164e0 72 75 63 74 75 72 65 20 66 72 61 67 6d 65 6e 74  ructure fragment
164f0 65 64 2c 20 0a 77 68 69 63 68 20 73 6c 6f 77 73  ed, .which slows
16500 20 64 6f 77 6e 20 64 69 73 6b 20 61 63 63 65 73   down disk acces
16510 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  s to the databas
16520 65 20 63 6f 6e 74 65 6e 74 73 2e 3c 2f 70 3e 0a  e contents.</p>.
16530 0a 3c 70 3e 54 68 65 20 56 41 43 55 55 4d 20 63  .<p>The VACUUM c
16540 6f 6d 6d 61 6e 64 20 63 6c 65 61 6e 73 0a 74 68  ommand cleans.th
16550 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
16560 62 79 20 63 6f 70 79 69 6e 67 20 69 74 73 20 63  by copying its c
16570 6f 6e 74 65 6e 74 73 20 74 6f 20 61 20 74 65 6d  ontents to a tem
16580 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20  porary database 
16590 66 69 6c 65 20 61 6e 64 20 0a 72 65 6c 6f 61 64  file and .reload
165a0 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  ing the original
165b0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
165c0 72 6f 6d 20 74 68 65 20 63 6f 70 79 2e 20 20 54  rom the copy.  T
165d0 68 69 73 20 65 6c 69 6d 69 6e 61 74 65 73 20 0a  his eliminates .
165e0 66 72 65 65 20 70 61 67 65 73 2c 20 20 61 6c 69  free pages,  ali
165f0 67 6e 73 20 74 61 62 6c 65 20 64 61 74 61 20 74  gns table data t
16600 6f 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 2c  o be contiguous,
16610 20 61 6e 64 20 6f 74 68 65 72 77 69 73 65 20 63   and otherwise c
16620 6c 65 61 6e 73 20 0a 75 70 20 74 68 65 20 64 61  leans .up the da
16630 74 61 62 61 73 65 20 66 69 6c 65 20 73 74 72 75  tabase file stru
16640 63 74 75 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  cture.</p>..<p>T
16650 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
16660 64 20 6d 61 79 20 63 68 61 6e 67 65 20 74 68 65  d may change the
16670 20 0a 5b 52 4f 57 49 44 20 7c 20 52 4f 57 49 44   .[ROWID | ROWID
16680 73 5d 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  s] of entries in
16690 20 74 61 62 6c 65 73 20 74 68 61 74 20 64 6f 0a   tables that do.
166a0 6e 6f 74 20 68 61 76 65 20 61 6e 20 65 78 70 6c  not have an expl
166b0 69 63 69 74 20 5b 49 4e 54 45 47 45 52 20 50 52  icit [INTEGER PR
166c0 49 4d 41 52 59 20 4b 45 59 5d 2e 3c 2f 70 3e 0a  IMARY KEY].</p>.
166d0 0a 3c 70 3e 56 41 43 55 55 4d 20 6f 6e 6c 79 20  .<p>VACUUM only 
166e0 77 6f 72 6b 73 20 6f 6e 20 74 68 65 20 6d 61 69  works on the mai
166f0 6e 20 64 61 74 61 62 61 73 65 2e 0a 49 74 20 69  n database..It i
16700 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
16710 6f 20 56 41 43 55 55 4d 20 61 6e 20 61 74 74 61  o VACUUM an atta
16720 63 68 65 64 20 64 61 74 61 62 61 73 65 20 66 69  ched database fi
16730 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  le.</p>..<p>The 
16740 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77  VACUUM command w
16750 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 72  ill fail if ther
16760 65 20 69 73 20 61 6e 20 61 63 74 69 76 65 20 74  e is an active t
16770 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 54 68 65 20  ransaction..The 
16780 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 69  VACUUM command i
16790 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 69 6e  s a no-op for in
167a0 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
167b0 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 73 20 6f 66  s.</p>..<p>As of
167c0 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
167d0 33 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74  3.1, an alternat
167e0 69 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65  ive to using the
167f0 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 0a   VACUUM command.
16800 69 73 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d  is auto-vacuum m
16810 6f 64 65 2c 20 65 6e 61 62 6c 65 64 20 75 73 69  ode, enabled usi
16820 6e 67 20 74 68 65 20 0a 5b 61 75 74 6f 5f 76 61  ng the .[auto_va
16830 63 75 75 6d 5d 20 70 72 61 67 6d 61 2e 20 20 57  cuum] pragma.  W
16840 68 65 6e 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  hen [auto_vacuum
16850 5d 20 69 73 20 65 6e 61 62 6c 65 64 20 66 6f 72  ] is enabled for
16860 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a 6c 61   a database, .la
16870 72 67 65 20 64 65 6c 65 74 65 73 20 63 61 75 73  rge deletes caus
16880 65 0a 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  e.the size of th
16890 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
168a0 74 6f 20 73 68 72 69 6e 6b 2e 20 20 48 6f 77 65  to shrink.  Howe
168b0 76 65 72 2c 20 5b 61 75 74 6f 5f 76 61 63 75 75  ver, [auto_vacuu
168c0 6d 5d 0a 61 6c 73 6f 20 63 61 75 73 65 73 20 65  m].also causes e
168d0 78 63 65 73 73 20 66 72 61 67 6d 65 6e 74 61 74  xcess fragmentat
168e0 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 62  ion of the datab
168f0 61 73 65 20 66 69 6c 65 2e 20 20 41 6e 64 20 5b  ase file.  And [
16900 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65  auto_vacuum].doe
16910 73 20 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61  s not compact pa
16920 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70  rtially filled p
16930 61 67 65 73 20 6f 66 20 74 68 65 20 64 61 74 61  ages of the data
16940 62 61 73 65 20 61 73 20 56 41 43 55 55 4d 0a 64  base as VACUUM.d
16950 6f 65 73 2e 0a 3c 2f 70 3e 0a 3c 74 63 6c 3e 0a  oes..</p>.<tcl>.
16960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
169a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
169b0 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20  ection {INDEXED 
169c0 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b 7b  BY} indexedby {{
169d0 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54  INDEXED BY} {NOT
169e0 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63   INDEXED}}..</tc
169f0 6c 3e 0a 3c 70 3e 54 68 65 20 49 4e 44 45 58 45  l>.<p>The INDEXE
16a00 44 20 42 59 20 70 68 72 61 73 65 20 69 73 20 61  D BY phrase is a
16a10 20 53 51 4c 20 65 78 74 65 6e 73 69 6f 6e 20 66   SQL extension f
16a20 6f 75 6e 64 20 6f 6e 6c 79 20 69 6e 20 53 51 4c  ound only in SQL
16a30 69 74 65 20 77 68 69 63 68 20 63 61 6e 0a 62 65  ite which can.be
16a40 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20   used to verify 
16a50 74 68 61 74 20 74 68 65 20 63 6f 72 72 65 63 74  that the correct
16a60 20 69 6e 64 69 63 65 73 20 61 72 65 20 62 65 69   indices are bei
16a70 6e 67 20 75 73 65 64 20 6f 6e 20 61 20 5b 44 45  ng used on a [DE
16a80 4c 45 54 45 5d 2c 0a 5b 53 45 4c 45 43 54 5d 2c  LETE],.[SELECT],
16a90 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61   or [UPDATE] sta
16aa0 74 65 6d 65 6e 74 2e 0a 54 68 65 20 49 4e 44 45  tement..The INDE
16ab0 58 45 44 20 42 59 20 70 68 72 61 73 65 20 61 6c  XED BY phrase al
16ac0 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 74 68 65  ways follows the
16ad0 20 6e 61 6d 65 20 6f 66 20 61 20 74 61 62 6c 65   name of a table
16ae0 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c   that SQLite wil
16af0 6c 0a 62 65 20 72 65 61 64 69 6e 67 2e 20 20 54  l.be reading.  T
16b00 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
16b10 72 61 73 65 20 63 61 6e 20 62 65 20 73 65 65 6e  rase can be seen
16b20 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
16b30 67 20 73 79 6e 74 61 78 0a 64 69 61 67 72 61 6d  g syntax.diagram
16b40 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 42 75  s:</p>..<tcl>.Bu
16b50 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c  bbleDiagram qual
16b60 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
16b70 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  .BubbleDiagram s
16b80 69 6e 67 6c 65 2d 73 6f 75 72 63 65 0a 3c 2f 74  ingle-source.</t
16b90 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 22 49 4e 44  cl>..<p>The "IND
16ba0 45 58 45 44 20 42 59 20 69 6e 64 65 78 2d 6e 61  EXED BY index-na
16bb0 6d 65 22 20 63 6c 61 75 73 65 20 73 70 65 63 69  me" clause speci
16bc0 66 69 65 73 20 74 68 61 74 20 74 68 65 20 6e 61  fies that the na
16bd0 6d 65 64 20 69 6e 64 65 78 0a 6d 75 73 74 20 62  med index.must b
16be0 65 20 75 73 65 64 20 69 6e 20 6f 72 64 65 72 20  e used in order 
16bf0 74 6f 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75 65  to look up value
16c00 73 20 6f 6e 20 74 68 65 20 70 72 65 63 65 65 64  s on the preceed
16c10 69 6e 67 20 74 61 62 6c 65 2e 0a 49 66 20 69 6e  ing table..If in
16c20 64 65 78 2d 6e 61 6d 65 20 64 6f 65 73 20 6e 6f  dex-name does no
16c30 74 20 65 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f  t exist or canno
16c40 74 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  t be used for th
16c50 65 20 71 75 65 72 79 2c 20 74 68 65 6e 0a 74 68  e query, then.th
16c60 65 20 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66  e preparation of
16c70 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
16c80 6e 74 20 66 61 69 6c 73 2e 0a 54 68 65 20 22 4e  nt fails..The "N
16c90 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c 61 75  OT INDEXED" clau
16ca0 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68 61  se specifies tha
16cb0 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c  t no index shall
16cc0 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a 61 63   be used when.ac
16cd0 63 65 73 73 69 6e 67 20 74 68 65 20 70 72 65 63  cessing the prec
16ce0 65 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e  eeding table, in
16cf0 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20  cluding implied 
16d00 69 6e 64 69 63 65 73 20 63 72 65 61 74 65 20 62  indices create b
16d10 79 0a 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49  y.UNIQUE and PRI
16d20 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61  MARY KEY constra
16d30 69 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c 20  ints.  However, 
16d40 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d  the INTEGER PRIM
16d50 41 52 59 20 4b 45 59 0a 63 61 6e 20 73 74 69 6c  ARY KEY.can stil
16d60 6c 20 62 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f  l be used to loo
16d70 6b 20 75 70 20 65 6e 74 72 69 65 73 20 65 76 65  k up entries eve
16d80 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45  n when "NOT INDE
16d90 58 45 44 22 20 69 73 20 73 70 65 63 69 66 69 65  XED" is specifie
16da0 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d 65 20  d.</p>..<p>Some 
16db0 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67  SQL database eng
16dc0 69 6e 65 73 20 70 72 6f 76 69 64 65 20 6e 6f 6e  ines provide non
16dd0 2d 73 74 61 6e 64 61 72 64 20 22 68 69 6e 74 22  -standard "hint"
16de0 20 6d 65 63 68 61 6e 69 73 6d 73 20 77 68 69 63   mechanisms whic
16df0 68 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  h.can be used to
16e00 20 67 69 76 65 20 74 68 65 20 71 75 65 72 79 20   give the query 
16e10 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75 65 73 20  optimizer clues 
16e20 61 62 6f 75 74 20 77 68 61 74 20 69 6e 64 69 63  about what indic
16e30 65 73 20 69 74 20 73 68 6f 75 6c 64 0a 75 73 65  es it should.use
16e40 20 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61   for a particula
16e50 72 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  r statement.  Th
16e60 65 20 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73  e INDEX BY claus
16e70 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73 20 0a  e of SQLite is .
16e80 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 20 68  <em>not</em> a h
16e90 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d  inting mechanism
16ea0 20 61 6e 64 20 69 74 20 73 68 6f 75 6c 64 20 6e   and it should n
16eb0 6f 74 20 62 65 20 75 73 65 64 20 61 73 20 73 75  ot be used as su
16ec0 63 68 2e 0a 54 68 65 20 49 4e 44 45 58 45 44 20  ch..The INDEXED 
16ed0 42 59 20 63 6c 61 75 73 65 20 64 6f 65 73 20 6e  BY clause does n
16ee0 6f 74 20 67 69 76 65 20 74 68 65 20 6f 70 74 69  ot give the opti
16ef0 6d 69 7a 65 72 20 68 69 6e 74 73 20 61 62 6f 75  mizer hints abou
16f00 74 20 77 68 69 63 68 20 69 6e 64 65 78 0a 74 6f  t which index.to
16f10 20 75 73 65 3b 20 69 74 20 67 69 76 65 73 20 74   use; it gives t
16f20 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 61 20 72  he optimizer a r
16f30 65 71 75 69 72 65 6d 65 6e 74 20 6f 66 20 77 68  equirement of wh
16f40 69 63 68 20 69 6e 64 65 78 20 74 6f 20 75 73 65  ich index to use
16f50 2e 0a 49 66 20 74 68 65 20 71 75 65 72 79 20 6f  ..If the query o
16f60 70 74 69 6d 69 7a 65 72 20 69 73 20 75 6e 61 62  ptimizer is unab
16f70 6c 65 20 74 6f 20 75 73 65 20 74 68 65 20 69 6e  le to use the in
16f80 64 65 78 20 73 70 65 63 69 66 69 65 64 20 62 79  dex specified by
16f90 20 74 68 65 0a 49 4e 44 45 58 20 42 59 20 63 6c   the.INDEX BY cl
16fa0 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 71  ause, then the q
16fb0 75 65 72 79 20 77 69 6c 6c 20 66 61 69 6c 20 77  uery will fail w
16fc0 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70  ith an error.</p
16fd0 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 44 45 58 45  >..<p>The INDEXE
16fe0 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 3c  D BY clause is <
16ff0 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 69 6e 74 65  em>not</em> inte
17000 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 20  nded for use in 
17010 74 75 6e 69 6e 67 0a 74 68 65 20 70 72 65 66 6f  tuning.the prefo
17020 72 6d 61 6e 63 65 20 6f 66 20 61 20 71 75 65 72  rmance of a quer
17030 79 2e 20 20 54 68 65 20 69 6e 74 65 6e 74 20 6f  y.  The intent o
17040 66 20 74 68 65 20 49 4e 44 45 58 45 44 20 42 59  f the INDEXED BY
17050 20 63 6c 61 75 73 65 20 69 73 0a 74 6f 20 72 61   clause is.to ra
17060 69 73 65 20 61 20 72 75 6e 2d 74 69 6d 65 20 65  ise a run-time e
17070 72 72 6f 72 20 69 66 20 61 20 73 63 68 65 6d 61  rror if a schema
17080 20 63 68 61 6e 67 65 2c 20 73 75 63 68 20 61 73   change, such as
17090 20 64 72 6f 70 70 69 6e 67 20 6f 72 0a 63 72 65   dropping or.cre
170a0 61 74 69 6e 67 20 61 6e 20 69 6e 64 65 78 2c 20  ating an index, 
170b0 63 61 75 73 65 73 20 74 68 65 20 71 75 65 72 79  causes the query
170c0 20 70 6c 61 6e 20 66 6f 72 20 61 20 74 69 6d 65   plan for a time
170d0 2d 73 65 6e 73 69 74 69 76 65 20 71 75 65 72 79  -sensitive query
170e0 0a 74 6f 20 63 68 61 6e 67 65 2e 20 20 54 68 65  .to change.  The
170f0 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
17100 73 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74  se is designed t
17110 6f 20 68 65 6c 70 20 64 65 74 65 63 74 0a 75 6e  o help detect.un
17120 64 65 73 69 72 61 62 6c 65 20 71 75 65 72 79 20  desirable query 
17130 70 6c 61 6e 20 63 68 61 6e 67 65 73 20 64 75 72  plan changes dur
17140 69 6e 67 20 72 65 67 72 65 73 73 69 6f 6e 20 74  ing regression t
17150 65 73 74 69 6e 67 2e 0a 44 65 76 65 6c 6f 70 65  esting..Develope
17160 72 73 20 61 72 65 20 61 64 6d 6f 6e 69 73 68 65  rs are admonishe
17170 64 20 74 6f 20 6f 6d 69 74 20 61 6c 6c 20 75 73  d to omit all us
17180 65 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59 20  e of INDEXED BY 
17190 64 75 72 69 6e 67 0a 61 70 70 6c 69 63 61 74 69  during.applicati
171a0 6f 6e 20 64 65 73 69 67 6e 2c 20 69 6d 70 6c 65  on design, imple
171b0 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 65 73 74 69  mentation, testi
171c0 6e 67 2c 20 61 6e 64 20 74 75 6e 69 6e 67 2e 20  ng, and tuning. 
171d0 20 49 66 0a 49 4e 44 45 58 45 44 20 42 59 20 69   If.INDEXED BY i
171e0 73 20 74 6f 20 62 65 20 75 73 65 64 20 61 74 20  s to be used at 
171f0 61 6c 6c 2c 20 69 74 20 73 68 6f 75 6c 64 20 62  all, it should b
17200 65 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68  e inserted at th
17210 65 20 76 65 72 79 0a 65 6e 64 20 6f 66 20 74 68  e very.end of th
17220 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 70 72  e development pr
17230 6f 63 65 73 73 20 77 68 65 6e 20 22 6c 6f 63 6b  ocess when "lock
17240 69 6e 67 20 64 6f 77 6e 22 20 61 20 64 65 73 69  ing down" a desi
17250 67 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  gn.</p>..<tcl>.#
17260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
172a0 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 41  ############.# A
172b0 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64   list of keyword
172c0 73 2e 20 20 41 20 61 73 74 65 72 69 73 6b 20 6f  s.  A asterisk o
172d0 63 63 75 72 73 20 61 66 74 65 72 20 74 68 65 20  ccurs after the 
172e0 6b 65 79 77 6f 72 64 20 69 66 20 69 74 20 69 73  keyword if it is
172f0 20 6f 6e 0a 23 20 74 68 65 20 66 61 6c 6c 62 61   on.# the fallba
17300 63 6b 20 6c 69 73 74 2e 0a 23 0a 73 65 74 20 6b  ck list..#.set k
17310 65 79 77 6f 72 64 5f 6c 69 73 74 20 5b 6c 73 6f  eyword_list [lso
17320 72 74 20 7b 0a 20 20 20 41 42 4f 52 54 2a 0a 20  rt {.   ABORT*. 
17330 20 20 41 44 44 0a 20 20 20 41 46 54 45 52 2a 0a    ADD.   AFTER*.
17340 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a     ALL.   ALTER.
17350 20 20 20 41 4e 41 4c 59 5a 45 2a 0a 20 20 20 41     ANALYZE*.   A
17360 4e 44 0a 20 20 20 41 53 0a 20 20 20 41 53 43 2a  ND.   AS.   ASC*
17370 0a 20 20 20 41 54 54 41 43 48 2a 0a 20 20 20 41  .   ATTACH*.   A
17380 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20  UTOINCREMENT.   
17390 42 45 46 4f 52 45 2a 0a 20 20 20 42 45 47 49 4e  BEFORE*.   BEGIN
173a0 2a 0a 20 20 20 42 45 54 57 45 45 4e 0a 20 20 20  *.   BETWEEN.   
173b0 42 59 2a 0a 20 20 20 43 41 53 43 41 44 45 2a 0a  BY*.   CASCADE*.
173c0 20 20 20 43 41 53 45 0a 20 20 20 43 41 53 54 2a     CASE.   CAST*
173d0 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43 4f 4c  .   CHECK.   COL
173e0 4c 41 54 45 0a 20 20 20 43 4f 4c 55 4d 4e 2a 0a  LATE.   COLUMN*.
173f0 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e     COMMIT.   CON
17400 46 4c 49 43 54 2a 0a 20 20 20 43 4f 4e 53 54 52  FLICT*.   CONSTR
17410 41 49 4e 54 0a 20 20 20 43 52 45 41 54 45 0a 20  AINT.   CREATE. 
17420 20 20 43 52 4f 53 53 0a 20 20 20 43 55 52 52 45    CROSS.   CURRE
17430 4e 54 5f 44 41 54 45 2a 0a 20 20 20 43 55 52 52  NT_DATE*.   CURR
17440 45 4e 54 5f 54 49 4d 45 2a 0a 20 20 20 43 55 52  ENT_TIME*.   CUR
17450 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2a 0a  RENT_TIMESTAMP*.
17460 20 20 20 44 41 54 41 42 41 53 45 2a 0a 20 20 20     DATABASE*.   
17470 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45 52  DEFAULT.   DEFER
17480 52 45 44 2a 0a 20 20 20 44 45 46 45 52 52 41 42  RED*.   DEFERRAB
17490 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20  LE.   DELETE.   
174a0 44 45 53 43 2a 0a 20 20 20 44 45 54 41 43 48 2a  DESC*.   DETACH*
174b0 0a 20 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20  .   DISTINCT.   
174c0 44 52 4f 50 0a 20 20 20 45 4e 44 2a 0a 20 20 20  DROP.   END*.   
174d0 45 41 43 48 2a 0a 20 20 20 45 4c 53 45 0a 20 20  EACH*.   ELSE.  
174e0 20 45 53 43 41 50 45 0a 20 20 20 45 58 43 45 50   ESCAPE.   EXCEP
174f0 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45 2a 0a  T.   EXCLUSIVE*.
17500 20 20 20 45 58 49 53 54 53 0a 20 20 20 45 58 50     EXISTS.   EXP
17510 4c 41 49 4e 2a 0a 20 20 20 46 41 49 4c 2a 0a 20  LAIN*.   FAIL*. 
17520 20 20 46 4f 52 2a 0a 20 20 20 46 4f 52 45 49 47    FOR*.   FOREIG
17530 4e 0a 20 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c  N.   FROM.   FUL
17540 4c 0a 20 20 20 47 4c 4f 42 2a 0a 20 20 20 47 52  L.   GLOB*.   GR
17550 4f 55 50 0a 20 20 20 48 41 56 49 4e 47 0a 20 20  OUP.   HAVING.  
17560 20 49 46 2a 0a 20 20 20 49 47 4e 4f 52 45 2a 0a   IF*.   IGNORE*.
17570 20 20 20 49 4d 4d 45 44 49 41 54 45 2a 0a 20 20     IMMEDIATE*.  
17580 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20 20 20   IN.   INDEX.   
17590 49 4e 44 45 58 45 44 0a 20 20 20 49 4e 49 54 49  INDEXED.   INITI
175a0 41 4c 4c 59 2a 0a 20 20 20 49 4e 4e 45 52 0a 20  ALLY*.   INNER. 
175b0 20 20 49 4e 53 45 52 54 0a 20 20 20 49 4e 53 54    INSERT.   INST
175c0 45 41 44 2a 0a 20 20 20 49 4e 54 45 52 53 45 43  EAD*.   INTERSEC
175d0 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49 53 0a  T.   INTO.   IS.
175e0 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49     ISNULL.   JOI
175f0 4e 0a 20 20 20 4b 45 59 2a 0a 20 20 20 4c 45 46  N.   KEY*.   LEF
17600 54 0a 20 20 20 4c 49 4b 45 2a 0a 20 20 20 4c 49  T.   LIKE*.   LI
17610 4d 49 54 0a 20 20 20 4d 41 54 43 48 2a 0a 20 20  MIT.   MATCH*.  
17620 20 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f 54 0a   NATURAL.   NOT.
17630 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55     NOTNULL.   NU
17640 4c 4c 0a 20 20 20 4f 46 2a 0a 20 20 20 4f 46 46  LL.   OF*.   OFF
17650 53 45 54 2a 0a 20 20 20 4f 4e 0a 20 20 20 4f 52  SET*.   ON.   OR
17660 0a 20 20 20 4f 52 44 45 52 0a 20 20 20 4f 55 54  .   ORDER.   OUT
17670 45 52 0a 20 20 20 50 4c 41 4e 2a 0a 20 20 20 50  ER.   PLAN*.   P
17680 52 41 47 4d 41 2a 0a 20 20 20 50 52 49 4d 41 52  RAGMA*.   PRIMAR
17690 59 0a 20 20 20 51 55 45 52 59 2a 0a 20 20 20 52  Y.   QUERY*.   R
176a0 41 49 53 45 2a 0a 20 20 20 52 45 46 45 52 45 4e  AISE*.   REFEREN
176b0 43 45 53 0a 20 20 20 52 45 47 45 58 50 2a 0a 20  CES.   REGEXP*. 
176c0 20 20 52 45 49 4e 44 45 58 2a 0a 20 20 20 52 45    REINDEX*.   RE
176d0 4c 45 41 53 45 2a 0a 20 20 20 52 45 4e 41 4d 45  LEASE*.   RENAME
176e0 2a 0a 20 20 20 52 45 50 4c 41 43 45 2a 0a 20 20  *.   REPLACE*.  
176f0 20 52 45 53 54 52 49 43 54 2a 0a 20 20 20 52 49   RESTRICT*.   RI
17700 47 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a  GHT.   ROLLBACK.
17710 20 20 20 52 4f 57 2a 0a 20 20 20 53 41 56 45 50     ROW*.   SAVEP
17720 4f 49 4e 54 2a 0a 20 20 20 53 45 4c 45 43 54 0a  OINT*.   SELECT.
17730 20 20 20 53 45 54 0a 20 20 20 54 41 42 4c 45 0a     SET.   TABLE.
17740 20 20 20 54 45 4d 50 2a 0a 20 20 20 54 45 4d 50     TEMP*.   TEMP
17750 4f 52 41 52 59 2a 0a 20 20 20 54 48 45 4e 0a 20  ORARY*.   THEN. 
17760 20 20 54 4f 0a 20 20 20 54 52 41 4e 53 41 43 54    TO.   TRANSACT
17770 49 4f 4e 0a 20 20 20 54 52 49 47 47 45 52 2a 0a  ION.   TRIGGER*.
17780 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49 51     UNION.   UNIQ
17790 55 45 0a 20 20 20 55 50 44 41 54 45 0a 20 20 20  UE.   UPDATE.   
177a0 55 53 49 4e 47 0a 20 20 20 56 41 43 55 55 4d 2a  USING.   VACUUM*
177b0 0a 20 20 20 56 41 4c 55 45 53 0a 20 20 20 56 49  .   VALUES.   VI
177c0 45 57 2a 0a 20 20 20 56 49 52 54 55 41 4c 2a 0a  EW*.   VIRTUAL*.
177d0 20 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52 45     WHEN.   WHERE
177e0 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c 44  .}]..hd_puts {<D
177f0 49 56 20 63 6c 61 73 73 3d 22 70 64 66 5f 73 65  IV class="pdf_se
17800 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e  ction">}.Section
17810 20 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f 72 64   {SQLite Keyword
17820 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b 53 51  s} keywords {{SQ
17830 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51 4c 20  L keyword} {SQL 
17840 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f 70 75  keywords}}.hd_pu
17850 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63  ts {</DIV>}.</tc
17860 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73  l>..<p>The SQL s
17870 74 61 6e 64 61 72 64 20 73 70 65 63 69 66 69 65  tandard specifie
17880 73 20 61 20 68 75 67 65 20 6e 75 6d 62 65 72 20  s a huge number 
17890 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68 69 63  of keywords whic
178a0 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75 73 65  h may not.be use
178b0 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f  d as the names o
178c0 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63 65  f tables, indice
178d0 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61 74 61  s, columns, data
178e0 62 61 73 65 73 2c 20 75 73 65 72 2d 64 65 66 69  bases, user-defi
178f0 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c 20 63  ned.functions, c
17900 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72 74 75  ollations, virtu
17910 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 73  al table modules
17920 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6e  , or any other n
17930 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54 68 65  amed object..The
17940 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64   list of keyword
17950 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74 68 61  s is so long tha
17960 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63 61 6e  t few people can
17970 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d 20 61   remember them a
17980 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53 51 4c  ll..For most SQL
17990 20 63 6f 64 65 2c 20 79 6f 75 72 20 73 61 66 65   code, your safe
179a0 73 74 20 62 65 74 20 69 73 20 74 6f 20 6e 65 76  st bet is to nev
179b0 65 72 20 75 73 65 20 61 6e 79 20 45 6e 67 6c 69  er use any Engli
179c0 73 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f 72 64  sh language.word
179d0 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   as the name of 
179e0 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 6f  a user-defined o
179f0 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  bject.</p>..<p>I
17a00 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 75 73  f you want to us
17a10 65 20 61 20 6b 65 79 77 6f 72 64 20 61 73 20 61  e a keyword as a
17a20 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65 64 20   name, you need 
17a30 74 6f 20 71 75 6f 74 65 20 69 74 2e 20 20 54 68  to quote it.  Th
17a40 65 72 65 0a 61 72 65 20 74 68 72 65 65 20 77 61  ere.are three wa
17a50 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b 65  ys of quoting ke
17a60 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74 65  ywords in SQLite
17a70 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63  :</p>..<p>.<bloc
17a80 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a  kquote>.<table>.
17a90 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
17aa0 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f 72  "top"><b>'keywor
17ab0 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77  d'</b></td><td w
17ac0 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
17ad0 09 3c 74 64 3e 41 20 6b 65 79 77 6f 72 64 20 69  .<td>A keyword i
17ae0 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20  n single quotes 
17af0 69 73 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  is a string lite
17b00 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a  ral.</td></tr>..
17b10 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
17b20 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72  "top"><b>"keywor
17b30 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c  d"</b></td><td><
17b40 2f 74 64 3e 0a 09 3c 74 64 3e 41 20 6b 65 79 77  /td>..<td>A keyw
17b50 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75  ord in double-qu
17b60 6f 74 65 73 20 69 73 20 61 6e 20 69 64 65 6e 74  otes is an ident
17b70 69 66 69 65 72 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  ifier</td></tr>.
17b80 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
17b90 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 31 3b 6b  ="top"><b>&#91;k
17ba0 65 79 77 6f 72 64 26 23 39 33 3b 3c 2f 62 3e 3c  eyword&#93;</b><
17bb0 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c  /td><td></td>..<
17bc0 74 64 3e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63  td>A keyword enc
17bd0 6c 6f 73 65 64 20 69 6e 20 73 71 75 61 72 65 20  losed in square 
17be0 62 72 61 63 6b 65 74 73 20 69 73 20 0a 20 20 20  brackets is .   
17bf0 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69       an identifi
17c00 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74  er.  This is not
17c10 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20   standard SQL.  
17c20 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63  This quoting mec
17c30 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69  hanism.        i
17c40 73 20 75 73 65 64 20 62 79 20 4d 53 20 41 63 63  s used by MS Acc
17c50 65 73 73 20 61 6e 64 20 53 51 4c 20 53 65 72 76  ess and SQL Serv
17c60 65 72 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64  er and is includ
17c70 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72  ed in SQLite for
17c80 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69  .        compati
17c90 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72  bility.</td></tr
17ca0 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
17cb0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 36  gn="top"><b>&#96
17cc0 3b 6b 65 79 77 6f 72 64 26 23 39 36 3b 3c 2f 62  ;keyword&#96;</b
17cd0 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a  ></td><td></td>.
17ce0 09 3c 74 64 3e 41 20 6b 65 79 77 6f 72 64 20 65  .<td>A keyword e
17cf0 6e 63 6c 6f 73 65 64 20 69 6e 20 67 72 61 76 65  nclosed in grave
17d00 20 61 63 63 65 6e 74 73 20 28 41 53 43 49 49 20   accents (ASCII 
17d10 63 6f 64 65 20 39 36 29 20 69 73 20 0a 20 20 20  code 96) is .   
17d20 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69       an identifi
17d30 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74  er.  This is not
17d40 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20   standard SQL.  
17d50 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63  This quoting mec
17d60 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69  hanism.        i
17d70 73 20 75 73 65 64 20 62 79 20 4d 79 53 51 4c 20  s used by MySQL 
17d80 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20  and is included 
17d90 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20  in SQLite for.  
17da0 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c        compatibil
17db0 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c  ity.</td></tr>.<
17dc0 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
17dd0 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46  uote>.</p>..<p>F
17de0 6f 72 20 72 65 73 69 6c 69 65 6e 63 65 20 77 68  or resilience wh
17df0 65 6e 20 63 6f 6e 66 72 6f 6e 74 65 64 20 77 69  en confronted wi
17e00 74 68 20 68 69 73 74 6f 72 69 63 61 6c 20 53 51  th historical SQ
17e10 4c 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 53 51  L statements, SQ
17e20 4c 69 74 65 0a 77 69 6c 6c 20 73 6f 6d 65 74 69  Lite.will someti
17e30 6d 65 73 20 62 65 6e 64 20 74 68 65 20 71 75 6f  mes bend the quo
17e40 74 69 6e 67 20 72 75 6c 65 73 20 61 62 6f 76 65  ting rules above
17e50 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  :</p>..<ul>.<li>
17e60 3c 70 3e 49 66 20 61 20 6b 65 79 77 6f 72 64 20  <p>If a keyword 
17e70 69 6e 20 73 69 6e 67 6c 65 0a 71 75 6f 74 65 73  in single.quotes
17e80 20 28 65 78 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f   (ex: <b>'key'</
17e90 62 3e 20 6f 72 20 3c 62 3e 27 67 6c 6f 62 27 3c  b> or <b>'glob'<
17ea0 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20  /b>) is used in 
17eb0 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a  a context where.
17ec0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 73  an identifier is
17ed0 20 61 6c 6c 6f 77 65 64 20 62 75 74 20 77 68 65   allowed but whe
17ee0 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  re a string lite
17ef0 72 61 6c 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ral is not allow
17f00 65 64 2c 20 74 68 65 6e 0a 74 68 65 20 74 6f 6b  ed, then.the tok
17f10 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64  en is understood
17f20 20 74 6f 20 62 65 20 61 6e 20 69 64 65 6e 74 69   to be an identi
17f30 66 69 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20  fier instead of 
17f40 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
17f50 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69  ..</p></li>..<li
17f60 3e 3c 70 3e 49 66 20 61 20 6b 65 79 77 6f 72 64  ><p>If a keyword
17f70 20 69 6e 20 64 6f 75 62 6c 65 0a 71 75 6f 74 65   in double.quote
17f80 73 20 28 65 78 3a 20 3c 62 3e 22 6b 65 79 22 3c  s (ex: <b>"key"<
17f90 2f 62 3e 20 6f 72 20 3c 62 3e 22 67 6c 6f 62 22  /b> or <b>"glob"
17fa0 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e  </b>) is used in
17fb0 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65   a context where
17fc0 0a 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 72 65  .it cannot be re
17fd0 73 6f 6c 76 65 64 20 74 6f 20 61 6e 20 69 6e 64  solved to an ind
17fe0 65 6e 74 69 66 69 65 72 20 62 75 74 20 77 68 65  entifier but whe
17ff0 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  re a string lite
18000 72 61 6c 0a 69 73 20 61 6c 6c 6f 77 65 64 2c 20  ral.is allowed, 
18010 74 68 65 6e 20 74 68 65 20 74 6f 6b 65 6e 20 69  then the token i
18020 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20  s understood to 
18030 62 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  be a string lite
18040 72 61 6c 20 69 6e 73 74 65 61 64 0a 6f 66 20 61  ral instead.of a
18050 6e 20 69 64 65 6e 74 69 66 65 72 2e 3c 2f 70 3e  n identifer.</p>
18060 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  </li>.</ul>..<p>
18070 50 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20  Programmers are 
18080 63 61 75 74 69 6f 6e 65 64 20 6e 6f 74 20 74 6f  cautioned not to
18090 20 75 73 65 20 74 68 65 20 74 77 6f 20 65 78 63   use the two exc
180a0 65 70 74 69 6f 6e 73 20 64 65 73 63 72 69 62 65  eptions describe
180b0 64 20 69 6e 0a 74 68 65 20 70 72 65 76 69 6f 75  d in.the previou
180c0 73 20 62 75 6c 6c 65 74 73 2e 20 20 57 65 20 65  s bullets.  We e
180d0 6d 70 68 61 73 69 7a 65 20 74 68 61 74 20 74 68  mphasize that th
180e0 65 79 20 65 78 69 73 74 20 6f 6e 6c 79 20 73 6f  ey exist only so
180f0 20 74 68 61 74 20 6f 6c 64 0a 61 6e 64 20 69 6c   that old.and il
18100 6c 2d 66 6f 72 6d 65 64 20 53 51 4c 20 73 74 61  l-formed SQL sta
18110 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20 72 75 6e  tements will run
18120 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 46 75 74   correctly.  Fut
18130 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ure versions of.
18140 53 51 4c 69 74 65 20 6d 69 67 68 74 20 63 68 61  SQLite might cha
18150 6e 67 65 20 74 6f 20 72 61 69 73 65 20 65 72 72  nge to raise err
18160 6f 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61  ors instead of a
18170 63 63 65 70 74 69 6e 67 20 74 68 65 20 6d 61 6c  ccepting the mal
18180 66 6f 72 6d 65 64 0a 73 74 61 74 65 6d 65 6e 74  formed.statement
18190 73 20 63 6f 76 65 72 65 64 20 62 79 20 74 68 65  s covered by the
181a0 20 65 78 63 65 70 74 69 6f 6e 73 20 61 62 6f 76   exceptions abov
181b0 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53 51 4c 69 74  e.</p>..<p>SQLit
181c0 65 20 69 73 20 65 78 74 65 6e 64 65 64 20 74 6f  e is extended to
181d0 20 61 6c 6c 6f 77 20 6d 61 6e 79 20 6b 65 79 77   allow many keyw
181e0 6f 72 64 73 20 74 6f 20 62 65 20 75 73 65 64 20  ords to be used 
181f0 75 6e 71 75 6f 74 65 64 0a 61 73 20 74 68 65 20  unquoted.as the 
18200 6e 61 6d 65 73 20 6f 66 20 64 61 74 61 62 61 73  names of databas
18210 65 73 2c 20 74 61 62 6c 65 73 2c 20 69 6e 64 69  es, tables, indi
18220 63 65 73 2c 20 74 72 69 67 67 65 72 73 2c 20 76  ces, triggers, v
18230 69 65 77 73 2c 20 63 6f 6c 75 6d 6e 73 2c 0a 75  iews, columns,.u
18240 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
18250 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e  tions, collation
18260 73 2c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  s, attached data
18270 62 61 73 65 73 2c 20 61 6e 64 20 76 69 72 74 75  bases, and virtu
18280 61 6c 0a 66 75 6e 63 74 69 6f 6e 20 6d 6f 64 75  al.function modu
18290 6c 65 73 2e 0a 49 6e 20 74 68 65 20 6c 69 73 74  les..In the list
182a0 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 74 68 61   of keywords tha
182b0 74 20 66 6f 6c 6c 6f 77 73 2c 20 74 68 6f 73 65  t follows, those
182c0 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
182d0 64 20 61 73 20 69 64 65 6e 74 69 66 69 65 72 73  d as identifiers
182e0 0a 61 72 65 20 73 68 6f 77 6e 20 69 6e 20 61 6e  .are shown in an
182f0 20 69 74 61 6c 69 63 20 66 6f 6e 74 2e 20 20 4b   italic font.  K
18300 65 79 77 6f 72 64 73 20 74 68 61 74 20 6d 75 73  eywords that mus
18310 74 20 62 65 20 71 75 6f 74 65 64 20 69 6e 20 6f  t be quoted in o
18320 72 64 65 72 20 74 6f 20 62 65 0a 75 73 65 64 20  rder to be.used 
18330 61 73 20 69 64 65 6e 74 69 66 69 65 72 73 20 61  as identifiers a
18340 72 65 20 73 68 6f 77 6e 20 69 6e 20 62 6f 6c 64  re shown in bold
18350 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74  .</p>..<p>.SQLit
18360 65 20 61 64 64 73 20 6e 65 77 20 6b 65 79 77 6f  e adds new keywo
18370 72 64 73 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f  rds from time to
18380 20 74 69 6d 65 20 77 68 65 6e 20 69 74 20 74 61   time when it ta
18390 6b 65 73 20 6f 6e 20 6e 65 77 20 66 65 61 74 75  kes on new featu
183a0 72 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65  res..So to preve
183b0 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 66 72 6f  nt your code fro
183c0 6d 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62  m being broken b
183d0 79 20 66 75 74 75 72 65 20 65 6e 68 61 6e 63 65  y future enhance
183e0 6d 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c  ments, you shoul
183f0 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65  d.normally quote
18400 20 61 6e 79 20 69 6e 64 65 6e 74 69 66 69 65 72   any indentifier
18410 20 74 68 61 74 20 69 73 20 61 6e 20 45 6e 67 6c   that is an Engl
18420 69 73 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72  ish language wor
18430 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f 75 20 64  d, even if.you d
18440 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c  o not have to..<
18450 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 66 6f 6c  /p>..<p>.The fol
18460 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6b  lowing are the k
18470 65 79 77 6f 72 64 73 20 63 75 72 72 65 6e 74 6c  eywords currentl
18480 79 20 72 65 63 6f 67 6e 69 7a 65 64 20 62 79 20  y recognized by 
18490 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62  SQLite:.</p>..<b
184a0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
184b0 65 20 77 69 64 74 68 3d 22 31 30 30 25 22 20 63  e width="100%" c
184c0 6c 61 73 73 3d 22 70 64 66 5f 6b 65 79 77 6f 72  lass="pdf_keywor
184d0 64 73 22 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  ds">.<tr>.<td al
184e0 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69 67  ign="left" valig
184f0 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22 32  n="top" width="2
18500 30 25 22 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74 20  0%">..<tcl>.set 
18510 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77  n [llength $keyw
18520 6f 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e 43  ord_list].set nC
18530 6f 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b 65  ol 5.set nRow [e
18540 78 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31  xpr {($n+$nCol-1
18550 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69 20  )/$nCol}].set i 
18560 30 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24  0.foreach word $
18570 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a 20  keyword_list {. 
18580 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 6e 64   if {[string ind
18590 65 78 20 24 77 6f 72 64 20 65 6e 64 5d 3d 3d 22  ex $word end]=="
185a0 2a 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 77 6f  *"} {.    set wo
185b0 72 64 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65  rd [string range
185c0 20 24 77 6f 72 64 20 30 20 65 6e 64 2d 31 5d 0a   $word 0 end-1].
185d0 20 20 20 20 73 65 74 20 66 6f 6e 74 20 69 0a 20      set font i. 
185e0 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65   } else {.    se
185f0 74 20 66 6f 6e 74 20 62 0a 20 20 7d 0a 20 20 69  t font b.  }.  i
18600 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a  f {$i==$nRow} {.
18610 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c 2f 74      hd_puts "</t
18620 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74  d><td valign=\"t
18630 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65 66  op\" align=\"lef
18640 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30 25 5c  t\" width=\"20%\
18650 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20 31 0a  ">".    set i 1.
18660 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 69    } else {.    i
18670 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f 70  ncr i.  }.  hd_p
18680 75 74 73 20 22 3c 24 66 6f 6e 74 3e 24 77 6f 72  uts "<$font>$wor
18690 64 3c 2f 24 66 6f 6e 74 3e 3c 62 72 3e 22 0a 7d  d</$font><br>".}
186a0 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74  .</tcl>.</td></t
186b0 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63  r></table></bloc
186c0 6b 71 75 6f 74 65 3e 0a 0a 3c 68 32 3e 53 70 65  kquote>..<h2>Spe
186d0 63 69 61 6c 20 6e 61 6d 65 73 3c 2f 68 32 3e 0a  cial names</h2>.
186e0 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
186f0 67 20 61 72 65 20 6e 6f 74 20 6b 65 79 77 6f 72  g are not keywor
18700 64 73 20 69 6e 20 53 51 4c 69 74 65 2c 20 62 75  ds in SQLite, bu
18710 74 20 61 72 65 20 75 73 65 64 20 61 73 20 6e 61  t are used as na
18720 6d 65 73 20 6f 66 20 0a 73 79 73 74 65 6d 20 6f  mes of .system o
18730 62 6a 65 63 74 73 2e 20 20 54 68 65 79 20 63 61  bjects.  They ca
18740 6e 20 62 65 20 75 73 65 64 20 61 73 20 61 6e 20  n be used as an 
18750 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 61  identifier for a
18760 20 64 69 66 66 65 72 65 6e 74 20 0a 74 79 70 65   different .type
18770 20 6f 66 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a   of object.</p>.
18780 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 20 63 6c 61  .<blockquote cla
18790 73 73 3d 22 70 64 66 5f 6b 65 79 77 6f 72 64 73  ss="pdf_keywords
187a0 22 3e 3c 62 3e 0a 20 20 5f 52 4f 57 49 44 5f 3c  "><b>.  _ROWID_<
187b0 62 72 3e 0a 20 20 4d 41 49 4e 3c 62 72 3e 0a 20  br>.  MAIN<br>. 
187c0 20 4f 49 44 3c 62 72 3e 0a 20 20 52 4f 57 49 44   OID<br>.  ROWID
187d0 3c 62 72 3e 0a 20 20 53 51 4c 49 54 45 5f 4d 41  <br>.  SQLITE_MA
187e0 53 54 45 52 3c 62 72 3e 0a 20 20 53 51 4c 49 54  STER<br>.  SQLIT
187f0 45 5f 53 45 51 55 45 4e 43 45 3c 62 72 3e 0a 20  E_SEQUENCE<br>. 
18800 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 4d 41 53   SQLITE_TEMP_MAS
18810 54 45 52 3c 62 72 3e 0a 20 20 54 45 4d 50 3c 62  TER<br>.  TEMP<b
18820 72 3e 0a 3c 2f 62 3e 3c 2f 62 6c 6f 63 6b 71 75  r>.</b></blockqu
18830 6f 74 65 3e 0a                                   ote>.