Documentation Source Text

Hex Artifact Content
Login

Artifact 2b49e18e46dbd0bdd2aac1d7d6887acf4a0f303c:


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 69 73 20 62 65 68 61 76 65 73 20  d. This behaves 
e590: 74 68 65 20 73 61 6d 65 20 61 73 20 0a 20 20 5b  the same as .  [
e5a0: 63 6f 61 6c 65 73 63 65 28 29 5d 2e 3c 2f 74 64  coalesce()].</td
e5b0: 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 68 65  >.}..funcdef {he
e5c0: 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 54 68 65  x(X)} {} {.  The
e5d0: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 69 6e 74   argument is int
e5e0: 65 72 70 72 65 74 65 64 20 61 73 20 61 20 42 4c  erpreted as a BL
e5f0: 4f 42 2e 20 20 54 68 65 20 72 65 73 75 6c 74 0a  OB.  The result.
e600: 20 20 69 73 20 61 20 68 65 78 61 64 65 63 69 6d    is a hexadecim
e610: 61 6c 20 72 65 6e 64 65 72 69 6e 67 20 6f 66 20  al rendering of 
e620: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
e630: 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e  hat blob..}..fun
e640: 63 64 65 66 20 7b 6c 61 73 74 5f 69 6e 73 65 72  cdef {last_inser
e650: 74 5f 72 6f 77 69 64 28 29 7d 20 7b 7d 20 7b 0a  t_rowid()} {} {.
e660: 20 20 52 65 74 75 72 6e 20 74 68 65 20 5b 52 4f    Return the [RO
e670: 57 49 44 5d 0a 20 20 6f 66 20 74 68 65 20 6c 61  WID].  of the la
e680: 73 74 20 72 6f 77 20 69 6e 73 65 72 74 20 66 72  st row insert fr
e690: 6f 6d 20 74 68 69 73 0a 20 20 63 6f 6e 6e 65 63  om this.  connec
e6a0: 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61  tion to the data
e6b0: 62 61 73 65 2e 20 0a 20 20 54 68 69 73 20 69 73  base. .  This is
e6c0: 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
e6d0: 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65  that would be re
e6e0: 74 75 72 6e 65 64 0a 20 20 66 72 6f 6d 20 74 68  turned.  from th
e6f0: 65 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  e [sqlite3_last_
e700: 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 5d 20  insert_rowid()] 
e710: 41 50 49 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a  API function..}.
e720: 0a 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68  .funcdef {length
e730: 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75  (X)} {} {.  Retu
e740: 72 6e 20 74 68 65 20 73 74 72 69 6e 67 20 6c 65  rn the string le
e750: 6e 67 74 68 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e  ngth of <i>X</i>
e760: 20 69 6e 20 63 68 61 72 61 63 74 65 72 73 2e 0a   in characters..
e770: 20 20 49 66 20 53 51 4c 69 74 65 20 69 73 20 63    If SQLite is c
e780: 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 73 75 70  onfigured to sup
e790: 70 6f 72 74 20 55 54 46 2d 38 2c 20 74 68 65 6e  port UTF-8, then
e7a0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 55   the number of U
e7b0: 54 46 2d 38 0a 20 20 63 68 61 72 61 63 74 65 72  TF-8.  character
e7c0: 73 20 69 73 20 72 65 74 75 72 6e 65 64 2c 20 6e  s is returned, n
e7d0: 6f 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ot the number of
e7e0: 20 62 79 74 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64   bytes..}..funcd
e7f0: 65 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69  ef {like(X,Y) li
e800: 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a  ke(X,Y,Z)} {} {.
e810: 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20    This function 
e820: 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
e830: 6d 65 6e 74 20 74 68 65 20 22 3c 62 3e 59 20 4c  ment the "<b>Y L
e840: 49 4b 45 20 58 20 26 23 39 31 3b 45 53 43 41 50  IKE X &#91;ESCAP
e850: 45 20 5a 26 23 39 33 3b 3c 2f 62 3e 22 0a 20 20  E Z&#93;</b>".  
e860: 73 79 6e 74 61 78 20 6f 66 20 53 51 4c 2e 20 49  syntax of SQL. I
e870: 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45  f the optional E
e880: 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73 20  SCAPE clause is 
e890: 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68  present, then th
e8a0: 65 0a 20 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  e.  user-functio
e8b0: 6e 20 69 73 20 69 6e 76 6f 6b 65 64 20 77 69 74  n is invoked wit
e8c0: 68 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74  h three argument
e8d0: 73 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74  s. Otherwise, it
e8e0: 20 69 73 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69   is.  invoked wi
e8f0: 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73  th two arguments
e900: 20 6f 6e 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74   only. Note that
e910: 20 74 68 65 20 58 20 61 6e 64 20 59 20 70 61 72   the X and Y par
e920: 61 6d 65 74 65 72 73 20 61 72 65 0a 20 20 72 65  ameters are.  re
e930: 76 65 72 73 65 64 20 69 6e 20 74 68 65 20 6c 69  versed in the li
e940: 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ke() function re
e950: 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e  lative to the in
e960: 66 69 78 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61  fix [LIKE] opera
e970: 74 6f 72 2e 0a 20 20 54 68 65 20 5b 73 71 6c 69  tor..  The [sqli
e980: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
e990: 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ion()] interface
e9a0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
e9b0: 6f 76 65 72 72 69 64 65 20 74 68 69 73 0a 20 20  override this.  
e9c0: 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65  function and the
e9d0: 72 65 62 79 20 63 68 61 6e 67 65 20 74 68 65 20  reby change the 
e9e0: 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
e9f0: 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74  .  [LIKE] operat
ea00: 6f 72 2e 20 57 68 65 6e 20 64 6f 69 6e 67 20 74  or. When doing t
ea10: 68 69 73 2c 20 69 74 20 6d 61 79 20 62 65 20 69  his, it may be i
ea20: 6d 70 6f 72 74 61 6e 74 0a 20 20 74 6f 20 6f 76  mportant.  to ov
ea30: 65 72 72 69 64 65 20 62 6f 74 68 20 74 68 65 20  erride both the 
ea40: 74 77 6f 20 61 6e 64 20 74 68 72 65 65 20 61 72  two and three ar
ea50: 67 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e 73 20  gument versions 
ea60: 6f 66 20 74 68 65 20 6c 69 6b 65 28 29 20 0a 20  of the like() . 
ea70: 20 66 75 6e 63 74 69 6f 6e 2e 20 4f 74 68 65 72   function. Other
ea80: 77 69 73 65 2c 20 64 69 66 66 65 72 65 6e 74 20  wise, different 
ea90: 63 6f 64 65 20 6d 61 79 20 62 65 20 63 61 6c 6c  code may be call
eaa0: 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
eab0: 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65  the.  [LIKE] ope
eac0: 72 61 74 6f 72 20 64 65 70 65 6e 64 69 6e 67 20  rator depending 
ead0: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
eae0: 74 20 61 6e 20 45 53 43 41 50 45 20 63 6c 61 75  t an ESCAPE clau
eaf0: 73 65 20 77 61 73 20 0a 20 20 73 70 65 63 69 66  se was .  specif
eb00: 69 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ied..}..funcdef 
eb10: 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  {load_extension(
eb20: 58 29 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  X) load_extensio
eb30: 6e 28 58 2c 59 29 7d 20 7b 6c 6f 61 64 5f 65 78  n(X,Y)} {load_ex
eb40: 74 65 6e 73 69 6f 6e 7d 20 7b 0a 20 20 4c 6f 61  tension} {.  Loa
eb50: 64 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69  d SQLite extensi
eb60: 6f 6e 73 20 6f 75 74 20 6f 66 20 74 68 65 20 73  ons out of the s
eb70: 68 61 72 65 64 20 6c 69 62 72 61 72 79 0a 20 20  hared library.  
eb80: 66 69 6c 65 20 6e 61 6d 65 64 20 3c 69 3e 58 3c  file named <i>X<
eb90: 2f 69 3e 20 75 73 69 6e 67 20 74 68 65 20 65 6e  /i> using the en
eba0: 74 72 79 20 70 6f 69 6e 74 20 3c 69 3e 59 3c 2f  try point <i>Y</
ebb0: 69 3e 2e 20 20 54 68 65 20 72 65 73 75 6c 74 0a  i>.  The result.
ebc0: 20 20 69 73 20 61 20 4e 55 4c 4c 2e 20 20 49 66    is a NULL.  If
ebd0: 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69   <i>Y</i> is omi
ebe0: 74 74 65 64 20 74 68 65 6e 20 74 68 65 20 64 65  tted then the de
ebf0: 66 61 75 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e  fault entry poin
ec00: 74 0a 20 20 6f 66 20 3c 62 3e 73 71 6c 69 74 65  t.  of <b>sqlite
ec10: 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74  3_extension_init
ec20: 3c 2f 62 3e 20 69 73 20 75 73 65 64 2e 20 20 54  </b> is used.  T
ec30: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 61 69  his function rai
ec40: 73 65 73 0a 20 20 61 6e 20 65 78 63 65 70 74 69  ses.  an excepti
ec50: 6f 6e 20 69 66 20 74 68 65 20 65 78 74 65 6e 73  on if the extens
ec60: 69 6f 6e 20 66 61 69 6c 73 20 74 6f 20 6c 6f 61  ion fails to loa
ec70: 64 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 20  d or initialize 
ec80: 63 6f 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70  correctly...  <p
ec90: 3e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77  >This function w
eca0: 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 20  ill fail if the 
ecb0: 65 78 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d 70  extension attemp
ecc0: 74 73 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 6f  ts to modify.  o
ecd0: 72 20 64 65 6c 65 74 65 20 61 20 53 51 4c 20 66  r delete a SQL f
ece0: 75 6e 63 74 69 6f 6e 20 6f 72 20 63 6f 6c 6c 61  unction or colla
ecf0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20  ting sequence.  
ed00: 54 68 65 0a 20 20 65 78 74 65 6e 73 69 6f 6e 20  The.  extension 
ed10: 63 61 6e 20 61 64 64 20 6e 65 77 20 66 75 6e 63  can add new func
ed20: 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69  tions or collati
ed30: 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20 62 75  ng sequences, bu
ed40: 74 20 63 61 6e 6e 6f 74 0a 20 20 6d 6f 64 69 66  t cannot.  modif
ed50: 79 20 6f 72 20 64 65 6c 65 74 65 20 65 78 69 73  y or delete exis
ed60: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f  ting functions o
ed70: 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
ed80: 65 6e 63 65 73 20 62 65 63 61 75 73 65 0a 20 20  ences because.  
ed90: 74 68 6f 73 65 20 66 75 6e 63 74 69 6f 6e 73 20  those functions 
eda0: 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61 74 69 6e 67  and/or collating
edb0: 20 73 65 71 75 65 6e 63 65 73 20 6d 69 67 68 74   sequences might
edc0: 20 62 65 20 75 73 65 64 20 65 6c 73 65 77 68 65   be used elsewhe
edd0: 72 65 0a 20 20 69 6e 20 74 68 65 20 63 75 72 72  re.  in the curr
ede0: 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 53 51  ently running SQ
edf0: 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 6f  L statement.  To
ee00: 20 6c 6f 61 64 20 61 6e 20 65 78 74 65 6e 73 69   load an extensi
ee10: 6f 6e 20 74 68 61 74 0a 20 20 63 68 61 6e 67 65  on that.  change
ee20: 73 20 6f 72 20 64 65 6c 65 74 65 73 20 66 75 6e  s or deletes fun
ee30: 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74  ctions or collat
ee40: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20 75  ing sequences, u
ee50: 73 65 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65  se the.  [sqlite
ee60: 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  3_load_extension
ee70: 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20 41  ()] C-language A
ee80: 50 49 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64  PI.</p>.}..funcd
ee90: 65 66 20 7b 6c 6f 77 65 72 28 58 29 7d 20 7b 7d  ef {lower(X)} {}
eea0: 20 7b 0a 20 20 52 65 74 75 72 6e 20 61 20 63 6f   {.  Return a co
eeb0: 70 79 20 6f 66 20 73 74 72 69 6e 67 20 3c 69 3e  py of string <i>
eec0: 58 3c 2f 69 3e 20 77 69 74 68 20 61 6c 6c 20 41  X</i> with all A
eed0: 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 0a  SCII characters.
eee0: 20 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c    converted to l
eef0: 6f 77 65 72 20 63 61 73 65 2e 20 20 54 68 65 20  ower case.  The 
ef00: 43 20 6c 69 62 72 61 72 79 20 3c 62 3e 74 6f 6c  C library <b>tol
ef10: 6f 77 65 72 28 29 3c 2f 62 3e 20 72 6f 75 74 69  ower()</b> routi
ef20: 6e 65 20 69 73 20 75 73 65 64 0a 20 20 66 6f 72  ne is used.  for
ef30: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2c   the conversion,
ef40: 20 77 68 69 63 68 20 6d 65 61 6e 73 20 74 68 61   which means tha
ef50: 74 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  t this function 
ef60: 6d 69 67 68 74 20 6e 6f 74 0a 20 20 77 6f 72 6b  might not.  work
ef70: 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 6e 6f   correctly on no
ef80: 6e 2d 41 53 43 49 49 20 55 54 46 2d 38 20 63 68  n-ASCII UTF-8 ch
ef90: 61 72 61 63 74 65 72 73 2e 0a 7d 0a 0a 66 75 6e  aracters..}..fun
efa0: 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c  cdef {ltrim(X) l
efb0: 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  trim(X,Y)} {} {.
efc0: 20 20 52 65 74 75 72 6e 20 61 20 73 74 72 69 6e    Return a strin
efd0: 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
efe0: 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
eff0: 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
f000: 61 74 20 61 70 70 65 61 72 20 69 6e 20 3c 69 3e  at appear in <i>
f010: 59 3c 2f 69 3e 20 66 72 6f 6d 20 74 68 65 20 6c  Y</i> from the l
f020: 65 66 74 20 73 69 64 65 20 6f 66 20 3c 69 3e 58  eft side of <i>X
f030: 3c 2f 69 3e 2e 0a 20 20 49 66 20 74 68 65 20 3c  </i>..  If the <
f040: 69 3e 59 3c 2f 69 3e 20 61 72 67 75 6d 65 6e 74  i>Y</i> argument
f050: 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 73 70 61   is omitted, spa
f060: 63 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 2e  ces are removed.
f070: 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78  .}..funcdef {max
f080: 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 6d 61 78 43  (X,Y,...)} {maxC
f090: 6f 72 65 46 75 6e 63 20 6d 61 78 7d 20 7b 0a 20  oreFunc max} {. 
f0a0: 20 52 65 74 75 72 6e 20 74 68 65 20 61 72 67 75   Return the argu
f0b0: 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 6d 61  ment with the ma
f0c0: 78 69 6d 75 6d 20 76 61 6c 75 65 2e 20 20 41 72  ximum value.  Ar
f0d0: 67 75 6d 65 6e 74 73 0a 20 20 6d 61 79 20 62 65  guments.  may be
f0e0: 20 73 74 72 69 6e 67 73 20 69 6e 20 61 64 64 69   strings in addi
f0f0: 74 69 6f 6e 20 74 6f 20 6e 75 6d 62 65 72 73 2e  tion to numbers.
f100: 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 76 61    The maximum va
f110: 6c 75 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  lue is determine
f120: 64 0a 20 20 62 79 20 74 68 65 20 75 73 75 61 6c  d.  by the usual
f130: 20 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 4e 6f   sort order.  No
f140: 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28 29  te that <b>max()
f150: 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65  </b> is a simple
f160: 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20   function when. 
f170: 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72   it has 2 or mor
f180: 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20  e arguments but 
f190: 63 6f 6e 76 65 72 74 73 20 74 6f 20 61 6e 20 61  converts to an a
f1a0: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
f1b0: 6e 20 69 66 20 67 69 76 65 6e 0a 20 20 6f 6e 6c  n if given.  onl
f1c0: 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  y a single argum
f1d0: 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ent..}..funcdef 
f1e0: 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  {min(X,Y,...)} {
f1f0: 6d 69 6e 43 6f 72 65 46 75 6e 63 20 6d 69 6e 7d  minCoreFunc min}
f200: 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20   {.  Return the 
f210: 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68  argument with th
f220: 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e  e minimum value.
f230: 20 20 41 72 67 75 6d 65 6e 74 73 0a 20 20 6d 61    Arguments.  ma
f240: 79 20 62 65 20 73 74 72 69 6e 67 73 20 69 6e 20  y be strings in 
f250: 61 64 64 69 74 69 6f 6e 20 74 6f 20 6e 75 6d 62  addition to numb
f260: 65 72 73 2e 20 20 54 68 65 20 6d 69 6e 69 6d 75  ers.  The minimu
f270: 6d 20 76 61 6c 75 65 20 69 73 20 64 65 74 65 72  m value is deter
f280: 6d 69 6e 65 64 0a 20 20 62 79 20 74 68 65 20 75  mined.  by the u
f290: 73 75 61 6c 20 73 6f 72 74 20 6f 72 64 65 72 2e  sual sort order.
f2a0: 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d    Note that <b>m
f2b0: 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69  in()</b> is a si
f2c0: 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68  mple function wh
f2d0: 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72  en.  it has 2 or
f2e0: 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20   more arguments 
f2f0: 62 75 74 20 63 6f 6e 76 65 72 74 73 20 74 6f 20  but converts to 
f300: 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  an aggregate fun
f310: 63 74 69 6f 6e 20 69 66 20 67 69 76 65 6e 0a 20  ction if given. 
f320: 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61   only a single a
f330: 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63  rgument..}..func
f340: 64 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29  def {nullif(X,Y)
f350: 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20  } {} {.  Return 
f360: 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
f370: 6e 74 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  nt if the argume
f380: 6e 74 73 20 61 72 65 20 64 69 66 66 65 72 65 6e  nts are differen
f390: 74 2c 20 0a 20 20 6f 74 68 65 72 77 69 73 65 20  t, .  otherwise 
f3a0: 72 65 74 75 72 6e 20 4e 55 4c 4c 2e 0a 7d 0a 0a  return NULL..}..
f3b0: 66 75 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58  funcdef {quote(X
f3c0: 29 7d 20 7b 7d 20 7b 0a 20 20 54 68 69 73 20 72  )} {} {.  This r
f3d0: 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 61  outine returns a
f3e0: 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69 73   string which is
f3f0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 20 20   the value of.  
f400: 69 74 73 20 61 72 67 75 6d 65 6e 74 20 73 75 69  its argument sui
f410: 74 61 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73  table for inclus
f420: 69 6f 6e 20 69 6e 74 6f 20 61 6e 6f 74 68 65 72  ion into another
f430: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a   SQL statement..
f440: 20 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 75    Strings are su
f450: 72 72 6f 75 6e 64 65 64 20 62 79 20 73 69 6e 67  rrounded by sing
f460: 6c 65 2d 71 75 6f 74 65 73 20 77 69 74 68 20 65  le-quotes with e
f470: 73 63 61 70 65 73 20 6f 6e 20 69 6e 74 65 72 69  scapes on interi
f480: 6f 72 20 71 75 6f 74 65 73 0a 20 20 61 73 20 6e  or quotes.  as n
f490: 65 65 64 65 64 2e 20 20 42 4c 4f 42 73 20 61 72  eeded.  BLOBs ar
f4a0: 65 20 65 6e 63 6f 64 65 64 20 61 73 20 68 65 78  e encoded as hex
f4b0: 61 64 65 63 69 6d 61 6c 20 6c 69 74 65 72 61 6c  adecimal literal
f4c0: 73 2e 0a 20 20 54 68 65 20 69 6d 70 6c 65 6d 65  s..  The impleme
f4d0: 6e 74 61 74 69 6f 6e 20 6f 66 20 5b 56 41 43 55  ntation of [VACU
f4e0: 55 4d 5d 20 75 73 65 73 20 74 68 69 73 20 66 75  UM] uses this fu
f4f0: 6e 63 74 69 6f 6e 2e 20 54 68 65 20 66 75 6e 63  nction. The func
f500: 74 69 6f 6e 0a 20 20 69 73 20 61 6c 73 6f 20 75  tion.  is also u
f510: 73 65 66 75 6c 20 77 68 65 6e 20 77 72 69 74 69  seful when writi
f520: 6e 67 20 74 72 69 67 67 65 72 73 20 74 6f 20 69  ng triggers to i
f530: 6d 70 6c 65 6d 65 6e 74 20 75 6e 64 6f 2f 72 65  mplement undo/re
f540: 64 6f 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  do functionality
f550: 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61  ..}..funcdef {ra
f560: 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 52  ndom()} {} {.  R
f570: 65 74 75 72 6e 20 61 20 70 73 65 75 64 6f 2d 72  eturn a pseudo-r
f580: 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20  andom integer.  
f590: 62 65 74 77 65 65 6e 20 2d 39 32 32 33 33 37 32  between -9223372
f5a0: 30 33 36 38 35 34 37 37 35 38 30 38 20 61 6e 64  036854775808 and
f5b0: 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37   +92233720368547
f5c0: 37 35 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65  75807..}..funcde
f5d0: 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29  f {randomblob(N)
f5e0: 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20  } {} {.  Return 
f5f0: 61 6e 20 3c 69 3e 4e 3c 2f 69 3e 2d 62 79 74 65  an <i>N</i>-byte
f600: 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67   blob containing
f610: 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 62   pseudo-random b
f620: 79 74 65 73 2e 0a 20 20 3c 69 3e 4e 3c 2f 69 3e  ytes..  <i>N</i>
f630: 20 73 68 6f 75 6c 64 20 62 65 20 61 20 70 6f 73   should be a pos
f640: 74 69 76 65 20 69 6e 74 65 67 65 72 2e 0a 0a 20  tive integer... 
f650: 20 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c 69   <p>Hint:  appli
f660: 63 61 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e 65  cations can gene
f670: 72 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75 6e  rate globally un
f680: 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72 73  ique identifiers
f690: 0a 20 20 75 73 69 6e 67 20 74 68 69 73 20 66 75  .  using this fu
f6a0: 6e 63 74 69 6f 6e 20 74 6f 67 65 74 68 65 72 20  nction together 
f6b0: 77 69 74 68 20 5b 68 65 78 28 29 5d 20 61 6e 64  with [hex()] and
f6c0: 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d 20  /or.  [lower()] 
f6d0: 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a  like this:</p>..
f6e0: 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20    <blockquote>. 
f6f0: 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28   hex(randomblob(
f700: 31 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20  16))<br></br>.  
f710: 6c 6f 77 65 72 28 68 65 78 28 72 61 6e 64 6f 6d  lower(hex(random
f720: 62 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f 62  blob(16))).  </b
f730: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75  lockquote>.}..fu
f740: 6e 63 64 65 66 20 7b 72 65 70 6c 61 63 65 28 58  ncdef {replace(X
f750: 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 52 65  ,Y,Z)} {} {.  Re
f760: 74 75 72 6e 20 61 20 73 74 72 69 6e 67 20 66 6f  turn a string fo
f770: 72 6d 65 64 20 62 79 20 73 75 62 73 74 69 74 75  rmed by substitu
f780: 74 69 6e 67 20 73 74 72 69 6e 67 20 3c 69 3e 5a  ting string <i>Z
f790: 3c 2f 69 3e 20 66 6f 72 0a 20 20 65 76 65 72 79  </i> for.  every
f7a0: 20 6f 63 63 75 72 72 61 6e 63 65 20 6f 66 20 73   occurrance of s
f7b0: 74 72 69 6e 67 20 3c 69 3e 59 3c 2f 69 3e 20 69  tring <i>Y</i> i
f7c0: 6e 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69  n string <i>X</i
f7d0: 3e 2e 20 20 54 68 65 20 5b 42 49 4e 41 52 59 5d  >.  The [BINARY]
f7e0: 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  .  collating seq
f7f0: 75 65 6e 63 65 20 69 73 20 75 73 65 64 20 66 6f  uence is used fo
f800: 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 7d  r comparisons..}
f810: 0a 0a 66 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64  ..funcdef {round
f820: 28 58 29 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20  (X) round(X,Y)} 
f830: 7b 7d 20 7b 0a 20 20 52 6f 75 6e 64 20 6f 66 66  {} {.  Round off
f840: 20 74 68 65 20 6e 75 6d 62 65 72 20 3c 69 3e 58   the number <i>X
f850: 3c 2f 69 3e 20 74 6f 20 3c 69 3e 59 3c 2f 69 3e  </i> to <i>Y</i>
f860: 20 64 69 67 69 74 73 20 74 6f 20 74 68 65 0a 20   digits to the. 
f870: 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 64 65   right of the de
f880: 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 49 66  cimal point.  If
f890: 20 74 68 65 20 3c 69 3e 59 3c 2f 69 3e 20 61 72   the <i>Y</i> ar
f8a0: 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65  gument is omitte
f8b0: 64 2c 20 30 20 69 73 20 0a 20 20 61 73 73 75 6d  d, 0 is .  assum
f8c0: 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ed..}..funcdef {
f8d0: 72 74 72 69 6d 28 58 29 20 72 74 72 69 6d 28 58  rtrim(X) rtrim(X
f8e0: 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75  ,Y)} {} {.  Retu
f8f0: 72 6e 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  rn a string form
f900: 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61  ed by removing a
f910: 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61  ny and all.  cha
f920: 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70  racters that app
f930: 65 61 72 20 69 6e 20 3c 69 3e 59 3c 2f 69 3e 20  ear in <i>Y</i> 
f940: 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 20 73  from the right s
f950: 69 64 65 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ide of <i>X</i>.
f960: 0a 20 20 49 66 20 74 68 65 20 3c 69 3e 59 3c 2f  .  If the <i>Y</
f970: 69 3e 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  i> argument is o
f980: 6d 69 74 74 65 64 2c 20 73 70 61 63 65 73 20 61  mitted, spaces a
f990: 72 65 20 72 65 6d 6f 76 65 64 2e 0a 7d 0a 0a 66  re removed..}..f
f9a0: 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65 78 28  uncdef {soundex(
f9b0: 58 29 7d 20 7b 7d 20 7b 0a 20 20 43 6f 6d 70 75  X)} {} {.  Compu
f9c0: 74 65 20 74 68 65 20 73 6f 75 6e 64 65 78 20 65  te the soundex e
f9d0: 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65 20 73  ncoding of the s
f9e0: 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 2e 0a  tring <i>X</i>..
f9f0: 20 20 54 68 65 20 73 74 72 69 6e 67 20 22 3f 30    The string "?0
fa00: 30 30 22 20 69 73 20 72 65 74 75 72 6e 65 64 20  00" is returned 
fa10: 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
fa20: 69 73 20 4e 55 4c 4c 2e 0a 20 20 54 68 69 73 20  is NULL..  This 
fa30: 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69 74  function is omit
fa40: 74 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20  ted from SQLite 
fa50: 62 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 49 74  by default..  It
fa60: 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62   is only availab
fa70: 6c 65 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f  le the -DSQLITE_
fa80: 53 4f 55 4e 44 45 58 3d 31 20 63 6f 6d 70 69 6c  SOUNDEX=1 compil
fa90: 65 72 20 6f 70 74 69 6f 6e 0a 20 20 69 73 20 75  er option.  is u
faa0: 73 65 64 20 77 68 65 6e 20 53 51 4c 69 74 65 20  sed when SQLite 
fab0: 69 73 20 62 75 69 6c 74 2e 0a 7d 0a 0a 66 75 6e  is built..}..fun
fac0: 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 76 65 72  cdef {sqlite_ver
fad0: 73 69 6f 6e 28 58 29 7d 20 7b 73 71 6c 69 74 65  sion(X)} {sqlite
fae0: 5f 76 65 72 73 69 6f 6e 7d 20 7b 0a 20 20 52 65  _version} {.  Re
faf0: 74 75 72 6e 20 74 68 65 20 76 65 72 73 69 6f 6e  turn the version
fb00: 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the 
fb10: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0a 20  SQLite library. 
fb20: 20 74 68 61 74 20 69 73 20 72 75 6e 6e 69 6e 67   that is running
fb30: 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 33 2e  .  Example:  "3.
fb40: 35 2e 39 22 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  5.9".}..funcdef 
fb50: 7b 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 73  {substr(X,Y,Z) s
fb60: 75 62 73 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b  ubstr(X,Y)} {} {
fb70: 0a 20 20 52 65 74 75 72 6e 20 61 20 73 75 62 73  .  Return a subs
fb80: 74 72 69 6e 67 20 6f 66 20 69 6e 70 75 74 20 73  tring of input s
fb90: 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20 74  tring <i>X</i> t
fba0: 68 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74  hat begins.  wit
fbb0: 68 20 74 68 65 20 3c 69 3e 59 3c 2f 69 3e 2d 74  h the <i>Y</i>-t
fbc0: 68 20 63 68 61 72 61 63 74 65 72 20 61 6e 64 20  h character and 
fbd0: 77 68 69 63 68 20 69 73 20 3c 69 3e 5a 3c 2f 69  which is <i>Z</i
fbe0: 3e 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  > characters lon
fbf0: 67 2e 0a 20 20 49 66 20 3c 69 3e 5a 3c 2f 69 3e  g..  If <i>Z</i>
fc00: 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e   is omitted then
fc10: 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72 20 74   all character t
fc20: 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64 20 6f  hrough the end o
fc30: 66 20 74 68 65 20 73 74 72 69 6e 67 0a 20 20 61  f the string.  a
fc40: 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 54  re returned..  T
fc50: 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61  he left-most cha
fc60: 72 61 63 74 65 72 20 6f 66 20 3c 69 3e 58 3c 2f  racter of <i>X</
fc70: 69 3e 20 69 73 20 6e 75 6d 62 65 72 20 31 2e 20  i> is number 1. 
fc80: 20 49 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20   If <i>Y</i> is 
fc90: 6e 65 67 61 74 69 76 65 0a 20 20 74 68 65 20 74  negative.  the t
fca0: 68 65 20 66 69 72 73 74 20 63 68 61 72 61 63 74  he first charact
fcb0: 65 72 20 6f 66 20 74 68 65 20 73 75 62 73 74 72  er of the substr
fcc0: 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62 79 20  ing is found by 
fcd0: 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68  counting from th
fce0: 65 0a 20 20 72 69 67 68 74 20 72 61 74 68 65 72  e.  right rather
fcf0: 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20   than the left. 
fd00: 20 49 66 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20   If <i>X</i> is 
fd10: 73 74 72 69 6e 67 0a 20 20 74 68 65 6e 20 63 68  string.  then ch
fd20: 61 72 61 63 74 65 72 73 20 69 6e 64 69 63 65 73  aracters indices
fd30: 20 72 65 66 65 72 20 74 6f 20 61 63 74 75 61 6c   refer to actual
fd40: 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
fd50: 73 2e 20 20 49 66 0a 20 20 3c 69 3e 58 3c 2f 69  s.  If.  <i>X</i
fd60: 3e 20 69 73 20 61 20 42 4c 4f 42 20 74 68 65 6e  > is a BLOB then
fd70: 20 74 68 65 20 69 6e 64 69 63 65 73 20 72 65 66   the indices ref
fd80: 65 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a  er to bytes..}..
fd90: 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58 29  funcdef {trim(X)
fda0: 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b   trim(X,Y)} {} {
fdb0: 0a 20 20 52 65 74 75 72 6e 20 61 20 73 74 72 69  .  Return a stri
fdc0: 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d  ng formed by rem
fdd0: 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c  oving any and al
fde0: 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74  l.  characters t
fdf0: 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 3c 69  hat appear in <i
fe00: 3e 59 3c 2f 69 3e 20 66 72 6f 6d 20 62 6f 74 68  >Y</i> from both
fe10: 20 65 6e 64 73 20 6f 66 20 3c 69 3e 58 3c 2f 69   ends of <i>X</i
fe20: 3e 2e 0a 20 20 49 66 20 74 68 65 20 3c 69 3e 59  >..  If the <i>Y
fe30: 3c 2f 69 3e 20 61 72 67 75 6d 65 6e 74 20 69 73  </i> argument is
fe40: 20 6f 6d 69 74 74 65 64 2c 20 73 70 61 63 65 73   omitted, spaces
fe50: 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a 7d 0a   are removed..}.
fe60: 0a 66 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66  .funcdef {typeof
fe70: 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75  (X)} {} {.  Retu
fe80: 72 6e 20 74 68 65 20 5b 64 61 74 61 74 79 70 65  rn the [datatype
fe90: 5d 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  ] of the express
fea0: 69 6f 6e 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 54  ion <i>X</i>.  T
feb0: 68 65 20 6f 6e 6c 79 20 0a 20 20 72 65 74 75 72  he only .  retur
fec0: 6e 20 76 61 6c 75 65 73 20 61 72 65 20 22 6e 75  n values are "nu
fed0: 6c 6c 22 2c 20 22 69 6e 74 65 67 65 72 22 2c 20  ll", "integer", 
fee0: 22 72 65 61 6c 22 2c 20 22 74 65 78 74 22 2c 20  "real", "text", 
fef0: 61 6e 64 20 22 62 6c 6f 62 22 2e 0a 7d 0a 0a 66  and "blob"..}..f
ff00: 75 6e 63 64 65 66 20 7b 75 70 70 65 72 28 58 29  uncdef {upper(X)
ff10: 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20  } {} {.  Return 
ff20: 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20  a copy of input 
ff30: 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20  string <i>X</i> 
ff40: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6c 6c  converted to all
ff50: 0a 20 20 75 70 70 65 72 2d 63 61 73 65 20 6c 65  .  upper-case le
ff60: 74 74 65 72 73 2e 20 20 54 68 65 20 69 6d 70 6c  tters.  The impl
ff70: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
ff80: 69 73 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 73  is function uses
ff90: 20 74 68 65 20 43 20 6c 69 62 72 61 72 79 0a 20   the C library. 
ffa0: 20 72 6f 75 74 69 6e 65 20 3c 62 3e 74 6f 75 70   routine <b>toup
ffb0: 70 65 72 28 29 3c 2f 62 3e 20 77 68 69 63 68 20  per()</b> which 
ffc0: 6d 65 61 6e 73 20 69 74 20 6d 61 79 20 6e 6f 74  means it may not
ffd0: 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20   work correctly 
ffe0: 6f 6e 20 0a 20 20 6e 6f 6e 2d 41 53 43 49 49 20  on .  non-ASCII 
fff0: 55 54 46 2d 38 20 73 74 72 69 6e 67 73 2e 0a 7d  UTF-8 strings..}
10000 0a 0a 66 75 6e 63 64 65 66 20 7b 7a 65 72 6f 62  ..funcdef {zerob
10010 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 52  lob(N)} {} {.  R
10020 65 74 75 72 6e 20 61 20 42 4c 4f 42 20 63 6f 6e  eturn a BLOB con
10030 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62 79 74  sisting of N byt
10040 65 73 20 6f 66 20 30 78 30 30 2e 20 20 53 51 4c  es of 0x00.  SQL
10050 69 74 65 0a 20 20 6d 61 6e 61 67 65 73 20 74 68  ite.  manages th
10060 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65  ese zeroblobs ve
10070 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e 20  ry efficiently. 
10080 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62   Zeroblobs can b
10090 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73 65  e used to.  rese
100a0 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 61 20  rve space for a 
100b0 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74  BLOB that is lat
100c0 65 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67  er written using
100d0 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f   .  [sqlite3_blo
100e0 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72 65  b_open() | incre
100f0 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d  mental BLOB I/O]
10100 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62  ..}.</tcl>.</tab
10110 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  le>..<tcl>.#####
10120 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10130 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10160 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
10170 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65  n {Date And Time
10180 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65   Functions} date
10190 66 75 6e 63 20 7b 64 61 74 65 66 75 6e 63 7d 0a  func {datefunc}.
101a0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69  </tcl>..<p>.SQLi
101b0 74 65 20 73 75 70 70 6f 72 74 73 20 66 69 76 65  te supports five
101c0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
101d0 75 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c  unctions as foll
101e0 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c  ows:.</p>..<p>.<
101f0 6f 6c 3e 0a 3c 6c 69 3e 20 3c 62 3e 64 61 74 65  ol>.<li> <b>date
10200 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
10210 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
10220 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
10230 62 3e 29 3c 2f 62 3e 20 3c 2f 6c 69 3e 0a 3c 6c  b>)</b> </li>.<l
10240 69 3e 20 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c  i> <b>time(</b><
10250 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f  i>timestring, mo
10260 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72  difier, modifier
10270 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62  , ...</i><b>)</b
10280 3e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 3c 62 3e  > </li>.<li> <b>
10290 64 61 74 65 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e  datetime(</b><i>
102a0 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
102b0 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
102c0 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 20  ...</i><b>)</b> 
102d0 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6a 75  </li>.<li> <b>ju
102e0 6c 69 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74  lianday(</b><i>t
102f0 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66  imestring, modif
10300 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e  ier, modifier, .
10310 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 20 3c  ..</i><b>)</b> <
10320 2f 6c 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 73 74 72  /li>.<li> <b>str
10330 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72  ftime(</b><i>for
10340 6d 61 74 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c  mat, timestring,
10350 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
10360 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
10370 3c 2f 62 3e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e  </b> </li>.</ol>
10380 0a 0a 3c 70 3e 0a 41 6c 6c 20 66 69 76 65 20 66  ..<p>.All five f
10390 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20 61 20  unctions take a 
103a0 74 69 6d 65 20 73 74 72 69 6e 67 20 61 73 20 61  time string as a
103b0 6e 20 61 72 67 75 6d 65 6e 74 2e 20 54 68 65 20  n argument. The 
103c0 74 69 6d 65 20 73 74 72 69 6e 67 0a 69 73 20 66  time string.is f
103d0 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20  ollowed by zero 
103e0 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72  or more modifier
103f0 73 2e 20 0a 54 68 65 20 73 74 72 66 74 69 6d 65  s. .The strftime
10400 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f  () function also
10410 20 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74 20   takes a format 
10420 73 74 72 69 6e 67 20 61 73 20 69 74 73 20 66 69  string as its fi
10430 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f  rst argument..</
10440 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74 65  p>..<p>.The date
10450 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
10460 72 6e 73 20 74 68 65 20 64 61 74 65 20 69 6e 20  rns the date in 
10470 74 68 69 73 20 66 6f 72 6d 61 74 3a 20 59 59 59  this format: YYY
10480 59 2d 4d 4d 2d 44 44 2e 20 0a 54 68 65 20 74 69  Y-MM-DD. .The ti
10490 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  me() function re
104a0 74 75 72 6e 73 20 74 68 65 20 74 69 6d 65 20 61  turns the time a
104b0 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 0a 54 68 65  s HH:MM:SS. .The
104c0 20 64 61 74 65 74 69 6d 65 28 29 20 66 75 6e 63   datetime() func
104d0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 22 59 59  tion returns "YY
104e0 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53  YY-MM-DD HH:MM:S
104f0 53 22 2e 20 0a 54 68 65 20 6a 75 6c 69 61 6e 64  S". .The juliand
10500 61 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ay() function re
10510 74 75 72 6e 73 20 74 68 65 20 0a 3c 61 20 68 72  turns the .<a hr
10520 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  ef="http://en.wi
10530 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
10540 2f 4a 75 6c 69 61 6e 5f 64 61 79 22 3e 4a 75 6c  /Julian_day">Jul
10550 69 61 6e 20 64 61 79 3c 2f 61 3e 20 2d 20 0a 6e  ian day</a> - .n
10560 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69  umber of days si
10570 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20 47 72 65 65  nce noon in Gree
10580 6e 77 69 63 68 20 6f 6e 20 4e 6f 76 65 6d 62 65  nwich on Novembe
10590 72 20 32 34 2c 20 34 37 31 34 20 42 2e 43 2e 20  r 24, 4714 B.C. 
105a0 0a 28 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a  .(<a href="http:
105b0 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
105c0 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69  rg/wiki/Prolepti
105d0 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65  c_Gregorian_cale
105e0 6e 64 61 72 22 3e 0a 50 72 6f 6c 65 70 74 69 63  ndar">.Proleptic
105f0 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e   Gregorian calen
10600 64 61 72 3c 2f 61 3e 29 2e 20 0a 54 68 65 20 73  dar</a>). .The s
10610 74 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69 6e  trftime() routin
10620 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61  e returns the da
10630 74 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63 63  te formatted acc
10640 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20 66  ording to .the f
10650 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70 65  ormat string spe
10660 63 69 66 69 65 64 20 61 73 20 74 68 65 20 66 69  cified as the fi
10670 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 54 68  rst argument..Th
10680 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
10690 73 75 70 70 6f 72 74 73 20 74 68 65 20 6d 6f 73  supports the mos
106a0 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74  t common substit
106b0 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20  utions found in 
106c0 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 68 74  the .<a href="ht
106d0 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f  tp://opengroup.o
106e0 72 67 2f 6f 6e 6c 69 6e 65 70 75 62 73 2f 30 30  rg/onlinepubs/00
106f0 37 39 30 38 37 39 39 2f 78 73 68 2f 73 74 72 66  7908799/xsh/strf
10700 74 69 6d 65 2e 68 74 6d 6c 22 3e 0a 73 74 72 66  time.html">.strf
10710 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 3c  time() function<
10720 2f 61 3e 20 66 72 6f 6d 20 0a 74 68 65 20 73 74  /a> from .the st
10730 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
10740 20 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73 75   plus two new su
10750 62 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66 20  bstitutions, %f 
10760 61 6e 64 20 25 4a 2e 0a 54 68 65 20 66 6f 6c 6c  and %J..The foll
10770 6f 77 69 6e 67 20 69 73 20 61 20 63 6f 6d 70 6c  owing is a compl
10780 65 74 65 20 6c 69 73 74 20 6f 66 20 76 61 6c 69  ete list of vali
10790 64 20 73 74 72 66 74 69 6d 65 28 29 20 73 75 62  d strftime() sub
107a0 73 74 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f 70 3e  stitutions:.</p>
107b0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  ..<blockquote>.<
107c0 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22  table border="0"
107d0 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22   cellpadding="0"
107e0 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22   cellspacing="0"
107f0 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64 20 77 69  >.<tr><td><td wi
10800 64 74 68 3d 22 31 30 22 3e 3c 74 64 3e 3c 2f 74  dth="10"><td></t
10810 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25 64 20  r>..<tr><td> %d 
10820 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20  <td><td> day of 
10830 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74 72 3e 3c 74  month: 00.<tr><t
10840 64 3e 20 25 66 20 3c 74 64 3e 3c 74 64 3e 20 66  d> %f <td><td> f
10850 72 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64  ractional second
10860 73 3a 20 53 53 2e 53 53 53 0a 3c 74 72 3e 3c 74  s: SS.SSS.<tr><t
10870 64 3e 20 25 48 20 3c 74 64 3e 3c 74 64 3e 20 68  d> %H <td><td> h
10880 6f 75 72 3a 20 30 30 2d 32 34 20 0a 3c 74 72 3e  our: 00-24 .<tr>
10890 3c 74 64 3e 20 25 6a 20 3c 74 64 3e 3c 74 64 3e  <td> %j <td><td>
108a0 20 64 61 79 20 6f 66 20 79 65 61 72 3a 20 30 30   day of year: 00
108b0 31 2d 33 36 36 0a 3c 74 72 3e 3c 74 64 3e 20 25  1-366.<tr><td> %
108c0 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c 69 61  J <td><td> Julia
108d0 6e 20 64 61 79 20 6e 75 6d 62 65 72 0a 3c 74 72  n day number.<tr
108e0 3e 3c 74 64 3e 20 25 6d 20 3c 74 64 3e 3c 74 64  ><td> %m <td><td
108f0 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d 31 32 0a 3c  > month: 01-12.<
10900 74 72 3e 3c 74 64 3e 20 25 4d 20 3c 74 64 3e 3c  tr><td> %M <td><
10910 74 64 3e 20 6d 69 6e 75 74 65 3a 20 30 30 2d 35  td> minute: 00-5
10920 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 73 20 3c 74  9.<tr><td> %s <t
10930 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 20 73  d><td> seconds s
10940 69 6e 63 65 20 31 39 37 30 2d 30 31 2d 30 31 0a  ince 1970-01-01.
10950 3c 74 72 3e 3c 74 64 3e 20 25 53 20 3c 74 64 3e  <tr><td> %S <td>
10960 3c 74 64 3e 20 73 65 63 6f 6e 64 73 3a 20 30 30  <td> seconds: 00
10970 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 77 20  -59.<tr><td> %w 
10980 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20  <td><td> day of 
10990 77 65 65 6b 20 30 2d 36 20 77 69 74 68 20 73 75  week 0-6 with su
109a0 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74 64 3e  nday==0.<tr><td>
109b0 20 25 57 20 3c 74 64 3e 3c 74 64 3e 20 77 65 65   %W <td><td> wee
109c0 6b 20 6f 66 20 79 65 61 72 3a 20 30 30 2d 35 33  k of year: 00-53
109d0 0a 3c 74 72 3e 3c 74 64 3e 20 25 59 20 3c 74 64  .<tr><td> %Y <td
109e0 3e 3c 74 64 3e 20 79 65 61 72 3a 20 30 30 30 30  ><td> year: 0000
109f0 2d 39 39 39 39 0a 3c 74 72 3e 3c 74 64 3e 20 25  -9999.<tr><td> %
10a00 25 20 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c 2f 74  % <td><td> %.</t
10a10 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  able>.</blockquo
10a20 74 65 3e 0a 0a 3c 70 3e 0a 4e 6f 74 69 63 65 20  te>..<p>.Notice 
10a30 74 68 61 74 20 61 6c 6c 20 6f 74 68 65 72 20 64  that all other d
10a40 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
10a50 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 65 78  ctions can be ex
10a60 70 72 65 73 73 65 64 0a 69 6e 20 74 65 72 6d 73  pressed.in terms
10a70 20 6f 66 20 73 74 72 66 74 69 6d 65 28 29 3a 0a   of strftime():.
10a80 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
10a90 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  e>.<table border
10aa0 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67  ="0" cellpadding
10ab0 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67  ="0" cellspacing
10ac0 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62  ="0">.<tr><td><b
10ad0 3e 46 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64  >Function</b><td
10ae0 20 77 69 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e   width="30"><td>
10af0 3c 62 3e 45 71 75 69 76 61 6c 65 6e 74 20 73 74  <b>Equivalent st
10b00 72 66 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72  rftime()</b>.<tr
10b10 3e 3c 74 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e  ><td>   date(...
10b20 29 20 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20  )      <td><td> 
10b30 20 73 74 72 66 74 69 6d 65 28 22 25 59 2d 25 6d   strftime("%Y-%m
10b40 2d 25 64 22 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c  -%d", ...).<tr><
10b50 74 64 3e 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20  td>   time(...) 
10b60 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73       <td><td>  s
10b70 74 72 66 74 69 6d 65 28 22 25 48 3a 25 4d 3a 25  trftime("%H:%M:%
10b80 53 22 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64  S", ...).<tr><td
10b90 3e 20 20 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e  >   datetime(...
10ba0 29 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72  )  <td><td>  str
10bb0 66 74 69 6d 65 28 22 25 59 2d 25 6d 2d 25 64 20  ftime("%Y-%m-%d 
10bc0 25 48 3a 25 4d 3a 25 53 22 2c 20 2e 2e 2e 29 0a  %H:%M:%S", ...).
10bd0 3c 74 72 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61  <tr><td>   julia
10be0 6e 64 61 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74  nday(...) <td><t
10bf0 64 3e 20 20 73 74 72 66 74 69 6d 65 28 22 25 4a  d>  strftime("%J
10c00 22 2c 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e  ", ...).</table>
10c10 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
10c20 3c 70 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61  <p>.The only rea
10c30 73 6f 6e 73 20 66 6f 72 20 70 72 6f 76 69 64 69  sons for providi
10c40 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68  ng functions oth
10c50 65 72 20 74 68 61 6e 20 73 74 72 66 74 69 6d 65  er than strftime
10c60 28 29 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e  () is.for conven
10c70 69 65 6e 63 65 20 61 6e 64 20 66 6f 72 20 65 66  ience and for ef
10c80 66 69 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a  ficiency..</p>..
10c90 3c 68 33 3e 54 69 6d 65 20 53 74 72 69 6e 67 73  <h3>Time Strings
10ca0 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 74 69 6d 65  </h3>..<p>A time
10cb0 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69   string can be i
10cc0 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c  n any of the fol
10cd0 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c  lowing formats:<
10ce0 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c  /p>..<ol>.<li> <
10cf0 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e  i>YYYY-MM-DD</i>
10d00 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
10d10 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c  -DD HH:MM</i>.<l
10d20 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
10d30 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c   HH:MM:SS</i>.<l
10d40 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
10d50 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69   HH:MM:SS.SSS</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 3c 2f 69 3e 0a 3c 6c 69  <i>HH:MM</i>.<li
10d90 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
10da0 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><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 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
10dd0 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
10de0 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
10df0 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c  > <i>HH:MM</i>.<
10e00 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c  li> <i>HH:MM:SS<
10e10 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d  /i>.<li> <i>HH:M
10e20 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
10e30 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69  > <b>now</b>.<li
10e40 3e 20 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c  > <i>DDDDDDDDDD<
10e50 2f 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 49  /i>.</ol>..<p>.I
10e60 6e 20 66 6f 72 6d 61 74 73 20 35 20 74 68 72 6f  n formats 5 thro
10e70 75 67 68 20 37 2c 20 74 68 65 20 22 54 22 20 69  ugh 7, the "T" i
10e80 73 20 61 20 6c 69 74 65 72 61 6c 20 63 68 61 72  s a literal char
10e90 61 63 74 65 72 20 73 65 70 61 72 61 74 69 6e 67  acter separating
10ea0 20 0a 74 68 65 20 64 61 74 65 20 61 6e 64 20 74   .the date and t
10eb0 68 65 20 74 69 6d 65 2c 20 61 73 20 72 65 71 75  he time, as requ
10ec0 69 72 65 64 20 62 79 20 0a 3c 61 20 68 72 65 66  ired by .<a href
10ed0 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 63  ="http://www.w3c
10ee0 2e 6f 72 67 2f 54 52 2f 4e 4f 54 45 2d 64 61 74  .org/TR/NOTE-dat
10ef0 65 74 69 6d 65 22 3e 49 53 4f 2d 38 36 30 31 3c  etime">ISO-8601<
10f00 2f 61 3e 2e 20 0a 46 6f 72 6d 61 74 73 20 38 20  /a>. .Formats 8 
10f10 74 68 72 6f 75 67 68 20 31 30 20 74 68 61 74 20  through 10 that 
10f20 73 70 65 63 69 66 79 20 6f 6e 6c 79 20 61 20 74  specify only a t
10f30 69 6d 65 20 61 73 73 75 6d 65 20 61 20 64 61 74  ime assume a dat
10f40 65 20 6f 66 20 0a 32 30 30 30 2d 30 31 2d 30 31  e of .2000-01-01
10f50 2e 20 46 6f 72 6d 61 74 20 31 31 2c 20 74 68 65  . Format 11, the
10f60 20 73 74 72 69 6e 67 20 27 6e 6f 77 27 2c 20 69   string 'now', i
10f70 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  s converted into
10f80 20 74 68 65 20 0a 63 75 72 72 65 6e 74 20 64 61   the .current da
10f90 74 65 20 61 6e 64 20 74 69 6d 65 20 61 73 20 6f  te and time as o
10fa0 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65  btained from the
10fb0 20 78 43 75 72 72 65 6e 74 54 69 6d 65 20 6d 65   xCurrentTime me
10fc0 74 68 6f 64 0a 6f 66 20 74 68 65 20 5b 73 71 6c  thod.of the [sql
10fd0 69 74 65 33 5f 76 66 73 5d 20 6f 62 6a 65 63 74  ite3_vfs] object
10fe0 20 69 6e 20 75 73 65 2e 0a 3c 61 20 68 72 65 66   in use..<a href
10ff0 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  ="http://en.wiki
11000 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 43  pedia.org/wiki/C
11010 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69 76 65  oordinated_Unive
11020 72 73 61 6c 5f 54 69 6d 65 22 3e 0a 55 6e 69 76  rsal_Time">.Univ
11030 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65  ersal Coordinate
11040 64 20 54 69 6d 65 20 28 55 54 43 29 3c 2f 61 3e  d Time (UTC)</a>
11050 20 69 73 20 75 73 65 64 2e 20 0a 46 6f 72 6d 61   is used. .Forma
11060 74 20 31 32 20 69 73 20 74 68 65 20 0a 3c 61 20  t 12 is the .<a 
11070 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e  href="http://en.
11080 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
11090 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 22 3e 4a  ki/Julian_day">J
110a0 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  ulian day number
110b0 3c 2f 61 3e 0a 65 78 70 72 65 73 73 65 64 20 61  </a>.expressed a
110c0 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
110d0 6e 74 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a  nt value..</p>..
110e0 3c 68 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68  <h3>Modifiers</h
110f0 33 3e 0a 0a 3c 70 3e 54 68 65 20 74 69 6d 65 20  3>..<p>The time 
11100 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f  string can be fo
11110 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f  llowed by zero o
11120 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73  r more modifiers
11130 20 74 68 61 74 20 0a 61 6c 74 65 72 20 74 68 65   that .alter the
11140 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 73   date and time s
11150 74 72 69 6e 67 2e 20 20 45 61 63 68 20 6d 6f 64  tring.  Each mod
11160 69 66 69 65 72 0a 69 73 20 61 20 74 72 61 6e 73  ifier.is a trans
11170 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
11180 73 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65  s applied to the
11190 20 74 69 6d 65 20 73 74 72 69 6e 67 20 74 6f 20   time string to 
111a0 69 74 73 20 6c 65 66 74 2e 0a 4d 6f 64 69 66 69  its left..Modifi
111b0 65 72 73 20 61 72 65 20 61 70 70 6c 69 65 64 20  ers are applied 
111c0 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
111d0 68 74 3b 20 6f 72 64 65 72 20 69 73 20 69 6d 70  ht; order is imp
111e0 6f 72 74 61 6e 74 2e 0a 54 68 65 20 61 76 61 69  ortant..The avai
111f0 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65 72 73 20  lable modifiers 
11200 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c  are as follows.<
11210 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e  /p>..<ol>.<li> N
11220 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e  NN days.<li> NNN
11230 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20   hours.<li> NNN 
11240 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e  minutes.<li> NNN
11250 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c  .NNNN seconds.<l
11260 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c  i> NNN months.<l
11270 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c 69  i> NNN years.<li
11280 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68  > start of month
11290 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 79  .<li> start of y
112a0 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f  ear.<li> start o
112b0 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b 64  f day.<li> weekd
112c0 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65 70  ay N.<li> unixep
112d0 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69  och.<li> localti
112e0 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f  me.<li> utc .</o
112f0 6c 3e 0a 0a 3c 70 3e 54 68 65 20 66 69 72 73 74  l>..<p>The first
11300 20 73 69 78 20 6d 6f 64 69 66 69 65 72 73 20 28   six modifiers (
11310 31 20 74 68 72 6f 75 67 68 20 36 29 20 0a 73 69  1 through 6) .si
11320 6d 70 6c 79 20 61 64 64 20 74 68 65 20 73 70 65  mply add the spe
11330 63 69 66 69 65 64 20 61 6d 6f 75 6e 74 20 6f 66  cified amount of
11340 20 74 69 6d 65 20 74 6f 20 74 68 65 20 64 61 74   time to the dat
11350 65 20 0a 73 70 65 63 69 66 69 65 64 20 62 79 20  e .specified by 
11360 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 69  the preceding ti
11370 6d 65 73 74 72 69 6e 67 2e 0a 4e 6f 74 65 20 74  mestring..Note t
11380 68 61 74 20 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e  hat "&plusmn;NNN
11390 20 6d 6f 6e 74 68 73 22 20 77 6f 72 6b 73 20 62   months" works b
113a0 79 20 72 65 6e 64 65 72 69 6e 67 20 74 68 65 20  y rendering the 
113b0 6f 72 69 67 69 6e 61 6c 20 64 61 74 65 20 69 6e  original date in
113c0 74 6f 0a 74 68 65 20 59 59 59 59 2d 4d 4d 2d 44  to.the YYYY-MM-D
113d0 44 20 66 6f 72 6d 61 74 2c 20 61 64 64 69 6e 67  D format, adding
113e0 20 74 68 65 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e   the &plusmn;NNN
113f0 20 74 6f 20 74 68 65 20 4d 4d 20 6d 6f 6e 74 68   to the MM month
11400 20 76 61 6c 75 65 2c 20 74 68 65 6e 0a 6e 6f 72   value, then.nor
11410 6d 61 6c 69 7a 69 6e 67 20 74 68 65 20 72 65 73  malizing the res
11420 75 6c 74 2e 20 20 54 68 75 73 2c 20 66 6f 72 20  ult.  Thus, for 
11430 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 64 61 74  example, the dat
11440 61 20 32 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64  a 2001-03-31 mod
11450 69 66 69 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e  ified.by '+1 mon
11460 74 68 27 20 69 6e 69 74 69 61 6c 6c 79 20 79 69  th' initially yi
11470 65 6c 64 73 20 32 30 30 31 2d 30 34 2d 33 31 2c  elds 2001-04-31,
11480 20 62 75 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20   but April only 
11490 68 61 73 20 33 30 20 64 61 79 73 0a 73 6f 20 74  has 30 days.so t
114a0 68 65 20 64 61 74 65 20 69 73 20 6e 6f 72 6d 61  he date is norma
114b0 6c 69 7a 65 64 20 74 6f 20 32 30 30 31 2d 30 35  lized to 2001-05
114c0 2d 30 31 2e 20 20 41 20 73 69 6d 69 6c 61 72 20  -01.  A similar 
114d0 65 66 66 65 63 74 20 6f 63 63 75 72 73 20 77 68  effect occurs wh
114e0 65 6e 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  en.the original 
114f0 64 61 74 65 20 69 73 20 46 65 62 72 75 61 72 79  date is February
11500 20 32 39 20 6f 66 20 61 20 6c 65 61 70 79 65 61   29 of a leapyea
11510 72 20 61 6e 64 20 74 68 65 20 6d 6f 64 69 66 69  r and the modifi
11520 65 72 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20  er is.&plusmn;N 
11530 79 65 61 72 73 20 77 68 65 72 65 20 4e 20 69 73  years where N is
11540 20 6e 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20   not a multiple 
11550 6f 66 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70  of four.</p>..<p
11560 3e 54 68 65 20 22 73 74 61 72 74 20 6f 66 22 20  >The "start of" 
11570 6d 6f 64 69 66 69 65 72 73 20 28 37 20 74 68 72  modifiers (7 thr
11580 6f 75 67 68 20 39 29 20 73 68 69 66 74 20 74 68  ough 9) shift th
11590 65 20 64 61 74 65 20 62 61 63 6b 77 61 72 64 73  e date backwards
115a0 20 0a 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69   .to the beginni
115b0 6e 67 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ng of the curren
115c0 74 20 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72  t month, year or
115d0 20 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68   day.</p>..<p>Th
115e0 65 20 22 77 65 65 6b 64 61 79 22 20 6d 6f 64 69  e "weekday" modi
115f0 66 69 65 72 20 61 64 76 61 6e 63 65 73 20 74 68  fier advances th
11600 65 20 64 61 74 65 20 66 6f 72 77 61 72 64 20 74  e date forward t
11610 6f 20 74 68 65 20 6e 65 78 74 20 64 61 74 65 20  o the next date 
11620 0a 77 68 65 72 65 20 74 68 65 20 77 65 65 6b 64  .where the weekd
11630 61 79 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20  ay number is N. 
11640 53 75 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e  Sunday is 0, Mon
11650 64 61 79 20 69 73 20 31 2c 20 61 6e 64 20 73 6f  day is 1, and so
11660 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e   forth.</p>..<p>
11670 54 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20  The "unixepoch" 
11680 6d 6f 64 69 66 69 65 72 20 28 31 31 29 20 6f 6e  modifier (11) on
11690 6c 79 20 77 6f 72 6b 73 20 69 66 20 69 74 20 69  ly works if it i
116a0 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
116b0 77 73 20 0a 61 20 74 69 6d 65 73 74 72 69 6e 67  ws .a timestring
116c0 20 69 6e 20 74 68 65 20 44 44 44 44 44 44 44 44   in the DDDDDDDD
116d0 44 44 20 66 6f 72 6d 61 74 2e 20 0a 54 68 69 73  DD format. .This
116e0 20 6d 6f 64 69 66 69 65 72 20 63 61 75 73 65 73   modifier causes
116f0 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44 20   the DDDDDDDDDD 
11700 74 6f 20 62 65 20 69 6e 74 65 72 70 72 65 74 65  to be interprete
11710 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c 69  d not .as a Juli
11720 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20 61 73  an day number as
11730 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75   it normally wou
11740 6c 64 20 62 65 2c 20 62 75 74 20 61 73 0a 3c 61  ld be, but as.<a
11750 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6e   href="http://en
11760 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
11770 69 6b 69 2f 55 6e 69 78 5f 74 69 6d 65 22 3e 55  iki/Unix_time">U
11780 6e 69 78 20 54 69 6d 65 3c 2f 61 3e 20 2d 20 74  nix Time</a> - t
11790 68 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73 65  he .number of se
117a0 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30  conds since 1970
117b0 2e 20 20 49 66 20 74 68 65 20 22 75 6e 69 78 65  .  If the "unixe
117c0 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 64  poch" modifier d
117d0 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61  oes not.follow a
117e0 20 74 69 6d 65 73 74 72 69 6e 67 20 6f 66 20 74   timestring of t
117f0 68 65 20 66 6f 72 6d 20 44 44 44 44 44 44 44 44  he form DDDDDDDD
11800 44 44 20 77 68 69 63 68 20 65 78 70 72 65 73 73  DD which express
11810 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  es the number.of
11820 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31   seconds since 1
11830 39 37 30 20 6f 72 20 69 66 20 6f 74 68 65 72 20  970 or if other 
11840 6d 6f 64 69 66 69 65 72 73 0a 73 65 70 61 72 61  modifiers.separa
11850 74 65 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63  te the "unixepoc
11860 68 22 20 6d 6f 64 69 66 69 65 72 20 66 72 6f 6d  h" modifier from
11870 20 70 72 69 6f 72 20 44 44 44 44 44 44 44 44 44   prior DDDDDDDDD
11880 44 20 74 68 65 6e 20 74 68 65 0a 62 65 68 61 76  D then the.behav
11890 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ior is undefined
118a0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 22 6c  .</p>..<p>The "l
118b0 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69  ocaltime" modifi
118c0 65 72 20 28 31 32 29 20 61 73 73 75 6d 65 73 20  er (12) assumes 
118d0 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20  the time string 
118e0 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20 69  to its left is i
118f0 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72  n.Universal Coor
11900 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54  dinated Time (UT
11910 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74  C) and adjusts t
11920 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67 20 73  he time.string s
11930 6f 20 74 68 61 74 20 69 74 20 64 69 73 70 6c 61  o that it displa
11940 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49  ys localtime.  I
11950 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f  f "localtime".fo
11960 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74 68 61  llows a time tha
11970 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20 74 68  t is not UTC, th
11980 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  en the behavior 
11990 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 54 68  is undefined..Th
119a0 65 20 22 75 74 63 22 20 69 73 20 74 68 65 20 6f  e "utc" is the o
119b0 70 70 6f 73 69 74 65 20 6f 66 20 22 6c 6f 63 61  pposite of "loca
119c0 6c 74 69 6d 65 22 2e 20 20 22 75 74 63 22 20 61  ltime".  "utc" a
119d0 73 73 75 6d 65 73 20 74 68 61 74 20 74 68 65 20  ssumes that the 
119e0 73 74 72 69 6e 67 0a 74 6f 20 69 74 73 20 6c 65  string.to its le
119f0 66 74 20 69 73 20 69 6e 20 74 68 65 20 6c 6f 63  ft is in the loc
11a00 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61 6e 64 20  al timezone and 
11a10 61 64 6a 75 73 74 73 20 74 68 61 74 20 73 74 72  adjusts that str
11a20 69 6e 67 20 74 6f 20 62 65 20 69 6e 20 55 54 43  ing to be in UTC
11a30 2e 0a 49 66 20 74 68 65 20 70 72 69 6f 72 20 73  ..If the prior s
11a40 74 72 69 6e 67 20 69 73 20 6e 6f 74 20 69 6e 20  tring is not in 
11a50 6c 6f 63 61 6c 74 69 6d 65 2c 20 74 68 65 6e 20  localtime, then 
11a60 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 22 75  the result of "u
11a70 74 63 22 20 69 73 0a 75 6e 64 65 66 69 6e 65 64  tc" is.undefined
11a80 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70  .</p>..<h3>Examp
11a90 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 43 6f 6d  les</h3>..<p>Com
11aa0 70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  pute the current
11ab0 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63   date.<p>..<bloc
11ac0 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61  kquote>SELECT da
11ad0 74 65 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63  te('now');</bloc
11ae0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70  kquote>..<p>Comp
11af0 75 74 65 20 74 68 65 20 6c 61 73 74 20 64 61 79  ute the last day
11b00 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
11b10 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  month.</p>..<blo
11b20 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64  ckquote>SELECT d
11b30 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74  ate('now','start
11b40 20 6f 66 20 6d 6f 6e 74 68 27 2c 27 2b 31 20 6d   of month','+1 m
11b50 6f 6e 74 68 27 2c 27 2d 31 20 64 61 79 27 29 3b  onth','-1 day');
11b60 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
11b70 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64  <p>Compute the d
11b80 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76  ate and time giv
11b90 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74  en a unix timest
11ba0 61 6d 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c  amp 1092941466.<
11bb0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
11bc0 3e 0a 20 20 20 20 53 45 4c 45 43 54 20 64 61 74  >.    SELECT dat
11bd0 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36  etime(1092941466
11be0 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a  , 'unixepoch');.
11bf0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
11c00 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61  p>Compute the da
11c10 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65  te and time give
11c20 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61  n a unix timesta
11c30 6d 70 20 31 30 39 32 39 34 31 34 36 36 2c 20 61  mp 1092941466, a
11c40 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74 65 20 66  nd .compensate f
11c50 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c 20 74 69  or your local ti
11c60 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c  mezone.</p>..<bl
11c70 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
11c80 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32  CT datetime(1092
11c90 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f  941466, 'unixepo
11ca0 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27  ch', 'localtime'
11cb0 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
11cc0 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ..<p>Compute the
11cd0 20 63 75 72 72 65 6e 74 20 75 6e 69 78 20 74 69   current unix ti
11ce0 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62  mestamp.</p>..<b
11cf0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
11d00 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73  ECT strftime('%s
11d10 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63  ','now');.</bloc
11d20 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70  kquote>..<p>Comp
11d30 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ute the number o
11d40 66 20 64 61 79 73 20 73 69 6e 63 65 20 74 68 65  f days since the
11d50 20 73 69 67 6e 69 6e 67 20 6f 66 20 74 68 65 20   signing of the 
11d60 55 53 20 44 65 63 6c 61 72 61 74 69 6f 6e 0a 6f  US Declaration.o
11d70 66 20 49 6e 64 65 70 65 6e 64 65 6e 74 2e 3c 2f  f Independent.</
11d80 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
11d90 0a 20 20 53 45 4c 45 43 54 20 6a 75 6c 69 61 6e  .  SELECT julian
11da0 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 6a 75 6c  day('now') - jul
11db0 69 61 6e 64 61 79 28 27 31 37 37 36 2d 30 37 2d  ianday('1776-07-
11dc0 30 34 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  04');.</blockquo
11dd0 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65 20  te>..<p>Compute 
11de0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  the number of se
11df0 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20 70 61  conds since a pa
11e00 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20  rticular moment 
11e10 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62  in 2004:</p>..<b
11e20 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
11e30 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73  ECT strftime('%s
11e40 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72 66 74  ','now') - strft
11e50 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34 2d 30  ime('%s','2004-0
11e60 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27 29 3b  1-01 02:34:56');
11e70 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
11e80 3c 70 3e 0a 43 6f 6d 70 75 74 65 20 74 68 65 20  <p>.Compute the 
11e90 64 61 74 65 20 6f 66 20 74 68 65 20 66 69 72 73  date of the firs
11ea0 74 20 54 75 65 73 64 61 79 20 69 6e 20 4f 63 74  t Tuesday in Oct
11eb0 6f 62 65 72 0a 66 6f 72 20 74 68 65 20 63 75 72  ober.for the cur
11ec0 72 65 6e 74 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a  rent year..</p>.
11ed0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
11ee0 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77  SELECT date('now
11ef0 27 2c 27 73 74 61 72 74 20 6f 66 20 79 65 61 72  ','start of year
11f00 27 2c 27 2b 39 20 6d 6f 6e 74 68 73 27 2c 27 77  ','+9 months','w
11f10 65 65 6b 64 61 79 20 32 27 29 3b 0a 3c 2f 62 6c  eekday 2');.</bl
11f20 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f  ockquote>..<p>Co
11f30 6d 70 75 74 65 20 74 68 65 20 74 69 6d 65 20 73  mpute the time s
11f40 69 6e 63 65 20 74 68 65 20 75 6e 69 78 20 65 70  ince the unix ep
11f50 6f 63 68 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a  och in seconds .
11f60 28 6c 69 6b 65 20 73 74 72 66 74 69 6d 65 28 27  (like strftime('
11f70 25 73 27 2c 27 6e 6f 77 27 29 20 65 78 63 65 70  %s','now') excep
11f80 74 20 69 6e 63 6c 75 64 65 73 20 66 72 61 63 74  t includes fract
11f90 69 6f 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e  ional part):</p>
11fa0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
11fb0 20 53 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64   SELECT (juliand
11fc0 61 79 28 27 6e 6f 77 27 29 20 2d 20 32 34 34 30  ay('now') - 2440
11fd0 35 38 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a  587.5)*86400.0;.
11fe0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
11ff0 68 33 3e 43 61 76 65 61 74 73 20 41 6e 64 20 42  h3>Caveats And B
12000 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ugs</h3>..<p>The
12010 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20   computation of 
12020 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65 70 65 6e  local time depen
12030 64 73 20 68 65 61 76 69 6c 79 20 6f 6e 20 74 68  ds heavily on th
12040 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f 6c 69 74  e whim .of polit
12050 69 63 69 61 6e 73 20 61 6e 64 20 69 73 20 74 68  icians and is th
12060 75 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20  us difficult to 
12070 67 65 74 20 63 6f 72 72 65 63 74 20 66 6f 72 20  get correct for 
12080 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20 49 6e  .all locales. In
12090 20 74 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61   this implementa
120a0 74 69 6f 6e 2c 20 74 68 65 20 73 74 61 6e 64 61  tion, the standa
120b0 72 64 20 43 20 6c 69 62 72 61 72 79 20 0a 66 75  rd C library .fu
120c0 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d 65  nction localtime
120d0 5f 72 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  _r() is used to 
120e0 61 73 73 69 73 74 20 69 6e 20 74 68 65 20 63 61  assist in the ca
120f0 6c 63 75 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c 6f  lculation of .lo
12100 63 61 6c 20 74 69 6d 65 2e 20 20 54 68 65 20 0a  cal time.  The .
12110 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 43 20  localtime_r() C 
12120 66 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c  function normall
12130 79 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  y only works for
12140 20 79 65 61 72 73 0a 62 65 74 77 65 65 6e 20 31   years.between 1
12150 39 37 30 20 61 6e 64 20 32 30 33 37 2e 20 46 6f  970 and 2037. Fo
12160 72 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20  r dates outside 
12170 74 68 69 73 20 72 61 6e 67 65 2c 20 53 51 4c 69  this range, SQLi
12180 74 65 20 0a 61 74 74 65 6d 70 74 73 20 74 6f 20  te .attempts to 
12190 6d 61 70 20 74 68 65 20 79 65 61 72 20 69 6e 74  map the year int
121a0 6f 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20  o an equivalent 
121b0 79 65 61 72 20 77 69 74 68 69 6e 20 0a 74 68 69  year within .thi
121c0 73 20 72 61 6e 67 65 2c 20 64 6f 20 74 68 65 20  s range, do the 
121d0 63 61 6c 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65  calculation, the
121e0 6e 20 6d 61 70 20 74 68 65 20 79 65 61 72 20 62  n map the year b
121f0 61 63 6b 2e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 44 61  ack.</p>...<p>Da
12200 74 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20  te computations 
12210 64 6f 20 6e 6f 74 20 67 69 76 65 20 63 6f 72 72  do not give corr
12220 65 63 74 20 72 65 73 75 6c 74 73 20 66 6f 72 20  ect results for 
12230 64 61 74 65 73 20 0a 62 65 66 6f 72 65 20 4a 75  dates .before Ju
12240 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20  lian day number 
12250 30 20 28 2d 34 37 31 33 2d 31 31 2d 32 34 20 31  0 (-4713-11-24 1
12260 32 3a 30 30 3a 30 30 29 2e 3c 2f 70 3e 0a 0a 3c  2:00:00).</p>..<
12270 70 3e 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64  p>Non-Vista Wind
12280 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e  ows platforms on
12290 6c 79 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73  ly support one s
122a0 65 74 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e  et of DST rules.
122b0 20 0a 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70   .Vista only sup
122c0 70 6f 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65  ports two. There
122d0 66 6f 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70  fore, on these p
122e0 6c 61 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f  latforms, .histo
122f0 72 69 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c  rical DST calcul
12300 61 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69  ations will be i
12310 6e 63 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65  ncorrect. .For e
12320 78 61 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55  xample, in the U
12330 53 2c 20 69 6e 20 32 30 30 37 20 74 68 65 20 44  S, in 2007 the D
12340 53 54 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64  ST rules changed
12350 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e  . .Non-Vista Win
12360 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61  dows platforms a
12370 70 70 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30  pply the new 200
12380 37 20 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20  7 DST rules .to 
12390 61 6c 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61  all previous yea
123a0 72 73 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74  rs as well. Vist
123b0 61 20 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20  a does somewhat 
123c0 62 65 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72  better.getting r
123d0 65 73 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62  esults correct b
123e0 61 63 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65  ack to 1986, whe
123f0 6e 20 74 68 65 20 72 75 6c 65 73 20 77 65 72 65  n the rules were
12400 20 61 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f   also changed.</
12410 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72  p>..<p>All inter
12420 6e 61 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73  nal computations
12430 20 61 73 73 75 6d 65 20 74 68 65 20 0a 3c 61 20   assume the .<a 
12440 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e  href="http://en.
12450 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
12460 6b 69 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c  ki/Gregorian_cal
12470 65 6e 64 61 72 22 3e 0a 47 72 65 67 6f 72 69 61  endar">.Gregoria
12480 6e 20 63 61 6c 65 6e 64 61 72 3c 2f 61 3e 20 73  n calendar</a> s
12490 79 73 74 65 6d 2e 20 20 49 74 20 69 73 20 61 6c  ystem.  It is al
124a0 73 6f 20 61 73 73 75 6d 65 64 20 74 68 61 74 20  so assumed that 
124b0 65 76 65 72 79 0a 64 61 79 20 69 73 20 65 78 61  every.day is exa
124c0 63 74 6c 79 20 38 36 34 30 30 20 73 65 63 6f 6e  ctly 86400 secon
124d0 64 73 20 69 6e 20 64 75 72 61 74 69 6f 6e 2e 3c  ds in duration.<
124e0 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
124f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12520 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12530 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
12540 6e 20 7b 41 67 67 72 65 67 61 74 65 20 46 75 6e  n {Aggregate Fun
12550 63 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63 20  ctions} aggfunc 
12560 7b 61 67 67 66 75 6e 63 7d 0a 3c 2f 74 63 6c 3e  {aggfunc}.</tcl>
12570 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72 65 67  ..<p>.The aggreg
12580 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68  ate functions sh
12590 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76  own below are av
125a0 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
125b0 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  lt.  Additional.
125c0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
125d0 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43  ons written in C
125e0 20 6d 61 79 20 62 65 20 61 64 64 65 64 20 75 73   may be added us
125f0 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69 74 65  ing the .[sqlite
12600 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
12610 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70  n()]</a>.API.</p
12620 3e 0a 0a 3c 70 3e 0a 49 6e 20 61 6e 79 20 61 67  >..<p>.In any ag
12630 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
12640 20 74 68 61 74 20 74 61 6b 65 73 20 61 20 73 69   that takes a si
12650 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20 74  ngle argument, t
12660 68 61 74 20 61 72 67 75 6d 65 6e 74 0a 63 61 6e  hat argument.can
12670 20 62 65 20 70 72 65 63 65 65 64 65 64 20 62 79   be preceeded by
12680 20 74 68 65 20 6b 65 79 77 6f 72 64 20 44 49 53   the keyword DIS
12690 54 49 4e 43 54 2e 20 20 49 6e 20 73 75 63 68 20  TINCT.  In such 
126a0 63 61 73 65 73 2c 20 64 75 70 6c 69 63 61 74 65  cases, duplicate
126b0 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 66 69  .elements are fi
126c0 6c 74 65 72 65 64 20 62 65 66 6f 72 65 20 62 65  ltered before be
126d0 69 6e 67 20 70 61 73 73 65 64 20 69 6e 74 6f 20  ing passed into 
126e0 74 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  the aggregate fu
126f0 6e 63 74 69 6f 6e 2e 0a 46 6f 72 20 65 78 61 6d  nction..For exam
12700 70 6c 65 2c 20 74 68 65 20 66 75 6e 63 74 69 6f  ple, the functio
12710 6e 20 22 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  n "count(distinc
12720 74 20 58 29 22 20 77 69 6c 6c 20 72 65 74 75 72  t X)" will retur
12730 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  n the number.of 
12740 64 69 73 74 69 6e 63 74 20 76 61 6c 75 65 73 20  distinct values 
12750 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e 73 74  of column X inst
12760 65 61 64 20 6f 66 20 74 68 65 20 74 6f 74 61 6c  ead of the total
12770 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e   number of non-n
12780 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20 63 6f  ull.values in co
12790 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74  lumn X..</p>..<t
127a0 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
127b0 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74  llpadding=10>.<t
127c0 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 76 67  cl>.funcdef {avg
127d0 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75  (X)} {} {.  Retu
127e0 72 6e 20 74 68 65 20 61 76 65 72 61 67 65 20 76  rn the average v
127f0 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d  alue of all non-
12800 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69  NULL <i>X</i> wi
12810 74 68 69 6e 20 61 0a 20 20 67 72 6f 75 70 2e 20  thin a.  group. 
12820 20 53 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42   String and BLOB
12830 20 76 61 6c 75 65 73 20 74 68 61 74 20 64 6f 20   values that do 
12840 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75  not look like nu
12850 6d 62 65 72 73 20 61 72 65 0a 20 20 69 6e 74 65  mbers are.  inte
12860 72 70 72 65 74 65 64 20 61 73 20 30 2e 0a 20 20  rpreted as 0..  
12870 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76  The result of av
12880 67 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20  g() is always a 
12890 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
128a0 61 6c 75 65 20 65 76 65 6e 20 69 66 20 61 6c 6c  alue even if all
128b0 0a 20 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e  .  inputs are in
128c0 74 65 67 65 72 73 2e 0a 7d 0a 0a 66 75 6e 63 64  tegers..}..funcd
128d0 65 66 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75  ef {count(X) cou
128e0 6e 74 28 2a 29 7d 20 7b 7d 20 7b 0a 20 20 54 68  nt(*)} {} {.  Th
128f0 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 74  e first form ret
12900 75 72 6e 20 61 20 63 6f 75 6e 74 20 6f 66 20 74  urn a count of t
12910 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d  he number of tim
12920 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f  es.  that <i>X</
12930 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69  i> is not NULL i
12940 6e 20 61 20 67 72 6f 75 70 2e 20 20 54 68 65 20  n a group.  The 
12950 73 65 63 6f 6e 64 20 66 6f 72 6d 20 28 77 69 74  second form (wit
12960 68 20 6e 6f 20 61 72 67 75 6d 65 6e 74 29 0a 20  h no argument). 
12970 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74   returns the tot
12980 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  al number of row
12990 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
129a0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f 75  }..funcdef {grou
129b0 70 5f 63 6f 6e 63 61 74 28 58 29 20 67 72 6f 75  p_concat(X) grou
129c0 70 5f 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b  p_concat(X,Y)} {
129d0 7d 20 7b 0a 20 20 54 68 65 20 72 65 73 75 6c 74  } {.  The result
129e0 20 69 73 20 61 20 73 74 72 69 6e 67 20 77 68 69   is a string whi
129f0 63 68 20 69 73 20 74 68 65 20 63 6f 6e 63 61 74  ch is the concat
12a00 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c  enation of.  all
12a10 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73   non-NULL values
12a20 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 49   of <i>X</i>.  I
12a30 66 20 70 61 72 61 6d 65 74 65 72 20 3c 69 3e 59  f parameter <i>Y
12a40 3c 2f 69 3e 20 69 73 20 74 68 65 20 73 65 70 61  </i> is the sepa
12a50 72 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e 20  rator.  between 
12a60 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e  instances of <i>
12a70 58 3c 2f 69 3e 2e 20 20 41 20 63 6f 6d 6d 61 20  X</i>.  A comma 
12a80 28 22 2c 22 29 20 69 73 20 75 73 65 64 20 61 73  (",") is used as
12a90 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20   the separator. 
12aa0 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20   if <i>Y</i> is 
12ab0 6f 6d 69 74 74 65 64 2e 0a 7d 0a 0a 66 75 6e 63  omitted..}..func
12ac0 64 65 66 20 7b 6d 61 78 28 58 29 7d 20 7b 6d 61  def {max(X)} {ma
12ad0 78 41 67 67 46 75 6e 63 20 61 67 67 5f 6d 61 78  xAggFunc agg_max
12ae0 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65  } {.  Return the
12af0 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f   maximum value o
12b00 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20  f all values in 
12b10 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 54 68 65  the group..  The
12b20 20 75 73 75 61 6c 20 73 6f 72 74 20 6f 72 64 65   usual sort orde
12b30 72 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  r is used to det
12b40 65 72 6d 69 6e 65 20 74 68 65 20 6d 61 78 69 6d  ermine the maxim
12b50 75 6d 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  um..}..funcdef {
12b60 6d 69 6e 28 58 29 7d 20 7b 6d 69 6e 41 67 67 46  min(X)} {minAggF
12b70 75 6e 63 20 61 67 67 5f 6d 69 6e 7d 20 7b 0a 20  unc agg_min} {. 
12b80 20 52 65 74 75 72 6e 20 74 68 65 20 6d 69 6e 69   Return the mini
12b90 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  mum non-NULL val
12ba0 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73  ue of all values
12bb0 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20   in the group.. 
12bc0 20 54 68 65 20 75 73 75 61 6c 20 73 6f 72 74 20   The usual sort 
12bd0 6f 72 64 65 72 20 69 73 20 75 73 65 64 20 74 6f  order is used to
12be0 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6d   determine the m
12bf0 69 6e 69 6d 75 6d 2e 20 20 0a 20 20 4e 55 4c 4c  inimum.  .  NULL
12c00 20 69 73 20 6f 6e 6c 79 20 72 65 74 75 72 6e 65   is only returne
12c10 64 0a 20 20 69 66 20 61 6c 6c 20 76 61 6c 75 65  d.  if all value
12c20 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 20 61  s in the group a
12c30 72 65 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75 6e 63  re NULL..}..func
12c40 64 65 66 20 7b 73 75 6d 28 58 29 20 74 6f 74 61  def {sum(X) tota
12c50 6c 28 58 29 7d 20 7b 73 75 6d 46 75 6e 63 20 73  l(X)} {sumFunc s
12c60 75 6d 20 74 6f 74 61 6c 7d 20 7b 0a 20 20 52 65  um total} {.  Re
12c70 74 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63  turn the numeric
12c80 20 73 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d   sum of all non-
12c90 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74  NULL values in t
12ca0 68 65 20 67 72 6f 75 70 2e 0a 20 20 49 66 20 74  he group..  If t
12cb0 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d  here are no non-
12cc0 4e 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73 20  NULL input rows 
12cd0 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72  then sum() retur
12ce0 6e 73 0a 20 20 4e 55 4c 4c 20 62 75 74 20 74 6f  ns.  NULL but to
12cf0 74 61 6c 28 29 20 72 65 74 75 72 6e 73 20 30 2e  tal() returns 0.
12d00 30 2e 0a 20 20 4e 55 4c 4c 20 69 73 20 6e 6f 74  0..  NULL is not
12d10 20 6e 6f 72 6d 61 6c 6c 79 20 61 20 68 65 6c 70   normally a help
12d20 66 75 6c 20 72 65 73 75 6c 74 20 66 6f 72 20 74  ful result for t
12d30 68 65 20 73 75 6d 20 6f 66 20 6e 6f 20 72 6f 77  he sum of no row
12d40 73 0a 20 20 62 75 74 20 74 68 65 20 53 51 4c 20  s.  but the SQL 
12d50 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65  standard require
12d60 73 20 69 74 20 61 6e 64 20 6d 6f 73 74 20 6f 74  s it and most ot
12d70 68 65 72 0a 20 20 53 51 4c 20 64 61 74 61 62 61  her.  SQL databa
12d80 73 65 20 65 6e 67 69 6e 65 73 20 69 6d 70 6c 65  se engines imple
12d90 6d 65 6e 74 20 73 75 6d 28 29 20 74 68 61 74 20  ment sum() that 
12da0 77 61 79 20 73 6f 20 53 51 4c 69 74 65 20 64 6f  way so SQLite do
12db0 65 73 20 69 74 20 69 6e 20 74 68 65 0a 20 20 73  es it in the.  s
12dc0 61 6d 65 20 77 61 79 20 69 6e 20 6f 72 64 65 72  ame way in order
12dd0 20 74 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c   to be compatibl
12de0 65 2e 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74 61  e.   The non-sta
12df0 6e 64 61 72 64 20 74 6f 74 61 6c 28 29 20 66 75  ndard total() fu
12e00 6e 63 74 69 6f 6e 0a 20 20 69 73 20 70 72 6f 76  nction.  is prov
12e10 69 64 65 64 20 61 73 20 61 20 63 6f 6e 76 65 6e  ided as a conven
12e20 69 65 6e 74 20 77 61 79 20 74 6f 20 77 6f 72 6b  ient way to work
12e30 20 61 72 6f 75 6e 64 20 74 68 69 73 20 64 65 73   around this des
12e40 69 67 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 69 6e  ign problem.  in
12e50 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   the SQL languag
12e60 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 54 68 65  e.</p>..  <p>The
12e70 20 72 65 73 75 6c 74 20 6f 66 20 74 6f 74 61 6c   result of total
12e80 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66  () is always a f
12e90 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
12ea0 6c 75 65 2e 0a 20 20 54 68 65 20 72 65 73 75 6c  lue..  The resul
12eb0 74 20 6f 66 20 73 75 6d 28 29 20 69 73 20 61 6e  t of sum() is an
12ec0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
12ed0 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  f all non-NULL i
12ee0 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65 67 65  nputs are intege
12ef0 72 73 2e 0a 20 20 49 66 20 61 6e 79 20 69 6e 70  rs..  If any inp
12f00 75 74 20 74 6f 20 73 75 6d 28 29 20 69 73 20 6e  ut to sum() is n
12f10 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
12f20 72 20 6f 72 20 61 20 4e 55 4c 4c 0a 20 20 74 68  r or a NULL.  th
12f30 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73  en sum() returns
12f40 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
12f50 74 20 76 61 6c 75 65 0a 20 20 77 68 69 63 68 20  t value.  which 
12f60 6d 69 67 68 74 20 62 65 20 61 6e 20 61 70 70 72  might be an appr
12f70 6f 78 69 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65  oximation to the
12f80 20 74 72 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a   true sum.</p>..
12f90 20 20 3c 70 3e 53 75 6d 28 29 20 77 69 6c 6c 20    <p>Sum() will 
12fa0 74 68 72 6f 77 20 61 6e 20 22 69 6e 74 65 67 65  throw an "intege
12fb0 72 20 6f 76 65 72 66 6c 6f 77 22 20 65 78 63 65  r overflow" exce
12fc0 70 74 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70  ption if all inp
12fd0 75 74 73 0a 20 20 61 72 65 20 69 6e 74 65 67 65  uts.  are intege
12fe0 72 73 20 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64  rs or NULL.  and
12ff0 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72   an integer over
13000 66 6c 6f 77 20 6f 63 63 75 72 73 20 61 74 20 61  flow occurs at a
13010 6e 79 20 70 6f 69 6e 74 20 64 75 72 69 6e 67 20  ny point during 
13020 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e  the computation.
13030 0a 20 20 54 6f 74 61 6c 28 29 20 6e 65 76 65 72  .  Total() never
13040 20 74 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70   throws an excep
13050 74 69 6f 6e 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c  tion..}.</tcl>.<
13060 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23  /table>..<tcl>.#
13070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13090 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
130a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
130b0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
130c0 63 74 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73  ction INSERT ins
130d0 65 72 74 20 7b 49 4e 53 45 52 54 20 49 4e 53 45  ert {INSERT INSE
130e0 52 54 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  RTs}..BubbleDiag
130f0 72 61 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74 20  ram insert-stmt 
13100 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  1.</tcl>..<p>The
13110 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
13120 74 20 63 6f 6d 65 73 20 69 6e 20 74 77 6f 20 62  t comes in two b
13130 61 73 69 63 20 66 6f 72 6d 73 2e 20 20 54 68 65  asic forms.  The
13140 20 66 69 72 73 74 20 66 6f 72 6d 0a 28 77 69 74   first form.(wit
13150 68 20 74 68 65 20 22 56 41 4c 55 45 53 22 20 6b  h the "VALUES" k
13160 65 79 77 6f 72 64 29 20 63 72 65 61 74 65 73 20  eyword) creates 
13170 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77  a single new row
13180 20 69 6e 20 61 6e 20 65 78 69 73 74 69 6e 67 20   in an existing 
13190 74 61 62 6c 65 2e 0a 49 66 20 6e 6f 20 63 6f 6c  table..If no col
131a0 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63  umn-list is spec
131b0 69 66 69 65 64 20 74 68 65 6e 20 74 68 65 20 6e  ified then the n
131c0 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20  umber of values 
131d0 6d 75 73 74 0a 62 65 20 74 68 65 20 73 61 6d 65  must.be the same
131e0 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   as the number o
131f0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
13200 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20 63 6f   table.  If a co
13210 6c 75 6d 6e 2d 6c 69 73 74 0a 69 73 20 73 70 65  lumn-list.is spe
13220 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65  cified, then the
13230 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65   number of value
13240 73 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65  s must match the
13250 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65 63 69   number of.speci
13260 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 20 43  fied columns.  C
13270 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61  olumns of the ta
13280 62 6c 65 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  ble that do not 
13290 61 70 70 65 61 72 20 69 6e 20 74 68 65 0a 63 6f  appear in the.co
132a0 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65 20 66 69  lumn list are fi
132b0 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20 64 65  lled with the de
132c0 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 6f 72 20  fault value, or 
132d0 77 69 74 68 20 4e 55 4c 4c 20 69 66 20 6e 6f 0a  with NULL if no.
132e0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73  default value is
132f0 20 73 70 65 63 69 66 69 65 64 2e 0a 3c 2f 70 3e   specified..</p>
13300 0a 0a 3c 70 3e 54 68 65 20 73 65 63 6f 6e 64 20  ..<p>The second 
13310 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45  form of the INSE
13320 52 54 20 73 74 61 74 65 6d 65 6e 74 20 74 61 6b  RT statement tak
13330 65 73 20 69 74 20 64 61 74 61 20 66 72 6f 6d 20  es it data from 
13340 61 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a.SELECT stateme
13350 6e 74 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20  nt.  The number 
13360 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
13370 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 0a  e result of the.
13380 53 45 4c 45 43 54 20 6d 75 73 74 20 65 78 61 63  SELECT must exac
13390 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20 6e 75  tly match the nu
133a0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
133b0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 69 66 0a  in the table if.
133c0 6e 6f 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 69  no column list i
133d0 73 20 73 70 65 63 69 66 69 65 64 2c 20 6f 72 20  s specified, or 
133e0 69 74 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68  it must match th
133f0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
13400 6d 6e 73 0a 6e 61 6d 65 20 69 6e 20 74 68 65 20  mns.name in the 
13410 63 6f 6c 75 6d 6e 20 6c 69 73 74 2e 20 20 41 20  column list.  A 
13420 6e 65 77 20 65 6e 74 72 79 20 69 73 20 6d 61 64  new entry is mad
13430 65 20 69 6e 20 74 68 65 20 74 61 62 6c 65 0a 66  e in the table.f
13440 6f 72 20 65 76 65 72 79 20 72 6f 77 20 6f 66 20  or every row of 
13450 74 68 65 20 53 45 4c 45 43 54 20 72 65 73 75 6c  the SELECT resul
13460 74 2e 20 20 54 68 65 20 53 45 4c 45 43 54 20 6d  t.  The SELECT m
13470 61 79 20 62 65 20 73 69 6d 70 6c 65 0a 6f 72 20  ay be simple.or 
13480 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c  compound.</p>..<
13490 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63  p>The optional c
134a0 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61  onflict-clause a
134b0 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69 66  llows the specif
134c0 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c  ication of an al
134d0 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72  ternative.constr
134e0 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  aint conflict re
134f0 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
13500 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67  hm to use during
13510 20 74 68 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e   this one comman
13520 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69  d..See the secti
13530 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f  on titled.[ON CO
13540 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69  NFLICT] for addi
13550 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
13560 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69 62  on..For compatib
13570 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c  ility with MySQL
13580 2c 20 74 68 65 20 70 61 72 73 65 72 20 61 6c 6c  , the parser all
13590 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66 20 74  ows the use of t
135a0 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72  he.single keywor
135b0 64 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f  d <a href="lang_
135c0 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45  replace.html">RE
135d0 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20  PLACE</a> as an 
135e0 0a 61 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45  .alias for "INSE
135f0 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a  RT OR REPLACE"..
13600 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
13610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13650 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
13660 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  on {ON CONFLICT 
13670 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74  clause} conflict
13680 20 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75   {{conflict clau
13690 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54  se} {ON CONFLICT
136a0 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
136b0 6d 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73  m conflict-claus
136c0 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  e.</tcl>..<p>The
136d0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
136e0 75 73 65 20 69 73 20 6e 6f 74 20 61 20 73 65 70  use is not a sep
136f0 61 72 61 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e  arate SQL comman
13700 64 2e 20 20 49 74 20 69 73 20 61 0a 6e 6f 6e 2d  d.  It is a.non-
13710 73 74 61 6e 64 61 72 64 20 63 6c 61 75 73 65 20  standard clause 
13720 74 68 61 74 20 63 61 6e 20 61 70 70 65 61 72 20  that can appear 
13730 69 6e 20 6d 61 6e 79 20 6f 74 68 65 72 20 53 51  in many other SQ
13740 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69  L commands..It i
13750 73 20 67 69 76 65 6e 20 69 74 73 20 6f 77 6e 20  s given its own 
13760 73 65 63 74 69 6f 6e 20 69 6e 20 74 68 69 73 20  section in this 
13770 64 6f 63 75 6d 65 6e 74 20 62 65 63 61 75 73 65  document because
13780 20 69 74 20 69 73 20 6e 6f 74 0a 70 61 72 74 20   it is not.part 
13790 6f 66 20 73 74 61 6e 64 61 72 64 20 53 51 4c 20  of standard SQL 
137a0 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20 6d 69  and therefore mi
137b0 67 68 74 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c  ght not be famil
137c0 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  iar.</p>..<p>The
137d0 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20   syntax for the 
137e0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
137f0 73 65 20 69 73 20 61 73 20 73 68 6f 77 6e 20 61  se is as shown a
13800 62 6f 76 65 20 66 6f 72 0a 74 68 65 20 43 52 45  bove for.the CRE
13810 41 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e  ATE TABLE comman
13820 64 2e 20 20 46 6f 72 20 74 68 65 20 49 4e 53 45  d.  For the INSE
13830 52 54 20 61 6e 64 0a 55 50 44 41 54 45 20 63 6f  RT and.UPDATE co
13840 6d 6d 61 6e 64 73 2c 20 74 68 65 20 6b 65 79 77  mmands, the keyw
13850 6f 72 64 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43  ords "ON CONFLIC
13860 54 22 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  T" are replaced 
13870 62 79 20 22 4f 52 22 2c 20 74 6f 20 6d 61 6b 65  by "OR", to make
13880 0a 74 68 65 20 73 79 6e 74 61 78 20 73 65 65 6d  .the syntax seem
13890 20 6d 6f 72 65 20 6e 61 74 75 72 61 6c 2e 20 20   more natural.  
138a0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73  For example, ins
138b0 74 65 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20  tead of."INSERT 
138c0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f  ON CONFLICT IGNO
138d0 52 45 22 20 77 65 20 68 61 76 65 20 22 49 4e 53  RE" we have "INS
138e0 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a  ERT OR IGNORE"..
138f0 54 68 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61  The keywords cha
13900 6e 67 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e  nge but the mean
13910 69 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73  ing of the claus
13920 65 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69  e is the same.ei
13930 74 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c  ther way.</p>..<
13940 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  p>The ON CONFLIC
13950 54 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  T clause specifi
13960 65 73 20 61 6e 20 61 6c 67 6f 72 69 74 68 6d 20  es an algorithm 
13970 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 0a  used to resolve.
13980 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c  constraint confl
13990 69 63 74 73 2e 20 20 54 68 65 72 65 20 61 72 65  icts.  There are
139a0 20 66 69 76 65 20 63 68 6f 69 63 65 73 3a 20 52   five choices: R
139b0 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 0a  OLLBACK, ABORT,.
139c0 46 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e  FAIL, IGNORE, an
139d0 64 20 52 45 50 4c 41 43 45 2e 20 54 68 65 20 64  d REPLACE. The d
139e0 65 66 61 75 6c 74 20 61 6c 67 6f 72 69 74 68 6d  efault algorithm
139f0 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69 73   is ABORT.  This
13a00 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d 65  .is what they me
13a10 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64  an:</p>..<dl>.<d
13a20 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62  t><b>ROLLBACK</b
13a30 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68  ></dt>.<dd><p>Wh
13a40 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  en a constraint 
13a50 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
13a60 2c 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 20 52  , an immediate R
13a70 4f 4c 4c 42 41 43 4b 0a 6f 63 63 75 72 73 2c 20  OLLBACK.occurs, 
13a80 74 68 75 73 20 65 6e 64 69 6e 67 20 74 68 65 20  thus ending the 
13a90 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
13aa0 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 63 6f 6d  ion, and the com
13ab0 6d 61 6e 64 20 61 62 6f 72 74 73 0a 77 69 74 68  mand aborts.with
13ac0 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 6f   a return code o
13ad0 66 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  f SQLITE_CONSTRA
13ae0 49 4e 54 2e 20 20 49 66 20 6e 6f 20 74 72 61 6e  INT.  If no tran
13af0 73 61 63 74 69 6f 6e 20 69 73 0a 61 63 74 69 76  saction is.activ
13b00 65 20 28 6f 74 68 65 72 20 74 68 61 6e 20 74 68  e (other than th
13b10 65 20 69 6d 70 6c 69 65 64 20 74 72 61 6e 73 61  e implied transa
13b20 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 63 72  ction that is cr
13b30 65 61 74 65 64 20 6f 6e 20 65 76 65 72 79 0a 63  eated on every.c
13b40 6f 6d 6d 61 6e 64 29 20 74 68 65 6e 20 74 68 69  ommand) then thi
13b50 73 20 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b  s algorithm work
13b60 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
13b70 4f 52 54 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  ORT.</p></dd>..<
13b80 64 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c  dt><b>ABORT</b><
13b90 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e  /dt>.<dd><p>When
13ba0 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
13bb0 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
13bc0 74 68 65 20 63 6f 6d 6d 61 6e 64 20 62 61 63 6b  the command back
13bd0 73 20 6f 75 74 0a 61 6e 79 20 70 72 69 6f 72 20  s out.any prior 
13be0 63 68 61 6e 67 65 73 20 69 74 20 6d 69 67 68 74  changes it might
13bf0 20 68 61 76 65 20 6d 61 64 65 20 61 6e 64 20 61   have made and a
13c00 62 6f 72 74 73 20 77 69 74 68 20 61 20 72 65 74  borts with a ret
13c10 75 72 6e 20 63 6f 64 65 0a 6f 66 20 53 51 4c 49  urn code.of SQLI
13c20 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20  TE_CONSTRAINT.  
13c30 42 75 74 20 6e 6f 20 52 4f 4c 4c 42 41 43 4b 20  But no ROLLBACK 
13c40 69 73 20 65 78 65 63 75 74 65 64 20 73 6f 20 63  is executed so c
13c50 68 61 6e 67 65 73 0a 66 72 6f 6d 20 70 72 69 6f  hanges.from prio
13c60 72 20 63 6f 6d 6d 61 6e 64 73 20 77 69 74 68 69  r commands withi
13c70 6e 20 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73  n the same trans
13c80 61 63 74 69 6f 6e 0a 61 72 65 20 70 72 65 73 65  action.are prese
13c90 72 76 65 64 2e 20 20 54 68 69 73 20 69 73 20 74  rved.  This is t
13ca0 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76  he default behav
13cb0 69 6f 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  ior.</p></dd>..<
13cc0 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f  dt><b>FAIL</b></
13cd0 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20  dt>.<dd><p>When 
13ce0 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
13cf0 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
13d00 68 65 20 63 6f 6d 6d 61 6e 64 20 61 62 6f 72 74  he command abort
13d10 73 20 77 69 74 68 20 61 0a 72 65 74 75 72 6e 20  s with a.return 
13d20 63 6f 64 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53  code SQLITE_CONS
13d30 54 52 41 49 4e 54 2e 20 20 42 75 74 20 61 6e 79  TRAINT.  But any
13d40 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
13d50 64 61 74 61 62 61 73 65 20 74 68 61 74 0a 74 68  database that.th
13d60 65 20 63 6f 6d 6d 61 6e 64 20 6d 61 64 65 20 70  e command made p
13d70 72 69 6f 72 20 74 6f 20 65 6e 63 6f 75 6e 74 65  rior to encounte
13d80 72 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61  ring the constra
13d90 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 61 72  int violation.ar
13da0 65 20 70 72 65 73 65 72 76 65 64 20 61 6e 64 20  e preserved and 
13db0 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f  are not backed o
13dc0 75 74 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ut.  For example
13dd0 2c 20 69 66 20 61 6e 20 55 50 44 41 54 45 0a 73  , if an UPDATE.s
13de0 74 61 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74  tatement encount
13df0 65 72 65 64 20 61 20 63 6f 6e 73 74 72 61 69 6e  ered a constrain
13e00 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74  t violation on t
13e10 68 65 20 31 30 30 74 68 20 72 6f 77 20 74 68 61  he 100th row tha
13e20 74 0a 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f  t.it attempts to
13e30 20 75 70 64 61 74 65 2c 20 74 68 65 6e 20 74 68   update, then th
13e40 65 20 66 69 72 73 74 20 39 39 20 72 6f 77 20 63  e first 99 row c
13e50 68 61 6e 67 65 73 20 61 72 65 20 70 72 65 73 65  hanges are prese
13e60 72 76 65 64 0a 62 75 74 20 63 68 61 6e 67 65 73  rved.but changes
13e70 20 74 6f 20 72 6f 77 73 20 31 30 30 20 61 6e 64   to rows 100 and
13e80 20 62 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63   beyond never oc
13e90 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  cur.</p></dd>..<
13ea0 64 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e  dt><b>IGNORE</b>
13eb0 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65  </dt>.<dd><p>Whe
13ec0 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  n a constraint v
13ed0 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
13ee0 20 74 68 65 20 6f 6e 65 20 72 6f 77 20 74 68 61   the one row tha
13ef0 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63  t contains.the c
13f00 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
13f10 69 6f 6e 20 69 73 20 6e 6f 74 20 69 6e 73 65 72  ion is not inser
13f20 74 65 64 20 6f 72 20 63 68 61 6e 67 65 64 2e 20  ted or changed. 
13f30 20 42 75 74 20 74 68 65 20 63 6f 6d 6d 61 6e 64   But the command
13f40 0a 63 6f 6e 74 69 6e 75 65 73 20 65 78 65 63 75  .continues execu
13f50 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 20 20  ting normally.  
13f60 4f 74 68 65 72 20 72 6f 77 73 20 62 65 66 6f 72  Other rows befor
13f70 65 20 61 6e 64 20 61 66 74 65 72 20 74 68 65 20  e and after the 
13f80 72 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e  row that.contain
13f90 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
13fa0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 63 6f 6e 74  t violation cont
13fb0 69 6e 75 65 20 74 6f 20 62 65 20 69 6e 73 65 72  inue to be inser
13fc0 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 0a 6e  ted or updated.n
13fd0 6f 72 6d 61 6c 6c 79 2e 20 20 4e 6f 20 65 72 72  ormally.  No err
13fe0 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e 3c  or is returned.<
13ff0 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
14000 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74  >REPLACE</b></dt
14010 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20  >.<dd><p>When a 
14020 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
14030 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
14040 72 73 2c 20 74 68 65 20 70 72 65 2d 65 78 69 73  rs, the pre-exis
14050 74 69 6e 67 20 72 6f 77 73 0a 74 68 61 74 20 61  ting rows.that a
14060 72 65 20 63 61 75 73 69 6e 67 20 74 68 65 20 63  re causing the c
14070 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
14080 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
14090 70 72 69 6f 72 20 74 6f 20 69 6e 73 65 72 74 69  prior to inserti
140a0 6e 67 0a 6f 72 20 75 70 64 61 74 69 6e 67 20 74  ng.or updating t
140b0 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 20  he current row. 
140c0 20 54 68 75 73 20 74 68 65 20 69 6e 73 65 72 74   Thus the insert
140d0 20 6f 72 20 75 70 64 61 74 65 20 61 6c 77 61 79   or update alway
140e0 73 20 6f 63 63 75 72 73 2e 0a 54 68 65 20 63 6f  s occurs..The co
140f0 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20  mmand continues 
14100 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c  executing normal
14110 6c 79 2e 20 20 4e 6f 20 65 72 72 6f 72 20 69 73  ly.  No error is
14120 20 72 65 74 75 72 6e 65 64 2e 0a 49 66 20 61 20   returned..If a 
14130 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
14140 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
14150 63 75 72 73 2c 20 74 68 65 20 4e 55 4c 4c 20 76  curs, the NULL v
14160 61 6c 75 65 20 69 73 20 72 65 70 6c 61 63 65 64  alue is replaced
14170 0a 62 79 20 74 68 65 20 64 65 66 61 75 6c 74 20  .by the default 
14180 76 61 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63  value for that c
14190 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 20 63  olumn.  If the c
141a0 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66  olumn has no def
141b0 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e  ault.value, then
141c0 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
141d0 69 74 68 6d 20 69 73 20 75 73 65 64 2e 20 20 49  ithm is used.  I
141e0 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  f a CHECK constr
141f0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 6f  aint violation.o
14200 63 63 75 72 73 20 74 68 65 6e 20 74 68 65 20 49  ccurs then the I
14210 47 4e 4f 52 45 20 61 6c 67 6f 72 69 74 68 6d 20  GNORE algorithm 
14220 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  is used.</p>..<p
14230 3e 57 68 65 6e 20 74 68 69 73 20 63 6f 6e 66 6c  >When this confl
14240 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73  ict resolution s
14250 74 72 61 74 65 67 79 20 64 65 6c 65 74 65 73 20  trategy deletes 
14260 72 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  rows in order to
14270 0a 73 61 74 69 73 66 79 20 61 20 63 6f 6e 73 74  .satisfy a const
14280 72 61 69 6e 74 2c 20 69 74 20 64 6f 65 73 20 6e  raint, it does n
14290 6f 74 20 69 6e 76 6f 6b 65 20 64 65 6c 65 74 65  ot invoke delete
142a0 20 74 72 69 67 67 65 72 73 20 6f 6e 20 74 68 6f   triggers on tho
142b0 73 65 0a 72 6f 77 73 2e 20 20 54 68 69 73 20 62  se.rows.  This b
142c0 65 68 61 76 69 6f 72 20 6d 69 67 68 74 20 63 68  ehavior might ch
142d0 61 6e 67 65 20 69 6e 20 61 20 66 75 74 75 72 65  ange in a future
142e0 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f   release.</p>.</
142f0 64 6c 3e 0a 0a 3c 70 3e 54 68 65 20 61 6c 67 6f  dl>..<p>The algo
14300 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20  rithm specified 
14310 69 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65  in the OR clause
14320 20 6f 66 20 61 20 49 4e 53 45 52 54 20 6f 72 20   of a INSERT or 
14330 55 50 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73  UPDATE.overrides
14340 20 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73   any algorithm s
14350 70 65 63 69 66 69 65 64 20 69 6e 20 61 20 43 52  pecified in a CR
14360 45 41 54 45 20 54 41 42 4c 45 2e 0a 49 66 20 6e  EATE TABLE..If n
14370 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73  o algorithm is s
14380 70 65 63 69 66 69 65 64 20 61 6e 79 77 68 65 72  pecified anywher
14390 65 2c 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67  e, the ABORT alg
143a0 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c  orithm is used.<
143b0 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
143c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14400 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
14410 6e 20 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65  n REINDEX reinde
14420 78 20 52 45 49 4e 44 45 58 0a 0a 42 75 62 62 6c  x REINDEX..Bubbl
14430 65 44 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78  eDiagram reindex
14440 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
14450 3c 70 3e 54 68 65 20 52 45 49 4e 44 45 58 20 63  <p>The REINDEX c
14460 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74  ommand is used t
14470 6f 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63  o delete and rec
14480 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 66 72  reate indices fr
14490 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73  om scratch..This
144a0 20 69 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20   is useful when 
144b0 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  the definition o
144c0 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  f a collation se
144d0 71 75 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67  quence has chang
144e0 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20  ed..</p>..<p>In 
144f0 74 68 65 20 66 69 72 73 74 20 66 6f 72 6d 2c 20  the first form, 
14500 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61  all indices in a
14510 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
14520 62 61 73 65 73 20 74 68 61 74 20 75 73 65 20 74  bases that use t
14530 68 65 0a 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69  he.named collati
14540 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 72 65 20  on sequence are 
14550 72 65 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68  recreated. In th
14560 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 2c 20 69  e second form, i
14570 66 20 0a 3c 69 3e 26 23 39 31 3b 64 61 74 61 62  f .<i>&#91;datab
14580 61 73 65 2d 6e 61 6d 65 2e 26 23 39 33 3b 74 61  ase-name.&#93;ta
14590 62 6c 65 2f 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f  ble/index-name</
145a0 69 3e 20 69 64 65 6e 74 69 66 69 65 73 20 61 20  i> identifies a 
145b0 74 61 62 6c 65 2c 0a 74 68 65 6e 20 61 6c 6c 20  table,.then all 
145c0 69 6e 64 69 63 65 73 0a 61 73 73 6f 63 69 61 74  indices.associat
145d0 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
145e0 65 20 61 72 65 20 72 65 62 75 69 6c 74 2e 20 49  e are rebuilt. I
145f0 66 20 61 6e 20 69 6e 64 65 78 20 69 73 20 69 64  f an index is id
14600 65 6e 74 69 66 69 65 64 2c 20 74 68 65 6e 20 6f  entified, then o
14610 6e 6c 79 0a 74 68 69 73 20 73 70 65 63 69 66 69  nly.this specifi
14620 63 20 69 6e 64 65 78 20 69 73 20 64 65 6c 65 74  c index is delet
14630 65 64 20 61 6e 64 20 72 65 63 72 65 61 74 65 64  ed and recreated
14640 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 6e 6f  ..</p>..<p>If no
14650 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d   <i>database-nam
14660 65 3c 2f 69 3e 20 69 73 20 73 70 65 63 69 66 69  e</i> is specifi
14670 65 64 20 61 6e 64 20 74 68 65 72 65 20 65 78 69  ed and there exi
14680 73 74 73 20 62 6f 74 68 20 61 20 74 61 62 6c 65  sts both a table
14690 20 6f 72 0a 69 6e 64 65 78 20 61 6e 64 20 61 20   or.index and a 
146a0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
146b0 63 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 66  ce of the specif
146c0 69 65 64 20 6e 61 6d 65 2c 20 74 68 65 6e 20 69  ied name, then i
146d0 6e 64 69 63 65 73 20 61 73 73 6f 63 69 61 74 65  ndices associate
146e0 64 0a 77 69 74 68 20 74 68 65 20 63 6f 6c 6c 61  d.with the colla
146f0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f 6e  tion sequence on
14700 6c 79 20 61 72 65 20 72 65 63 6f 6e 73 74 72 75  ly are reconstru
14710 63 74 65 64 2e 20 54 68 69 73 20 61 6d 62 69 67  cted. This ambig
14720 75 69 74 79 20 6d 61 79 20 62 65 0a 64 69 73 70  uity may be.disp
14730 65 6c 6c 65 64 20 62 79 20 61 6c 77 61 79 73 20  elled by always 
14740 73 70 65 63 69 66 79 69 6e 67 20 61 20 3c 69 3e  specifying a <i>
14750 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69  database-name</i
14760 3e 20 77 68 65 6e 20 72 65 69 6e 64 65 78 69 6e  > when reindexin
14770 67 20 61 0a 73 70 65 63 69 66 69 63 20 74 61 62  g a.specific tab
14780 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c 74  le or index...<t
14790 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
147a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
147b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
147c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
147d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
147e0 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c  ###.Section REPL
147f0 41 43 45 20 72 65 70 6c 61 63 65 20 52 45 50 4c  ACE replace REPL
14800 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ACE..</tcl>..<p>
14810 54 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d  The REPLACE comm
14820 61 6e 64 20 69 73 20 61 6e 20 61 6c 69 61 73 20  and is an alias 
14830 66 6f 72 20 74 68 65 20 22 49 4e 53 45 52 54 20  for the "INSERT 
14840 4f 52 20 52 45 50 4c 41 43 45 22 20 76 61 72 69  OR REPLACE" vari
14850 61 6e 74 0a 6f 66 20 74 68 65 20 3c 61 20 68 72  ant.of the <a hr
14860 65 66 3d 22 6c 61 6e 67 5f 69 6e 73 65 72 74 2e  ef="lang_insert.
14870 68 74 6d 6c 22 3e 49 4e 53 45 52 54 3c 2f 61 3e  html">INSERT</a>
14880 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68 69 73   command.  .This
14890 20 61 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64   alias is provid
148a0 65 64 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69  ed for.compatibi
148b0 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2e  lity with MySQL.
148c0 20 20 53 65 65 20 74 68 65 20 0a 3c 61 20 68 72    See the .<a hr
148d0 65 66 3d 22 6c 61 6e 67 5f 69 6e 73 65 72 74 2e  ef="lang_insert.
148e0 68 74 6d 6c 22 3e 49 4e 53 45 52 54 3c 2f 61 3e  html">INSERT</a>
148f0 20 63 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e   command documen
14900 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74  tation for addit
14910 69 6f 6e 61 6c 0a 69 6e 66 6f 72 6d 61 74 69 6f  ional.informatio
14920 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a  n.</p>  ..<tcl>.
14930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
14980 53 65 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73  Section SELECT s
14990 65 6c 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75  elect {SELECT qu
149a0 65 72 79 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  ery}..BubbleDiag
149b0 72 61 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74 20  ram select-stmt 
149c0 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
149d0 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 0a 42 75  result-column.Bu
149e0 62 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e  bbleDiagram join
149f0 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c 65 44 69  -source.BubbleDi
14a00 61 67 72 61 6d 20 73 69 6e 67 6c 65 2d 73 6f 75  agram single-sou
14a10 72 63 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61  rce.BubbleDiagra
14a20 6d 20 6a 6f 69 6e 2d 6f 70 0a 42 75 62 62 6c 65  m join-op.Bubble
14a30 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 63 6f 6e  Diagram join-con
14a40 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69  straint.BubbleDi
14a50 61 67 72 61 6d 20 6f 72 64 65 72 69 6e 67 2d 74  agram ordering-t
14a60 65 72 6d 0a 42 75 62 62 6c 65 44 69 61 67 72 61  erm.BubbleDiagra
14a70 6d 20 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61  m compound-opera
14a80 74 6f 72 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  tor.</tcl>..<p>T
14a90 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
14aa0 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 71  ent is used to q
14ab0 75 65 72 79 20 74 68 65 20 64 61 74 61 62 61 73  uery the databas
14ac0 65 2e 20 20 54 68 65 0a 72 65 73 75 6c 74 20 6f  e.  The.result o
14ad0 66 20 61 20 53 45 4c 45 43 54 20 69 73 20 7a 65  f a SELECT is ze
14ae0 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20  ro or more rows 
14af0 6f 66 20 64 61 74 61 20 77 68 65 72 65 20 65 61  of data where ea
14b00 63 68 20 72 6f 77 0a 68 61 73 20 61 20 66 69 78  ch row.has a fix
14b10 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  ed number of col
14b20 75 6d 6e 73 2e 20 20 54 68 65 20 6e 75 6d 62 65  umns.  The numbe
14b30 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
14b40 74 68 65 0a 72 65 73 75 6c 74 20 69 73 20 73 70  the.result is sp
14b50 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 65  ecified by the e
14b60 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69  xpression list i
14b70 6e 20 62 65 74 77 65 65 6e 20 74 68 65 0a 53 45  n between the.SE
14b80 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65  LECT and FROM ke
14b90 79 77 6f 72 64 73 2e 20 20 41 6e 79 20 61 72 62  ywords.  Any arb
14ba0 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f  itrary expressio
14bb0 6e 20 63 61 6e 20 62 65 20 75 73 65 64 0a 61 73  n can be used.as
14bc0 20 61 20 72 65 73 75 6c 74 2e 20 20 49 66 20 61   a result.  If a
14bd0 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
14be0 6f 6e 20 69 73 20 7d 0a 68 64 5f 70 75 74 73 20  on is }.hd_puts 
14bf0 22 5b 4f 70 65 72 61 74 6f 72 20 2a 5d 20 74 68  "[Operator *] th
14c00 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 6f  en all columns o
14c10 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 72 65  f all tables are
14c20 20 73 75 62 73 74 69 74 75 74 65 64 5c 6e 22 0a   substituted\n".
14c30 68 64 5f 70 75 74 73 20 22 66 6f 72 20 74 68 61  hd_puts "for tha
14c40 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e  t one expression
14c50 2e 20 20 49 66 20 74 68 65 20 65 78 70 72 65 73  .  If the expres
14c60 73 69 6f 6e 20 69 73 20 74 68 65 20 6e 61 6d 65  sion is the name
14c70 20 6f 66 5c 6e 22 0a 68 64 5f 70 75 74 73 20 22   of\n".hd_puts "
14c80 61 20 74 61 62 6c 65 20 66 6f 6c 6c 6f 77 65 64  a table followed
14c90 20 62 79 20 5b 4f 70 65 72 61 74 6f 72 20 2e 2a   by [Operator .*
14ca0 5d 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ] then the resul
14cb0 74 20 69 73 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73  t is all columns
14cc0 5c 6e 22 0a 68 64 5f 70 75 74 73 20 7b 69 6e 20  \n".hd_puts {in 
14cd0 74 68 61 74 20 6f 6e 65 20 74 61 62 6c 65 2e 3c  that one table.<
14ce0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 44 49 53 54  /p>..<p>The DIST
14cf0 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 63 61 75  INCT keyword cau
14d00 73 65 73 20 61 20 73 75 62 73 65 74 20 6f 66 20  ses a subset of 
14d10 72 65 73 75 6c 74 20 72 6f 77 73 20 74 6f 20 62  result rows to b
14d20 65 20 72 65 74 75 72 6e 65 64 2c 20 0a 69 6e 20  e returned, .in 
14d30 77 68 69 63 68 20 65 61 63 68 20 72 65 73 75 6c  which each resul
14d40 74 20 72 6f 77 20 69 73 20 64 69 66 66 65 72 65  t row is differe
14d50 6e 74 2e 20 20 4e 55 4c 4c 20 76 61 6c 75 65 73  nt.  NULL values
14d60 20 61 72 65 20 6e 6f 74 20 74 72 65 61 74 65 64   are not treated
14d70 20 61 73 20 0a 64 69 73 74 69 6e 63 74 20 66 72   as .distinct fr
14d80 6f 6d 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20  om each other.  
14d90 54 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61  The default beha
14da0 76 69 6f 72 20 69 73 20 74 68 61 74 20 61 6c 6c  vior is that all
14db0 20 72 65 73 75 6c 74 20 72 6f 77 73 20 0a 62 65   result rows .be
14dc0 20 72 65 74 75 72 6e 65 64 2c 20 77 68 69 63 68   returned, which
14dd0 20 63 61 6e 20 62 65 20 6d 61 64 65 20 65 78 70   can be made exp
14de0 6c 69 63 69 74 20 77 69 74 68 20 74 68 65 20 6b  licit with the k
14df0 65 79 77 6f 72 64 20 41 4c 4c 2e 3c 2f 70 3e 0a  eyword ALL.</p>.
14e00 0a 3c 70 3e 54 68 65 20 71 75 65 72 79 20 69 73  .<p>The query is
14e10 20 65 78 65 63 75 74 65 64 20 61 67 61 69 6e 73   executed agains
14e20 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  t one or more ta
14e30 62 6c 65 73 20 73 70 65 63 69 66 69 65 64 20 61  bles specified a
14e40 66 74 65 72 0a 74 68 65 20 46 52 4f 4d 20 6b 65  fter.the FROM ke
14e50 79 77 6f 72 64 2e 20 20 49 66 20 6d 75 6c 74 69  yword.  If multi
14e60 70 6c 65 20 74 61 62 6c 65 73 20 6e 61 6d 65 73  ple tables names
14e70 20 61 72 65 20 73 65 70 61 72 61 74 65 64 20 62   are separated b
14e80 79 20 63 6f 6d 6d 61 73 2c 0a 74 68 65 6e 20 74  y commas,.then t
14e90 68 65 20 71 75 65 72 79 20 69 73 20 61 67 61 69  he query is agai
14ea0 6e 73 74 20 74 68 65 20 63 72 6f 73 73 20 6a 6f  nst the cross jo
14eb0 69 6e 20 6f 66 20 74 68 65 20 76 61 72 69 6f 75  in of the variou
14ec0 73 20 74 61 62 6c 65 73 2e 0a 54 68 65 20 66 75  s tables..The fu
14ed0 6c 6c 20 53 51 4c 2d 39 32 20 6a 6f 69 6e 20 73  ll SQL-92 join s
14ee0 79 6e 74 61 78 20 63 61 6e 20 61 6c 73 6f 20 62  yntax can also b
14ef0 65 20 75 73 65 64 20 74 6f 20 73 70 65 63 69 66  e used to specif
14f00 79 20 6a 6f 69 6e 73 2e 0a 41 20 73 75 62 2d 71  y joins..A sub-q
14f10 75 65 72 79 0a 69 6e 20 70 61 72 65 6e 74 68 65  uery.in parenthe
14f20 73 65 73 20 6d 61 79 20 62 65 20 73 75 62 73 74  ses may be subst
14f30 69 74 75 74 65 64 20 66 6f 72 20 61 6e 79 20 74  ituted for any t
14f40 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65  able name in the
14f50 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 0a 54 68   FROM clause..Th
14f60 65 20 65 6e 74 69 72 65 20 46 52 4f 4d 20 63 6c  e entire FROM cl
14f70 61 75 73 65 20 6d 61 79 20 62 65 20 6f 6d 69 74  ause may be omit
14f80 74 65 64 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ted, in which ca
14f90 73 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  se the result is
14fa0 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20 63 6f   a.single row co
14fb0 6e 73 69 73 74 69 6e 67 20 6f 66 20 74 68 65 20  nsisting of the 
14fc0 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 65 78  values of the ex
14fd0 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 0a 3c  pression list..<
14fe0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 57 48 45 52  /p>..<p>The WHER
14ff0 45 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20  E clause can be 
15000 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68  used to limit th
15010 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
15020 20 6f 76 65 72 0a 77 68 69 63 68 20 74 68 65 20   over.which the 
15030 71 75 65 72 79 20 6f 70 65 72 61 74 65 73 2e 3c  query operates.<
15040 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 47 52 4f 55  /p>..<p>The GROU
15050 50 20 42 59 20 63 6c 61 75 73 65 20 63 61 75 73  P BY clause caus
15060 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72  es one or more r
15070 6f 77 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ows of the resul
15080 74 20 74 6f 0a 62 65 20 63 6f 6d 62 69 6e 65 64  t to.be combined
15090 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 72   into a single r
150a0 6f 77 20 6f 66 20 6f 75 74 70 75 74 2e 20 20 54  ow of output.  T
150b0 68 69 73 20 69 73 20 65 73 70 65 63 69 61 6c 6c  his is especiall
150c0 79 20 75 73 65 66 75 6c 0a 77 68 65 6e 20 74 68  y useful.when th
150d0 65 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e  e result contain
150e0 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
150f0 74 69 6f 6e 73 2e 20 20 54 68 65 20 65 78 70 72  tions.  The expr
15100 65 73 73 69 6f 6e 73 20 69 6e 0a 74 68 65 20 47  essions in.the G
15110 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 64  ROUP BY clause d
15120 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68  o <em>not</em> h
15130 61 76 65 20 74 6f 20 62 65 20 65 78 70 72 65 73  ave to be expres
15140 73 69 6f 6e 73 20 74 68 61 74 0a 61 70 70 65 61  sions that.appea
15150 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e  r in the result.
15160 20 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61    The HAVING cla
15170 75 73 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74  use is similar t
15180 6f 20 57 48 45 52 45 20 65 78 63 65 70 74 0a 74  o WHERE except.t
15190 68 61 74 20 48 41 56 49 4e 47 20 61 70 70 6c 69  hat HAVING appli
151a0 65 73 20 61 66 74 65 72 20 67 72 6f 75 70 69 6e  es after groupin
151b0 67 20 68 61 73 20 6f 63 63 75 72 72 65 64 2e 20  g has occurred. 
151c0 20 54 68 65 20 48 41 56 49 4e 47 20 65 78 70 72   The HAVING expr
151d0 65 73 73 69 6f 6e 0a 6d 61 79 20 72 65 66 65 72  ession.may refer
151e0 20 74 6f 20 76 61 6c 75 65 73 2c 20 65 76 65 6e   to values, even
151f0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
15200 69 6f 6e 73 2c 20 74 68 61 74 20 61 72 65 20 6e  ions, that are n
15210 6f 74 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ot in the result
15220 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 52  .</p>..<p>The OR
15230 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 63 61  DER BY clause ca
15240 75 73 65 73 20 74 68 65 20 6f 75 74 70 75 74 20  uses the output 
15250 72 6f 77 73 20 74 6f 20 62 65 20 73 6f 72 74 65  rows to be sorte
15260 64 2e 20 20 0a 54 68 65 20 61 72 67 75 6d 65 6e  d.  .The argumen
15270 74 20 74 6f 20 4f 52 44 45 52 20 42 59 20 69 73  t to ORDER BY is
15280 20 61 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   a list of expre
15290 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20  ssions that are 
152a0 75 73 65 64 20 61 73 20 74 68 65 0a 6b 65 79 20  used as the.key 
152b0 66 6f 72 20 74 68 65 20 73 6f 72 74 2e 20 20 54  for the sort.  T
152c0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 64  he expressions d
152d0 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 62 65  o not have to be
152e0 20 70 61 72 74 20 6f 66 20 74 68 65 0a 72 65 73   part of the.res
152f0 75 6c 74 20 66 6f 72 20 61 20 73 69 6d 70 6c 65  ult for a simple
15300 20 53 45 4c 45 43 54 2c 20 62 75 74 20 69 6e 20   SELECT, but in 
15310 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
15320 54 20 65 61 63 68 20 73 6f 72 74 0a 65 78 70 72  T each sort.expr
15330 65 73 73 69 6f 6e 20 6d 75 73 74 20 65 78 61 63  ession must exac
15340 74 6c 79 20 6d 61 74 63 68 20 6f 6e 65 20 6f 66  tly match one of
15350 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
15360 6d 6e 73 2e 20 20 45 61 63 68 0a 73 6f 72 74 20  mns.  Each.sort 
15370 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62  expression may b
15380 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c  e optionally fol
15390 6c 6f 77 65 64 20 62 79 20 61 20 43 4f 4c 4c 41  lowed by a COLLA
153a0 54 45 20 6b 65 79 77 6f 72 64 20 61 6e 64 0a 74  TE keyword and.t
153b0 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c  he name of a col
153c0 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
153d0 75 73 65 64 20 66 6f 72 20 6f 72 64 65 72 69 6e  used for orderin
153e0 67 20 74 65 78 74 20 61 6e 64 2f 6f 72 0a 6b 65  g text and/or.ke
153f0 79 77 6f 72 64 73 20 41 53 43 20 6f 72 20 44 45  ywords ASC or DE
15400 53 43 20 74 6f 20 73 70 65 63 69 66 79 20 74 68  SC to specify th
15410 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 3c 2f 70  e sort order.</p
15420 3e 0a 0a 3c 70 3e 45 61 63 68 20 74 65 72 6d 20  >..<p>Each term 
15430 6f 66 20 61 6e 20 4f 52 44 45 52 20 42 59 20 65  of an ORDER BY e
15440 78 70 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f  xpression is pro
15450 63 65 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77  cessed as follow
15460 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  s:</p>..<ol>.<li
15470 3e 3c 70 3e 49 66 20 74 68 65 20 4f 52 44 45 52  ><p>If the ORDER
15480 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
15490 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74  s a constant int
154a0 65 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a  eger K then the.
154b0 6f 75 74 70 75 74 20 69 73 20 6f 72 64 65 72 65  output is ordere
154c0 64 20 62 79 20 74 68 65 20 4b 2d 74 68 20 63 6f  d by the K-th co
154d0 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75  lumn of the resu
154e0 6c 74 20 73 65 74 2e 3c 2f 70 3e 3c 2f 6c 69 3e  lt set.</p></li>
154f0 0a 3c 6c 69 3e 3c 70 3e 49 66 20 74 68 65 20 4f  .<li><p>If the O
15500 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
15510 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66  on is an identif
15520 69 65 72 20 61 6e 64 20 6f 6e 65 20 6f 66 20 74  ier and one of t
15530 68 65 0a 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e  he.output column
15540 73 20 68 61 73 20 61 6e 20 61 6c 69 61 73 20 62  s has an alias b
15550 79 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c  y the same name,
15560 20 74 68 65 6e 20 74 68 65 20 6f 75 74 70 75 74   then the output
15570 20 69 73 0a 6f 72 64 65 72 65 64 20 62 79 20 74   is.ordered by t
15580 68 65 20 69 64 65 6e 74 69 66 69 65 64 20 63 6f  he identified co
15590 6c 75 6d 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c  lumn.</p></li>.<
155a0 6c 69 3e 3c 70 3e 4f 74 68 65 72 77 69 73 65 2c  li><p>Otherwise,
155b0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
155c0 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
155d0 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 6f 75  uated and the ou
155e0 74 70 75 74 20 0a 69 73 20 6f 72 64 65 72 65 64  tput .is ordered
155f0 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 6f 66   by the value of
15600 20 74 68 61 74 20 65 78 70 72 65 73 73 69 6f 6e   that expression
15610 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e  .</p></li>.</ol>
15620 0a 0a 3c 70 3e 49 6e 20 61 20 63 6f 6d 70 6f 75  ..<p>In a compou
15630 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  nd SELECT statem
15640 65 6e 74 2c 20 74 68 65 20 74 68 69 72 64 20 4f  ent, the third O
15650 52 44 45 52 20 42 59 20 6d 61 74 63 68 69 6e 67  RDER BY matching
15660 20 72 75 6c 65 0a 72 65 71 75 69 72 65 73 20 74   rule.requires t
15670 68 61 74 20 74 68 65 20 65 78 70 72 65 73 73 69  hat the expressi
15680 6f 6e 20 62 65 20 69 64 65 6e 74 69 63 61 6c 20  on be identical 
15690 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f  to one of the co
156a0 6c 75 6d 6e 73 20 69 6e 0a 74 68 65 20 72 65 73  lumns in.the res
156b0 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 74 68  ult set.  The th
156c0 72 65 65 20 72 75 6c 65 73 20 61 72 65 20 66 69  ree rules are fi
156d0 72 73 74 20 61 70 70 6c 69 65 64 20 74 6f 20 74  rst applied to t
156e0 68 65 20 6c 65 66 74 2d 6d 6f 73 74 0a 53 45 4c  he left-most.SEL
156f0 45 43 54 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f  ECT in the compo
15700 75 6e 64 2e 20 20 49 66 20 61 20 6d 61 74 63 68  und.  If a match
15710 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 73   is found, the s
15720 65 61 72 63 68 20 73 74 6f 70 73 2e 20 20 4f 74  earch stops.  Ot
15730 68 65 72 77 69 73 65 2c 0a 74 68 65 20 6e 65 78  herwise,.the nex
15740 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20  t SELECT to the 
15750 72 69 67 68 74 20 69 73 20 74 72 69 65 64 2e 20  right is tried. 
15760 20 54 68 69 73 20 63 6f 6e 74 69 6e 75 65 73 20   This continues 
15770 75 6e 74 69 6c 20 61 20 6d 61 74 63 68 0a 69 73  until a match.is
15780 20 66 6f 75 6e 64 2e 20 20 45 61 63 68 20 74 65   found.  Each te
15790 72 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20  rm of the ORDER 
157a0 42 59 20 63 6c 61 75 73 65 20 69 73 20 70 72 6f  BY clause is pro
157b0 63 65 73 73 65 64 20 73 65 70 61 72 61 74 65 6c  cessed separatel
157c0 79 20 0a 61 6e 64 20 6d 61 79 20 63 6f 6d 65 20  y .and may come 
157d0 66 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 20 53  from different S
157e0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
157f0 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64   in the compound
15800 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49  .</p>..<p>The LI
15810 4d 49 54 20 63 6c 61 75 73 65 20 70 6c 61 63 65  MIT clause place
15820 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64  s an upper bound
15830 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
15840 66 20 72 6f 77 73 0a 72 65 74 75 72 6e 65 64 20  f rows.returned 
15850 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20  in the result.  
15860 41 20 6e 65 67 61 74 69 76 65 20 4c 49 4d 49 54  A negative LIMIT
15870 20 69 6e 64 69 63 61 74 65 73 20 6e 6f 20 75 70   indicates no up
15880 70 65 72 20 62 6f 75 6e 64 2e 0a 54 68 65 20 6f  per bound..The o
15890 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 66  ptional OFFSET f
158a0 6f 6c 6c 6f 77 69 6e 67 20 4c 49 4d 49 54 20 73  ollowing LIMIT s
158b0 70 65 63 69 66 69 65 73 20 68 6f 77 20 6d 61 6e  pecifies how man
158c0 79 0a 72 6f 77 73 20 74 6f 20 73 6b 69 70 20 61  y.rows to skip a
158d0 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
158e0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  of the result se
158f0 74 2e 0a 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  t..In a compound
15900 20 71 75 65 72 79 2c 20 74 68 65 20 4c 49 4d 49   query, the LIMI
15910 54 20 63 6c 61 75 73 65 20 6d 61 79 20 6f 6e 6c  T clause may onl
15920 79 20 61 70 70 65 61 72 20 6f 6e 20 74 68 65 0a  y appear on the.
15930 66 69 6e 61 6c 20 53 45 4c 45 43 54 20 73 74 61  final SELECT sta
15940 74 65 6d 65 6e 74 2e 0a 54 68 65 20 6c 69 6d 69  tement..The limi
15950 74 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20  t is applied to 
15960 74 68 65 20 65 6e 74 69 72 65 20 71 75 65 72 79  the entire query
15970 20 6e 6f 74 0a 74 6f 20 74 68 65 20 69 6e 64 69   not.to the indi
15980 76 69 64 75 61 6c 20 53 45 4c 45 43 54 20 73 74  vidual SELECT st
15990 61 74 65 6d 65 6e 74 20 74 6f 20 77 68 69 63 68  atement to which
159a0 20 69 74 20 69 73 20 61 74 74 61 63 68 65 64 2e   it is attached.
159b0 0a 4e 6f 74 65 20 74 68 61 74 20 69 66 20 74 68  .Note that if th
159c0 65 20 4f 46 46 53 45 54 20 6b 65 79 77 6f 72 64  e OFFSET keyword
159d0 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
159e0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
159f0 65 6e 20 74 68 65 0a 6c 69 6d 69 74 20 69 73 20  en the.limit is 
15a00 74 68 65 20 66 69 72 73 74 20 6e 75 6d 62 65 72  the first number
15a10 20 61 6e 64 20 74 68 65 20 6f 66 66 73 65 74 20   and the offset 
15a20 69 73 20 74 68 65 20 73 65 63 6f 6e 64 20 6e 75  is the second nu
15a30 6d 62 65 72 2e 20 20 49 66 20 61 0a 63 6f 6d 6d  mber.  If a.comm
15a40 61 20 69 73 20 75 73 65 64 20 69 6e 73 74 65 61  a is used instea
15a50 64 20 6f 66 20 74 68 65 20 4f 46 46 53 45 54 20  d of the OFFSET 
15a60 6b 65 79 77 6f 72 64 2c 20 74 68 65 6e 20 74 68  keyword, then th
15a70 65 20 6f 66 66 73 65 74 20 69 73 20 74 68 65 0a  e offset is the.
15a80 66 69 72 73 74 20 6e 75 6d 62 65 72 20 61 6e 64  first number and
15a90 20 74 68 65 20 6c 69 6d 69 74 20 69 73 20 74 68   the limit is th
15aa0 65 20 73 65 63 6f 6e 64 20 6e 75 6d 62 65 72 2e  e second number.
15ab0 20 20 54 68 69 73 20 73 65 65 6d 69 6e 67 0a 63    This seeming.c
15ac0 6f 6e 74 72 61 64 69 74 69 6f 6e 20 69 73 20 69  ontradition is i
15ad0 6e 74 65 6e 74 69 6f 6e 61 6c 20 2d 20 69 74 20  ntentional - it 
15ae0 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74  maximizes compat
15af0 69 62 69 6c 69 74 79 20 77 69 74 68 20 6c 65 67  ibility with leg
15b00 61 63 79 0a 53 51 4c 20 64 61 74 61 62 61 73 65  acy.SQL database
15b10 20 73 79 73 74 65 6d 73 2e 0a 3c 2f 70 3e 0a 0a   systems..</p>..
15b20 3c 70 3e 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45  <p>A compound SE
15b30 4c 45 43 54 20 69 73 20 66 6f 72 6d 65 64 20 66  LECT is formed f
15b40 72 6f 6d 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  rom two or more 
15b50 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 73 20 63  simple SELECTs c
15b60 6f 6e 6e 65 63 74 65 64 0a 62 79 20 6f 6e 65 20  onnected.by one 
15b70 6f 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 73  of the operators
15b80 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c   UNION, UNION AL
15b90 4c 2c 20 49 4e 54 45 52 53 45 43 54 2c 20 6f 72  L, INTERSECT, or
15ba0 20 45 58 43 45 50 54 2e 20 20 49 6e 0a 61 20 63   EXCEPT.  In.a c
15bb0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20  ompound SELECT, 
15bc0 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74 75  all the constitu
15bd0 65 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73 74  ent SELECTs must
15be0 20 73 70 65 63 69 66 79 20 74 68 65 0a 73 61 6d   specify the.sam
15bf0 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75  e number of resu
15c00 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65  lt columns.  The
15c10 72 65 20 6d 61 79 20 62 65 20 6f 6e 6c 79 20 61  re may be only a
15c20 20 73 69 6e 67 6c 65 20 4f 52 44 45 52 20 42 59   single ORDER BY
15c30 0a 63 6c 61 75 73 65 20 61 74 20 74 68 65 20 65  .clause at the e
15c40 6e 64 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75  nd of the compou
15c50 6e 64 20 53 45 4c 45 43 54 2e 20 20 54 68 65 20  nd SELECT.  The 
15c60 55 4e 49 4f 4e 20 61 6e 64 20 55 4e 49 4f 4e 20  UNION and UNION 
15c70 41 4c 4c 0a 6f 70 65 72 61 74 6f 72 73 20 63 6f  ALL.operators co
15c80 6d 62 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  mbine the result
15c90 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 73  s of the SELECTs
15ca0 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 61 6e   to the right an
15cb0 64 20 6c 65 66 74 20 69 6e 74 6f 0a 61 20 73 69  d left into.a si
15cc0 6e 67 6c 65 20 62 69 67 20 74 61 62 6c 65 2e 20  ngle big table. 
15cd0 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
15ce0 69 73 20 74 68 61 74 20 69 6e 20 55 4e 49 4f 4e  is that in UNION
15cf0 20 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77 73   all result rows
15d00 0a 61 72 65 20 64 69 73 74 69 6e 63 74 20 77 68  .are distinct wh
15d10 65 72 65 20 69 6e 20 55 4e 49 4f 4e 20 41 4c 4c  ere in UNION ALL
15d20 20 74 68 65 72 65 20 6d 61 79 20 62 65 20 64 75   there may be du
15d30 70 6c 69 63 61 74 65 73 2e 0a 54 68 65 20 49 4e  plicates..The IN
15d40 54 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72  TERSECT operator
15d50 20 74 61 6b 65 73 20 74 68 65 20 69 6e 74 65 72   takes the inter
15d60 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72  section of the r
15d70 65 73 75 6c 74 73 20 6f 66 20 74 68 65 0a 6c 65  esults of the.le
15d80 66 74 20 61 6e 64 20 72 69 67 68 74 20 53 45 4c  ft and right SEL
15d90 45 43 54 73 2e 20 20 45 58 43 45 50 54 20 74 61  ECTs.  EXCEPT ta
15da0 6b 65 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f  kes the result o
15db0 66 20 6c 65 66 74 20 53 45 4c 45 43 54 20 61 66  f left SELECT af
15dc0 74 65 72 0a 72 65 6d 6f 76 69 6e 67 20 74 68 65  ter.removing the
15dd0 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
15de0 72 69 67 68 74 20 53 45 4c 45 43 54 2e 20 20 57  right SELECT.  W
15df0 68 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f 72  hen three or mor
15e00 65 20 53 45 4c 45 43 54 73 0a 61 72 65 20 63 6f  e SELECTs.are co
15e10 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63  nnected into a c
15e20 6f 6d 70 6f 75 6e 64 2c 20 74 68 65 79 20 67 72  ompound, they gr
15e30 6f 75 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  oup from left to
15e40 20 72 69 67 68 74 2e 3c 2f 70 3e 0a 0a 0a 3c 74   right.</p>...<t
15e50 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
15e60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15e70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15e90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15ea0 23 23 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54  ##.Section UPDAT
15eb0 45 20 75 70 64 61 74 65 20 7b 55 50 44 41 54 45  E update {UPDATE
15ec0 20 55 50 44 41 54 45 73 7d 0a 0a 42 75 62 62 6c   UPDATEs}..Bubbl
15ed0 65 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d  eDiagram update-
15ee0 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61  stmt 1.BubbleDia
15ef0 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74  gram qualified-t
15f00 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e  able-name.</tcl>
15f10 0a 0a 3c 70 3e 54 68 65 20 55 50 44 41 54 45 20  ..<p>The UPDATE 
15f20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
15f30 64 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20  d to change the 
15f40 76 61 6c 75 65 20 6f 66 20 63 6f 6c 75 6d 6e 73  value of columns
15f50 20 69 6e 20 0a 73 65 6c 65 63 74 65 64 20 72 6f   in .selected ro
15f60 77 73 20 6f 66 20 61 20 74 61 62 6c 65 2e 20 20  ws of a table.  
15f70 45 61 63 68 20 61 73 73 69 67 6e 6d 65 6e 74 20  Each assignment 
15f80 69 6e 20 61 6e 20 55 50 44 41 54 45 20 73 70 65  in an UPDATE spe
15f90 63 69 66 69 65 73 0a 61 20 63 6f 6c 75 6d 6e 20  cifies.a column 
15fa0 6e 61 6d 65 20 74 6f 20 74 68 65 20 6c 65 66 74  name to the left
15fb0 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 73   of the equals s
15fc0 69 67 6e 20 61 6e 64 20 61 6e 20 61 72 62 69 74  ign and an arbit
15fd0 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e 0a  rary expression.
15fe0 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20 20 54  to the right.  T
15ff0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6d  he expressions m
16000 61 79 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ay use the value
16010 73 20 6f 66 20 6f 74 68 65 72 20 63 6f 6c 75 6d  s of other colum
16020 6e 73 2e 0a 41 6c 6c 20 65 78 70 72 65 73 73 69  ns..All expressi
16030 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65  ons are evaluate
16040 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73  d before any ass
16050 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64  ignments are mad
16060 65 2e 0a 41 20 57 48 45 52 45 20 63 6c 61 75 73  e..A WHERE claus
16070 65 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  e can be used to
16080 20 72 65 73 74 72 69 63 74 20 77 68 69 63 68 20   restrict which 
16090 72 6f 77 73 20 61 72 65 20 75 70 64 61 74 65 64  rows are updated
160a0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70  .</p>..<p>The op
160b0 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d  tional conflict-
160c0 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68  clause allows th
160d0 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  e specification 
160e0 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  of an alternativ
160f0 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e  e.constraint con
16100 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
16110 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73   algorithm to us
16120 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e  e during this on
16130 65 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74  e command..See t
16140 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65  he section title
16150 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  d.[ON CONFLICT] 
16160 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
16170 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a  nformation.</p>.
16180 0a 3c 70 3e 49 66 20 53 51 4c 69 74 65 20 69 73  .<p>If SQLite is
16190 20 62 75 69 6c 74 20 77 69 74 68 20 74 68 65 20   built with the 
161a0 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  [SQLITE_ENABLE_U
161b0 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
161c0 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  IT].compile-time
161d0 20 6f 70 74 69 6f 6e 20 74 68 65 6e 20 74 68 65   option then the
161e0 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 55   syntax of the U
161f0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
16200 69 73 20 65 78 74 65 6e 64 65 64 0a 77 69 74 68  is extended.with
16210 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20   optional ORDER 
16220 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61  BY and LIMIT cla
16230 75 73 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  uses as follows:
16240 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
16250 65 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d  eDiagram update-
16260 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63  stmt-limited</tc
16270 6c 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f  l>..<p>The optio
16280 6e 61 6c 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  nal LIMIT clause
16290 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
162a0 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72  limit the number
162b0 20 6f 66 0a 72 6f 77 73 20 6d 6f 64 69 66 65 64   of.rows modifed
162c0 2c 20 61 6e 64 20 74 68 65 72 65 62 79 20 6c 69  , and thereby li
162d0 6d 69 74 20 74 68 65 20 73 69 7a 65 20 6f 66 20  mit the size of 
162e0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
162f0 0a 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c  .The ORDER BY cl
16300 61 75 73 65 20 69 73 20 75 73 65 64 20 6f 6e 6c  ause is used onl
16310 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  y to determine w
16320 68 69 63 68 20 72 6f 77 73 20 66 61 6c 6c 0a 77  hich rows fall.w
16330 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e  ithin the LIMIT.
16340 20 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77    The order in w
16350 68 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d 6f  hich rows are mo
16360 64 69 66 69 65 64 20 69 73 20 61 72 62 69 74 72  dified is arbitr
16370 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 64  ary.and is not d
16380 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
16390 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
163a0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
163b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
163c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
163d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
163e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
163f0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
16400 69 6f 6e 20 56 41 43 55 55 4d 20 76 61 63 75 75  ion VACUUM vacuu
16410 6d 20 56 41 43 55 55 4d 0a 0a 42 75 62 62 6c 65  m VACUUM..Bubble
16420 44 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d 73  Diagram vacuum-s
16430 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
16440 3e 57 68 65 6e 20 61 6e 20 6f 62 6a 65 63 74 20  >When an object 
16450 28 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 6f  (table, index, o
16460 72 20 74 72 69 67 67 65 72 29 20 69 73 20 64 72  r trigger) is dr
16470 6f 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 0a  opped from the .
16480 64 61 74 61 62 61 73 65 2c 20 69 74 20 6c 65 61  database, it lea
16490 76 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74 79  ves behind empty
164a0 20 73 70 61 63 65 2e 20 20 54 68 69 73 20 6d 61   space.  This ma
164b0 6b 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  kes the database
164c0 20 0a 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68   .file larger th
164d0 61 6e 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62  an it needs to b
164e0 65 2c 20 62 75 74 20 63 61 6e 20 73 70 65 65 64  e, but can speed
164f0 20 75 70 20 69 6e 73 65 72 74 73 2e 20 20 49 6e   up inserts.  In
16500 20 74 69 6d 65 20 0a 69 6e 73 65 72 74 73 20 61   time .inserts a
16510 6e 64 20 64 65 6c 65 74 65 73 20 63 61 6e 20 6c  nd deletes can l
16520 65 61 76 65 20 74 68 65 20 64 61 74 61 62 61 73  eave the databas
16530 65 20 66 69 6c 65 20 73 74 72 75 63 74 75 72 65  e file structure
16540 20 66 72 61 67 6d 65 6e 74 65 64 2c 20 0a 77 68   fragmented, .wh
16550 69 63 68 20 73 6c 6f 77 73 20 64 6f 77 6e 20 64  ich slows down d
16560 69 73 6b 20 61 63 63 65 73 73 20 74 6f 20 74 68  isk access to th
16570 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74 65  e database conte
16580 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  nts.</p>..<p>The
16590 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
165a0 63 6c 65 61 6e 73 0a 74 68 65 20 6d 61 69 6e 20  cleans.the main 
165b0 64 61 74 61 62 61 73 65 20 62 79 20 63 6f 70 79  database by copy
165c0 69 6e 67 20 69 74 73 20 63 6f 6e 74 65 6e 74 73  ing its contents
165d0 20 74 6f 20 61 20 74 65 6d 70 6f 72 61 72 79 20   to a temporary 
165e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
165f0 64 20 0a 72 65 6c 6f 61 64 69 6e 67 20 74 68 65  d .reloading the
16600 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61   original databa
16610 73 65 20 66 69 6c 65 20 66 72 6f 6d 20 74 68 65  se file from the
16620 20 63 6f 70 79 2e 20 20 54 68 69 73 20 65 6c 69   copy.  This eli
16630 6d 69 6e 61 74 65 73 20 0a 66 72 65 65 20 70 61  minates .free pa
16640 67 65 73 2c 20 20 61 6c 69 67 6e 73 20 74 61 62  ges,  aligns tab
16650 6c 65 20 64 61 74 61 20 74 6f 20 62 65 20 63 6f  le data to be co
16660 6e 74 69 67 75 6f 75 73 2c 20 61 6e 64 20 6f 74  ntiguous, and ot
16670 68 65 72 77 69 73 65 20 63 6c 65 61 6e 73 20 0a  herwise cleans .
16680 75 70 20 74 68 65 20 64 61 74 61 62 61 73 65 20  up the database 
16690 66 69 6c 65 20 73 74 72 75 63 74 75 72 65 2e 3c  file structure.<
166a0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 56 41 43 55  /p>..<p>The VACU
166b0 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63  UM command may c
166c0 68 61 6e 67 65 20 74 68 65 20 0a 5b 52 4f 57 49  hange the .[ROWI
166d0 44 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66 20 65  D | ROWIDs] of e
166e0 6e 74 72 69 65 73 20 69 6e 20 74 61 62 6c 65 73  ntries in tables
166f0 20 74 68 61 74 20 64 6f 0a 6e 6f 74 20 68 61 76   that do.not hav
16700 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49  e an explicit [I
16710 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
16720 45 59 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 56 41 43  EY].</p>..<p>VAC
16730 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  UUM only works o
16740 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
16750 61 73 65 2e 0a 49 74 20 69 73 20 6e 6f 74 20 70  ase..It is not p
16760 6f 73 73 69 62 6c 65 20 74 6f 20 56 41 43 55 55  ossible to VACUU
16770 4d 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  M an attached da
16780 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e  tabase file.</p>
16790 0a 0a 3c 70 3e 54 68 65 20 56 41 43 55 55 4d 20  ..<p>The VACUUM 
167a0 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69  command will fai
167b0 6c 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  l if there is an
167c0 20 61 63 74 69 76 65 20 74 72 61 6e 73 61 63 74   active transact
167d0 69 6f 6e 2e 0a 54 68 65 20 56 41 43 55 55 4d 20  ion..The VACUUM 
167e0 63 6f 6d 6d 61 6e 64 20 69 73 20 61 20 6e 6f 2d  command is a no-
167f0 6f 70 20 66 6f 72 20 69 6e 2d 6d 65 6d 6f 72 79  op for in-memory
16800 20 64 61 74 61 62 61 73 65 73 2e 3c 2f 70 3e 0a   databases.</p>.
16810 0a 3c 70 3e 41 73 20 6f 66 20 53 51 4c 69 74 65  .<p>As of SQLite
16820 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61 6e   version 3.1, an
16830 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20   alternative to 
16840 75 73 69 6e 67 20 74 68 65 20 56 41 43 55 55 4d  using the VACUUM
16850 20 63 6f 6d 6d 61 6e 64 0a 69 73 20 61 75 74 6f   command.is auto
16860 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e  -vacuum mode, en
16870 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 20  abled using the 
16880 0a 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70  .[auto_vacuum] p
16890 72 61 67 6d 61 2e 20 20 57 68 65 6e 20 5b 61 75  ragma.  When [au
168a0 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73 20 65 6e  to_vacuum] is en
168b0 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61  abled for a data
168c0 62 61 73 65 2c 20 0a 6c 61 72 67 65 20 64 65 6c  base, .large del
168d0 65 74 65 73 20 63 61 75 73 65 0a 74 68 65 20 73  etes cause.the s
168e0 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ize of the datab
168f0 61 73 65 20 66 69 6c 65 20 74 6f 20 73 68 72 69  ase file to shri
16900 6e 6b 2e 20 20 48 6f 77 65 76 65 72 2c 20 5b 61  nk.  However, [a
16910 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 61 6c 73 6f  uto_vacuum].also
16920 20 63 61 75 73 65 73 20 65 78 63 65 73 73 20 66   causes excess f
16930 72 61 67 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  ragmentation of 
16940 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
16950 65 2e 20 20 41 6e 64 20 5b 61 75 74 6f 5f 76 61  e.  And [auto_va
16960 63 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20 63  cuum].does not c
16970 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c 6c 79  ompact partially
16980 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 6f 66   filled pages of
16990 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 73   the database as
169a0 20 56 41 43 55 55 4d 0a 64 6f 65 73 2e 0a 3c 2f   VACUUM.does..</
169b0 70 3e 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  p>.<tcl>.#######
169c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
169d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
169e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
169f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16a00 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
16a10 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 69 6e 64  {INDEXED BY} ind
16a20 65 78 65 64 62 79 20 7b 7b 49 4e 44 45 58 45 44  exedby {{INDEXED
16a30 20 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45 58 45   BY} {NOT INDEXE
16a40 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e 54  D}}..</tcl>.<p>T
16a50 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
16a60 72 61 73 65 20 69 73 20 61 20 53 51 4c 20 65 78  rase is a SQL ex
16a70 74 65 6e 73 69 6f 6e 20 66 6f 75 6e 64 20 6f 6e  tension found on
16a80 6c 79 20 69 6e 20 53 51 4c 69 74 65 20 77 68 69  ly in SQLite whi
16a90 63 68 20 63 61 6e 0a 62 65 20 75 73 65 64 20 74  ch can.be used t
16aa0 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68  o verify that th
16ab0 65 20 63 6f 72 72 65 63 74 20 69 6e 64 69 63 65  e correct indice
16ac0 73 20 61 72 65 20 62 65 69 6e 67 20 75 73 65 64  s are being used
16ad0 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 0a   on a [DELETE],.
16ae0 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50  [SELECT], or [UP
16af0 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  DATE] statement.
16b00 0a 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  .The INDEXED BY 
16b10 70 68 72 61 73 65 20 61 6c 77 61 79 73 20 66 6f  phrase always fo
16b20 6c 6c 6f 77 73 20 74 68 65 20 6e 61 6d 65 20 6f  llows the name o
16b30 66 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 53  f a table that S
16b40 51 4c 69 74 65 20 77 69 6c 6c 0a 62 65 20 72 65  QLite will.be re
16b50 61 64 69 6e 67 2e 20 20 54 68 65 20 49 4e 44 45  ading.  The INDE
16b60 58 45 44 20 42 59 20 70 68 72 61 73 65 20 63 61  XED BY phrase ca
16b70 6e 20 62 65 20 73 65 65 6e 20 69 6e 20 74 68 65  n be seen in the
16b80 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61   following synta
16b90 78 0a 64 69 61 67 72 61 6d 73 3a 3c 2f 70 3e 0a  x.diagrams:</p>.
16ba0 0a 3c 74 63 6c 3e 0a 42 75 62 62 6c 65 44 69 61  .<tcl>.BubbleDia
16bb0 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74  gram qualified-t
16bc0 61 62 6c 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65  able-name.Bubble
16bd0 44 69 61 67 72 61 6d 20 73 69 6e 67 6c 65 2d 73  Diagram single-s
16be0 6f 75 72 63 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  ource.</tcl>..<p
16bf0 3e 54 68 65 20 22 49 4e 44 45 58 45 44 20 42 59  >The "INDEXED BY
16c00 20 69 6e 64 65 78 2d 6e 61 6d 65 22 20 63 6c 61   index-name" cla
16c10 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68  use specifies th
16c20 61 74 20 74 68 65 20 6e 61 6d 65 64 20 69 6e 64  at the named ind
16c30 65 78 0a 6d 75 73 74 20 62 65 20 75 73 65 64 20  ex.must be used 
16c40 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b  in order to look
16c50 20 75 70 20 76 61 6c 75 65 73 20 6f 6e 20 74 68   up values on th
16c60 65 20 70 72 65 63 65 65 64 69 6e 67 20 74 61 62  e preceeding tab
16c70 6c 65 2e 0a 49 66 20 69 6e 64 65 78 2d 6e 61 6d  le..If index-nam
16c80 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
16c90 20 6f 72 20 63 61 6e 6e 6f 74 20 62 65 20 75 73   or cannot be us
16ca0 65 64 20 66 6f 72 20 74 68 65 20 71 75 65 72 79  ed for the query
16cb0 2c 20 74 68 65 6e 0a 74 68 65 20 70 72 65 70 61  , then.the prepa
16cc0 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 51  ration of the SQ
16cd0 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 61 69 6c  L statement fail
16ce0 73 2e 0a 54 68 65 20 22 4e 4f 54 20 49 4e 44 45  s..The "NOT INDE
16cf0 58 45 44 22 20 63 6c 61 75 73 65 20 73 70 65 63  XED" clause spec
16d00 69 66 69 65 73 20 74 68 61 74 20 6e 6f 20 69 6e  ifies that no in
16d10 64 65 78 20 73 68 61 6c 6c 20 62 65 20 75 73 65  dex shall be use
16d20 64 20 77 68 65 6e 0a 61 63 63 65 73 73 69 6e 67  d when.accessing
16d30 20 74 68 65 20 70 72 65 63 65 65 64 69 6e 67 20   the preceeding 
16d40 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67  table, including
16d50 20 69 6d 70 6c 69 65 64 20 69 6e 64 69 63 65 73   implied indices
16d60 20 63 72 65 61 74 65 20 62 79 0a 55 4e 49 51 55   create by.UNIQU
16d70 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45  E and PRIMARY KE
16d80 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20  Y constraints.  
16d90 48 6f 77 65 76 65 72 2c 20 74 68 65 20 49 4e 54  However, the INT
16da0 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
16db0 0a 63 61 6e 20 73 74 69 6c 6c 20 62 65 20 75 73  .can still be us
16dc0 65 64 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e  ed to look up en
16dd0 74 72 69 65 73 20 65 76 65 6e 20 77 68 65 6e 20  tries even when 
16de0 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 69 73  "NOT INDEXED" is
16df0 20 73 70 65 63 69 66 69 65 64 2e 3c 2f 70 3e 0a   specified.</p>.
16e00 0a 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74  .<p>Some SQL dat
16e10 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72  abase engines pr
16e20 6f 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61  ovide non-standa
16e30 72 64 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e  rd "hint" mechan
16e40 69 73 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62  isms which.can b
16e50 65 20 75 73 65 64 20 74 6f 20 67 69 76 65 20 74  e used to give t
16e60 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
16e70 65 72 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77  er clues about w
16e80 68 61 74 20 69 6e 64 69 63 65 73 20 69 74 20 73  hat indices it s
16e90 68 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20  hould.use for a 
16ea0 70 61 72 74 69 63 75 6c 61 72 20 73 74 61 74 65  particular state
16eb0 6d 65 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58  ment.  The INDEX
16ec0 20 42 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51   BY clause of SQ
16ed0 4c 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74  Lite is .<em>not
16ee0 3c 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20  </em> a hinting 
16ef0 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74  mechanism and it
16f00 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75   should not be u
16f10 73 65 64 20 61 73 20 73 75 63 68 2e 0a 54 68 65  sed as such..The
16f20 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
16f30 73 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76 65  se does not give
16f40 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 68   the optimizer h
16f50 69 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63 68  ints about which
16f60 20 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20 69   index.to use; i
16f70 74 20 67 69 76 65 73 20 74 68 65 20 6f 70 74 69  t gives the opti
16f80 6d 69 7a 65 72 20 61 20 72 65 71 75 69 72 65 6d  mizer a requirem
16f90 65 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e 64  ent of which ind
16fa0 65 78 20 74 6f 20 75 73 65 2e 0a 49 66 20 74 68  ex to use..If th
16fb0 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
16fc0 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 75  r is unable to u
16fd0 73 65 20 74 68 65 20 69 6e 64 65 78 20 73 70 65  se the index spe
16fe0 63 69 66 69 65 64 20 62 79 20 74 68 65 0a 49 4e  cified by the.IN
16ff0 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DEX BY clause, t
17000 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 77 69  hen the query wi
17010 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20  ll fail with an 
17020 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  error.</p>..<p>T
17030 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
17040 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c  ause is <em>not<
17050 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f  /em> intended fo
17060 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a  r use in tuning.
17070 74 68 65 20 70 72 65 66 6f 72 6d 61 6e 63 65 20  the preformance 
17080 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54 68 65  of a query.  The
17090 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 49   intent of the I
170a0 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
170b0 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61 20 72   is.to raise a r
170c0 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20 69 66  un-time error if
170d0 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65   a schema change
170e0 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70 70 69  , such as droppi
170f0 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67 20 61  ng or.creating a
17100 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65 73 20  n index, causes 
17110 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 20 66  the query plan f
17120 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73 69 74  or a time-sensit
17130 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63 68 61  ive query.to cha
17140 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45 58 45  nge.  The INDEXE
17150 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 64  D BY clause is d
17160 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c 70 20  esigned to help 
17170 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72 61 62  detect.undesirab
17180 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20 63 68  le query plan ch
17190 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72 65 67  anges during reg
171a0 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e  ression testing.
171b0 0a 44 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20  .Developers are 
171c0 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d  admonished to om
171d0 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e  it all use of IN
171e0 44 45 58 45 44 20 42 59 20 64 75 72 69 6e 67 0a  DEXED BY during.
171f0 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 73 69  application desi
17200 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  gn, implementati
17210 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e 64  on, testing, and
17220 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44   tuning.  If.IND
17230 45 58 45 44 20 42 59 20 69 73 20 74 6f 20 62 65  EXED BY is to be
17240 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20 69 74   used at all, it
17250 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73 65 72   should be inser
17260 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79 0a  ted at the very.
17270 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76 65 6c  end of the devel
17280 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73 20 77  opment process w
17290 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77  hen "locking dow
172a0 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e  n" a design.</p>
172b0 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
172c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
172d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
172e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
172f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17300 23 23 23 23 23 0a 23 20 41 20 6c 69 73 74 20 6f  #####.# A list o
17310 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61  f keywords.  A a
17320 73 74 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61  sterisk occurs a
17330 66 74 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64  fter the keyword
17340 20 69 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74   if it is on.# t
17350 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74  he fallback list
17360 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f  ..#.set keyword_
17370 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20  list [lsort {.  
17380 20 41 42 4f 52 54 2a 0a 20 20 20 41 44 44 0a 20   ABORT*.   ADD. 
17390 20 20 41 46 54 45 52 2a 0a 20 20 20 41 4c 4c 0a    AFTER*.   ALL.
173a0 20 20 20 41 4c 54 45 52 0a 20 20 20 41 4e 41 4c     ALTER.   ANAL
173b0 59 5a 45 2a 0a 20 20 20 41 4e 44 0a 20 20 20 41  YZE*.   AND.   A
173c0 53 0a 20 20 20 41 53 43 2a 0a 20 20 20 41 54 54  S.   ASC*.   ATT
173d0 41 43 48 2a 0a 20 20 20 41 55 54 4f 49 4e 43 52  ACH*.   AUTOINCR
173e0 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45 2a  EMENT.   BEFORE*
173f0 0a 20 20 20 42 45 47 49 4e 2a 0a 20 20 20 42 45  .   BEGIN*.   BE
17400 54 57 45 45 4e 0a 20 20 20 42 59 2a 0a 20 20 20  TWEEN.   BY*.   
17410 43 41 53 43 41 44 45 2a 0a 20 20 20 43 41 53 45  CASCADE*.   CASE
17420 0a 20 20 20 43 41 53 54 2a 0a 20 20 20 43 48 45  .   CAST*.   CHE
17430 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20  CK.   COLLATE.  
17440 20 43 4f 4c 55 4d 4e 2a 0a 20 20 20 43 4f 4d 4d   COLUMN*.   COMM
17450 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54 2a 0a  IT.   CONFLICT*.
17460 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20     CONSTRAINT.  
17470 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f 53 53   CREATE.   CROSS
17480 0a 20 20 20 43 55 52 52 45 4e 54 5f 44 41 54 45  .   CURRENT_DATE
17490 2a 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d  *.   CURRENT_TIM
174a0 45 2a 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49  E*.   CURRENT_TI
174b0 4d 45 53 54 41 4d 50 2a 0a 20 20 20 44 41 54 41  MESTAMP*.   DATA
174c0 42 41 53 45 2a 0a 20 20 20 44 45 46 41 55 4c 54  BASE*.   DEFAULT
174d0 0a 20 20 20 44 45 46 45 52 52 45 44 2a 0a 20 20  .   DEFERRED*.  
174e0 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 20 44   DEFERRABLE.   D
174f0 45 4c 45 54 45 0a 20 20 20 44 45 53 43 2a 0a 20  ELETE.   DESC*. 
17500 20 20 44 45 54 41 43 48 2a 0a 20 20 20 44 49 53    DETACH*.   DIS
17510 54 49 4e 43 54 0a 20 20 20 44 52 4f 50 0a 20 20  TINCT.   DROP.  
17520 20 45 4e 44 2a 0a 20 20 20 45 41 43 48 2a 0a 20   END*.   EACH*. 
17530 20 20 45 4c 53 45 0a 20 20 20 45 53 43 41 50 45    ELSE.   ESCAPE
17540 0a 20 20 20 45 58 43 45 50 54 0a 20 20 20 45 58  .   EXCEPT.   EX
17550 43 4c 55 53 49 56 45 2a 0a 20 20 20 45 58 49 53  CLUSIVE*.   EXIS
17560 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 2a 0a 20  TS.   EXPLAIN*. 
17570 20 20 46 41 49 4c 2a 0a 20 20 20 46 4f 52 2a 0a    FAIL*.   FOR*.
17580 20 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52     FOREIGN.   FR
17590 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c  OM.   FULL.   GL
175a0 4f 42 2a 0a 20 20 20 47 52 4f 55 50 0a 20 20 20  OB*.   GROUP.   
175b0 48 41 56 49 4e 47 0a 20 20 20 49 46 2a 0a 20 20  HAVING.   IF*.  
175c0 20 49 47 4e 4f 52 45 2a 0a 20 20 20 49 4d 4d 45   IGNORE*.   IMME
175d0 44 49 41 54 45 2a 0a 20 20 20 49 4e 0a 20 20 20  DIATE*.   IN.   
175e0 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45 44  INDEX.   INDEXED
175f0 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 2a 0a 20  .   INITIALLY*. 
17600 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52    INNER.   INSER
17610 54 0a 20 20 20 49 4e 53 54 45 41 44 2a 0a 20 20  T.   INSTEAD*.  
17620 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e   INTERSECT.   IN
17630 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55  TO.   IS.   ISNU
17640 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45  LL.   JOIN.   KE
17650 59 2a 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49  Y*.   LEFT.   LI
17660 4b 45 2a 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20  KE*.   LIMIT.   
17670 4d 41 54 43 48 2a 0a 20 20 20 4e 41 54 55 52 41  MATCH*.   NATURA
17680 4c 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e  L.   NOT.   NOTN
17690 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f  ULL.   NULL.   O
176a0 46 2a 0a 20 20 20 4f 46 46 53 45 54 2a 0a 20 20  F*.   OFFSET*.  
176b0 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44   ON.   OR.   ORD
176c0 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50  ER.   OUTER.   P
176d0 4c 41 4e 2a 0a 20 20 20 50 52 41 47 4d 41 2a 0a  LAN*.   PRAGMA*.
176e0 20 20 20 50 52 49 4d 41 52 59 0a 20 20 20 51 55     PRIMARY.   QU
176f0 45 52 59 2a 0a 20 20 20 52 41 49 53 45 2a 0a 20  ERY*.   RAISE*. 
17700 20 20 52 45 46 45 52 45 4e 43 45 53 0a 20 20 20    REFERENCES.   
17710 52 45 47 45 58 50 2a 0a 20 20 20 52 45 49 4e 44  REGEXP*.   REIND
17720 45 58 2a 0a 20 20 20 52 45 4c 45 41 53 45 2a 0a  EX*.   RELEASE*.
17730 20 20 20 52 45 4e 41 4d 45 2a 0a 20 20 20 52 45     RENAME*.   RE
17740 50 4c 41 43 45 2a 0a 20 20 20 52 45 53 54 52 49  PLACE*.   RESTRI
17750 43 54 2a 0a 20 20 20 52 49 47 48 54 0a 20 20 20  CT*.   RIGHT.   
17760 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57 2a  ROLLBACK.   ROW*
17770 0a 20 20 20 53 41 56 45 50 4f 49 4e 54 2a 0a 20  .   SAVEPOINT*. 
17780 20 20 53 45 4c 45 43 54 0a 20 20 20 53 45 54 0a    SELECT.   SET.
17790 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45 4d 50     TABLE.   TEMP
177a0 2a 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 2a 0a  *.   TEMPORARY*.
177b0 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20     THEN.   TO.  
177c0 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20   TRANSACTION.   
177d0 54 52 49 47 47 45 52 2a 0a 20 20 20 55 4e 49 4f  TRIGGER*.   UNIO
177e0 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20 20 20 55  N.   UNIQUE.   U
177f0 50 44 41 54 45 0a 20 20 20 55 53 49 4e 47 0a 20  PDATE.   USING. 
17800 20 20 56 41 43 55 55 4d 2a 0a 20 20 20 56 41 4c    VACUUM*.   VAL
17810 55 45 53 0a 20 20 20 56 49 45 57 2a 0a 20 20 20  UES.   VIEW*.   
17820 56 49 52 54 55 41 4c 2a 0a 20 20 20 57 48 45 4e  VIRTUAL*.   WHEN
17830 0a 20 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 68 64  .   WHERE.}]..hd
17840 5f 70 75 74 73 20 7b 3c 44 49 56 20 63 6c 61 73  _puts {<DIV clas
17850 73 3d 22 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e  s="pdf_section">
17860 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74  }.Section {SQLit
17870 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79 77  e Keywords} keyw
17880 6f 72 64 73 20 7b 7b 53 51 4c 20 6b 65 79 77 6f  ords {{SQL keywo
17890 72 64 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64  rd} {SQL keyword
178a0 73 7d 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44  s}}.hd_puts {</D
178b0 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  IV>}.</tcl>..<p>
178c0 54 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64  The SQL standard
178d0 20 73 70 65 63 69 66 69 65 73 20 61 20 68 75 67   specifies a hug
178e0 65 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79 77  e number of keyw
178f0 6f 72 64 73 20 77 68 69 63 68 20 6d 61 79 20 6e  ords which may n
17900 6f 74 0a 62 65 20 75 73 65 64 20 61 73 20 74 68  ot.be used as th
17910 65 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65  e names of table
17920 73 2c 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75  s, indices, colu
17930 6d 6e 73 2c 20 64 61 74 61 62 61 73 65 73 2c 20  mns, databases, 
17940 75 73 65 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e  user-defined.fun
17950 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f  ctions, collatio
17960 6e 73 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ns, virtual tabl
17970 65 20 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e  e modules, or an
17980 79 20 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f 62  y other named ob
17990 6a 65 63 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f  ject..The list o
179a0 66 20 6b 65 79 77 6f 72 64 73 20 69 73 20 73 6f  f keywords is so
179b0 20 6c 6f 6e 67 20 74 68 61 74 20 66 65 77 20 70   long that few p
179c0 65 6f 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62  eople can rememb
179d0 65 72 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72  er them all..For
179e0 20 6d 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c 20   most SQL code, 
179f0 79 6f 75 72 20 73 61 66 65 73 74 20 62 65 74 20  your safest bet 
17a00 69 73 20 74 6f 20 6e 65 76 65 72 20 75 73 65 20  is to never use 
17a10 61 6e 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67  any English lang
17a20 75 61 67 65 0a 77 6f 72 64 20 61 73 20 74 68 65  uage.word as the
17a30 20 6e 61 6d 65 20 6f 66 20 61 20 75 73 65 72 2d   name of a user-
17a40 64 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c  defined object.<
17a50 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77  /p>..<p>If you w
17a60 61 6e 74 20 74 6f 20 75 73 65 20 61 20 6b 65 79  ant to use a key
17a70 77 6f 72 64 20 61 73 20 61 20 6e 61 6d 65 2c 20  word as a name, 
17a80 79 6f 75 20 6e 65 65 64 20 74 6f 20 71 75 6f 74  you need to quot
17a90 65 20 69 74 2e 20 20 54 68 65 72 65 0a 61 72 65  e it.  There.are
17aa0 20 74 68 72 65 65 20 77 61 79 73 20 6f 66 20 71   three ways of q
17ab0 75 6f 74 69 6e 67 20 6b 65 79 77 6f 72 64 73 20  uoting keywords 
17ac0 69 6e 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a  in SQLite:</p>..
17ad0 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  <p>.<blockquote>
17ae0 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74  .<table>.<tr>.<t
17af0 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
17b00 62 3e 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c  b>'keyword'</b><
17b10 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
17b20 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41 20  0"></td>..<td>A 
17b30 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c  keyword in singl
17b40 65 20 71 75 6f 74 65 73 20 69 73 20 61 20 73 74  e quotes is a st
17b50 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74  ring literal.</t
17b60 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74  d></tr>..<tr>.<t
17b70 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
17b80 62 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c  b>"keyword"</b><
17b90 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c  /td><td></td>..<
17ba0 74 64 3e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20  td>A keyword in 
17bb0 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73  double-quotes is
17bc0 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 3c 2f   an identifier</
17bd0 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c  td></tr>..<tr>.<
17be0 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
17bf0 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64 26  <b>&#91;keyword&
17c00 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  #93;</b></td><td
17c10 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41 20 6b 65  ></td>..<td>A ke
17c20 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69  yword enclosed i
17c30 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74  n square bracket
17c40 73 20 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e  s is .        an
17c50 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68   identifier.  Th
17c60 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61  is is not standa
17c70 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75  rd SQL.  This qu
17c80 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a  oting mechanism.
17c90 20 20 20 20 20 20 20 20 69 73 20 75 73 65 64 20          is used 
17ca0 62 79 20 4d 53 20 41 63 63 65 73 73 20 61 6e 64  by MS Access and
17cb0 20 53 51 4c 20 53 65 72 76 65 72 20 61 6e 64 20   SQL Server and 
17cc0 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53  is included in S
17cd0 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20  QLite for.      
17ce0 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e    compatibility.
17cf0 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  </td></tr>..<tr>
17d00 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
17d10 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77 6f 72  "><b>&#96;keywor
17d20 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c  d&#96;</b></td><
17d30 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41 20  td></td>..<td>A 
17d40 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64  keyword enclosed
17d50 20 69 6e 20 67 72 61 76 65 20 61 63 63 65 6e 74   in grave accent
17d60 73 20 28 41 53 43 49 49 20 63 6f 64 65 20 39 36  s (ASCII code 96
17d70 29 20 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e  ) is .        an
17d80 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68   identifier.  Th
17d90 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61  is is not standa
17da0 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75  rd SQL.  This qu
17db0 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a  oting mechanism.
17dc0 20 20 20 20 20 20 20 20 69 73 20 75 73 65 64 20          is used 
17dd0 62 79 20 4d 79 53 51 4c 20 61 6e 64 20 69 73 20  by MySQL and is 
17de0 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69  included in SQLi
17df0 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63  te for.        c
17e00 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74  ompatibility.</t
17e10 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e  d></tr>.</table>
17e20 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  .</blockquote>.<
17e30 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69  /p>..<p>For resi
17e40 6c 69 65 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66  lience when conf
17e50 72 6f 6e 74 65 64 20 77 69 74 68 20 68 69 73 74  ronted with hist
17e60 6f 72 69 63 61 6c 20 53 51 4c 20 73 74 61 74 65  orical SQL state
17e70 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65 0a 77 69  ments, SQLite.wi
17e80 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e  ll sometimes ben
17e90 64 20 74 68 65 20 71 75 6f 74 69 6e 67 20 72 75  d the quoting ru
17ea0 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a  les above:</p>..
17eb0 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49 66 20 61  <ul>.<li><p>If a
17ec0 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67   keyword in sing
17ed0 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c  le.quotes (ex: <
17ee0 62 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c  b>'key'</b> or <
17ef0 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73  b>'glob'</b>) is
17f00 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65   used in a conte
17f10 78 74 20 77 68 65 72 65 0a 61 6e 20 69 64 65 6e  xt where.an iden
17f20 74 69 66 69 65 72 20 69 73 20 61 6c 6c 6f 77 65  tifier is allowe
17f30 64 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74  d but where a st
17f40 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20  ring literal is 
17f50 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65  not allowed, the
17f60 6e 0a 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75  n.the token is u
17f70 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20  nderstood to be 
17f80 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e  an identifier in
17f90 73 74 65 61 64 20 6f 66 20 61 20 73 74 72 69 6e  stead of a strin
17fa0 67 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c  g literal..</p><
17fb0 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 49 66 20  /li>..<li><p>If 
17fc0 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75  a keyword in dou
17fd0 62 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20  ble.quotes (ex: 
17fe0 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20  <b>"key"</b> or 
17ff0 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69  <b>"glob"</b>) i
18000 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74  s used in a cont
18010 65 78 74 20 77 68 65 72 65 0a 69 74 20 63 61 6e  ext where.it can
18020 6e 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64 20  not be resolved 
18030 74 6f 20 61 6e 20 69 6e 64 65 6e 74 69 66 69 65  to an indentifie
18040 72 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74  r but where a st
18050 72 69 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20  ring literal.is 
18060 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68  allowed, then th
18070 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72  e token is under
18080 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74  stood to be a st
18090 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73  ring literal ins
180a0 74 65 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74  tead.of an ident
180b0 69 66 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c  ifer.</p></li>.<
180c0 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d  /ul>..<p>Program
180d0 6d 65 72 73 20 61 72 65 20 63 61 75 74 69 6f 6e  mers are caution
180e0 65 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74 68  ed not to use th
180f0 65 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e 73  e two exceptions
18100 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68   described in.th
18110 65 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c 65  e previous bulle
18120 74 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69 7a  ts.  We emphasiz
18130 65 20 74 68 61 74 20 74 68 65 79 20 65 78 69 73  e that they exis
18140 74 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f  t only so that o
18150 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65  ld.and ill-forme
18160 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  d SQL statements
18170 20 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63   will run correc
18180 74 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65 72  tly.  Future ver
18190 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20  sions of.SQLite 
181a0 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 6f 20  might change to 
181b0 72 61 69 73 65 20 65 72 72 6f 72 73 20 69 6e 73  raise errors ins
181c0 74 65 61 64 20 6f 66 20 61 63 63 65 70 74 69 6e  tead of acceptin
181d0 67 20 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64 0a  g the malformed.
181e0 73 74 61 74 65 6d 65 6e 74 73 20 63 6f 76 65 72  statements cover
181f0 65 64 20 62 79 20 74 68 65 20 65 78 63 65 70 74  ed by the except
18200 69 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a  ions above.</p>.
18210 0a 3c 70 3e 53 51 4c 69 74 65 20 69 73 20 65 78  .<p>SQLite is ex
18220 74 65 6e 64 65 64 20 74 6f 20 61 6c 6c 6f 77 20  tended to allow 
18230 6d 61 6e 79 20 6b 65 79 77 6f 72 64 73 20 74 6f  many keywords to
18240 20 62 65 20 75 73 65 64 20 75 6e 71 75 6f 74 65   be used unquote
18250 64 0a 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f  d.as the names o
18260 66 20 64 61 74 61 62 61 73 65 73 2c 20 74 61 62  f databases, tab
18270 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20 74 72  les, indices, tr
18280 69 67 67 65 72 73 2c 20 76 69 65 77 73 2c 20 63  iggers, views, c
18290 6f 6c 75 6d 6e 73 2c 0a 75 73 65 72 2d 64 65 66  olumns,.user-def
182a0 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20  ined functions, 
182b0 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 61 74 74 61  collations, atta
182c0 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c 20  ched databases, 
182d0 61 6e 64 20 76 69 72 74 75 61 6c 0a 66 75 6e 63  and virtual.func
182e0 74 69 6f 6e 20 6d 6f 64 75 6c 65 73 2e 0a 49 6e  tion modules..In
182f0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79   the list of key
18300 77 6f 72 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f  words that follo
18310 77 73 2c 20 74 68 6f 73 65 20 74 68 61 74 20 63  ws, those that c
18320 61 6e 20 62 65 20 75 73 65 64 20 61 73 20 69 64  an be used as id
18330 65 6e 74 69 66 69 65 72 73 0a 61 72 65 20 73 68  entifiers.are sh
18340 6f 77 6e 20 69 6e 20 61 6e 20 69 74 61 6c 69 63  own in an italic
18350 20 66 6f 6e 74 2e 20 20 4b 65 79 77 6f 72 64 73   font.  Keywords
18360 20 74 68 61 74 20 6d 75 73 74 20 62 65 20 71 75   that must be qu
18370 6f 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  oted in order to
18380 20 62 65 0a 75 73 65 64 20 61 73 20 69 64 65 6e   be.used as iden
18390 74 69 66 69 65 72 73 20 61 72 65 20 73 68 6f 77  tifiers are show
183a0 6e 20 69 6e 20 62 6f 6c 64 2e 3c 2f 70 3e 0a 0a  n in bold.</p>..
183b0 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73 20  <p>.SQLite adds 
183c0 6e 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72 6f  new keywords fro
183d0 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 77  m time to time w
183e0 68 65 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e 20  hen it takes on 
183f0 6e 65 77 20 66 65 61 74 75 72 65 73 2e 0a 53 6f  new features..So
18400 20 74 6f 20 70 72 65 76 65 6e 74 20 79 6f 75 72   to prevent your
18410 20 63 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e 67   code from being
18420 20 62 72 6f 6b 65 6e 20 62 79 20 66 75 74 75 72   broken by futur
18430 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20  e enhancements, 
18440 79 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61  you should.norma
18450 6c 6c 79 20 71 75 6f 74 65 20 61 6e 79 20 69 6e  lly quote any in
18460 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69  dentifier that i
18470 73 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e  s an English lan
18480 67 75 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e  guage word, even
18490 20 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68   if.you do not h
184a0 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ave to..</p>..<p
184b0 3e 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  >.The following 
184c0 61 72 65 20 74 68 65 20 6b 65 79 77 6f 72 64 73  are the keywords
184d0 20 63 75 72 72 65 6e 74 6c 79 20 72 65 63 6f 67   currently recog
184e0 6e 69 7a 65 64 20 62 79 20 53 51 4c 69 74 65 3a  nized by SQLite:
184f0 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
18500 74 65 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68  te>.<table width
18510 3d 22 31 30 30 25 22 20 63 6c 61 73 73 3d 22 70  ="100%" class="p
18520 64 66 5f 6b 65 79 77 6f 72 64 73 22 3e 0a 3c 74  df_keywords">.<t
18530 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 6c 65  r>.<td align="le
18540 66 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ft" valign="top"
18550 20 77 69 64 74 68 3d 22 32 30 25 22 3e 0a 0a 3c   width="20%">..<
18560 74 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e  tcl>.set n [llen
18570 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  gth $keyword_lis
18580 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a 73 65  t].set nCol 5.se
18590 74 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b 28 24  t nRow [expr {($
185a0 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c  n+$nCol-1)/$nCol
185b0 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72 65 61  }].set i 0.forea
185c0 63 68 20 77 6f 72 64 20 24 6b 65 79 77 6f 72 64  ch word $keyword
185d0 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b 5b 73  _list {.  if {[s
185e0 74 72 69 6e 67 20 69 6e 64 65 78 20 24 77 6f 72  tring index $wor
185f0 64 20 65 6e 64 5d 3d 3d 22 2a 22 7d 20 7b 0a 20  d end]=="*"} {. 
18600 20 20 20 73 65 74 20 77 6f 72 64 20 5b 73 74 72     set word [str
18610 69 6e 67 20 72 61 6e 67 65 20 24 77 6f 72 64 20  ing range $word 
18620 30 20 65 6e 64 2d 31 5d 0a 20 20 20 20 73 65 74  0 end-1].    set
18630 20 66 6f 6e 74 20 69 0a 20 20 7d 20 65 6c 73 65   font i.  } else
18640 20 7b 0a 20 20 20 20 73 65 74 20 66 6f 6e 74 20   {.    set font 
18650 62 0a 20 20 7d 0a 20 20 69 66 20 7b 24 69 3d 3d  b.  }.  if {$i==
18660 24 6e 52 6f 77 7d 20 7b 0a 20 20 20 20 68 64 5f  $nRow} {.    hd_
18670 70 75 74 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76  puts "</td><td v
18680 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c  align=\"top\" al
18690 69 67 6e 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64  ign=\"left\" wid
186a0 74 68 3d 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20  th=\"20%\">".   
186b0 20 73 65 74 20 69 20 31 0a 20 20 7d 20 65 6c 73   set i 1.  } els
186c0 65 20 7b 0a 20 20 20 20 69 6e 63 72 20 69 0a 20  e {.    incr i. 
186d0 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 24   }.  hd_puts "<$
186e0 66 6f 6e 74 3e 24 77 6f 72 64 3c 2f 24 66 6f 6e  font>$word</$fon
186f0 74 3e 3c 62 72 3e 22 0a 7d 0a 3c 2f 74 63 6c 3e  t><br>".}.</tcl>
18700 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62  .</td></tr></tab
18710 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  le></blockquote>
18720 0a 0a 3c 68 32 3e 53 70 65 63 69 61 6c 20 6e 61  ..<h2>Special na
18730 6d 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65  mes</h2>..<p>The
18740 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 6e   following are n
18750 6f 74 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 53  ot keywords in S
18760 51 4c 69 74 65 2c 20 62 75 74 20 61 72 65 20 75  QLite, but are u
18770 73 65 64 20 61 73 20 6e 61 6d 65 73 20 6f 66 20  sed as names of 
18780 0a 73 79 73 74 65 6d 20 6f 62 6a 65 63 74 73 2e  .system objects.
18790 20 20 54 68 65 79 20 63 61 6e 20 62 65 20 75 73    They can be us
187a0 65 64 20 61 73 20 61 6e 20 69 64 65 6e 74 69 66  ed as an identif
187b0 69 65 72 20 66 6f 72 20 61 20 64 69 66 66 65 72  ier for a differ
187c0 65 6e 74 20 0a 74 79 70 65 20 6f 66 20 6f 62 6a  ent .type of obj
187d0 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ect.</p>..<block
187e0 71 75 6f 74 65 20 63 6c 61 73 73 3d 22 70 64 66  quote class="pdf
187f0 5f 6b 65 79 77 6f 72 64 73 22 3e 3c 62 3e 0a 20  _keywords"><b>. 
18800 20 5f 52 4f 57 49 44 5f 3c 62 72 3e 0a 20 20 4d   _ROWID_<br>.  M
18810 41 49 4e 3c 62 72 3e 0a 20 20 4f 49 44 3c 62 72  AIN<br>.  OID<br
18820 3e 0a 20 20 52 4f 57 49 44 3c 62 72 3e 0a 20 20  >.  ROWID<br>.  
18830 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 3c 62 72  SQLITE_MASTER<br
18840 3e 0a 20 20 53 51 4c 49 54 45 5f 53 45 51 55 45  >.  SQLITE_SEQUE
18850 4e 43 45 3c 62 72 3e 0a 20 20 53 51 4c 49 54 45  NCE<br>.  SQLITE
18860 5f 54 45 4d 50 5f 4d 41 53 54 45 52 3c 62 72 3e  _TEMP_MASTER<br>
18870 0a 20 20 54 45 4d 50 3c 62 72 3e 0a 3c 2f 62 3e  .  TEMP<br>.</b>
18880 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a        </blockquote>.