Documentation Source Text

Hex Artifact Content
Login

Artifact f4b5e8921d9a1dbd009835810b1d7703d33ff809af7a121320cf532c4b2d9024:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 55 50 53 45 52 54 20 75 70 73 65 72     {UPSERT upser
0380: 74 7d 0a 20 20 20 20 7b 52 45 50 4c 41 43 45 20  t}.    {REPLACE 
0390: 72 65 70 6c 61 63 65 7d 0a 20 20 20 20 7b 44 45  replace}.    {DE
03a0: 4c 45 54 45 20 64 65 6c 65 74 65 7d 0a 20 20 20  LETE delete}.   
03b0: 20 7b 55 50 44 41 54 45 20 75 70 64 61 74 65 7d   {UPDATE update}
03c0: 0a 20 20 20 20 7b 53 45 4c 45 43 54 20 73 65 6c  .    {SELECT sel
03d0: 65 63 74 7d 0a 20 20 20 20 7b 7b 57 49 54 48 20  ect}.    {{WITH 
03e0: 63 6c 61 75 73 65 7d 20 77 69 74 68 63 6c 61 75  clause} withclau
03f0: 73 65 7d 0a 20 20 20 20 7b 63 6f 6d 6d 65 6e 74  se}.    {comment
0400: 20 63 6f 6d 6d 65 6e 74 7d 0a 20 20 20 20 7b 45   comment}.    {E
0410: 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 7d 0a  XPLAIN explain}.
0420: 20 20 20 20 7b 65 78 70 72 65 73 73 69 6f 6e 20      {expression 
0430: 65 78 70 72 7d 0a 20 20 20 20 7b 7b 42 45 47 49  expr}.    {{BEGI
0440: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74  N TRANSACTION} t
0450: 72 61 6e 73 61 63 74 69 6f 6e 7d 0a 20 20 20 20  ransaction}.    
0460: 7b 7b 43 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43  {{COMMIT TRANSAC
0470: 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f  TION} transactio
0480: 6e 20 43 4f 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b  n COMMIT}.    {{
0490: 45 4e 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d  END TRANSACTION}
04a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43 4f 4d   transaction COM
04b0: 4d 49 54 7d 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42  MIT}.    {{ROLLB
04c0: 41 43 4b 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d  ACK TRANSACTION}
04d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 52 4f 4c   transaction ROL
04e0: 4c 42 41 43 4b 7d 0a 20 20 20 20 7b 53 41 56 45  LBACK}.    {SAVE
04f0: 50 4f 49 4e 54 20 73 61 76 65 70 6f 69 6e 74 7d  POINT savepoint}
0500: 0a 20 20 20 20 7b 7b 52 45 4c 45 41 53 45 20 53  .    {{RELEASE S
0510: 41 56 45 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f  AVEPOINT} savepo
0520: 69 6e 74 20 53 41 56 45 50 4f 49 4e 54 7d 0a 20  int SAVEPOINT}. 
0530: 20 20 20 7b 50 52 41 47 4d 41 20 70 72 61 67 6d     {PRAGMA pragm
0540: 61 2e 68 74 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e  a.html}.    {{ON
0550: 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
0560: 7d 20 63 6f 6e 66 6c 69 63 74 7d 0a 20 20 20 20  } conflict}.    
0570: 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20 63  {{CREATE VIEW} c
0580: 72 65 61 74 65 76 69 65 77 7d 0a 20 20 20 20 7b  reateview}.    {
0590: 7b 44 52 4f 50 20 56 49 45 57 7d 20 64 72 6f 70  {DROP VIEW} drop
05a0: 76 69 65 77 7d 0a 20 20 20 20 7b 7b 43 52 45 41  view}.    {{CREA
05b0: 54 45 20 54 52 49 47 47 45 52 7d 20 63 72 65 61  TE TRIGGER} crea
05c0: 74 65 74 72 69 67 67 65 72 7d 0a 20 20 20 20 7b  tetrigger}.    {
05d0: 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20 64  {DROP TRIGGER} d
05e0: 72 6f 70 74 72 69 67 67 65 72 7d 0a 20 20 20 20  roptrigger}.    
05f0: 7b 7b 41 54 54 41 43 48 20 44 41 54 41 42 41 53  {{ATTACH DATABAS
0600: 45 7d 20 61 74 74 61 63 68 7d 0a 20 20 20 20 7b  E} attach}.    {
0610: 7b 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45  {DETACH DATABASE
0620: 7d 20 64 65 74 61 63 68 7d 0a 20 20 20 20 20 20  } detach}.      
0630: 7b 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78  {REINDEX reindex
0640: 7d 0a 20 20 20 20 7b 7b 41 4c 54 45 52 20 54 41  }.    {{ALTER TA
0650: 42 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 7d  BLE} altertable}
0660: 0a 20 20 20 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20  .    {{ANALYZE} 
0670: 61 6e 61 6c 79 7a 65 7d 0a 20 20 20 20 7b 7b 49  analyze}.    {{I
0680: 4e 44 45 58 45 44 20 42 59 7d 20 69 6e 64 65 78  NDEXED BY} index
0690: 65 64 62 79 7d 0a 20 20 20 20 7b 7b 61 67 67 72  edby}.    {{aggr
06a0: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 7d  egate functions}
06b0: 20 61 67 67 66 75 6e 63 20 61 67 67 66 75 6e 63   aggfunc aggfunc
06c0: 7d 0a 20 20 20 20 7b 7b 63 6f 72 65 20 66 75 6e  }.    {{core fun
06d0: 63 74 69 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63  ctions} corefunc
06e0: 20 63 6f 72 65 66 75 6e 63 7d 0a 20 20 20 20 7b   corefunc}.    {
06f0: 7b 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66  {date and time f
0700: 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75  unctions} datefu
0710: 6e 63 20 64 61 74 65 66 75 6e 63 7d 0a 20 20 20  nc datefunc}.   
0720: 20 7b 6b 65 79 77 6f 72 64 73 20 6b 65 79 77 6f   {keywords keywo
0730: 72 64 73 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64  rds {SQL keyword
0740: 73 7d 7d 0a 20 20 7d 0a 20 20 73 65 74 20 6c 78  s}}.  }.  set lx
0750: 20 7b 7d 0a 20 20 66 6f 72 65 61 63 68 20 7b 73   {}.  foreach {s
0760: 65 63 74 69 6f 6e 7d 20 5b 6c 73 6f 72 74 20 2d  ection} [lsort -
0770: 69 6e 64 65 78 20 30 20 2d 64 69 63 74 69 6f 6e  index 0 -diction
0780: 61 72 79 20 24 6c 61 6e 67 5f 73 65 63 74 69 6f  ary $lang_sectio
0790: 6e 5f 6c 69 73 74 5d 20 7b 0a 20 20 20 20 66 6f  n_list] {.    fo
07a0: 72 65 61 63 68 20 7b 73 5f 74 69 74 6c 65 20 73  reach {s_title s
07b0: 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73 65 63 74  _tag s_kw} $sect
07c0: 69 6f 6e 20 7b 7d 0a 20 20 20 20 69 66 20 7b 24  ion {}.    if {$
07d0: 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20 20  s_kw == ""} {.  
07e0: 20 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f      set s_kw $s_
07f0: 74 69 74 6c 65 0a 20 20 20 20 7d 0a 20 20 20 20  title.    }.    
0800: 6c 61 70 70 65 6e 64 20 6c 78 20 5b 6c 69 73 74  lappend lx [list
0810: 20 24 73 5f 6b 77 20 24 73 5f 74 69 74 6c 65 20   $s_kw $s_title 
0820: 30 5d 0a 20 20 7d 0a 20 20 68 64 5f 6c 69 73 74  0].  }.  hd_list
0830: 5f 6f 66 5f 6c 69 6e 6b 73 20 7b 7d 20 33 34 30  _of_links {} 340
0840: 20 24 6c 78 0a 3c 2f 74 63 6c 3e 0a 3c 2f 75 6c   $lx.</tcl>.</ul
0850: 3e 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62  ></td></tr></tab
0860: 6c 65 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72 6f 75  le>..<p>^The rou
0870: 74 69 6e 65 73 20 5b 73 71 6c 69 74 65 33 5f 70  tines [sqlite3_p
0880: 72 65 70 61 72 65 5f 76 32 28 29 5d 2c 20 5b 73  repare_v2()], [s
0890: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
08a0: 5d 2c 0a 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  ],.[sqlite3_prep
08b0: 61 72 65 31 36 28 29 5d 2c 20 5b 73 71 6c 69 74  are16()], [sqlit
08c0: 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76 32 28  e3_prepare16_v2(
08d0: 29 5d 2c 20 0a 5b 73 71 6c 69 74 65 33 5f 65 78  )], .[sqlite3_ex
08e0: 65 63 28 29 5d 2c 20 61 6e 64 20 5b 73 71 6c 69  ec()], and [sqli
08f0: 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 28 29 5d  te3_get_table()]
0900: 20 61 63 63 65 70 74 0a 61 6e 20 53 51 4c 20 73   accept.an SQL s
0910: 74 61 74 65 6d 65 6e 74 20 6c 69 73 74 20 28 73  tatement list (s
0920: 71 6c 2d 73 74 6d 74 2d 6c 69 73 74 29 20 77 68  ql-stmt-list) wh
0930: 69 63 68 20 69 73 20 61 20 73 65 6d 69 63 6f 6c  ich is a semicol
0940: 6f 6e 2d 73 65 70 61 72 61 74 65 64 0a 6c 69 73  on-separated.lis
0950: 74 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  t of statements.
0960: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
0970: 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d  eDiagram sql-stm
0980: 74 2d 6c 69 73 74 3c 2f 74 63 6c 3e 0a 0a 3c 70  t-list</tcl>..<p
0990: 3e 45 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d  >Each SQL statem
09a0: 65 6e 74 20 69 6e 20 74 68 65 20 73 74 61 74 65  ent in the state
09b0: 6d 65 6e 74 20 6c 69 73 74 20 69 73 20 61 6e 20  ment list is an 
09c0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a  instance of the.
09d0: 66 6f 6c 6c 6f 77 69 6e 67 3a 3c 2f 70 3e 0a 0a  following:</p>..
09e0: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
09f0: 61 6d 20 73 71 6c 2d 73 74 6d 74 3c 2f 74 63 6c  am sql-stmt</tcl
0a00: 3e 0a 0a 3c 74 63 6c 3e 0a 70 72 6f 63 20 4f 70  >..<tcl>.proc Op
0a10: 65 72 61 74 6f 72 20 7b 6e 61 6d 65 7d 20 7b 0a  erator {name} {.
0a20: 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20    return "<font 
0a30: 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c  color=\"#2c2cf0\
0a40: 22 3e 3c 62 69 67 3e 24 6e 61 6d 65 3c 2f 62 69  "><big>$name</bi
0a50: 67 3e 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a 70 72 6f  g></font>".}.pro
0a60: 63 20 4e 6f 6e 74 65 72 6d 69 6e 61 6c 20 7b 6e  c Nonterminal {n
0a70: 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20  ame} {.  return 
0a80: 22 3c 69 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  "<i><font color=
0a90: 5c 22 23 66 66 33 34 33 34 5c 22 3e 24 6e 61 6d  \"#ff3434\">$nam
0aa0: 65 3c 2f 66 6f 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a  e</font></i>".}.
0ab0: 70 72 6f 63 20 4b 65 79 77 6f 72 64 20 7b 6e 61  proc Keyword {na
0ac0: 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 22  me} {.  return "
0ad0: 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 32  <font color=\"#2
0ae0: 63 32 63 66 30 5c 22 3e 24 6e 61 6d 65 3c 2f 66  c2cf0\">$name</f
0af0: 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 45 78 61  ont>".}.proc Exa
0b00: 6d 70 6c 65 20 7b 74 65 78 74 7d 20 7b 0a 20 20  mple {text} {.  
0b10: 68 64 5f 70 75 74 73 20 22 3c 62 6c 6f 63 6b 71  hd_puts "<blockq
0b20: 75 6f 74 65 3e 3c 70 72 65 3e 24 74 65 78 74 3c  uote><pre>$text<
0b30: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
0b40: 65 3e 22 0a 7d 0a 0a 70 72 6f 63 20 53 65 63 74  e>".}..proc Sect
0b50: 69 6f 6e 20 7b 6e 61 6d 65 20 6c 61 62 65 6c 20  ion {name label 
0b60: 6b 65 79 77 6f 72 64 73 7d 20 7b 0a 20 20 67 6c  keywords} {.  gl
0b70: 6f 62 61 6c 20 44 4f 43 0a 20 20 68 64 5f 63 6c  obal DOC.  hd_cl
0b80: 6f 73 65 5f 6d 61 69 6e 0a 20 20 68 64 5f 6f 70  ose_main.  hd_op
0b90: 65 6e 5f 6d 61 69 6e 20 6c 61 6e 67 5f 24 6c 61  en_main lang_$la
0ba0: 62 65 6c 2e 68 74 6d 6c 0a 20 20 68 64 5f 68 65  bel.html.  hd_he
0bb0: 61 64 65 72 20 22 53 51 4c 69 74 65 20 51 75 65  ader "SQLite Que
0bc0: 72 79 20 4c 61 6e 67 75 61 67 65 3a 20 24 6e 61  ry Language: $na
0bd0: 6d 65 22 20 24 44 4f 43 2f 70 61 67 65 73 2f 6c  me" $DOC/pages/l
0be0: 61 6e 67 2e 69 6e 0a 20 20 65 76 61 6c 20 68 64  ang.in.  eval hd
0bf0: 5f 6b 65 79 77 6f 72 64 73 20 24 6b 65 79 77 6f  _keywords $keywo
0c00: 72 64 73 0a 20 20 69 66 20 7b 5b 6c 73 65 61 72  rds.  if {[lsear
0c10: 63 68 20 24 6b 65 79 77 6f 72 64 73 20 24 6e 61  ch $keywords $na
0c20: 6d 65 5d 20 3d 3d 20 2d 31 20 26 26 20 5b 6c 73  me] == -1 && [ls
0c30: 65 61 72 63 68 20 24 6b 65 79 77 6f 72 64 73 20  earch $keywords 
0c40: 2a 24 6e 61 6d 65 5d 20 3d 3d 20 2d 31 7d 20 7b  *$name] == -1} {
0c50: 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79  .    eval hd_key
0c60: 77 6f 72 64 73 20 7b 20 24 6e 61 6d 65 20 7d 0a  words { $name }.
0c70: 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c    }.  hd_puts {<
0c80: 64 69 76 20 63 6c 61 73 73 3d 6e 6f 73 65 61 72  div class=nosear
0c90: 63 68 3e 7d 0a 20 20 68 64 5f 70 75 74 73 20 7b  ch>}.  hd_puts {
0ca0: 3c 68 31 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <h1 align="cente
0cb0: 72 22 3e 53 51 4c 20 41 73 20 55 6e 64 65 72 73  r">SQL As Unders
0cc0: 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65 3c 2f  tood By SQLite</
0cd0: 68 31 3e 7d 0a 20 20 68 64 5f 70 75 74 73 20 7b  h1>}.  hd_puts {
0ce0: 3c 70 3e 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67  <p><a href="lang
0cf0: 2e 68 74 6d 6c 22 3e 5b 54 6f 70 5d 3c 2f 61 3e  .html">[Top]</a>
0d00: 3c 2f 70 3e 7d 0a 20 20 68 64 5f 70 75 74 73 20  </p>}.  hd_puts 
0d10: 22 3c 68 32 3e 24 6e 61 6d 65 3c 2f 68 32 3e 22  "<h2>$name</h2>"
0d20: 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 2f 64 69  .  hd_puts {</di
0d30: 76 3e 7d 0a 7d 0a 0a 23 23 23 23 23 23 23 23 23  v>}.}..#########
0d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d80: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
0d90: 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 61 6c 74  ALTER TABLE} alt
0da0: 65 72 74 61 62 6c 65 20 7b 7b 41 4c 54 45 52 20  ertable {{ALTER 
0db0: 54 41 42 4c 45 7d 20 7b 2a 41 4c 54 45 52 7d 7d  TABLE} {*ALTER}}
0dc0: 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
0dd0: 65 44 69 61 67 72 61 6d 20 61 6c 74 65 72 2d 74  eDiagram alter-t
0de0: 61 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  able-stmt.</tcl>
0df0: 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70  ..<p>SQLite supp
0e00: 6f 72 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73  orts a limited s
0e10: 75 62 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54  ubset of ALTER T
0e20: 41 42 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20  ABLE..The ALTER 
0e30: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  TABLE command in
0e40: 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74   SQLite allows t
0e50: 68 65 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d  he user to renam
0e60: 65 20 61 20 74 61 62 6c 65 2c 0a 74 6f 20 72 65  e a table,.to re
0e70: 6e 61 6d 65 20 61 20 63 6f 6c 75 6d 6e 20 77 69  name a column wi
0e80: 74 68 69 6e 20 61 20 74 61 62 6c 65 2c 20 6f 72  thin a table, or
0e90: 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f   to add a new co
0ea0: 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69 73 74  lumn to an exist
0eb0: 69 6e 67 20 74 61 62 6c 65 2e 0a 0a 3c 74 63 6c  ing table...<tcl
0ec0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 61 6c 74  >hd_fragment alt
0ed0: 65 72 74 61 62 72 65 6e 61 6d 65 20 7b 41 4c 54  ertabrename {ALT
0ee0: 45 52 20 54 41 42 4c 45 20 52 45 4e 41 4d 45 7d  ER TABLE RENAME}
0ef0: 20 7b 72 65 6e 61 6d 65 20 74 61 62 6c 65 7d 3c   {rename table}<
0f00: 2f 74 63 6c 3e 0a 3c 68 33 3e 41 4c 54 45 52 20  /tcl>.<h3>ALTER 
0f10: 54 41 42 4c 45 20 52 45 4e 41 4d 45 3c 2f 68 33  TABLE RENAME</h3
0f20: 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e  >..<p> ^(The REN
0f30: 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 63 68  AME TO syntax ch
0f40: 61 6e 67 65 73 20 74 68 65 20 6e 61 6d 65 20 6f  anges the name o
0f50: 66 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d  f <yyterm>table-
0f60: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 74 6f  name</yyterm>.to
0f70: 20 3c 79 79 74 65 72 6d 3e 6e 65 77 2d 74 61 62   <yyterm>new-tab
0f80: 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  le-name</yyterm>
0f90: 2e 29 5e 0a 54 68 69 73 20 63 6f 6d 6d 61 6e 64  .)^.This command
0fa0: 20 0a 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64   .cannot be used
0fb0: 20 74 6f 20 6d 6f 76 65 20 61 20 74 61 62 6c 65   to move a table
0fc0: 20 62 65 74 77 65 65 6e 20 61 74 74 61 63 68 65   between attache
0fd0: 64 20 64 61 74 61 62 61 73 65 73 2c 20 6f 6e 6c  d databases, onl
0fe0: 79 20 74 6f 20 72 65 6e 61 6d 65 20 0a 61 20 74  y to rename .a t
0ff0: 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68 65 20  able within the 
1000: 73 61 6d 65 20 64 61 74 61 62 61 73 65 2e 0a 5e  same database..^
1010: 49 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  If the table bei
1020: 6e 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20 74  ng renamed has t
1030: 72 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69 63  riggers or indic
1040: 65 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20 72  es, then these r
1050: 65 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20 74  emain.attached t
1060: 6f 20 74 68 65 20 74 61 62 6c 65 20 61 66 74 65  o the table afte
1070: 72 20 69 74 20 68 61 73 20 62 65 65 6e 20 72 65  r it has been re
1080: 6e 61 6d 65 64 2e 0a 0a 3c 62 6c 6f 63 6b 71 75  named...<blockqu
1090: 6f 74 65 20 73 74 79 6c 65 3d 27 62 61 63 6b 67  ote style='backg
10a0: 72 6f 75 6e 64 2d 63 6f 6c 6f 72 3a 20 23 66 66  round-color: #ff
10b0: 64 30 64 30 3b 27 3e 0a 3c 62 3e 43 6f 6d 70 61  d0d0;'>.<b>Compa
10c0: 74 69 62 69 6c 69 74 79 20 4e 6f 74 65 3a 3c 2f  tibility Note:</
10d0: 62 3e 0a 54 68 65 20 62 65 68 61 76 69 6f 72 20  b>.The behavior 
10e0: 6f 66 20 41 4c 54 45 52 20 54 41 42 4c 45 20 77  of ALTER TABLE w
10f0: 68 65 6e 20 72 65 6e 61 6d 69 6e 67 20 61 20 74  hen renaming a t
1100: 61 62 6c 65 20 77 61 73 20 65 6e 68 61 6e 63 65  able was enhance
1110: 64 0a 69 6e 20 76 65 72 73 69 6f 6e 73 20 33 2e  d.in versions 3.
1120: 32 35 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33 2e  25.0 ([dateof:3.
1130: 32 35 2e 30 5d 29 20 61 6e 64 20 33 2e 32 36 2e  25.0]) and 3.26.
1140: 30 20 28 5b 64 61 74 65 6f 66 3a 33 2e 32 36 2e  0 ([dateof:3.26.
1150: 30 5d 29 0a 69 6e 20 6f 72 64 65 72 20 74 6f 20  0]).in order to 
1160: 63 61 72 72 79 20 74 68 65 20 72 65 6e 61 6d 65  carry the rename
1170: 20 6f 70 65 72 61 74 69 6f 6e 20 66 6f 72 77 61   operation forwa
1180: 72 64 20 69 6e 74 6f 20 74 72 69 67 67 65 72 73  rd into triggers
1190: 20 61 6e 64 0a 76 69 65 77 73 20 74 68 61 74 20   and.views that 
11a0: 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 72 65  reference the re
11b0: 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 20 54 68  named table.  Th
11c0: 69 73 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  is is considered
11d0: 20 61 6e 0a 69 6d 70 72 6f 76 65 6d 65 6e 74 2e   an.improvement.
11e0: 20 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68   Applications th
11f0: 61 74 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 65  at depend on the
1200: 20 6f 6c 64 65 72 20 28 61 6e 64 0a 61 72 67 75   older (and.argu
1210: 61 62 6c 79 20 62 75 67 67 79 29 20 62 65 68 61  ably buggy) beha
1220: 76 69 6f 72 20 63 61 6e 20 75 73 65 20 74 68 65  vior can use the
1230: 0a 5b 50 52 41 47 4d 41 20 6c 65 67 61 63 79 5f  .[PRAGMA legacy_
1240: 61 6c 74 65 72 5f 74 61 62 6c 65 3d 4f 4e 5d 20  alter_table=ON] 
1250: 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 6d 61 6b  statement to mak
1260: 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20 52 45  e ALTER TABLE RE
1270: 4e 41 4d 45 0a 62 65 68 61 76 69 6f 72 20 61 73  NAME.behavior as
1280: 20 69 74 20 64 69 64 20 70 72 69 6f 72 20 74 6f   it did prior to
1290: 20 76 65 72 73 69 6f 6e 20 33 2e 32 35 2e 30 2e   version 3.25.0.
12a0: 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
12b0: 3c 70 3e 0a 42 65 67 69 6e 6e 69 6e 67 20 77 69  <p>.Beginning wi
12c0: 74 68 20 72 65 6c 65 61 73 65 20 33 2e 32 35 2e  th release 3.25.
12d0: 30 20 28 5b 64 61 74 65 6f 66 3a 33 2e 32 35 2e  0 ([dateof:3.25.
12e0: 30 5d 29 2c 20 72 65 66 65 72 65 6e 63 65 73 20  0]), references 
12f0: 74 6f 20 74 68 65 20 74 61 62 6c 65 0a 77 69 74  to the table.wit
1300: 68 69 6e 20 74 72 69 67 67 65 72 20 62 6f 64 69  hin trigger bodi
1310: 65 73 20 61 6e 64 20 76 69 65 77 20 64 65 66 69  es and view defi
1320: 6e 69 74 69 6f 6e 73 20 61 72 65 20 61 6c 73 6f  nitions are also
1330: 20 72 65 6e 61 6d 65 64 2e 0a 3c 2f 70 3e 0a 0a   renamed..</p>..
1340: 3c 70 3e 20 50 72 69 6f 72 20 74 6f 20 76 65 72  <p> Prior to ver
1350: 73 69 6f 6e 20 33 2e 32 36 2e 30 20 28 5b 64 61  sion 3.26.0 ([da
1360: 74 65 6f 66 3a 33 2e 32 36 2e 30 5d 29 2c 20 46  teof:3.26.0]), F
1370: 4f 52 45 49 47 4e 20 4b 45 59 20 72 65 66 65 72  OREIGN KEY refer
1380: 65 6e 63 65 73 0a 74 6f 20 61 20 74 61 62 6c 65  ences.to a table
1390: 20 74 68 61 74 20 69 73 20 72 65 6e 61 6d 65 64   that is renamed
13a0: 20 77 65 72 65 20 6f 6e 6c 79 20 65 64 69 74 65   were only edite
13b0: 64 20 69 66 20 74 68 65 0a 5b 50 52 41 47 4d 41  d if the.[PRAGMA
13c0: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3d 4f 4e   foreign_keys=ON
13d0: 5d 2c 20 6f 72 20 69 6e 20 6f 74 68 65 72 20 77  ], or in other w
13e0: 6f 72 64 73 20 69 66 0a 5b 66 6f 72 65 69 67 6e  ords if.[foreign
13f0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
1400: 5d 20 77 65 72 65 20 62 65 67 69 6e 20 65 6e 66  ] were begin enf
1410: 6f 72 63 65 64 2e 20 20 57 69 74 68 0a 5b 50 52  orced.  With.[PR
1420: 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79  AGMA foreign_key
1430: 73 3d 4f 46 46 5d 2c 20 46 4f 52 45 49 47 4e 20  s=OFF], FOREIGN 
1440: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  KEY constraints 
1450: 77 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 68 61  would not be cha
1460: 6e 67 65 64 0a 77 68 65 6e 20 74 68 65 20 74 61  nged.when the ta
1470: 62 6c 65 20 74 68 61 74 20 74 68 65 20 66 6f 72  ble that the for
1480: 65 69 67 6e 20 6b 65 79 20 72 65 66 65 72 72 65  eign key referre
1490: 64 20 74 6f 20 28 74 68 65 20 22 5b 70 61 72 65  d to (the "[pare
14a0: 6e 74 20 74 61 62 6c 65 5d 22 29 0a 77 61 73 20  nt table]").was 
14b0: 72 65 6e 61 6d 65 64 2e 20 20 42 65 67 69 6e 6e  renamed.  Beginn
14c0: 69 6e 67 20 77 69 74 68 20 76 65 72 73 69 6f 6e  ing with version
14d0: 20 33 2e 32 36 2e 30 2c 20 46 4f 52 45 49 47 4e   3.26.0, FOREIGN
14e0: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73   KEY constraints
14f0: 0a 61 72 65 20 61 6c 77 61 79 73 20 63 6f 6e 76  .are always conv
1500: 65 72 74 65 64 20 77 68 65 6e 20 61 20 74 61 62  erted when a tab
1510: 6c 65 20 69 73 20 72 65 6e 61 6d 65 64 2c 20 75  le is renamed, u
1520: 6e 6c 65 73 73 20 74 68 65 0a 5b 50 52 41 47 4d  nless the.[PRAGM
1530: 41 20 6c 65 67 61 63 79 5f 61 6c 74 65 72 5f 74  A legacy_alter_t
1540: 61 62 6c 65 3d 4f 4e 5d 20 73 65 74 74 69 6e 67  able=ON] setting
1550: 20 69 73 20 65 6e 67 61 67 65 64 2e 20 20 54 68   is engaged.  Th
1560: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 74 61 62 6c  e following.tabl
1570: 65 20 73 75 6d 6d 61 72 69 65 73 20 74 68 65 20  e summaries the 
1580: 64 69 66 66 65 72 65 6e 63 65 3a 3c 2f 70 3e 0a  difference:</p>.
1590: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
15a0: 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 31 22 20  able border="1" 
15b0: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 32 22 20  cellpadding="2" 
15c0: 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e  cellspacing="0">
15d0: 0a 3c 74 72 3e 0a 3c 74 68 3e 50 52 41 47 4d 41  .<tr>.<th>PRAGMA
15e0: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 0a 3c 74   foreign_keys.<t
15f0: 68 3e 50 52 41 47 4d 41 20 6c 65 67 61 63 79 5f  h>PRAGMA legacy_
1600: 61 6c 74 65 72 5f 74 61 62 6c 65 0a 3c 74 68 3e  alter_table.<th>
1610: 5b 70 61 72 65 6e 74 20 74 61 62 6c 65 7c 50 61  [parent table|Pa
1620: 72 65 6e 74 20 54 61 62 6c 65 5d 0a 72 65 66 65  rent Table].refe
1630: 72 65 6e 63 65 73 20 61 72 65 20 75 70 64 61 74  rences are updat
1640: 65 64 0a 3c 74 68 3e 53 51 4c 69 74 65 20 76 65  ed.<th>SQLite ve
1650: 72 73 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 61 6c  rsion.<tr><td al
1660: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4f 66 66  ign="center">Off
1670: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
1680: 72 22 3e 4f 66 66 3c 74 64 20 61 6c 69 67 6e 3d  r">Off<td align=
1690: 22 63 65 6e 74 65 72 22 3e 4e 6f 3c 74 64 20 61  "center">No<td a
16a0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 26 6c  lign="center">&l
16b0: 74 3b 20 33 2e 32 36 2e 30 0a 3c 74 72 3e 3c 74  t; 3.26.0.<tr><t
16c0: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16d0: 3e 4f 66 66 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >Off<td align="c
16e0: 65 6e 74 65 72 22 3e 4f 66 66 3c 74 64 20 61 6c  enter">Off<td al
16f0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 59 65 73  ign="center">Yes
1700: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
1710: 72 22 3e 26 67 74 3b 3d 20 33 2e 32 36 2e 30 0a  r">&gt;= 3.26.0.
1720: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63  <tr><td align="c
1730: 65 6e 74 65 72 22 3e 4f 6e 3c 74 64 20 61 6c 69  enter">On<td ali
1740: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4f 66 66 3c  gn="center">Off<
1750: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
1760: 22 3e 59 65 73 3c 74 64 20 61 6c 69 67 6e 3d 22  ">Yes<td align="
1770: 63 65 6e 74 65 72 22 3e 61 6c 6c 0a 3c 74 72 3e  center">all.<tr>
1780: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
1790: 72 22 3e 4f 66 66 3c 74 64 20 61 6c 69 67 6e 3d  r">Off<td align=
17a0: 22 63 65 6e 74 65 72 22 3e 4f 6e 3c 74 64 20 61  "center">On<td a
17b0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 6f  lign="center">No
17c0: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
17d0: 72 22 3e 61 6c 6c 0a 3c 74 72 3e 3c 74 64 20 61  r">all.<tr><td a
17e0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4f 6e  lign="center">On
17f0: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
1800: 72 22 3e 4f 6e 3c 74 64 20 61 6c 69 67 6e 3d 22  r">On<td align="
1810: 63 65 6e 74 65 72 22 3e 59 65 73 3c 74 64 20 61  center">Yes<td a
1820: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 61 6c  lign="center">al
1830: 6c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  l.</table>.</blo
1840: 63 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68  ckquote>..<tcl>h
1850: 64 5f 66 72 61 67 6d 65 6e 74 20 61 6c 74 65 72  d_fragment alter
1860: 74 61 62 6d 76 63 6f 6c 20 7b 41 4c 54 45 52 20  tabmvcol {ALTER 
1870: 54 41 42 4c 45 20 52 45 4e 41 4d 45 20 43 4f 4c  TABLE RENAME COL
1880: 55 4d 4e 7d 20 7b 72 65 6e 61 6d 65 20 63 6f 6c  UMN} {rename col
1890: 75 6d 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 41  umn}</tcl>.<h3>A
18a0: 4c 54 45 52 20 54 41 42 4c 45 20 52 45 4e 41 4d  LTER TABLE RENAM
18b0: 45 20 43 4f 4c 55 4d 4e 3c 2f 68 33 3e 0a 0a 3c  E COLUMN</h3>..<
18c0: 70 3e 20 54 68 65 20 52 45 4e 41 4d 45 20 43 4f  p> The RENAME CO
18d0: 4c 55 4d 4e 20 54 4f 20 73 79 6e 74 61 78 20 63  LUMN TO syntax c
18e0: 68 61 6e 67 65 73 20 74 68 65 0a 3c 79 79 74 65  hanges the.<yyte
18f0: 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f  rm>column-name</
1900: 79 79 74 65 72 6d 3e 20 6f 66 20 74 61 62 6c 65  yyterm> of table
1910: 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e   <yyterm>table-n
1920: 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 69 6e 74  ame</yyterm>.int
1930: 6f 20 3c 79 79 74 65 72 6d 3e 6e 65 77 2d 63 6f  o <yyterm>new-co
1940: 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  lumn-name</yyter
1950: 6d 3e 2e 20 20 54 68 65 20 63 6f 6c 75 6d 6e 20  m>.  The column 
1960: 6e 61 6d 65 20 69 73 20 63 68 61 6e 67 65 64 20  name is changed 
1970: 62 6f 74 68 0a 77 69 74 68 69 6e 20 74 68 65 20  both.within the 
1980: 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
1990: 20 69 74 73 65 6c 66 20 61 6e 64 20 61 6c 73 6f   itself and also
19a0: 20 77 69 74 68 69 6e 20 61 6c 6c 20 69 6e 64 65   within all inde
19b0: 78 65 73 2c 20 74 72 69 67 67 65 72 73 2c 0a 61  xes, triggers,.a
19c0: 6e 64 20 76 69 65 77 73 20 74 68 61 74 20 72 65  nd views that re
19d0: 66 65 72 65 6e 63 65 20 74 68 65 20 63 6f 6c 75  ference the colu
19e0: 6d 6e 2e 20 20 49 66 20 74 68 65 20 63 6f 6c 75  mn.  If the colu
19f0: 6d 6e 20 6e 61 6d 65 20 63 68 61 6e 67 65 20 77  mn name change w
1a00: 6f 75 6c 64 0a 72 65 73 75 6c 74 20 69 6e 20 61  ould.result in a
1a10: 20 73 65 6d 61 6e 74 69 63 20 61 6d 62 69 67 75   semantic ambigu
1a20: 69 74 79 20 69 6e 20 61 20 74 72 69 67 67 65 72  ity in a trigger
1a30: 20 6f 72 20 76 69 65 77 2c 20 74 68 65 6e 20 74   or view, then t
1a40: 68 65 20 52 45 4e 41 4d 45 0a 43 4f 4c 55 4d 4e  he RENAME.COLUMN
1a50: 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65   fails with an e
1a60: 72 72 6f 72 20 61 6e 64 20 6e 6f 20 63 68 61 6e  rror and no chan
1a70: 67 65 73 20 61 72 65 20 61 70 70 6c 69 65 64 2e  ges are applied.
1a80: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
1a90: 6e 74 20 61 6c 74 65 72 74 61 62 61 64 64 63 6f  nt altertabaddco
1aa0: 6c 20 7b 41 4c 54 45 52 20 54 41 42 4c 45 20 41  l {ALTER TABLE A
1ab0: 44 44 20 43 4f 4c 55 4d 4e 7d 20 7b 61 64 64 20  DD COLUMN} {add 
1ac0: 63 6f 6c 75 6d 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68  column}</tcl>.<h
1ad0: 33 3e 41 4c 54 45 52 20 54 41 42 4c 45 20 41 44  3>ALTER TABLE AD
1ae0: 44 20 43 4f 4c 55 4d 4e 3c 2f 68 33 3e 0a 0a 3c  D COLUMN</h3>..<
1af0: 70 3e 20 5e 54 68 65 20 41 44 44 20 43 4f 4c 55  p> ^The ADD COLU
1b00: 4d 4e 20 73 79 6e 74 61 78 0a 69 73 20 75 73 65  MN syntax.is use
1b10: 64 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63  d to add a new c
1b20: 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69 73  olumn to an exis
1b30: 74 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 54 68 65  ting table..^The
1b40: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 69 73 20 61   new column is a
1b50: 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64 20 74  lways appended t
1b60: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
1b70: 20 6c 69 73 74 20 6f 66 20 65 78 69 73 74 69 6e   list of existin
1b80: 67 20 63 6f 6c 75 6d 6e 73 2e 0a 54 68 65 20 5b  g columns..The [
1b90: 63 6f 6c 75 6d 6e 2d 64 65 66 5d 20 72 75 6c 65  column-def] rule
1ba0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 68 61   defines the cha
1bb0: 72 61 63 74 65 72 69 73 74 69 63 73 20 6f 66 20  racteristics of 
1bc0: 74 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 2e 0a  the new column..
1bd0: 5e 28 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e  ^(The new column
1be0: 20 6d 61 79 20 74 61 6b 65 20 61 6e 79 20 6f 66   may take any of
1bf0: 20 74 68 65 20 66 6f 72 6d 73 20 70 65 72 6d 69   the forms permi
1c00: 73 73 69 62 6c 65 20 69 6e 20 61 20 5b 43 52 45  ssible in a [CRE
1c10: 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65  ATE TABLE].state
1c20: 6d 65 6e 74 2c 20 77 69 74 68 20 74 68 65 20 66  ment, with the f
1c30: 6f 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63  ollowing restric
1c40: 74 69 6f 6e 73 3a 29 5e 0a 3c 75 6c 3e 0a 3c 6c  tions:)^.<ul>.<l
1c50: 69 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61  i>^The column ma
1c60: 79 20 6e 6f 74 20 68 61 76 65 20 61 20 50 52 49  y not have a PRI
1c70: 4d 41 52 59 20 4b 45 59 20 6f 72 20 55 4e 49 51  MARY KEY or UNIQ
1c80: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 3c 2f  UE constraint.</
1c90: 6c 69 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c  li>.<li>^The col
1ca0: 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65  umn may not have
1cb0: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
1cc0: 20 6f 66 20 43 55 52 52 45 4e 54 5f 54 49 4d 45   of CURRENT_TIME
1cd0: 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20  , CURRENT_DATE, 
1ce0: 0a 20 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d  .    CURRENT_TIM
1cf0: 45 53 54 41 4d 50 2c 20 6f 72 20 61 6e 20 65 78  ESTAMP, or an ex
1d00: 70 72 65 73 73 69 6f 6e 20 69 6e 20 70 61 72 65  pression in pare
1d10: 6e 74 68 65 73 65 73 2e 3c 2f 6c 69 3e 0a 3c 6c  ntheses.</li>.<l
1d20: 69 3e 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c  i>^If a NOT NULL
1d30: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 73   constraint is s
1d40: 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74  pecified, then t
1d50: 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 68  he column must h
1d60: 61 76 65 20 61 0a 20 20 20 20 64 65 66 61 75 6c  ave a.    defaul
1d70: 74 20 76 61 6c 75 65 20 6f 74 68 65 72 20 74 68  t value other th
1d80: 61 6e 20 4e 55 4c 4c 2e 0a 3c 6c 69 3e 5e 49 66  an NULL..<li>^If
1d90: 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f   [foreign key co
1da0: 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65 20 5b  nstraints] are [
1db0: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70 72 61  foreign_keys pra
1dc0: 67 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d 20 61  gma | enabled] a
1dd0: 6e 64 0a 20 20 20 20 61 20 63 6f 6c 75 6d 6e 20  nd.    a column 
1de0: 77 69 74 68 20 61 20 5b 66 6f 72 65 69 67 6e 2d  with a [foreign-
1df0: 6b 65 79 2d 63 6c 61 75 73 65 20 7c 20 52 45 46  key-clause | REF
1e00: 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 5d 0a  ERENCES clause].
1e10: 20 20 20 20 69 73 20 61 64 64 65 64 2c 20 74 68      is added, th
1e20: 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 68 61  e column must ha
1e30: 76 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  ve a default val
1e40: 75 65 20 6f 66 20 4e 55 4c 4c 2e 0a 3c 2f 75 6c  ue of NULL..</ul
1e50: 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 61 6c 73 6f  >..<p>^Note also
1e60: 20 74 68 61 74 20 77 68 65 6e 20 61 64 64 69 6e   that when addin
1e70: 67 20 61 20 5b 43 48 45 43 4b 20 63 6f 6e 73 74  g a [CHECK const
1e80: 72 61 69 6e 74 5d 2c 20 74 68 65 20 43 48 45 43  raint], the CHEC
1e90: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 0a 69 73 20  K constraint.is 
1ea0: 6e 6f 74 20 74 65 73 74 65 64 20 61 67 61 69 6e  not tested again
1eb0: 73 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 72  st preexisting r
1ec0: 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ows of the table
1ed0: 2e 0a 5e 54 68 69 73 20 63 61 6e 20 72 65 73 75  ..^This can resu
1ee0: 6c 74 20 69 6e 20 61 20 74 61 62 6c 65 20 74 68  lt in a table th
1ef0: 61 74 20 63 6f 6e 74 61 69 6e 73 20 64 61 74 61  at contains data
1f00: 20 74 68 61 74 0a 69 73 20 69 6e 20 76 69 6f 6c   that.is in viol
1f10: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 43 48 45  ation of the CHE
1f20: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 20  CK constraint.  
1f30: 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  Future versions 
1f40: 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68 74 0a  of SQLite might.
1f50: 63 68 61 6e 67 65 20 74 6f 20 76 61 6c 69 64 61  change to valida
1f60: 74 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  te CHECK constra
1f70: 69 6e 74 73 20 61 73 20 74 68 65 79 20 61 72 65  ints as they are
1f80: 20 61 64 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e   added.</p>..<p>
1f90: 54 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20  The ALTER TABLE 
1fa0: 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 62 79  command works by
1fb0: 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 53   modifying the S
1fc0: 51 4c 20 74 65 78 74 20 6f 66 20 74 68 65 20 73  QL text of the s
1fd0: 63 68 65 6d 61 0a 73 74 6f 72 65 64 20 69 6e 20  chema.stored in 
1fe0: 74 68 65 20 5b 73 71 6c 69 74 65 5f 6d 61 73 74  the [sqlite_mast
1ff0: 65 72 20 74 61 62 6c 65 5d 2e 0a 4e 6f 20 63 68  er table]..No ch
2000: 61 6e 67 65 73 20 61 72 65 20 6d 61 64 65 20 74  anges are made t
2010: 6f 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 2e  o table content.
2020: 0a 42 65 63 61 75 73 65 20 6f 66 20 74 68 69 73  .Because of this
2030: 2c 0a 74 68 65 20 65 78 65 63 75 74 69 6f 6e 20  ,.the execution 
2040: 74 69 6d 65 20 6f 66 20 74 68 65 20 41 4c 54 45  time of the ALTE
2050: 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  R TABLE command 
2060: 69 73 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 6f  is independent o
2070: 66 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  f.the amount of 
2080: 64 61 74 61 20 69 6e 20 74 68 65 20 74 61 62 6c  data in the tabl
2090: 65 2e 20 20 54 68 65 20 41 4c 54 45 52 20 54 41  e.  The ALTER TA
20a0: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73  BLE command runs
20b0: 20 61 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20 61   as quickly.on a
20c0: 20 74 61 62 6c 65 20 77 69 74 68 20 31 30 20 6d   table with 10 m
20d0: 69 6c 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20 69  illion rows as i
20e0: 74 20 64 6f 65 73 20 6f 6e 20 61 20 74 61 62 6c  t does on a tabl
20f0: 65 20 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c 2f  e with 1 row..</
2100: 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44 44  p>..<p>After ADD
2110: 20 43 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65 6e   COLUMN has been
2120: 20 72 75 6e 20 6f 6e 20 61 20 64 61 74 61 62 61   run on a databa
2130: 73 65 2c 20 74 68 61 74 20 64 61 74 61 62 61 73  se, that databas
2140: 65 20 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72 65  e will not.be re
2150: 61 64 61 62 6c 65 20 62 79 20 53 51 4c 69 74 65  adable by SQLite
2160: 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20 28   version 3.1.3 (
2170: 5b 64 61 74 65 6f 66 3a 33 2e 31 2e 33 5d 29 20  [dateof:3.1.3]) 
2180: 61 6e 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70 3e  and earlier.</p>
2190: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
21a0: 6e 74 20 6f 74 68 65 72 61 6c 74 65 72 20 7b 67  nt otheralter {g
21b0: 65 6e 65 72 61 6c 69 7a 65 64 20 41 4c 54 45 52  eneralized ALTER
21c0: 20 54 41 42 4c 45 20 70 72 6f 63 65 64 75 72 65   TABLE procedure
21d0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4d 61 6b 69  }</tcl>.<h3>Maki
21e0: 6e 67 20 4f 74 68 65 72 20 4b 69 6e 64 73 20 4f  ng Other Kinds O
21f0: 66 20 54 61 62 6c 65 20 53 63 68 65 6d 61 20 43  f Table Schema C
2200: 68 61 6e 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  hanges</h3>..<p>
2210: 20 54 68 65 20 6f 6e 6c 79 20 73 63 68 65 6d 61   The only schema
2220: 20 61 6c 74 65 72 69 6e 67 20 63 6f 6d 6d 61 6e   altering comman
2230: 64 73 20 64 69 72 65 63 74 6c 79 20 73 75 70 70  ds directly supp
2240: 6f 72 74 65 64 20 62 79 20 53 51 4c 69 74 65 20  orted by SQLite 
2250: 61 72 65 20 74 68 65 0a 22 5b 72 65 6e 61 6d 65  are the."[rename
2260: 20 74 61 62 6c 65 5d 22 2c 20 22 5b 72 65 6e 61   table]", "[rena
2270: 6d 65 20 63 6f 6c 75 6d 6e 5d 22 2c 20 61 6e 64  me column]", and
2280: 20 22 5b 61 64 64 20 63 6f 6c 75 6d 6e 5d 22 20   "[add column]" 
2290: 63 6f 6d 6d 61 6e 64 73 20 73 68 6f 77 6e 20 61  commands shown a
22a0: 62 6f 76 65 2e 20 20 0a 48 6f 77 65 76 65 72 2c  bove.  .However,
22b0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 63 61   applications.ca
22c0: 6e 20 6d 61 6b 65 20 6f 74 68 65 72 20 61 72 62  n make other arb
22d0: 69 74 72 61 72 79 20 63 68 61 6e 67 65 73 20 74  itrary changes t
22e0: 6f 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  o the format of 
22f0: 61 20 74 61 62 6c 65 20 75 73 69 6e 67 20 61 20  a table using a 
2300: 73 69 6d 70 6c 65 0a 73 65 71 75 65 6e 63 65 20  simple.sequence 
2310: 6f 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 54  of operations..T
2320: 68 65 20 73 74 65 70 73 20 74 6f 20 6d 61 6b 65  he steps to make
2330: 20 61 72 62 69 74 72 61 72 79 20 63 68 61 6e 67   arbitrary chang
2340: 65 73 20 74 6f 20 74 68 65 20 73 63 68 65 6d 61  es to the schema
2350: 20 64 65 73 69 67 6e 20 6f 66 20 73 6f 6d 65 20   design of some 
2360: 74 61 62 6c 65 20 58 0a 61 72 65 20 61 73 20 66  table X.are as f
2370: 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c  ollows:..<ol>.<l
2380: 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65 69 67 6e  i><p>.If foreign
2390: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
23a0: 20 61 72 65 20 65 6e 61 62 6c 65 64 2c 20 64 69   are enabled, di
23b0: 73 61 62 6c 65 20 74 68 65 6d 20 75 73 69 6e 67  sable them using
23c0: 20 5b 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e   [PRAGMA foreign
23d0: 5f 6b 65 79 73 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69  _keys=OFF]...<li
23e0: 3e 3c 70 3e 0a 53 74 61 72 74 20 61 20 74 72 61  ><p>.Start a tra
23f0: 6e 73 61 63 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c  nsaction...<li><
2400: 70 3e 0a 52 65 6d 65 6d 62 65 72 20 74 68 65 20  p>.Remember the 
2410: 66 6f 72 6d 61 74 20 6f 66 20 61 6c 6c 20 69 6e  format of all in
2420: 64 65 78 65 73 20 61 6e 64 20 74 72 69 67 67 65  dexes and trigge
2430: 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
2440: 74 68 20 74 61 62 6c 65 20 58 2e 0a 54 68 69 73  th table X..This
2450: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 77 69 6c   information wil
2460: 6c 20 62 65 20 6e 65 65 64 65 64 20 69 6e 20 73  l be needed in s
2470: 74 65 70 20 38 20 62 65 6c 6f 77 2e 20 20 4f 6e  tep 8 below.  On
2480: 65 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  e way to do this
2490: 20 69 73 0a 74 6f 20 72 75 6e 20 61 20 71 75 65   is.to run a que
24a0: 72 79 20 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c  ry like the foll
24b0: 6f 77 69 6e 67 3a 0a 53 45 4c 45 43 54 20 74 79  owing:.SELECT ty
24c0: 70 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  pe, sql FROM sql
24d0: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
24e0: 20 74 62 6c 5f 6e 61 6d 65 3d 27 58 27 2e 0a 0a   tbl_name='X'...
24f0: 3c 6c 69 3e 3c 70 3e 0a 55 73 65 20 5b 43 52 45  <li><p>.Use [CRE
2500: 41 54 45 20 54 41 42 4c 45 5d 20 74 6f 20 63 6f  ATE TABLE] to co
2510: 6e 73 74 72 75 63 74 20 61 20 6e 65 77 20 74 61  nstruct a new ta
2520: 62 6c 65 20 22 6e 65 77 5f 58 22 20 74 68 61 74  ble "new_X" that
2530: 20 69 73 20 69 6e 20 74 68 65 20 64 65 73 69 72   is in the desir
2540: 65 64 0a 72 65 76 69 73 65 64 20 66 6f 72 6d 61  ed.revised forma
2550: 74 20 6f 66 20 74 61 62 6c 65 20 58 2e 20 20 4d  t of table X.  M
2560: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
2570: 65 20 6e 61 6d 65 20 22 6e 65 77 5f 58 22 20 64  e name "new_X" d
2580: 6f 65 73 20 6e 6f 74 20 63 6f 6c 6c 69 64 65 0a  oes not collide.
2590: 77 69 74 68 20 61 6e 79 20 65 78 69 73 74 69 6e  with any existin
25a0: 67 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20 6f 66  g table name, of
25b0: 20 63 6f 75 72 73 65 2e 0a 0a 3c 6c 69 3e 3c 70   course...<li><p
25c0: 3e 0a 54 72 61 6e 73 66 65 72 20 63 6f 6e 74 65  >.Transfer conte
25d0: 6e 74 20 66 72 6f 6d 20 58 20 69 6e 74 6f 20 6e  nt from X into n
25e0: 65 77 5f 58 20 75 73 69 6e 67 20 61 20 73 74 61  ew_X using a sta
25f0: 74 65 6d 65 6e 74 0a 6c 69 6b 65 3a 20 49 4e 53  tement.like: INS
2600: 45 52 54 20 49 4e 54 4f 20 6e 65 77 5f 58 20 53  ERT INTO new_X S
2610: 45 4c 45 43 54 20 2e 2e 2e 20 46 52 4f 4d 20 58  ELECT ... FROM X
2620: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 44 72 6f 70 20  ...<li><p>.Drop 
2630: 74 68 65 20 6f 6c 64 20 74 61 62 6c 65 20 58 3a  the old table X:
2640: 20 20 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20    [DROP TABLE | 
2650: 44 52 4f 50 20 54 41 42 4c 45 20 58 5d 2e 0a 0a  DROP TABLE X]...
2660: 3c 6c 69 3e 3c 70 3e 0a 43 68 61 6e 67 65 20 74  <li><p>.Change t
2670: 68 65 20 6e 61 6d 65 20 6f 66 20 6e 65 77 5f 58  he name of new_X
2680: 20 74 6f 20 58 20 75 73 69 6e 67 3a 20 41 4c 54   to X using: ALT
2690: 45 52 20 54 41 42 4c 45 20 6e 65 77 5f 58 20 52  ER TABLE new_X R
26a0: 45 4e 41 4d 45 20 54 4f 20 58 2e 0a 0a 3c 6c 69  ENAME TO X...<li
26b0: 3e 3c 70 3e 0a 55 73 65 20 5b 43 52 45 41 54 45  ><p>.Use [CREATE
26c0: 20 49 4e 44 45 58 5d 20 61 6e 64 20 5b 43 52 45   INDEX] and [CRE
26d0: 41 54 45 20 54 52 49 47 47 45 52 5d 20 74 6f 20  ATE TRIGGER] to 
26e0: 72 65 63 6f 6e 73 74 72 75 63 74 20 69 6e 64 65  reconstruct inde
26f0: 78 65 73 20 61 6e 64 20 74 72 69 67 67 65 72 73  xes and triggers
2700: 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68  .associated with
2710: 20 74 61 62 6c 65 20 58 2e 20 20 50 65 72 68 61   table X.  Perha
2720: 70 73 20 75 73 65 20 74 68 65 20 6f 6c 64 20 66  ps use the old f
2730: 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 74 72 69  ormat of the tri
2740: 67 67 65 72 73 20 61 6e 64 0a 69 6e 64 65 78 65  ggers and.indexe
2750: 73 20 73 61 76 65 64 20 66 72 6f 6d 20 73 74 65  s saved from ste
2760: 70 20 33 20 61 62 6f 76 65 20 61 73 20 61 20 67  p 3 above as a g
2770: 75 69 64 65 2c 20 6d 61 6b 69 6e 67 20 63 68 61  uide, making cha
2780: 6e 67 65 73 20 61 73 20 61 70 70 72 6f 70 72 69  nges as appropri
2790: 61 74 65 0a 66 6f 72 20 74 68 65 20 61 6c 74 65  ate.for the alte
27a0: 72 61 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e  ration...<li><p>
27b0: 49 66 20 61 6e 79 20 76 69 65 77 73 20 72 65 66  If any views ref
27c0: 65 72 20 74 6f 20 74 61 62 6c 65 20 58 20 69 6e  er to table X in
27d0: 20 61 20 77 61 79 20 74 68 61 74 20 69 73 20 61   a way that is a
27e0: 66 66 65 63 74 65 64 20 62 79 20 74 68 65 0a 73  ffected by the.s
27f0: 63 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 74 68  chema change, th
2800: 65 6e 20 64 72 6f 70 20 74 68 6f 73 65 20 76 69  en drop those vi
2810: 65 77 73 20 75 73 69 6e 67 20 5b 44 52 4f 50 20  ews using [DROP 
2820: 56 49 45 57 5d 20 61 6e 64 20 72 65 63 72 65 61  VIEW] and recrea
2830: 74 65 20 74 68 65 6d 0a 77 69 74 68 20 77 68 61  te them.with wha
2840: 74 65 76 65 72 20 63 68 61 6e 67 65 73 20 61 72  tever changes ar
2850: 65 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 61  e necessary to a
2860: 63 63 6f 6d 6d 6f 64 61 74 65 20 74 68 65 20 73  ccommodate the s
2870: 63 68 65 6d 61 20 63 68 61 6e 67 65 0a 75 73 69  chema change.usi
2880: 6e 67 20 5b 43 52 45 41 54 45 20 56 49 45 57 5d  ng [CREATE VIEW]
2890: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f  ...<li><p>.If fo
28a0: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
28b0: 61 69 6e 74 73 20 77 65 72 65 20 6f 72 69 67 69  aints were origi
28c0: 6e 61 6c 6c 79 20 65 6e 61 62 6c 65 64 0a 74 68  nally enabled.th
28d0: 65 6e 20 72 75 6e 20 5b 50 52 41 47 4d 41 20 66  en run [PRAGMA f
28e0: 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b  oreign_key_check
28f0: 5d 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ] to verify that
2900: 20 74 68 65 20 73 63 68 65 6d 61 0a 63 68 61 6e   the schema.chan
2910: 67 65 20 64 69 64 20 6e 6f 74 20 62 72 65 61 6b  ge did not break
2920: 20 61 6e 79 20 66 6f 72 65 69 67 6e 20 6b 65 79   any foreign key
2930: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 0a   constraints....
2940: 3c 6c 69 3e 3c 70 3e 0a 43 6f 6d 6d 69 74 20 74  <li><p>.Commit t
2950: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
2960: 74 61 72 74 65 64 20 69 6e 20 73 74 65 70 20 32  tarted in step 2
2970: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f  ...<li><p>.If fo
2980: 72 65 69 67 6e 20 6b 65 79 73 20 63 6f 6e 73 74  reign keys const
2990: 72 61 69 6e 74 73 20 77 65 72 65 20 6f 72 69 67  raints were orig
29a0: 69 6e 61 6c 6c 79 20 65 6e 61 62 6c 65 64 2c 20  inally enabled, 
29b0: 72 65 65 6e 61 62 6c 65 20 74 68 65 6d 20 6e 6f  reenable them no
29c0: 77 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68  w..</ol>..<tcl>h
29d0: 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 75 74 69  d_fragment cauti
29e0: 6f 6e 3c 2f 74 63 6c 3e 0a 3c 70 3e 0a 3c 62 3e  on</tcl>.<p>.<b>
29f0: 43 61 75 74 69 6f 6e 3a 3c 2f 62 3e 0a 54 61 6b  Caution:</b>.Tak
2a00: 65 20 63 61 72 65 20 74 6f 20 66 6f 6c 6c 6f 77  e care to follow
2a10: 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 61   the procedure a
2a20: 62 6f 76 65 20 70 72 65 63 69 73 65 6c 79 2e 20  bove precisely. 
2a30: 20 54 68 65 20 62 6f 78 65 73 20 62 65 6c 6f 77   The boxes below
2a40: 0a 73 75 6d 6d 61 72 69 7a 65 20 74 77 6f 20 70  .summarize two p
2a50: 72 6f 63 65 64 75 72 65 73 20 66 6f 72 20 6d 6f  rocedures for mo
2a60: 64 69 66 79 69 6e 67 20 61 20 74 61 62 6c 65 20  difying a table 
2a70: 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20 41 74 20  definition.  At 
2a80: 66 69 72 73 74 0a 67 6c 61 6e 63 65 2c 20 74 68  first.glance, th
2a90: 65 79 20 62 6f 74 68 20 61 70 70 65 61 72 20 74  ey both appear t
2aa0: 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20 74 68 65  o accomplish the
2ab0: 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 48 6f   same thing.  Ho
2ac0: 77 65 76 65 72 2c 20 74 68 65 0a 70 72 6f 63 65  wever, the.proce
2ad0: 64 75 72 65 20 6f 6e 20 74 68 65 20 72 69 67 68  dure on the righ
2ae0: 74 20 64 6f 65 73 20 6e 6f 74 20 61 6c 77 61 79  t does not alway
2af0: 73 20 77 6f 72 6b 2c 20 65 73 70 65 63 69 61 6c  s work, especial
2b00: 6c 79 20 77 69 74 68 20 74 68 65 0a 65 6e 68 61  ly with the.enha
2b10: 6e 63 65 64 20 5b 72 65 6e 61 6d 65 20 74 61 62  nced [rename tab
2b20: 6c 65 5d 20 63 61 70 61 62 69 6c 69 74 69 65 73  le] capabilities
2b30: 20 61 64 64 65 64 20 62 79 20 76 65 72 73 69 6f   added by versio
2b40: 6e 73 20 33 2e 32 35 2e 30 20 61 6e 64 0a 33 2e  ns 3.25.0 and.3.
2b50: 32 36 2e 30 2e 20 20 49 6e 20 74 68 65 20 70 72  26.0.  In the pr
2b60: 6f 63 65 64 75 72 65 20 6f 6e 20 74 68 65 20 72  ocedure on the r
2b70: 69 67 68 74 2c 20 74 68 65 20 69 6e 69 74 69 61  ight, the initia
2b80: 6c 20 72 65 6e 61 6d 65 20 6f 66 20 74 68 65 0a  l rename of the.
2b90: 74 61 62 6c 65 20 74 6f 20 61 20 74 65 6d 70 6f  table to a tempo
2ba0: 72 61 72 79 20 6e 61 6d 65 20 6d 69 67 68 74 20  rary name might 
2bb0: 63 6f 72 72 75 70 74 20 72 65 66 65 72 65 6e 63  corrupt referenc
2bc0: 65 73 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65  es to that table
2bd0: 20 69 6e 0a 74 72 69 67 67 65 72 73 2c 20 76 69   in.triggers, vi
2be0: 65 77 73 2c 20 61 6e 64 20 66 6f 72 65 69 67 6e  ews, and foreign
2bf0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2c00: 2e 20 20 54 68 65 20 73 61 66 65 20 70 72 6f 63  .  The safe proc
2c10: 65 64 75 72 65 20 6f 6e 0a 74 68 65 20 6c 65 66  edure on.the lef
2c20: 74 20 63 6f 6e 73 74 72 75 63 74 73 20 74 68 65  t constructs the
2c30: 20 72 65 76 69 73 65 64 20 74 61 62 6c 65 20 64   revised table d
2c40: 65 66 69 6e 69 74 69 6f 6e 20 75 73 69 6e 67 20  efinition using 
2c50: 61 20 6e 65 77 20 74 65 6d 70 6f 72 61 72 79 0a  a new temporary.
2c60: 6e 61 6d 65 2c 20 74 68 65 6e 20 72 65 6e 61 6d  name, then renam
2c70: 65 73 20 74 68 65 20 74 61 62 6c 65 20 69 6e 74  es the table int
2c80: 6f 20 69 74 73 20 66 69 6e 61 6c 20 6e 61 6d 65  o its final name
2c90: 2c 20 77 68 69 63 68 20 64 6f 65 73 20 6e 6f 74  , which does not
2ca0: 20 62 72 65 61 6b 0a 6c 69 6e 6b 73 2e 0a 0a 3c   break.links...<
2cb0: 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62  center>.<table b
2cc0: 6f 72 64 65 72 3d 22 31 22 20 63 65 6c 6c 70 61  order="1" cellpa
2cd0: 64 64 69 6e 67 3d 22 31 30 22 20 63 65 6c 6c 73  dding="10" cells
2ce0: 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e  pacing="0">.<tr>
2cf0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
2d00: 22 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 43 72 65 61  ">.<ol>.<li>Crea
2d10: 74 65 20 6e 65 77 20 74 61 62 6c 65 0a 3c 6c 69  te new table.<li
2d20: 3e 43 6f 70 79 20 64 61 74 61 0a 3c 6c 69 3e 44  >Copy data.<li>D
2d30: 72 6f 70 20 6f 6c 64 20 74 61 62 6c 65 0a 3c 6c  rop old table.<l
2d40: 69 3e 52 65 6e 61 6d 65 20 6e 65 77 20 69 6e 74  i>Rename new int
2d50: 6f 20 6f 6c 64 0a 3c 2f 6f 6c 3e 0a 3c 74 64 20  o old.</ol>.<td 
2d60: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 3c 6f  valign="top">.<o
2d70: 6c 3e 0a 3c 6c 69 3e 52 65 6e 61 6d 65 20 6f 6c  l>.<li>Rename ol
2d80: 64 20 74 61 62 6c 65 0a 3c 6c 69 3e 43 72 65 61  d table.<li>Crea
2d90: 74 65 20 6e 65 77 20 74 61 62 6c 65 0a 3c 6c 69  te new table.<li
2da0: 3e 43 6f 70 79 20 64 61 74 61 0a 3c 6c 69 3e 44  >Copy data.<li>D
2db0: 72 6f 70 20 6f 6c 64 20 74 61 62 6c 65 0a 3c 2f  rop old table.</
2dc0: 6f 6c 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 26 75 61  ol>.<tr>.<th>&ua
2dd0: 72 72 3b 3c 62 72 3e 43 6f 72 72 65 63 74 0a 3c  rr;<br>Correct.<
2de0: 74 68 3e 26 75 61 72 72 3b 3c 62 72 3e 49 6e 63  th>&uarr;<br>Inc
2df0: 6f 72 72 65 63 74 0a 3c 2f 74 61 62 6c 65 3e 0a  orrect.</table>.
2e00: 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 54 68  </center>..<p>Th
2e10: 65 20 31 32 2d 73 74 65 70 20 5b 67 65 6e 65 72  e 12-step [gener
2e20: 61 6c 69 7a 65 64 20 41 4c 54 45 52 20 54 41 42  alized ALTER TAB
2e30: 4c 45 20 70 72 6f 63 65 64 75 72 65 5d 0a 61 62  LE procedure].ab
2e40: 6f 76 65 20 77 69 6c 6c 20 77 6f 72 6b 20 65 76  ove will work ev
2e50: 65 6e 20 69 66 20 74 68 65 0a 73 63 68 65 6d 61  en if the.schema
2e60: 20 63 68 61 6e 67 65 20 63 61 75 73 65 73 20 74   change causes t
2e70: 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73  he information s
2e80: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 74 61 62  tored in the tab
2e90: 6c 65 20 74 6f 20 63 68 61 6e 67 65 2e 0a 53 6f  le to change..So
2ea0: 20 74 68 65 20 66 75 6c 6c 20 31 32 2d 73 74 65   the full 12-ste
2eb0: 70 20 70 72 6f 63 65 64 75 72 65 20 61 62 6f 76  p procedure abov
2ec0: 65 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  e is appropriate
2ed0: 20 66 6f 72 20 64 72 6f 70 70 69 6e 67 20 61 20   for dropping a 
2ee0: 63 6f 6c 75 6d 6e 2c 0a 63 68 61 6e 67 69 6e 67  column,.changing
2ef0: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f   the order of co
2f00: 6c 75 6d 6e 73 2c 20 61 64 64 69 6e 67 20 6f 72  lumns, adding or
2f10: 20 72 65 6d 6f 76 69 6e 67 20 61 20 55 4e 49 51   removing a UNIQ
2f20: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 0a 6f 72  UE constraint.or
2f30: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 61 64   PRIMARY KEY, ad
2f40: 64 69 6e 67 20 43 48 45 43 4b 20 6f 72 20 46 4f  ding CHECK or FO
2f50: 52 45 49 47 4e 20 4b 45 59 20 6f 72 20 4e 4f 54  REIGN KEY or NOT
2f60: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
2f70: 73 2c 0a 6f 72 20 63 68 61 6e 67 69 6e 67 20 74  s,.or changing t
2f80: 68 65 20 64 61 74 61 74 79 70 65 20 66 6f 72 20  he datatype for 
2f90: 61 20 63 6f 6c 75 6d 6e 2c 20 66 6f 72 20 65 78  a column, for ex
2fa0: 61 6d 70 6c 65 2e 20 20 48 6f 77 65 76 65 72 2c  ample.  However,
2fb0: 20 61 20 73 69 6d 70 6c 65 72 0a 61 6e 64 20 66   a simpler.and f
2fc0: 61 73 74 65 72 20 70 72 6f 63 65 64 75 72 65 20  aster procedure 
2fd0: 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62  can optionally b
2fe0: 65 20 75 73 65 64 20 66 6f 72 0a 73 6f 6d 65 20  e used for.some 
2ff0: 63 68 61 6e 67 65 73 20 74 68 61 74 20 64 6f 20  changes that do 
3000: 6e 6f 20 61 66 66 65 63 74 20 74 68 65 20 6f 6e  no affect the on
3010: 2d 64 69 73 6b 20 63 6f 6e 74 65 6e 74 20 69 6e  -disk content in
3020: 20 61 6e 79 20 77 61 79 2e 0a 54 68 65 20 66 6f   any way..The fo
3030: 6c 6c 6f 77 69 6e 67 20 73 69 6d 70 6c 65 72 20  llowing simpler 
3040: 70 72 6f 63 65 64 75 72 65 20 69 73 20 61 70 70  procedure is app
3050: 72 6f 70 72 69 61 74 65 20 66 6f 72 20 72 65 6d  ropriate for rem
3060: 6f 76 69 6e 67 0a 43 48 45 43 4b 20 6f 72 20 46  oving.CHECK or F
3070: 4f 52 45 49 47 4e 20 4b 45 59 20 6f 72 20 4e 4f  OREIGN KEY or NO
3080: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
3090: 74 73 2c 0a 6f 72 20 61 64 64 69 6e 67 2c 20 72  ts,.or adding, r
30a0: 65 6d 6f 76 69 6e 67 2c 20 6f 72 20 63 68 61 6e  emoving, or chan
30b0: 67 69 6e 67 20 64 65 66 61 75 6c 74 20 76 61 6c  ging default val
30c0: 75 65 73 20 6f 6e 0a 61 20 63 6f 6c 75 6d 6e 2e  ues on.a column.
30d0: 0a 0a 3c 6f 6c 3e 0a 3c 6c 49 3e 3c 70 3e 20 53  ..<ol>.<lI><p> S
30e0: 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
30f0: 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 52 75 6e  on...<li><p> Run
3100: 20 5b 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f   [PRAGMA schema_
3110: 76 65 72 73 69 6f 6e 5d 20 74 6f 20 64 65 74 65  version] to dete
3120: 72 6d 69 6e 65 20 74 68 65 20 63 75 72 72 65 6e  rmine the curren
3130: 74 20 73 63 68 65 6d 61 0a 76 65 72 73 69 6f 6e  t schema.version
3140: 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6e   number.  This n
3150: 75 6d 62 65 72 20 77 69 6c 6c 20 62 65 20 6e 65  umber will be ne
3160: 65 64 65 64 20 66 6f 72 20 73 74 65 70 20 36 20  eded for step 6 
3170: 62 65 6c 6f 77 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20  below...<li><p> 
3180: 41 63 74 69 76 61 74 65 20 73 63 68 65 6d 61 20  Activate schema 
3190: 65 64 69 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b  editing using .[
31a0: 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f  PRAGMA writable_
31b0: 73 63 68 65 6d 61 20 7c 20 50 52 41 47 4d 41 20  schema | PRAGMA 
31c0: 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d  writable_schema=
31d0: 4f 4e 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 52 75  ON]...<li><p> Ru
31e0: 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 73 74  n an [UPDATE] st
31f0: 61 74 65 6d 65 6e 74 20 74 6f 20 63 68 61 6e 67  atement to chang
3200: 65 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e  e the definition
3210: 20 6f 66 20 74 61 62 6c 65 20 58 0a 69 6e 20 74   of table X.in t
3220: 68 65 20 5b 73 71 6c 69 74 65 5f 6d 61 73 74 65  he [sqlite_maste
3230: 72 20 74 61 62 6c 65 5d 3a 20 0a 55 50 44 41 54  r table]: .UPDAT
3240: 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  E sqlite_master 
3250: 53 45 54 20 73 71 6c 3d 2e 2e 2e 20 57 48 45 52  SET sql=... WHER
3260: 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20 41  E type='table' A
3270: 4e 44 20 6e 61 6d 65 3d 27 58 27 3b 0a 3c 70 3e  ND name='X';.<p>
3280: 3c 65 6d 3e 43 61 75 74 69 6f 6e 3a 3c 2f 65 6d  <em>Caution:</em
3290: 3e 20 20 4d 61 6b 69 6e 67 20 61 20 63 68 61 6e  >  Making a chan
32a0: 67 65 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  ge to the sqlite
32b0: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 6c 69  _master table li
32c0: 6b 65 20 74 68 69 73 20 77 69 6c 6c 0a 72 65 6e  ke this will.ren
32d0: 64 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  der the database
32e0: 20 63 6f 72 72 75 70 74 20 61 6e 64 20 75 6e 72   corrupt and unr
32f0: 65 61 64 61 62 6c 65 20 69 66 20 74 68 65 20 63  eadable if the c
3300: 68 61 6e 67 65 20 63 6f 6e 74 61 69 6e 73 0a 61  hange contains.a
3310: 20 73 79 6e 74 61 78 20 65 72 72 6f 72 2e 20 20   syntax error.  
3320: 49 74 20 69 73 20 73 75 67 67 65 73 74 65 64 20  It is suggested 
3330: 74 68 61 74 20 63 61 72 65 66 75 6c 20 74 65 73  that careful tes
3340: 74 69 6e 67 20 6f 66 20 74 68 65 20 55 50 44 41  ting of the UPDA
3350: 54 45 0a 73 74 61 74 65 6d 65 6e 74 20 62 65 20  TE.statement be 
3360: 64 6f 6e 65 20 6f 6e 20 61 20 73 65 70 61 72 61  done on a separa
3370: 74 65 20 62 6c 61 6e 6b 20 64 61 74 61 62 61 73  te blank databas
3380: 65 20 70 72 69 6f 72 20 74 6f 20 75 73 69 6e 67  e prior to using
3390: 20 69 74 20 6f 6e 0a 61 20 64 61 74 61 62 61 73   it on.a databas
33a0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6d 70  e containing imp
33b0: 6f 72 74 61 6e 74 20 64 61 74 61 2e 0a 0a 3c 6c  ortant data...<l
33c0: 69 3e 3c 70 3e 20 49 66 20 74 68 65 20 63 68 61  i><p> If the cha
33d0: 6e 67 65 20 74 6f 20 74 61 62 6c 65 20 58 20 61  nge to table X a
33e0: 6c 73 6f 20 61 66 66 65 63 74 73 20 6f 74 68 65  lso affects othe
33f0: 72 20 74 61 62 6c 65 73 20 6f 72 20 69 6e 64 65  r tables or inde
3400: 78 65 73 20 6f 72 0a 74 72 69 67 67 65 72 73 20  xes or.triggers 
3410: 61 72 65 20 76 69 65 77 73 20 77 69 74 68 69 6e  are views within
3420: 20 73 63 68 65 6d 61 2c 20 74 68 65 6e 20 72 75   schema, then ru
3430: 6e 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65  n [UPDATE] state
3440: 6d 65 6e 74 73 20 74 6f 20 6d 6f 64 69 66 79 0a  ments to modify.
3450: 74 68 6f 73 65 20 6f 74 68 65 72 20 74 61 62 6c  those other tabl
3460: 65 73 20 69 6e 64 65 78 65 73 20 61 6e 64 20 76  es indexes and v
3470: 69 65 77 73 20 74 6f 6f 2e 20 20 46 6f 72 20 65  iews too.  For e
3480: 78 61 6d 70 6c 65 2c 20 69 66 20 74 68 65 20 6e  xample, if the n
3490: 61 6d 65 20 6f 66 0a 61 20 63 6f 6c 75 6d 6e 20  ame of.a column 
34a0: 63 68 61 6e 67 65 73 2c 20 61 6c 6c 20 46 4f 52  changes, all FOR
34b0: 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61  EIGN KEY constra
34c0: 69 6e 74 73 2c 20 74 72 69 67 67 65 72 73 2c 20  ints, triggers, 
34d0: 69 6e 64 65 78 65 73 2c 20 61 6e 64 0a 76 69 65  indexes, and.vie
34e0: 77 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f  ws that refer to
34f0: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 6d 75 73   that column mus
3500: 74 20 62 65 20 6d 6f 64 69 66 69 65 64 2e 0a 3c  t be modified..<
3510: 70 3e 3c 65 6d 3e 43 61 75 74 69 6f 6e 3a 3c 2f  p><em>Caution:</
3520: 65 6d 3e 20 20 4f 6e 63 65 20 61 67 61 69 6e 2c  em>  Once again,
3530: 20 6d 61 6b 69 6e 67 20 63 68 61 6e 67 65 73 20   making changes 
3540: 74 6f 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  to the sqlite_ma
3550: 73 74 65 72 20 0a 74 61 62 6c 65 20 6c 69 6b 65  ster .table like
3560: 20 74 68 69 73 20 77 69 6c 6c 20 72 65 6e 64 65   this will rende
3570: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  r the database c
3580: 6f 72 72 75 70 74 20 61 6e 64 20 75 6e 72 65 61  orrupt and unrea
3590: 64 61 62 6c 65 20 69 66 20 74 68 65 20 0a 63 68  dable if the .ch
35a0: 61 6e 67 65 20 63 6f 6e 74 61 69 6e 73 20 61 6e  ange contains an
35b0: 20 65 72 72 6f 72 2e 20 20 43 61 72 65 66 75 6c   error.  Careful
35c0: 6c 79 20 74 65 73 74 20 74 68 69 73 20 65 6e 74  ly test this ent
35d0: 69 72 65 20 70 72 6f 63 65 64 75 72 65 0a 6f 6e  ire procedure.on
35e0: 20 61 20 73 65 70 61 72 61 74 65 20 74 65 73 74   a separate test
35f0: 20 64 61 74 61 62 61 73 65 20 70 72 69 6f 72 20   database prior 
3600: 74 6f 20 75 73 69 6e 67 20 69 74 20 6f 6e 0a 61  to using it on.a
3610: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69   database contai
3620: 6e 69 6e 67 20 69 6d 70 6f 72 74 61 6e 74 20 64  ning important d
3630: 61 74 61 20 61 6e 64 2f 6f 72 20 6d 61 6b 65 20  ata and/or make 
3640: 62 61 63 6b 75 70 20 63 6f 70 69 65 73 20 6f 66  backup copies of
3650: 0a 69 6d 70 6f 72 74 61 6e 74 20 64 61 74 61 62  .important datab
3660: 61 73 65 73 20 70 72 69 6f 72 20 74 6f 20 72 75  ases prior to ru
3670: 6e 6e 69 6e 67 20 74 68 69 73 20 70 72 6f 63 65  nning this proce
3680: 64 75 72 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49  dure...<li><p> I
3690: 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 73 63 68  ncrement the sch
36a0: 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ema version numb
36b0: 65 72 20 75 73 69 6e 67 0a 5b 50 52 41 47 4d 41  er using.[PRAGMA
36c0: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20   schema_version 
36d0: 7c 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f  | PRAGMA schema_
36e0: 76 65 72 73 69 6f 6e 3d 58 5d 20 77 68 65 72 65  version=X] where
36f0: 20 58 20 69 73 20 6f 6e 65 0a 6d 6f 72 65 20 74   X is one.more t
3700: 68 61 6e 20 74 68 65 20 6f 6c 64 20 73 63 68 65  han the old sche
3710: 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
3720: 72 20 66 6f 75 6e 64 20 69 6e 20 73 74 65 70 20  r found in step 
3730: 32 20 61 62 6f 76 65 2e 0a 0a 3c 6c 69 3e 3c 70  2 above...<li><p
3740: 3e 20 44 69 73 61 62 6c 65 20 73 63 68 65 6d 61  > Disable schema
3750: 20 65 64 69 74 69 6e 67 20 75 73 69 6e 67 20 0a   editing using .
3760: 5b 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65  [PRAGMA writable
3770: 5f 73 63 68 65 6d 61 20 7c 20 50 52 41 47 4d 41  _schema | PRAGMA
3780: 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
3790: 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20  =OFF]...<li><p> 
37a0: 28 4f 70 74 69 6f 6e 61 6c 29 20 52 75 6e 20 5b  (Optional) Run [
37b0: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
37c0: 5f 63 68 65 63 6b 5d 20 74 6f 20 76 65 72 69 66  _check] to verif
37d0: 79 20 74 68 61 74 20 74 68 65 0a 73 63 68 65 6d  y that the.schem
37e0: 61 20 63 68 61 6e 67 65 73 20 64 69 64 20 6e 6f  a changes did no
37f0: 74 20 64 61 6d 61 67 65 20 74 68 65 20 64 61 74  t damage the dat
3800: 61 62 61 73 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20  abase...<li><p> 
3810: 43 6f 6d 6d 69 74 20 74 68 65 20 74 72 61 6e 73  Commit the trans
3820: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 6f  action started o
3830: 6e 20 73 74 65 70 20 31 20 61 62 6f 76 65 2e 0a  n step 1 above..
3840: 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 66 20 73 6f 6d  </ol>..<p>If som
3850: 65 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e  e future version
3860: 20 6f 66 20 53 51 4c 69 74 65 20 61 64 64 73 20   of SQLite adds 
3870: 6e 65 77 20 41 4c 54 45 52 20 54 41 42 4c 45 20  new ALTER TABLE 
3880: 63 61 70 61 62 69 6c 69 74 69 65 73 2c 20 0a 74  capabilities, .t
3890: 68 6f 73 65 20 63 61 70 61 62 69 6c 69 74 69 65  hose capabilitie
38a0: 73 20 77 69 6c 6c 20 76 65 72 79 20 6c 69 6b 65  s will very like
38b0: 6c 79 20 75 73 65 20 6f 6e 65 20 6f 66 20 74 68  ly use one of th
38c0: 65 20 74 77 6f 20 70 72 6f 63 65 64 75 72 65 73  e two procedures
38d0: 0a 6f 75 74 6c 69 6e 65 64 20 61 62 6f 76 65 2e  .outlined above.
38e0: 0a 0a 3c 74 63 6c 3e 0a 23 20 20 4f 6e 65 20 6f  ..<tcl>.#  One o
38f0: 66 20 74 68 65 20 72 65 61 73 6f 6e 73 20 74 68  f the reasons th
3900: 61 74 0a 23 20 53 51 4c 69 74 65 20 64 6f 65 73  at.# SQLite does
3910: 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 73   not currently s
3920: 75 70 70 6f 72 74 20 6d 6f 72 65 20 41 4c 54 45  upport more ALTE
3930: 52 20 54 41 42 4c 45 20 63 61 70 61 62 69 6c 69  R TABLE capabili
3940: 74 69 65 73 20 69 73 20 74 68 61 74 0a 23 20 74  ties is that.# t
3950: 68 65 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f  he procedure sho
3960: 77 6e 20 61 62 6f 76 65 20 69 73 20 64 69 66 66  wn above is diff
3970: 69 63 75 6c 74 20 74 6f 20 61 75 74 6f 6d 61 74  icult to automat
3980: 65 20 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61  e for an arbitra
3990: 72 79 20 73 63 68 65 6d 61 2e 0a 23 20 50 61 72  ry schema..# Par
39a0: 74 69 63 75 6c 61 72 6c 79 20 74 72 6f 75 62 6c  ticularly troubl
39b0: 65 73 6f 6d 65 20 61 72 65 61 73 20 61 72 65 20  esome areas are 
39c0: 69 64 65 6e 74 69 66 79 69 6e 67 20 61 6c 6c 20  identifying all 
39d0: 76 69 65 77 73 20 61 73 73 6f 63 69 61 74 65 64  views associated
39e0: 20 77 69 74 68 0a 23 20 74 61 62 6c 65 20 58 20   with.# table X 
39f0: 69 6e 20 73 74 65 70 20 31 20 61 6e 64 20 63 72  in step 1 and cr
3a00: 65 61 74 69 6e 67 20 6e 65 77 20 76 69 65 77 73  eating new views
3a10: 20 61 6e 64 20 74 72 69 67 67 65 72 73 20 74 68   and triggers th
3a20: 61 74 20 61 72 65 20 63 6f 6d 70 61 74 69 62 6c  at are compatibl
3a30: 65 0a 23 20 77 69 74 68 20 74 68 65 20 61 6c 74  e.# with the alt
3a40: 65 72 65 64 20 73 63 68 65 6d 61 20 66 6f 72 20  ered schema for 
3a50: 74 61 62 6c 65 20 58 20 69 6e 20 73 74 65 70 20  table X in step 
3a60: 36 2e 20 20 49 74 20 69 73 20 61 20 74 72 69 63  6.  It is a tric
3a70: 6b 79 20 62 75 74 20 73 6f 6c 76 61 62 6c 65 0a  ky but solvable.
3a80: 23 20 70 72 6f 62 6c 65 6d 20 74 6f 20 63 72 65  # problem to cre
3a90: 61 74 65 20 63 6f 64 65 20 74 68 61 74 20 77 69  ate code that wi
3aa0: 6c 6c 20 70 65 72 66 6f 72 6d 20 74 68 65 20 73  ll perform the s
3ab0: 74 65 70 73 20 61 62 6f 76 65 20 0a 23 20 66 6f  teps above .# fo
3ac0: 72 20 22 72 65 61 73 6f 6e 61 62 6c 65 22 20 73  r "reasonable" s
3ad0: 63 68 65 6d 61 73 20 63 6f 6d 6d 6f 6e 6c 79 20  chemas commonly 
3ae0: 66 6f 75 6e 64 20 69 6e 20 70 72 61 63 74 69 63  found in practic
3af0: 65 2e 20 20 0a 23 20 42 75 74 20 74 68 65 72 65  e.  .# But there
3b00: 20 65 78 69 73 74 20 6d 61 6c 65 76 6f 6c 65 6e   exist malevolen
3b10: 74 20 73 63 68 65 6d 61 73 20 66 6f 72 20 77 68  t schemas for wh
3b20: 69 63 68 0a 23 20 74 68 65 73 65 20 73 74 65 70  ich.# these step
3b30: 73 20 61 72 65 20 6d 61 64 64 65 6e 69 6e 67 6c  s are maddeningl
3b40: 79 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20 64  y difficult to d
3b50: 6f 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 52 61  o correctly.  Ra
3b60: 74 68 65 72 20 74 68 61 6e 20 63 72 65 61 74 65  ther than create
3b70: 0a 23 20 41 4c 54 45 52 20 54 41 42 4c 45 20 66  .# ALTER TABLE f
3b80: 65 61 74 75 72 65 73 20 74 68 61 74 20 77 6f 72  eatures that wor
3b90: 6b 20 63 6f 72 72 65 63 74 6c 79 20 39 39 2e 39  k correctly 99.9
3ba0: 25 20 6f 66 20 74 68 65 20 74 69 6d 65 20 62 75  % of the time bu
3bb0: 74 20 70 6f 73 73 69 62 6c 79 0a 23 20 63 6f 72  t possibly.# cor
3bc0: 72 75 70 74 20 74 68 65 20 73 63 68 65 6d 61 20  rupt the schema 
3bd0: 6f 6e 20 74 68 65 20 6f 74 68 65 72 20 30 2e 31  on the other 0.1
3be0: 25 2c 20 74 68 65 20 53 51 4c 69 74 65 20 64 65  %, the SQLite de
3bf0: 76 65 6c 6f 70 65 72 73 20 68 61 76 65 20 64 65  velopers have de
3c00: 63 69 64 65 64 0a 23 20 74 6f 20 70 75 73 68 20  cided.# to push 
3c10: 74 68 65 20 70 72 6f 62 6c 65 6d 20 69 6e 74 6f  the problem into
3c20: 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e   the application
3c30: 20 64 6f 6d 61 69 6e 2c 20 77 68 65 72 65 20 69   domain, where i
3c40: 74 20 69 73 20 6d 75 63 68 20 65 61 73 69 65 72  t is much easier
3c50: 0a 23 20 74 6f 20 73 6f 6c 76 65 2e 0a 3c 2f 74  .# to solve..</t
3c60: 63 6c 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  cl>...<tcl>.####
3c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cb0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
3cc0: 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61  on {ANALYZE} ana
3cd0: 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a 0a 52 65  lyze ANALYZE..Re
3ce0: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
3cf0: 67 72 61 6d 20 61 6e 61 6c 79 7a 65 2d 73 74 6d  gram analyze-stm
3d00: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54  t.</tcl>..<p> ^T
3d10: 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61  he ANALYZE comma
3d20: 6e 64 20 67 61 74 68 65 72 73 20 73 74 61 74 69  nd gathers stati
3d30: 73 74 69 63 73 20 61 62 6f 75 74 20 74 61 62 6c  stics about tabl
3d40: 65 73 20 61 6e 64 0a 69 6e 64 69 63 65 73 20 61  es and.indices a
3d50: 6e 64 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  nd stores the co
3d60: 6c 6c 65 63 74 65 64 20 69 6e 66 6f 72 6d 61 74  llected informat
3d70: 69 6f 6e 0a 69 6e 20 5b 69 6e 74 65 72 6e 61 6c  ion.in [internal
3d80: 20 74 61 62 6c 65 73 5d 20 6f 66 20 74 68 65 20   tables] of the 
3d90: 64 61 74 61 62 61 73 65 20 77 68 65 72 65 20 74  database where t
3da0: 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
3db0: 65 72 20 63 61 6e 0a 61 63 63 65 73 73 20 74 68  er can.access th
3dc0: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e  e information an
3dd0: 64 20 75 73 65 20 69 74 20 74 6f 20 68 65 6c 70  d use it to help
3de0: 20 6d 61 6b 65 20 62 65 74 74 65 72 20 71 75 65   make better que
3df0: 72 79 20 70 6c 61 6e 6e 69 6e 67 20 63 68 6f 69  ry planning choi
3e00: 63 65 73 2e 0a 5e 49 66 20 6e 6f 20 61 72 67 75  ces..^If no argu
3e10: 6d 65 6e 74 73 20 61 72 65 20 67 69 76 65 6e 2c  ments are given,
3e20: 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
3e30: 74 61 62 61 73 65 73 20 61 72 65 0a 61 6e 61 6c  tabases are.anal
3e40: 79 7a 65 64 2e 20 20 5e 49 66 20 61 20 73 63 68  yzed.  ^If a sch
3e50: 65 6d 61 20 6e 61 6d 65 20 69 73 20 67 69 76 65  ema name is give
3e60: 6e 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  n as the argumen
3e70: 74 2c 20 74 68 65 6e 20 61 6c 6c 20 74 61 62 6c  t, then all tabl
3e80: 65 73 0a 61 6e 64 20 69 6e 64 69 63 65 73 20 69  es.and indices i
3e90: 6e 20 74 68 61 74 20 6f 6e 65 20 64 61 74 61 62  n that one datab
3ea0: 61 73 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64  ase are analyzed
3eb0: 2e 20 20 0a 5e 49 66 20 74 68 65 20 61 72 67 75  .  .^If the argu
3ec0: 6d 65 6e 74 20 69 73 20 61 20 74 61 62 6c 65 20  ment is a table 
3ed0: 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20  name, then only 
3ee0: 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 20 74  that table and t
3ef0: 68 65 0a 69 6e 64 69 63 65 73 20 61 73 73 6f 63  he.indices assoc
3f00: 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20  iated with that 
3f10: 74 61 62 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a  table are analyz
3f20: 65 64 2e 20 20 5e 49 66 20 74 68 65 20 61 72 67  ed.  ^If the arg
3f30: 75 6d 65 6e 74 0a 69 73 20 61 6e 20 69 6e 64 65  ument.is an inde
3f40: 78 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c  x name, then onl
3f50: 79 20 74 68 61 74 20 6f 6e 65 20 69 6e 64 65 78  y that one index
3f60: 20 69 73 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70   is analyzed.</p
3f70: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 64 65 66 61  >..<p> ^The defa
3f80: 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ult implementati
3f90: 6f 6e 20 73 74 6f 72 65 73 20 61 6c 6c 20 73 74  on stores all st
3fa0: 61 74 69 73 74 69 63 73 20 69 6e 20 61 20 73 69  atistics in a si
3fb0: 6e 67 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65 64  ngle.table named
3fc0: 20 22 5b 73 71 6c 69 74 65 5f 73 74 61 74 31 5d   "[sqlite_stat1]
3fd0: 22 2e 20 20 5e 49 66 20 53 51 4c 69 74 65 20 69  ".  ^If SQLite i
3fe0: 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  s compiled with 
3ff0: 74 68 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42  the.[SQLITE_ENAB
4000: 4c 45 5f 53 54 41 54 33 5d 20 6f 70 74 69 6f 6e  LE_STAT3] option
4010: 20 61 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65   and without the
4020: 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
4030: 53 54 41 54 34 5d 0a 6f 70 74 69 6f 6e 2c 20 74  STAT4].option, t
4040: 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68  hen additional h
4050: 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73  istogram data is
4060: 0a 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73  .collected and s
4070: 74 6f 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65  tored in [sqlite
4080: 5f 73 74 61 74 33 5d 2e 0a 20 5e 49 66 20 53 51  _stat3].. ^If SQ
4090: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
40a0: 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54   with the.[SQLIT
40b0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20  E_ENABLE_STAT4] 
40c0: 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64  option, then add
40d0: 69 74 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61  itional histogra
40e0: 6d 20 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63  m data is.collec
40f0: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69  ted and stored i
4100: 6e 20 5b 73 71 6c 69 74 65 5f 73 74 61 74 34 5d  n [sqlite_stat4]
4110: 2e 0a 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  ..Older versions
4120: 20 6f 66 20 53 51 4c 69 74 65 20 77 6f 75 6c 64   of SQLite would
4130: 20 6d 61 6b 65 20 75 73 65 20 6f 66 20 74 68 65   make use of the
4140: 20 5b 73 71 6c 69 74 65 5f 73 74 61 74 32 5d 20   [sqlite_stat2] 
4150: 74 61 62 6c 65 0a 77 68 65 6e 20 63 6f 6d 70 69  table.when compi
4160: 6c 65 64 20 77 69 74 68 20 5b 53 51 4c 49 54 45  led with [SQLITE
4170: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 32 5d 20 62  _ENABLE_STAT2] b
4180: 75 74 20 61 6c 6c 20 72 65 63 65 6e 74 20 76 65  ut all recent ve
4190: 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65  rsions of.SQLite
41a0: 20 69 67 6e 6f 72 65 20 74 68 65 20 73 71 6c 69   ignore the sqli
41b0: 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 2e 0a  te_stat2 table..
41c0: 46 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65  Future enhanceme
41d0: 6e 74 73 20 6d 61 79 20 63 72 65 61 74 65 0a 61  nts may create.a
41e0: 64 64 69 74 69 6f 6e 61 6c 20 5b 69 6e 74 65 72  dditional [inter
41f0: 6e 61 6c 20 74 61 62 6c 65 73 5d 20 77 69 74 68  nal tables] with
4200: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 70   the same name p
4210: 61 74 74 65 72 6e 20 65 78 63 65 70 74 20 77 69  attern except wi
4220: 74 68 0a 66 69 6e 61 6c 20 64 69 67 69 74 20 6c  th.final digit l
4230: 61 72 67 65 72 20 74 68 61 6e 20 22 34 22 2e 0a  arger than "4"..
4240: 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 74 61 62  All of these tab
4250: 6c 65 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 69  les are collecti
4260: 76 65 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f  vely referred to
4270: 20 61 73 20 22 73 74 61 74 69 73 74 69 63 73 20   as "statistics 
4280: 74 61 62 6c 65 73 22 2e 0a 3c 2f 70 3e 0a 0a 3c  tables"..</p>..<
4290: 70 3e 20 5e 54 68 65 20 63 6f 6e 74 65 6e 74 20  p> ^The content 
42a0: 6f 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63  of the statistic
42b0: 73 20 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20  s tables can be 
42c0: 71 75 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53  queried using [S
42d0: 45 4c 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62  ELECT].and can b
42e0: 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20  e changed using 
42f0: 74 68 65 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49  the [DELETE], [I
4300: 4e 53 45 52 54 5d 2c 20 61 6e 64 20 5b 55 50 44  NSERT], and [UPD
4310: 41 54 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 5e  ATE] commands..^
4320: 28 54 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45  (The [DROP TABLE
4330: 5d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20  ] command works 
4340: 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 74 61  on statistics ta
4350: 62 6c 65 73 0a 61 73 20 6f 66 20 53 51 4c 69 74  bles.as of SQLit
4360: 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 39 2e  e version 3.7.9.
4370: 29 5e 20 28 5b 64 61 74 65 6f 66 3a 33 2e 37 2e  )^ ([dateof:3.7.
4380: 39 5d 29 0a 5e 54 68 65 20 5b 41 4c 54 45 52 20  9]).^The [ALTER 
4390: 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 64  TABLE] command d
43a0: 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20  oes not work on 
43b0: 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65  statistics table
43c0: 73 2e 0a 41 70 70 72 6f 70 72 69 61 74 65 20 63  s..Appropriate c
43d0: 61 72 65 20 73 68 6f 75 6c 64 20 62 65 20 75 73  are should be us
43e0: 65 64 20 77 68 65 6e 20 63 68 61 6e 67 69 6e 67  ed when changing
43f0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
4400: 74 68 65 20 73 74 61 74 69 73 74 69 63 73 0a 74  the statistics.t
4410: 61 62 6c 65 73 20 61 73 20 69 6e 76 61 6c 69 64  ables as invalid
4420: 20 63 6f 6e 74 65 6e 74 20 63 61 6e 20 63 61 75   content can cau
4430: 73 65 20 53 51 4c 69 74 65 20 74 6f 20 73 65 6c  se SQLite to sel
4440: 65 63 74 20 69 6e 65 66 66 69 63 69 65 6e 74 0a  ect inefficient.
4450: 71 75 65 72 79 20 70 6c 61 6e 73 2e 20 20 47 65  query plans.  Ge
4460: 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67  nerally speaking
4470: 2c 20 6f 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74  , one should not
4480: 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 6e 74   modify the cont
4490: 65 6e 74 20 6f 66 0a 74 68 65 20 73 74 61 74 69  ent of.the stati
44a0: 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79 20  stics tables by 
44b0: 61 6e 79 20 6d 65 63 68 61 6e 69 73 6d 20 6f 74  any mechanism ot
44c0: 68 65 72 20 74 68 61 6e 20 69 6e 76 6f 6b 69 6e  her than invokin
44d0: 67 20 74 68 65 0a 41 4e 41 4c 59 5a 45 20 63 6f  g the.ANALYZE co
44e0: 6d 6d 61 6e 64 2e 20 20 0a 53 65 65 20 22 5b 4d  mmand.  .See "[M
44f0: 61 6e 75 61 6c 20 43 6f 6e 74 72 6f 6c 20 4f 66  anual Control Of
4500: 20 51 75 65 72 79 20 50 6c 61 6e 73 20 55 73 69   Query Plans Usi
4510: 6e 67 20 53 51 4c 49 54 45 5f 53 54 41 54 20 54  ng SQLITE_STAT T
4520: 61 62 6c 65 73 5d 22 20 66 6f 72 0a 66 75 72 74  ables]" for.furt
4530: 68 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  her information.
4540: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 53 74 61 74 69  </p>..<p> ^Stati
4550: 73 74 69 63 73 20 67 61 74 68 65 72 65 64 20 62  stics gathered b
4560: 79 20 41 4e 41 4c 59 5a 45 20 61 72 65 20 6e 6f  y ANALYZE are no
4570: 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  t automatically 
4580: 75 70 64 61 74 65 64 20 61 73 0a 74 68 65 20 63  updated as.the c
4590: 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61  ontent of the da
45a0: 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 2e 20  tabase changes. 
45b0: 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   If the content 
45c0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
45d0: 63 68 61 6e 67 65 73 20 73 69 67 6e 69 66 69 63  changes signific
45e0: 61 6e 74 6c 79 2c 20 6f 72 20 69 66 20 74 68 65  antly, or if the
45f0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
4600: 20 63 68 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f   changes, then o
4610: 6e 65 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64  ne should.consid
4620: 65 72 20 72 65 72 75 6e 6e 69 6e 67 20 74 68 65  er rerunning the
4630: 20 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64   ANALYZE command
4640: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64   in order to upd
4650: 61 74 65 20 74 68 65 20 73 74 61 74 69 73 74 69  ate the statisti
4660: 63 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65  cs.</p>..<p> The
4670: 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 6c   query planner l
4680: 6f 61 64 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  oads the content
4690: 20 6f 66 20 74 68 65 20 73 74 61 74 69 73 74 69   of the statisti
46a0: 63 73 20 74 61 62 6c 65 73 0a 69 6e 74 6f 20 6d  cs tables.into m
46b0: 65 6d 6f 72 79 20 77 68 65 6e 20 74 68 65 20 73  emory when the s
46c0: 63 68 65 6d 61 20 69 73 20 72 65 61 64 2e 20 20  chema is read.  
46d0: 5e 48 65 6e 63 65 2c 20 77 68 65 6e 20 61 6e 20  ^Hence, when an 
46e0: 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63 68 61 6e  application.chan
46f0: 67 65 73 20 74 68 65 20 73 74 61 74 69 73 74 69  ges the statisti
4700: 63 73 20 74 61 62 6c 65 73 20 64 69 72 65 63 74  cs tables direct
4710: 6c 79 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20  ly, SQLite will 
4720: 6e 6f 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a  not immediately.
4730: 6e 6f 74 69 63 65 20 74 68 65 20 63 68 61 6e 67  notice the chang
4740: 65 73 2e 20 5e 41 6e 20 61 70 70 6c 69 63 61 74  es. ^An applicat
4750: 69 6f 6e 0a 63 61 6e 20 66 6f 72 63 65 20 74 68  ion.can force th
4760: 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
4770: 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 74  to reread the st
4780: 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 20  atistics tables 
4790: 62 79 20 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41 4e  by running.<b>AN
47a0: 41 4c 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73  ALYZE sqlite_mas
47b0: 74 65 72 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c  ter</b>. </p>..<
47c0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
47d0: 61 75 74 6f 61 6e 61 6c 79 7a 65 20 7b 61 75 74  autoanalyze {aut
47e0: 6f 6d 61 74 69 63 61 6c 6c 79 20 72 75 6e 6e 69  omatically runni
47f0: 6e 67 20 41 4e 41 4c 59 5a 45 7d 3c 2f 74 63 6c  ng ANALYZE}</tcl
4800: 3e 0a 3c 68 32 3e 41 75 74 6f 6d 61 74 69 63 61  >.<h2>Automatica
4810: 6c 6c 79 20 52 75 6e 6e 69 6e 67 20 41 4e 41 4c  lly Running ANAL
4820: 59 5a 45 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65  YZE</h2>..<p>The
4830: 20 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a   [PRAGMA optimiz
4840: 65 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20  e] command will 
4850: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72 75  automatically ru
4860: 6e 20 41 4e 41 4c 59 5a 45 20 6f 6e 20 69 6e 64  n ANALYZE on ind
4870: 69 76 69 64 75 61 6c 0a 74 61 62 6c 65 73 20 6f  ividual.tables o
4880: 6e 20 61 6e 20 61 73 2d 6e 65 65 64 65 64 20 62  n an as-needed b
4890: 61 73 69 73 2e 20 20 54 68 65 20 72 65 63 6f 6d  asis.  The recom
48a0: 6d 65 6e 64 65 64 20 70 72 61 63 74 69 63 65 20  mended practice 
48b0: 69 73 20 66 6f 72 20 61 70 70 6c 69 63 61 74 69  is for applicati
48c0: 6f 6e 73 0a 74 6f 20 69 6e 76 6f 6b 65 20 74 68  ons.to invoke th
48d0: 65 20 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69  e [PRAGMA optimi
48e0: 7a 65 5d 20 73 74 61 74 65 6d 65 6e 74 20 6a 75  ze] statement ju
48f0: 73 74 20 62 65 66 6f 72 65 20 63 6c 6f 73 69 6e  st before closin
4900: 67 20 65 61 63 68 20 64 61 74 61 62 61 73 65 0a  g each database.
4910: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 3e 0a  connection.</p>.
4920: 0a 3c 70 3e 45 61 63 68 20 53 51 4c 69 74 65 20  .<p>Each SQLite 
4930: 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63  [database connec
4940: 74 69 6f 6e 5d 20 72 65 63 6f 72 64 73 20 63 61  tion] records ca
4950: 73 65 73 20 77 68 65 6e 20 74 68 65 20 71 75 65  ses when the que
4960: 72 79 20 70 6c 61 6e 6e 65 72 20 77 6f 75 6c 64  ry planner would
4970: 0a 62 65 6e 65 66 69 74 20 66 72 6f 6d 20 68 61  .benefit from ha
4980: 76 69 6e 67 20 61 63 63 75 72 61 74 65 20 72 65  ving accurate re
4990: 73 75 6c 74 73 20 6f 66 20 41 4e 41 4c 59 5a 45  sults of ANALYZE
49a0: 20 61 74 20 68 61 6e 64 2e 20 20 54 68 65 73 65   at hand.  These
49b0: 20 72 65 63 6f 72 64 73 0a 61 72 65 20 68 65 6c   records.are hel
49c0: 64 20 69 6e 20 6d 65 6d 6f 72 79 20 61 6e 64 20  d in memory and 
49d0: 61 63 63 75 6d 75 6c 61 74 65 20 6f 76 65 72 20  accumulate over 
49e0: 74 68 65 20 6c 69 66 65 20 6f 66 20 61 20 64 61  the life of a da
49f0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
4a00: 6e 2e 0a 54 68 65 20 5b 50 52 41 47 4d 41 20 6f  n..The [PRAGMA o
4a10: 70 74 69 6d 69 7a 65 5d 20 63 6f 6d 6d 61 6e 64  ptimize] command
4a20: 20 6c 6f 6f 6b 73 20 61 74 20 74 68 6f 73 65 20   looks at those 
4a30: 72 65 63 6f 72 64 73 20 61 6e 64 20 72 75 6e 73  records and runs
4a40: 20 41 4e 41 4c 59 5a 45 20 6f 6e 20 6f 6e 6c 79   ANALYZE on only
4a50: 0a 74 68 6f 73 65 20 74 61 62 6c 65 73 20 66 6f  .those tables fo
4a60: 72 20 77 68 69 63 68 20 6e 65 77 20 6f 72 20 75  r which new or u
4a70: 70 64 61 74 65 64 20 41 4e 41 4c 59 5a 45 20 64  pdated ANALYZE d
4a80: 61 74 61 20 73 65 65 6d 73 20 6c 69 6b 65 6c 79  ata seems likely
4a90: 20 74 6f 20 62 65 20 75 73 65 66 75 6c 2e 0a 49   to be useful..I
4aa0: 6e 20 6d 6f 73 74 20 63 61 73 65 73 20 5b 50 52  n most cases [PR
4ab0: 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 20 77  AGMA optimize] w
4ac0: 69 6c 6c 20 6e 6f 74 20 72 75 6e 20 41 4e 41 4c  ill not run ANAL
4ad0: 59 5a 45 2c 20 62 75 74 20 69 74 20 77 69 6c 6c  YZE, but it will
4ae0: 20 6f 63 63 61 73 69 6f 6e 61 6c 6c 79 0a 64 6f   occasionally.do
4af0: 20 73 6f 20 65 69 74 68 65 72 20 66 6f 72 20 74   so either for t
4b00: 61 62 6c 65 73 20 74 68 61 74 20 68 61 76 65 20  ables that have 
4b10: 6e 65 76 65 72 20 62 65 66 6f 72 65 20 62 65 65  never before bee
4b20: 6e 20 61 6e 61 6c 79 7a 65 64 2c 20 6f 72 20 66  n analyzed, or f
4b30: 6f 72 20 74 61 62 6c 65 73 0a 74 68 61 74 20 68  or tables.that h
4b40: 61 76 65 20 67 72 6f 77 6e 20 73 69 67 6e 69 66  ave grown signif
4b50: 69 63 61 6e 74 6c 79 20 73 69 6e 63 65 20 74 68  icantly since th
4b60: 65 79 20 77 65 72 65 20 6c 61 73 74 20 61 6e 61  ey were last ana
4b70: 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53  lyzed.</p>..<p>S
4b80: 69 6e 63 65 20 74 68 65 20 61 63 74 69 6f 6e 73  ince the actions
4b90: 20 6f 66 20 5b 50 52 41 47 4d 41 20 6f 70 74 69   of [PRAGMA opti
4ba0: 6d 69 7a 65 5d 20 61 72 65 20 64 65 74 65 72 6d  mize] are determ
4bb0: 69 6e 65 64 20 74 6f 20 73 6f 6d 65 20 65 78 74  ined to some ext
4bc0: 65 6e 74 20 62 79 0a 70 72 69 6f 72 20 71 75 65  ent by.prior que
4bd0: 72 69 65 73 20 74 68 61 74 20 68 61 76 65 20 62  ries that have b
4be0: 65 65 6e 20 65 76 61 6c 75 61 74 65 64 20 6f 6e  een evaluated on
4bf0: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
4c00: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 69  se connection, i
4c10: 74 0a 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64  t.is recommended
4c20: 20 74 68 61 74 20 5b 50 52 41 47 4d 41 20 6f 70   that [PRAGMA op
4c30: 74 69 6d 69 7a 65 5d 20 62 65 20 64 65 66 65 72  timize] be defer
4c40: 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20 64 61  red until the da
4c50: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
4c60: 6e 0a 69 73 20 63 6c 6f 73 69 6e 67 20 61 6e 64  n.is closing and
4c70: 20 68 61 73 20 74 68 75 73 20 68 61 64 20 61 6e   has thus had an
4c80: 20 6f 70 70 6f 72 74 75 6e 69 74 79 20 74 6f 20   opportunity to 
4c90: 61 63 63 75 6d 75 6c 61 74 65 20 61 73 20 6d 75  accumulate as mu
4ca0: 73 74 20 75 73 61 67 65 20 69 6e 66 6f 72 6d 61  st usage informa
4cb0: 74 69 6f 6e 0a 61 73 20 70 6f 73 73 69 62 6c 65  tion.as possible
4cc0: 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 20 72 65  .  It is also re
4cd0: 61 73 6f 6e 61 62 6c 65 20 74 6f 20 73 65 74 20  asonable to set 
4ce0: 61 20 74 69 6d 65 72 20 74 6f 20 72 75 6e 20 5b  a timer to run [
4cf0: 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d  PRAGMA optimize]
4d00: 0a 65 76 65 72 79 20 66 65 77 20 68 6f 75 72 73  .every few hours
4d10: 2c 20 6f 72 20 65 76 65 72 79 20 66 65 77 20 64  , or every few d
4d20: 61 79 73 2c 20 66 6f 72 20 64 61 74 61 62 61 73  ays, for databas
4d30: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 68  e connections th
4d40: 61 74 20 73 74 61 79 20 6f 70 65 6e 0a 66 6f 72  at stay open.for
4d50: 20 61 20 6c 6f 6e 67 20 74 69 6d 65 2e 3c 2f 70   a long time.</p
4d60: 3e 0a 0a 3c 70 3e 41 70 70 6c 69 63 61 74 69 6f  >..<p>Applicatio
4d70: 6e 73 20 74 68 61 74 20 64 65 73 69 72 65 20 6d  ns that desire m
4d80: 6f 72 65 20 63 6f 6e 74 72 6f 6c 20 63 61 6e 20  ore control can 
4d90: 72 75 6e 20 5b 50 52 41 47 4d 41 20 6f 70 74 69  run [PRAGMA opti
4da0: 6d 69 7a 65 28 30 78 30 33 29 5d 20 74 6f 20 0a  mize(0x03)] to .
4db0: 6f 62 74 61 69 6e 20 61 20 6c 69 73 74 20 6f 66  obtain a list of
4dc0: 20 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64   ANALYZE command
4dd0: 73 20 74 68 61 74 20 53 51 4c 69 74 65 20 74 68  s that SQLite th
4de0: 69 6e 6b 73 20 61 72 65 20 61 70 70 72 6f 70 72  inks are appropr
4df0: 69 61 74 65 20 74 6f 20 72 75 6e 2c 0a 62 75 74  iate to run,.but
4e00: 20 77 69 74 68 6f 75 74 20 61 63 74 75 61 6c 6c   without actuall
4e10: 79 20 72 75 6e 6e 69 6e 67 20 74 68 6f 73 65 20  y running those 
4e20: 63 6f 6d 6d 61 6e 64 73 2e 20 20 49 66 20 74 68  commands.  If th
4e30: 65 20 72 65 74 75 72 6e 65 64 20 73 65 74 20 69  e returned set i
4e40: 73 20 0a 6e 6f 6e 2d 65 6d 70 74 79 2c 20 74 68  s .non-empty, th
4e50: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 61  e application ca
4e60: 6e 20 74 68 65 6e 20 6d 61 6b 65 20 61 20 64 65  n then make a de
4e70: 63 69 73 69 6f 6e 20 61 62 6f 75 74 20 77 68 65  cision about whe
4e80: 74 68 65 72 20 6f 72 20 6e 6f 74 0a 74 6f 20 72  ther or not.to r
4e90: 75 6e 20 74 68 65 20 73 75 67 67 65 73 74 65 64  un the suggested
4ea0: 20 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64   ANALYZE command
4eb0: 73 2c 20 70 65 72 68 61 70 73 20 61 66 74 65 72  s, perhaps after
4ec0: 20 70 72 6f 6d 70 74 69 6e 67 20 74 68 65 20 75   prompting the u
4ed0: 73 65 72 0a 66 6f 72 20 67 75 69 64 61 6e 63 65  ser.for guidance
4ee0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 5b 50  .</p>..<p>The [P
4ef0: 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 20  RAGMA optimize] 
4f00: 63 6f 6d 6d 61 6e 64 20 77 61 73 20 66 69 72 73  command was firs
4f10: 74 20 69 6e 74 72 6f 64 75 63 65 64 20 77 69 74  t introduced wit
4f20: 68 20 0a 53 51 4c 69 74 65 20 33 2e 31 38 2e 30  h .SQLite 3.18.0
4f30: 20 28 5b 64 61 74 65 6f 66 3a 33 2e 31 38 2e 30   ([dateof:3.18.0
4f40: 5d 29 20 61 6e 64 20 69 73 20 61 20 6e 6f 2d 6f  ]) and is a no-o
4f50: 70 20 66 6f 72 20 61 6c 6c 20 70 72 69 6f 72 20  p for all prior 
4f60: 72 65 6c 65 61 73 65 73 0a 6f 66 20 53 51 4c 69  releases.of SQLi
4f70: 74 65 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 41 6e 74  te.</p>..<h2>Ant
4f80: 69 63 69 70 61 74 65 64 20 46 75 74 75 72 65 20  icipated Future 
4f90: 45 6e 68 61 6e 63 65 6d 65 6e 74 73 3c 2f 68 32  Enhancements</h2
4fa0: 3e 0a 0a 3c 70 3e 41 6c 6c 20 65 78 69 73 74 69  >..<p>All existi
4fb0: 6e 67 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  ng versions of S
4fc0: 51 4c 69 74 65 20 64 6f 20 61 20 66 75 6c 6c 20  QLite do a full 
4fd0: 74 61 62 6c 65 20 73 63 61 6e 20 66 6f 72 20 41  table scan for A
4fe0: 4e 41 4c 59 5a 45 2e 20 20 54 68 69 73 20 63 61  NALYZE.  This ca
4ff0: 6e 20 62 65 0a 73 6c 6f 77 20 66 6f 72 20 6d 75  n be.slow for mu
5000: 6c 74 69 2d 67 69 67 61 62 79 74 65 20 61 6e 64  lti-gigabyte and
5010: 20 6c 61 72 67 65 72 20 64 61 74 61 62 61 73 65   larger database
5020: 73 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69  s.  Future versi
5030: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 69  ons of SQLite mi
5040: 67 68 74 0a 75 73 65 20 72 61 6e 64 6f 6d 20 73  ght.use random s
5050: 61 6d 70 6c 69 6e 67 20 72 61 74 68 65 72 20 74  ampling rather t
5060: 68 61 6e 20 61 20 66 75 6c 6c 20 74 61 62 6c 65  han a full table
5070: 20 73 63 61 6e 20 74 6f 20 6f 62 74 61 69 6e 20   scan to obtain 
5080: 65 73 74 69 6d 61 74 65 73 20 66 6f 72 20 74 68  estimates for th
5090: 65 0a 64 61 74 61 62 61 73 65 20 73 68 61 70 65  e.database shape
50a0: 2c 20 65 73 70 65 63 69 61 6c 6c 79 20 6f 6e 20  , especially on 
50b0: 6c 61 72 67 65 72 20 74 61 62 6c 65 73 2e 20 20  larger tables.  
50c0: 54 68 65 20 72 65 73 75 6c 74 73 20 77 6f 75 6c  The results woul
50d0: 64 20 61 70 70 72 6f 78 69 6d 61 74 65 2c 20 62  d approximate, b
50e0: 75 74 20 0a 77 69 6c 6c 20 62 65 20 63 6c 6f 73  ut .will be clos
50f0: 65 20 65 6e 6f 75 67 68 20 66 6f 72 20 71 75 65  e enough for que
5100: 72 79 20 70 6c 61 6e 6e 69 6e 67 20 70 75 72 70  ry planning purp
5110: 6f 73 65 73 2e 20 20 41 73 20 6f 66 20 32 30 31  oses.  As of 201
5120: 37 2d 30 33 2d 32 30 2c 20 74 68 69 73 0a 63 6f  7-03-20, this.co
5130: 6e 63 65 70 74 20 68 61 73 20 62 65 65 6e 20 74  ncept has been t
5140: 65 73 74 65 64 20 69 6e 20 65 78 70 65 72 69 6d  ested in experim
5150: 65 6e 74 61 6c 20 62 72 61 6e 63 68 65 73 20 61  ental branches a
5160: 6e 64 20 61 70 70 65 61 72 73 20 74 6f 20 77 6f  nd appears to wo
5170: 72 6b 20 77 65 6c 6c 2c 20 62 75 74 0a 68 61 73  rk well, but.has
5180: 20 6e 6f 74 20 62 65 65 6e 20 66 6f 6c 64 65 64   not been folded
5190: 20 69 6e 74 6f 20 61 6e 20 6f 66 66 69 63 69 61   into an officia
51a0: 6c 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 0a  l release.</p>..
51b0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
51c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
51d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
51e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
51f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5200: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 54  ####.Section {AT
5210: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 61  TACH DATABASE} a
5220: 74 74 61 63 68 20 7b 61 74 74 61 63 68 65 64 20  ttach {attached 
5230: 2a 41 54 54 41 43 48 7d 0a 0a 52 65 63 75 72 73  *ATTACH}..Recurs
5240: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
5250: 20 61 74 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74   attach-stmt.</t
5260: 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 54  cl>..<p> ^The AT
5270: 54 41 43 48 20 44 41 54 41 42 41 53 45 20 73 74  TACH DATABASE st
5280: 61 74 65 6d 65 6e 74 20 61 64 64 73 20 61 6e 6f  atement adds ano
5290: 74 68 65 72 20 64 61 74 61 62 61 73 65 20 0a 66  ther database .f
52a0: 69 6c 65 20 74 6f 20 74 68 65 20 63 75 72 72 65  ile to the curre
52b0: 6e 74 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e  nt [database con
52c0: 6e 65 63 74 69 6f 6e 5d 2e 20 0a 44 61 74 61 62  nection]. .Datab
52d0: 61 73 65 20 66 69 6c 65 73 20 74 68 61 74 20 77  ase files that w
52e0: 65 72 65 20 70 72 65 76 69 6f 75 73 6c 79 20 61  ere previously a
52f0: 74 74 61 63 68 65 64 20 63 61 6e 20 62 65 20 72  ttached can be r
5300: 65 6d 6f 76 65 64 20 75 73 69 6e 67 0a 74 68 65  emoved using.the
5310: 20 5b 44 45 54 41 43 48 20 44 41 54 41 42 41 53   [DETACH DATABAS
5320: 45 5d 20 63 6f 6d 6d 61 6e 64 2e 0a 0a 3c 70 3e  E] command...<p>
5330: 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20 66 6f  ^The filename fo
5340: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  r the database t
5350: 6f 20 62 65 20 61 74 74 61 63 68 65 64 20 69 73  o be attached is
5360: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 74 68   the value of.th
5370: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  e expression tha
5380: 74 20 6f 63 63 75 72 73 20 62 65 66 6f 72 65 20  t occurs before 
5390: 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64 2e 0a  the AS keyword..
53a0: 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20 6f 66  ^The filename of
53b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
53c0: 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d 65 20 73  llows the same s
53d0: 65 6d 61 6e 74 69 63 73 20 61 73 20 74 68 65 0a  emantics as the.
53e0: 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e  filename argumen
53f0: 74 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 6f 70  t to [sqlite3_op
5400: 65 6e 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74  en()] and [sqlit
5410: 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d 3b 20 74  e3_open_v2()]; t
5420: 68 65 0a 73 70 65 63 69 61 6c 20 6e 61 6d 65 20  he.special name 
5430: 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 72 65 73  "[:memory:]" res
5440: 75 6c 74 73 20 69 6e 20 61 6e 20 5b 69 6e 2d 6d  ults in an [in-m
5450: 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 5d 20  emory database] 
5460: 61 6e 64 20 61 6e 0a 65 6d 70 74 79 20 73 74 72  and an.empty str
5470: 69 6e 67 20 72 65 73 75 6c 74 73 20 69 6e 20 61  ing results in a
5480: 20 6e 65 77 20 74 65 6d 70 6f 72 61 72 79 20 64   new temporary d
5490: 61 74 61 62 61 73 65 2e 0a 5e 54 68 65 20 66 69  atabase..^The fi
54a0: 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20  lename argument 
54b0: 63 61 6e 20 62 65 20 61 20 5b 55 52 49 20 66 69  can be a [URI fi
54c0: 6c 65 6e 61 6d 65 5d 20 69 66 20 55 52 49 20 66  lename] if URI f
54d0: 69 6c 65 6e 61 6d 65 20 70 72 6f 63 65 73 73 69  ilename processi
54e0: 6e 67 0a 69 73 20 65 6e 61 62 6c 65 20 6f 6e 20  ng.is enable on 
54f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
5500: 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 64 65  nection.  The de
5510: 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72 20 69  fault behavior i
5520: 73 20 66 6f 72 0a 55 52 49 20 66 69 6c 65 6e 61  s for.URI filena
5530: 6d 65 73 20 74 6f 20 62 65 20 64 69 73 61 62 6c  mes to be disabl
5540: 65 64 2c 20 68 6f 77 65 76 65 72 20 74 68 61 74  ed, however that
5550: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 69 6e   might change in
5560: 20 61 20 66 75 74 75 72 65 20 72 65 6c 65 61 73   a future releas
5570: 65 0a 6f 66 20 53 51 4c 69 74 65 2c 20 73 6f 20  e.of SQLite, so 
5580: 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 76 65  application deve
5590: 6c 6f 70 65 72 73 20 61 72 65 20 61 64 76 69 73  lopers are advis
55a0: 65 64 20 74 6f 20 70 6c 61 6e 20 61 63 63 6f 72  ed to plan accor
55b0: 64 69 6e 67 6c 79 2e 0a 0a 3c 70 3e 54 68 65 20  dingly...<p>The 
55c0: 6e 61 6d 65 20 74 68 61 74 20 6f 63 63 75 72 73  name that occurs
55d0: 20 61 66 74 65 72 20 74 68 65 20 41 53 20 6b 65   after the AS ke
55e0: 79 77 6f 72 64 20 69 73 20 74 68 65 20 6e 61 6d  yword is the nam
55f0: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
5600: 65 0a 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  e.used internall
5610: 79 20 62 79 20 53 51 4c 69 74 65 2e 0a 5e 54 68  y by SQLite..^Th
5620: 65 20 73 63 68 65 6d 61 2d 6e 61 6d 65 73 20 27  e schema-names '
5630: 6d 61 69 6e 27 20 61 6e 64 20 0a 27 74 65 6d 70  main' and .'temp
5640: 27 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6d  ' refer to the m
5650: 61 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64  ain database and
5660: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73   the database us
5670: 65 64 20 66 6f 72 20 0a 74 65 6d 70 6f 72 61 72  ed for .temporar
5680: 79 20 74 61 62 6c 65 73 2e 20 20 5e 54 68 65 20  y tables.  ^The 
5690: 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61  main and temp da
56a0: 74 61 62 61 73 65 73 20 63 61 6e 6e 6f 74 20 62  tabases cannot b
56b0: 65 20 61 74 74 61 63 68 65 64 20 6f 72 0a 64 65  e attached or.de
56c0: 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tached.</p>..<p>
56d0: 20 5e 28 54 61 62 6c 65 73 20 69 6e 20 61 6e 20   ^(Tables in an 
56e0: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
56f0: 65 20 63 61 6e 20 62 65 20 72 65 66 65 72 72 65  e can be referre
5700: 64 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20 73  d to using the s
5710: 79 6e 74 61 78 20 0a 3c 69 3e 73 63 68 65 6d 61  yntax .<i>schema
5720: 2d 6e 61 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65  -name.table-name
5730: 3c 2f 69 3e 2e 29 5e 20 20 5e 49 66 20 74 68 65  </i>.)^  ^If the
5740: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
5750: 6c 65 20 69 73 20 75 6e 69 71 75 65 0a 61 63 72  le is unique.acr
5760: 6f 73 73 20 61 6c 6c 20 61 74 74 61 63 68 65 64  oss all attached
5770: 20 64 61 74 61 62 61 73 65 73 20 61 6e 64 20 74   databases and t
5780: 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70  he main and temp
5790: 20 64 61 74 61 62 61 73 65 73 2c 20 74 68 65 6e   databases, then
57a0: 20 74 68 65 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e   the.<i>schema-n
57b0: 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69  ame</i> prefix i
57c0: 73 20 6e 6f 74 20 72 65 71 75 69 72 65 64 2e 20  s not required. 
57d0: 20 5e 49 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65   ^If two or more
57e0: 20 74 61 62 6c 65 73 20 69 6e 0a 64 69 66 66 65   tables in.diffe
57f0: 72 65 6e 74 20 64 61 74 61 62 61 73 65 73 20 68  rent databases h
5800: 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ave the same nam
5810: 65 20 61 6e 64 20 74 68 65 20 0a 3c 69 3e 73 63  e and the .<i>sc
5820: 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72  hema-name</i> pr
5830: 65 66 69 78 20 69 73 20 6e 6f 74 20 75 73 65 64  efix is not used
5840: 20 6f 6e 20 61 20 74 61 62 6c 65 20 72 65 66 65   on a table refe
5850: 72 65 6e 63 65 2c 20 74 68 65 6e 20 74 68 65 0a  rence, then the.
5860: 74 61 62 6c 65 20 63 68 6f 73 65 6e 20 69 73 20  table chosen is 
5870: 74 68 65 20 6f 6e 65 20 69 6e 20 74 68 65 20 64  the one in the d
5880: 61 74 61 62 61 73 65 20 74 68 61 74 20 77 61 73  atabase that was
5890: 20 6c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20   least recently 
58a0: 61 74 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c  attached.</p>..<
58b0: 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73  p>.^Transactions
58c0: 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
58d0: 70 6c 65 20 61 74 74 61 63 68 65 64 20 64 61 74  ple attached dat
58e0: 61 62 61 73 65 73 20 61 72 65 20 61 74 6f 6d 69  abases are atomi
58f0: 63 2c 0a 61 73 73 75 6d 69 6e 67 20 74 68 61 74  c,.assuming that
5900: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
5910: 73 65 20 69 73 20 6e 6f 74 20 22 5b 3a 6d 65 6d  se is not "[:mem
5920: 6f 72 79 3a 5d 22 20 61 6e 64 20 74 68 65 20 0a  ory:]" and the .
5930: 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69  [journal_mode] i
5940: 73 20 6e 6f 74 20 5b 57 41 4c 5d 2e 20 20 5e 28  s not [WAL].  ^(
5950: 49 66 20 74 68 65 20 6d 61 69 6e 0a 64 61 74 61  If the main.data
5960: 62 61 73 65 20 69 73 20 22 3a 6d 65 6d 6f 72 79  base is ":memory
5970: 3a 22 20 6f 72 20 69 66 20 74 68 65 20 6a 6f 75  :" or if the jou
5980: 72 6e 61 6c 5f 6d 6f 64 65 20 69 73 20 57 41 4c  rnal_mode is WAL
5990: 2c 20 74 68 65 6e 20 0a 74 72 61 6e 73 61 63 74  , then .transact
59a0: 69 6f 6e 73 20 63 6f 6e 74 69 6e 75 65 20 74 6f  ions continue to
59b0: 20 62 65 20 61 74 6f 6d 69 63 20 77 69 74 68 69   be atomic withi
59c0: 6e 20 65 61 63 68 20 69 6e 64 69 76 69 64 75 61  n each individua
59d0: 6c 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  l.database file.
59e0: 20 42 75 74 20 69 66 20 74 68 65 20 68 6f 73 74   But if the host
59f0: 20 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65   computer crashe
5a00: 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 0a  s in the middle.
5a10: 6f 66 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 77 68  of a [COMMIT] wh
5a20: 65 72 65 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  ere two or more 
5a30: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 61  database files a
5a40: 72 65 20 75 70 64 61 74 65 64 2c 0a 73 6f 6d 65  re updated,.some
5a50: 20 6f 66 20 74 68 6f 73 65 20 66 69 6c 65 73 20   of those files 
5a60: 6d 69 67 68 74 20 67 65 74 20 74 68 65 20 63 68  might get the ch
5a70: 61 6e 67 65 73 20 77 68 65 72 65 20 6f 74 68 65  anges where othe
5a80: 72 73 0a 6d 69 67 68 74 20 6e 6f 74 2e 29 5e 0a  rs.might not.)^.
5a90: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 72 65  </p>..<p> ^There
5aa0: 20 69 73 20 61 20 6c 69 6d 69 74 2c 20 73 65 74   is a limit, set
5ab0: 20 75 73 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f   using [sqlite3_
5ac0: 6c 69 6d 69 74 28 29 5d 20 61 6e 64 20 0a 5b 53  limit()] and .[S
5ad0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 41 54 54 41  QLITE_LIMIT_ATTA
5ae0: 43 48 45 44 5d 2c 20 74 6f 20 74 68 65 20 6e 75  CHED], to the nu
5af0: 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65  mber of database
5b00: 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a 73 69  s that can be.si
5b10: 6d 75 6c 74 61 6e 65 6f 75 73 6c 79 20 61 74 74  multaneously att
5b20: 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e 67 6c  ached to a singl
5b30: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
5b40: 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ction.</p>..<tcl
5b50: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
5b60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ba0: 23 0a 53 65 63 74 69 6f 6e 20 7b 42 45 47 49 4e  #.Section {BEGIN
5bb0: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
5bc0: 61 6e 73 61 63 74 69 6f 6e 20 7b 2a 42 45 47 49  ansaction {*BEGI
5bd0: 4e 20 43 4f 4d 4d 49 54 20 52 4f 4c 4c 42 41 43  N COMMIT ROLLBAC
5be0: 4b 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  K}..RecursiveBub
5bf0: 62 6c 65 44 69 61 67 72 61 6d 20 62 65 67 69 6e  bleDiagram begin
5c00: 2d 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42  -stmt.RecursiveB
5c10: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d  ubbleDiagram com
5c20: 6d 69 74 2d 73 74 6d 74 0a 52 65 63 75 72 73 69  mit-stmt.Recursi
5c30: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
5c40: 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f  rollback-stmt.</
5c50: 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68  tcl>..<p>.^No ch
5c60: 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64  anges can be mad
5c70: 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  e to the databas
5c80: 65 20 65 78 63 65 70 74 20 77 69 74 68 69 6e 20  e except within 
5c90: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  a transaction..^
5ca0: 41 6e 79 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74  Any command that
5cb0: 20 63 68 61 6e 67 65 73 20 74 68 65 20 64 61 74   changes the dat
5cc0: 61 62 61 73 65 20 28 62 61 73 69 63 61 6c 6c 79  abase (basically
5cd0: 2c 20 61 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e  , any SQL comman
5ce0: 64 0a 6f 74 68 65 72 20 74 68 61 6e 20 5b 53 45  d.other than [SE
5cf0: 4c 45 43 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f  LECT]) will auto
5d00: 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 20  matically start 
5d10: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 66  a transaction if
5d20: 0a 6f 6e 65 20 69 73 20 6e 6f 74 20 61 6c 72 65  .one is not alre
5d30: 61 64 79 20 69 6e 20 65 66 66 65 63 74 2e 20 20  ady in effect.  
5d40: 5e 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73  ^Automatically s
5d50: 74 61 72 74 65 64 20 74 72 61 6e 73 61 63 74 69  tarted transacti
5d60: 6f 6e 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65  ons.are committe
5d70: 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20  d when the last 
5d80: 71 75 65 72 79 20 66 69 6e 69 73 68 65 73 2e 0a  query finishes..
5d90: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73  </p>..<p>.^Trans
5da0: 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 73  actions can be s
5db0: 74 61 72 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20  tarted manually 
5dc0: 75 73 69 6e 67 20 74 68 65 20 42 45 47 49 4e 0a  using the BEGIN.
5dd0: 63 6f 6d 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68  command.  ^(Such
5de0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 75 73   transactions us
5df0: 75 61 6c 6c 79 20 70 65 72 73 69 73 74 20 75 6e  ually persist un
5e00: 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d  til the next.COM
5e10: 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20  MIT or ROLLBACK 
5e20: 63 6f 6d 6d 61 6e 64 2e 20 20 42 75 74 20 61 20  command.  But a 
5e30: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c  transaction will
5e40: 20 61 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20   also .ROLLBACK 
5e50: 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
5e60: 69 73 20 63 6c 6f 73 65 64 20 6f 72 20 69 66 20  is closed or if 
5e70: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 0a  an error occurs.
5e80: 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  and the ROLLBACK
5e90: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
5ea0: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69  tion algorithm i
5eb0: 73 20 73 70 65 63 69 66 69 65 64 2e 29 5e 0a 53  s specified.)^.S
5ec0: 65 65 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61  ee the documenta
5ed0: 74 69 6f 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20  tion on the [ON 
5ee0: 43 4f 4e 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65  CONFLICT].clause
5ef0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
5f00: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
5f10: 74 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63  t the ROLLBACK.c
5f20: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
5f30: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f  on algorithm..</
5f40: 70 3e 0a 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41  p>..<p>.^END TRA
5f50: 4e 53 41 43 54 49 4f 4e 20 69 73 20 61 6e 20 61  NSACTION is an a
5f60: 6c 69 61 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e  lias for COMMIT.
5f70: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61  .</p>..<p> ^(Tra
5f80: 6e 73 61 63 74 69 6f 6e 73 20 63 72 65 61 74 65  nsactions create
5f90: 64 20 75 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e  d using BEGIN...
5fa0: 43 4f 4d 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65  COMMIT do not ne
5fb0: 73 74 2e 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65  st.)^.^For neste
5fc0: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20  d transactions, 
5fd0: 75 73 65 20 74 68 65 20 5b 53 41 56 45 50 4f 49  use the [SAVEPOI
5fe0: 4e 54 5d 20 61 6e 64 20 5b 52 45 4c 45 41 53 45  NT] and [RELEASE
5ff0: 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20  ] commands..The 
6000: 22 54 4f 20 53 41 56 45 50 4f 49 4e 54 20 3c 79  "TO SAVEPOINT <y
6010: 79 74 65 72 6d 3e 6e 61 6d 65 3c 2f 79 79 74 65  yterm>name</yyte
6020: 72 6d 3e 22 20 63 6c 61 75 73 65 20 6f 66 20 74  rm>" clause of t
6030: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
6040: 61 6e 64 20 73 68 6f 77 6e 0a 69 6e 20 74 68 65  and shown.in the
6050: 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20   syntax diagram 
6060: 61 62 6f 76 65 20 69 73 20 6f 6e 6c 79 20 61 70  above is only ap
6070: 70 6c 69 63 61 62 6c 65 20 74 6f 20 5b 53 41 56  plicable to [SAV
6080: 45 50 4f 49 4e 54 5d 0a 74 72 61 6e 73 61 63 74  EPOINT].transact
6090: 69 6f 6e 73 2e 20 20 5e 41 6e 20 61 74 74 65 6d  ions.  ^An attem
60a0: 70 74 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65  pt to invoke the
60b0: 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 77   BEGIN command w
60c0: 69 74 68 69 6e 0a 61 20 74 72 61 6e 73 61 63 74  ithin.a transact
60d0: 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77 69  ion will fail wi
60e0: 74 68 20 61 6e 20 65 72 72 6f 72 2c 20 72 65 67  th an error, reg
60f0: 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
6100: 65 72 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69  er.the transacti
6110: 6f 6e 20 77 61 73 20 73 74 61 72 74 65 64 20 62  on was started b
6120: 79 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f 72  y [SAVEPOINT] or
6130: 20 61 20 70 72 69 6f 72 20 42 45 47 49 4e 2e 0a   a prior BEGIN..
6140: 5e 54 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d  ^The COMMIT comm
6150: 61 6e 64 20 61 6e 64 20 74 68 65 20 52 4f 4c 4c  and and the ROLL
6160: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74  BACK command wit
6170: 68 6f 75 74 20 74 68 65 20 54 4f 20 63 6c 61 75  hout the TO clau
6180: 73 65 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d 65  se.work the same
6190: 20 6f 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20   on [SAVEPOINT] 
61a0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 73 20  transactions as 
61b0: 74 68 65 79 20 64 6f 20 77 69 74 68 20 74 72 61  they do with tra
61c0: 6e 73 61 63 74 69 6f 6e 73 0a 73 74 61 72 74 65  nsactions.starte
61d0: 64 20 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a  d by BEGIN.</p>.
61e0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
61f0: 74 20 69 6d 6d 65 64 69 61 74 65 20 7b 42 45 47  t immediate {BEG
6200: 49 4e 20 49 4d 4d 45 44 49 41 54 45 7d 20 7b 42  IN IMMEDIATE} {B
6210: 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 7d 3c  EGIN EXCLUSIVE}<
6220: 2f 74 63 6c 3e 0a 3c 70 3e 0a 5e 54 72 61 6e 73  /tcl>.<p>.^Trans
6230: 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64  actions can be d
6240: 65 66 65 72 72 65 64 2c 20 69 6d 6d 65 64 69 61  eferred, immedia
6250: 74 65 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65  te, or exclusive
6260: 2e 20 20 0a 5e 54 68 65 20 64 65 66 61 75 6c 74  .  .^The default
6270: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 68   transaction beh
6280: 61 76 69 6f 72 20 69 73 20 64 65 66 65 72 72 65  avior is deferre
6290: 64 2e 0a 5e 44 65 66 65 72 72 65 64 20 6d 65 61  d..^Deferred mea
62a0: 6e 73 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73  ns that no locks
62b0: 20 61 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e   are acquired.on
62c0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e   the database un
62d0: 74 69 6c 20 74 68 65 20 64 61 74 61 62 61 73 65  til the database
62e0: 20 69 73 20 66 69 72 73 74 20 61 63 63 65 73 73   is first access
62f0: 65 64 2e 20 20 5e 54 68 75 73 20 77 69 74 68 20  ed.  ^Thus with 
6300: 61 0a 64 65 66 65 72 72 65 64 20 74 72 61 6e 73  a.deferred trans
6310: 61 63 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49  action, the BEGI
6320: 4e 20 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65  N statement itse
6330: 6c 66 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20  lf does nothing 
6340: 74 6f 20 74 68 65 0a 66 69 6c 65 73 79 73 74 65  to the.filesyste
6350: 6d 2e 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e  m.  ^Locks.are n
6360: 6f 74 20 61 63 71 75 69 72 65 64 20 75 6e 74 69  ot acquired unti
6370: 6c 20 74 68 65 20 66 69 72 73 74 20 72 65 61 64  l the first read
6380: 20 6f 72 20 77 72 69 74 65 20 6f 70 65 72 61 74   or write operat
6390: 69 6f 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74  ion.  ^The first
63a0: 20 72 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20   read.operation 
63b0: 61 67 61 69 6e 73 74 20 61 20 64 61 74 61 62 61  against a databa
63c0: 73 65 20 63 72 65 61 74 65 73 20 61 20 5b 53 48  se creates a [SH
63d0: 41 52 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20 74  ARED] lock and t
63e0: 68 65 20 66 69 72 73 74 0a 77 72 69 74 65 20 6f  he first.write o
63f0: 70 65 72 61 74 69 6f 6e 20 63 72 65 61 74 65 73  peration creates
6400: 20 61 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f   a [RESERVED] lo
6410: 63 6b 2e 20 20 20 5e 42 65 63 61 75 73 65 20 74  ck.   ^Because t
6420: 68 65 20 61 63 71 75 69 73 69 74 69 6f 6e 20 6f  he acquisition o
6430: 66 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66 65 72  f.locks is defer
6440: 72 65 64 20 75 6e 74 69 6c 20 74 68 65 79 20 61  red until they a
6450: 72 65 20 6e 65 65 64 65 64 2c 20 69 74 20 69 73  re needed, it is
6460: 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
6470: 6e 6f 74 68 65 72 0a 74 68 72 65 61 64 20 6f 72  nother.thread or
6480: 20 70 72 6f 63 65 73 73 20 63 6f 75 6c 64 20 63   process could c
6490: 72 65 61 74 65 20 61 20 73 65 70 61 72 61 74 65  reate a separate
64a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
64b0: 20 77 72 69 74 65 20 74 6f 0a 74 68 65 20 64 61   write to.the da
64c0: 74 61 62 61 73 65 20 61 66 74 65 72 20 74 68 65  tabase after the
64d0: 20 42 45 47 49 4e 20 6f 6e 20 74 68 65 20 63 75   BEGIN on the cu
64e0: 72 72 65 6e 74 20 74 68 72 65 61 64 20 68 61 73  rrent thread has
64f0: 20 65 78 65 63 75 74 65 64 2e 0a 5e 49 66 20 74   executed..^If t
6500: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
6510: 73 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68 65  s immediate, the
6520: 6e 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63  n [RESERVED] loc
6530: 6b 73 0a 61 72 65 20 61 63 71 75 69 72 65 64 20  ks.are acquired 
6540: 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73  on all databases
6550: 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20   as soon as the 
6560: 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73  BEGIN command is
6570: 0a 65 78 65 63 75 74 65 64 2c 20 77 69 74 68 6f  .executed, witho
6580: 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74  ut waiting for t
6590: 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20 62  he.database to b
65a0: 65 20 75 73 65 64 2e 20 20 5e 41 66 74 65 72 20  e used.  ^After 
65b0: 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54  a BEGIN IMMEDIAT
65c0: 45 2c 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64 61  E, .no other [da
65d0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
65e0: 6e 5d 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20  n] will be able 
65f0: 74 6f 20 77 72 69 74 65 20 74 6f 20 74 68 65 20  to write to the 
6600: 64 61 74 61 62 61 73 65 20 6f 72 0a 64 6f 20 61  database or.do a
6610: 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45   BEGIN IMMEDIATE
6620: 20 6f 72 20 42 45 47 49 4e 20 45 58 43 4c 55 53   or BEGIN EXCLUS
6630: 49 56 45 2e 20 20 5e 4f 74 68 65 72 20 70 72 6f  IVE.  ^Other pro
6640: 63 65 73 73 65 73 20 63 61 6e 20 63 6f 6e 74 69  cesses can conti
6650: 6e 75 65 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d  nue.to read from
6660: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 68   the database, h
6670: 6f 77 65 76 65 72 2e 20 20 5e 41 6e 20 65 78 63  owever.  ^An exc
6680: 6c 75 73 69 76 65 20 74 72 61 6e 73 61 63 74 69  lusive transacti
6690: 6f 6e 20 63 61 75 73 65 73 0a 5b 45 58 43 4c 55  on causes.[EXCLU
66a0: 53 49 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20 62  SIVE] locks to b
66b0: 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c  e acquired on al
66c0: 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20 5e 41  l databases.  ^A
66d0: 66 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43  fter a BEGIN.EXC
66e0: 4c 55 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65 72  LUSIVE, no other
66f0: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
6700: 63 74 69 6f 6e 5d 20 65 78 63 65 70 74 20 66 6f  ction] except fo
6710: 72 20 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74  r [read_uncommit
6720: 74 65 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73  ted].connections
6730: 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f   will be able to
6740: 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61   read the databa
6750: 73 65 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72 20  se and no other 
6760: 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 6f  connection witho
6770: 75 74 0a 65 78 63 65 70 74 69 6f 6e 20 77 69 6c  ut.exception wil
6780: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69  l be able to wri
6790: 74 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  te the database 
67a0: 75 6e 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61  until the transa
67b0: 63 74 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74  ction is.complet
67c0: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41  e..</p>..<p>.^(A
67d0: 6e 20 69 6d 70 6c 69 63 69 74 20 74 72 61 6e 73  n implicit trans
67e0: 61 63 74 69 6f 6e 20 28 61 20 74 72 61 6e 73 61  action (a transa
67f0: 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 73 74  ction that is st
6800: 61 72 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  arted automatica
6810: 6c 6c 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73  lly,.not a trans
6820: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 62  action started b
6830: 79 20 42 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d  y BEGIN) is comm
6840: 69 74 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  itted automatica
6850: 6c 6c 79 20 77 68 65 6e 0a 74 68 65 20 6c 61 73  lly when.the las
6860: 74 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  t active stateme
6870: 6e 74 20 66 69 6e 69 73 68 65 73 2e 20 20 41 20  nt finishes.  A 
6880: 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68  statement finish
6890: 65 73 20 77 68 65 6e 20 69 74 73 0a 70 72 65 70  es when its.prep
68a0: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
68b0: 73 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74  s [sqlite3_reset
68c0: 28 29 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b  () | reset] or.[
68d0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
68e0: 28 29 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e  () | finalized].
68f0: 20 20 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74    An open [sqlit
6900: 65 33 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f  e3_blob] used fo
6910: 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c  r.incremental BL
6920: 4f 42 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73  OB I/O counts as
6930: 20 61 6e 20 75 6e 66 69 6e 69 73 68 65 64 20 73   an unfinished s
6940: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b  tatement.  The [
6950: 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69  sqlite3_blob].fi
6960: 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74 20 69  nishes when it i
6970: 73 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f  s [sqlite3_blob_
6980: 63 6c 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65 64  close() | closed
6990: 5d 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e  ].)^.</p>..<p>.^
69a0: 54 68 65 20 65 78 70 6c 69 63 69 74 20 43 4f 4d  The explicit COM
69b0: 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73  MIT command runs
69c0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65 76   immediately, ev
69d0: 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a  en if there are.
69e0: 70 65 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d  pending [SELECT]
69f0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48   statements.  ^H
6a00: 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72 65  owever, if there
6a10: 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69   are pending.wri
6a20: 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74  te operations, t
6a30: 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e  he COMMIT comman
6a40: 64 0a 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  d.will fail with
6a50: 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b   an error code [
6a60: 53 51 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f  SQLITE_BUSY]..</
6a70: 70 3e 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65  p>..<p>.^An atte
6a80: 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65 20 43  mpt to execute C
6a90: 4f 4d 4d 49 54 20 6d 69 67 68 74 20 61 6c 73 6f  OMMIT might also
6aa0: 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53   result in an [S
6ab0: 51 4c 49 54 45 5f 42 55 53 59 5d 20 72 65 74 75  QLITE_BUSY] retu
6ac0: 72 6e 20 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e  rn code.if an an
6ad0: 6f 74 68 65 72 20 74 68 72 65 61 64 20 6f 72 20  other thread or 
6ae0: 70 72 6f 63 65 73 73 20 68 61 73 20 61 20 5b 73  process has a [s
6af0: 68 61 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74  hared lock] on t
6b00: 68 65 20 64 61 74 61 62 61 73 65 0a 74 68 61 74  he database.that
6b10: 20 70 72 65 76 65 6e 74 65 64 20 74 68 65 20 64   prevented the d
6b20: 61 74 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69  atabase from bei
6b30: 6e 67 20 75 70 64 61 74 65 64 2e 20 20 5e 57 68  ng updated.  ^Wh
6b40: 65 6e 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20  en COMMIT fails 
6b50: 69 6e 20 74 68 69 73 0a 77 61 79 2c 20 74 68 65  in this.way, the
6b60: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d   transaction rem
6b70: 61 69 6e 73 20 61 63 74 69 76 65 20 61 6e 64 20  ains active and 
6b80: 74 68 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62  the COMMIT can b
6b90: 65 20 72 65 74 72 69 65 64 20 6c 61 74 65 72 0a  e retried later.
6ba0: 61 66 74 65 72 20 74 68 65 20 72 65 61 64 65 72  after the reader
6bb0: 20 68 61 73 20 68 61 64 20 61 20 63 68 61 6e 63   has had a chanc
6bc0: 65 20 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e  e to clear..</p>
6bd0: 0a 0a 3c 70 3e 0a 49 6e 20 76 65 72 79 20 6f 6c  ..<p>.In very ol
6be0: 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  d versions of SQ
6bf0: 4c 69 74 65 20 28 62 65 66 6f 72 65 20 76 65 72  Lite (before ver
6c00: 73 69 6f 6e 20 33 2e 37 2e 31 31 20 2d 20 5b 64  sion 3.7.11 - [d
6c10: 61 74 65 6f 66 3a 33 2e 37 2e 31 31 5d 29 0a 74  ateof:3.7.11]).t
6c20: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c  he ROLLBACK will
6c30: 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72   fail with an er
6c40: 72 6f 72 20 63 6f 64 65 20 0a 5b 53 51 4c 49 54  ror code .[SQLIT
6c50: 45 5f 42 55 53 59 5d 20 69 66 20 74 68 65 72 65  E_BUSY] if there
6c60: 20 61 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67   are any pending
6c70: 20 71 75 65 72 69 65 73 2e 20 20 5e 49 6e 20 6d   queries.  ^In m
6c80: 6f 72 65 20 72 65 63 65 6e 74 0a 76 65 72 73 69  ore recent.versi
6c90: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 74  ons of SQLite, t
6ca0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c  he ROLLBACK will
6cb0: 20 70 72 6f 63 65 65 64 20 61 6e 64 20 70 65 6e   proceed and pen
6cc0: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0a  ding statements.
6cd0: 77 69 6c 6c 20 6f 66 74 65 6e 20 62 65 20 61 62  will often be ab
6ce0: 6f 72 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74  orted, causing t
6cf0: 68 65 6d 20 74 6f 20 72 65 74 75 72 6e 20 61 6e  hem to return an
6d00: 20 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54 5d 20   [SQLITE_ABORT] 
6d10: 6f 72 0a 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54  or.[SQLITE_ABORT
6d20: 5f 52 4f 4c 4c 42 41 43 4b 5d 20 65 72 72 6f 72  _ROLLBACK] error
6d30: 2e 0a 5e 49 6e 20 53 51 4c 69 74 65 20 76 65 72  ..^In SQLite ver
6d40: 73 69 6f 6e 20 33 2e 38 2e 38 20 28 5b 64 61 74  sion 3.8.8 ([dat
6d50: 65 6f 66 3a 33 2e 38 2e 38 5d 29 20 61 6e 64 20  eof:3.8.8]) and 
6d60: 6c 61 74 65 72 2c 0a 61 20 70 65 6e 64 69 6e 67  later,.a pending
6d70: 20 72 65 61 64 20 77 69 6c 6c 20 63 6f 6e 74 69   read will conti
6d80: 6e 75 65 20 66 75 6e 63 74 69 6f 6e 69 6e 67 0a  nue functioning.
6d90: 61 66 74 65 72 20 74 68 65 20 52 4f 4c 4c 42 41  after the ROLLBA
6da0: 43 4b 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68  CK as long as th
6db0: 65 20 52 4f 4c 4c 42 41 43 4b 20 64 6f 65 73 20  e ROLLBACK does 
6dc0: 6e 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64  not modify the d
6dd0: 61 74 61 62 61 73 65 0a 73 63 68 65 6d 61 2e 0a  atabase.schema..
6de0: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52  </p>..<p>.If [PR
6df0: 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  AGMA journal_mod
6e00: 65 5d 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46  e] is set to OFF
6e10: 20 28 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67   (thus disabling
6e20: 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f   the rollback jo
6e30: 75 72 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e  urnal.file) then
6e40: 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66   the behavior of
6e50: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
6e60: 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e  mmand is undefin
6e70: 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65  ed..</p>..<h3>Re
6e80: 73 70 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73  sponse To Errors
6e90: 20 57 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61   Within A Transa
6ea0: 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20  ction</h3>..<p> 
6eb0: 5e 28 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e  ^(If certain kin
6ec0: 64 73 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63  ds of errors occ
6ed0: 75 72 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  ur within a tran
6ee0: 73 61 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61  saction, the.tra
6ef0: 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20  nsaction may or 
6f00: 6d 61 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65  may not be rolle
6f10: 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63  d back automatic
6f20: 61 6c 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72  ally.  The.error
6f30: 73 20 74 68 61 74 20 63 61 6e 20 63 61 75 73 65  s that can cause
6f40: 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
6f50: 6c 6c 62 61 63 6b 20 69 6e 63 6c 75 64 65 3a 3c  llback include:<
6f60: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b  /p>..<ul>.<li> [
6f70: 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61  SQLITE_FULL]: da
6f80: 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20 66  tabase or disk f
6f90: 75 6c 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45  ull.<li> [SQLITE
6fa0: 5f 49 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f  _IOERR]: disk I/
6fb0: 4f 20 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51  O error.<li> [SQ
6fc0: 4c 49 54 45 5f 42 55 53 59 5d 3a 20 64 61 74 61  LITE_BUSY]: data
6fd0: 62 61 73 65 20 69 6e 20 75 73 65 20 62 79 20 61  base in use by a
6fe0: 6e 6f 74 68 65 72 20 70 72 6f 63 65 73 73 0a 3c  nother process.<
6ff0: 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45  li> [SQLITE_NOME
7000: 4d 5d 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72  M]: out or memor
7010: 79 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e  y.</ul>)^..<p>.^
7020: 46 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65  For all of these
7030: 20 65 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20   errors, SQLite 
7040: 61 74 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f  attempts to undo
7050: 20 6a 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74   just the one st
7060: 61 74 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77  atement.it was w
7070: 6f 72 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65  orking on and le
7080: 61 76 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d  ave changes from
7090: 20 70 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74   prior statement
70a0: 73 20 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d  s within the.sam
70b0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e  e transaction in
70c0: 74 61 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75  tact and continu
70d0: 65 20 77 69 74 68 20 74 68 65 20 74 72 61 6e 73  e with the trans
70e0: 61 63 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65  action.  ^Howeve
70f0: 72 2c 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r, .depending on
7100: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62   the statement b
7110: 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20 61  eing evaluated a
7120: 6e 64 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20  nd the point at 
7130: 77 68 69 63 68 20 74 68 65 0a 65 72 72 6f 72 20  which the.error 
7140: 6f 63 63 75 72 73 2c 20 69 74 20 6d 69 67 68 74  occurs, it might
7150: 20 62 65 20 6e 65 63 65 73 73 61 72 79 20 66 6f   be necessary fo
7160: 72 20 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c  r SQLite to roll
7170: 62 61 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20  back and.cancel 
7180: 74 68 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73  the entire trans
7190: 61 63 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70  action.  ^An app
71a0: 6c 69 63 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c  lication can tel
71b0: 6c 20 77 68 69 63 68 0a 63 6f 75 72 73 65 20 6f  l which.course o
71c0: 66 20 61 63 74 69 6f 6e 20 53 51 4c 69 74 65 20  f action SQLite 
71d0: 74 6f 6f 6b 20 62 79 20 75 73 69 6e 67 20 74 68  took by using th
71e0: 65 0a 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  e.[sqlite3_get_a
71f0: 75 74 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c  utocommit()] C-l
7200: 61 6e 67 75 61 67 65 20 69 6e 74 65 72 66 61 63  anguage interfac
7210: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73  e.</p>..<p>It is
7220: 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61   recommended tha
7230: 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72  t applications r
7240: 65 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 65 72  espond to the er
7250: 72 6f 72 73 0a 6c 69 73 74 65 64 20 61 62 6f 76  rors.listed abov
7260: 65 20 62 79 20 65 78 70 6c 69 63 69 74 6c 79 20  e by explicitly 
7270: 69 73 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41  issuing a ROLLBA
7280: 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66  CK command.  ^If
7290: 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f   the .transactio
72a0: 6e 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  n has already be
72b0: 65 6e 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61  en rolled back a
72c0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20  utomatically.by 
72d0: 74 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e  the error respon
72e0: 73 65 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c  se, then the ROL
72f0: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69  LBACK command wi
7300: 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 0a  ll fail with an.
7310: 65 72 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61  error, but no ha
7320: 72 6d 20 69 73 20 63 61 75 73 65 64 20 62 79 20  rm is caused by 
7330: 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75  this.</p>..<p>Fu
7340: 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
7350: 20 53 51 4c 69 74 65 20 6d 61 79 20 65 78 74 65   SQLite may exte
7360: 6e 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65  nd the list of e
7370: 72 72 6f 72 73 20 77 68 69 63 68 0a 6d 69 67 68  rrors which.migh
7380: 74 20 63 61 75 73 65 20 61 75 74 6f 6d 61 74 69  t cause automati
7390: 63 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f  c transaction ro
73a0: 6c 6c 62 61 63 6b 2e 20 20 46 75 74 75 72 65 20  llback.  Future 
73b0: 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69  versions of.SQLi
73c0: 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  te might change 
73d0: 74 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e  the error respon
73e0: 73 65 2e 20 20 49 6e 20 70 61 72 74 69 63 75 6c  se.  In particul
73f0: 61 72 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73  ar, we may.choos
7400: 65 20 74 6f 20 73 69 6d 70 6c 69 66 79 20 74 68  e to simplify th
7410: 65 20 69 6e 74 65 72 66 61 63 65 20 69 6e 20 66  e interface in f
7420: 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f  uture versions o
7430: 66 20 53 51 4c 69 74 65 20 62 79 0a 63 61 75 73  f SQLite by.caus
7440: 69 6e 67 20 74 68 65 20 65 72 72 6f 72 73 20 61  ing the errors a
7450: 62 6f 76 65 20 74 6f 20 66 6f 72 63 65 20 61 6e  bove to force an
7460: 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72   unconditional r
7470: 6f 6c 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74  ollback.</p>..<t
7480: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
7490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
74a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
74b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
74c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
74d0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56  ###.Section {SAV
74e0: 45 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e  EPOINT} savepoin
74f0: 74 20 7b 53 41 56 45 50 4f 49 4e 54 20 52 45 4c  t {SAVEPOINT REL
7500: 45 41 53 45 7d 0a 0a 52 65 63 75 72 73 69 76 65  EASE}..Recursive
7510: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61  BubbleDiagram sa
7520: 76 65 70 6f 69 6e 74 2d 73 74 6d 74 0a 52 65 63  vepoint-stmt.Rec
7530: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
7540: 72 61 6d 20 72 65 6c 65 61 73 65 2d 73 74 6d 74  ram release-stmt
7550: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
7560: 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b  Diagram rollback
7570: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
7580: 3e 20 5e 53 41 56 45 50 4f 49 4e 54 73 20 61 72  > ^SAVEPOINTs ar
7590: 65 20 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72  e a method of cr
75a0: 65 61 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69  eating transacti
75b0: 6f 6e 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a  ons, similar to.
75c0: 5b 42 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d  [BEGIN] and [COM
75d0: 4d 49 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61  MIT], except tha
75e0: 74 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  t the SAVEPOINT 
75f0: 61 6e 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  and RELEASE comm
7600: 61 6e 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61  ands.are named a
7610: 6e 64 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64  nd may be nested
7620: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20  .</p>..<p> ^The 
7630: 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e  SAVEPOINT comman
7640: 64 20 73 74 61 72 74 73 20 61 20 6e 65 77 20 74  d starts a new t
7650: 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 20  ransaction with 
7660: 61 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61  a name..^The tra
7670: 6e 73 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e  nsaction names n
7680: 65 65 64 20 6e 6f 74 20 62 65 20 75 6e 69 71 75  eed not be uniqu
7690: 65 2e 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e 54  e..^(A SAVEPOINT
76a0: 20 63 61 6e 20 62 65 20 73 74 61 72 74 65 64 20   can be started 
76b0: 65 69 74 68 65 72 20 77 69 74 68 69 6e 20 6f 72  either within or
76c0: 20 6f 75 74 73 69 64 65 20 6f 66 0a 61 20 5b 42   outside of.a [B
76d0: 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d  EGIN]...[COMMIT]
76e0: 2e 29 5e 20 20 5e 28 57 68 65 6e 20 61 20 53 41  .)^  ^(When a SA
76f0: 56 45 50 4f 49 4e 54 20 69 73 20 74 68 65 20 6f  VEPOINT is the o
7700: 75 74 65 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f  uter-most savepo
7710: 69 6e 74 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f  int.and it is no
7720: 74 20 77 69 74 68 69 6e 20 61 20 5b 42 45 47 49  t within a [BEGI
7730: 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68  N]...[COMMIT] th
7740: 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  en the behavior 
7750: 69 73 20 74 68 65 0a 73 61 6d 65 20 61 73 20 42  is the.same as B
7760: 45 47 49 4e 20 44 45 46 45 52 52 45 44 20 54 52  EGIN DEFERRED TR
7770: 41 4e 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e  ANSACTION.)^</p>
7780: 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41  ..<p>^The ROLLBA
7790: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65  CK TO command re
77a0: 76 65 72 74 73 20 74 68 65 20 73 74 61 74 65 20  verts the state 
77b0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
77c0: 62 61 63 6b 20 74 6f 20 77 68 61 74 0a 69 74 20  back to what.it 
77d0: 77 61 73 20 6a 75 73 74 20 61 66 74 65 72 20 74  was just after t
77e0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
77f0: 20 53 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f   SAVEPOINT.  ^No
7800: 74 65 20 74 68 61 74 20 75 6e 6c 69 6b 65 20 74  te that unlike t
7810: 68 61 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42  hat.plain [ROLLB
7820: 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69  ACK] command (wi
7830: 74 68 6f 75 74 20 74 68 65 20 54 4f 20 6b 65 79  thout the TO key
7840: 77 6f 72 64 29 20 74 68 65 20 52 4f 4c 4c 42 41  word) the ROLLBA
7850: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f  CK TO command.do
7860: 65 73 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68  es not cancel th
7870: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  e transaction.  
7880: 5e 49 6e 73 74 65 61 64 20 6f 66 20 63 61 6e 63  ^Instead of canc
7890: 65 6c 6c 69 6e 67 20 74 68 65 20 74 72 61 6e 73  elling the trans
78a0: 61 63 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c  action,.the ROLL
78b0: 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20  BACK TO command 
78c0: 72 65 73 74 61 72 74 73 20 74 68 65 20 74 72 61  restarts the tra
78d0: 6e 73 61 63 74 69 6f 6e 20 61 67 61 69 6e 20 61  nsaction again a
78e0: 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  t the beginning.
78f0: 0a 5e 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e  .^All intervenin
7900: 67 20 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65  g SAVEPOINTs are
7910: 20 63 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76   canceled, howev
7920: 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  er.</p>..<p>^The
7930: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
7940: 20 69 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d   is like a [COMM
7950: 49 54 5d 20 66 6f 72 20 61 20 53 41 56 45 50 4f  IT] for a SAVEPO
7960: 49 4e 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53  INT..^The RELEAS
7970: 45 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73  E command causes
7980: 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20   all savepoints 
7990: 62 61 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c  back to and incl
79a0: 75 64 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20  uding the .most 
79b0: 72 65 63 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  recent savepoint
79c0: 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67   with a matching
79d0: 20 6e 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f   name to be remo
79e0: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 0a 74 72  ved from the .tr
79f0: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e  ansaction stack.
7a00: 20 20 5e 54 68 65 20 52 45 4c 45 41 53 45 20 6f    ^The RELEASE o
7a10: 66 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73  f an inner trans
7a20: 61 63 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20  action.does not 
7a30: 63 61 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65  cause any change
7a40: 73 20 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20  s to be written 
7a50: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
7a60: 66 69 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a  file; it merely.
7a70: 72 65 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e  removes savepoin
7a80: 74 73 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e  ts from the tran
7a90: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75  saction stack su
7aa0: 63 68 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f  ch that it is.no
7ab0: 20 6c 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65   longer possible
7ac0: 20 74 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20   to ROLLBACK TO 
7ad0: 74 68 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73  those savepoints
7ae0: 2e 0a 5e 49 66 20 61 20 52 45 4c 45 41 53 45 20  ..^If a RELEASE 
7af0: 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73  command releases
7b00: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
7b10: 61 76 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61  avepoint, so.tha
7b20: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
7b30: 6e 20 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20  n stack becomes 
7b40: 65 6d 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45  empty, then RELE
7b50: 41 53 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a  ASE is the same.
7b60: 61 73 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68  as [COMMIT]..^Th
7b70: 65 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61  e [COMMIT] comma
7b80: 6e 64 20 6d 61 79 20 62 65 20 75 73 65 64 20 74  nd may be used t
7b90: 6f 20 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61  o release all sa
7ba0: 76 65 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d  vepoints and.com
7bb0: 6d 69 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  mit the transact
7bc0: 69 6f 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20  ion even if the 
7bd0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20  transaction was 
7be0: 6f 72 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74  originally start
7bf0: 65 64 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e  ed.by a SAVEPOIN
7c00: 54 20 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61  T command instea
7c10: 64 20 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63  d of a [BEGIN] c
7c20: 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ommand.</p>..<p>
7c30: 5e 49 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e  ^If the savepoin
7c40: 74 2d 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45  t-name in a RELE
7c50: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73  ASE command does
7c60: 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73   not match any.s
7c70: 61 76 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74  avepoint current
7c80: 6c 79 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61  ly in the transa
7c90: 63 74 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65  ction stack, the
7ca0: 6e 20 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73 20  n no savepoints 
7cb0: 61 72 65 0a 72 65 6c 65 61 73 65 64 2c 20 74 68  are.released, th
7cc0: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 75 6e  e database is un
7cd0: 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 74 68 65  changed, and the
7ce0: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
7cf0: 20 72 65 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f   returns.an erro
7d00: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65  r.</p>..<p>^Note
7d10: 20 74 68 61 74 20 61 6e 20 69 6e 6e 65 72 20 74   that an inner t
7d20: 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74  ransaction might
7d30: 20 63 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20 74   commit (using t
7d40: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
7d50: 6e 64 29 0a 62 75 74 20 74 68 65 6e 20 6c 61 74  nd).but then lat
7d60: 65 72 20 68 61 76 65 20 69 74 73 20 77 6f 72 6b  er have its work
7d70: 20 75 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c   undone by a ROL
7d80: 4c 42 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65  LBACK in an oute
7d90: 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  r transaction..^
7da0: 41 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20  A power failure 
7db0: 6f 72 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68  or program crash
7dc0: 20 6f 72 20 4f 53 20 63 72 61 73 68 20 77 69 6c   or OS crash wil
7dd0: 6c 20 63 61 75 73 65 20 74 68 65 20 6f 75 74 65  l cause the oute
7de0: 72 2d 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74 69  r-most.transacti
7df0: 6f 6e 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20  on to rollback, 
7e00: 75 6e 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e  undoing all chan
7e10: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63  ges that have oc
7e20: 63 75 72 72 65 64 20 77 69 74 68 69 6e 0a 74 68  curred within.th
7e30: 61 74 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63  at outer transac
7e40: 74 69 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67  tion, even chang
7e50: 65 73 20 74 68 61 74 20 68 61 76 65 20 73 75 70  es that have sup
7e60: 70 6f 73 65 64 6c 79 20 62 65 65 6e 20 22 63 6f  posedly been "co
7e70: 6d 6d 69 74 74 65 64 22 0a 62 79 20 74 68 65 20  mmitted".by the 
7e80: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e  RELEASE command.
7e90: 20 20 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f    ^Content is no
7ea0: 74 20 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69  t actually commi
7eb0: 74 74 65 64 20 6f 6e 20 74 68 65 20 64 69 73 6b  tted on the disk
7ec0: 20 0a 75 6e 74 69 6c 20 74 68 65 20 6f 75 74 65   .until the oute
7ed0: 72 6d 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f  rmost transactio
7ee0: 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a  n commits.</p>..
7ef0: 3c 70 3e 54 68 65 72 65 20 61 72 65 20 73 65 76  <p>There are sev
7f00: 65 72 61 6c 20 77 61 79 73 20 6f 66 20 74 68 69  eral ways of thi
7f10: 6e 6b 69 6e 67 20 61 62 6f 75 74 20 74 68 65 20  nking about the 
7f20: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a  RELEASE command:
7f30: 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  </p>..<ul>.<li><
7f40: 70 3e 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76  p>.Some people v
7f50: 69 65 77 20 52 45 4c 45 41 53 45 20 61 73 20 74  iew RELEASE as t
7f60: 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  he equivalent of
7f70: 20 43 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53 41   COMMIT for a SA
7f80: 56 45 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73  VEPOINT..This is
7f90: 20 61 6e 20 61 63 63 65 70 74 61 62 6c 65 20 70   an acceptable p
7fa0: 6f 69 6e 74 20 6f 66 20 76 69 65 77 20 61 73 20  oint of view as 
7fb0: 6c 6f 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d 65  long as one reme
7fc0: 6d 62 65 72 73 20 74 68 61 74 20 74 68 65 0a 63  mbers that the.c
7fd0: 68 61 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65 64  hanges committed
7fe0: 20 62 79 20 61 6e 20 69 6e 6e 65 72 20 74 72 61   by an inner tra
7ff0: 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c  nsaction might l
8000: 61 74 65 72 20 62 65 20 75 6e 64 6f 6e 65 20 62  ater be undone b
8010: 79 20 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20  y a.rollback in 
8020: 61 6e 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63  an outer transac
8030: 74 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  tion.</p></li>..
8040: 3c 6c 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20  <li><p>.Another 
8050: 76 69 65 77 20 6f 66 20 52 45 4c 45 41 53 45 20  view of RELEASE 
8060: 69 73 20 74 68 61 74 20 69 74 20 6d 65 72 67 65  is that it merge
8070: 73 20 61 20 6e 61 6d 65 64 20 74 72 61 6e 73 61  s a named transa
8080: 63 74 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70  ction into its.p
8090: 61 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  arent transactio
80a0: 6e 2c 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e  n, so that the n
80b0: 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  amed transaction
80c0: 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 20   and its parent 
80d0: 62 65 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20  become.the same 
80e0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66  transaction.  Af
80f0: 74 65 72 20 52 45 4c 45 41 53 45 2c 20 74 68 65  ter RELEASE, the
8100: 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69   named transacti
8110: 6f 6e 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e  on and its paren
8120: 74 0a 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72  t.will commit or
8130: 20 72 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68   rollback togeth
8140: 65 72 2c 20 77 68 61 74 65 76 65 72 20 74 68 65  er, whatever the
8150: 69 72 20 66 61 74 65 20 6d 61 79 20 62 65 2e 0a  ir fate may be..
8160: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
8170: 70 3e 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20  p>.One can also 
8180: 74 68 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69  think of savepoi
8190: 6e 74 73 20 61 73 0a 22 6d 61 72 6b 73 22 20 69  nts as."marks" i
81a0: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
81b0: 6e 20 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20  n timeline.  In 
81c0: 74 68 69 73 20 76 69 65 77 2c 20 74 68 65 20 53  this view, the S
81d0: 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64  AVEPOINT command
81e0: 0a 63 72 65 61 74 65 73 20 61 20 6e 65 77 20 6d  .creates a new m
81f0: 61 72 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43  ark, the ROLLBAC
8200: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77  K TO command rew
8210: 69 6e 64 73 20 74 68 65 20 74 69 6d 65 6c 69 6e  inds the timelin
8220: 65 20 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e  e back.to a poin
8230: 74 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65  t just after the
8240: 20 6e 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64   named mark, and
8250: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
8260: 6d 61 6e 64 0a 65 72 61 73 65 73 20 6d 61 72 6b  mand.erases mark
8270: 73 20 66 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c  s from the timel
8280: 69 6e 65 20 77 69 74 68 6f 75 74 20 61 63 74 75  ine without actu
8290: 61 6c 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a  ally making any.
82a0: 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
82b0: 61 74 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c  atabase..</p></l
82c0: 69 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e  i>.</ul>....<h3>
82d0: 54 72 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74  Transaction Nest
82e0: 69 6e 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a  ing Rules</h3>..
82f0: 3c 70 3e 5e 54 68 65 20 6c 61 73 74 20 74 72 61  <p>^The last tra
8300: 6e 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64  nsaction started
8310: 20 77 69 6c 6c 20 62 65 20 74 68 65 20 66 69 72   will be the fir
8320: 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 63  st.transaction c
8330: 6f 6d 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c  ommitted or roll
8340: 65 64 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70  ed back.</p>..<p
8350: 3e 5e 54 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f  >^The [BEGIN] co
8360: 6d 6d 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73  mmand only works
8370: 20 69 66 20 74 68 65 20 74 72 61 6e 73 61 63 74   if the transact
8380: 69 6f 6e 20 73 74 61 63 6b 20 69 73 20 65 6d 70  ion stack is emp
8390: 74 79 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20  ty, or.in other 
83a0: 77 6f 72 64 73 20 69 66 20 74 68 65 72 65 20 61  words if there a
83b0: 72 65 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72  re no pending tr
83c0: 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66  ansactions.  ^If
83d0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
83e0: 0a 73 74 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d  .stack is not em
83f0: 70 74 79 20 77 68 65 6e 20 74 68 65 20 5b 42 45  pty when the [BE
8400: 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20  GIN] command is 
8410: 69 6e 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68  invoked, then th
8420: 65 20 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20  e command.fails 
8430: 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f  with an error.</
8440: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d  p>..<p>^The [COM
8450: 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d  MIT] command com
8460: 6d 69 74 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e  mits all outstan
8470: 64 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e  ding transaction
8480: 73 20 61 6e 64 20 6c 65 61 76 65 73 0a 74 68 65  s and leaves.the
8490: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
84a0: 63 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c  ck empty.</p>..<
84b0: 70 3e 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63  p>^The RELEASE c
84c0: 6f 6d 6d 61 6e 64 20 73 74 61 72 74 73 20 77 69  ommand starts wi
84d0: 74 68 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  th the most rece
84e0: 6e 74 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74  nt addition to t
84f0: 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he.transaction s
8500: 74 61 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65  tack and release
8510: 73 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63  s savepoints bac
8520: 6b 77 61 72 64 73 20 0a 69 6e 20 74 69 6d 65 20  kwards .in time 
8530: 75 6e 74 69 6c 20 69 74 20 72 65 6c 65 61 73 65  until it release
8540: 73 20 61 20 73 61 76 65 70 6f 69 6e 74 20 77 69  s a savepoint wi
8550: 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 73 61  th a matching sa
8560: 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50  vepoint-name..^P
8570: 72 69 6f 72 20 73 61 76 65 70 6f 69 6e 74 73 2c  rior savepoints,
8580: 20 65 76 65 6e 20 73 61 76 65 70 6f 69 6e 74 73   even savepoints
8590: 20 77 69 74 68 20 6d 61 74 63 68 69 6e 67 20 73   with matching s
85a0: 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20  avepoint-names, 
85b0: 61 72 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e  are.unchanged..^
85c0: 49 66 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  If the RELEASE c
85d0: 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 74 68  ommand causes th
85e0: 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e.transaction st
85f0: 61 63 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d  ack to become em
8600: 70 74 79 20 28 69 66 20 74 68 65 20 52 45 4c 45  pty (if the RELE
8610: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65  ASE command rele
8620: 61 73 65 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f  ases the.outermo
8630: 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66  st transaction f
8640: 72 6f 6d 20 74 68 65 20 73 74 61 63 6b 29 20 74  rom the stack) t
8650: 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74  hen the transact
8660: 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e  ion commits.</p>
8670: 0a 0a 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42  ..<p>^The [ROLLB
8680: 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74  ACK] command wit
8690: 68 6f 75 74 20 61 20 54 4f 20 63 6c 61 75 73 65  hout a TO clause
86a0: 20 72 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c   rolls backs all
86b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e   transactions.an
86c0: 64 20 6c 65 61 76 65 73 20 74 68 65 20 74 72 61  d leaves the tra
86d0: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65  nsaction stack e
86e0: 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  mpty.</p>..<p>^T
86f0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
8700: 61 6e 64 20 77 69 74 68 20 61 20 54 4f 20 63 6c  and with a TO cl
8710: 61 75 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20  ause rolls back 
8720: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69  transactions goi
8730: 6e 67 0a 62 61 63 6b 77 61 72 64 73 20 69 6e 20  ng.backwards in 
8740: 74 69 6d 65 20 62 61 63 6b 20 74 6f 20 74 68 65  time back to the
8750: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 53 41 56   most recent SAV
8760: 45 50 4f 49 4e 54 20 77 69 74 68 20 61 20 6d 61  EPOINT with a ma
8770: 74 63 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68  tching name..^Th
8780: 65 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68  e SAVEPOINT with
8790: 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 6e 61   the matching na
87a0: 6d 65 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68  me remains on th
87b0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e transaction st
87c0: 61 63 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74  ack,.but all dat
87d0: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 74 68  abase changes th
87e0: 61 74 20 6f 63 63 75 72 72 65 64 20 61 66 74 65  at occurred afte
87f0: 72 20 74 68 61 74 20 53 41 56 45 50 4f 49 4e 54  r that SAVEPOINT
8800: 20 77 61 73 20 63 72 65 61 74 65 64 0a 61 72 65   was created.are
8810: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e   rolled back.  ^
8820: 49 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  If the savepoint
8830: 2d 6e 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42  -name in a ROLLB
8840: 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64  ACK TO command d
8850: 6f 65 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e  oes not.match an
8860: 79 20 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74  y SAVEPOINT on t
8870: 68 65 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 74  he stack, then t
8880: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
8890: 61 6e 64 20 66 61 69 6c 73 20 77 69 74 68 20 61  and fails with a
88a0: 6e 0a 65 72 72 6f 72 20 61 6e 64 20 6c 65 61 76  n.error and leav
88b0: 65 73 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  es the state of 
88c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 63  the database unc
88d0: 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63  hanged.</p>..<tc
88e0: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
88f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8930: 23 23 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65  ##.Section comme
8940: 6e 74 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d  nt comment {comm
8950: 65 6e 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a  ent *comments}..
8960: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
8970: 69 61 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73  iagram comment-s
8980: 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  yntax.</tcl>..<p
8990: 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e  >^Comments are n
89a0: 6f 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c  ot SQL commands,
89b0: 20 62 75 74 20 63 61 6e 20 6f 63 63 75 72 20 77   but can occur w
89c0: 69 74 68 69 6e 20 74 68 65 20 74 65 78 74 20 6f  ithin the text o
89d0: 66 0a 53 51 4c 20 71 75 65 72 69 65 73 20 70 61  f.SQL queries pa
89e0: 73 73 65 64 20 74 6f 20 5b 73 71 6c 69 74 65 33  ssed to [sqlite3
89f0: 5f 70 72 65 70 61 72 65 5f 76 32 28 29 5d 20 61  _prepare_v2()] a
8a00: 6e 64 20 72 65 6c 61 74 65 64 20 69 6e 74 65 72  nd related inter
8a10: 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73  faces..^Comments
8a20: 20 61 72 65 20 74 72 65 61 74 65 64 20 61 73 20   are treated as 
8a30: 77 68 69 74 65 73 70 61 63 65 20 62 79 20 74 68  whitespace by th
8a40: 65 20 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65  e parser..^Comme
8a50: 6e 74 73 20 63 61 6e 20 62 65 67 69 6e 20 61 6e  nts can begin an
8a60: 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61 63  ywhere whitespac
8a70: 65 20 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c  e .can be found,
8a80: 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64   including insid
8a90: 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68  e expressions th
8aa0: 61 74 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65  at span multiple
8ab0: 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70   lines..</p>..<p
8ac0: 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62  >^SQL comments b
8ad0: 65 67 69 6e 20 77 69 74 68 20 74 77 6f 20 63 6f  egin with two co
8ae0: 6e 73 65 63 75 74 69 76 65 20 22 2d 22 20 63 68  nsecutive "-" ch
8af0: 61 72 61 63 74 65 72 73 20 28 41 53 43 49 49 20  aracters (ASCII 
8b00: 30 78 32 64 29 0a 61 6e 64 20 65 78 74 65 6e 64  0x2d).and extend
8b10: 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75   up to and inclu
8b20: 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 6e 65  ding the next ne
8b30: 77 6c 69 6e 65 20 63 68 61 72 61 63 74 65 72 20  wline character 
8b40: 28 41 53 43 49 49 20 30 78 30 61 29 0a 6f 72 20  (ASCII 0x0a).or 
8b50: 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66  until the end of
8b60: 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65   input, whicheve
8b70: 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f  r comes first.</
8b80: 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20  p>..<p>^C-style 
8b90: 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77  comments begin.w
8ba0: 69 74 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74  ith "/*" and ext
8bb0: 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e  end up to and in
8bc0: 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74  cluding the next
8bd0: 20 22 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20   "*/" character 
8be0: 70 61 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68  pair.or until th
8bf0: 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20  e end of input, 
8c00: 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20  whichever comes 
8c10: 66 69 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65  first.  ^C-style
8c20: 20 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70   comments.can sp
8c30: 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65  an multiple line
8c40: 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d  s. </p>..<p>^Com
8c50: 6d 65 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72  ments can appear
8c60: 20 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73   anywhere whites
8c70: 70 61 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a  pace can occur,.
8c80: 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65  including inside
8c90: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64   expressions and
8ca0: 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f   in the middle o
8cb0: 66 20 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74  f other SQL stat
8cc0: 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74  ements..^Comment
8cd0: 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c  s do not nest..<
8ce0: 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  /p>...<tcl>.####
8cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d30: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
8d40: 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58  on {CREATE INDEX
8d50: 7d 20 63 72 65 61 74 65 69 6e 64 65 78 20 7b 7b  } createindex {{
8d60: 43 52 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a  CREATE INDEX}}..
8d70: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
8d80: 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 69 6e  iagram create-in
8d90: 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  dex-stmt.</tcl>.
8da0: 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20  .<p>^The CREATE 
8db0: 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f  INDEX command co
8dc0: 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6b 65  nsists of the ke
8dd0: 79 77 6f 72 64 73 20 22 43 52 45 41 54 45 20 49  ywords "CREATE I
8de0: 4e 44 45 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62  NDEX" followed.b
8df0: 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  y the name of th
8e00: 65 20 6e 65 77 20 69 6e 64 65 78 2c 20 74 68 65  e new index, the
8e10: 20 6b 65 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74   keyword "ON", t
8e20: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 70 72 65  he name of a pre
8e30: 76 69 6f 75 73 6c 79 0a 63 72 65 61 74 65 64 20  viously.created 
8e40: 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 74 6f  table that is to
8e50: 20 62 65 20 69 6e 64 65 78 65 64 2c 20 61 6e 64   be indexed, and
8e60: 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64   a parenthesized
8e70: 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 20 63   list of table c
8e80: 6f 6c 75 6d 6e 0a 6e 61 6d 65 73 20 61 6e 64 2f  olumn.names and/
8e90: 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  or expressions t
8ea0: 68 61 74 20 61 72 65 20 75 73 65 64 20 66 6f 72  hat are used for
8eb0: 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
8ec0: 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20  If the optional 
8ed0: 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20  WHERE clause is 
8ee0: 69 6e 63 6c 75 64 65 64 2c 20 74 68 65 6e 20 74  included, then t
8ef0: 68 65 20 69 6e 64 65 78 20 69 73 20 61 20 22 5b  he index is a "[
8f00: 70 61 72 74 69 61 6c 20 69 6e 64 65 78 5d 22 2e  partial index]".
8f10: 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
8f20: 72 61 67 6d 65 6e 74 20 7b 64 65 73 63 69 64 78  ragment {descidx
8f30: 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e  } {descending in
8f40: 64 69 63 65 73 7d 20 7b 64 65 73 63 65 6e 64 69  dices} {descendi
8f50: 6e 67 20 69 6e 64 65 78 7d 20 5c 0a 20 20 20 20  ng index} \.    
8f60: 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65  {descending inde
8f70: 78 65 73 7d 20 7b 44 45 53 43 7d 3c 2f 74 63 6c  xes} {DESC}</tcl
8f80: 3e 0a 3c 70 3e 5e 45 61 63 68 20 63 6f 6c 75 6d  >.<p>^Each colum
8f90: 6e 20 6e 61 6d 65 20 6f 72 20 65 78 70 72 65 73  n name or expres
8fa0: 73 69 6f 6e 20 63 61 6e 20 62 65 20 66 6f 6c 6c  sion can be foll
8fb0: 6f 77 65 64 20 62 79 20 6f 6e 65 0a 6f 66 20 74  owed by one.of t
8fc0: 68 65 20 22 41 53 43 22 20 6f 72 20 22 44 45 53  he "ASC" or "DES
8fd0: 43 22 20 6b 65 79 77 6f 72 64 73 20 74 6f 20 69  C" keywords to i
8fe0: 6e 64 69 63 61 74 65 20 73 6f 72 74 20 6f 72 64  ndicate sort ord
8ff0: 65 72 2e 0a 5e 54 68 65 20 73 6f 72 74 20 6f 72  er..^The sort or
9000: 64 65 72 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  der may or may n
9010: 6f 74 20 62 65 20 69 67 6e 6f 72 65 64 20 64 65  ot be ignored de
9020: 70 65 6e 64 69 6e 67 0a 6f 6e 20 74 68 65 20 64  pending.on the d
9030: 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72  atabase file for
9040: 6d 61 74 2c 20 61 6e 64 20 69 6e 20 70 61 72 74  mat, and in part
9050: 69 63 75 6c 61 72 20 74 68 65 20 5b 73 63 68 65  icular the [sche
9060: 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72  ma format number
9070: 5d 2e 0a 5e 54 68 65 20 22 6c 65 67 61 63 79 22  ]..^The "legacy"
9080: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28   schema format (
9090: 31 29 20 69 67 6e 6f 72 65 73 20 69 6e 64 65 78  1) ignores index
90a0: 0a 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e 54  .sort order.  ^T
90b0: 68 65 20 64 65 73 63 65 6e 64 69 6e 67 20 69 6e  he descending in
90c0: 64 65 78 20 73 63 68 65 6d 61 20 66 6f 72 6d 61  dex schema forma
90d0: 74 20 28 34 29 20 74 61 6b 65 73 20 69 6e 64 65  t (4) takes inde
90e0: 78 20 73 6f 72 74 20 6f 72 64 65 72 0a 69 6e 74  x sort order.int
90f0: 6f 20 61 63 63 6f 75 6e 74 2e 20 20 4f 6e 6c 79  o account.  Only
9100: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
9110: 69 74 65 20 33 2e 33 2e 30 20 28 5b 64 61 74 65  ite 3.3.0 ([date
9120: 6f 66 3a 33 2e 33 2e 30 5d 29 0a 61 6e 64 20 6c  of:3.3.0]).and l
9130: 61 74 65 72 20 61 72 65 20 61 62 6c 65 20 74 6f  ater are able to
9140: 20 75 6e 64 65 72 73 74 61 6e 64 0a 74 68 65 20   understand.the 
9150: 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78  descending index
9160: 20 66 6f 72 6d 61 74 2e 20 46 6f 72 20 63 6f 6d   format. For com
9170: 70 61 74 69 62 69 6c 69 74 79 2c 20 76 65 72 73  patibility, vers
9180: 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65  ion of SQLite be
9190: 74 77 65 65 6e 20 33 2e 33 2e 30 0a 61 6e 64 20  tween 3.3.0.and 
91a0: 33 2e 37 2e 39 20 75 73 65 20 74 68 65 20 6c 65  3.7.9 use the le
91b0: 67 61 63 79 20 73 63 68 65 6d 61 20 66 6f 72 6d  gacy schema form
91c0: 61 74 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  at by default.  
91d0: 54 68 65 20 6e 65 77 65 72 20 73 63 68 65 6d 61  The newer schema
91e0: 20 66 6f 72 6d 61 74 20 69 73 0a 75 73 65 64 20   format is.used 
91f0: 62 79 20 64 65 66 61 75 6c 74 20 69 6e 20 76 65  by default in ve
9200: 72 73 69 6f 6e 20 33 2e 37 2e 31 30 20 28 5b 64  rsion 3.7.10 ([d
9210: 61 74 65 6f 66 3a 33 2e 37 2e 31 30 5d 29 20 61  ateof:3.7.10]) a
9220: 6e 64 20 6c 61 74 65 72 2e 0a 5e 54 68 65 20 5b  nd later..^The [
9230: 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d  legacy_file_form
9240: 61 74 20 70 72 61 67 6d 61 5d 20 63 61 6e 20 62  at pragma] can b
9250: 65 20 75 73 65 64 20 74 6f 20 63 68 61 6e 67 65  e used to change
9260: 20 73 65 74 20 74 68 65 20 73 70 65 63 69 66 69   set the specifi
9270: 63 0a 62 65 68 61 76 69 6f 72 20 66 6f 72 20 61  c.behavior for a
9280: 6e 79 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51  ny version of SQ
9290: 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  Lite.</p>..<tcl>
92a0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c  hd_fragment coll
92b0: 69 64 78 20 7b 43 4f 4c 4c 41 54 45 7d 3c 2f 74  idx {COLLATE}</t
92c0: 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c  cl>.<p>^The COLL
92d0: 41 54 45 20 63 6c 61 75 73 65 20 6f 70 74 69 6f  ATE clause optio
92e0: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20  nally following 
92f0: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  each column name
9300: 0a 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20 64  .or expression d
9310: 65 66 69 6e 65 73 20 61 0a 63 6f 6c 6c 61 74 69  efines a.collati
9320: 6e 67 20 73 65 71 75 65 6e 63 65 20 75 73 65 64  ng sequence used
9330: 20 66 6f 72 20 74 65 78 74 20 65 6e 74 72 69 65   for text entrie
9340: 73 20 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e  s in that column
9350: 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63  ..^The default c
9360: 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63  ollating.sequenc
9370: 65 20 69 73 20 74 68 65 20 63 6f 6c 6c 61 74 69  e is the collati
9380: 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 66 69  ng sequence defi
9390: 6e 65 64 20 66 6f 72 20 74 68 61 74 20 63 6f 6c  ned for that col
93a0: 75 6d 6e 20 69 6e 20 74 68 65 0a 5b 43 52 45 41  umn in the.[CREA
93b0: 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  TE TABLE] statem
93c0: 65 6e 74 2e 20 20 5e 4f 72 20 69 66 20 6e 6f 20  ent.  ^Or if no 
93d0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
93e0: 63 65 20 69 73 20 6f 74 68 65 72 77 69 73 65 20  ce is otherwise 
93f0: 64 65 66 69 6e 65 64 2c 0a 74 68 65 20 62 75 69  defined,.the bui
9400: 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c  lt-in BINARY col
9410: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
9420: 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74  is used.</p>..<t
9430: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69  cl>hd_fragment i
9440: 6e 64 65 78 65 78 70 72 3c 2f 74 63 6c 3e 0a 3c  ndexexpr</tcl>.<
9450: 70 3e 5e 45 78 70 72 65 73 73 69 6f 6e 73 20 69  p>^Expressions i
9460: 6e 20 61 6e 20 69 6e 64 65 78 20 6d 61 79 20 6e  n an index may n
9470: 6f 74 20 72 65 66 65 72 65 6e 63 65 20 6f 74 68  ot reference oth
9480: 65 72 20 74 61 62 6c 65 73 0a 61 6e 64 20 6d 61  er tables.and ma
9490: 79 20 6e 6f 74 20 75 73 65 20 73 75 62 71 75 65  y not use subque
94a0: 72 69 65 73 20 6e 6f 72 20 66 75 6e 63 74 69 6f  ries nor functio
94b0: 6e 73 20 77 68 6f 73 65 20 72 65 73 75 6c 74 20  ns whose result 
94c0: 6d 69 67 68 74 0a 63 68 61 6e 67 65 20 28 65 78  might.change (ex
94d0: 3a 20 5b 72 61 6e 64 6f 6d 28 29 5d 20 6f 72 20  : [random()] or 
94e0: 5b 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28  [sqlite_version(
94f0: 29 5d 29 2e 0a 5e 45 78 70 72 65 73 73 69 6f 6e  )])..^Expression
9500: 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 6d 61  s in an index ma
9510: 79 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20  y only refer to 
9520: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
9530: 61 62 6c 65 0a 74 68 61 74 20 69 73 20 62 65 69  able.that is bei
9540: 6e 67 20 69 6e 64 65 78 65 64 2e 0a 49 6e 64 65  ng indexed..Inde
9550: 78 65 73 20 6f 6e 20 65 78 70 72 65 73 73 69 6f  xes on expressio
9560: 6e 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20  n will not work 
9570: 77 69 74 68 20 76 65 72 73 69 6f 6e 73 20 6f 66  with versions of
9580: 20 53 51 4c 69 74 65 20 70 72 69 6f 72 0a 74 6f   SQLite prior.to
9590: 20 5b 76 65 72 73 69 6f 6e 20 33 2e 39 2e 30 5d   [version 3.9.0]
95a0: 20 28 5b 64 61 74 65 6f 66 3a 33 2e 39 2e 30 5d   ([dateof:3.9.0]
95b0: 29 2e 0a 53 65 65 20 74 68 65 20 5b 49 6e 64 65  )..See the [Inde
95c0: 78 65 73 20 4f 6e 20 45 78 70 72 65 73 73 69 6f  xes On Expressio
95d0: 6e 73 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72  ns] document for
95e0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
95f0: 72 6d 61 74 69 6f 6e 0a 61 62 6f 75 74 20 75 73  rmation.about us
9600: 69 6e 67 20 67 65 6e 65 72 61 6c 20 65 78 70 72  ing general expr
9610: 65 73 73 69 6f 6e 73 20 69 6e 20 43 52 45 41 54  essions in CREAT
9620: 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  E INDEX statemen
9630: 74 73 2e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  ts...<p>There ar
9640: 65 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c  e no arbitrary l
9650: 69 6d 69 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d  imits on the num
9660: 62 65 72 20 6f 66 20 69 6e 64 69 63 65 73 20 74  ber of indices t
9670: 68 61 74 20 63 61 6e 20 62 65 0a 61 74 74 61 63  hat can be.attac
9680: 68 65 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  hed to a single 
9690: 74 61 62 6c 65 2e 20 20 5e 28 54 68 65 20 6e 75  table.  ^(The nu
96a0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
96b0: 69 6e 20 61 6e 20 69 6e 64 65 78 20 69 73 20 0a  in an index is .
96c0: 6c 69 6d 69 74 65 64 20 74 6f 20 74 68 65 20 76  limited to the v
96d0: 61 6c 75 65 20 73 65 74 20 62 79 0a 5b 73 71 6c  alue set by.[sql
96e0: 69 74 65 33 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c  ite3_limit]([SQL
96f0: 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e  ITE_LIMIT_COLUMN
9700: 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c  ],...).)^</p>..<
9710: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
9720: 75 6e 69 71 75 65 69 64 78 20 7b 75 6e 69 71 75  uniqueidx {uniqu
9730: 65 20 69 6e 64 65 78 7d 3c 2f 74 63 6c 3e 0a 3c  e index}</tcl>.<
9740: 70 3e 5e 49 66 20 74 68 65 20 55 4e 49 51 55 45  p>^If the UNIQUE
9750: 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72 73   keyword appears
9760: 20 62 65 74 77 65 65 6e 20 43 52 45 41 54 45 20   between CREATE 
9770: 61 6e 64 20 49 4e 44 45 58 20 74 68 65 6e 20 64  and INDEX then d
9780: 75 70 6c 69 63 61 74 65 0a 69 6e 64 65 78 20 65  uplicate.index e
9790: 6e 74 72 69 65 73 20 61 72 65 20 6e 6f 74 20 61  ntries are not a
97a0: 6c 6c 6f 77 65 64 2e 20 20 5e 41 6e 79 20 61 74  llowed.  ^Any at
97b0: 74 65 6d 70 74 20 74 6f 20 69 6e 73 65 72 74 20  tempt to insert 
97c0: 61 20 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72  a duplicate entr
97d0: 79 0a 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  y.will result in
97e0: 20 61 6e 20 65 72 72 6f 72 2e 20 20 5e 46 6f 72   an error.  ^For
97f0: 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
9800: 20 75 6e 69 71 75 65 20 69 6e 64 69 63 65 73 2c   unique indices,
9810: 20 61 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73   all NULL values
9820: 0a 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20  .are considered 
9830: 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 61  different from a
9840: 6c 6c 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61  ll other NULL va
9850: 6c 75 65 73 20 61 6e 64 20 61 72 65 20 74 68 75  lues and are thu
9860: 73 20 75 6e 69 71 75 65 2e 0a 54 68 69 73 20 69  s unique..This i
9870: 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77 6f  s one of the two
9880: 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 72 70   possible interp
9890: 72 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65  retations of the
98a0: 20 53 51 4c 2d 39 32 20 73 74 61 6e 64 61 72 64   SQL-92 standard
98b0: 0a 28 74 68 65 20 6c 61 6e 67 75 61 67 65 20 69  .(the language i
98c0: 6e 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 69  n the standard i
98d0: 73 20 61 6d 62 69 67 75 6f 75 73 29 20 61 6e 64  s ambiguous) and
98e0: 20 69 73 20 74 68 65 20 69 6e 74 65 72 70 72 65   is the interpre
98f0: 74 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20  tation.followed 
9900: 62 79 20 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d  by PostgreSQL, M
9910: 79 53 51 4c 2c 20 46 69 72 65 62 69 72 64 2c 20  ySQL, Firebird, 
9920: 61 6e 64 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66  and Oracle.  Inf
9930: 6f 72 6d 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73  ormix and.Micros
9940: 6f 66 74 20 53 51 4c 20 53 65 72 76 65 72 20 66  oft SQL Server f
9950: 6f 6c 6c 6f 77 20 74 68 65 20 6f 74 68 65 72 20  ollow the other 
9960: 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
9970: 66 20 74 68 65 20 73 74 61 6e 64 61 72 64 2e 3c  f the standard.<
9980: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
9990: 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20  optional IF NOT 
99a0: 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73  EXISTS clause is
99b0: 20 70 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f   present and ano
99c0: 74 68 65 72 20 69 6e 64 65 78 0a 77 69 74 68 20  ther index.with 
99d0: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c  the same name al
99e0: 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68  ready exists, th
99f0: 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  en this command 
9a00: 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e  becomes a no-op.
9a10: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65  </p>..<p>^Indexe
9a20: 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 77 69  s are removed wi
9a30: 74 68 20 74 68 65 20 5b 44 52 4f 50 20 49 4e 44  th the [DROP IND
9a40: 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e  EX] command.</p>
9a50: 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
9a60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9a70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9a80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9a90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9aa0: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
9ab0: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 7d 20 7b  {CREATE TABLE} {
9ac0: 63 72 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43  createtable} {{C
9ad0: 52 45 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 52  REATE TABLE}}..R
9ae0: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
9af0: 61 67 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62  agram create-tab
9b00: 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  le-stmt.</tcl>..
9b10: 3c 70 3e 54 68 65 20 22 43 52 45 41 54 45 20 54  <p>The "CREATE T
9b20: 41 42 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73  ABLE" command is
9b30: 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   used to create 
9b40: 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61  a new table in a
9b50: 6e 20 53 51 4c 69 74 65 20 0a 64 61 74 61 62 61  n SQLite .databa
9b60: 73 65 2e 20 41 20 43 52 45 41 54 45 20 54 41 42  se. A CREATE TAB
9b70: 4c 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69  LE command speci
9b80: 66 69 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69  fies the followi
9b90: 6e 67 20 61 74 74 72 69 62 75 74 65 73 20 6f 66  ng attributes of
9ba0: 20 74 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a   the.new table:.
9bb0: 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54  .<ul>.  <li><p>T
9bc0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e  he name of the n
9bd0: 65 77 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69  ew table...  <li
9be0: 3e 3c 70 3e 20 54 68 65 20 64 61 74 61 62 61 73  ><p> The databas
9bf0: 65 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 6e  e in which the n
9c00: 65 77 20 74 61 62 6c 65 20 69 73 20 63 72 65 61  ew table is crea
9c10: 74 65 64 2e 20 54 61 62 6c 65 73 20 6d 61 79 20  ted. Tables may 
9c20: 62 65 20 0a 20 20 20 20 20 20 63 72 65 61 74 65  be .      create
9c30: 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  d in the main da
9c40: 74 61 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70  tabase, the temp
9c50: 20 64 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e   database, or in
9c60: 20 61 6e 79 20 61 74 74 61 63 68 65 64 0a 20 20   any attached.  
9c70: 20 20 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 20      database... 
9c80: 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d   <li><p> The nam
9c90: 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  e of each column
9ca0: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a   in the table...
9cb0: 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65    <li><p> The de
9cc0: 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 65  clared type of e
9cd0: 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
9ce0: 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e  e table...  <li>
9cf0: 3c 70 3e 20 41 20 64 65 66 61 75 6c 74 20 76 61  <p> A default va
9d00: 6c 75 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f  lue or expressio
9d10: 6e 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  n for each colum
9d20: 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a  n in the table..
9d30: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66  .  <li><p> A def
9d40: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  ault collation s
9d50: 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 77  equence to use w
9d60: 69 74 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e  ith each column.
9d70: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69  ..  <li><p> Opti
9d80: 6f 6e 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52  onally, a PRIMAR
9d90: 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61  Y KEY for the ta
9da0: 62 6c 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65  ble. Both single
9db0: 20 63 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20   column and.    
9dc0: 20 20 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75     composite (mu
9dd0: 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70  ltiple column) p
9de0: 72 69 6d 61 72 79 20 6b 65 79 73 20 61 72 65 20  rimary keys are 
9df0: 73 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c  supported...  <l
9e00: 69 3e 3c 70 3e 20 41 20 73 65 74 20 6f 66 20 53  i><p> A set of S
9e10: 51 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66  QL constraints f
9e20: 6f 72 20 65 61 63 68 20 74 61 62 6c 65 2e 20 53  or each table. S
9e30: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 55  QLite supports U
9e40: 4e 49 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20  NIQUE, NOT.     
9e50: 20 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e    NULL, CHECK an
9e60: 64 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f  d FOREIGN KEY co
9e70: 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c  nstraints...  <l
9e80: 69 3e 3c 70 3e 20 57 68 65 74 68 65 72 20 74 68  i><p> Whether th
9e90: 65 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49  e table is a [WI
9ea0: 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
9eb0: 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76  le..</ul>..<p>Ev
9ec0: 65 72 79 20 43 52 45 41 54 45 20 54 41 42 4c 45  ery CREATE TABLE
9ed0: 20 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20   statement must 
9ee0: 73 70 65 63 69 66 79 20 61 20 6e 61 6d 65 20 66  specify a name f
9ef0: 6f 72 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  or the new table
9f00: 2e 0a 20 20 5e 28 54 61 62 6c 65 20 6e 61 6d 65  ..  ^(Table name
9f10: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
9f20: 68 20 22 73 71 6c 69 74 65 5f 22 20 61 72 65 20  h "sqlite_" are 
9f30: 72 65 73 65 72 76 65 64 20 66 6f 72 20 69 6e 74  reserved for int
9f40: 65 72 6e 61 6c 20 75 73 65 2e 20 49 74 0a 20 20  ernal use. It.  
9f50: 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 61  is an error to a
9f60: 74 74 65 6d 70 74 20 74 6f 20 63 72 65 61 74 65  ttempt to create
9f70: 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61 20   a table with a 
9f80: 6e 61 6d 65 20 74 68 61 74 20 73 74 61 72 74 73  name that starts
9f90: 20 77 69 74 68 0a 20 20 22 73 71 6c 69 74 65 5f   with.  "sqlite_
9fa0: 22 2e 29 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20  ".)^..<p> ^If a 
9fb0: 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e  <yyterm>schema-n
9fc0: 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20  ame</yyterm> is 
9fd0: 73 70 65 63 69 66 69 65 64 2c 20 69 74 20 6d 75  specified, it mu
9fe0: 73 74 20 62 65 20 65 69 74 68 65 72 20 22 6d 61  st be either "ma
9ff0: 69 6e 22 2c 20 0a 20 20 22 74 65 6d 70 22 2c 20  in", .  "temp", 
a000: 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  or the name of a
a010: 6e 20 5b 41 54 54 41 43 48 20 44 41 54 41 42 41  n [ATTACH DATABA
a020: 53 45 7c 61 74 74 61 63 68 65 64 20 64 61 74 61  SE|attached data
a030: 62 61 73 65 5d 2e 20 5e 49 6e 20 74 68 69 73 20  base]. ^In this 
a040: 63 61 73 65 0a 20 20 74 68 65 20 6e 65 77 20 74  case.  the new t
a050: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20  able is created 
a060: 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 64 61 74  in the named dat
a070: 61 62 61 73 65 2e 20 5e 49 66 20 74 68 65 20 22  abase. ^If the "
a080: 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52  TEMP" or "TEMPOR
a090: 41 52 59 22 0a 20 20 6b 65 79 77 6f 72 64 20 6f  ARY".  keyword o
a0a0: 63 63 75 72 73 20 62 65 74 77 65 65 6e 20 74 68  ccurs between th
a0b0: 65 20 22 43 52 45 41 54 45 22 20 61 6e 64 20 22  e "CREATE" and "
a0c0: 54 41 42 4c 45 22 20 74 68 65 6e 20 74 68 65 20  TABLE" then the 
a0d0: 6e 65 77 20 74 61 62 6c 65 20 69 73 0a 20 20 63  new table is.  c
a0e0: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 74 65  reated in the te
a0f0: 6d 70 20 64 61 74 61 62 61 73 65 2e 20 5e 49 74  mp database. ^It
a100: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
a110: 73 70 65 63 69 66 79 20 62 6f 74 68 20 61 20 0a  specify both a .
a120: 20 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61    <yyterm>schema
a130: 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 61  -name</yyterm> a
a140: 6e 64 20 74 68 65 20 54 45 4d 50 20 6f 72 20 54  nd the TEMP or T
a150: 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64  EMPORARY keyword
a160: 2c 20 75 6e 6c 65 73 73 20 74 68 65 0a 20 20 3c  , unless the.  <
a170: 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61  yyterm>schema-na
a180: 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 22  me</yyterm> is "
a190: 74 65 6d 70 22 2e 20 0a 20 20 5e 49 66 20 6e 6f  temp". .  ^If no
a1a0: 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20   schema name is 
a1b0: 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74 68  specified and th
a1c0: 65 0a 20 20 54 45 4d 50 20 6b 65 79 77 6f 72 64  e.  TEMP keyword
a1d0: 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20   is not present 
a1e0: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
a1f0: 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  s created in the
a200: 20 6d 61 69 6e 0a 20 20 64 61 74 61 62 61 73 65   main.  database
a210: 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74 20 69 73 20  ...<p>.  ^It is 
a220: 75 73 75 61 6c 6c 79 20 61 6e 20 65 72 72 6f 72  usually an error
a230: 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20 63   to attempt to c
a240: 72 65 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  reate a new tabl
a250: 65 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  e in a database 
a260: 74 68 61 74 0a 20 20 61 6c 72 65 61 64 79 20 63  that.  already c
a270: 6f 6e 74 61 69 6e 73 20 61 20 74 61 62 6c 65 2c  ontains a table,
a280: 20 69 6e 64 65 78 20 6f 72 20 76 69 65 77 20 6f   index or view o
a290: 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e  f the same name.
a2a0: 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68   ^However, if th
a2b0: 65 0a 20 20 22 49 46 20 4e 4f 54 20 45 58 49 53  e.  "IF NOT EXIS
a2c0: 54 53 22 20 63 6c 61 75 73 65 20 69 73 20 73 70  TS" clause is sp
a2d0: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
a2e0: 6f 66 20 74 68 65 20 43 52 45 41 54 45 20 54 41  of the CREATE TA
a2f0: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  BLE statement an
a300: 64 0a 20 20 61 20 74 61 62 6c 65 20 6f 72 20 76  d.  a table or v
a310: 69 65 77 20 6f 66 20 74 68 65 20 73 61 6d 65 20  iew of the same 
a320: 6e 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78 69  name already exi
a330: 73 74 73 2c 20 74 68 65 20 43 52 45 41 54 45 20  sts, the CREATE 
a340: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 0a 20 20  TABLE command.  
a350: 73 69 6d 70 6c 79 20 68 61 73 20 6e 6f 20 65 66  simply has no ef
a360: 66 65 63 74 20 28 61 6e 64 20 6e 6f 20 65 72 72  fect (and no err
a370: 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 72 65  or message is re
a380: 74 75 72 6e 65 64 29 2e 20 5e 41 6e 20 65 72 72  turned). ^An err
a390: 6f 72 20 69 73 20 73 74 69 6c 6c 0a 20 20 72 65  or is still.  re
a3a0: 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 74 61  turned if the ta
a3b0: 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 72  ble cannot be cr
a3c0: 65 61 74 65 64 20 62 65 63 61 75 73 65 20 6f 66  eated because of
a3d0: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 69 6e 64   an existing ind
a3e0: 65 78 2c 20 65 76 65 6e 20 0a 20 20 69 66 20 74  ex, even .  if t
a3f0: 68 65 20 22 49 46 20 4e 4f 54 20 45 58 49 53 54  he "IF NOT EXIST
a400: 53 22 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  S" clause is spe
a410: 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 49 74 20  cified...<p>^It 
a420: 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20  is not an error 
a430: 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62 6c  to create a tabl
a440: 65 20 74 68 61 74 20 68 61 73 20 74 68 65 20 73  e that has the s
a450: 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e 20 0a  ame name as an .
a460: 20 20 65 78 69 73 74 69 6e 67 20 5b 43 52 45 41    existing [CREA
a470: 54 45 20 54 52 49 47 47 45 52 7c 74 72 69 67 67  TE TRIGGER|trigg
a480: 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73  er]...<p>^Tables
a490: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69   are removed usi
a4a0: 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42  ng the [DROP TAB
a4b0: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
a4c0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
a4d0: 61 67 6d 65 6e 74 20 63 72 65 61 74 65 74 61 62  agment createtab
a4e0: 61 73 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  as {CREATE TABLE
a4f0: 20 41 53 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43   AS}</tcl>.<h3>C
a500: 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20  REATE TABLE ... 
a510: 41 53 20 53 45 4c 45 43 54 20 53 74 61 74 65 6d  AS SELECT Statem
a520: 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  ents</h3>..<p>^(
a530: 41 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  A "CREATE TABLE 
a540: 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 22 20 73  ... AS SELECT" s
a550: 74 61 74 65 6d 65 6e 74 20 63 72 65 61 74 65 73  tatement creates
a560: 20 61 6e 64 20 70 6f 70 75 6c 61 74 65 73 20 61   and populates a
a570: 20 64 61 74 61 62 61 73 65 0a 74 61 62 6c 65 20   database.table 
a580: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73  based on the res
a590: 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54  ults of a SELECT
a5a0: 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28   statement.)^ ^(
a5b0: 54 68 65 20 74 61 62 6c 65 20 68 61 73 20 74 68  The table has th
a5c0: 65 20 73 61 6d 65 0a 6e 75 6d 62 65 72 20 6f 66  e same.number of
a5d0: 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65 20   columns as the 
a5e0: 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79  rows returned by
a5f0: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
a600: 65 6d 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20  ement. The name 
a610: 6f 66 0a 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of.each column i
a620: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
a630: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  e name of the co
a640: 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75  rresponding colu
a650: 6d 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  mn in the result
a660: 0a 73 65 74 20 6f 66 20 74 68 65 20 53 45 4c 45  .set of the SELE
a670: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20  CT statement.)^ 
a680: 5e 28 54 68 65 20 64 65 63 6c 61 72 65 64 20 74  ^(The declared t
a690: 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ype of each colu
a6a0: 6d 6e 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  mn is determined
a6b0: 0a 62 79 20 74 68 65 20 5b 65 78 70 72 65 73 73  .by the [express
a6c0: 69 6f 6e 20 61 66 66 69 6e 69 74 79 5d 20 6f 66  ion affinity] of
a6d0: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
a6e0: 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ng expression in
a6f0: 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a   the result set.
a700: 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  of the SELECT st
a710: 61 74 65 6d 65 6e 74 2c 20 61 73 20 66 6f 6c 6c  atement, as foll
a720: 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74  ows:.</p>..<cent
a730: 65 72 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  er><table border
a740: 3d 31 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 45 78  =1>.  <tr><th>Ex
a750: 70 72 65 73 73 69 6f 6e 20 41 66 66 69 6e 69 74  pression Affinit
a760: 79 20 20 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20 44  y   <th>Column D
a770: 65 63 6c 61 72 65 64 20 54 79 70 65 0a 20 20 3c  eclared Type.  <
a780: 74 72 3e 3c 74 64 3e 54 45 58 54 20 20 20 20 20  tr><td>TEXT     
a790: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64               <td
a7a0: 3e 22 54 45 58 54 22 0a 20 20 3c 74 72 3e 3c 74  >"TEXT".  <tr><t
a7b0: 64 3e 4e 55 4d 45 52 49 43 20 20 20 20 20 20 20  d>NUMERIC       
a7c0: 20 20 20 20 20 20 20 20 3c 74 64 3e 22 4e 55 4d          <td>"NUM
a7d0: 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 49 4e 54 45  ".  <tr><td>INTE
a7e0: 47 45 52 20 20 20 20 20 20 20 20 20 20 20 20 20  GER             
a7f0: 20 20 3c 74 64 3e 22 49 4e 54 22 0a 20 20 3c 74    <td>"INT".  <t
a800: 72 3e 3c 74 64 3e 52 45 41 4c 20 20 20 20 20 20  r><td>REAL      
a810: 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e              <td>
a820: 22 52 45 41 4c 22 0a 20 20 3c 74 72 3e 3c 74 64  "REAL".  <tr><td
a830: 3e 42 4c 4f 42 20 28 61 2e 6b 2e 61 20 22 4e 4f  >BLOB (a.k.a "NO
a840: 4e 45 22 29 20 20 20 3c 74 64 3e 22 22 20 28 65  NE")   <td>"" (e
a850: 6d 70 74 79 20 73 74 72 69 6e 67 29 0a 3c 2f 74  mpty string).</t
a860: 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e  able></center>)^
a870: 0a 0a 3c 70 3e 5e 28 41 20 74 61 62 6c 65 20 63  ..<p>^(A table c
a880: 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45  reated using CRE
a890: 41 54 45 20 54 41 42 4c 45 20 41 53 20 68 61 73  ATE TABLE AS has
a8a0: 20 6e 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20   no PRIMARY KEY 
a8b0: 61 6e 64 20 6e 6f 0a 63 6f 6e 73 74 72 61 69 6e  and no.constrain
a8c0: 74 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 2e 20  ts of any kind. 
a8d0: 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  The default valu
a8e0: 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  e of each column
a8f0: 20 69 73 20 4e 55 4c 4c 2e 20 54 68 65 20 64 65   is NULL. The de
a900: 66 61 75 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e 20  fault.collation 
a910: 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63  sequence for eac
a920: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  h column of the 
a930: 6e 65 77 20 74 61 62 6c 65 20 69 73 20 42 49 4e  new table is BIN
a940: 41 52 59 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62 6c  ARY.)^..<p>^Tabl
a950: 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
a960: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53   CREATE TABLE AS
a970: 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 70   are initially p
a980: 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 74 68  opulated with th
a990: 65 0a 72 6f 77 73 20 6f 66 20 64 61 74 61 20 72  e.rows of data r
a9a0: 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
a9b0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
a9c0: 20 5e 52 6f 77 73 20 61 72 65 20 61 73 73 69 67   ^Rows are assig
a9d0: 6e 65 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79  ned contiguously
a9e0: 0a 61 73 63 65 6e 64 69 6e 67 20 5b 72 6f 77 69  .ascending [rowi
a9f0: 64 5d 20 76 61 6c 75 65 73 2c 20 73 74 61 72 74  d] values, start
aa00: 69 6e 67 20 77 69 74 68 20 31 2c 20 69 6e 20 74  ing with 1, in t
aa10: 68 65 20 5b 6f 72 64 65 72 20 62 79 7c 6f 72 64  he [order by|ord
aa20: 65 72 5d 20 74 68 61 74 20 74 68 65 79 0a 61 72  er] that they.ar
aa30: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  e returned by th
aa40: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
aa50: 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  nt...<tcl>hd_fra
aa60: 67 6d 65 6e 74 20 7b 74 61 62 6c 65 63 6f 6c 64  gment {tablecold
aa70: 65 66 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69  ef} {column defi
aa80: 6e 69 74 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e 20  nition} {column 
aa90: 64 65 66 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74 63  definitions}</tc
aaa0: 6c 3e 0a 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44 65  l>.<h3>Column De
aab0: 66 69 6e 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a  finitions</h3>..
aac0: 3c 70 3e 55 6e 6c 65 73 73 20 69 74 20 69 73 20  <p>Unless it is 
aad0: 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e  a CREATE TABLE .
aae0: 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 73 74 61  .. AS SELECT sta
aaf0: 74 65 6d 65 6e 74 2c 20 61 20 43 52 45 41 54 45  tement, a CREATE
ab00: 20 54 41 42 4c 45 20 69 6e 63 6c 75 64 65 73 0a   TABLE includes.
ab10: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6c  one or more [col
ab20: 75 6d 6e 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20 64  umn-def|column d
ab30: 65 66 69 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70 74  efinitions], opt
ab40: 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64  ionally followed
ab50: 20 62 79 20 61 20 6c 69 73 74 20 6f 66 0a 5b 74   by a list of.[t
ab60: 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 7c  able-constraint|
ab70: 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  table constraint
ab80: 73 5d 2e 20 20 45 61 63 68 20 63 6f 6c 75 6d 6e  s].  Each column
ab90: 20 64 65 66 69 6e 69 74 69 6f 6e 20 63 6f 6e 73   definition cons
aba0: 69 73 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65  ists of the.name
abb0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20   of the column, 
abc0: 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
abd0: 77 65 64 20 62 79 20 74 68 65 20 64 65 63 6c 61  wed by the decla
abe0: 72 65 64 20 74 79 70 65 20 6f 66 20 74 68 65 20  red type of the 
abf0: 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e 65  column,.then one
ac00: 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61   or more optiona
ac10: 6c 20 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72  l [column-constr
ac20: 61 69 6e 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e 73  aint|column cons
ac30: 74 72 61 69 6e 74 73 5d 2e 20 49 6e 63 6c 75 64  traints]. Includ
ac40: 65 64 20 69 6e 0a 74 68 65 20 64 65 66 69 6e 69  ed in.the defini
ac50: 74 69 6f 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e 20  tion of "column 
ac60: 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 66 6f 72  constraints" for
ac70: 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
ac80: 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 73 74   the previous.st
ac90: 61 74 65 6d 65 6e 74 20 61 72 65 20 74 68 65 20  atement are the 
aca0: 43 4f 4c 4c 41 54 45 20 61 6e 64 20 44 45 46 41  COLLATE and DEFA
acb0: 55 4c 54 20 63 6c 61 75 73 65 73 2c 20 65 76 65  ULT clauses, eve
acc0: 6e 20 74 68 6f 75 67 68 20 74 68 65 73 65 20 61  n though these a
acd0: 72 65 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 63 6f  re not really.co
ace0: 6e 73 74 72 61 69 6e 74 73 20 69 6e 20 74 68 65  nstraints in the
acf0: 20 73 65 6e 73 65 20 74 68 61 74 20 74 68 65 79   sense that they
ad00: 20 64 6f 20 6e 6f 74 20 72 65 73 74 72 69 63 74   do not restrict
ad10: 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20 74   the data that t
ad20: 68 65 20 74 61 62 6c 65 20 6d 61 79 0a 63 6f 6e  he table may.con
ad30: 74 61 69 6e 2e 20 54 68 65 20 6f 74 68 65 72 20  tain. The other 
ad40: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 4e 4f  constraints - NO
ad50: 54 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 2c 20 55  T NULL, CHECK, U
ad60: 4e 49 51 55 45 2c 20 50 52 49 4d 41 52 59 20 4b  NIQUE, PRIMARY K
ad70: 45 59 20 61 6e 64 0a 46 4f 52 45 49 47 4e 20 4b  EY and.FOREIGN K
ad80: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d  EY constraints -
ad90: 20 69 6d 70 6f 73 65 20 72 65 73 74 72 69 63 74   impose restrict
ada0: 69 6f 6e 73 20 6f 6e 20 74 68 65 20 74 61 62 6c  ions on the tabl
adb0: 65 73 20 64 61 74 61 2c 20 61 6e 64 20 61 72 65  es data, and are
adc0: 20 61 72 65 0a 64 65 73 63 72 69 62 65 64 20 75   are.described u
add0: 6e 64 65 72 20 5b 63 6f 6e 73 74 72 61 69 6e 74  nder [constraint
ade0: 73 7c 53 51 4c 20 44 61 74 61 20 43 6f 6e 73 74  s|SQL Data Const
adf0: 72 61 69 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a 0a  raints] below...
ae00: 3c 70 3e 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74 20  <p>^Unlike most 
ae10: 53 51 4c 20 64 61 74 61 62 61 73 65 73 2c 20 53  SQL databases, S
ae20: 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 72  QLite does not r
ae30: 65 73 74 72 69 63 74 20 74 68 65 20 74 79 70 65  estrict the type
ae40: 20 6f 66 20 64 61 74 61 20 74 68 61 74 0a 6d 61   of data that.ma
ae50: 79 20 62 65 20 69 6e 73 65 72 74 65 64 20 69 6e  y be inserted in
ae60: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73 65  to a column base
ae70: 64 20 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73  d on the columns
ae80: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 2e 20   declared type. 
ae90: 49 6e 73 74 65 61 64 2c 0a 53 51 4c 69 74 65 20  Instead,.SQLite 
aea0: 75 73 65 73 20 5b 64 79 6e 61 6d 69 63 20 74 79  uses [dynamic ty
aeb0: 70 69 6e 67 5d 2e 20 5e 54 68 65 20 64 65 63 6c  ping]. ^The decl
aec0: 61 72 65 64 20 74 79 70 65 20 6f 66 20 61 20 63  ared type of a c
aed0: 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 20 74 6f  olumn is used to
aee0: 0a 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 5b  .determine the [
aef0: 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65  affinity] of the
af00: 20 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c   column only...<
af10: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
af20: 64 66 6c 74 76 61 6c 20 7b 64 65 66 61 75 6c 74  dfltval {default
af30: 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 7d 20 7b   column value} {
af40: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 7d 3c 2f  default value}</
af50: 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 44 45 46 41  tcl>.<p>The DEFA
af60: 55 4c 54 20 63 6c 61 75 73 65 20 73 70 65 63 69  ULT clause speci
af70: 66 69 65 73 20 61 20 64 65 66 61 75 6c 74 20 76  fies a default v
af80: 61 6c 75 65 20 74 6f 20 75 73 65 20 66 6f 72 20  alue to use for 
af90: 74 68 65 20 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f  the column if no
afa0: 0a 76 61 6c 75 65 20 69 73 20 65 78 70 6c 69 63  .value is explic
afb0: 69 74 6c 79 20 70 72 6f 76 69 64 65 64 20 62 79  itly provided by
afc0: 20 74 68 65 20 75 73 65 72 20 77 68 65 6e 20 64   the user when d
afd0: 6f 69 6e 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d  oing an [INSERT]
afe0: 2e 20 5e 49 66 20 74 68 65 72 65 0a 69 73 20 6e  . ^If there.is n
aff0: 6f 20 65 78 70 6c 69 63 69 74 20 44 45 46 41 55  o explicit DEFAU
b000: 4c 54 20 63 6c 61 75 73 65 20 61 74 74 61 63 68  LT clause attach
b010: 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64  ed to a column d
b020: 65 66 69 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20  efinition, then 
b030: 74 68 65 20 0a 64 65 66 61 75 6c 74 20 76 61 6c  the .default val
b040: 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ue of the column
b050: 20 69 73 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65   is NULL. ^(An e
b060: 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20  xplicit DEFAULT 
b070: 63 6c 61 75 73 65 20 6d 61 79 20 73 70 65 63 69  clause may speci
b080: 66 79 0a 74 68 61 74 20 74 68 65 20 64 65 66 61  fy.that the defa
b090: 75 6c 74 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  ult value is NUL
b0a0: 4c 2c 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73  L, a string cons
b0b0: 74 61 6e 74 2c 20 61 20 62 6c 6f 62 20 63 6f 6e  tant, a blob con
b0c0: 73 74 61 6e 74 2c 20 61 0a 73 69 67 6e 65 64 2d  stant, a.signed-
b0d0: 6e 75 6d 62 65 72 2c 20 6f 72 20 61 6e 79 20 63  number, or any c
b0e0: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
b0f0: 6f 6e 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70  on enclosed in p
b100: 61 72 65 6e 74 68 65 73 65 73 2e 20 41 0a 64 65  arentheses. A.de
b110: 66 61 75 6c 74 20 76 61 6c 75 65 20 6d 61 79 20  fault value may 
b120: 61 6c 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74  also be one of t
b130: 68 65 20 73 70 65 63 69 61 6c 20 63 61 73 65 2d  he special case-
b140: 69 6e 64 65 70 65 6e 64 65 6e 74 20 6b 65 79 77  independent keyw
b150: 6f 72 64 73 0a 43 55 52 52 45 4e 54 5f 54 49 4d  ords.CURRENT_TIM
b160: 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20  E, CURRENT_DATE 
b170: 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53  or CURRENT_TIMES
b180: 54 41 4d 50 2e 29 5e 20 5e 46 6f 72 20 74 68 65  TAMP.)^ ^For the
b190: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65   purposes of the
b1a0: 0a 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 2c  .DEFAULT clause,
b1b0: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
b1c0: 73 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 6e  s considered con
b1d0: 73 74 61 6e 74 20 69 66 20 69 74 0a 63 6f 6e 74  stant if it.cont
b1e0: 61 69 6e 73 20 6e 6f 20 73 75 62 2d 71 75 65 72  ains no sub-quer
b1f0: 69 65 73 2c 20 63 6f 6c 75 6d 6e 20 6f 72 20 74  ies, column or t
b200: 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 2c  able references,
b210: 20 5b 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65   [bound paramete
b220: 72 73 5d 2c 0a 6f 72 20 73 74 72 69 6e 67 20 6c  rs],.or string l
b230: 69 74 65 72 61 6c 73 20 65 6e 63 6c 6f 73 65 64  iterals enclosed
b240: 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65   in double-quote
b250: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 73 69 6e  s instead of sin
b260: 67 6c 65 2d 71 75 6f 74 65 73 2e 0a 0a 3c 70 3e  gle-quotes...<p>
b270: 5e 28 45 61 63 68 20 74 69 6d 65 20 61 20 72 6f  ^(Each time a ro
b280: 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e  w is inserted in
b290: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 79 20  to the table by 
b2a0: 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
b2b0: 65 6e 74 20 74 68 61 74 20 0a 64 6f 65 73 20 6e  ent that .does n
b2c0: 6f 74 20 70 72 6f 76 69 64 65 20 65 78 70 6c 69  ot provide expli
b2d0: 63 69 74 20 76 61 6c 75 65 73 20 66 6f 72 20 61  cit values for a
b2e0: 6c 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73  ll table columns
b2f0: 20 74 68 65 20 76 61 6c 75 65 73 20 73 74 6f 72   the values stor
b300: 65 64 20 69 6e 0a 74 68 65 20 6e 65 77 20 72 6f  ed in.the new ro
b310: 77 20 61 72 65 20 64 65 74 65 72 6d 69 6e 65 64  w are determined
b320: 20 62 79 20 74 68 65 69 72 20 64 65 66 61 75 6c   by their defaul
b330: 74 20 76 61 6c 75 65 73 29 5e 2c 20 61 73 20 66  t values)^, as f
b340: 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a 20 20  ollows:..<ul>.  
b350: 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64  <li><p>^If the d
b360: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
b370: 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20  the column is a 
b380: 63 6f 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c 20 74  constant NULL, t
b390: 65 78 74 2c 20 62 6c 6f 62 20 6f 72 0a 20 20 20  ext, blob or.   
b3a0: 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 20 76   signed-number v
b3b0: 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61 74 20  alue, then that 
b3c0: 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 64 69  value is used di
b3d0: 72 65 63 74 6c 79 20 69 6e 20 74 68 65 20 6e 65  rectly in the ne
b3e0: 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  w row...  <li><p
b3f0: 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c 74  >^If the default
b400: 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75   value of a colu
b410: 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73  mn is an express
b420: 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68 65 73  ion in parenthes
b430: 65 73 2c 20 74 68 65 6e 0a 20 20 20 20 74 68 65  es, then.    the
b440: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
b450: 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f  valuated once fo
b460: 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73 65 72  r each row inser
b470: 74 65 64 20 61 6e 64 20 74 68 65 20 72 65 73 75  ted and the resu
b480: 6c 74 73 0a 20 20 20 20 75 73 65 64 20 69 6e 20  lts.    used in 
b490: 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20  the new row...  
b4a0: 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64  <li><p>^If the d
b4b0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
b4c0: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 43 55 52 52  a column is CURR
b4d0: 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e  ENT_TIME, CURREN
b4e0: 54 5f 44 41 54 45 20 6f 72 0a 20 20 20 20 43 55  T_DATE or.    CU
b4f0: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c  RRENT_TIMESTAMP,
b500: 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
b510: 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65 77 20  used in the new 
b520: 72 6f 77 20 69 73 20 61 20 74 65 78 74 0a 20 20  row is a text.  
b530: 20 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e    representation
b540: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
b550: 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f 72 20  UTC date and/or 
b560: 74 69 6d 65 2e 20 5e 46 6f 72 20 43 55 52 52 45  time. ^For CURRE
b570: 4e 54 5f 54 49 4d 45 2c 20 74 68 65 0a 20 20 20  NT_TIME, the.   
b580: 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 76   format of the v
b590: 61 6c 75 65 20 69 73 20 22 48 48 3a 4d 4d 3a 53  alue is "HH:MM:S
b5a0: 53 22 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54  S". ^For CURRENT
b5b0: 5f 44 41 54 45 2c 20 22 59 59 59 59 2d 4d 4d 2d  _DATE, "YYYY-MM-
b5c0: 44 44 22 2e 20 5e 54 68 65 0a 20 20 20 20 66 6f  DD". ^The.    fo
b5d0: 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45 4e 54  rmat for CURRENT
b5e0: 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20 22 59  _TIMESTAMP is "Y
b5f0: 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
b600: 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  SS"..</ul>..<p>^
b610: 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75  The COLLATE clau
b620: 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68 65  se specifies the
b630: 20 6e 61 6d 65 20 6f 66 20 61 20 5b 63 6f 6c 6c   name of a [coll
b640: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d 20  ating sequence] 
b650: 74 6f 20 75 73 65 20 61 73 0a 74 68 65 20 64 65  to use as.the de
b660: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20  fault collation 
b670: 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74 68 65  sequence for the
b680: 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e 6f 20   column. ^If no 
b690: 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69  COLLATE clause i
b6a0: 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s.specified, the
b6b0: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
b6c0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20 5b  on sequence is [
b6d0: 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e 54 68  BINARY]...<p>^Th
b6e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
b6f0: 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65 20 69  mns in a table i
b700: 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74 68 65  s limited by the
b710: 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c   [SQLITE_MAX_COL
b720: 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d  UMN].compile-tim
b730: 65 20 70 61 72 61 6d 65 74 65 72 2e 20 5e 41 20  e parameter. ^A 
b740: 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 61 20  single row of a 
b750: 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f  table cannot sto
b760: 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51  re more than.[SQ
b770: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d  LITE_MAX_LENGTH]
b780: 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 2e 20   bytes of data. 
b790: 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65 20 6c  ^Both of these l
b7a0: 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c 6f 77  imits can be low
b7b0: 65 72 65 64 20 61 74 0a 72 75 6e 74 69 6d 65 20  ered at.runtime 
b7c0: 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74  using the [sqlit
b7d0: 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b  e3_limit()] C/C+
b7e0: 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  + interface.</p>
b7f0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
b800: 6e 74 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d  nt {constraints}
b810: 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f   {constraints}</
b820: 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44 61 74  tcl>.<h3>SQL Dat
b830: 61 20 43 6f 6e 73 74 72 61 69 6e 74 73 3c 2f 68  a Constraints</h
b840: 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  3>..<tcl>hd_frag
b850: 6d 65 6e 74 20 70 72 69 6d 6b 65 79 63 6f 6e 73  ment primkeycons
b860: 74 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 7d 20  t {PRIMARY KEY} 
b870: 7b 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e  {PRIMARY KEY con
b880: 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c  straint}</tcl>.<
b890: 70 3e 5e 45 61 63 68 20 74 61 62 6c 65 20 69 6e  p>^Each table in
b8a0: 20 53 51 4c 69 74 65 20 6d 61 79 20 68 61 76 65   SQLite may have
b8b0: 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e   at most one <b>
b8c0: 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62 3e 2e  PRIMARY KEY</b>.
b8d0: 20 5e 49 66 20 74 68 65 0a 20 20 6b 65 79 77 6f   ^If the.  keywo
b8e0: 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45 59 20  rds PRIMARY KEY 
b8f0: 61 72 65 20 61 64 64 65 64 20 74 6f 20 61 20 63  are added to a c
b900: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
b910: 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d 61  , then the prima
b920: 72 79 20 6b 65 79 0a 20 20 66 6f 72 20 74 68 65  ry key.  for the
b930: 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74 73 20   table consists 
b940: 6f 66 20 74 68 61 74 20 73 69 6e 67 6c 65 20 63  of that single c
b950: 6f 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20 61  olumn. ^Or, if a
b960: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61   PRIMARY KEY cla
b970: 75 73 65 20 0a 20 20 69 73 20 73 70 65 63 69 66  use .  is specif
b980: 69 65 64 20 61 73 20 61 20 5b 74 61 62 6c 65 2d  ied as a [table-
b990: 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68 65  constraint], the
b9a0: 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  n the primary ke
b9b0: 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 0a 20  y of the table. 
b9c0: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
b9d0: 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73   list of columns
b9e0: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
b9f0: 72 74 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52  rt of the PRIMAR
ba00: 59 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a 20 20  Y KEY clause..  
ba10: 5e 54 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59  ^The PRIMARY KEY
ba20: 20 63 6c 61 75 73 65 20 6d 75 73 74 20 63 6f 6e   clause must con
ba30: 74 61 69 6e 20 6f 6e 6c 79 20 63 6f 6c 75 6d 6e  tain only column
ba40: 20 6e 61 6d 65 73 20 26 6d 64 61 73 68 3b 20 74   names &mdash; t
ba50: 68 65 20 75 73 65 20 6f 66 20 0a 20 20 65 78 70  he use of .  exp
ba60: 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 6e 20 5b  ressions in an [
ba70: 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e 5d 20  indexed-column] 
ba80: 6f 66 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  of a PRIMARY KEY
ba90: 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65   is not supporte
baa0: 64 2e 0a 20 20 5e 41 6e 20 65 72 72 6f 72 20 69  d..  ^An error i
bab0: 73 20 72 61 69 73 65 64 20 69 66 20 6d 6f 72 65  s raised if more
bac0: 20 74 68 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52   than one PRIMAR
bad0: 59 20 4b 45 59 20 63 6c 61 75 73 65 20 61 70 70  Y KEY clause app
bae0: 65 61 72 73 20 69 6e 20 61 0a 20 20 43 52 45 41  ears in a.  CREA
baf0: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
bb00: 6e 74 2e 20 20 5e 54 68 65 20 50 52 49 4d 41 52  nt.  ^The PRIMAR
bb10: 59 20 4b 45 59 20 69 73 20 6f 70 74 69 6f 6e 61  Y KEY is optiona
bb20: 6c 20 66 6f 72 20 6f 72 64 69 6e 61 72 79 20 74  l for ordinary t
bb30: 61 62 6c 65 73 0a 20 20 62 75 74 20 69 73 20 72  ables.  but is r
bb40: 65 71 75 69 72 65 64 20 66 6f 72 20 5b 57 49 54  equired for [WIT
bb50: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
bb60: 65 73 2e 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62  es...<p>If a tab
bb70: 6c 65 20 68 61 73 20 61 20 73 69 6e 67 6c 65 20  le has a single 
bb80: 63 6f 6c 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b  column primary k
bb90: 65 79 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61  ey and the decla
bba0: 72 65 64 20 74 79 70 65 20 6f 66 20 74 68 61 74  red type of that
bbb0: 0a 20 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e  .  column is "IN
bbc0: 54 45 47 45 52 22 20 61 6e 64 20 74 68 65 20 74  TEGER" and the t
bbd0: 61 62 6c 65 20 69 73 20 6e 6f 74 20 61 20 5b 57  able is not a [W
bbe0: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
bbf0: 62 6c 65 2c 0a 20 20 74 68 65 6e 20 74 68 65 20  ble,.  then the 
bc00: 63 6f 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20  column is known 
bc10: 61 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50  as an [INTEGER P
bc20: 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 20 20 53  RIMARY KEY]..  S
bc30: 65 65 20 5b 72 6f 77 69 64 7c 62 65 6c 6f 77 5d  ee [rowid|below]
bc40: 20 66 6f 72 20 61 20 64 65 73 63 72 69 70 74 69   for a descripti
bc50: 6f 6e 20 6f 66 20 74 68 65 20 73 70 65 63 69 61  on of the specia
bc60: 6c 20 70 72 6f 70 65 72 74 69 65 73 20 61 6e 64  l properties and
bc70: 20 62 65 68 61 76 69 6f 72 73 0a 20 20 61 73 73   behaviors.  ass
bc80: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 6e 20  ociated with an 
bc90: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
bca0: 20 4b 45 59 5d 2e 0a 0a 3c 70 3e 5e 45 61 63 68   KEY]...<p>^Each
bcb0: 20 72 6f 77 20 69 6e 20 61 20 74 61 62 6c 65 20   row in a table 
bcc0: 77 69 74 68 20 61 20 70 72 69 6d 61 72 79 20 6b  with a primary k
bcd0: 65 79 20 6d 75 73 74 20 68 61 76 65 20 61 20 75  ey must have a u
bce0: 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f  nique combinatio
bcf0: 6e 0a 20 20 6f 66 20 76 61 6c 75 65 73 20 69 6e  n.  of values in
bd00: 20 69 74 73 20 70 72 69 6d 61 72 79 20 6b 65 79   its primary key
bd10: 20 63 6f 6c 75 6d 6e 73 2e 20 5e 46 6f 72 20 74   columns. ^For t
bd20: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64  he purposes of d
bd30: 65 74 65 72 6d 69 6e 69 6e 67 0a 20 20 74 68 65  etermining.  the
bd40: 20 75 6e 69 71 75 65 6e 65 73 73 20 6f 66 20 70   uniqueness of p
bd50: 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65  rimary key value
bd60: 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  s, NULL values a
bd70: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69  re considered di
bd80: 73 74 69 6e 63 74 20 66 72 6f 6d 0a 20 20 61 6c  stinct from.  al
bd90: 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 2c 20  l other values, 
bda0: 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65 72 20  including other 
bdb0: 4e 55 4c 4c 73 2e 20 5e 49 66 20 61 6e 20 5b 49  NULLs. ^If an [I
bdc0: 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50 44 41 54  NSERT] or [UPDAT
bdd0: 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 61  E].  statement a
bde0: 74 74 65 6d 70 74 73 20 74 6f 20 6d 6f 64 69 66  ttempts to modif
bdf0: 79 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6e 74  y the table cont
be00: 65 6e 74 20 73 6f 20 74 68 61 74 20 74 77 6f 20  ent so that two 
be10: 6f 72 20 6d 6f 72 65 20 72 6f 77 73 0a 20 20 68  or more rows.  h
be20: 61 76 65 20 69 64 65 6e 74 69 63 61 6c 20 70 72  ave identical pr
be30: 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73  imary key values
be40: 2c 20 74 68 61 74 20 69 73 20 61 20 63 6f 6e 73  , that is a cons
be50: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
be60: 2e 0a 0a 3c 70 3e 20 41 63 63 6f 72 64 69 6e 67  ...<p> According
be70: 20 74 6f 20 74 68 65 20 53 51 4c 20 73 74 61 6e   to the SQL stan
be80: 64 61 72 64 2c 20 50 52 49 4d 41 52 59 20 4b 45  dard, PRIMARY KE
be90: 59 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20  Y should always 
bea0: 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c 2e 0a  imply NOT NULL..
beb0: 20 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c    Unfortunately,
bec0: 20 64 75 65 20 74 6f 20 61 20 62 75 67 20 69 6e   due to a bug in
bed0: 20 73 6f 6d 65 20 65 61 72 6c 79 20 76 65 72 73   some early vers
bee0: 69 6f 6e 73 2c 20 74 68 69 73 20 69 73 20 6e 6f  ions, this is no
bef0: 74 20 74 68 65 0a 20 20 63 61 73 65 20 69 6e 20  t the.  case in 
bf00: 53 51 4c 69 74 65 2e 20 5e 55 6e 6c 65 73 73 20  SQLite. ^Unless 
bf10: 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e  the column is an
bf20: 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
bf30: 59 20 4b 45 59 5d 20 6f 72 0a 20 20 74 68 65 20  Y KEY] or.  the 
bf40: 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48  table is a [WITH
bf50: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
bf60: 20 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69   or the column i
bf70: 73 20 64 65 63 6c 61 72 65 64 20 4e 4f 54 20 4e  s declared NOT N
bf80: 55 4c 4c 2c 0a 20 20 53 51 4c 69 74 65 20 61 6c  ULL,.  SQLite al
bf90: 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73  lows NULL values
bfa0: 20 69 6e 20 61 20 50 52 49 4d 41 52 59 20 4b 45   in a PRIMARY KE
bfb0: 59 20 63 6f 6c 75 6d 6e 2e 20 20 53 51 4c 69 74  Y column.  SQLit
bfc0: 65 20 63 6f 75 6c 64 20 62 65 20 66 69 78 65 64  e could be fixed
bfd0: 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20 74 6f   to.  conform to
bfe0: 20 74 68 65 20 73 74 61 6e 64 61 72 64 2c 20 62   the standard, b
bff0: 75 74 20 64 6f 69 6e 67 20 73 6f 20 6d 69 67 68  ut doing so migh
c000: 74 20 62 72 65 61 6b 20 6c 65 67 61 63 79 20 61  t break legacy a
c010: 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20 20 48  pplications..  H
c020: 65 6e 63 65 2c 20 69 74 20 68 61 73 20 62 65 65  ence, it has bee
c030: 6e 20 64 65 63 69 64 65 64 20 74 6f 20 6d 65 72  n decided to mer
c040: 65 6c 79 20 64 6f 63 75 6d 65 6e 74 20 74 68 65  ely document the
c050: 20 66 61 63 74 20 74 68 61 74 20 53 51 4c 69 74   fact that SQLit
c060: 65 0a 20 20 61 6c 6c 6f 77 69 6e 67 20 4e 55 4c  e.  allowing NUL
c070: 4c 73 20 69 6e 20 6d 6f 73 74 20 50 52 49 4d 41  Ls in most PRIMA
c080: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a  RY KEY columns..
c090: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
c0a0: 74 20 75 6e 69 71 75 65 63 6f 6e 73 74 20 7b 55  t uniqueconst {U
c0b0: 4e 49 51 55 45 7d 20 7b 75 6e 69 71 75 65 20 63  NIQUE} {unique c
c0c0: 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 55 4e 49 51  onstraint} {UNIQ
c0d0: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f  UE constraint}</
c0e0: 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 55 4e  tcl>.<p>^A <b>UN
c0f0: 49 51 55 45 3c 2f 62 3e 20 63 6f 6e 73 74 72 61  IQUE</b> constra
c100: 69 6e 74 20 69 73 20 73 69 6d 69 6c 61 72 20 74  int is similar t
c110: 6f 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  o a PRIMARY KEY 
c120: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65 78 63 65  constraint, exce
c130: 70 74 0a 20 20 74 68 61 74 20 61 20 73 69 6e 67  pt.  that a sing
c140: 6c 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61 76  le table may hav
c150: 65 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20  e any number of 
c160: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
c170: 74 73 2e 20 5e 46 6f 72 20 65 61 63 68 0a 20 20  ts. ^For each.  
c180: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
c190: 74 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 2c 20  t on the table, 
c1a0: 65 61 63 68 20 72 6f 77 20 6d 75 73 74 20 63 6f  each row must co
c1b0: 6e 74 61 69 6e 20 61 20 75 6e 69 71 75 65 20 63  ntain a unique c
c1c0: 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20  ombination.  of 
c1d0: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f  values in the co
c1e0: 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69 65 64  lumns identified
c1f0: 20 62 79 20 74 68 65 20 55 4e 49 51 55 45 20 63   by the UNIQUE c
c200: 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 20 20 5e 46  onstraint. .  ^F
c210: 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
c220: 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  of UNIQUE constr
c230: 61 69 6e 74 73 2c 20 4e 55 4c 4c 20 76 61 6c 75  aints, NULL valu
c240: 65 73 0a 20 20 61 72 65 20 63 6f 6e 73 69 64 65  es.  are conside
c250: 72 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f  red distinct fro
c260: 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75  m all other valu
c270: 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74  es, including ot
c280: 68 65 72 20 4e 55 4c 4c 73 2e 0a 20 20 5e 41 73  her NULLs..  ^As
c290: 20 77 69 74 68 20 50 52 49 4d 41 52 59 20 4b 45   with PRIMARY KE
c2a0: 59 73 2c 20 61 20 55 4e 49 51 55 45 20 5b 74 61  Ys, a UNIQUE [ta
c2b0: 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 20  ble-constraint] 
c2c0: 63 6c 61 75 73 65 20 6d 75 73 74 20 63 6f 6e 74  clause must cont
c2d0: 61 69 6e 0a 20 20 6f 6e 6c 79 20 63 6f 6c 75 6d  ain.  only colum
c2e0: 6e 20 6e 61 6d 65 73 20 26 6d 64 61 73 68 3b 20  n names &mdash; 
c2f0: 74 68 65 20 75 73 65 20 6f 66 20 0a 20 20 65 78  the use of .  ex
c300: 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 6e 20  pressions in an 
c310: 5b 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e 5d  [indexed-column]
c320: 20 6f 66 20 61 20 55 4e 49 51 55 45 20 5b 74 61   of a UNIQUE [ta
c330: 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 0a  ble-constraint].
c340: 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74    is not support
c350: 65 64 2e 0a 20 20 0a 0a 3c 70 3e 5e 49 6e 20 6d  ed..  ..<p>^In m
c360: 6f 73 74 20 63 61 73 65 73 2c 20 55 4e 49 51 55  ost cases, UNIQU
c370: 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45  E and PRIMARY KE
c380: 59 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  Y.  constraints 
c390: 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  are implemented 
c3a0: 62 79 20 63 72 65 61 74 69 6e 67 20 61 20 75 6e  by creating a un
c3b0: 69 71 75 65 20 69 6e 64 65 78 20 69 6e 20 74 68  ique index in th
c3c0: 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 28 54  e database..  (T
c3d0: 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 61 72  he exceptions ar
c3e0: 65 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  e [INTEGER PRIMA
c3f0: 52 59 20 4b 45 59 5d 20 61 6e 64 20 50 52 49 4d  RY KEY] and PRIM
c400: 41 52 59 20 4b 45 59 73 20 6f 6e 20 0a 20 20 5b  ARY KEYs on .  [
c410: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74  WITHOUT ROWID] t
c420: 61 62 6c 65 73 2e 29 0a 20 20 48 65 6e 63 65 2c  ables.).  Hence,
c430: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
c440: 63 68 65 6d 61 73 20 61 72 65 20 6c 6f 67 69 63  chemas are logic
c450: 61 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e 74 3a  ally equivalent:
c460: 0a 0a 20 20 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c  ..  <ol>.  <li><
c470: 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  p>CREATE TABLE t
c480: 31 28 61 2c 20 62 20 55 4e 49 51 55 45 29 3b 0a  1(a, b UNIQUE);.
c490: 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20    <li><p>CREATE 
c4a0: 54 41 42 4c 45 20 74 31 28 61 2c 20 62 20 50 52  TABLE t1(a, b PR
c4b0: 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 3c 6c  IMARY KEY);.  <l
c4c0: 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c  i><p>CREATE TABL
c4d0: 45 20 74 31 28 61 2c 20 62 29 3b 3c 62 72 3e 0a  E t1(a, b);<br>.
c4e0: 20 20 20 20 20 20 20 20 20 43 52 45 41 54 45 20           CREATE 
c4f0: 55 4e 49 51 55 45 20 49 4e 44 45 58 20 74 31 62  UNIQUE INDEX t1b
c500: 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20 3c 2f 6f   ON t1(b);.  </o
c510: 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  l>..<tcl>hd_frag
c520: 6d 65 6e 74 20 7b 63 6b 63 6f 6e 73 74 7d 20 7b  ment {ckconst} {
c530: 43 48 45 43 4b 7d 20 7b 43 48 45 43 4b 20 63 6f  CHECK} {CHECK co
c540: 6e 73 74 72 61 69 6e 74 7d 20 7b 43 48 45 43 4b  nstraint} {CHECK
c550: 20 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74   constraints}</t
c560: 63 6c 3e 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43 48  cl>.<p>^(A <b>CH
c570: 45 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69  ECK</b> constrai
c580: 6e 74 20 6d 61 79 20 62 65 20 61 74 74 61 63 68  nt may be attach
c590: 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64  ed to a column d
c5a0: 65 66 69 6e 69 74 69 6f 6e 20 6f 72 0a 20 20 73  efinition or.  s
c5b0: 70 65 63 69 66 69 65 64 20 61 73 20 61 20 74 61  pecified as a ta
c5c0: 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  ble constraint. 
c5d0: 49 6e 20 70 72 61 63 74 69 63 65 20 69 74 20 6d  In practice it m
c5e0: 61 6b 65 73 20 6e 6f 20 64 69 66 66 65 72 65 6e  akes no differen
c5f0: 63 65 2e 29 5e 20 5e 28 45 61 63 68 0a 20 20 74  ce.)^ ^(Each.  t
c600: 69 6d 65 20 61 20 6e 65 77 20 72 6f 77 20 69 73  ime a new row is
c610: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
c620: 68 65 20 74 61 62 6c 65 20 6f 72 20 61 6e 20 65  he table or an e
c630: 78 69 73 74 69 6e 67 20 72 6f 77 20 69 73 20 75  xisting row is u
c640: 70 64 61 74 65 64 2c 0a 20 20 74 68 65 20 65 78  pdated,.  the ex
c650: 70 72 65 73 73 69 6f 6e 20 61 73 73 6f 63 69 61  pression associa
c660: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 43 48  ted with each CH
c670: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  ECK constraint i
c680: 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 0a  s evaluated and.
c690: 20 20 63 61 73 74 20 74 6f 20 61 20 4e 55 4d 45    cast to a NUME
c6a0: 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74 68 65  RIC value in the
c6b0: 20 73 61 6d 65 20 77 61 79 20 61 73 20 61 20 5b   same way as a [
c6c0: 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 5d  CAST expression]
c6d0: 2e 20 49 66 20 74 68 65 20 0a 20 20 72 65 73 75  . If the .  resu
c6e0: 6c 74 20 69 73 20 7a 65 72 6f 20 28 69 6e 74 65  lt is zero (inte
c6f0: 67 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72  ger value 0 or r
c700: 65 61 6c 20 76 61 6c 75 65 20 30 2e 30 29 2c 20  eal value 0.0), 
c710: 74 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e  then a constrain
c720: 74 0a 20 20 76 69 6f 6c 61 74 69 6f 6e 20 68 61  t.  violation ha
c730: 73 20 6f 63 63 75 72 72 65 64 2e 29 5e 20 5e 49  s occurred.)^ ^I
c740: 66 20 74 68 65 20 43 48 45 43 4b 20 65 78 70 72  f the CHECK expr
c750: 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
c760: 20 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20 61   to NULL, or.  a
c770: 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72  ny other non-zer
c780: 6f 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 6e  o value, it is n
c790: 6f 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  ot a constraint 
c7a0: 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 5e 54 68  violation..  ^Th
c7b0: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  e expression of 
c7c0: 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
c7d0: 6e 74 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61  nt may not conta
c7e0: 69 6e 20 61 20 73 75 62 71 75 65 72 79 2e 0a 0a  in a subquery...
c7f0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
c800: 20 7b 6e 6f 74 6e 75 6c 6c 63 6f 6e 73 74 7d 20   {notnullconst} 
c810: 7b 4e 4f 54 20 4e 55 4c 4c 7d 20 7b 4e 4f 54 20  {NOT NULL} {NOT 
c820: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 7d  NULL constraint}
c830: 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e  </tcl>.<p>^A <b>
c840: 4e 4f 54 20 4e 55 4c 4c 3c 2f 62 3e 20 63 6f 6e  NOT NULL</b> con
c850: 73 74 72 61 69 6e 74 20 6d 61 79 20 6f 6e 6c 79  straint may only
c860: 20 62 65 20 61 74 74 61 63 68 65 64 20 74 6f 20   be attached to 
c870: 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74  a column definit
c880: 69 6f 6e 2c 0a 20 20 6e 6f 74 20 73 70 65 63 69  ion,.  not speci
c890: 66 69 65 64 20 61 73 20 61 20 74 61 62 6c 65 20  fied as a table 
c8a0: 63 6f 6e 73 74 72 61 69 6e 74 2e 20 20 4e 6f 74  constraint.  Not
c8b0: 20 73 75 72 70 72 69 73 69 6e 67 6c 79 2c 20 5e   surprisingly, ^
c8c0: 28 61 20 4e 4f 54 20 4e 55 4c 4c 0a 20 20 63 6f  (a NOT NULL.  co
c8d0: 6e 73 74 72 61 69 6e 74 20 64 69 63 74 61 74 65  nstraint dictate
c8e0: 73 20 74 68 61 74 20 74 68 65 20 61 73 73 6f 63  s that the assoc
c8f0: 69 61 74 65 64 20 63 6f 6c 75 6d 6e 20 6d 61 79  iated column may
c900: 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 4e   not contain a N
c910: 55 4c 4c 20 76 61 6c 75 65 2e 0a 20 20 41 74 74  ULL value..  Att
c920: 65 6d 70 74 69 6e 67 20 74 6f 20 73 65 74 20 74  empting to set t
c930: 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20  he column value 
c940: 74 6f 20 4e 55 4c 4c 20 77 68 65 6e 20 69 6e 73  to NULL when ins
c950: 65 72 74 69 6e 67 20 61 20 6e 65 77 20 72 6f 77  erting a new row
c960: 20 6f 72 0a 20 20 75 70 64 61 74 69 6e 67 20 61   or.  updating a
c970: 6e 20 65 78 69 73 74 69 6e 67 20 6f 6e 65 20 63  n existing one c
c980: 61 75 73 65 73 20 61 20 63 6f 6e 73 74 72 61 69  auses a constrai
c990: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 29 5e 0a  nt violation.)^.
c9a0: 0a 3c 70 3e 45 78 61 63 74 6c 79 20 68 6f 77 20  .<p>Exactly how 
c9b0: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
c9c0: 6c 61 74 69 6f 6e 20 69 73 20 64 65 61 6c 74 20  lation is dealt 
c9d0: 77 69 74 68 20 69 73 20 64 65 74 65 72 6d 69 6e  with is determin
c9e0: 65 64 20 62 79 20 74 68 65 0a 20 20 5b 63 6f 6e  ed by the.  [con
c9f0: 66 6c 69 63 74 20 63 6c 61 75 73 65 7c 63 6f 6e  flict clause|con
ca00: 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74  straint conflict
ca10: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
ca20: 72 69 74 68 6d 5d 2e 20 45 61 63 68 20 0a 20 20  rithm]. Each .  
ca30: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49  PRIMARY KEY, UNI
ca40: 51 55 45 2c 20 4e 4f 54 20 4e 55 4c 4c 20 61 6e  QUE, NOT NULL an
ca50: 64 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  d CHECK constrai
ca60: 6e 74 20 68 61 73 20 61 20 64 65 66 61 75 6c 74  nt has a default
ca70: 20 63 6f 6e 66 6c 69 63 74 0a 20 20 72 65 73 6f   conflict.  reso
ca80: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
ca90: 2e 20 5e 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  . ^PRIMARY KEY, 
caa0: 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
cab0: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ULL constraints 
cac0: 6d 61 79 20 62 65 0a 20 20 65 78 70 6c 69 63 69  may be.  explici
cad0: 74 6c 79 20 61 73 73 69 67 6e 65 64 20 61 20 64  tly assigned a d
cae0: 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20  efault conflict 
caf0: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
cb00: 69 74 68 6d 20 62 79 20 69 6e 63 6c 75 64 69 6e  ithm by includin
cb10: 67 0a 20 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d  g.  a [conflict-
cb20: 63 6c 61 75 73 65 5d 20 69 6e 20 74 68 65 69 72  clause] in their
cb30: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20 5e 4f   definitions. ^O
cb40: 72 2c 20 69 66 20 61 20 63 6f 6e 73 74 72 61 69  r, if a constrai
cb50: 6e 74 20 64 65 66 69 6e 69 74 69 6f 6e 0a 20 20  nt definition.  
cb60: 64 6f 65 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65  does not include
cb70: 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61   a [conflict-cla
cb80: 75 73 65 5d 20 6f 72 20 69 74 20 69 73 20 61 20  use] or it is a 
cb90: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
cba0: 2c 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20  , the default.  
cbb0: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
cbc0: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ion algorithm is
cbd0: 20 41 42 4f 52 54 2e 20 5e 44 69 66 66 65 72 65   ABORT. ^Differe
cbe0: 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77  nt constraints w
cbf0: 69 74 68 69 6e 20 74 68 65 0a 20 20 73 61 6d 65  ithin the.  same
cc00: 20 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20   table may have 
cc10: 64 69 66 66 65 72 65 6e 74 20 64 65 66 61 75 6c  different defaul
cc20: 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
cc30: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 73  ution algorithms
cc40: 2e 20 53 65 65 0a 20 20 74 68 65 20 73 65 63 74  . See.  the sect
cc50: 69 6f 6e 20 74 69 74 6c 65 64 20 5b 4f 4e 20 43  ion titled [ON C
cc60: 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64  ONFLICT] for add
cc70: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
cc80: 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ion...<tcl>hd_fr
cc90: 61 67 6d 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e  agment rowid {IN
cca0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
ccb0: 59 7d 20 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f  Y} ROWID rowid</
ccc0: 74 63 6c 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20  tcl>.<h3>ROWIDs 
ccd0: 61 6e 64 20 74 68 65 20 49 4e 54 45 47 45 52 20  and the INTEGER 
cce0: 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e  PRIMARY KEY</h3>
ccf0: 0a 0a 3c 70 3e 5e 45 78 63 65 70 74 20 66 6f 72  ..<p>^Except for
cd00: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
cd10: 20 74 61 62 6c 65 73 2c 20 61 6c 6c 20 72 6f 77   tables, all row
cd20: 73 20 77 69 74 68 69 6e 20 53 51 4c 69 74 65 20  s within SQLite 
cd30: 74 61 62 6c 65 73 0a 68 61 76 65 20 61 20 36 34  tables.have a 64
cd40: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
cd50: 67 65 72 20 6b 65 79 20 74 68 61 74 20 75 6e 69  ger key that uni
cd60: 71 75 65 6c 79 20 69 64 65 6e 74 69 66 69 65 73  quely identifies
cd70: 20 74 68 65 20 72 6f 77 20 77 69 74 68 69 6e 20   the row within 
cd80: 69 74 73 20 74 61 62 6c 65 2e 0a 54 68 69 73 20  its table..This 
cd90: 69 6e 74 65 67 65 72 20 69 73 20 75 73 75 61 6c  integer is usual
cda0: 6c 79 0a 63 61 6c 6c 65 64 20 74 68 65 20 22 72  ly.called the "r
cdb0: 6f 77 69 64 22 2e 20 5e 54 68 65 20 72 6f 77 69  owid". ^The rowi
cdc0: 64 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 61  d value can be a
cdd0: 63 63 65 73 73 65 64 20 75 73 69 6e 67 20 6f 6e  ccessed using on
cde0: 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c  e of the special
cdf0: 0a 63 61 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e  .case-independen
ce00: 74 20 6e 61 6d 65 73 20 22 72 6f 77 69 64 22 2c  t names "rowid",
ce10: 20 22 6f 69 64 22 2c 20 6f 72 20 22 5f 72 6f 77   "oid", or "_row
ce20: 69 64 5f 22 20 69 6e 20 70 6c 61 63 65 20 6f 66  id_" in place of
ce30: 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a   a column name..
ce40: 5e 49 66 20 61 20 74 61 62 6c 65 20 63 6f 6e 74  ^If a table cont
ce50: 61 69 6e 73 20 61 20 75 73 65 72 20 64 65 66 69  ains a user defi
ce60: 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64  ned column named
ce70: 20 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20   "rowid", "oid" 
ce80: 6f 72 20 22 5f 72 6f 77 69 64 5f 22 2c 0a 74 68  or "_rowid_",.th
ce90: 65 6e 20 74 68 61 74 20 6e 61 6d 65 20 61 6c 77  en that name alw
cea0: 61 79 73 20 72 65 66 65 72 73 20 74 68 65 20 65  ays refers the e
ceb0: 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72  xplicitly declar
cec0: 65 64 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 63 61  ed column and ca
ced0: 6e 6e 6f 74 20 62 65 20 75 73 65 64 0a 74 6f 20  nnot be used.to 
cee0: 72 65 74 72 69 65 76 65 20 74 68 65 20 69 6e 74  retrieve the int
cef0: 65 67 65 72 20 72 6f 77 69 64 20 76 61 6c 75 65  eger rowid value
cf00: 2e 0a 0a 3c 70 3e 54 68 65 20 72 6f 77 69 64 20  ...<p>The rowid 
cf10: 28 61 6e 64 20 22 6f 69 64 22 20 61 6e 64 20 22  (and "oid" and "
cf20: 5f 72 6f 77 69 64 5f 22 29 20 69 73 20 6f 6d 69  _rowid_") is omi
cf30: 74 74 65 64 20 69 6e 20 5b 57 49 54 48 4f 55 54  tted in [WITHOUT
cf40: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a   ROWID] tables..
cf50: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61  WITHOUT ROWID ta
cf60: 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 61 76  bles are only av
cf70: 61 69 6c 61 62 6c 65 20 69 6e 20 53 51 4c 69 74  ailable in SQLit
cf80: 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 38 2e 32  e [version 3.8.2
cf90: 5d 0a 28 5b 64 61 74 65 6f 66 3a 33 2e 38 2e 32  ].([dateof:3.8.2
cfa0: 5d 29 20 61 6e 64 20 6c 61 74 65 72 2e 0a 41 20  ]) and later..A 
cfb0: 74 61 62 6c 65 20 74 68 61 74 20 6c 61 63 6b 73  table that lacks
cfc0: 20 74 68 65 20 57 49 54 48 4f 55 54 20 52 4f 57   the WITHOUT ROW
cfd0: 49 44 20 63 6c 61 75 73 65 20 69 73 20 63 61 6c  ID clause is cal
cfe0: 6c 65 64 20 61 20 22 72 6f 77 69 64 20 74 61 62  led a "rowid tab
cff0: 6c 65 22 2e 0a 0a 3c 70 3e 54 68 65 20 64 61 74  le"...<p>The dat
d000: 61 20 66 6f 72 20 72 6f 77 69 64 20 74 61 62 6c  a for rowid tabl
d010: 65 73 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  es is stored as 
d020: 61 20 42 2d 54 72 65 65 20 73 74 72 75 63 74 75  a B-Tree structu
d030: 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 6f 6e  re containing.on
d040: 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
d050: 20 74 61 62 6c 65 20 72 6f 77 2c 20 75 73 69 6e   table row, usin
d060: 67 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75  g the rowid valu
d070: 65 20 61 73 20 74 68 65 20 6b 65 79 2e 20 54 68  e as the key. Th
d080: 69 73 20 6d 65 61 6e 73 20 74 68 61 74 0a 72 65  is means that.re
d090: 74 72 69 65 76 69 6e 67 20 6f 72 20 73 6f 72 74  trieving or sort
d0a0: 69 6e 67 20 72 65 63 6f 72 64 73 20 62 79 20 72  ing records by r
d0b0: 6f 77 69 64 20 69 73 20 66 61 73 74 2e 20 53 65  owid is fast. Se
d0c0: 61 72 63 68 69 6e 67 20 66 6f 72 20 61 20 72 65  arching for a re
d0d0: 63 6f 72 64 20 77 69 74 68 20 61 0a 73 70 65 63  cord with a.spec
d0e0: 69 66 69 63 20 72 6f 77 69 64 2c 20 6f 72 20 66  ific rowid, or f
d0f0: 6f 72 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 77  or all records w
d100: 69 74 68 20 72 6f 77 69 64 73 20 77 69 74 68 69  ith rowids withi
d110: 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 72 61  n a specified ra
d120: 6e 67 65 20 69 73 0a 61 72 6f 75 6e 64 20 74 77  nge is.around tw
d130: 69 63 65 20 61 73 20 66 61 73 74 20 61 73 20 61  ice as fast as a
d140: 20 73 69 6d 69 6c 61 72 20 73 65 61 72 63 68 20   similar search 
d150: 6d 61 64 65 20 62 79 20 73 70 65 63 69 66 79 69  made by specifyi
d160: 6e 67 20 61 6e 79 20 6f 74 68 65 72 20 50 52 49  ng any other PRI
d170: 4d 41 52 59 0a 4b 45 59 20 6f 72 20 69 6e 64 65  MARY.KEY or inde
d180: 78 65 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 20  xed value...<p> 
d190: 5e 57 69 74 68 20 6f 6e 65 20 65 78 63 65 70 74  ^With one except
d1a0: 69 6f 6e 20 6e 6f 74 65 64 20 62 65 6c 6f 77 2c  ion noted below,
d1b0: 20 69 66 20 61 20 72 6f 77 69 64 20 74 61 62 6c   if a rowid tabl
d1c0: 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20  e has a primary 
d1d0: 6b 65 79 20 74 68 61 74 20 63 6f 6e 73 69 73 74  key that consist
d1e0: 73 0a 6f 66 20 61 20 73 69 6e 67 6c 65 20 63 6f  s.of a single co
d1f0: 6c 75 6d 6e 20 61 6e 64 20 74 68 65 20 64 65 63  lumn and the dec
d200: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74 68  lared type of th
d210: 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e  at column is "IN
d220: 54 45 47 45 52 22 20 69 6e 20 61 6e 79 20 6d 69  TEGER" in any mi
d230: 78 74 75 72 65 20 6f 66 0a 75 70 70 65 72 20 61  xture of.upper a
d240: 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 2c 20 74  nd lower case, t
d250: 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62  hen the column b
d260: 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20  ecomes an alias 
d270: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 20 53  for the rowid. S
d280: 75 63 68 20 61 0a 63 6f 6c 75 6d 6e 20 69 73 20  uch a.column is 
d290: 75 73 75 61 6c 6c 79 20 72 65 66 65 72 72 65 64  usually referred
d2a0: 20 74 6f 20 61 73 20 61 6e 20 22 69 6e 74 65 67   to as an "integ
d2b0: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 22 2e  er primary key".
d2c0: 20 41 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63   A PRIMARY KEY c
d2d0: 6f 6c 75 6d 6e 0a 6f 6e 6c 79 20 62 65 63 6f 6d  olumn.only becom
d2e0: 65 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72  es an integer pr
d2f0: 69 6d 61 72 79 20 6b 65 79 20 69 66 20 74 68 65  imary key if the
d300: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6e   declared type n
d310: 61 6d 65 20 69 73 20 65 78 61 63 74 6c 79 0a 22  ame is exactly."
d320: 49 4e 54 45 47 45 52 22 2e 20 20 5e 4f 74 68 65  INTEGER".  ^Othe
d330: 72 20 69 6e 74 65 67 65 72 20 74 79 70 65 20 6e  r integer type n
d340: 61 6d 65 73 20 6c 69 6b 65 20 22 49 4e 54 22 20  ames like "INT" 
d350: 6f 72 20 22 42 49 47 49 4e 54 22 20 6f 72 20 22  or "BIGINT" or "
d360: 53 48 4f 52 54 20 49 4e 54 45 47 45 52 22 0a 6f  SHORT INTEGER".o
d370: 72 20 22 55 4e 53 49 47 4e 45 44 20 49 4e 54 45  r "UNSIGNED INTE
d380: 47 45 52 22 20 63 61 75 73 65 73 20 74 68 65 20  GER" causes the 
d390: 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75  primary key colu
d3a0: 6d 6e 20 74 6f 20 62 65 68 61 76 65 20 61 73 20  mn to behave as 
d3b0: 61 6e 20 6f 72 64 69 6e 61 72 79 0a 74 61 62 6c  an ordinary.tabl
d3c0: 65 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 69 6e  e column with in
d3d0: 74 65 67 65 72 20 5b 61 66 66 69 6e 69 74 79 5d  teger [affinity]
d3e0: 20 61 6e 64 20 61 20 75 6e 69 71 75 65 20 69 6e   and a unique in
d3f0: 64 65 78 2c 20 6e 6f 74 20 61 73 20 61 6e 20 61  dex, not as an a
d400: 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f 77  lias for.the row
d410: 69 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 65 78 63  id...<p> The exc
d420: 65 70 74 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64  eption mentioned
d430: 20 61 62 6f 76 65 20 69 73 20 74 68 61 74 20 5e   above is that ^
d440: 69 66 20 74 68 65 20 64 65 63 6c 61 72 61 74 69  if the declarati
d450: 6f 6e 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 77  on of a column w
d460: 69 74 68 0a 64 65 63 6c 61 72 65 64 20 74 79 70  ith.declared typ
d470: 65 20 22 49 4e 54 45 47 45 52 22 20 69 6e 63 6c  e "INTEGER" incl
d480: 75 64 65 73 20 61 6e 20 22 50 52 49 4d 41 52 59  udes an "PRIMARY
d490: 20 4b 45 59 20 44 45 53 43 22 20 63 6c 61 75 73   KEY DESC" claus
d4a0: 65 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 62  e, it does not.b
d4b0: 65 63 6f 6d 65 20 61 6e 20 61 6c 69 61 73 20 66  ecome an alias f
d4c0: 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 6e 64  or the rowid and
d4d0: 20 69 73 20 6e 6f 74 20 63 6c 61 73 73 69 66 69   is not classifi
d4e0: 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ed as an integer
d4f0: 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 54 68   primary key..Th
d500: 69 73 20 71 75 69 72 6b 20 69 73 20 6e 6f 74 20  is quirk is not 
d510: 62 79 20 64 65 73 69 67 6e 2e 20 49 74 20 69 73  by design. It is
d520: 20 64 75 65 20 74 6f 20 61 20 62 75 67 20 69 6e   due to a bug in
d530: 20 65 61 72 6c 79 20 76 65 72 73 69 6f 6e 73 20   early versions 
d540: 6f 66 20 53 51 4c 69 74 65 2e 0a 42 75 74 20 66  of SQLite..But f
d550: 69 78 69 6e 67 20 74 68 65 20 62 75 67 20 63 6f  ixing the bug co
d560: 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 20 62 61  uld result in ba
d570: 63 6b 77 61 72 64 73 20 69 6e 63 6f 6d 70 61 74  ckwards incompat
d580: 69 62 69 6c 69 74 69 65 73 2e 0a 48 65 6e 63 65  ibilities..Hence
d590: 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 62  , the original b
d5a0: 65 68 61 76 69 6f 72 20 68 61 73 20 62 65 65 6e  ehavior has been
d5b0: 20 72 65 74 61 69 6e 65 64 20 28 61 6e 64 20 64   retained (and d
d5c0: 6f 63 75 6d 65 6e 74 65 64 29 20 62 65 63 61 75  ocumented) becau
d5d0: 73 65 20 6f 64 64 0a 62 65 68 61 76 69 6f 72 20  se odd.behavior 
d5e0: 69 6e 20 61 20 63 6f 72 6e 65 72 20 63 61 73 65  in a corner case
d5f0: 20 69 73 20 66 61 72 20 62 65 74 74 65 72 20 74   is far better t
d600: 68 61 6e 20 61 20 63 6f 6d 70 61 74 69 62 69 6c  han a compatibil
d610: 69 74 79 20 62 72 65 61 6b 2e 20 20 54 68 69 73  ity break.  This
d620: 20 6d 65 61 6e 73 0a 74 68 61 74 20 5e 28 74 68   means.that ^(th
d630: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65  e following thre
d640: 65 20 74 61 62 6c 65 20 64 65 63 6c 61 72 61 74  e table declarat
d650: 69 6f 6e 73 20 61 6c 6c 20 63 61 75 73 65 20 74  ions all cause t
d660: 68 65 20 63 6f 6c 75 6d 6e 20 22 78 22 20 74 6f  he column "x" to
d670: 20 62 65 20 61 6e 0a 61 6c 69 61 73 20 66 6f 72   be an.alias for
d680: 20 74 68 65 20 72 6f 77 69 64 20 28 61 6e 20 69   the rowid (an i
d690: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
d6a0: 65 79 29 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  ey):..<ul>.<li><
d6b0: 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20  tt>CREATE TABLE 
d6c0: 74 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d  t(x INTEGER PRIM
d6d0: 41 52 59 20 4b 45 59 20 41 53 43 2c 20 79 2c 20  ARY KEY ASC, y, 
d6e0: 7a 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74  z);</tt>.<li><tt
d6f0: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
d700: 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c  x INTEGER, y, z,
d710: 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78 20 41   PRIMARY KEY(x A
d720: 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c  SC));</tt>.<li><
d730: 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20  tt>CREATE TABLE 
d740: 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 20  t(x INTEGER, y, 
d750: 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78  z, PRIMARY KEY(x
d760: 20 44 45 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 2f   DESC));</tt>.</
d770: 75 6c 3e 29 5e 0a 0a 3c 70 3e 42 75 74 20 5e 28  ul>)^..<p>But ^(
d780: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 65  the following de
d790: 63 6c 61 72 61 74 69 6f 6e 20 64 6f 65 73 20 6e  claration does n
d7a0: 6f 74 20 72 65 73 75 6c 74 20 69 6e 20 22 78 22  ot result in "x"
d7b0: 20 62 65 69 6e 67 20 61 6e 20 61 6c 69 61 73 20   being an alias 
d7c0: 66 6f 72 0a 74 68 65 20 72 6f 77 69 64 3a 0a 3c  for.the rowid:.<
d7d0: 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41  ul>.<li><tt>CREA
d7e0: 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
d7f0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
d800: 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74   DESC, y, z);</t
d810: 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 5e  t>.</ul>)^..<p>^
d820: 52 6f 77 69 64 20 76 61 6c 75 65 73 20 6d 61 79  Rowid values may
d830: 20 62 65 20 6d 6f 64 69 66 69 65 64 20 75 73 69   be modified usi
d840: 6e 67 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  ng an UPDATE sta
d850: 74 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 73 61  tement in the sa
d860: 6d 65 0a 77 61 79 20 61 73 20 61 6e 79 20 6f 74  me.way as any ot
d870: 68 65 72 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  her column value
d880: 20 63 61 6e 2c 20 65 69 74 68 65 72 20 75 73 69   can, either usi
d890: 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 62 75  ng one of the bu
d8a0: 69 6c 74 2d 69 6e 20 61 6c 69 61 73 65 73 0a 28  ilt-in aliases.(
d8b0: 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f  "rowid", "oid" o
d8c0: 72 20 22 5f 72 6f 77 69 64 5f 22 29 20 6f 72 20  r "_rowid_") or 
d8d0: 62 79 20 75 73 69 6e 67 20 61 6e 20 61 6c 69 61  by using an alia
d8e0: 73 20 63 72 65 61 74 65 64 20 62 79 20 61 6e 20  s created by an 
d8f0: 69 6e 74 65 67 65 72 0a 70 72 69 6d 61 72 79 20  integer.primary 
d900: 6b 65 79 2e 20 5e 53 69 6d 69 6c 61 72 6c 79 2c  key. ^Similarly,
d910: 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
d920: 6d 65 6e 74 20 6d 61 79 20 70 72 6f 76 69 64 65  ment may provide
d930: 20 61 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20   a value to use 
d940: 61 73 20 74 68 65 0a 72 6f 77 69 64 20 66 6f 72  as the.rowid for
d950: 20 65 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74   each row insert
d960: 65 64 2e 20 5e 28 55 6e 6c 69 6b 65 20 6e 6f 72  ed. ^(Unlike nor
d970: 6d 61 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75 6d  mal SQLite colum
d980: 6e 73 2c 20 61 6e 20 69 6e 74 65 67 65 72 20 70  ns, an integer p
d990: 72 69 6d 61 72 79 0a 6b 65 79 20 6f 72 20 72 6f  rimary.key or ro
d9a0: 77 69 64 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20  wid column must 
d9b0: 63 6f 6e 74 61 69 6e 20 69 6e 74 65 67 65 72 20  contain integer 
d9c0: 76 61 6c 75 65 73 2e 20 49 6e 74 65 67 65 72 20  values. Integer 
d9d0: 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72  primary key or r
d9e0: 6f 77 69 64 0a 63 6f 6c 75 6d 6e 73 20 61 72 65  owid.columns are
d9f0: 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20 68 6f 6c   not able to hol
da00: 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  d floating point
da10: 20 76 61 6c 75 65 73 2c 20 73 74 72 69 6e 67 73   values, strings
da20: 2c 20 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c  , BLOBs, or NULL
da30: 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20  s.)^..<p>^If an 
da40: 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
da50: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 73 65 74   attempts to set
da60: 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d   an integer prim
da70: 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64  ary key or rowid
da80: 20 63 6f 6c 75 6d 6e 0a 74 6f 20 61 20 4e 55 4c   column.to a NUL
da90: 4c 20 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65 2c  L or blob value,
daa0: 20 6f 72 20 74 6f 20 61 20 73 74 72 69 6e 67 20   or to a string 
dab0: 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68  or real value th
dac0: 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73  at cannot be los
dad0: 73 6c 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65  slessly.converte
dae0: 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c  d to an integer,
daf0: 20 61 20 22 64 61 74 61 74 79 70 65 20 6d 69 73   a "datatype mis
db00: 6d 61 74 63 68 22 20 65 72 72 6f 72 20 6f 63 63  match" error occ
db10: 75 72 73 20 61 6e 64 20 74 68 65 20 73 74 61 74  urs and the stat
db20: 65 6d 65 6e 74 0a 69 73 20 61 62 6f 72 74 65 64  ement.is aborted
db30: 2e 20 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20  . ^If an INSERT 
db40: 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70  statement attemp
db50: 74 73 20 74 6f 20 69 6e 73 65 72 74 20 61 20 62  ts to insert a b
db60: 6c 6f 62 20 76 61 6c 75 65 2c 20 6f 72 20 61 20  lob value, or a 
db70: 73 74 72 69 6e 67 0a 6f 72 20 72 65 61 6c 20 76  string.or real v
db80: 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74  alue that cannot
db90: 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63   be losslessly c
dba0: 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
dbb0: 6e 74 65 67 65 72 20 69 6e 74 6f 20 61 6e 0a 69  nteger into an.i
dbc0: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
dbd0: 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75  ey or rowid colu
dbe0: 6d 6e 2c 20 61 20 22 64 61 74 61 74 79 70 65 20  mn, a "datatype 
dbf0: 6d 69 73 6d 61 74 63 68 22 20 65 72 72 6f 72 20  mismatch" error 
dc00: 6f 63 63 75 72 73 20 61 6e 64 20 74 68 65 0a 73  occurs and the.s
dc10: 74 61 74 65 6d 65 6e 74 20 69 73 20 61 62 6f 72  tatement is abor
dc20: 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20  ted...<p>^If an 
dc30: 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
dc40: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73   attempts to ins
dc50: 65 72 74 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65  ert a NULL value
dc60: 20 69 6e 74 6f 20 61 20 72 6f 77 69 64 20 6f 72   into a rowid or
dc70: 0a 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79  .integer primary
dc80: 20 6b 65 79 20 63 6f 6c 75 6d 6e 2c 20 74 68 65   key column, the
dc90: 20 73 79 73 74 65 6d 20 63 68 6f 6f 73 65 73 20   system chooses 
dca0: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
dcb0: 20 74 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72   to use as the.r
dcc0: 6f 77 69 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  owid automatical
dcd0: 6c 79 2e 20 41 20 64 65 74 61 69 6c 65 64 20 64  ly. A detailed d
dce0: 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 68 6f  escription of ho
dcf0: 77 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20 69  w this is done i
dd00: 73 20 70 72 6f 76 69 64 65 64 0a 3c 61 20 68 72  s provided.<a hr
dd10: 65 66 3d 22 61 75 74 6f 69 6e 63 2e 68 74 6d 6c  ef="autoinc.html
dd20: 22 3e 73 65 70 61 72 61 74 65 6c 79 3c 2f 61 3e  ">separately</a>
dd30: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20  .</p>..<p>^(The 
dd40: 5b 70 61 72 65 6e 74 20 6b 65 79 5d 20 6f 66 20  [parent key] of 
dd50: 61 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  a [foreign key c
dd60: 6f 6e 73 74 72 61 69 6e 74 5d 20 69 73 20 6e 6f  onstraint] is no
dd70: 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 75 73 65  t allowed to.use
dd80: 20 74 68 65 20 72 6f 77 69 64 2e 20 20 54 68 65   the rowid.  The
dd90: 20 70 61 72 65 6e 74 20 6b 65 79 20 6d 75 73 74   parent key must
dda0: 20 75 73 65 64 20 6e 61 6d 65 64 20 63 6f 6c 75   used named colu
ddb0: 6d 6e 73 20 6f 6e 6c 79 2e 29 5e 3c 2f 70 3e 0a  mns only.)^</p>.
ddc0: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
ddd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dde0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ddf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
de00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
de10: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
de20: 52 45 41 54 45 20 54 52 49 47 47 45 52 7d 20 63  REATE TRIGGER} c
de30: 72 65 61 74 65 74 72 69 67 67 65 72 20 7b 7b 43  reatetrigger {{C
de40: 52 45 41 54 45 20 54 52 49 47 47 45 52 7d 7d 0a  REATE TRIGGER}}.
de50: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
de60: 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 74  Diagram create-t
de70: 72 69 67 67 65 72 2d 73 74 6d 74 0a 3c 2f 74 63  rigger-stmt.</tc
de80: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41  l>..<p>^The CREA
de90: 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65  TE TRIGGER state
dea0: 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
deb0: 61 64 64 20 74 72 69 67 67 65 72 73 20 74 6f 20  add triggers to 
dec0: 74 68 65 20 0a 64 61 74 61 62 61 73 65 20 73 63  the .database sc
ded0: 68 65 6d 61 2e 20 5e 54 72 69 67 67 65 72 73 20  hema. ^Triggers 
dee0: 61 72 65 20 64 61 74 61 62 61 73 65 20 6f 70 65  are database ope
def0: 72 61 74 69 6f 6e 73 20 0a 74 68 61 74 20 61 72  rations .that ar
df00: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
df10: 70 65 72 66 6f 72 6d 65 64 20 77 68 65 6e 20 61  performed when a
df20: 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62   specified datab
df30: 61 73 65 20 65 76 65 6e 74 0a 6f 63 63 75 72 73  ase event.occurs
df40: 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 74  .  </p>..<p>^A t
df50: 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 73 70  rigger may be sp
df60: 65 63 69 66 69 65 64 20 74 6f 20 66 69 72 65 20  ecified to fire 
df70: 77 68 65 6e 65 76 65 72 20 61 20 5b 44 45 4c 45  whenever a [DELE
df80: 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f  TE], [INSERT],.o
df90: 72 20 5b 55 50 44 41 54 45 5d 20 6f 66 20 61 0a  r [UPDATE] of a.
dfa0: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
dfb0: 61 73 65 20 74 61 62 6c 65 20 6f 63 63 75 72 73  ase table occurs
dfc0: 2c 20 6f 72 20 77 68 65 6e 65 76 65 72 20 61 6e  , or whenever an
dfd0: 20 5b 55 50 44 41 54 45 5d 20 6f 63 63 75 72 73   [UPDATE] occurs
dfe0: 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d 6f   on.on one or mo
dff0: 72 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c  re specified col
e000: 75 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 2e  umns of a table.
e010: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68 69  </p>..<p>^At thi
e020: 73 20 74 69 6d 65 20 53 51 4c 69 74 65 20 73 75  s time SQLite su
e030: 70 70 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52 20  pports only FOR 
e040: 45 41 43 48 20 52 4f 57 20 74 72 69 67 67 65 72  EACH ROW trigger
e050: 73 2c 20 6e 6f 74 20 46 4f 52 20 45 41 43 48 0a  s, not FOR EACH.
e060: 53 54 41 54 45 4d 45 4e 54 20 74 72 69 67 67 65  STATEMENT trigge
e070: 72 73 2e 20 5e 48 65 6e 63 65 20 65 78 70 6c 69  rs. ^Hence expli
e080: 63 69 74 6c 79 20 73 70 65 63 69 66 79 69 6e 67  citly specifying
e090: 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69 73   FOR EACH ROW is
e0a0: 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52 20   optional..^FOR 
e0b0: 45 41 43 48 20 52 4f 57 20 69 6d 70 6c 69 65 73  EACH ROW implies
e0c0: 20 74 68 61 74 20 74 68 65 20 53 51 4c 20 73 74   that the SQL st
e0d0: 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
e0e0: 65 64 20 69 6e 20 74 68 65 20 74 72 69 67 67 65  ed in the trigge
e0f0: 72 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74 65  r.may be execute
e100: 64 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  d (depending on 
e110: 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 29  the WHEN clause)
e120: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
e130: 73 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73  se row being.ins
e140: 65 72 74 65 64 2c 20 75 70 64 61 74 65 64 20 6f  erted, updated o
e150: 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65  r deleted by the
e160: 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69   statement causi
e170: 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74  ng the trigger t
e180: 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  o fire.</p>..<p>
e190: 5e 28 42 6f 74 68 20 74 68 65 20 57 48 45 4e 20  ^(Both the WHEN 
e1a0: 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 74  clause and the t
e1b0: 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 6d  rigger actions m
e1c0: 61 79 20 61 63 63 65 73 73 20 65 6c 65 6d 65 6e  ay access elemen
e1d0: 74 73 20 6f 66 20 0a 74 68 65 20 72 6f 77 20 62  ts of .the row b
e1e0: 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2c 20 64  eing inserted, d
e1f0: 65 6c 65 74 65 64 20 6f 72 20 75 70 64 61 74 65  eleted or update
e200: 64 20 75 73 69 6e 67 20 72 65 66 65 72 65 6e 63  d using referenc
e210: 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 0a  es of the form .
e220: 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e  "NEW.<i>column-n
e230: 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22 4f 4c  ame</i>" and "OL
e240: 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  D.<i>column-name
e250: 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c 69 3e  </i>", where.<i>
e260: 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20  column-name</i> 
e270: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
e280: 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65   column from the
e290: 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20   table that the 
e2a0: 74 72 69 67 67 65 72 0a 69 73 20 61 73 73 6f 63  trigger.is assoc
e2b0: 69 61 74 65 64 20 77 69 74 68 2e 29 5e 20 5e 28  iated with.)^ ^(
e2c0: 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65  OLD and NEW refe
e2d0: 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20  rences may only 
e2e0: 62 65 20 75 73 65 64 20 69 6e 20 74 72 69 67 67  be used in trigg
e2f0: 65 72 73 20 6f 6e 0a 65 76 65 6e 74 73 20 66 6f  ers on.events fo
e300: 72 20 77 68 69 63 68 20 74 68 65 79 20 61 72 65  r which they are
e310: 20 72 65 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f   relevant, as fo
e320: 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62  llows:</p>..<tab
e330: 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c  le border=0 cell
e340: 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e  padding=10>.<tr>
e350: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
e360: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  " align="right" 
e370: 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53  width=120><i>INS
e380: 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64  ERT</i></td>.<td
e390: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45   valign="top">NE
e3a0: 57 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65  W references are
e3b0: 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72   valid</td>.</tr
e3c0: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
e3d0: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
e3e0: 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e  ight" width=120>
e3f0: 3c 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74  <i>UPDATE</i></t
e400: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
e410: 6f 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20  op">NEW and OLD 
e420: 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76  references are v
e430: 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  alid</td>.</tr>.
e440: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
e450: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
e460: 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69  ht" width=120><i
e470: 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e  >DELETE</i></td>
e480: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
e490: 22 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73  ">OLD references
e4a0: 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a   are valid</td>.
e4b0: 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  </tr>.</table>.<
e4c0: 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 20  /p>)^..<p>^If a 
e4d0: 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73  WHEN clause is s
e4e0: 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c  upplied, the SQL
e4f0: 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63   statements spec
e500: 69 66 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20 65  ified.are only e
e510: 78 65 63 75 74 65 64 20 69 66 20 74 68 65 20 57  xecuted if the W
e520: 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 74 72  HEN clause is tr
e530: 75 65 2e 0a 5e 49 66 20 6e 6f 20 57 48 45 4e 20  ue..^If no WHEN 
e540: 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69  clause is suppli
e550: 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74  ed, the SQL stat
e560: 65 6d 65 6e 74 73 0a 61 72 65 20 65 78 65 63 75  ements.are execu
e570: 74 65 64 20 65 76 65 72 79 20 74 69 6d 65 20 74  ted every time t
e580: 68 65 20 74 72 69 67 67 65 72 20 66 69 72 65 73  he trigger fires
e590: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 42  .</p>..<p>^The B
e5a0: 45 46 4f 52 45 20 6f 72 20 41 46 54 45 52 20 6b  EFORE or AFTER k
e5b0: 65 79 77 6f 72 64 20 64 65 74 65 72 6d 69 6e 65  eyword determine
e5c0: 73 20 77 68 65 6e 20 74 68 65 20 74 72 69 67 67  s when the trigg
e5d0: 65 72 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c 20  er actions.will 
e5e0: 62 65 20 65 78 65 63 75 74 65 64 20 72 65 6c 61  be executed rela
e5f0: 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 73 65  tive to the inse
e600: 72 74 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74  rtion, modificat
e610: 69 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f  ion or removal o
e620: 66 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64  f the.associated
e630: 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41   row.</p>..<p>^A
e640: 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  n [ON CONFLICT] 
e650: 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20 73 70  clause may be sp
e660: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
e670: 6f 66 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f  of an [UPDATE] o
e680: 72 20 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69 6f  r [INSERT].actio
e690: 6e 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  n within the bod
e6a0: 79 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  y of the trigger
e6b0: 2e 0a 5e 48 6f 77 65 76 65 72 20 69 66 20 61 6e  ..^However if an
e6c0: 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63   [ON CONFLICT] c
e6d0: 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
e6e0: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a 74  ed as part of .t
e6f0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75  he statement cau
e700: 73 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  sing the trigger
e710: 20 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20 63   to fire, then c
e720: 6f 6e 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e 67  onflict handling
e730: 0a 70 6f 6c 69 63 79 20 6f 66 20 74 68 65 20 6f  .policy of the o
e740: 75 74 65 72 20 73 74 61 74 65 6d 65 6e 74 20 69  uter statement i
e750: 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e 3c  s used instead.<
e760: 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72  /p>..<p>^Trigger
e770: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
e780: 6c 6c 79 20 5b 44 52 4f 50 20 54 52 49 47 47 45  lly [DROP TRIGGE
e790: 52 20 7c 20 64 72 6f 70 70 65 64 5d 0a 77 68 65  R | dropped].whe
e7a0: 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  n the table that
e7b0: 20 74 68 65 79 20 61 72 65 20 0a 61 73 73 6f 63   they are .assoc
e7c0: 69 61 74 65 64 20 77 69 74 68 20 28 74 68 65 20  iated with (the 
e7d0: 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  <i>table-name</i
e7e0: 3e 20 74 61 62 6c 65 29 20 69 73 20 0a 5b 44 52  > table) is .[DR
e7f0: 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70  OP TABLE | dropp
e800: 65 64 5d 2e 20 20 5e 48 6f 77 65 76 65 72 20 69  ed].  ^However i
e810: 66 20 74 68 65 20 74 72 69 67 67 65 72 20 61 63  f the trigger ac
e820: 74 69 6f 6e 73 20 72 65 66 65 72 65 6e 63 65 0a  tions reference.
e830: 6f 74 68 65 72 20 74 61 62 6c 65 73 2c 20 74 68  other tables, th
e840: 65 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f 74  e trigger is not
e850: 20 64 72 6f 70 70 65 64 20 6f 72 20 6d 6f 64 69   dropped or modi
e860: 66 69 65 64 20 69 66 20 74 68 6f 73 65 20 6f 74  fied if those ot
e870: 68 65 72 0a 74 61 62 6c 65 73 20 61 72 65 20 5b  her.tables are [
e880: 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f  DROP TABLE | dro
e890: 70 70 65 64 5d 20 6f 72 20 5b 41 4c 54 45 52 20  pped] or [ALTER 
e8a0: 54 41 42 4c 45 20 7c 20 6d 6f 64 69 66 69 65 64  TABLE | modified
e8b0: 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67  ].</p>..<p>^Trig
e8c0: 67 65 72 73 20 61 72 65 20 72 65 6d 6f 76 65 64  gers are removed
e8d0: 20 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50   using the [DROP
e8e0: 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
e8f0: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 79  ent.</p>..<h3>Sy
e900: 6e 74 61 78 20 52 65 73 74 72 69 63 74 69 6f 6e  ntax Restriction
e910: 73 20 4f 6e 20 55 50 44 41 54 45 2c 20 44 45 4c  s On UPDATE, DEL
e920: 45 54 45 2c 20 61 6e 64 20 49 4e 53 45 52 54 20  ETE, and INSERT 
e930: 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69  Statements Withi
e940: 6e 0a 20 20 20 20 54 72 69 67 67 65 72 73 3c 2f  n.    Triggers</
e950: 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 55 50  h3>..<p>^The [UP
e960: 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c  DATE], [DELETE],
e970: 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 0a 73 74   and [INSERT].st
e980: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
e990: 74 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 20  triggers do not 
e9a0: 73 75 70 70 6f 72 74 0a 74 68 65 20 66 75 6c 6c  support.the full
e9b0: 20 73 79 6e 74 61 78 20 66 6f 72 20 5b 55 50 44   syntax for [UPD
e9c0: 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20  ATE], [DELETE], 
e9d0: 61 6e 64 20 5b 49 4e 53 45 52 54 5d 20 73 74 61  and [INSERT] sta
e9e0: 74 65 6d 65 6e 74 73 2e 20 20 54 68 65 20 66 6f  tements.  The fo
e9f0: 6c 6c 6f 77 69 6e 67 0a 72 65 73 74 72 69 63 74  llowing.restrict
ea00: 69 6f 6e 73 20 61 70 70 6c 79 3a 3c 2f 70 3e 0a  ions apply:</p>.
ea10: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  .<ul>.<li><p>.  
ea20: 5e 28 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  ^(The name of th
ea30: 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f  e table to be mo
ea40: 64 69 66 69 65 64 20 69 6e 20 61 6e 20 5b 55 50  dified in an [UP
ea50: 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c  DATE], [DELETE],
ea60: 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 20 20 73   or [INSERT].  s
ea70: 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62 65  tatement must be
ea80: 20 61 6e 20 75 6e 71 75 61 6c 69 66 69 65 64 20   an unqualified 
ea90: 74 61 62 6c 65 20 6e 61 6d 65 2e 20 20 49 6e 20  table name.  In 
eaa0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 6f 6e 65  other words, one
eab0: 20 6d 75 73 74 0a 20 20 75 73 65 20 6a 75 73 74   must.  use just
eac0: 20 22 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f   "<i>tablename</
ead0: 69 3e 22 20 6e 6f 74 20 22 3c 69 3e 64 61 74 61  i>" not "<i>data
eae0: 62 61 73 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e  base</i><b>.</b>
eaf0: 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e  <i>tablename</i>
eb00: 22 0a 20 20 77 68 65 6e 20 73 70 65 63 69 66 79  ".  when specify
eb10: 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2e 29 5e  ing the table.)^
eb20: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e   </p></li>..<li>
eb30: 3c 70 3e 0a 20 5e 46 6f 72 20 6e 6f 6e 2d 54 45  <p>. ^For non-TE
eb40: 4d 50 20 74 72 69 67 67 65 72 73 2c 0a 20 20 74  MP triggers,.  t
eb50: 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d  he table to be m
eb60: 6f 64 69 66 69 65 64 20 6f 72 20 71 75 65 72 69  odified or queri
eb70: 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e  ed must exist in
eb80: 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74 61   the.  same data
eb90: 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62 6c  base as the tabl
eba0: 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
ebb0: 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69  ch the trigger i
ebc0: 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20 5e 28  s attached..  ^(
ebd0: 54 45 4d 50 20 74 72 69 67 67 65 72 73 20 61 72  TEMP triggers ar
ebe0: 65 20 6e 6f 74 20 73 75 62 6a 65 63 74 20 74 6f  e not subject to
ebf0: 20 74 68 65 20 73 61 6d 65 2d 64 61 74 61 62 61   the same-databa
ec00: 73 65 20 72 75 6c 65 2e 20 20 41 20 54 45 4d 50  se rule.  A TEMP
ec10: 0a 20 20 74 72 69 67 67 65 72 20 69 73 20 61 6c  .  trigger is al
ec20: 6c 6f 77 65 64 20 74 6f 20 71 75 65 72 79 20 6f  lowed to query o
ec30: 72 20 6d 6f 64 69 66 79 20 61 6e 79 20 74 61 62  r modify any tab
ec40: 6c 65 20 69 6e 20 61 6e 79 20 5b 41 54 54 41 43  le in any [ATTAC
ec50: 48 5d 2d 65 64 20 64 61 74 61 62 61 73 65 2e 29  H]-ed database.)
ec60: 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ^.  </p></li>..<
ec70: 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 22 49  li><p>.  ^The "I
ec80: 4e 53 45 52 54 20 49 4e 54 4f 20 3c 69 3e 74 61  NSERT INTO <i>ta
ec90: 62 6c 65 3c 2f 69 3e 20 44 45 46 41 55 4c 54 20  ble</i> DEFAULT 
eca0: 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66 20  VALUES" form of 
ecb0: 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 73 74 61  the [INSERT] sta
ecc0: 74 65 6d 65 6e 74 0a 20 20 69 73 20 6e 6f 74 20  tement.  is not 
ecd0: 73 75 70 70 6f 72 74 65 64 2e 0a 20 20 3c 2f 70  supported..  </p
ece0: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
ecf0: 20 20 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42    ^The INDEXED B
ed00: 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45  Y and NOT INDEXE
ed10: 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f  D clauses are no
ed20: 74 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20  t supported for 
ed30: 5b 55 50 44 41 54 45 5d 20 61 6e 64 0a 20 20 5b  [UPDATE] and.  [
ed40: 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e  DELETE] statemen
ed50: 74 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ts..  </p></li>.
ed60: 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65  .<li><p>.  ^(The
ed70: 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49   ORDER BY and LI
ed80: 4d 49 54 20 63 6c 61 75 73 65 73 20 6f 6e 20 5b  MIT clauses on [
ed90: 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c  UPDATE] and [DEL
eda0: 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20  ETE] statements 
edb0: 61 72 65 20 6e 6f 74 0a 20 20 73 75 70 70 6f 72  are not.  suppor
edc0: 74 65 64 2e 20 20 4f 52 44 45 52 20 42 59 20 61  ted.  ORDER BY a
edd0: 6e 64 20 4c 49 4d 49 54 20 61 72 65 20 6e 6f 74  nd LIMIT are not
ede0: 20 6e 6f 72 6d 61 6c 6c 79 20 73 75 70 70 6f 72   normally suppor
edf0: 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54 45 5d  ted for [UPDATE]
ee00: 20 6f 72 0a 20 20 5b 44 45 4c 45 54 45 5d 20 69   or.  [DELETE] i
ee10: 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74 20 62 75  n any context bu
ee20: 74 20 63 61 6e 20 62 65 20 65 6e 61 62 6c 65 64  t can be enabled
ee30: 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20 73   for top-level s
ee40: 74 61 74 65 6d 65 6e 74 73 0a 20 20 75 73 69 6e  tatements.  usin
ee50: 67 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  g the [SQLITE_EN
ee60: 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
ee70: 54 45 5f 4c 49 4d 49 54 5d 20 63 6f 6d 70 69 6c  TE_LIMIT] compil
ee80: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20  e-time option.  
ee90: 48 6f 77 65 76 65 72 2c 0a 20 20 74 68 61 74 20  However,.  that 
eea0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
eeb0: 69 6f 6e 20 6f 6e 6c 79 20 61 70 70 6c 69 65 73  ion only applies
eec0: 20 74 6f 20 74 6f 70 2d 6c 65 76 65 6c 20 5b 55   to top-level [U
eed0: 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45  PDATE] and [DELE
eee0: 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 73  TE].  statements
eef0: 2c 20 6e 6f 74 20 5b 55 50 44 41 54 45 5d 20 61  , not [UPDATE] a
ef00: 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74  nd [DELETE] stat
ef10: 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
ef20: 69 67 67 65 72 73 2e 29 5e 0a 20 20 3c 2f 70 3e  iggers.)^.  </p>
ef30: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20  </li>..<li><p>. 
ef40: 20 5e 5b 63 6f 6d 6d 6f 6e 2d 74 61 62 6c 65 2d   ^[common-table-
ef50: 65 78 70 72 65 73 73 69 6f 6e 7c 43 6f 6d 6d 6f  expression|Commo
ef60: 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
ef70: 6f 6e 5d 20 61 72 65 20 6e 6f 74 20 73 75 70 70  on] are not supp
ef80: 6f 72 74 65 64 20 66 6f 72 0a 20 20 73 74 61 74  orted for.  stat
ef90: 65 6d 65 6e 74 73 20 69 6e 73 69 64 65 20 6f 66  ements inside of
efa0: 20 74 72 69 67 67 65 72 73 2e 0a 20 20 3c 2f 70   triggers..  </p
efb0: 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 74  ></li>.</ul>..<t
efc0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69  cl>hd_fragment i
efd0: 6e 73 74 65 61 64 5f 6f 66 5f 74 72 69 67 67 65  nstead_of_trigge
efe0: 72 20 7b 49 4e 53 54 45 41 44 20 4f 46 7d 20 7b  r {INSTEAD OF} {
eff0: 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67  INSTEAD OF trigg
f000: 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 49 4e  er}</tcl>.<h3>IN
f010: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
f020: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 72 69 67  s</h3>..<p>^Trig
f030: 67 65 72 73 20 6d 61 79 20 62 65 20 63 72 65 61  gers may be crea
f040: 74 65 64 20 6f 6e 20 5b 76 69 65 77 73 5d 2c 20  ted on [views], 
f050: 61 73 20 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e  as well as ordin
f060: 61 72 79 20 74 61 62 6c 65 73 2c 20 62 79 0a 73  ary tables, by.s
f070: 70 65 63 69 66 79 69 6e 67 20 49 4e 53 54 45 41  pecifying INSTEA
f080: 44 20 4f 46 20 69 6e 20 74 68 65 20 43 52 45 41  D OF in the CREA
f090: 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65  TE TRIGGER state
f0a0: 6d 65 6e 74 2e 20 0a 5e 49 66 20 6f 6e 65 20 6f  ment. .^If one o
f0b0: 72 20 6d 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54  r more ON INSERT
f0c0: 2c 20 4f 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f  , ON DELETE.or O
f0d0: 4e 20 55 50 44 41 54 45 20 74 72 69 67 67 65 72  N UPDATE trigger
f0e0: 73 20 61 72 65 20 64 65 66 69 6e 65 64 20 6f 6e  s are defined on
f0f0: 20 61 20 76 69 65 77 2c 20 74 68 65 6e 20 69 74   a view, then it
f100: 20 69 73 20 6e 6f 74 20 61 6e 0a 65 72 72 6f 72   is not an.error
f110: 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e 20 49   to execute an I
f120: 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72  NSERT, DELETE or
f130: 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
f140: 74 20 6f 6e 20 74 68 65 20 76 69 65 77 2c 20 0a  t on the view, .
f150: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 5e  respectively.  ^
f160: 49 6e 73 74 65 61 64 2c 0a 65 78 65 63 75 74 69  Instead,.executi
f170: 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  ng an INSERT, DE
f180: 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
f190: 6e 20 74 68 65 20 76 69 65 77 20 63 61 75 73 65  n the view cause
f1a0: 73 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  s the associated
f1b0: 0a 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72  .triggers to fir
f1c0: 65 2e 20 5e 54 68 65 20 72 65 61 6c 20 74 61 62  e. ^The real tab
f1d0: 6c 65 73 20 75 6e 64 65 72 6c 79 69 6e 67 20 74  les underlying t
f1e0: 68 65 20 76 69 65 77 20 61 72 65 20 6e 6f 74 20  he view are not 
f1f0: 6d 6f 64 69 66 69 65 64 0a 28 65 78 63 65 70 74  modified.(except
f200: 20 70 6f 73 73 69 62 6c 79 20 65 78 70 6c 69 63   possibly explic
f210: 69 74 6c 79 2c 20 62 79 20 61 20 74 72 69 67 67  itly, by a trigg
f220: 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e  er program).</p>
f230: 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
f240: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61  the [sqlite3_cha
f250: 6e 67 65 73 28 29 5d 20 61 6e 64 20 5b 73 71 6c  nges()] and [sql
f260: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
f270: 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73  es()] interfaces
f280: 0a 64 6f 20 6e 6f 74 20 63 6f 75 6e 74 20 49 4e  .do not count IN
f290: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
f2a0: 20 66 69 72 69 6e 67 73 2c 20 62 75 74 20 74 68   firings, but th
f2b0: 65 0a 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73  e.[count_changes
f2c0: 20 70 72 61 67 6d 61 5d 20 64 6f 65 73 20 63 6f   pragma] does co
f2d0: 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74  unt INSTEAD OF t
f2e0: 72 69 67 67 65 72 20 66 69 72 69 6e 67 2e 3c 2f  rigger firing.</
f2f0: 70 3e 0a 0a 3c 68 33 3e 53 6f 6d 65 20 45 78 61  p>..<h3>Some Exa
f300: 6d 70 6c 65 20 54 72 69 67 67 65 72 73 3c 2f 68  mple Triggers</h
f310: 33 3e 0a 0a 3c 70 3e 5e 28 41 73 73 75 6d 69 6e  3>..<p>^(Assumin
f320: 67 20 74 68 61 74 20 63 75 73 74 6f 6d 65 72 20  g that customer 
f330: 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72  records are stor
f340: 65 64 20 69 6e 20 74 68 65 20 22 63 75 73 74 6f  ed in the "custo
f350: 6d 65 72 73 22 20 74 61 62 6c 65 2c 20 61 6e 64  mers" table, and
f360: 0a 74 68 61 74 20 6f 72 64 65 72 20 72 65 63 6f  .that order reco
f370: 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  rds are stored i
f380: 6e 20 74 68 65 20 22 6f 72 64 65 72 73 22 20 74  n the "orders" t
f390: 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  able, the follow
f3a0: 69 6e 67 0a 55 50 44 41 54 45 20 74 72 69 67 67  ing.UPDATE trigg
f3b0: 65 72 0a 65 6e 73 75 72 65 73 20 74 68 61 74 20  er.ensures that 
f3c0: 61 6c 6c 20 61 73 73 6f 63 69 61 74 65 64 20 6f  all associated o
f3d0: 72 64 65 72 73 20 61 72 65 20 72 65 64 69 72 65  rders are redire
f3e0: 63 74 65 64 20 77 68 65 6e 20 61 20 63 75 73 74  cted when a cust
f3f0: 6f 6d 65 72 20 63 68 61 6e 67 65 73 0a 68 69 73  omer changes.his
f400: 20 6f 72 20 68 65 72 20 61 64 64 72 65 73 73 3a   or her address:
f410: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70  </p>..<tcl>Examp
f420: 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 52 49 47  le {.CREATE TRIG
f430: 47 45 52 20 75 70 64 61 74 65 5f 63 75 73 74 6f  GER update_custo
f440: 6d 65 72 5f 61 64 64 72 65 73 73 20 55 50 44 41  mer_address UPDA
f450: 54 45 20 4f 46 20 61 64 64 72 65 73 73 20 4f 4e  TE OF address ON
f460: 20 63 75 73 74 6f 6d 65 72 73 20 0a 20 20 42 45   customers .  BE
f470: 47 49 4e 0a 20 20 20 20 55 50 44 41 54 45 20 6f  GIN.    UPDATE o
f480: 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73  rders SET addres
f490: 73 20 3d 20 6e 65 77 2e 61 64 64 72 65 73 73 20  s = new.address 
f4a0: 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e  WHERE customer_n
f4b0: 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a  ame = old.name;.
f4c0: 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a    END;.}</tcl>..
f4d0: 3c 70 3e 57 69 74 68 20 74 68 69 73 20 74 72 69  <p>With this tri
f4e0: 67 67 65 72 20 69 6e 73 74 61 6c 6c 65 64 2c 20  gger installed, 
f4f0: 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 73 74  executing the st
f500: 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74  atement:</p>..<t
f510: 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44  cl>Example {.UPD
f520: 41 54 45 20 63 75 73 74 6f 6d 65 72 73 20 53 45  ATE customers SE
f530: 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d  T address = '1 M
f540: 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20 6e  ain St.' WHERE n
f550: 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65  ame = 'Jack Jone
f560: 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  s';.}</tcl>..<p>
f570: 63 61 75 73 65 73 20 74 68 65 20 66 6f 6c 6c 6f  causes the follo
f580: 77 69 6e 67 20 74 6f 20 62 65 20 61 75 74 6f 6d  wing to be autom
f590: 61 74 69 63 61 6c 6c 79 20 65 78 65 63 75 74 65  atically execute
f5a0: 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61  d:</p>..<tcl>Exa
f5b0: 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f 72  mple {.UPDATE or
f5c0: 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73  ders SET address
f5d0: 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20   = '1 Main St.' 
f5e0: 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e  WHERE customer_n
f5f0: 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65  ame = 'Jack Jone
f600: 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c  s';.}</tcl>)^..<
f610: 70 3e 46 6f 72 20 61 6e 20 65 78 61 6d 70 6c 65  p>For an example
f620: 20 6f 66 20 61 6e 20 49 4e 53 54 45 41 44 20 4f   of an INSTEAD O
f630: 46 20 74 72 69 67 67 65 72 2c 20 63 6f 6e 73 69  F trigger, consi
f640: 64 65 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  der the followin
f650: 67 20 73 63 68 65 6d 61 3a 0a 0a 3c 74 63 6c 3e  g schema:..<tcl>
f660: 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54 45  Example {.CREATE
f670: 20 54 41 42 4c 45 20 63 75 73 74 6f 6d 65 72 28   TABLE customer(
f680: 0a 20 20 63 75 73 74 5f 69 64 20 49 4e 54 45 47  .  cust_id INTEG
f690: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
f6a0: 20 20 63 75 73 74 5f 6e 61 6d 65 20 54 45 58 54    cust_name TEXT
f6b0: 2c 0a 20 20 63 75 73 74 5f 61 64 64 72 20 54 45  ,.  cust_addr TE
f6c0: 58 54 0a 29 3b 0a 43 52 45 41 54 45 20 56 49 45  XT.);.CREATE VIE
f6d0: 57 20 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65  W customer_addre
f6e0: 73 73 20 41 53 0a 20 20 20 53 45 4c 45 43 54 20  ss AS.   SELECT 
f6f0: 63 75 73 74 5f 69 64 2c 20 63 75 73 74 5f 61 64  cust_id, cust_ad
f700: 64 72 20 46 52 4f 4d 20 63 75 73 74 6f 6d 65 72  dr FROM customer
f710: 3b 0a 43 52 45 41 54 45 20 54 52 49 47 47 45 52  ;.CREATE TRIGGER
f720: 20 63 75 73 74 5f 61 64 64 72 5f 63 68 6e 67 0a   cust_addr_chng.
f730: 49 4e 53 54 45 41 44 20 4f 46 20 55 50 44 41 54  INSTEAD OF UPDAT
f740: 45 20 4f 46 20 63 75 73 74 5f 61 64 64 72 20 4f  E OF cust_addr O
f750: 4e 20 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65  N customer_addre
f760: 73 73 0a 42 45 47 49 4e 0a 20 20 55 50 44 41 54  ss.BEGIN.  UPDAT
f770: 45 20 63 75 73 74 6f 6d 65 72 20 53 45 54 20 63  E customer SET c
f780: 75 73 74 5f 61 64 64 72 3d 4e 45 57 2e 63 75 73  ust_addr=NEW.cus
f790: 74 5f 61 64 64 72 0a 20 20 20 57 48 45 52 45 20  t_addr.   WHERE 
f7a0: 63 75 73 74 5f 69 64 3d 4e 45 57 2e 63 75 73 74  cust_id=NEW.cust
f7b0: 5f 69 64 3b 0a 45 4e 44 3b 0a 7d 3c 2f 74 63 6c  _id;.END;.}</tcl
f7c0: 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68 65 20 73  >..<p>With the s
f7d0: 63 68 65 6d 61 20 61 62 6f 76 65 2c 20 61 20 73  chema above, a s
f7e0: 74 61 74 65 6d 65 6e 74 20 6f 66 20 74 68 65 20  tatement of the 
f7f0: 66 6f 72 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  form:</p>..<tcl>
f800: 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45  Example {.UPDATE
f810: 20 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73   customer_addres
f820: 73 20 53 45 54 20 63 75 73 74 5f 61 64 64 72 3d  s SET cust_addr=
f830: 24 6e 65 77 5f 61 64 64 72 65 73 73 20 57 48 45  $new_address WHE
f840: 52 45 20 63 75 73 74 5f 69 64 3d 24 63 75 73 74  RE cust_id=$cust
f850: 5f 69 64 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  _id;.}</tcl>..<p
f860: 3e 43 61 75 73 65 73 20 74 68 65 20 63 75 73 74  >Causes the cust
f870: 6f 6d 65 72 2e 63 75 73 74 5f 61 64 64 72 20 66  omer.cust_addr f
f880: 69 65 6c 64 20 74 6f 20 62 65 20 75 70 64 61 74  ield to be updat
f890: 65 64 20 66 6f 72 20 61 20 73 70 65 63 69 66 69  ed for a specifi
f8a0: 63 0a 63 75 73 74 6f 6d 65 72 20 65 6e 74 72 79  c.customer entry
f8b0: 20 74 68 61 74 20 68 61 73 20 63 75 73 74 6f 6d   that has custom
f8c0: 65 72 2e 63 75 73 74 5f 69 64 20 65 71 75 61 6c  er.cust_id equal
f8d0: 20 74 6f 20 74 68 65 20 24 63 75 73 74 5f 69 64   to the $cust_id
f8e0: 20 70 61 72 61 6d 65 74 65 72 2e 0a 4e 6f 74 65   parameter..Note
f8f0: 20 68 6f 77 20 74 68 65 20 76 61 6c 75 65 73 20   how the values 
f900: 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20  assigned to the 
f910: 76 69 65 77 20 61 72 65 20 6d 61 64 65 20 61 76  view are made av
f920: 61 69 6c 61 62 6c 65 20 61 73 20 66 69 65 6c 64  ailable as field
f930: 0a 69 6e 20 74 68 65 20 73 70 65 63 69 61 6c 20  .in the special 
f940: 22 4e 45 57 22 20 74 61 62 6c 65 20 77 69 74 68  "NEW" table with
f950: 69 6e 20 74 68 65 20 74 72 69 67 67 65 72 20 62  in the trigger b
f960: 6f 64 79 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ody.</p>..<tcl>h
f970: 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 64 65 66  d_fragment undef
f980: 5f 62 65 66 6f 72 65 20 7b 75 6e 64 65 66 69 6e  _before {undefin
f990: 65 64 20 42 45 46 4f 52 45 20 74 72 69 67 67 65  ed BEFORE trigge
f9a0: 72 20 62 65 68 61 76 69 6f 72 7d 3c 2f 74 63 6c  r behavior}</tcl
f9b0: 3e 0a 3c 68 33 3e 43 61 75 74 69 6f 6e 73 20 4f  >.<h3>Cautions O
f9c0: 6e 20 54 68 65 20 55 73 65 20 4f 66 20 42 45 46  n The Use Of BEF
f9d0: 4f 52 45 20 74 72 69 67 67 65 72 73 3c 2f 68 33  ORE triggers</h3
f9e0: 3e 0a 0a 3c 70 3e 49 66 20 61 20 42 45 46 4f 52  >..<p>If a BEFOR
f9f0: 45 20 55 50 44 41 54 45 20 6f 72 20 42 45 46 4f  E UPDATE or BEFO
fa00: 52 45 20 44 45 4c 45 54 45 20 74 72 69 67 67 65  RE DELETE trigge
fa10: 72 20 6d 6f 64 69 66 69 65 73 20 6f 72 20 64 65  r modifies or de
fa20: 6c 65 74 65 73 20 61 20 72 6f 77 0a 74 68 61 74  letes a row.that
fa30: 20 77 61 73 20 74 6f 20 68 61 76 65 20 62 65 65   was to have bee
fa40: 6e 20 75 70 64 61 74 65 64 20 6f 72 20 64 65 6c  n updated or del
fa50: 65 74 65 64 2c 20 74 68 65 6e 20 74 68 65 20 72  eted, then the r
fa60: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62  esult of the sub
fa70: 73 65 71 75 65 6e 74 0a 75 70 64 61 74 65 20 6f  sequent.update o
fa80: 72 20 64 65 6c 65 74 65 20 6f 70 65 72 61 74 69  r delete operati
fa90: 6f 6e 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  on is undefined.
faa0: 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 69    Furthermore, i
fab0: 66 20 61 20 42 45 46 4f 52 45 20 74 72 69 67 67  f a BEFORE trigg
fac0: 65 72 0a 6d 6f 64 69 66 69 65 73 20 6f 72 20 64  er.modifies or d
fad0: 65 6c 65 74 65 73 20 61 20 72 6f 77 2c 20 74 68  eletes a row, th
fae0: 65 6e 20 69 74 20 69 73 20 75 6e 64 65 66 69 6e  en it is undefin
faf0: 65 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ed whether or no
fb00: 74 20 41 46 54 45 52 20 74 72 69 67 67 65 72 73  t AFTER triggers
fb10: 0a 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65  .that would have
fb20: 20 6f 74 68 65 72 77 69 73 65 20 72 75 6e 20 6f   otherwise run o
fb30: 6e 20 74 68 6f 73 65 20 72 6f 77 73 20 77 69 6c  n those rows wil
fb40: 6c 20 69 6e 20 66 61 63 74 20 72 75 6e 2e 0a 3c  l in fact run..<
fb50: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c 75  /p>..<p>The valu
fb60: 65 20 6f 66 20 4e 45 57 2e 72 6f 77 69 64 20 69  e of NEW.rowid i
fb70: 73 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 20 61  s undefined in a
fb80: 20 42 45 46 4f 52 45 20 49 4e 53 45 52 54 20 74   BEFORE INSERT t
fb90: 72 69 67 67 65 72 20 69 6e 20 77 68 69 63 68 0a  rigger in which.
fba0: 74 68 65 20 72 6f 77 69 64 20 69 73 20 6e 6f 74  the rowid is not
fbb0: 20 65 78 70 6c 69 63 69 74 6c 79 20 73 65 74 20   explicitly set 
fbc0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 3c 2f  to an integer.</
fbd0: 70 3e 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20 6f  p>..<p>Because o
fbe0: 66 20 74 68 65 20 62 65 68 61 76 69 6f 72 73 20  f the behaviors 
fbf0: 64 65 73 63 72 69 62 65 64 20 61 62 6f 76 65 2c  described above,
fc00: 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65   programmers are
fc10: 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 0a 70   encouraged to.p
fc20: 72 65 66 65 72 20 41 46 54 45 52 20 74 72 69 67  refer AFTER trig
fc30: 67 65 72 73 20 6f 76 65 72 20 42 45 46 4f 52 45  gers over BEFORE
fc40: 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a   triggers.</p>..
fc50: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
fc60: 20 72 61 69 73 65 20 7b 52 41 49 53 45 20 66 75   raise {RAISE fu
fc70: 6e 63 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68  nction}</tcl>.<h
fc80: 33 3e 54 68 65 20 52 41 49 53 45 28 29 20 66 75  3>The RAISE() fu
fc90: 6e 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e  nction</h3>..<p>
fca0: 5e 28 41 20 73 70 65 63 69 61 6c 20 53 51 4c 20  ^(A special SQL 
fcb0: 66 75 6e 63 74 69 6f 6e 20 52 41 49 53 45 28 29  function RAISE()
fcc0: 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 69 74   may be used wit
fcd0: 68 69 6e 20 61 20 74 72 69 67 67 65 72 2d 70 72  hin a trigger-pr
fce0: 6f 67 72 61 6d 2c 29 5e 0a 77 69 74 68 20 74 68  ogram,)^.with th
fcf0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74  e following synt
fd00: 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63 6c 3e 42 75  ax</p> ..<tcl>Bu
fd10: 62 62 6c 65 44 69 61 67 72 61 6d 20 72 61 69 73  bbleDiagram rais
fd20: 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f 74 63 6c 3e  e-function</tcl>
fd30: 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6f 6e 65 20  ..<p>^(When one 
fd40: 6f 66 20 52 41 49 53 45 28 52 4f 4c 4c 42 41 43  of RAISE(ROLLBAC
fd50: 4b 2c 2e 2e 2e 29 2c 20 52 41 49 53 45 28 41 42  K,...), RAISE(AB
fd60: 4f 52 54 2c 2e 2e 2e 29 20 6f 72 20 52 41 49 53  ORT,...) or RAIS
fd70: 45 28 46 41 49 4c 2c 2e 2e 2e 29 0a 69 73 20 63  E(FAIL,...).is c
fd80: 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 72 69  alled during tri
fd90: 67 67 65 72 2d 70 72 6f 67 72 61 6d 0a 65 78 65  gger-program.exe
fda0: 63 75 74 69 6f 6e 2c 20 74 68 65 20 73 70 65 63  cution, the spec
fdb0: 69 66 69 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49  ified [ON CONFLI
fdc0: 43 54 5d 20 70 72 6f 63 65 73 73 69 6e 67 20 69  CT] processing i
fdd0: 73 20 70 65 72 66 6f 72 6d 65 64 0a 74 68 65 20  s performed.the 
fde0: 63 75 72 72 65 6e 74 20 71 75 65 72 79 20 74 65  current query te
fdf0: 72 6d 69 6e 61 74 65 73 2e 29 5e 0a 41 6e 20 65  rminates.)^.An e
fe00: 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 5b 53 51  rror code of [SQ
fe10: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5d  LITE_CONSTRAINT]
fe20: 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
fe30: 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2c  the application,
fe40: 0a 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 65 20  .along with the 
fe50: 73 70 65 63 69 66 69 65 64 20 65 72 72 6f 72 20  specified error 
fe60: 6d 65 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70  message.</p>..<p
fe70: 3e 5e 57 68 65 6e 20 52 41 49 53 45 28 49 47 4e  >^When RAISE(IGN
fe80: 4f 52 45 29 20 69 73 20 63 61 6c 6c 65 64 2c 20  ORE) is called, 
fe90: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  the remainder of
fea0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 69   the current tri
feb0: 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 0a 74 68  gger program,.th
fec0: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  e statement that
fed0: 20 63 61 75 73 65 64 20 74 68 65 20 74 72 69 67   caused the trig
fee0: 67 65 72 20 70 72 6f 67 72 61 6d 20 74 6f 20 65  ger program to e
fef0: 78 65 63 75 74 65 20 61 6e 64 20 61 6e 79 20 73  xecute and any s
ff00: 75 62 73 65 71 75 65 6e 74 0a 74 72 69 67 67 65  ubsequent.trigge
ff10: 72 20 70 72 6f 67 72 61 6d 73 20 74 68 61 74 20  r programs that 
ff20: 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
ff30: 65 78 65 63 75 74 65 64 20 61 72 65 20 61 62 61  executed are aba
ff40: 6e 64 6f 6e 65 64 2e 20 5e 4e 6f 20 64 61 74 61  ndoned. ^No data
ff50: 62 61 73 65 0a 63 68 61 6e 67 65 73 20 61 72 65  base.changes are
ff60: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e   rolled back.  ^
ff70: 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
ff80: 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
ff90: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
ffa0: 0a 74 6f 20 65 78 65 63 75 74 65 20 69 73 20 69  .to execute is i
ffb0: 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20 61 20  tself part of a 
ffc0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c  trigger program,
ffd0: 20 74 68 65 6e 20 74 68 61 74 20 74 72 69 67 67   then that trigg
ffe0: 65 72 20 70 72 6f 67 72 61 6d 0a 72 65 73 75 6d  er program.resum
fff0: 65 73 20 65 78 65 63 75 74 69 6f 6e 20 61 74 20  es execution at 
10000 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
10010 20 74 68 65 20 6e 65 78 74 20 73 74 65 70 2e 0a   the next step..
10020 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
10030 61 67 6d 65 6e 74 20 74 65 6d 70 74 72 69 67 20  agment temptrig 
10040 7b 54 45 4d 50 20 74 72 69 67 67 65 72 73 20 6f  {TEMP triggers o
10050 6e 20 6e 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65  n non-TEMP table
10060 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 45 4d  s}</tcl>.<h3>TEM
10070 50 20 54 72 69 67 67 65 72 73 20 6f 6e 20 4e 6f  P Triggers on No
10080 6e 2d 54 45 4d 50 20 54 61 62 6c 65 73 3c 2f 68  n-TEMP Tables</h
10090 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 72 69 67 67  3>..<p>^(A trigg
100a0 65 72 20 6e 6f 72 6d 61 6c 6c 79 20 65 78 69 73  er normally exis
100b0 74 73 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64  ts in the same d
100c0 61 74 61 62 61 73 65 20 61 73 20 74 68 65 20 74  atabase as the t
100d0 61 62 6c 65 20 6e 61 6d 65 64 0a 61 66 74 65 72  able named.after
100e0 20 74 68 65 20 22 4f 4e 22 20 6b 65 79 77 6f 72   the "ON" keywor
100f0 64 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20  d in the CREATE 
10100 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e  TRIGGER statemen
10110 74 2e 20 20 45 78 63 65 70 74 2c 20 69 74 20 69  t.  Except, it i
10120 73 0a 70 6f 73 73 69 62 6c 65 20 74 6f 20 63 72  s.possible to cr
10130 65 61 74 65 20 61 20 54 45 4d 50 20 54 52 49 47  eate a TEMP TRIG
10140 47 45 52 20 6f 6e 20 61 20 74 61 62 6c 65 20 69  GER on a table i
10150 6e 20 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61  n another databa
10160 73 65 2e 29 5e 20 20 0a 53 75 63 68 20 61 20 74  se.)^  .Such a t
10170 72 69 67 67 65 72 20 77 69 6c 6c 20 6f 6e 6c 79  rigger will only
10180 20 66 69 72 65 20 77 68 65 6e 20 63 68 61 6e 67   fire when chang
10190 65 73 0a 61 72 65 20 6d 61 64 65 20 74 6f 20 74  es.are made to t
101a0 68 65 20 74 61 72 67 65 74 20 74 61 62 6c 65 20  he target table 
101b0 62 79 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  by the applicati
101c0 6f 6e 20 74 68 61 74 20 64 65 66 69 6e 65 64 20  on that defined 
101d0 74 68 65 20 74 72 69 67 67 65 72 2e 0a 4f 74 68  the trigger..Oth
101e0 65 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  er applications 
101f0 74 68 61 74 20 6d 6f 64 69 66 79 20 74 68 65 20  that modify the 
10200 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f  database will no
10210 74 20 62 65 20 61 62 6c 65 20 74 6f 20 73 65 65  t be able to see
10220 20 74 68 65 0a 54 45 4d 50 20 74 72 69 67 67 65   the.TEMP trigge
10230 72 20 61 6e 64 20 68 65 6e 63 65 20 63 61 6e 6e  r and hence cann
10240 6f 74 20 72 75 6e 20 74 68 65 20 74 72 69 67 67  ot run the trigg
10250 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e  er.</p>..<p>When
10260 20 64 65 66 69 6e 69 6e 67 20 61 20 54 45 4d 50   defining a TEMP
10270 20 74 72 69 67 67 65 72 20 6f 6e 20 61 20 6e 6f   trigger on a no
10280 6e 2d 54 45 4d 50 20 74 61 62 6c 65 2c 20 69 74  n-TEMP table, it
10290 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
102a0 0a 73 70 65 63 69 66 79 20 74 68 65 20 64 61 74  .specify the dat
102b0 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
102c0 65 20 6e 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65  e non-TEMP table
102d0 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a  .  For example,.
102e0 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
102f0 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 74 20 69   statement, it i
10300 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
10310 61 79 20 22 6d 61 69 6e 2e 74 61 62 31 22 20 69  ay "main.tab1" i
10320 6e 73 74 65 61 64 0a 6f 66 20 6a 75 73 74 20 22  nstead.of just "
10330 74 61 62 31 22 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  tab1":</p>..<blo
10340 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
10350 45 41 54 45 20 54 45 4d 50 20 54 52 49 47 47 45  EATE TEMP TRIGGE
10360 52 20 65 78 31 20 41 46 54 45 52 20 49 4e 53 45  R ex1 AFTER INSE
10370 52 54 20 4f 4e 20 3c 62 3e 6d 61 69 6e 2e 3c 2f  RT ON <b>main.</
10380 62 3e 74 61 62 31 20 42 45 47 49 4e 20 2e 2e 2e  b>tab1 BEGIN ...
10390 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
103a0 6f 74 65 3e 0a 0a 3c 70 3e 46 61 69 6c 75 72 65  ote>..<p>Failure
103b0 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65 20   to specify the 
103c0 73 63 68 65 6d 61 20 6e 61 6d 65 20 6f 6e 20 74  schema name on t
103d0 68 65 20 74 61 72 67 65 74 20 74 61 62 6c 65 20  he target table 
103e0 63 6f 75 6c 64 20 72 65 73 75 6c 74 0a 69 6e 20  could result.in 
103f0 74 68 65 20 54 45 4d 50 20 74 72 69 67 67 65 72  the TEMP trigger
10400 20 62 65 69 6e 67 20 72 65 61 74 74 61 63 68 65   being reattache
10410 64 20 74 6f 20 61 20 74 61 62 6c 65 20 77 69 74  d to a table wit
10420 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  h the same name 
10430 69 6e 0a 61 6e 6f 74 68 65 72 20 64 61 74 61 62  in.another datab
10440 61 73 65 20 77 68 65 6e 65 76 65 72 20 61 6e 79  ase whenever any
10450 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 20 6f   schema change o
10460 63 63 75 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ccurs.</p>..<tcl
10470 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
10480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
104a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
104b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
104c0 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54  #.Section {CREAT
104d0 45 20 56 49 45 57 7d 20 7b 63 72 65 61 74 65 76  E VIEW} {createv
104e0 69 65 77 7d 20 7b 7b 43 52 45 41 54 45 20 56 49  iew} {{CREATE VI
104f0 45 57 7d 20 76 69 65 77 20 56 49 45 57 20 2a 76  EW} view VIEW *v
10500 69 65 77 73 7d 0a 0a 52 65 63 75 72 73 69 76 65  iews}..Recursive
10510 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72  BubbleDiagram cr
10520 65 61 74 65 2d 76 69 65 77 2d 73 74 6d 74 0a 3c  eate-view-stmt.<
10530 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43  /tcl>..<p>^The C
10540 52 45 41 54 45 20 56 49 45 57 20 63 6f 6d 6d 61  REATE VIEW comma
10550 6e 64 20 61 73 73 69 67 6e 73 20 61 20 6e 61 6d  nd assigns a nam
10560 65 20 74 6f 20 61 20 70 72 65 2d 70 61 63 6b 61  e to a pre-packa
10570 67 65 64 20 0a 5b 53 45 4c 45 43 54 5d 20 73 74  ged .[SELECT] st
10580 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f 6e 63 65 20  atement. .^Once 
10590 74 68 65 20 76 69 65 77 20 69 73 20 63 72 65 61  the view is crea
105a0 74 65 64 2c 20 69 74 20 63 61 6e 20 62 65 20 75  ted, it can be u
105b0 73 65 64 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  sed in the FROM 
105c0 63 6c 61 75 73 65 0a 6f 66 20 61 6e 6f 74 68 65  clause.of anothe
105d0 72 20 5b 53 45 4c 45 43 54 5d 20 69 6e 20 70 6c  r [SELECT] in pl
105e0 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e  ace of a table n
105f0 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  ame..</p>..<p>^I
10600 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20  f the "TEMP" or 
10610 22 54 45 4d 50 4f 52 41 52 59 22 20 6b 65 79 77  "TEMPORARY" keyw
10620 6f 72 64 20 6f 63 63 75 72 73 20 69 6e 20 62 65  ord occurs in be
10630 74 77 65 65 6e 20 22 43 52 45 41 54 45 22 0a 61  tween "CREATE".a
10640 6e 64 20 22 56 49 45 57 22 20 74 68 65 6e 20 74  nd "VIEW" then t
10650 68 65 20 76 69 65 77 20 74 68 61 74 20 69 73 20  he view that is 
10660 63 72 65 61 74 65 64 20 69 73 20 6f 6e 6c 79 20  created is only 
10670 76 69 73 69 62 6c 65 20 74 6f 20 74 68 65 0a 5b  visible to the.[
10680 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
10690 69 6f 6e 5d 20 74 68 61 74 20 63 72 65 61 74 65  ion] that create
106a0 64 20 69 74 20 61 6e 64 20 69 73 20 61 75 74 6f  d it and is auto
106b0 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65  matically delete
106c0 64 20 77 68 65 6e 0a 74 68 65 20 64 61 74 61 62  d when.the datab
106d0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
106e0 73 20 63 6c 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c  s closed.</p>..<
106f0 70 3e 20 5e 49 66 20 61 20 3c 79 79 74 65 72 6d  p> ^If a <yyterm
10700 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79  >schema-name</yy
10710 74 65 72 6d 3e 20 69 73 20 73 70 65 63 69 66 69  term> is specifi
10720 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76 69 65  ed, then the vie
10730 77 20 0a 69 73 20 63 72 65 61 74 65 64 20 69 6e  w .is created in
10740 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64   the specified d
10750 61 74 61 62 61 73 65 2e 0a 5e 49 74 20 69 73 20  atabase..^It is 
10760 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63  an error to spec
10770 69 66 79 20 62 6f 74 68 20 61 20 3c 79 79 74 65  ify both a <yyte
10780 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f  rm>schema-name</
10790 79 79 74 65 72 6d 3e 0a 61 6e 64 20 74 68 65 20  yyterm>.and the 
107a0 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 6f 6e 20  TEMP keyword on 
107b0 61 20 56 49 45 57 2c 20 75 6e 6c 65 73 73 20 74  a VIEW, unless t
107c0 68 65 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d  he <yyterm>schem
107d0 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  a-name</yyterm> 
107e0 0a 69 73 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20  .is "temp"..^If 
107f0 6e 6f 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 69  no schema name i
10800 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64  s specified, and
10810 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72   the TEMP keywor
10820 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  d is not present
10830 2c 0a 74 68 65 20 56 49 45 57 20 69 73 20 63 72  ,.the VIEW is cr
10840 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69  eated in the mai
10850 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a  n database.</p>.
10860 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74 20  .<p>^You cannot 
10870 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52  [DELETE], [INSER
10880 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20  T], or [UPDATE] 
10890 61 20 76 69 65 77 2e 20 20 5e 56 69 65 77 73 20  a view.  ^Views 
108a0 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a 69  are read-only .i
108b0 6e 20 53 51 4c 69 74 65 2e 20 20 5e 48 6f 77 65  n SQLite.  ^Howe
108c0 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73  ver, in many cas
108d0 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20 61  es you can use a
108e0 6e 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20 74 72  n.[INSTEAD OF tr
108f0 69 67 67 65 72 5d 20 6f 6e 20 74 68 65 20 76 69  igger] on the vi
10900 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68  ew to accomplish
10910 20 0a 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67   .the same thing
10920 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20 72 65  .  ^Views are re
10930 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65 20  moved .with the 
10940 5b 44 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d 6d  [DROP VIEW] comm
10950 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  and.</p>..<p>^If
10960 20 61 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d   a <yyterm>colum
10970 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  n-name</yyterm> 
10980 6c 69 73 74 20 66 6f 6c 6c 6f 77 73 20 0a 74 68  list follows .th
10990 65 20 3c 79 79 74 65 72 6d 3e 76 69 65 77 2d 6e  e <yyterm>view-n
109a0 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 2c 20 74 68  ame</yyterm>, th
109b0 65 6e 20 74 68 61 74 20 6c 69 73 74 20 64 65 74  en that list det
109c0 65 72 6d 69 6e 65 73 0a 74 68 65 20 6e 61 6d 65  ermines.the name
109d0 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  s of the columns
109e0 20 66 6f 72 20 74 68 65 20 76 69 65 77 2e 20 20   for the view.  
109f0 5e 49 66 20 74 68 65 20 3c 79 79 74 65 72 6d 3e  ^If the <yyterm>
10a00 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74  column-name</yyt
10a10 65 72 6d 3e 0a 6c 69 73 74 20 69 73 20 6f 6d 69  erm>.list is omi
10a20 74 74 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e  tted, then the n
10a30 61 6d 65 73 20 6f 66 20 74 68 65 20 63 6f 6c 75  ames of the colu
10a40 6d 6e 73 20 69 6e 20 74 68 65 20 76 69 65 77 20  mns in the view 
10a50 61 72 65 20 64 65 72 69 76 65 64 0a 66 72 6f 6d  are derived.from
10a60 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68   the names of th
10a70 65 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c  e result-set col
10a80 75 6d 6e 73 20 69 6e 20 74 68 65 20 5b 73 65 6c  umns in the [sel
10a90 65 63 74 2d 73 74 6d 74 5d 2e 0a 54 68 65 20 75  ect-stmt]..The u
10aa0 73 65 20 6f 66 20 3c 79 79 74 65 72 6d 3e 63 6f  se of <yyterm>co
10ab0 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  lumn-name</yyter
10ac0 6d 3e 20 6c 69 73 74 20 69 73 20 72 65 63 6f 6d  m> list is recom
10ad0 6d 65 6e 64 65 64 2e 20 20 4f 72 2c 20 69 66 0a  mended.  Or, if.
10ae0 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e  <yyterm>column-n
10af0 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73  ame</yyterm> lis
10b00 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 68  t is omitted, th
10b10 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 63 6f  en the result.co
10b20 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 5b 53 45  lumns in the [SE
10b30 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20  LECT] statement 
10b40 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
10b50 20 76 69 65 77 20 73 68 6f 75 6c 64 20 68 61 76   view should hav
10b60 65 0a 77 65 6c 6c 2d 64 65 66 69 6e 65 64 20 6e  e.well-defined n
10b70 61 6d 65 73 20 75 73 69 6e 67 20 74 68 65 20 0a  ames using the .
10b80 22 5b 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 7c  "[result-column|
10b90 41 53 20 63 6f 6c 75 6d 6e 2d 61 6c 69 61 73 5d  AS column-alias]
10ba0 22 20 73 79 6e 74 61 78 2e 0a 53 51 4c 69 74 65  " syntax..SQLite
10bb0 20 61 6c 6c 6f 77 73 20 79 6f 75 20 74 6f 20 63   allows you to c
10bc0 72 65 61 74 65 20 76 69 65 77 73 20 74 68 61 74  reate views that
10bd0 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f 6d   depend on autom
10be0 61 74 69 63 61 6c 6c 79 20 0a 67 65 6e 65 72 61  atically .genera
10bf0 74 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ted column names
10c00 2c 20 62 75 74 20 79 6f 75 20 73 68 6f 75 6c 64  , but you should
10c10 20 61 76 6f 69 64 20 75 73 69 6e 67 20 74 68 65   avoid using the
10c20 6d 20 73 69 6e 63 65 20 74 68 65 20 0a 72 75 6c  m since the .rul
10c30 65 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  es used to gener
10c40 61 74 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ate column names
10c50 20 61 72 65 20 6e 6f 74 20 61 20 64 65 66 69 6e   are not a defin
10c60 65 64 20 70 61 72 74 20 6f 66 20 74 68 65 0a 69  ed part of the.i
10c70 6e 74 65 72 66 61 63 65 20 61 6e 64 20 6d 69 67  nterface and mig
10c80 68 74 20 63 68 61 6e 67 65 20 69 6e 20 66 75 74  ht change in fut
10c90 75 72 65 20 72 65 6c 65 61 73 65 73 20 6f 66 20  ure releases of 
10ca0 53 51 4c 69 74 65 2e 0a 0a 3c 70 3e 54 68 65 20  SQLite...<p>The 
10cb0 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e  <yyterm>column-n
10cc0 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73  ame</yyterm> lis
10cd0 74 20 73 79 6e 74 61 78 20 77 61 73 20 61 64 64  t syntax was add
10ce0 65 64 20 69 6e 0a 53 51 4c 69 74 65 20 76 65 72  ed in.SQLite ver
10cf0 73 69 6f 6e 73 20 33 2e 39 2e 30 20 28 5b 64 61  sions 3.9.0 ([da
10d00 74 65 6f 66 3a 33 2e 39 2e 30 5d 29 2e 0a 0a 3c  teof:3.9.0])...<
10d10 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
10d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d60 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45  ###.Section {CRE
10d70 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
10d80 45 7d 20 7b 63 72 65 61 74 65 76 74 61 62 7d 20  E} {createvtab} 
10d90 7b 7b 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  {{CREATE VIRTUAL
10da0 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73   TABLE}}..Recurs
10db0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
10dc0 20 63 72 65 61 74 65 2d 76 69 72 74 75 61 6c 2d   create-virtual-
10dd0 74 61 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c  table-stmt.</tcl
10de0 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c  >..<p>A [virtual
10df0 20 74 61 62 6c 65 5d 20 69 73 20 61 6e 20 69 6e   table] is an in
10e00 74 65 72 66 61 63 65 20 74 6f 20 61 6e 20 65 78  terface to an ex
10e10 74 65 72 6e 61 6c 20 73 74 6f 72 61 67 65 20 6f  ternal storage o
10e20 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 65 6e  r computation.en
10e30 67 69 6e 65 20 74 68 61 74 20 61 70 70 65 61 72  gine that appear
10e40 73 20 74 6f 20 62 65 20 61 20 74 61 62 6c 65 20  s to be a table 
10e50 62 75 74 20 64 6f 65 73 20 6e 6f 74 20 61 63 74  but does not act
10e60 75 61 6c 6c 79 20 73 74 6f 72 65 20 69 6e 66 6f  ually store info
10e70 72 6d 61 74 69 6f 6e 0a 69 6e 20 74 68 65 20 64  rmation.in the d
10e80 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70  atabase file.</p
10e90 3e 0a 0a 3c 70 3e 49 6e 20 67 65 6e 65 72 61 6c  >..<p>In general
10ea0 2c 20 79 6f 75 20 63 61 6e 20 64 6f 20 61 6e 79  , you can do any
10eb0 74 68 69 6e 67 20 77 69 74 68 20 61 20 5b 76 69  thing with a [vi
10ec0 72 74 75 61 6c 20 74 61 62 6c 65 5d 20 74 68 61  rtual table] tha
10ed0 74 20 63 61 6e 20 62 65 20 64 6f 6e 65 0a 77 69  t can be done.wi
10ee0 74 68 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  th an ordinary t
10ef0 61 62 6c 65 2c 20 65 78 63 65 70 74 20 74 68 61  able, except tha
10f00 74 20 5e 79 6f 75 20 63 61 6e 6e 6f 74 20 63 72  t ^you cannot cr
10f10 65 61 74 65 20 69 6e 64 69 63 65 73 20 6f 72 20  eate indices or 
10f20 74 72 69 67 67 65 72 73 20 6f 6e 20 61 0a 76 69  triggers on a.vi
10f30 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 53  rtual table.  ^S
10f40 6f 6d 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ome virtual tabl
10f50 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
10f60 73 20 6d 69 67 68 74 20 69 6d 70 6f 73 65 20 61  s might impose a
10f70 64 64 69 74 69 6f 6e 61 6c 0a 72 65 73 74 72 69  dditional.restri
10f80 63 74 69 6f 6e 73 2e 20 20 46 6f 72 20 65 78 61  ctions.  For exa
10f90 6d 70 6c 65 2c 20 6d 61 6e 79 20 76 69 72 74 75  mple, many virtu
10fa0 61 6c 20 74 61 62 6c 65 73 20 61 72 65 20 72 65  al tables are re
10fb0 61 64 2d 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70  ad-only.</p>..<p
10fc0 3e 54 68 65 20 3c 79 79 74 65 72 6d 3e 6d 6f 64  >The <yyterm>mod
10fd0 75 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ule-name</yyterm
10fe0 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  > is the name of
10ff0 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
11000 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20 76  implements.the v
11010 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e  irtual table.  ^
11020 54 68 65 20 3c 79 79 74 65 72 6d 3e 6d 6f 64 75  The <yyterm>modu
11030 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  le-name</yyterm>
11040 20 6d 75 73 74 20 62 65 20 72 65 67 69 73 74 65   must be registe
11050 72 65 64 20 77 69 74 68 0a 74 68 65 20 53 51 4c  red with.the SQL
11060 69 74 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ite database con
11070 6e 65 63 74 69 6f 6e 20 75 73 69 6e 67 0a 5b 73  nection using.[s
11080 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
11090 64 75 6c 65 28 29 5d 20 6f 72 20 5b 73 71 6c 69  dule()] or [sqli
110a0 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
110b0 65 5f 76 32 28 29 5d 0a 70 72 69 6f 72 20 74 6f  e_v2()].prior to
110c0 20 69 73 73 75 69 6e 67 20 74 68 65 20 43 52 45   issuing the CRE
110d0 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
110e0 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68  E statement..^Th
110f0 65 20 6d 6f 64 75 6c 65 20 74 61 6b 65 73 20 7a  e module takes z
11100 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d  ero or more comm
11110 61 2d 73 65 70 61 72 61 74 65 64 20 61 72 67 75  a-separated argu
11120 6d 65 6e 74 73 2e 0a 5e 54 68 65 20 61 72 67 75  ments..^The argu
11130 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6a 75 73  ments can be jus
11140 74 20 61 62 6f 75 74 20 61 6e 79 20 74 65 78 74  t about any text
11150 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 68   as long as it h
11160 61 73 20 62 61 6c 61 6e 63 65 64 0a 70 61 72 65  as balanced.pare
11170 6e 74 68 65 73 65 73 2e 20 20 54 68 65 20 61 72  ntheses.  The ar
11180 67 75 6d 65 6e 74 20 73 79 6e 74 61 78 20 69 73  gument syntax is
11190 20 73 75 66 66 69 63 69 65 6e 74 6c 79 20 67 65   sufficiently ge
111a0 6e 65 72 61 6c 20 74 68 61 74 20 74 68 65 0a 61  neral that the.a
111b0 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20  rguments can be 
111c0 6d 61 64 65 20 74 6f 20 61 70 70 65 61 72 20 61  made to appear a
111d0 73 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  s [column defini
111e0 74 69 6f 6e 73 5d 20 69 6e 20 61 20 74 72 61 64  tions] in a trad
111f0 69 74 69 6f 6e 61 6c 0a 5b 43 52 45 41 54 45 20  itional.[CREATE 
11200 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
11210 2e 20 20 0a 5e 53 51 4c 69 74 65 20 70 61 73 73  .  .^SQLite pass
11220 65 73 20 74 68 65 20 6d 6f 64 75 6c 65 20 61 72  es the module ar
11230 67 75 6d 65 6e 74 73 20 64 69 72 65 63 74 6c 79  guments directly
11240 0a 74 6f 20 74 68 65 20 5b 78 43 72 65 61 74 65  .to the [xCreate
11250 5d 20 61 6e 64 20 5b 78 43 6f 6e 6e 65 63 74 5d  ] and [xConnect]
11260 20 6d 65 74 68 6f 64 73 20 6f 66 20 74 68 65 20   methods of the 
11270 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
11280 61 74 69 6f 6e 0a 77 69 74 68 6f 75 74 20 61 6e  ation.without an
11290 79 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  y interpretation
112a0 2e 20 20 49 74 20 69 73 20 74 68 65 20 72 65 73  .  It is the res
112b0 70 6f 6e 73 69 62 69 6c 69 74 79 0a 6f 66 20 74  ponsibility.of t
112c0 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  he module implem
112d0 65 6e 74 61 74 69 6f 6e 20 74 6f 20 70 61 72 73  entation to pars
112e0 65 20 61 6e 64 20 69 6e 74 65 72 70 72 65 74 20  e and interpret 
112f0 69 74 73 20 6f 77 6e 20 61 72 67 75 6d 65 6e 74  its own argument
11300 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 76 69  s.</p>..<p>^A vi
11310 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 64  rtual table is d
11320 65 73 74 72 6f 79 65 64 20 75 73 69 6e 67 20 74  estroyed using t
11330 68 65 20 6f 72 64 69 6e 61 72 79 0a 5b 44 52 4f  he ordinary.[DRO
11340 50 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  P TABLE] stateme
11350 6e 74 2e 20 20 54 68 65 72 65 20 69 73 20 6e 6f  nt.  There is no
11360 0a 44 52 4f 50 20 56 49 52 54 55 41 4c 20 54 41  .DROP VIRTUAL TA
11370 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f  BLE statement.</
11380 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
11390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113d0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
113e0 20 44 45 4c 45 54 45 20 64 65 6c 65 74 65 20 7b   DELETE delete {
113f0 44 45 4c 45 54 45 20 2a 44 45 4c 45 54 45 73 7d  DELETE *DELETEs}
11400 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
11410 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d  eDiagram delete-
11420 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
11430 54 68 65 20 44 45 4c 45 54 45 20 63 6f 6d 6d 61  The DELETE comma
11440 6e 64 20 72 65 6d 6f 76 65 73 20 72 65 63 6f 72  nd removes recor
11450 64 73 20 66 72 6f 6d 20 74 68 65 20 74 61 62 6c  ds from the tabl
11460 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
11470 74 68 65 0a 20 20 20 5b 71 75 61 6c 69 66 69 65  the.   [qualifie
11480 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 5d 2e 0a 0a  d-table-name]...
11490 3c 70 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45  <p>^If the WHERE
114a0 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70   clause is not p
114b0 72 65 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f  resent, all reco
114c0 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  rds in the table
114d0 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20   are deleted..  
114e0 20 5e 49 66 20 61 20 57 48 45 52 45 20 63 6c 61   ^If a WHERE cla
114f0 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c  use is supplied,
11500 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65   then only those
11510 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
11520 74 68 65 0a 20 20 20 57 48 45 52 45 20 63 6c 61  the.   WHERE cla
11530 75 73 65 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70  use [boolean exp
11540 72 65 73 73 69 6f 6e 5d 20 69 73 20 74 72 75 65  ression] is true
11550 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20   are deleted..  
11560 20 5e 52 6f 77 73 20 66 6f 72 20 77 68 69 63 68   ^Rows for which
11570 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
11580 69 73 20 66 61 6c 73 65 20 6f 72 20 4e 55 4c 4c  is false or NULL
11590 20 61 72 65 20 72 65 74 61 69 6e 65 64 2e 0a 0a   are retained...
115a0 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73  <h3>Restrictions
115b0 20 6f 6e 20 44 45 4c 45 54 45 20 53 74 61 74 65   on DELETE State
115c0 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45  ments Within CRE
115d0 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e  ATE TRIGGER</h3>
115e0 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69  ..<p>The followi
115f0 6e 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  ng restrictions 
11600 61 70 70 6c 79 20 74 6f 20 44 45 4c 45 54 45 20  apply to DELETE 
11610 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
11620 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65  occur within the
11630 0a 20 20 20 62 6f 64 79 20 6f 66 20 61 20 5b 43  .   body of a [C
11640 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73  REATE TRIGGER] s
11650 74 61 74 65 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a  tatement:..<ul>.
11660 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 79    <li><p>^The <y
11670 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65  yterm>table-name
11680 3c 2f 79 79 74 65 72 6d 3e 20 73 70 65 63 69 66  </yyterm> specif
11690 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  ied as part of a
116a0 20 0a 20 20 20 20 44 45 4c 45 54 45 20 73 74 61   .    DELETE sta
116b0 74 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20  tement within.  
116c0 20 20 61 20 74 72 69 67 67 65 72 20 62 6f 64 79    a trigger body
116d0 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69   must be unquali
116e0 66 69 65 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65  fied.  ^(In othe
116f0 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20  r words, the.   
11700 20 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c   <i>schema-name<
11710 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66  /i><b>.</b> pref
11720 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  ix on the table 
11730 6e 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  name is not allo
11740 77 65 64 20 0a 20 20 20 20 77 69 74 68 69 6e 20  wed .    within 
11750 74 72 69 67 67 65 72 73 2e 29 5e 20 5e 49 66 20  triggers.)^ ^If 
11760 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69  the table to whi
11770 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69  ch the trigger i
11780 73 20 61 74 74 61 63 68 65 64 20 69 73 0a 20 20  s attached is.  
11790 20 20 6e 6f 74 20 69 6e 20 74 68 65 20 74 65 6d    not in the tem
117a0 70 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  p database, then
117b0 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
117c0 74 73 20 77 69 74 68 69 6e 20 74 68 65 20 74 72  ts within the tr
117d0 69 67 67 65 72 0a 20 20 20 20 62 6f 64 79 20 6d  igger.    body m
117e0 75 73 74 20 6f 70 65 72 61 74 65 20 6f 6e 20 74  ust operate on t
117f0 61 62 6c 65 73 20 77 69 74 68 69 6e 20 74 68 65  ables within the
11800 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
11810 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61  s it. ^If the ta
11820 62 6c 65 0a 20 20 20 20 74 6f 20 77 68 69 63 68  ble.    to which
11830 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20   the trigger is 
11840 61 74 74 61 63 68 65 64 20 69 73 20 69 6e 20 74  attached is in t
11850 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
11860 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20 20 75  , then the.    u
11870 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20  nqualified name 
11880 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
11890 6e 67 20 64 65 6c 65 74 65 64 20 69 73 20 72 65  ng deleted is re
118a0 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61  solved in the sa
118b0 6d 65 20 77 61 79 20 61 73 0a 20 20 20 20 69 74  me way as.    it
118c0 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65   is for a top-le
118d0 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20 28 62  vel statement (b
118e0 79 20 73 65 61 72 63 68 69 6e 67 20 66 69 72 73  y searching firs
118f0 74 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  t the TEMP datab
11900 61 73 65 2c 20 74 68 65 6e 0a 20 20 20 20 74 68  ase, then.    th
11910 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
11920 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65 72 20   then any other 
11930 64 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65  databases in the
11940 20 6f 72 64 65 72 20 74 68 65 79 20 77 65 72 65   order they were
11950 0a 20 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a  .    attached)..
11960 20 20 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54      .  <li><p>^T
11970 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e  he INDEXED BY an
11980 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  d NOT INDEXED cl
11990 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c  auses are not al
119a0 6c 6f 77 65 64 20 6f 6e 20 44 45 4c 45 54 45 0a  lowed on DELETE.
119b0 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77      statements w
119c0 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c  ithin triggers.<
119d0 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54  /p>..  <li><p>^T
119e0 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44  he LIMIT and ORD
119f0 45 52 20 42 59 20 63 6c 61 75 73 65 73 20 28 64  ER BY clauses (d
11a00 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77 29 20  escribed below) 
11a10 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20  are unsupported 
11a20 66 6f 72 0a 20 20 20 20 44 45 4c 45 54 45 20 73  for.    DELETE s
11a30 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
11a40 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 3c   triggers.</p>.<
11a50 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e  /ul>..<h3>Option
11a60 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44  al LIMIT and ORD
11a70 45 52 20 42 59 20 63 6c 61 75 73 65 73 3c 2f 68  ER BY clauses</h
11a80 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69  3>..<p>^(If SQLi
11a90 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
11aa0 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  ith the [SQLITE_
11ab0 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
11ac0 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70  LETE_LIMIT].comp
11ad0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c  ile-time option,
11ae0 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78   then the syntax
11af0 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
11b00 74 61 74 65 6d 65 6e 74 20 69 73 0a 65 78 74 65  tatement is.exte
11b10 6e 64 65 64 20 62 79 20 74 68 65 20 61 64 64 69  nded by the addi
11b20 74 69 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e 61 6c  tion of optional
11b30 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49   ORDER BY and LI
11b40 4d 49 54 20 63 6c 61 75 73 65 73 3a 29 5e 3c 2f  MIT clauses:)^</
11b50 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  p>..<tcl>BubbleD
11b60 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74  iagram delete-st
11b70 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e  mt-limited</tcl>
11b80 0a 0a 3c 70 3e 5e 49 66 20 61 20 44 45 4c 45 54  ..<p>^If a DELET
11b90 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  E statement has 
11ba0 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
11bb0 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
11bc0 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a  er of rows that.
11bd0 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20  will be deleted 
11be0 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c  is found by eval
11bf0 75 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d  uating the accom
11c00 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69  panying expressi
11c10 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69  on and casting.i
11c20 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
11c30 76 61 6c 75 65 2e 20 5e 49 66 20 74 68 65 20 72  value. ^If the r
11c40 65 73 75 6c 74 20 6f 66 20 74 68 65 20 65 76 61  esult of the eva
11c50 6c 75 61 74 69 6e 67 20 74 68 65 20 4c 49 4d 49  luating the LIMI
11c60 54 20 63 6c 61 75 73 65 0a 63 61 6e 6e 6f 74 20  T clause.cannot 
11c70 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f  be losslessly co
11c80 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
11c90 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69 74 20  teger value, it 
11ca0 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 41 20  is an error. ^A 
11cb0 0a 6e 65 67 61 74 69 76 65 20 4c 49 4d 49 54 20  .negative LIMIT 
11cc0 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72  value is interpr
11cd0 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69  eted as "no limi
11ce0 74 22 2e 20 5e 28 49 66 20 74 68 65 20 44 45 4c  t". ^(If the DEL
11cf0 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 0a 61  ETE statement .a
11d00 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45  lso has an OFFSE
11d10 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 69  T clause, then i
11d20 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65  t is similarly e
11d30 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73  valuated and cas
11d40 74 20 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20  t to an.integer 
11d50 76 61 6c 75 65 2e 20 41 67 61 69 6e 2c 20 69 74  value. Again, it
11d60 20 69 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20   is an error if 
11d70 74 68 65 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74  the value cannot
11d80 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63   be losslessly.c
11d90 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
11da0 6e 74 65 67 65 72 2e 29 5e 20 5e 49 66 20 74 68  nteger.)^ ^If th
11db0 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54  ere is no OFFSET
11dc0 20 63 6c 61 75 73 65 2c 20 6f 72 20 74 68 65 20   clause, or the 
11dd0 63 61 6c 63 75 6c 61 74 65 64 0a 69 6e 74 65 67  calculated.integ
11de0 65 72 20 76 61 6c 75 65 20 69 73 20 6e 65 67 61  er value is nega
11df0 74 69 76 65 2c 20 74 68 65 20 65 66 66 65 63 74  tive, the effect
11e00 69 76 65 20 4f 46 46 53 45 54 20 76 61 6c 75 65  ive OFFSET value
11e10 20 69 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 28   is zero...<p>^(
11e20 49 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  If the DELETE st
11e30 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f  atement has an O
11e40 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
11e50 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68  then all rows th
11e60 61 74 20 77 6f 75 6c 64 20 0a 62 65 20 64 65 6c  at would .be del
11e70 65 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65  eted in the abse
11e80 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  nce of the LIMIT
11e90 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74   clause are sort
11ea0 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ed according to 
11eb0 74 68 65 20 0a 4f 52 44 45 52 20 42 59 2e 20 54  the .ORDER BY. T
11ec0 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69  he first <i>M</i
11ed0 3e 20 72 6f 77 73 2c 20 77 68 65 72 65 20 3c 69  > rows, where <i
11ee0 3e 4d 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61  >M</i> is the va
11ef0 6c 75 65 20 66 6f 75 6e 64 20 62 79 0a 65 76 61  lue found by.eva
11f00 6c 75 61 74 69 6e 67 20 74 68 65 20 4f 46 46 53  luating the OFFS
11f10 45 54 20 63 6c 61 75 73 65 20 65 78 70 72 65 73  ET clause expres
11f20 73 69 6f 6e 2c 20 61 72 65 20 73 6b 69 70 70 65  sion, are skippe
11f30 64 2c 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f  d, and the follo
11f40 77 69 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e 2c 20  wing .<i>N</i>, 
11f50 77 68 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e 20 69  where <i>N</i> i
11f60 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
11f70 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
11f80 69 6f 6e 2c 20 61 72 65 20 64 65 6c 65 74 65 64  ion, are deleted
11f90 2e 29 5e 0a 5e 49 66 20 74 68 65 72 65 20 61 72  .)^.^If there ar
11fa0 65 20 6c 65 73 73 20 74 68 61 6e 20 3c 69 3e 4e  e less than <i>N
11fb0 3c 2f 69 3e 20 72 6f 77 73 20 72 65 6d 61 69 6e  </i> rows remain
11fc0 69 6e 67 20 61 66 74 65 72 20 74 61 6b 69 6e 67  ing after taking
11fd0 20 74 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75   the OFFSET clau
11fe0 73 65 0a 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2c  se.into account,
11ff0 20 6f 72 20 69 66 20 74 68 65 20 4c 49 4d 49 54   or if the LIMIT
12000 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65   clause evaluate
12010 64 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20  d to a negative 
12020 76 61 6c 75 65 2c 20 74 68 65 6e 20 61 6c 6c 0a  value, then all.
12030 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 61  remaining rows a
12040 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e  re deleted...<p>
12050 5e 49 66 20 74 68 65 20 44 45 4c 45 54 45 20 73  ^If the DELETE s
12060 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20  tatement has no 
12070 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
12080 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74   then all rows t
12090 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 64 65 6c  hat.would be del
120a0 65 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65  eted in the abse
120b0 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  nce of the LIMIT
120c0 20 63 6c 61 75 73 65 20 61 72 65 20 61 73 73 65   clause are asse
120d0 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69  mbled in an.arbi
120e0 74 72 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f  trary order befo
120f0 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20  re applying the 
12100 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54  LIMIT and OFFSET
12110 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65   clauses to dete
12120 72 6d 69 6e 65 20 0a 74 68 65 20 73 75 62 73 65  rmine .the subse
12130 74 20 74 68 61 74 20 61 72 65 20 61 63 74 75 61  t that are actua
12140 6c 6c 79 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70  lly deleted...<p
12150 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59 20  >^(The ORDER BY 
12160 63 6c 61 75 73 65 20 6f 6e 20 61 20 44 45 4c 45  clause on a DELE
12170 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  TE statement is 
12180 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74  used only to det
12190 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f 77  ermine which.row
121a0 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20 74 68  s fall within th
121b0 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72 64  e LIMIT. The ord
121c0 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73  er in which rows
121d0 20 61 72 65 20 64 65 6c 65 74 65 64 20 69 73 20   are deleted is 
121e0 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73  arbitrary.and is
121f0 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64 20   not influenced 
12200 62 79 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  by the ORDER BY 
12210 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e  clause.)^..<tcl>
12220 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 72 75 6e  hd_fragment trun
12230 63 61 74 65 6f 70 74 20 7b 74 72 75 6e 63 61 74  cateopt {truncat
12240 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 7d 3c  e optimization}<
12250 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 54 72  /tcl>.<h3>The Tr
12260 75 6e 63 61 74 65 20 4f 70 74 69 6d 69 7a 61 74  uncate Optimizat
12270 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68  ion</h3>..<p>^Wh
12280 65 6e 20 74 68 65 20 57 48 45 52 45 20 69 73 20  en the WHERE is 
12290 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20 44  omitted from a D
122a0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
122b0 61 6e 64 20 74 68 65 20 74 61 62 6c 65 0a 62 65  and the table.be
122c0 69 6e 67 20 64 65 6c 65 74 65 64 20 68 61 73 20  ing deleted has 
122d0 6e 6f 20 74 72 69 67 67 65 72 73 2c 0a 53 51 4c  no triggers,.SQL
122e0 69 74 65 20 75 73 65 73 20 61 6e 20 6f 70 74 69  ite uses an opti
122f0 6d 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72 61 73  mization to eras
12300 65 20 74 68 65 20 65 6e 74 69 72 65 20 74 61 62  e the entire tab
12310 6c 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74 68 6f  le content.witho
12320 75 74 20 68 61 76 69 6e 67 20 74 6f 20 76 69 73  ut having to vis
12330 69 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  it each row of t
12340 68 65 20 74 61 62 6c 65 20 69 6e 64 69 76 69 64  he table individ
12350 75 61 6c 6c 79 2e 0a 54 68 69 73 20 22 74 72 75  ually..This "tru
12360 6e 63 61 74 65 22 20 6f 70 74 69 6d 69 7a 61 74  ncate" optimizat
12370 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65 20 64 65  ion makes the de
12380 6c 65 74 65 20 72 75 6e 20 6d 75 63 68 20 66 61  lete run much fa
12390 73 74 65 72 2e 0a 50 72 69 6f 72 20 74 6f 20 53  ster..Prior to S
123a0 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33  QLite [version 3
123b0 2e 36 2e 35 5d 20 28 5b 64 61 74 65 6f 66 3a 33  .6.5] ([dateof:3
123c0 2e 36 2e 35 5d 29 2c 20 74 68 65 20 74 72 75 6e  .6.5]), the trun
123d0 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
123e0 6e 0a 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68 61  n.also meant tha
123f0 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  t the [sqlite3_c
12400 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b 73  hanges()] and.[s
12410 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
12420 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63  nges()] interfac
12430 65 73 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75 6e  es.and the [coun
12440 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61  t_changes pragma
12450 5d 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61  ].will not actua
12460 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 6e  lly return the n
12470 75 6d 62 65 72 20 6f 66 20 64 65 6c 65 74 65 64  umber of deleted
12480 20 72 6f 77 73 2e 20 20 0a 54 68 61 74 20 70 72   rows.  .That pr
12490 6f 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20 66  oblem has been f
124a0 69 78 65 64 20 61 73 20 6f 66 20 5b 76 65 72 73  ixed as of [vers
124b0 69 6f 6e 20 33 2e 36 2e 35 5d 20 28 5b 64 61 74  ion 3.6.5] ([dat
124c0 65 6f 66 3a 33 2e 36 2e 35 5d 29 2e 0a 0a 3c 70  eof:3.6.5])...<p
124d0 3e 5e 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f  >^The truncate o
124e0 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20  ptimization can 
124f0 62 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64  be permanently d
12500 69 73 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20  isabled for all 
12510 71 75 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d  queries.by recom
12520 70 69 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69  piling.SQLite wi
12530 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f  th the [SQLITE_O
12540 4d 49 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54  MIT_TRUNCATE_OPT
12550 49 4d 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69  IMIZATION] compi
12560 6c 65 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c  le-time switch.<
12570 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e  /p>..<p>The trun
12580 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
12590 6e 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69  n can also be di
125a0 73 61 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d  sabled at runtim
125b0 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c  e using.the [sql
125c0 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69  ite3_set_authori
125d0 7a 65 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65  zer()] interface
125e0 2e 20 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72  .  ^If an author
125f0 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65  izer callback.re
12600 74 75 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47  turns [SQLITE_IG
12610 4e 4f 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51  NORE] for an [SQ
12620 4c 49 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74  LITE_DELETE] act
12630 69 6f 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74  ion code, then.t
12640 68 65 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74  he DELETE operat
12650 69 6f 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64  ion will proceed
12660 20 62 75 74 20 74 68 65 20 74 72 75 6e 63 61 74   but the truncat
12670 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77  e optimization w
12680 69 6c 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20  ill.be bypassed 
12690 61 6e 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65  and rows will be
126a0 20 64 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20   deleted one by 
126b0 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  one.</p>..<tcl>.
126c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
126d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
126e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
126f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
12710 53 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20  Section {DETACH 
12720 44 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68  DATABASE} detach
12730 20 2a 44 45 54 41 43 48 0a 0a 52 65 63 75 72 73   *DETACH..Recurs
12740 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
12750 20 64 65 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74   detach-stmt.</t
12760 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74  cl>..<p>^This st
12770 61 74 65 6d 65 6e 74 20 64 65 74 61 63 68 65 73  atement detaches
12780 20 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 64   an additional d
12790 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
127a0 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 0a 61  on previously .a
127b0 74 74 61 63 68 65 64 20 75 73 69 6e 67 20 74 68  ttached using th
127c0 65 20 5b 41 54 54 41 43 48 5d 20 73 74 61 74 65  e [ATTACH] state
127d0 6d 65 6e 74 2e 20 20 0a 5e 57 68 65 6e 20 6e 6f  ment.  .^When no
127e0 74 20 69 6e 20 5b 73 68 61 72 65 64 20 63 61 63  t in [shared cac
127f0 68 65 20 6d 6f 64 65 5d 2c 20 0a 69 74 20 69 73  he mode], .it is
12800 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76   possible to hav
12810 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  e the same datab
12820 61 73 65 20 66 69 6c 65 20 61 74 74 61 63 68 65  ase file attache
12830 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  d multiple times
12840 20 75 73 69 6e 67 20 0a 64 69 66 66 65 72 65 6e   using .differen
12850 74 20 6e 61 6d 65 73 2c 20 61 6e 64 20 64 65 74  t names, and det
12860 61 63 68 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65  aching one conne
12870 63 74 69 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20  ction to a file 
12880 77 69 6c 6c 20 6c 65 61 76 65 20 74 68 65 20 0a  will leave the .
12890 6f 74 68 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f  others intact.</
128a0 70 3e 0a 5e 49 6e 20 5b 73 68 61 72 65 64 20 63  p>.^In [shared c
128b0 61 63 68 65 20 6d 6f 64 65 5d 2c 20 61 74 74 65  ache mode], atte
128c0 6d 70 74 69 6e 67 20 74 6f 20 61 74 74 61 63 68  mpting to attach
128d0 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
128e0 73 65 20 66 69 6c 65 20 6d 6f 72 65 0a 74 68 61  se file more.tha
128f0 6e 20 6f 6e 63 65 20 72 65 73 75 6c 74 73 20 69  n once results i
12900 6e 20 61 6e 20 65 72 72 6f 72 2e 0a 0a 0a 3c 74  n an error....<t
12910 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
12920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12960 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50  ##.Section {DROP
12970 20 49 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64 65   INDEX} dropinde
12980 78 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d  x {{DROP INDEX}}
12990 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
129a0 65 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 69 6e  eDiagram drop-in
129b0 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  dex-stmt.</tcl>.
129c0 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 49 4e  .<p>^The DROP IN
129d0 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 72 65  DEX statement re
129e0 6d 6f 76 65 73 20 61 6e 20 69 6e 64 65 78 20 61  moves an index a
129f0 64 64 65 64 0a 77 69 74 68 20 74 68 65 20 5b 43  dded.with the [C
12a00 52 45 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61  REATE INDEX] sta
12a10 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 69 6e 64  tement.  The ind
12a20 65 78 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79  ex is completely
12a30 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 74 68   removed from.th
12a40 65 20 64 69 73 6b 2e 20 20 54 68 65 20 6f 6e 6c  e disk.  The onl
12a50 79 20 77 61 79 20 74 6f 20 72 65 63 6f 76 65 72  y way to recover
12a60 20 74 68 65 20 69 6e 64 65 78 20 69 73 20 74 6f   the index is to
12a70 20 72 65 65 6e 74 65 72 20 74 68 65 0a 61 70 70   reenter the.app
12a80 72 6f 70 72 69 61 74 65 20 5b 43 52 45 41 54 45  ropriate [CREATE
12a90 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e   INDEX] command.
12aa0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
12ab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12af0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
12b00 6f 6e 20 7b 44 52 4f 50 20 54 41 42 4c 45 7d 20  on {DROP TABLE} 
12b10 64 72 6f 70 74 61 62 6c 65 20 7b 7b 44 52 4f 50  droptable {{DROP
12b20 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73   TABLE}}..Recurs
12b30 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
12b40 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74   drop-table-stmt
12b50 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
12b60 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74   DROP TABLE stat
12b70 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20  ement removes a 
12b80 74 61 62 6c 65 20 61 64 64 65 64 20 77 69 74 68  table added with
12b90 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42   the.[CREATE TAB
12ba0 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
12bb0 54 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69  The name specifi
12bc0 65 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20  ed is the.table 
12bd0 6e 61 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70  name.  ^The drop
12be0 70 65 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d  ped table is com
12bf0 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20  pletely removed 
12c00 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
12c10 65 20 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68  e .schema and th
12c20 65 20 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68  e disk file.  Th
12c30 65 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20  e table can not 
12c40 62 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a  be recovered.  .
12c50 5e 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64  ^All indices and
12c60 20 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69   triggers.associ
12c70 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61  ated with the ta
12c80 62 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c  ble are also del
12c90 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  eted.</p>..<p>^T
12ca0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45  he optional IF E
12cb0 58 49 53 54 53 20 63 6c 61 75 73 65 20 73 75 70  XISTS clause sup
12cc0 70 72 65 73 73 65 73 20 74 68 65 20 65 72 72 6f  presses the erro
12cd0 72 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72  r that would nor
12ce0 6d 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20  mally.result if 
12cf0 74 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e  the table does n
12d00 6f 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c  ot exist.</p>..<
12d10 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b  p>^If [foreign k
12d20 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20  ey constraints] 
12d30 61 72 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44  are enabled, a D
12d40 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e  ROP TABLE comman
12d50 64 20 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d  d performs an.im
12d60 70 6c 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c  plicit [DELETE |
12d70 20 44 45 4c 45 54 45 20 46 52 4f 4d 5d 20 63 6f   DELETE FROM] co
12d80 6d 6d 61 6e 64 20 62 65 66 6f 72 65 20 72 65 6d  mmand before rem
12d90 6f 76 69 6e 67 20 74 68 65 0a 74 61 62 6c 65 20  oving the.table 
12da0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
12db0 65 20 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74  e schema. ^Any t
12dc0 72 69 67 67 65 72 73 20 61 74 74 61 63 68 65 64  riggers attached
12dd0 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 72   to the table ar
12de0 65 0a 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74  e.dropped from t
12df0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
12e00 6d 61 20 62 65 66 6f 72 65 20 74 68 65 20 69 6d  ma before the im
12e10 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52  plicit DELETE FR
12e20 4f 4d 0a 69 73 20 65 78 65 63 75 74 65 64 2c 20  OM.is executed, 
12e30 73 6f 20 74 68 69 73 20 63 61 6e 6e 6f 74 20 63  so this cannot c
12e40 61 75 73 65 20 61 6e 79 20 74 72 69 67 67 65 72  ause any trigger
12e50 73 20 74 6f 20 66 69 72 65 2e 20 42 79 20 63 6f  s to fire. By co
12e60 6e 74 72 61 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c  ntrast, ^an.impl
12e70 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d  icit DELETE FROM
12e80 20 64 6f 65 73 20 63 61 75 73 65 20 61 6e 79 20   does cause any 
12e90 63 6f 6e 66 69 67 75 72 65 64 0a 5b 66 6f 72 65  configured.[fore
12ea0 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 73 5d  ign key actions]
12eb0 20 74 6f 20 74 61 6b 65 20 70 6c 61 63 65 2e 20   to take place. 
12ec0 0a 5e 49 66 20 74 68 65 20 69 6d 70 6c 69 63 69  .^If the implici
12ed0 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 65 78  t DELETE FROM ex
12ee0 65 63 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f  ecuted.as part o
12ef0 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63  f a DROP TABLE c
12f00 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20  ommand violates 
12f10 61 6e 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  any immediate fo
12f20 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
12f30 61 69 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20  aints,.an error 
12f40 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20  is returned and 
12f50 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74  the table is not
12f60 20 64 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74   dropped. ^If .t
12f70 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
12f80 54 45 20 46 52 4f 4d 20 63 61 75 73 65 73 20 61  TE FROM causes a
12f90 6e 79 20 0a 64 65 66 65 72 72 65 64 20 66 6f 72  ny .deferred for
12fa0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
12fb0 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c 61  ints to be viola
12fc0 74 65 64 2c 20 61 6e 64 20 74 68 65 20 76 69 6f  ted, and the vio
12fd0 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65 78  lations still.ex
12fe0 69 73 74 20 77 68 65 6e 20 74 68 65 20 74 72 61  ist when the tra
12ff0 6e 73 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d 6d  nsaction is comm
13000 69 74 74 65 64 2c 20 61 6e 20 65 72 72 6f 72 20  itted, an error 
13010 69 73 20 72 65 74 75 72 6e 65 64 20 61 74 20 74  is returned at t
13020 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69  he time.of commi
13030 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  t...<tcl>.######
13040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e  ########.Section
13090 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20   {DROP TRIGGER} 
130a0 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44 52  droptrigger {{DR
130b0 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52 65  OP TRIGGER}}..Re
130c0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
130d0 67 72 61 6d 20 64 72 6f 70 2d 74 72 69 67 67 65  gram drop-trigge
130e0 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  r-stmt.</tcl>..<
130f0 70 3e 5e 54 68 65 20 44 52 4f 50 20 54 52 49 47  p>^The DROP TRIG
13100 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 72 65  GER statement re
13110 6d 6f 76 65 73 20 61 20 74 72 69 67 67 65 72 20  moves a trigger 
13120 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20 0a  created by the .
13130 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
13140 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 4f 6e 63   statement. ^Onc
13150 65 20 72 65 6d 6f 76 65 64 2c 20 74 68 65 20 74  e removed, the t
13160 72 69 67 67 65 72 20 64 65 66 69 6e 69 74 69 6f  rigger definitio
13170 6e 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65 72 20 70  n is no.longer p
13180 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 73 71  resent in the sq
13190 6c 69 74 65 5f 6d 61 73 74 65 72 20 28 6f 72 20  lite_master (or 
131a0 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
131b0 65 72 29 20 74 61 62 6c 65 20 61 6e 64 20 69 73  er) table and is
131c0 0a 6e 6f 74 20 66 69 72 65 64 20 62 79 20 61 6e  .not fired by an
131d0 79 20 73 75 62 73 65 71 75 65 6e 74 20 49 4e 53  y subsequent INS
131e0 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
131f0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73  ELETE statements
13200 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74  ...<p>^Note that
13210 20 74 72 69 67 67 65 72 73 20 61 72 65 20 61 75   triggers are au
13220 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f 70  tomatically drop
13230 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73 73  ped when the ass
13240 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69 73  ociated table is
13250 0a 64 72 6f 70 70 65 64 2e 0a 0a 3c 74 63 6c 3e  .dropped...<tcl>
13260 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
13270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
132a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
132b0 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56 49  Section {DROP VI
132c0 45 57 7d 20 64 72 6f 70 76 69 65 77 20 7b 7b 44  EW} dropview {{D
132d0 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 52 65 63 75  ROP VIEW}}..Recu
132e0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
132f0 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74 6d  am drop-view-stm
13300 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
13310 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74  e DROP VIEW stat
13320 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20  ement removes a 
13330 76 69 65 77 20 63 72 65 61 74 65 64 20 62 79 20  view created by 
13340 74 68 65 20 5b 43 52 45 41 54 45 20 56 49 45 57  the [CREATE VIEW
13350 5d 20 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e 20  ] .  statement. 
13360 5e 54 68 65 20 76 69 65 77 20 64 65 66 69 6e 69  ^The view defini
13370 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20  tion is removed 
13380 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
13390 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20 0a 20  e schema, but . 
133a0 20 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20   no actual data 
133b0 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  in the underlyin
133c0 67 20 62 61 73 65 20 74 61 62 6c 65 73 20 69 73  g base tables is
133d0 20 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e   modified...<p>^
133e0 28 54 68 65 20 76 69 65 77 20 74 6f 20 64 72 6f  (The view to dro
133f0 70 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  p is identified 
13400 62 79 20 74 68 65 20 76 69 65 77 2d 6e 61 6d 65  by the view-name
13410 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a 20   and optional . 
13420 20 73 63 68 65 6d 61 2d 6e 61 6d 65 20 73 70 65   schema-name spe
13430 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
13440 66 20 74 68 65 20 44 52 4f 50 20 56 49 45 57 20  f the DROP VIEW 
13450 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20  statement. This 
13460 0a 20 20 72 65 66 65 72 65 6e 63 65 20 69 73 20  .  reference is 
13470 72 65 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 74  resolved using t
13480 68 65 20 73 74 61 6e 64 61 72 64 20 70 72 6f 63  he standard proc
13490 65 64 75 72 65 20 66 6f 72 20 5b 6f 62 6a 65 63  edure for [objec
134a0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e  t resolution].)^
134b0 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74 68 65 20  ..<p>.  ^If the 
134c0 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20 63  specified view c
134d0 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61  annot be found a
134e0 6e 64 20 74 68 65 20 49 46 20 45 58 49 53 54 53  nd the IF EXISTS
134f0 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 0a   clause is not .
13500 20 20 70 72 65 73 65 6e 74 2c 20 69 74 20 69 73    present, it is
13510 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49 66 20 74   an error. ^If t
13520 68 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65  he specified vie
13530 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e  w cannot be foun
13540 64 20 61 6e 64 20 61 6e 20 49 46 0a 20 20 45 58  d and an IF.  EX
13550 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
13560 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 44 52  resent in the DR
13570 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e  OP VIEW statemen
13580 74 2c 20 74 68 65 6e 20 74 68 65 20 73 74 61 74  t, then the stat
13590 65 6d 65 6e 74 0a 20 20 69 73 20 61 20 6e 6f 2d  ement.  is a no-
135a0 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  op....<tcl>.####
135b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135f0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
13600 6f 6e 20 7b 44 61 74 61 62 61 73 65 20 4f 62 6a  on {Database Obj
13610 65 63 74 20 4e 61 6d 65 20 52 65 73 6f 6c 75 74  ect Name Resolut
13620 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b  ion} {naming} {{
13630 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f  object resolutio
13640 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  n}}.</tcl>..<p>.
13650 20 20 49 6e 20 53 51 4c 69 74 65 2c 20 61 20 64    In SQLite, a d
13660 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 20 28  atabase object (
13670 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20  a table, index, 
13680 74 72 69 67 67 65 72 20 6f 72 20 76 69 65 77 29  trigger or view)
13690 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 0a 20   is identified. 
136a0 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   by the name of 
136b0 74 68 65 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  the object and t
136c0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
136d0 61 74 61 62 61 73 65 20 74 68 61 74 20 69 74 20  atabase that it 
136e0 72 65 73 69 64 65 73 20 69 6e 2e 20 0a 20 20 44  resides in. .  D
136f0 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 73 20  atabase objects 
13700 6d 61 79 20 72 65 73 69 64 65 20 69 6e 20 74 68  may reside in th
13710 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
13720 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
13730 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61 6e 20 5b  se, or in.  an [
13740 41 54 54 41 43 48 7c 61 74 74 61 63 68 65 64 20  ATTACH|attached 
13750 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a  database]...<p>.
13760 20 20 54 68 65 20 73 79 6e 74 61 78 20 6f 66 20    The syntax of 
13770 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d  the [DROP TABLE]
13780 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d 2c 20  , [DROP INDEX], 
13790 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20 5b 44 52  [DROP VIEW], [DR
137a0 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a 20 20 5b  OP TRIGGER],.  [
137b0 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c 54 45 52  REINDEX], [ALTER
137c0 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d 61 6e 79   TABLE] and many
137d0 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 20   other commands 
137e0 61 6c 6c 20 70 65 72 6d 69 74 20 74 68 65 20 75  all permit the u
137f0 73 65 72 20 74 6f 0a 20 20 73 70 65 63 69 66 79  ser to.  specify
13800 20 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65   a database obje
13810 63 74 20 65 69 74 68 65 72 20 62 79 20 69 74 73  ct either by its
13820 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72 20   name alone, or 
13830 62 79 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  by a combination
13840 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d 65 20 61   of.  its name a
13850 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 69  nd the name of i
13860 74 73 20 64 61 74 61 62 61 73 65 2e 20 5e 28 49  ts database. ^(I
13870 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20 69 73  f no database is
13880 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
13890 72 74 0a 20 20 6f 66 20 74 68 65 20 6f 62 6a 65  rt.  of the obje
138a0 63 74 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68  ct reference, th
138b0 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72 63 68  en SQLite search
138c0 65 73 20 74 68 65 20 6d 61 69 6e 2c 20 74 65 6d  es the main, tem
138d0 70 20 61 6e 64 20 61 6c 6c 20 61 74 74 61 63 68  p and all attach
138e0 65 64 0a 20 20 64 61 74 61 62 61 73 65 73 20 66  ed.  databases f
138f0 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20 77 69 74  or an object wit
13900 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  h a matching nam
13910 65 2e 20 54 68 65 20 74 65 6d 70 20 64 61 74 61  e. The temp data
13920 62 61 73 65 20 69 73 20 73 65 61 72 63 68 65 64  base is searched
13930 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77  .  first, follow
13940 65 64 20 62 79 20 74 68 65 20 6d 61 69 6e 20 64  ed by the main d
13950 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c 6f 77 65  atabase, followe
13960 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  d all attached d
13970 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 0a  atabases in the.
13980 20 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65    order that the
13990 79 20 77 65 72 65 20 61 74 74 61 63 68 65 64 2e  y were attached.
139a0 20 54 68 65 20 72 65 66 65 72 65 6e 63 65 20 72   The reference r
139b0 65 73 6f 6c 76 65 73 20 74 6f 20 74 68 65 20 66  esolves to the f
139c0 69 72 73 74 20 6d 61 74 63 68 0a 20 20 66 6f 75  irst match.  fou
139d0 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61 6d 70 6c  nd.)^ For exampl
139e0 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20  e:..<pre>^(.    
139f0 20 20 2f 2a 20 41 64 64 20 61 20 74 61 62 6c 65    /* Add a table
13a00 20 6e 61 6d 65 64 20 27 74 31 27 20 74 6f 20 74   named 't1' to t
13a10 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e 20 61 6e  he temp, main an
13a20 64 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  d an attached da
13a30 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20  tabase */.      
13a40 41 54 54 41 43 48 20 27 66 69 6c 65 2e 64 62 27  ATTACH 'file.db'
13a50 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43   AS aux;.      C
13a60 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
13a70 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41  , y);.      CREA
13a80 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31  TE TEMP TABLE t1
13a90 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52  (x, y);.      CR
13aa0 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74  EATE TABLE aux.t
13ab0 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20 20 20 20  1(x, y);..      
13ac0 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20  DROP TABLE t1;  
13ad0 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74         /* Drop t
13ae0 61 62 6c 65 20 69 6e 20 74 65 6d 70 20 64 61 74  able in temp dat
13af0 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44  abase */.      D
13b00 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20  ROP TABLE t1;   
13b10 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61        /* Drop ta
13b20 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64 61 74 61  ble in main data
13b30 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52  base */.      DR
13b40 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20  OP TABLE t1;    
13b50 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62       /* Drop tab
13b60 6c 65 20 69 6e 20 61 75 78 20 64 61 74 61 62 61  le in aux databa
13b70 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a  se */.)^</pre>..
13b80 3c 70 3e 0a 20 20 5e 49 66 20 61 20 73 63 68 65  <p>.  ^If a sche
13b90 6d 61 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69  ma name is speci
13ba0 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
13bb0 61 6e 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  an object refere
13bc0 6e 63 65 2c 20 69 74 20 6d 75 73 74 20 62 65 0a  nce, it must be.
13bd0 20 20 65 69 74 68 65 72 20 22 6d 61 69 6e 22 2c    either "main",
13be0 20 6f 72 20 22 74 65 6d 70 22 20 6f 72 20 74 68   or "temp" or th
13bf0 65 20 73 63 68 65 6d 61 2d 6e 61 6d 65 20 6f 66  e schema-name of
13c00 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
13c10 61 62 61 73 65 2e 0a 20 20 5e 4c 69 6b 65 20 6f  abase..  ^Like o
13c20 74 68 65 72 20 53 51 4c 20 69 64 65 6e 74 69 66  ther SQL identif
13c30 69 65 72 73 2c 20 73 63 68 65 6d 61 20 6e 61 6d  iers, schema nam
13c40 65 73 20 61 72 65 20 63 61 73 65 2d 69 6e 73 65  es are case-inse
13c50 6e 73 69 74 69 76 65 2e 0a 20 20 5e 49 66 20 61  nsitive..  ^If a
13c60 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20   schema name is 
13c70 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20  specified, then 
13c80 6f 6e 6c 79 20 74 68 61 74 20 6f 6e 65 20 73 63  only that one sc
13c90 68 65 6d 61 20 69 73 20 73 65 61 72 63 68 65 64  hema is searched
13ca0 20 66 6f 72 0a 20 20 74 68 65 20 6e 61 6d 65 64   for.  the named
13cb0 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20   object...<p>.  
13cc0 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72 65 66 65  Most object refe
13cd0 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20  rences may only 
13ce0 72 65 73 6f 6c 76 65 20 74 6f 20 61 20 73 70 65  resolve to a spe
13cf0 63 69 66 69 63 20 74 79 70 65 20 6f 66 20 6f 62  cific type of ob
13d00 6a 65 63 74 20 28 66 6f 72 0a 20 20 65 78 61 6d  ject (for.  exam
13d10 70 6c 65 20 61 20 72 65 66 65 72 65 6e 63 65 20  ple a reference 
13d20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20  that is part of 
13d30 61 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61  a DROP TABLE sta
13d40 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c 79 20  tement may only 
13d50 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20 61 20 74  resolve.  to a t
13d60 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 6e 6f 74  able object, not
13d70 20 61 6e 20 69 6e 64 65 78 2c 20 74 72 69 67 67   an index, trigg
13d80 65 72 20 6f 72 20 76 69 65 77 29 2e 20 48 6f 77  er or view). How
13d90 65 76 65 72 20 69 6e 20 73 6f 6d 65 20 63 6f 6e  ever in some con
13da0 74 65 78 74 73 20 0a 20 20 28 65 2e 67 2e 20 5b  texts .  (e.g. [
13db0 52 45 49 4e 44 45 58 5d 29 20 61 6e 20 6f 62 6a  REINDEX]) an obj
13dc0 65 63 74 20 72 65 66 65 72 65 6e 63 65 20 6d 61  ect reference ma
13dd0 79 20 62 65 20 72 65 73 6f 6c 76 65 20 74 6f 20  y be resolve to 
13de0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 79  more than one ty
13df0 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63 74 2e 20  pe.  of object. 
13e00 5e 57 68 65 6e 20 73 65 61 72 63 68 69 6e 67 20  ^When searching 
13e10 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 73  database schemas
13e20 20 66 6f 72 20 61 20 6e 61 6d 65 64 20 6f 62 6a   for a named obj
13e30 65 63 74 2c 20 6f 62 6a 65 63 74 73 20 6f 66 0a  ect, objects of.
13e40 20 20 74 79 70 65 73 20 74 68 61 74 20 63 61 6e    types that can
13e50 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e 20 74  not be used in t
13e60 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68  he context of th
13e70 65 20 72 65 66 65 72 65 6e 63 65 20 61 72 65 20  e reference are 
13e80 61 6c 77 61 79 73 20 0a 20 20 69 67 6e 6f 72 65  always .  ignore
13e90 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  d...<tcl>.######
13ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ee0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
13ef0 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e   EXPLAIN explain
13f00 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65   EXPLAIN..Bubble
13f10 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74  Diagram sql-stmt
13f20 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20  .</tcl>..<p>^An 
13f30 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 63 61  SQL statement ca
13f40 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  n be preceded by
13f50 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22 45 58   the keyword "EX
13f60 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20 74 68 65  PLAIN" or.by the
13f70 20 70 68 72 61 73 65 20 22 45 58 50 4c 41 49 4e   phrase "EXPLAIN
13f80 20 51 55 45 52 59 20 50 4c 41 4e 22 2e 20 20 5e   QUERY PLAN".  ^
13f90 45 69 74 68 65 72 20 6d 6f 64 69 66 69 63 61 74  Either modificat
13fa0 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 0a 53  ion causes the.S
13fb0 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  QL statement to 
13fc0 62 65 68 61 76 65 20 61 73 20 61 20 71 75 65 72  behave as a quer
13fd0 79 20 61 6e 64 20 74 6f 20 72 65 74 75 72 6e 20  y and to return 
13fe0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
13ff0 74 0a 68 6f 77 20 74 68 65 20 53 51 4c 20 73 74  t.how the SQL st
14000 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61  atement would ha
14010 76 65 20 6f 70 65 72 61 74 65 64 20 69 66 20 74  ve operated if t
14020 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  he EXPLAIN keywo
14030 72 64 20 6f 72 0a 70 68 72 61 73 65 20 68 61 64  rd or.phrase had
14040 20 62 65 65 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f   been omitted.</
14050 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75  p>..<p>The outpu
14060 74 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61  t from EXPLAIN a
14070 6e 64 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  nd EXPLAIN QUERY
14080 20 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64 65   PLAN is intende
14090 64 20 66 6f 72 0a 69 6e 74 65 72 61 63 74 69 76  d for.interactiv
140a0 65 20 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 74  e analysis and t
140b0 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f  roubleshooting o
140c0 6e 6c 79 2e 20 20 54 68 65 20 64 65 74 61 69 6c  nly.  The detail
140d0 73 20 6f 66 20 74 68 65 20 0a 6f 75 74 70 75 74  s of the .output
140e0 20 66 6f 72 6d 61 74 20 61 72 65 20 73 75 62 6a   format are subj
140f0 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20 66 72  ect to change fr
14100 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f  om one release o
14110 66 20 53 51 4c 69 74 65 20 74 6f 20 74 68 65 20  f SQLite to the 
14120 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f  next..Applicatio
14130 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73  ns should not us
14140 65 20 45 58 50 4c 41 49 4e 20 6f 72 20 45 58 50  e EXPLAIN or EXP
14150 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
14160 73 69 6e 63 65 0a 74 68 65 69 72 20 65 78 61 63  since.their exac
14170 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 76 61  t behavior is va
14180 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e 6c 79 20  riable and only 
14190 70 61 72 74 69 61 6c 6c 79 20 64 6f 63 75 6d 65  partially docume
141a0 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57  nted.</p>..<p>^W
141b0 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20  hen the EXPLAIN 
141c0 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20  keyword appears 
141d0 62 79 20 69 74 73 65 6c 66 20 69 74 20 63 61 75  by itself it cau
141e0 73 65 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ses the statemen
141f0 74 0a 74 6f 20 62 65 68 61 76 65 20 61 73 20 61  t.to behave as a
14200 20 71 75 65 72 79 20 74 68 61 74 20 72 65 74 75   query that retu
14210 72 6e 73 20 74 68 65 20 73 65 71 75 65 6e 63 65  rns the sequence
14220 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61   of .[virtual ma
14230 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f  chine instructio
14240 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20 68 61 76  ns] it would hav
14250 65 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  e used to execut
14260 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61  e the command ha
14270 64 0a 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  d.the EXPLAIN ke
14280 79 77 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70  yword not been p
14290 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e 20 74 68  resent. ^When th
142a0 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  e EXPLAIN QUERY 
142b0 50 4c 41 4e 20 70 68 72 61 73 65 0a 61 70 70 65  PLAN phrase.appe
142c0 61 72 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65  ars, the stateme
142d0 6e 74 20 72 65 74 75 72 6e 73 20 68 69 67 68 2d  nt returns high-
142e0 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  level informatio
142f0 6e 20 72 65 67 61 72 64 69 6e 67 20 74 68 65 20  n regarding the 
14300 71 75 65 72 79 0a 70 6c 61 6e 20 74 68 61 74 20  query.plan that 
14310 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
14320 75 73 65 64 2e 0a 0a 54 68 65 20 45 58 50 4c 41  used...The EXPLA
14330 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 63 6f  IN QUERY PLAN co
14340 6d 6d 61 6e 64 20 69 73 20 64 65 73 63 72 69 62  mmand is describ
14350 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61 69 6e 20  ed in .[explain 
14360 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f 72 65 20  query plan|more 
14370 64 65 74 61 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c  detail here]...<
14380 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
14390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143d0 23 23 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72  ###.Section expr
143e0 65 73 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78  ession expr {*ex
143f0 70 72 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73  pression {expres
14400 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 52  sion syntax}}..R
14410 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
14420 61 67 72 61 6d 20 65 78 70 72 0a 3c 2f 74 63 6c  agram expr.</tcl
14430 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65 63 74 69  >..<p>This secti
14440 6f 6e 20 69 73 20 64 69 66 66 65 72 65 6e 74 20  on is different 
14450 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 73 2e  from the others.
14460 20 20 4d 6f 73 74 20 6f 74 68 65 72 20 73 65 63    Most other sec
14470 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f  tions of.this do
14480 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f  cument talks abo
14490 75 74 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  ut a particular 
144a0 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68  SQL command.  Th
144b0 69 73 20 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a  is section does.
144c0 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75 74 20 61  not talk about a
144d0 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d   standalone comm
144e0 61 6e 64 20 62 75 74 20 61 62 6f 75 74 20 22 65  and but about "e
144f0 78 70 72 65 73 73 69 6f 6e 73 22 20 77 68 69 63  xpressions" whic
14500 68 20 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e  h are .subcompon
14510 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74 68  ents of most oth
14520 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e  er commands.</p>
14530 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
14540 6e 74 20 62 69 6e 61 72 79 6f 70 73 20 7b 62 69  nt binaryops {bi
14550 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73 7d 3c  nary operators}<
14560 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61 74  /tcl>.<h3>Operat
14570 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51  ors</h3>.<p>^(SQ
14580 4c 69 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73  Lite understands
14590 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62   the following b
145a0 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73 2c  inary operators,
145b0 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68   in order from.h
145c0 69 67 68 65 73 74 20 74 6f 20 6c 6f 77 65 73 74  ighest to lowest
145d0 20 70 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e   precedence:</p>
145e0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
145f0 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  re>.<font color=
14600 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c  "#2c2cf0"><big>|
14610 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b 20  |.*    /    %.+ 
14620 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20     -.&lt;&lt;   
14630 26 67 74 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b  &gt;&gt;   &amp;
14640 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c      |.&lt;    &l
14650 74 3b 3d 20 20 20 26 67 74 3b 20 20 20 20 26 67  t;=   &gt;    &g
14660 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d  t;=.=    ==   !=
14670 20 20 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f     &lt;&gt;   </
14680 62 69 67 3e 49 53 20 20 20 49 53 20 4e 4f 54 20  big>IS   IS NOT 
14690 20 20 49 4e 20 20 20 4c 49 4b 45 20 20 20 47 4c    IN   LIKE   GL
146a0 4f 42 20 20 20 4d 41 54 43 48 20 20 20 52 45 47  OB   MATCH   REG
146b0 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66  EXP.AND   .OR</f
146c0 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  ont>.</pre></blo
146d0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e  ckquote>)^..<p>^
146e0 28 53 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79  (Supported unary
146f0 20 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72   prefix operator
14700 73 20 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e  s are these:</p>
14710 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
14720 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  re>.<font color=
14730 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d  "#2c2cf0"><big>-
14740 20 20 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f      +    ~    NO
14750 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c  T</big></font>.<
14760 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
14770 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  e>)^..<tcl>hd_fr
14780 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70  agment collateop
14790 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74   {COLLATE operat
147a0 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68  or}</tcl>.<p>^Th
147b0 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  e COLLATE operat
147c0 6f 72 20 69 73 20 61 20 75 6e 61 72 79 20 70 6f  or is a unary po
147d0 73 74 66 69 78 0a 6f 70 65 72 61 74 6f 72 20 74  stfix.operator t
147e0 68 61 74 20 61 73 73 69 67 6e 73 20 61 20 5b 63  hat assigns a [c
147f0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
14800 65 5d 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73  e] to an express
14810 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41 54  ion..^The COLLAT
14820 45 20 6f 70 65 72 61 74 6f 72 20 68 61 73 20 61  E operator has a
14830 20 68 69 67 68 65 72 20 70 72 65 63 65 64 65 6e   higher preceden
14840 63 65 20 28 62 69 6e 64 73 20 6d 6f 72 65 20 74  ce (binds more t
14850 69 67 68 74 6c 79 29 20 74 68 61 6e 20 61 6e 79  ightly) than any
14860 0a 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72  .binary operator
14870 20 61 6e 64 20 61 6e 79 20 75 6e 61 72 79 20 70   and any unary p
14880 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 20 65  refix operator e
14890 78 63 65 70 74 20 22 7e 22 2e 0a 28 43 4f 4c 4c  xcept "~"..(COLL
148a0 41 54 45 20 61 6e 64 20 22 7e 22 20 61 72 65 20  ATE and "~" are 
148b0 61 73 73 6f 63 69 61 74 69 76 65 20 73 6f 20 74  associative so t
148c0 68 65 69 72 20 62 69 6e 64 69 6e 67 20 6f 72 64  heir binding ord
148d0 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74  er does not matt
148e0 65 72 2e 29 0a 5e 54 68 65 20 63 6f 6c 6c 61 74  er.).^The collat
148f0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 73 65 74  ing sequence set
14900 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54 45 20   by the COLLATE 
14910 6f 70 65 72 61 74 6f 72 20 6f 76 65 72 72 69 64  operator overrid
14920 65 73 20 74 68 65 0a 63 6f 6c 6c 61 74 69 6e 67  es the.collating
14930 20 73 65 71 75 65 6e 63 65 20 64 65 74 65 72 6d   sequence determ
14940 69 6e 65 64 20 62 79 20 74 68 65 20 43 4f 4c 4c  ined by the COLL
14950 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20 61 20  ATE clause in a 
14960 74 61 62 6c 65 0a 5b 63 6f 6c 75 6d 6e 20 64 65  table.[column de
14970 66 69 6e 69 74 69 6f 6e 5d 2e 0a 53 65 65 20 74  finition]..See t
14980 68 65 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65  he [collating se
14990 71 75 65 6e 63 65 7c 20 64 65 74 61 69 6c 65 64  quence| detailed
149a0 20 64 69 73 63 75 73 73 69 6f 6e 20 6f 6e 20 63   discussion on c
149b0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
149c0 65 73 5d 0a 69 6e 20 74 68 65 20 5b 64 61 74 61  es].in the [data
149d0 74 79 70 65 20 7c 20 44 61 74 61 74 79 70 65 20  type | Datatype 
149e0 49 6e 20 53 51 4c 69 74 65 33 5d 20 64 6f 63 75  In SQLite3] docu
149f0 6d 65 6e 74 20 66 6f 72 20 61 64 64 69 74 69 6f  ment for additio
14a00 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
14a10 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70  .</p>..<tcl>hd_p
14a20 75 74 73 20 22 0a 3c 70 3e 5e 54 68 65 20 75 6e  uts ".<p>^The un
14a30 61 72 79 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70  ary operator [Op
14a40 65 72 61 74 6f 72 20 2b 5d 20 69 73 20 61 20 6e  erator +] is a n
14a50 6f 2d 6f 70 2e 20 20 5e 49 74 20 63 61 6e 20 62  o-op.  ^It can b
14a60 65 20 61 70 70 6c 69 65 64 0a 74 6f 20 73 74 72  e applied.to str
14a70 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73 2c 20 62  ings, numbers, b
14a80 6c 6f 62 73 20 6f 72 20 4e 55 4c 4c 20 61 6e 64  lobs or NULL and
14a90 20 69 74 20 61 6c 77 61 79 73 20 72 65 74 75 72   it always retur
14aa0 6e 73 20 61 20 72 65 73 75 6c 74 0a 77 69 74 68  ns a result.with
14ab0 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
14ac0 61 73 20 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c  as the operand.<
14ad0 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e  /p>"</tcl>..<p>N
14ae0 6f 74 65 20 74 68 61 74 20 74 68 65 72 65 20 61  ote that there a
14af0 72 65 20 74 77 6f 20 76 61 72 69 61 74 69 6f 6e  re two variation
14b00 73 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20  s of the equals 
14b10 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f  and not equals.o
14b20 70 65 72 61 74 6f 72 73 2e 20 20 5e 45 71 75 61  perators.  ^Equa
14b30 6c 73 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  ls can be either
14b40 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75 74 73 20  ..<tcl>.hd_puts 
14b50 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72  "[Operator =] or
14b60 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a   [Operator ==]..
14b70 5e 54 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20  ^The non-equals 
14b80 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20  operator can be 
14b90 65 69 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72  either.[Operator
14ba0 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f   !=] or [Operato
14bb0 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 5e  r {&lt;&gt;}]..^
14bc0 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c  The [Operator ||
14bd0 5d 20 6f 70 65 72 61 74 6f 72 20 69 73 20 5c 22  ] operator is \"
14be0 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22 20 2d 20  concatenate\" - 
14bf0 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65  it joins togethe
14c00 72 0a 74 68 65 20 74 77 6f 20 73 74 72 69 6e 67  r.the two string
14c10 73 20 6f 66 20 69 74 73 20 6f 70 65 72 61 6e 64  s of its operand
14c20 73 2e 0a 5e 54 68 65 20 6f 70 65 72 61 74 6f 72  s..^The operator
14c30 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20 6f 75   [Operator %] ou
14c40 74 70 75 74 73 20 74 68 65 20 69 6e 74 65 67 65  tputs the intege
14c50 72 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20 6c  r value of its l
14c60 65 66 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64  eft .operand mod
14c70 75 6c 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70  ulo its right op
14c80 65 72 61 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  erand.  In other
14c90 20 77 6f 72 64 73 2c 20 74 68 65 0a 6f 70 65 72   words, the.oper
14ca0 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25  ator [Operator %
14cb0 5d 20 77 6f 72 6b 73 20 69 6e 20 53 51 4c 69 74  ] works in SQLit
14cc0 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  e the same as it
14cd0 20 64 6f 65 73 0a 69 6e 20 41 4e 53 49 2d 43 2e   does.in ANSI-C.
14ce0 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72 65  </p>..<p>^The re
14cf0 73 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e 61  sult of any bina
14d00 72 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20 65  ry operator is e
14d10 69 74 68 65 72 20 61 20 6e 75 6d 65 72 69 63 20  ither a numeric 
14d20 76 61 6c 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c 20  value or .NULL, 
14d30 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20 5b  except for the [
14d40 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e  Operator ||] con
14d50 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61  catenation opera
14d60 74 6f 72 20 77 68 69 63 68 20 61 6c 77 61 79 73  tor which always
14d70 20 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20 65   .evaluates to e
14d80 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20  ither NULL or a 
14d90 74 65 78 74 20 76 61 6c 75 65 2e 3c 2f 70 3e 22  text value.</p>"
14da0 0a 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 69  ..hd_fragment {i
14db0 73 69 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65 72  sisnot} {IS oper
14dc0 61 74 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f 70  ator} {IS NOT op
14dd0 65 72 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74 73  erator}..hd_puts
14de0 20 22 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72 61   "<p>^The [Opera
14df0 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65  tor IS] and [Ope
14e00 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20  rator {IS NOT}] 
14e10 6f 70 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a 6c  operators work.l
14e20 69 6b 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d  ike [Operator =]
14e30 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 21   and [Operator !
14e40 3d 5d 20 65 78 63 65 70 74 20 77 68 65 6e 20 6f  =] except when o
14e50 6e 65 20 6f 72 20 62 6f 74 68 20 6f 66 20 74 68  ne or both of th
14e60 65 0a 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  e.operands are N
14e70 55 4c 4c 2e 20 5e 49 6e 20 74 68 69 73 20 63 61  ULL. ^In this ca
14e80 73 65 2c 20 69 66 20 62 6f 74 68 20 6f 70 65 72  se, if both oper
14e90 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74  ands are NULL, t
14ea0 68 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61  hen the.IS opera
14eb0 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f  tor evaluates to
14ec0 20 31 20 28 74 72 75 65 29 20 61 6e 64 20 74 68   1 (true) and th
14ed0 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f  e IS NOT operato
14ee0 72 20 65 76 61 6c 75 61 74 65 73 0a 74 6f 20 30  r evaluates.to 0
14ef0 20 28 66 61 6c 73 65 29 2e 20 5e 49 66 20 6f 6e   (false). ^If on
14f00 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  e operand is NUL
14f10 4c 20 61 6e 64 20 74 68 65 20 6f 74 68 65 72 20  L and the other 
14f20 69 73 20 6e 6f 74 2c 20 74 68 65 6e 20 74 68 65  is not, then the
14f30 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61  .IS operator eva
14f40 6c 75 61 74 65 73 20 74 6f 20 30 20 28 66 61 6c  luates to 0 (fal
14f50 73 65 29 20 61 6e 64 20 74 68 65 20 49 53 20 4e  se) and the IS N
14f60 4f 54 20 6f 70 65 72 61 74 6f 72 20 69 73 20 31  OT operator is 1
14f70 20 28 74 72 75 65 29 2e 0a 5e 49 74 20 69 73 20   (true)..^It is 
14f80 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f 72  not possible for
14f90 20 61 6e 20 49 53 20 6f 72 20 49 53 20 4e 4f 54   an IS or IS NOT
14fa0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 65   expression to e
14fb0 76 61 6c 75 61 74 65 20 74 6f 20 4e 55 4c 4c 2e  valuate to NULL.
14fc0 0a 5e 4f 70 65 72 61 74 6f 72 73 20 5b 4f 70 65  .^Operators [Ope
14fd0 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f  rator IS] and [O
14fe0 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d  perator {IS NOT}
14ff0 5d 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  ] have the same 
15000 0a 70 72 65 63 65 64 65 6e 63 65 20 61 73 20 5b  .precedence as [
15010 4f 70 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c  Operator =]."..<
15020 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
15030 6c 69 74 76 61 6c 75 65 20 7b 6c 69 74 65 72 61  litvalue {litera
15040 6c 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c  l value}</tcl>.<
15050 68 33 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75 65  h3>Literal Value
15060 73 20 28 43 6f 6e 73 74 61 6e 74 73 29 3c 2f 68  s (Constants)</h
15070 33 3e 0a 3c 70 3e 0a 41 20 6c 69 74 65 72 61 6c  3>.<p>.A literal
15080 20 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74   value represent
15090 73 20 61 20 63 6f 6e 73 74 61 6e 74 2e 0a 5e 4c  s a constant..^L
150a0 69 74 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61  iteral values ma
150b0 79 20 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66  y be integers, f
150c0 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75  loating point nu
150d0 6d 62 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a  mbers, strings,.
150e0 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e  BLOBs, or NULLs.
150f0 0a 3c 70 3e 0a 54 68 65 20 73 79 6e 74 61 78 20  .<p>.The syntax 
15100 66 6f 72 20 69 6e 74 65 67 65 72 20 61 6e 64 20  for integer and 
15110 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c  floating point l
15120 69 74 65 72 61 6c 73 20 28 63 6f 6c 6c 65 63 74  iterals (collect
15130 69 76 65 6c 79 0a 22 6e 75 6d 65 72 69 63 20 6c  ively."numeric l
15140 69 74 65 72 61 6c 73 22 29 20 69 73 20 73 68 6f  iterals") is sho
15150 77 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77  wn by the follow
15160 69 6e 67 20 64 69 61 67 72 61 6d 3a 3c 2f 70 3e  ing diagram:</p>
15170 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61  ..<tcl>BubbleDia
15180 67 72 61 6d 20 6e 75 6d 65 72 69 63 2d 6c 69 74  gram numeric-lit
15190 65 72 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  eral</tcl>..<p>.
151a0 5e 28 49 66 20 61 20 6e 75 6d 65 72 69 63 20 6c  ^(If a numeric l
151b0 69 74 65 72 61 6c 20 68 61 73 20 61 20 64 65 63  iteral has a dec
151c0 69 6d 61 6c 20 70 6f 69 6e 74 20 6f 72 20 61 6e  imal point or an
151d0 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a   exponentiation.
151e0 63 6c 61 75 73 65 20 6f 72 20 69 66 20 69 74 73  clause or if its
151f0 20 6d 61 67 6e 69 74 75 64 65 20 69 73 20 6c 65   magnitude is le
15200 73 73 20 74 68 61 6e 20 2d 39 32 32 33 33 37 32  ss than -9223372
15210 30 33 36 38 35 34 37 37 35 38 30 38 20 6f 72 0a  036854775808 or.
15220 67 72 65 61 74 65 72 20 74 68 61 6e 20 39 32 32  greater than 922
15230 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
15240 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 66  , then it is a f
15250 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69  loating point li
15260 74 65 72 61 6c 2e 0a 4f 74 68 65 72 77 69 73 65  teral..Otherwise
15270 20 69 73 20 69 74 20 69 73 20 61 6e 20 20 69 6e   is it is an  in
15280 74 65 67 65 72 20 6c 69 74 65 72 61 6c 2e 29 5e  teger literal.)^
15290 0a 5e 54 68 65 20 22 45 22 20 63 68 61 72 61 63  .^The "E" charac
152a0 74 65 72 20 74 68 61 74 20 62 65 67 69 6e 73 20  ter that begins 
152b0 74 68 65 20 65 78 70 6f 6e 65 6e 74 69 61 74 69  the exponentiati
152c0 6f 6e 0a 63 6c 61 75 73 65 20 6f 66 20 61 20 66  on.clause of a f
152d0 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69  loating point li
152e0 74 65 72 61 6c 20 63 61 6e 20 62 65 20 65 69 74  teral can be eit
152f0 68 65 72 20 75 70 70 65 72 20 6f 72 20 6c 6f 77  her upper or low
15300 65 72 20 63 61 73 65 2e 0a 5e 28 54 68 65 20 22  er case..^(The "
15310 2e 22 20 63 68 61 72 61 63 74 65 72 20 69 73 20  ." character is 
15320 61 6c 77 61 79 73 20 75 73 65 64 20 0a 61 73 20  always used .as 
15330 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
15340 74 20 65 76 65 6e 20 69 66 20 74 68 65 20 6c 6f  t even if the lo
15350 63 61 6c 65 20 73 65 74 74 69 6e 67 20 73 70 65  cale setting spe
15360 63 69 66 69 65 73 20 22 2c 22 20 66 6f 72 0a 74  cifies "," for.t
15370 68 69 73 20 72 6f 6c 65 20 2d 20 74 68 65 20 75  his role - the u
15380 73 65 20 6f 66 20 22 2c 22 20 66 6f 72 20 74 68  se of "," for th
15390 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
153a0 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 0a  would result in.
153b0 73 79 6e 74 61 63 74 69 63 20 61 6d 62 69 67 75  syntactic ambigu
153c0 69 74 79 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f  ity.)^..<tcl>hd_
153d0 66 72 61 67 6d 65 6e 74 20 68 65 78 69 6e 74 20  fragment hexint 
153e0 7b 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74  {hexadecimal int
153f0 65 67 65 72 20 6c 69 74 65 72 61 6c 73 7d 20 7b  eger literals} {
15400 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
15410 67 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  gers}</tcl>.<p>^
15420 48 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  Hexadecimal inte
15430 67 65 72 20 6c 69 74 65 72 61 6c 73 20 66 6f 6c  ger literals fol
15440 6c 6f 77 20 74 68 65 20 43 2d 6c 61 6e 67 75 61  low the C-langua
15450 67 65 20 6e 6f 74 61 74 69 6f 6e 20 6f 66 0a 22  ge notation of."
15460 30 78 22 20 6f 72 20 22 30 58 22 20 66 6f 6c 6c  0x" or "0X" foll
15470 6f 77 65 64 20 62 79 20 68 65 78 61 64 65 63 69  owed by hexadeci
15480 6d 61 6c 20 64 69 67 69 74 73 2e 0a 5e 46 6f 72  mal digits..^For
15490 20 65 78 61 6d 70 6c 65 2c 20 30 78 31 32 33 34   example, 0x1234
154a0 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20   means the same 
154b0 61 73 20 34 36 36 30 0a 61 6e 64 20 30 78 38 30  as 4660.and 0x80
154c0 30 30 30 30 30 30 30 30 30 30 30 30 30 30 20 6d  00000000000000 m
154d0 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73  eans the same as
154e0 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
154f0 37 35 38 30 38 2e 0a 20 5e 28 48 65 78 61 64 65  75808.. ^(Hexade
15500 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c 69  cimal integer li
15510 74 65 72 61 6c 73 20 61 72 65 20 69 6e 74 65 72  terals are inter
15520 70 72 65 74 65 64 20 61 73 20 36 34 2d 62 69 74  preted as 64-bit
15530 0a 74 77 6f 27 73 2d 63 6f 6d 70 6c 65 6d 65 6e  .two's-complemen
15540 74 20 69 6e 74 65 67 65 72 73 20 61 6e 64 20 61  t integers and a
15550 72 65 20 74 68 75 73 20 6c 69 6d 69 74 65 64 0a  re thus limited.
15560 74 6f 20 73 69 78 74 65 65 6e 20 73 69 67 6e 69  to sixteen signi
15570 66 69 63 61 6e 74 20 64 69 67 69 74 73 20 6f 66  ficant digits of
15580 20 70 72 65 63 69 73 69 6f 6e 2e 29 5e 0a 53 75   precision.)^.Su
15590 70 70 6f 72 74 20 66 6f 72 20 68 65 78 61 64 65  pport for hexade
155a0 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 77  cimal integers w
155b0 61 73 20 61 64 64 65 64 20 74 6f 20 53 51 4c 69  as added to SQLi
155c0 74 65 0a 76 65 72 73 69 6f 6e 20 33 2e 38 2e 36  te.version 3.8.6
155d0 20 28 5b 64 61 74 65 6f 66 3a 33 2e 38 2e 36 5d   ([dateof:3.8.6]
155e0 29 2e 0a 5e 46 6f 72 20 62 61 63 6b 77 61 72 64  )..^For backward
155f0 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c  s compatibility,
15600 20 74 68 65 20 22 30 78 22 20 68 65 78 61 64 65   the "0x" hexade
15610 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 0a 6e 6f  cimal integer.no
15620 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75  tation is only u
15630 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 74 68 65  nderstood by the
15640 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 70 61   SQL language pa
15650 72 73 65 72 2c 20 6e 6f 74 20 62 79 20 74 68 65  rser, not by the
15660 0a 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e  .type conversion
15670 73 20 72 6f 75 74 69 6e 65 73 2e 0a 5e 28 53 74  s routines..^(St
15680 72 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 74  ring variables t
15690 68 61 74 0a 63 6f 6e 74 61 69 6e 20 74 65 78 74  hat.contain text
156a0 20 66 6f 72 6d 61 74 74 65 64 20 6c 69 6b 65 20   formatted like 
156b0 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
156c0 67 65 72 73 20 61 72 65 20 6e 6f 74 0a 69 6e 74  gers are not.int
156d0 65 72 70 72 65 74 65 64 20 61 73 20 68 65 78 61  erpreted as hexa
156e0 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73  decimal integers
156f0 20 77 68 65 6e 20 63 6f 65 72 63 69 6e 67 20 74   when coercing t
15700 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0a  he string value.
15710 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
15720 64 75 65 20 74 6f 20 61 20 5b 43 41 53 54 20 65  due to a [CAST e
15730 78 70 72 65 73 73 69 6f 6e 5d 20 6f 72 20 66 6f  xpression] or fo
15740 72 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69  r a [column affi
15750 6e 69 74 79 5d 0a 74 72 61 6e 73 66 6f 72 6d 61  nity].transforma
15760 74 69 6f 6e 20 6f 72 20 70 72 69 6f 72 20 74 6f  tion or prior to
15770 20 70 65 72 66 6f 72 6d 69 6e 67 20 61 20 6e 75   performing a nu
15780 6d 65 72 69 63 20 6f 70 65 72 61 74 69 6f 6e 20  meric operation 
15790 6f 72 20 66 6f 72 0a 61 6e 79 20 6f 74 68 65 72  or for.any other
157a0 20 72 75 6e 2d 74 69 6d 65 20 63 6f 6e 76 65 72   run-time conver
157b0 73 69 6f 6e 73 2e 29 5e 20 20 5e 28 57 68 65 6e  sions.)^  ^(When
157c0 20 63 6f 65 72 63 69 6e 67 20 61 0a 73 74 72 69   coercing a.stri
157d0 6e 67 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20  ng value in the 
157e0 66 6f 72 6d 61 74 20 6f 66 20 61 20 68 65 78 61  format of a hexa
157f0 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20  decimal integer 
15800 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a  into an integer.
15810 76 61 6c 75 65 2c 20 74 68 65 20 63 6f 6e 76 65  value, the conve
15820 72 73 69 6f 6e 20 70 72 6f 63 65 73 73 20 73 74  rsion process st
15830 6f 70 73 20 77 68 65 6e 20 74 68 65 20 27 78 27  ops when the 'x'
15840 20 63 68 61 72 61 63 74 65 72 20 69 73 20 73 65   character is se
15850 65 6e 0a 73 6f 20 74 68 65 20 72 65 73 75 6c 74  en.so the result
15860 69 6e 67 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ing integer valu
15870 65 20 69 73 20 61 6c 77 61 79 73 20 7a 65 72 6f  e is always zero
15880 2e 29 5e 0a 5e 28 53 51 4c 69 74 65 20 6f 6e 6c  .)^.^(SQLite onl
15890 79 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68  y understands th
158a0 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e  e hexadecimal in
158b0 74 65 67 65 72 20 6e 6f 74 61 74 69 6f 6e 20 77  teger notation w
158c0 68 65 6e 20 69 74 0a 61 70 70 65 61 72 73 20 69  hen it.appears i
158d0 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  n the SQL statem
158e0 65 6e 74 20 74 65 78 74 2c 20 6e 6f 74 20 77 68  ent text, not wh
158f0 65 6e 20 69 74 20 61 70 70 65 61 72 73 20 61 73  en it appears as
15900 0a 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6e  .part of the con
15910 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61  tent of the data
15920 62 61 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 41 20  base.)^..<p> ^A 
15930 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20  string constant 
15940 69 73 20 66 6f 72 6d 65 64 20 62 79 20 65 6e 63  is formed by enc
15950 6c 6f 73 69 6e 67 20 74 68 65 0a 73 74 72 69 6e  losing the.strin
15960 67 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74  g in single quot
15970 65 73 20 28 27 29 2e 20 20 5e 41 20 73 69 6e 67  es (').  ^A sing
15980 6c 65 20 71 75 6f 74 65 20 77 69 74 68 69 6e 20  le quote within 
15990 74 68 65 20 73 74 72 69 6e 67 20 63 61 6e 0a 62  the string can.b
159a0 65 20 65 6e 63 6f 64 65 64 20 62 79 20 70 75 74  e encoded by put
159b0 74 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65 20  ting two single 
159c0 71 75 6f 74 65 73 20 69 6e 20 61 20 72 6f 77 20  quotes in a row 
159d0 2d 20 61 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a  - as in Pascal..
159e0 43 2d 73 74 79 6c 65 20 65 73 63 61 70 65 73 20  C-style escapes 
159f0 75 73 69 6e 67 20 74 68 65 20 62 61 63 6b 73 6c  using the backsl
15a00 61 73 68 20 63 68 61 72 61 63 74 65 72 20 61 72  ash character ar
15a10 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20  e not supported 
15a20 62 65 63 61 75 73 65 0a 74 68 65 79 20 61 72 65  because.they are
15a30 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51   not standard SQ
15a40 4c 2e 0a 0a 3c 70 3e 20 5e 42 4c 4f 42 20 6c 69  L...<p> ^BLOB li
15a50 74 65 72 61 6c 73 20 61 72 65 20 73 74 72 69 6e  terals are strin
15a60 67 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74 61  g literals conta
15a70 69 6e 69 6e 67 20 68 65 78 61 64 65 63 69 6d 61  ining hexadecima
15a80 6c 20 64 61 74 61 20 61 6e 64 0a 70 72 65 63 65  l data and.prece
15a90 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20  ded by a single 
15aa0 22 78 22 20 6f 72 20 22 58 22 20 63 68 61 72 61  "x" or "X" chara
15ab0 63 74 65 72 2e 20 20 5e 28 45 78 61 6d 70 6c 65  cter.  ^(Example
15ac0 3a 20 58 27 35 33 35 31 34 43 36 39 37 34 36 35  : X'53514C697465
15ad0 27 29 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65  ')^..<p>.^A lite
15ae0 72 61 6c 20 76 61 6c 75 65 20 63 61 6e 20 61 6c  ral value can al
15af0 73 6f 20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20  so be the token 
15b00 22 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74  "NULL"..</p>..<t
15b10 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76  cl>hd_fragment v
15b20 61 72 70 61 72 61 6d 20 70 61 72 61 6d 65 74 65  arparam paramete
15b30 72 20 70 61 72 61 6d 65 74 65 72 73 20 7b 62 6f  r parameters {bo
15b40 75 6e 64 20 70 61 72 61 6d 65 74 65 72 7d 20 7b  und parameter} {
15b50 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73  bound parameters
15b60 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72 61  }</tcl>.<h3>Para
15b70 6d 65 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a  meters</h3>.<p>.
15b80 41 20 22 76 61 72 69 61 62 6c 65 22 20 6f 72 20  A "variable" or 
15b90 22 70 61 72 61 6d 65 74 65 72 22 20 74 6f 6b 65  "parameter" toke
15ba0 6e 0a 73 70 65 63 69 66 69 65 73 20 61 20 70 6c  n.specifies a pl
15bb0 61 63 65 68 6f 6c 64 65 72 20 69 6e 20 74 68 65  aceholder in the
15bc0 20 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20   expression for 
15bd0 61 20 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73  a .value that is
15be0 20 66 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75   filled in at ru
15bf0 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a  ntime using the.
15c00 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c  [sqlite3_bind_bl
15c10 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62  ob() | sqlite3_b
15c20 69 6e 64 28 29 5d 20 66 61 6d 69 6c 79 20 6f 66  ind()] family of
15c30 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
15c40 73 2e 0a 50 61 72 61 6d 65 74 65 72 73 20 63 61  s..Parameters ca
15c50 6e 20 74 61 6b 65 20 73 65 76 65 72 61 6c 20 66  n take several f
15c60 6f 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  orms:.</p>..<blo
15c70 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e  ckquote>.<table>
15c80 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
15c90 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
15ca0 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e  top"><b>?</b><i>
15cb0 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  NNN</i></td><td 
15cc0 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
15cd0 0a 3c 74 64 3e 5e 28 41 20 71 75 65 73 74 69 6f  .<td>^(A questio
15ce0 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20  n mark followed 
15cf0 62 79 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e  by a number <i>N
15d00 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73  NN</i> holds a s
15d10 70 6f 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d  pot for the.NNN-
15d20 74 68 20 70 61 72 61 6d 65 74 65 72 2e 20 20 4e  th parameter.  N
15d30 4e 4e 20 6d 75 73 74 20 62 65 20 62 65 74 77 65  NN must be betwe
15d40 65 6e 20 31 20 61 6e 64 20 5b 53 51 4c 49 54 45  en 1 and [SQLITE
15d50 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
15d60 4d 42 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c  MBER].)^.</td>.<
15d70 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
15d80 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
15d90 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62  gn="top"><b>?</b
15da0 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
15db0 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
15dc0 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20  A question mark 
15dd0 74 68 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c  that is not foll
15de0 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72  owed by a number
15df0 20 63 72 65 61 74 65 73 20 61 20 70 61 72 61 6d   creates a param
15e00 65 74 65 72 0a 77 69 74 68 20 61 20 6e 75 6d 62  eter.with a numb
15e10 65 72 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74  er one greater t
15e20 68 61 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20  han the largest 
15e30 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
15e40 20 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65   already assigne
15e50 64 2e 0a 5e 49 66 20 74 68 69 73 20 6d 65 61 6e  d..^If this mean
15e60 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  s the parameter 
15e70 6e 75 6d 62 65 72 20 69 73 20 67 72 65 61 74 65  number is greate
15e80 72 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d  r than.[SQLITE_M
15e90 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
15ea0 45 52 5d 2c 20 69 74 20 69 73 20 61 6e 20 65 72  ER], it is an er
15eb0 72 6f 72 2e 0a 54 68 69 73 20 70 61 72 61 6d 65  ror..This parame
15ec0 74 65 72 20 66 6f 72 6d 61 74 20 69 73 20 70 72  ter format is pr
15ed0 6f 76 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61  ovided for compa
15ee0 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74  tibility with ot
15ef0 68 65 72 20 64 61 74 61 62 61 73 65 0a 65 6e 67  her database.eng
15f00 69 6e 65 73 2e 20 20 42 75 74 20 62 65 63 61 75  ines.  But becau
15f10 73 65 20 69 74 20 69 73 20 65 61 73 79 20 74 6f  se it is easy to
15f20 20 6d 69 73 63 6f 75 6e 74 20 74 68 65 20 71 75   miscount the qu
15f30 65 73 74 69 6f 6e 20 6d 61 72 6b 73 2c 20 74 68  estion marks, th
15f40 65 0a 75 73 65 20 6f 66 20 74 68 69 73 20 70 61  e.use of this pa
15f50 72 61 6d 65 74 65 72 20 66 6f 72 6d 61 74 20 69  rameter format i
15f60 73 20 64 69 73 63 6f 75 72 61 67 65 64 2e 20 20  s discouraged.  
15f70 50 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20  Programmers are 
15f80 65 6e 63 6f 75 72 61 67 65 64 0a 74 6f 20 75 73  encouraged.to us
15f90 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 79 6d  e one of the sym
15fa0 62 6f 6c 69 63 20 66 6f 72 6d 61 74 73 20 62 65  bolic formats be
15fb0 6c 6f 77 20 6f 72 20 74 68 65 20 3f 4e 4e 4e 20  low or the ?NNN 
15fc0 66 6f 72 6d 61 74 20 61 62 6f 76 65 20 69 6e 73  format above ins
15fd0 74 65 61 64 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72  tead..</td>.</tr
15fe0 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
15ff0 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d  ="right" valign=
16000 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69  "top"><b>:</b><i
16010 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74  >AAAA</i></td><t
16020 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
16030 64 3e 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20  d>.<td>^A colon 
16040 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69  followed by an i
16050 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 68  dentifier name h
16060 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20  olds a spot for 
16070 61 20 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64  a .[sqlite3_bind
16080 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 7c  _parameter_name|
16090 6e 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72 5d  named parameter]
160a0 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 3a   with the name :
160b0 41 41 41 41 2e 20 20 0a 5e 28 4e 61 6d 65 64 20  AAAA.  .^(Named 
160c0 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 61  parameters are a
160d0 6c 73 6f 20 6e 75 6d 62 65 72 65 64 2e 20 54 68  lso numbered. Th
160e0 65 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65  e number assigne
160f0 64 20 69 73 20 6f 6e 65 20 67 72 65 61 74 65 72  d is one greater
16100 20 74 68 61 6e 0a 74 68 65 20 6c 61 72 67 65 73   than.the larges
16110 74 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  t parameter numb
16120 65 72 20 61 6c 72 65 61 64 79 20 61 73 73 69 67  er already assig
16130 6e 65 64 2e 29 5e 20 5e 49 66 20 74 68 69 73 20  ned.)^ ^If this 
16140 6d 65 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65  means the parame
16150 74 65 72 0a 77 6f 75 6c 64 20 62 65 20 61 73 73  ter.would be ass
16160 69 67 6e 65 64 20 61 20 6e 75 6d 62 65 72 20 67  igned a number g
16170 72 65 61 74 65 72 20 74 68 61 6e 20 5b 53 51 4c  reater than [SQL
16180 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
16190 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 0a  _NUMBER], it is.
161a0 61 6e 20 65 72 72 6f 72 2e 20 54 6f 20 61 76 6f  an error. To avo
161b0 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 69 74  id confusion, it
161c0 20 69 73 20 62 65 73 74 20 74 6f 20 61 76 6f 69   is best to avoi
161d0 64 20 6d 69 78 69 6e 67 20 6e 61 6d 65 64 20 61  d mixing named a
161e0 6e 64 20 6e 75 6d 62 65 72 65 64 0a 70 61 72 61  nd numbered.para
161f0 6d 65 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74  meters.</td>.</t
16200 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
16210 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
16220 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c  ="top"><b>@</b><
16230 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c  i>AAAA</i></td><
16240 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
16250 74 64 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61 74 22  td>.<td>^An "at"
16260 20 73 69 67 6e 20 77 6f 72 6b 73 20 65 78 61 63   sign works exac
16270 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e  tly like a colon
16280 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  , except that th
16290 65 20 6e 61 6d 65 20 6f 66 0a 74 68 65 20 70 61  e name of.the pa
162a0 72 61 6d 65 74 65 72 20 63 72 65 61 74 65 64 20  rameter created 
162b0 69 73 20 40 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c  is @AAAA.</td>.<
162c0 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
162d0 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
162e0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62  gn="top"><b>$</b
162f0 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64  ><i>AAAA</i></td
16300 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
16310 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c  </td>.<td>^A dol
16320 6c 61 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65  lar-sign followe
16330 64 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69  d by an identifi
16340 65 72 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c  er name also hol
16350 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20  ds a spot for a 
16360 6e 61 6d 65 64 0a 70 61 72 61 6d 65 74 65 72 20  named.parameter 
16370 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 24 41  with the name $A
16380 41 41 41 2e 20 20 5e 28 54 68 65 20 69 64 65 6e  AAA.  ^(The iden
16390 74 69 66 69 65 72 20 6e 61 6d 65 20 69 6e 20 74  tifier name in t
163a0 68 69 73 20 63 61 73 65 20 63 61 6e 20 69 6e 63  his case can inc
163b0 6c 75 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65  lude.one or more
163c0 20 6f 63 63 75 72 72 65 6e 63 65 73 20 6f 66 20   occurrences of 
163d0 22 3a 3a 22 20 61 6e 64 20 61 20 73 75 66 66 69  "::" and a suffi
163e0 78 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28  x enclosed in "(
163f0 2e 2e 2e 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67  ...)" containing
16400 0a 61 6e 79 20 74 65 78 74 20 61 74 20 61 6c 6c  .any text at all
16410 2e 29 5e 20 20 54 68 69 73 20 73 79 6e 74 61 78  .)^  This syntax
16420 20 69 73 20 74 68 65 20 66 6f 72 6d 20 6f 66 20   is the form of 
16430 61 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20  a variable name 
16440 69 6e 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77  in the.[http://w
16450 77 77 2e 74 63 6c 2d 6c 61 6e 67 2e 6f 72 67 2f  ww.tcl-lang.org/
16460 20 7c 20 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69   | Tcl programmi
16470 6e 67 20 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54  ng language].  T
16480 68 65 20 70 72 65 73 65 6e 63 65 0a 6f 66 20 74  he presence.of t
16490 68 69 73 20 73 79 6e 74 61 78 20 72 65 73 75 6c  his syntax resul
164a0 74 73 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74  ts from the fact
164b0 20 74 68 61 74 20 53 51 4c 69 74 65 20 69 73 20   that SQLite is 
164c0 72 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65  really a .[Tcl e
164d0 78 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68  xtension] that h
164e0 61 73 20 65 73 63 61 70 65 64 20 69 6e 74 6f 20  as escaped into 
164f0 74 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c  the wild.</td>.<
16500 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
16510 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
16520 5e 50 61 72 61 6d 65 74 65 72 73 20 74 68 61 74  ^Parameters that
16530 20 61 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65   are not assigne
16540 64 20 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b  d values using.[
16550 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
16560 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69  b() | sqlite3_bi
16570 6e 64 28 29 5d 20 61 72 65 20 74 72 65 61 74 65  nd()] are treate
16580 64 0a 61 73 20 4e 55 4c 4c 2e 20 20 54 68 65 20  d.as NULL.  The 
16590 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  [sqlite3_bind_pa
165a0 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 29 5d  rameter_index()]
165b0 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20 62   interface can b
165c0 65 20 75 73 65 64 0a 74 6f 20 74 72 61 6e 73 6c  e used.to transl
165d0 61 74 65 20 61 20 73 79 6d 62 6f 6c 69 63 20 70  ate a symbolic p
165e0 61 72 61 6d 65 74 65 72 20 6e 61 6d 65 20 69 6e  arameter name in
165f0 74 6f 20 69 74 73 20 65 71 75 69 76 61 6c 65 6e  to its equivalen
16600 74 20 6e 75 6d 65 72 69 63 20 69 6e 64 65 78 2e  t numeric index.
16610 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61  </p>..<p>^The ma
16620 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20  ximum parameter 
16630 6e 75 6d 62 65 72 20 69 73 20 73 65 74 20 61 74  number is set at
16640 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 62 79   compile-time by
16650 0a 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58  .the [SQLITE_MAX
16660 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
16670 5d 20 6d 61 63 72 6f 2e 20 20 5e 28 41 6e 20 69  ] macro.  ^(An i
16680 6e 64 69 76 69 64 75 61 6c 20 5b 64 61 74 61 62  ndividual [datab
16690 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a  ase connection].
166a0 44 20 63 61 6e 20 72 65 64 75 63 65 20 69 74 73  D can reduce its
166b0 20 6d 61 78 69 6d 75 6d 20 70 61 72 61 6d 65 74   maximum paramet
166c0 65 72 20 6e 75 6d 62 65 72 20 62 65 6c 6f 77 20  er number below 
166d0 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  the compile-time
166e0 20 6d 61 78 69 6d 75 6d 0a 75 73 69 6e 67 20 74   maximum.using t
166f0 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69  he [sqlite3_limi
16700 74 5d 28 44 2c 20 5b 53 51 4c 49 54 45 5f 4c 49  t](D, [SQLITE_LI
16710 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MIT_VARIABLE_NUM
16720 42 45 52 5d 2c 2e 2e 2e 29 20 69 6e 74 65 72 66  BER],...) interf
16730 61 63 65 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63  ace.)^.</p>..<tc
16740 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69  l>hd_fragment li
16750 6b 65 20 4c 49 4b 45 20 45 53 43 41 50 45 3c 2f  ke LIKE ESCAPE</
16760 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49 4b  tcl>.<h3>The LIK
16770 45 2c 20 47 4c 4f 42 2c 20 52 45 47 45 58 50 2c  E, GLOB, REGEXP,
16780 20 61 6e 64 20 4d 41 54 43 48 20 6f 70 65 72 61   and MATCH opera
16790 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68  tors</h3>.<p>^Th
167a0 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
167b0 64 6f 65 73 20 61 20 70 61 74 74 65 72 6e 20 6d  does a pattern m
167c0 61 74 63 68 69 6e 67 20 63 6f 6d 70 61 72 69 73  atching comparis
167d0 6f 6e 2e 20 5e 54 68 65 20 6f 70 65 72 61 6e 64  on. ^The operand
167e0 0a 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66  .to the right of
167f0 20 74 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74   the LIKE operat
16800 6f 72 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  or contains the 
16810 70 61 74 74 65 72 6e 20 61 6e 64 20 74 68 65 20  pattern and the 
16820 6c 65 66 74 20 68 61 6e 64 0a 6f 70 65 72 61 6e  left hand.operan
16830 64 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 73  d contains the s
16840 74 72 69 6e 67 20 74 6f 20 6d 61 74 63 68 20 61  tring to match a
16850 67 61 69 6e 73 74 20 74 68 65 20 70 61 74 74 65  gainst the patte
16860 72 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74  rn...<tcl>hd_put
16870 73 20 22 5e 41 20 70 65 72 63 65 6e 74 20 73 79  s "^A percent sy
16880 6d 62 6f 6c 20 28 5c 22 25 5c 22 29 20 69 6e 20  mbol (\"%\") in 
16890 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e  the LIKE pattern
168a0 20 6d 61 74 63 68 65 73 20 61 6e 79 0a 73 65 71   matches any.seq
168b0 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f 72  uence of zero or
168c0 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65 72 73   more characters
168d0 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 2e 20   in the string. 
168e0 20 5e 41 6e 20 75 6e 64 65 72 73 63 6f 72 65 0a   ^An underscore.
168f0 28 5c 22 5f 5c 22 29 20 69 6e 20 74 68 65 20 4c  (\"_\") in the L
16900 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61 74 63  IKE pattern matc
16910 68 65 73 20 61 6e 79 20 73 69 6e 67 6c 65 20 63  hes any single c
16920 68 61 72 61 63 74 65 72 20 69 6e 20 74 68 65 0a  haracter in the.
16930 73 74 72 69 6e 67 2e 20 20 5e 28 41 6e 79 20 6f  string.  ^(Any o
16940 74 68 65 72 20 63 68 61 72 61 63 74 65 72 20 6d  ther character m
16950 61 74 63 68 65 73 20 69 74 73 65 6c 66 20 6f 72  atches itself or
16960 20 69 74 73 20 6c 6f 77 65 72 2f 75 70 70 65 72   its lower/upper
16970 20 63 61 73 65 0a 65 71 75 69 76 61 6c 65 6e 74   case.equivalent
16980 20 28 69 2e 65 2e 20 63 61 73 65 2d 69 6e 73 65   (i.e. case-inse
16990 6e 73 69 74 69 76 65 20 6d 61 74 63 68 69 6e 67  nsitive matching
169a0 29 2e 29 5e 0a 0a 3c 75 3e 49 6d 70 6f 72 74 61  ).)^..<u>Importa
169b0 6e 74 20 4e 6f 74 65 3a 3c 2f 75 3e 20 5e 53 51  nt Note:</u> ^SQ
169c0 4c 69 74 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73  Lite only.unders
169d0 74 61 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77 65  tands upper/lowe
169e0 72 20 63 61 73 65 20 66 6f 72 20 41 53 43 49 49  r case for ASCII
169f0 20 63 68 61 72 61 63 74 65 72 73 20 62 79 20 64   characters by d
16a00 65 66 61 75 6c 74 2e 20 20 5e 54 68 65 0a 4c 49  efault.  ^The.LI
16a10 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63  KE operator is c
16a20 61 73 65 20 73 65 6e 73 69 74 69 76 65 20 62 79  ase sensitive by
16a30 20 64 65 66 61 75 6c 74 20 66 6f 72 20 75 6e 69   default for uni
16a40 63 6f 64 65 20 63 68 61 72 61 63 74 65 72 73 20  code characters 
16a50 74 68 61 74 20 61 72 65 0a 62 65 79 6f 6e 64 20  that are.beyond 
16a60 74 68 65 20 41 53 43 49 49 20 72 61 6e 67 65 2e  the ASCII range.
16a70 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 5e    For example,.^
16a80 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 3c  the expression <
16a90 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26  b>'a'&nbsp;LIKE&
16aa0 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20  nbsp;'A'</b>.is 
16ab0 54 52 55 45 20 62 75 74 20 3c 62 3e 27 26 61 65  TRUE but <b>'&ae
16ac0 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26  lig;'&nbsp;LIKE&
16ad0 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f  nbsp;'&AElig;'</
16ae0 62 3e 20 69 73 20 46 41 4c 53 45 2e 22 3c 2f 74  b> is FALSE."</t
16af0 63 6c 3e 0a 54 68 65 20 49 43 55 20 65 78 74 65  cl>.The ICU exte
16b00 6e 73 69 6f 6e 20 74 6f 20 53 51 4c 69 74 65 20  nsion to SQLite 
16b10 69 6e 63 6c 75 64 65 73 20 61 6e 20 65 6e 68 61  includes an enha
16b20 6e 63 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20  nced version of 
16b30 74 68 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f  the.LIKE operato
16b40 72 20 74 68 61 74 20 64 6f 65 73 20 63 61 73 65  r that does case
16b50 20 66 6f 6c 64 69 6e 67 20 61 63 72 6f 73 73 20   folding across 
16b60 61 6c 6c 20 75 6e 69 63 6f 64 65 20 63 68 61 72  all unicode char
16b70 61 63 74 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  acters.</p>..<p>
16b80 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c  ^If the optional
16b90 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69   ESCAPE clause i
16ba0 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20  s present, then 
16bb0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 66  the expression.f
16bc0 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 45 53 43  ollowing the ESC
16bd0 41 50 45 20 6b 65 79 77 6f 72 64 20 6d 75 73 74  APE keyword must
16be0 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20 73   evaluate to a s
16bf0 74 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67  tring consisting
16c00 20 6f 66 0a 61 20 73 69 6e 67 6c 65 20 63 68 61   of.a single cha
16c10 72 61 63 74 65 72 2e 20 5e 54 68 69 73 20 63 68  racter. ^This ch
16c20 61 72 61 63 74 65 72 20 6d 61 79 20 62 65 20 75  aracter may be u
16c30 73 65 64 20 69 6e 20 74 68 65 20 4c 49 4b 45 20  sed in the LIKE 
16c40 70 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75  pattern.to inclu
16c50 64 65 20 6c 69 74 65 72 61 6c 20 70 65 72 63 65  de literal perce
16c60 6e 74 20 6f 72 20 75 6e 64 65 72 73 63 6f 72 65  nt or underscore
16c70 20 63 68 61 72 61 63 74 65 72 73 2e 20 5e 54 68   characters. ^Th
16c80 65 20 65 73 63 61 70 65 0a 63 68 61 72 61 63 74  e escape.charact
16c90 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  er followed by a
16ca0 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20   percent symbol 
16cb0 28 25 29 2c 20 75 6e 64 65 72 73 63 6f 72 65 20  (%), underscore 
16cc0 28 5f 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e 64  (_), or a second
16cd0 0a 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65  .instance of the
16ce0 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65   escape characte
16cf0 72 20 69 74 73 65 6c 66 20 6d 61 74 63 68 65 73  r itself matches
16d00 20 61 0a 6c 69 74 65 72 61 6c 20 70 65 72 63 65   a.literal perce
16d10 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72  nt symbol, under
16d20 73 63 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e 67  score, or a sing
16d30 6c 65 20 65 73 63 61 70 65 20 63 68 61 72 61 63  le escape charac
16d40 74 65 72 2c 0a 72 65 73 70 65 63 74 69 76 65 6c  ter,.respectivel
16d50 79 2e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66 69  y...<p>^The infi
16d60 78 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  x LIKE operator 
16d70 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
16d80 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61 70  y calling the.ap
16d90 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
16da0 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20  d SQL functions 
16db0 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c  [like(<i>Y</i>,<
16dc0 69 3e 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69  i>X</i>)] or.[li
16dd0 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58  ke(<i>Y</i>,<i>X
16de0 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c  </i>,<i>Z</i>)]<
16df0 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  /a>.</p>..<p>^Th
16e00 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
16e10 63 61 6e 20 62 65 20 6d 61 64 65 20 63 61 73 65  can be made case
16e20 20 73 65 6e 73 69 74 69 76 65 20 75 73 69 6e 67   sensitive using
16e30 20 74 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73 69   the.[case_sensi
16e40 74 69 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d 61  tive_like pragma
16e50 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ].</p>..<tcl>hd_
16e60 66 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47 4c  fragment glob GL
16e70 4f 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  OB</tcl>.<p>^The
16e80 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20 69   GLOB operator i
16e90 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49 4b  s similar to LIK
16ea0 45 20 62 75 74 20 75 73 65 73 20 74 68 65 20 55  E but uses the U
16eb0 6e 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69 6e  nix.file globbin
16ec0 67 20 73 79 6e 74 61 78 20 66 6f 72 20 69 74 73  g syntax for its
16ed0 20 77 69 6c 64 63 61 72 64 73 2e 20 20 5e 41 6c   wildcards.  ^Al
16ee0 73 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61 73 65  so, GLOB is case
16ef0 0a 73 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c 69  .sensitive, unli
16f00 6b 65 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68 20  ke LIKE.  ^Both 
16f10 47 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61  GLOB and LIKE ma
16f20 79 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  y be preceded by
16f30 0a 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64  .the NOT keyword
16f40 20 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73   to invert the s
16f50 65 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73 74  ense of the test
16f60 2e 20 20 5e 54 68 65 20 69 6e 66 69 78 20 47 4c  .  ^The infix GL
16f70 4f 42 20 0a 6f 70 65 72 61 74 6f 72 20 69 73 20  OB .operator is 
16f80 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63  implemented by c
16f90 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74  alling the funct
16fa0 69 6f 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f  ion.[glob(<i>Y</
16fb0 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e  i>,<i>X</i>)] an
16fc0 64 20 63 61 6e 20 62 65 20 6d 6f 64 69 66 69 65  d can be modifie
16fd0 64 20 62 79 20 6f 76 65 72 72 69 64 69 6e 67 0a  d by overriding.
16fe0 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f  that function.</
16ff0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
17000 6d 65 6e 74 20 72 65 67 65 78 70 20 52 45 47 45  ment regexp REGE
17010 58 50 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  XP</tcl>.<p>^The
17020 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72   REGEXP operator
17030 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79   is a special sy
17040 6e 74 61 78 20 66 6f 72 20 74 68 65 20 72 65 67  ntax for the reg
17050 65 78 70 28 29 0a 75 73 65 72 20 66 75 6e 63 74  exp().user funct
17060 69 6f 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78 70  ion.  ^No regexp
17070 28 29 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  () user function
17080 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 64   is defined by d
17090 65 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75 73  efault.and so us
170a0 65 20 6f 66 20 74 68 65 20 52 45 47 45 58 50 20  e of the REGEXP 
170b0 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e 6f  operator will no
170c0 72 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20 69 6e  rmally result in
170d0 20 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61 67   an.error messag
170e0 65 2e 20 20 5e 49 66 20 61 6e 20 5b 61 70 70 6c  e.  ^If an [appl
170f0 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
17100 53 51 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e 61  SQL function] na
17110 6d 65 64 20 22 72 65 67 65 78 70 22 0a 69 73 20  med "regexp".is 
17120 61 64 64 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  added at run-tim
17130 65 2c 20 74 68 65 6e 20 74 68 65 20 22 3c 69 3e  e, then the "<i>
17140 58 3c 2f 69 3e 20 52 45 47 45 58 50 20 3c 69 3e  X</i> REGEXP <i>
17150 59 3c 2f 69 3e 22 20 6f 70 65 72 61 74 6f 72 20  Y</i>" operator 
17160 77 69 6c 6c 0a 62 65 20 69 6d 70 6c 65 6d 65 6e  will.be implemen
17170 74 65 64 20 61 73 20 61 20 63 61 6c 6c 20 74 6f  ted as a call to
17180 20 22 72 65 67 65 78 70 28 3c 69 3e 59 3c 2f 69   "regexp(<i>Y</i
17190 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 22 2e 3c 2f 70  >,<i>X</i>)".</p
171a0 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
171b0 65 6e 74 20 6d 61 74 63 68 20 4d 41 54 43 48 3c  ent match MATCH<
171c0 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 4d 41  /tcl>.<p>^The MA
171d0 54 43 48 20 6f 70 65 72 61 74 6f 72 20 69 73 20  TCH operator is 
171e0 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78  a special syntax
171f0 20 66 6f 72 20 74 68 65 20 6d 61 74 63 68 28 29   for the match()
17200 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66  .application-def
17210 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 2e 20 20  ined function.  
17220 5e 54 68 65 20 64 65 66 61 75 6c 74 20 6d 61 74  ^The default mat
17230 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6d  ch() function im
17240 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 72 61 69  plementation.rai
17250 73 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  ses an exception
17260 20 61 6e 64 20 69 73 20 6e 6f 74 20 72 65 61 6c   and is not real
17270 6c 79 20 75 73 65 66 75 6c 20 66 6f 72 20 61 6e  ly useful for an
17280 79 74 68 69 6e 67 2e 0a 5e 42 75 74 20 65 78 74  ything..^But ext
17290 65 6e 73 69 6f 6e 73 20 63 61 6e 20 6f 76 65 72  ensions can over
172a0 72 69 64 65 20 74 68 65 20 6d 61 74 63 68 28 29  ride the match()
172b0 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 6d   function with m
172c0 6f 72 65 0a 68 65 6c 70 66 75 6c 20 6c 6f 67 69  ore.helpful logi
172d0 63 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  c.</p>..<tcl>hd_
172e0 66 72 61 67 6d 65 6e 74 20 62 65 74 77 65 65 6e  fragment between
172f0 20 42 45 54 57 45 45 4e 3c 2f 74 63 6c 3e 0a 3c   BETWEEN</tcl>.<
17300 68 33 3e 54 68 65 20 42 45 54 57 45 45 4e 20 6f  h3>The BETWEEN o
17310 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 3c 70 3e  perator</h3>.<p>
17320 5e 28 54 68 65 20 42 45 54 57 45 45 4e 20 6f 70  ^(The BETWEEN op
17330 65 72 61 74 6f 72 20 69 73 20 6c 6f 67 69 63 61  erator is logica
17340 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e 74 20 74  lly equivalent t
17350 6f 20 61 20 70 61 69 72 20 6f 66 20 63 6f 6d 70  o a pair of comp
17360 61 72 69 73 6f 6e 73 2e 0a 22 3c 69 3e 78 3c 2f  arisons.."<i>x</
17370 69 3e 20 3c 62 3e 42 45 54 57 45 45 4e 3c 2f 62  i> <b>BETWEEN</b
17380 3e 20 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e  > <i>y</i> <b>AN
17390 44 3c 2f 62 3e 20 3c 69 3e 7a 3c 2f 69 3e 22 20  D</b> <i>z</i>" 
173a0 69 73 20 0a 65 71 75 69 76 61 6c 65 6e 74 20 74  is .equivalent t
173b0 6f 20 0a 22 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26  o ."<i>x</i><b>&
173c0 67 74 3b 3d 3c 2f 62 3e 3c 69 3e 79 3c 2f 69 3e  gt;=</b><i>y</i>
173d0 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 78   <b>AND</b> <i>x
173e0 3c 2f 69 3e 3c 62 3e 26 6c 74 3b 3d 3c 2f 62 3e  </i><b>&lt;=</b>
173f0 3c 69 3e 7a 3c 2f 69 3e 22 20 65 78 63 65 70 74  <i>z</i>" except
17400 0a 74 68 61 74 20 77 69 74 68 20 42 45 54 57 45  .that with BETWE
17410 45 4e 2c 20 74 68 65 20 3c 69 3e 78 3c 2f 69 3e  EN, the <i>x</i>
17420 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6f   expression is o
17430 6e 6c 79 20 65 76 61 6c 75 61 74 65 64 20 6f 6e  nly evaluated on
17440 63 65 2e 29 5e 0a 5e 54 68 65 20 70 72 65 63 65  ce.)^.^The prece
17450 64 65 6e 63 65 20 6f 66 20 74 68 65 20 42 45 54  dence of the BET
17460 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73  WEEN operator is
17470 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
17480 20 70 72 65 63 65 64 65 6e 63 65 0a 61 73 20 6f   precedence.as o
17490 70 65 72 61 74 6f 72 73 20 3c 62 3e 3d 3d 3c 2f  perators <b>==</
174a0 62 3e 20 61 6e 64 20 3c 62 3e 21 3d 3c 2f 62 3e  b> and <b>!=</b>
174b0 20 61 6e 64 20 3c 62 3e 4c 49 4b 45 3c 2f 62 3e   and <b>LIKE</b>
174c0 20 61 6e 64 20 67 72 6f 75 70 73 20 6c 65 66 74   and groups left
174d0 20 74 6f 20 72 69 67 68 74 2e 0a 0a 3c 74 63 6c   to right...<tcl
174e0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73  >hd_fragment cas
174f0 65 20 7b 43 41 53 45 20 65 78 70 72 65 73 73 69  e {CASE expressi
17500 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  on}</tcl>.<h3>Th
17510 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
17520 6e 3c 2f 68 33 3e 0a 3c 70 3e 41 20 43 41 53 45  n</h3>.<p>A CASE
17530 20 65 78 70 72 65 73 73 69 6f 6e 20 73 65 72 76   expression serv
17540 65 73 20 61 20 72 6f 6c 65 20 73 69 6d 69 6c 61  es a role simila
17550 72 20 74 6f 20 49 46 2d 54 48 45 4e 2d 45 4c 53  r to IF-THEN-ELS
17560 45 20 69 6e 20 6f 74 68 65 72 0a 70 72 6f 67 72  E in other.progr
17570 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 73  amming languages
17580 2e 20 20 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69  .  ..<p>The opti
17590 6f 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20  onal expression 
175a0 74 68 61 74 20 6f 63 63 75 72 73 20 69 6e 20 62  that occurs in b
175b0 65 74 77 65 65 6e 20 74 68 65 20 43 41 53 45 20  etween the CASE 
175c0 6b 65 79 77 6f 72 64 20 61 6e 64 20 74 68 65 0a  keyword and the.
175d0 66 69 72 73 74 20 57 48 45 4e 20 6b 65 79 77 6f  first WHEN keywo
175e0 72 64 20 69 73 20 63 61 6c 6c 65 64 20 74 68 65  rd is called the
175f0 20 22 62 61 73 65 22 20 65 78 70 72 65 73 73 69   "base" expressi
17600 6f 6e 2e 20 5e 54 68 65 72 65 20 61 72 65 20 74  on. ^There are t
17610 77 6f 20 62 61 73 69 63 20 66 6f 72 6d 73 0a 6f  wo basic forms.o
17620 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72 65  f the CASE expre
17630 73 73 69 6f 6e 3a 20 74 68 6f 73 65 20 77 69 74  ssion: those wit
17640 68 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73  h a base express
17650 69 6f 6e 20 61 6e 64 20 74 68 6f 73 65 20 77 69  ion and those wi
17660 74 68 6f 75 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61  thout...<p>^In a
17670 20 43 41 53 45 20 77 69 74 68 6f 75 74 20 61 20   CASE without a 
17680 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  base expression,
17690 20 65 61 63 68 20 57 48 45 4e 20 65 78 70 72 65   each WHEN expre
176a0 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
176b0 65 64 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c  ed.and the resul
176c0 74 20 74 72 65 61 74 65 64 20 61 73 20 61 20 62  t treated as a b
176d0 6f 6f 6c 65 61 6e 2c 20 73 74 61 72 74 69 6e 67  oolean, starting
176e0 20 77 69 74 68 20 74 68 65 20 6c 65 66 74 6d 6f   with the leftmo
176f0 73 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 69 6e  st and continuin
17700 67 0a 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20  g.to the right. 
17710 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74  ^The result of t
17720 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  he CASE expressi
17730 6f 6e 20 69 73 20 74 68 65 20 65 76 61 6c 75 61  on is the evalua
17740 74 69 6f 6e 20 6f 66 20 74 68 65 20 54 48 45 4e  tion of the THEN
17750 0a 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74  .expression that
17760 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
17770 74 68 65 20 66 69 72 73 74 20 57 48 45 4e 20 65  the first WHEN e
17780 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 65  xpression that e
17790 76 61 6c 75 61 74 65 73 20 74 6f 0a 74 72 75 65  valuates to.true
177a0 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f  . ^Or, if none o
177b0 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65  f the WHEN expre
177c0 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20  ssions evaluate 
177d0 74 6f 20 74 72 75 65 2c 20 74 68 65 20 72 65 73  to true, the res
177e0 75 6c 74 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e  ult of.evaluatin
177f0 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65  g the ELSE expre
17800 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e  ssion, if any. ^
17810 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 45  If there is no E
17820 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 61  LSE expression a
17830 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57  nd.none of the W
17840 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  HEN expressions 
17850 61 72 65 20 74 72 75 65 2c 20 74 68 65 6e 20 74  are true, then t
17860 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c  he overall resul
17870 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e  t is NULL...<p>^
17880 41 20 4e 55 4c 4c 20 72 65 73 75 6c 74 20 69 73  A NULL result is
17890 20 63 6f 6e 73 69 64 65 72 65 64 20 75 6e 74 72   considered untr
178a0 75 65 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69  ue when evaluati
178b0 6e 67 20 57 48 45 4e 20 74 65 72 6d 73 2e 0a 0a  ng WHEN terms...
178c0 3c 70 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69  <p>^In a CASE wi
178d0 74 68 20 61 20 62 61 73 65 20 65 78 70 72 65 73  th a base expres
178e0 73 69 6f 6e 2c 20 74 68 65 20 62 61 73 65 20 65  sion, the base e
178f0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
17900 6c 75 61 74 65 64 20 6a 75 73 74 0a 6f 6e 63 65  luated just.once
17910 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
17920 69 73 20 63 6f 6d 70 61 72 65 64 20 61 67 61 69  is compared agai
17930 6e 73 74 20 74 68 65 20 65 76 61 6c 75 61 74 69  nst the evaluati
17940 6f 6e 20 6f 66 20 65 61 63 68 20 57 48 45 4e 20  on of each WHEN 
17950 0a 65 78 70 72 65 73 73 69 6f 6e 20 66 72 6f 6d  .expression from
17960 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20   left to right. 
17970 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74  ^The result of t
17980 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  he CASE expressi
17990 6f 6e 20 69 73 20 74 68 65 20 0a 65 76 61 6c 75  on is the .evalu
179a0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 54 48 45  ation of the THE
179b0 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  N expression tha
179c0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
179d0 20 74 68 65 20 66 69 72 73 74 20 57 48 45 4e 0a   the first WHEN.
179e0 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 77  expression for w
179f0 68 69 63 68 20 74 68 65 20 63 6f 6d 70 61 72 69  hich the compari
17a00 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 5e 4f 72  son is true. ^Or
17a10 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  , if none of the
17a20 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e   WHEN.expression
17a30 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20  s evaluate to a 
17a40 76 61 6c 75 65 20 65 71 75 61 6c 20 74 6f 20 74  value equal to t
17a50 68 65 20 62 61 73 65 20 65 78 70 72 65 73 73 69  he base expressi
17a60 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 0a 6f  on, the result.o
17a70 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
17a80 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e   ELSE expression
17a90 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74 68  , if any. ^If th
17aa0 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20 65  ere is no ELSE e
17ab0 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f  xpression and.no
17ac0 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65  ne of the WHEN e
17ad0 78 70 72 65 73 73 69 6f 6e 73 20 70 72 6f 64 75  xpressions produ
17ae0 63 65 20 61 20 72 65 73 75 6c 74 20 65 71 75 61  ce a result equa
17af0 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20 65 78  l to the base ex
17b00 70 72 65 73 73 69 6f 6e 2c 0a 74 68 65 20 6f 76  pression,.the ov
17b10 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 20  erall result is 
17b20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 57 68 65 6e 20  NULL...<p>^When 
17b30 63 6f 6d 70 61 72 69 6e 67 20 61 20 62 61 73 65  comparing a base
17b40 20 65 78 70 72 65 73 73 69 6f 6e 20 61 67 61 69   expression agai
17b50 6e 73 74 20 61 20 57 48 45 4e 20 65 78 70 72 65  nst a WHEN expre
17b60 73 73 69 6f 6e 2c 20 74 68 65 20 73 61 6d 65 0a  ssion, the same.
17b70 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
17b80 63 65 2c 20 61 66 66 69 6e 69 74 79 2c 20 61 6e  ce, affinity, an
17b90 64 20 4e 55 4c 4c 2d 68 61 6e 64 6c 69 6e 67 20  d NULL-handling 
17ba0 72 75 6c 65 73 20 61 70 70 6c 79 20 61 73 20 69  rules apply as i
17bb0 66 20 74 68 65 0a 62 61 73 65 20 65 78 70 72 65  f the.base expre
17bc0 73 73 69 6f 6e 20 61 6e 64 20 57 48 45 4e 20 65  ssion and WHEN e
17bd0 78 70 72 65 73 73 69 6f 6e 20 61 72 65 20 72 65  xpression are re
17be0 73 70 65 63 74 69 76 65 6c 79 20 74 68 65 20 6c  spectively the l
17bf0 65 66 74 2d 20 61 6e 64 0a 72 69 67 68 74 2d 68  eft- and.right-h
17c00 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f 66 20  and operands of 
17c10 61 6e 20 3c 62 69 67 3e 3c 62 3e 3d 3c 2f 62 3e  an <big><b>=</b>
17c20 3c 2f 62 69 67 3e 20 6f 70 65 72 61 74 6f 72 2e  </big> operator.
17c30 3c 2f 70 3e 20 5e 49 66 20 74 68 65 20 62 61 73  </p> ^If the bas
17c40 65 20 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73  e .expression is
17c50 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
17c60 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53  esult of the CAS
17c70 45 20 69 73 20 61 6c 77 61 79 73 20 74 68 65 20  E is always the 
17c80 72 65 73 75 6c 74 20 0a 6f 66 20 65 76 61 6c 75  result .of evalu
17c90 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65  ating the ELSE e
17ca0 78 70 72 65 73 73 69 6f 6e 20 69 66 20 69 74 20  xpression if it 
17cb0 65 78 69 73 74 73 2c 20 6f 72 20 4e 55 4c 4c 20  exists, or NULL 
17cc0 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 2e 0a  if it does not..
17cd0 0a 3c 70 3e 5e 42 6f 74 68 20 66 6f 72 6d 73 20  .<p>^Both forms 
17ce0 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72  of the CASE expr
17cf0 65 73 73 69 6f 6e 20 75 73 65 20 6c 61 7a 79 2c  ession use lazy,
17d00 20 6f 72 20 73 68 6f 72 74 2d 63 69 72 63 75 69   or short-circui
17d10 74 2c 20 0a 65 76 61 6c 75 61 74 69 6f 6e 2e 0a  t, .evaluation..
17d20 0a 3c 70 3e 5e 28 54 68 65 20 6f 6e 6c 79 20 64  .<p>^(The only d
17d30 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
17d40 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
17d50 74 77 6f 20 43 41 53 45 20 65 78 70 72 65 73 73  two CASE express
17d60 69 6f 6e 73 20 69 73 20 74 68 61 74 20 0a 74 68  ions is that .th
17d70 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72 65  e <i>x</i> expre
17d80 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
17d90 65 64 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20  ed exactly once 
17da0 69 6e 20 74 68 65 20 66 69 72 73 74 20 65 78 61  in the first exa
17db0 6d 70 6c 65 20 62 75 74 20 0a 6d 69 67 68 74 20  mple but .might 
17dc0 62 65 20 65 76 61 6c 75 61 74 65 64 20 6d 75 6c  be evaluated mul
17dd0 74 69 70 6c 65 20 74 69 6d 65 73 20 69 6e 20 74  tiple times in t
17de0 68 65 20 73 65 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e  he second:..<ul>
17df0 3c 70 72 65 3e 0a 3c 6c 69 3e 43 41 53 45 20 78  <pre>.<li>CASE x
17e00 20 57 48 45 4e 20 77 31 20 54 48 45 4e 20 72 31   WHEN w1 THEN r1
17e10 20 57 48 45 4e 20 77 32 20 54 48 45 4e 20 72 32   WHEN w2 THEN r2
17e20 20 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 6c 69   ELSE r3 END.<li
17e30 3e 43 41 53 45 20 57 48 45 4e 20 78 3d 77 31 20  >CASE WHEN x=w1 
17e40 54 48 45 4e 20 72 31 20 57 48 45 4e 20 78 3d 77  THEN r1 WHEN x=w
17e50 32 20 54 48 45 4e 20 72 32 20 45 4c 53 45 20 72  2 THEN r2 ELSE r
17e60 33 20 45 4e 44 0a 3c 2f 70 72 65 3e 3c 2f 75 6c  3 END.</pre></ul
17e70 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  >)^...<tcl>hd_fr
17e80 61 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 49 4e  agment in_op {IN
17e90 20 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20   operator} {NOT 
17ea0 49 4e 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63  IN operator}</tc
17eb0 6c 3e 0a 3c 68 33 3e 54 68 65 20 49 4e 20 61 6e  l>.<h3>The IN an
17ec0 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  d NOT IN operato
17ed0 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20  rs</h3>.<p>^The 
17ee0 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70  IN and NOT IN op
17ef0 65 72 61 74 6f 72 73 20 74 61 6b 65 20 61 6e 20  erators take an 
17f00 65 78 70 72 65 73 73 69 6f 6e 20 6f 6e 20 74 68  expression on th
17f10 65 0a 6c 65 66 74 20 61 6e 64 20 61 20 6c 69 73  e.left and a lis
17f20 74 20 6f 66 20 76 61 6c 75 65 73 20 6f 72 20 61  t of values or a
17f30 20 73 75 62 71 75 65 72 79 20 6f 6e 20 74 68 65   subquery on the
17f40 20 72 69 67 68 74 2e 0a 5e 57 68 65 6e 20 74 68   right..^When th
17f50 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  e right operand 
17f60 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20  of an IN or NOT 
17f70 49 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61  IN operator is a
17f80 20 73 75 62 71 75 65 72 79 2c 20 74 68 65 0a 73   subquery, the.s
17f90 75 62 71 75 65 72 79 20 6d 75 73 74 20 68 61 76  ubquery must hav
17fa0 65 20 74 68 65 20 73 61 6d 65 20 6e 75 6d 62 65  e the same numbe
17fb0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20  r of columns as 
17fc0 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e  there are column
17fd0 73 20 69 6e 0a 74 68 65 20 5b 72 6f 77 20 76 61  s in.the [row va
17fe0 6c 75 65 5d 20 6f 66 20 74 68 65 20 6c 65 66 74  lue] of the left
17ff0 20 6f 70 65 72 61 6e 64 2e 20 20 5e 54 68 65 20   operand.  ^The 
18000 73 75 62 71 75 65 72 79 20 6f 6e 20 74 68 65 0a  subquery on the.
18010 72 69 67 68 74 20 6f 66 20 61 6e 20 49 4e 20 6f  right of an IN o
18020 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  r NOT IN operato
18030 72 20 6d 75 73 74 20 62 65 20 61 20 73 63 61 6c  r must be a scal
18040 61 72 20 73 75 62 71 75 65 72 79 20 69 66 20 74  ar subquery if t
18050 68 65 20 6c 65 66 74 0a 65 78 70 72 65 73 73 69  he left.expressi
18060 6f 6e 20 69 73 20 6e 6f 74 20 61 20 5b 72 6f 77  on is not a [row
18070 20 76 61 6c 75 65 5d 20 65 78 70 72 65 73 73 69   value] expressi
18080 6f 6e 2e 0a 5e 49 66 20 74 68 65 20 72 69 67 68  on..^If the righ
18090 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20  t operand of an 
180a0 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65  IN or NOT IN ope
180b0 72 61 74 6f 72 20 69 73 20 61 20 6c 69 73 74 20  rator is a list 
180c0 6f 66 20 76 61 6c 75 65 73 2c 0a 65 61 63 68 20  of values,.each 
180d0 6f 66 20 74 68 6f 73 65 20 76 61 6c 75 65 73 20  of those values 
180e0 6d 75 73 74 20 62 65 20 73 63 61 6c 61 72 73 20  must be scalars 
180f0 61 6e 64 20 74 68 65 20 6c 65 66 74 20 65 78 70  and the left exp
18100 72 65 73 73 69 6f 6e 20 6d 75 73 74 20 61 6c 73  ression must als
18110 6f 0a 62 65 20 61 20 73 63 61 6c 61 72 2e 0a 5e  o.be a scalar..^
18120 54 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73  The right-hand s
18130 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20  ide of an IN or 
18140 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  NOT IN operator 
18150 63 61 6e 20 62 65 20 61 0a 74 61 62 6c 65 20 3c  can be a.table <
18160 69 3e 6e 61 6d 65 3c 2f 69 3e 20 6f 72 20 5b 74  i>name</i> or [t
18170 61 62 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e 63  able-valued func
18180 74 69 6f 6e 5d 20 3c 69 3e 6e 61 6d 65 3c 2f 69  tion] <i>name</i
18190 3e 20 69 6e 20 77 68 69 63 68 20 0a 63 61 73 65  > in which .case
181a0 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
181b0 73 69 64 65 20 69 73 20 75 6e 64 65 72 73 74 6f  side is understo
181c0 6f 64 20 74 6f 20 62 65 20 73 75 62 71 75 65 72  od to be subquer
181d0 79 20 6f 66 0a 74 68 65 20 66 6f 72 6d 20 22 28  y of.the form "(
181e0 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 3c 69  SELECT * FROM <i
181f0 3e 6e 61 6d 65 3c 2f 69 3e 29 22 2e 0a 5e 57 68  >name</i>)"..^Wh
18200 65 6e 20 74 68 65 20 72 69 67 68 74 20 6f 70 65  en the right ope
18210 72 61 6e 64 20 69 73 20 61 6e 20 65 6d 70 74 79  rand is an empty
18220 20 73 65 74 2c 20 74 68 65 20 72 65 73 75 6c 74   set, the result
18230 20 6f 66 20 49 4e 20 69 73 20 66 61 6c 73 65 20   of IN is false 
18240 61 6e 64 20 74 68 65 0a 72 65 73 75 6c 74 20 6f  and the.result o
18250 66 20 4e 4f 54 20 49 4e 20 69 73 20 74 72 75 65  f NOT IN is true
18260 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
18270 74 68 65 20 6c 65 66 74 20 6f 70 65 72 61 6e 64  the left operand
18280 20 61 6e 64 20 65 76 65 6e 20 69 66 20 74 68 65   and even if the
18290 0a 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 69 73  .left operand is
182a0 20 4e 55 4c 4c 2e 0a 3c 70 3e 5e 28 54 68 65 20   NULL..<p>^(The 
182b0 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 49 4e 20  result of an IN 
182c0 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  or NOT IN operat
182d0 6f 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  or is determined
182e0 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   by the followin
182f0 67 0a 6d 61 74 72 69 78 3a 0a 0a 3c 63 65 6e 74  g.matrix:..<cent
18300 65 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  er>.<table borde
18310 72 3d 31 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 4c 65  r=1>.<tr>.<th>Le
18320 66 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69  ft operand <br>i
18330 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74  s NULL.<th>Right
18340 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 63 6f 6e   operand <br>con
18350 74 61 69 6e 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52  tains NULL.<th>R
18360 69 67 68 74 20 6f 70 65 72 61 6e 64 20 3c 62 72  ight operand <br
18370 3e 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74  >is an empty set
18380 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e  .<th>Left operan
18390 64 20 66 6f 75 6e 64 20 3c 62 72 3e 77 69 74 68  d found <br>with
183a0 69 6e 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  in right operand
183b0 0a 3c 74 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c  .<th>Result of <
183c0 62 72 3e 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c  br>IN operator.<
183d0 74 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72  th>Result of <br
183e0 3e 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72  >NOT IN operator
183f0 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
18400 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
18410 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
18420 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
18430 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
18440 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
18450 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
18460 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e  >false.<td align
18470 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c  ="center">true.<
18480 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  tr>.<td align="c
18490 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20  enter">does not 
184a0 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e  matter.<td align
184b0 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
184c0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
184d0 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  yes.<td align="c
184e0 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
184f0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c  ign="center">fal
18500 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  se.<td align="ce
18510 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a  nter">true.<tr>.
18520 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
18530 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
18540 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f  "center">does no
18550 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69  t matter.<td ali
18560 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
18570 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
18580 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d  ">yes.<td align=
18590 22 63 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74  "center">true.<t
185a0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
185b0 3e 66 61 6c 73 65 0a 3c 74 72 3e 0a 3c 74 64 20  >false.<tr>.<td 
185c0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
185d0 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
185e0 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69  ter">yes.<td ali
185f0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
18600 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
18610 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
18620 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64  center">NULL.<td
18630 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
18640 4e 55 4c 4c 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  NULL.<tr>.<td al
18650 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73  ign="center">yes
18660 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
18670 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74  er">does not mat
18680 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ter.<td align="c
18690 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
186a0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65  ign="center">doe
186b0 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64  s not matter.<td
186c0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
186d0 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  NULL.<td align="
186e0 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 2f 74  center">NULL.</t
186f0 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29  able>.</center>)
18700 5e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74  ^..<p>^Note that
18710 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74   SQLite allows t
18720 68 65 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64  he parenthesized
18730 20 6c 69 73 74 20 6f 66 20 73 63 61 6c 61 72 20   list of scalar 
18740 76 61 6c 75 65 73 20 6f 6e 0a 74 68 65 20 72 69  values on.the ri
18750 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  ght-hand side of
18760 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
18770 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20   operator to be 
18780 61 6e 20 65 6d 70 74 79 20 6c 69 73 74 20 62 75  an empty list bu
18790 74 0a 6d 6f 73 74 20 6f 74 68 65 72 20 53 51 4c  t.most other SQL
187a0 20 64 61 74 61 62 61 73 65 20 64 61 74 61 62 61   database databa
187b0 73 65 20 65 6e 67 69 6e 65 73 20 61 6e 64 20 74  se engines and t
187c0 68 65 20 53 51 4c 39 32 20 73 74 61 6e 64 61 72  he SQL92 standar
187d0 64 20 72 65 71 75 69 72 65 0a 74 68 65 20 6c 69  d require.the li
187e0 73 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 74  st to contain at
187f0 20 6c 65 61 73 74 20 6f 6e 65 20 65 6c 65 6d 65   least one eleme
18800 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 61 62  nt.</p>..<h3>Tab
18810 6c 65 20 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c  le Column Names<
18820 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6c 75  /h3>..<p>^A colu
18830 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 61  mn name can be a
18840 6e 79 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 20  ny of the names 
18850 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20 5b  defined in the [
18860 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74  CREATE TABLE].st
18870 61 74 65 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f  atement or one o
18880 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
18890 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69  special identifi
188a0 65 72 73 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f  ers: "<b>ROWID</
188b0 62 3e 22 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e  b>",."<b>OID</b>
188c0 22 2c 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44  ", or "<b>_ROWID
188d0 5f 3c 2f 62 3e 22 2e 0a 5e 54 68 65 20 74 68 72  _</b>"..^The thr
188e0 65 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74  ee special ident
188f0 69 66 69 65 72 73 20 64 65 73 63 72 69 62 65 20  ifiers describe 
18900 74 68 65 0a 75 6e 69 71 75 65 20 69 6e 74 65 67  the.unique integ
18910 65 72 20 6b 65 79 20 28 74 68 65 20 5b 72 6f 77  er key (the [row
18920 69 64 5d 29 20 61 73 73 6f 63 69 61 74 65 64 20  id]) associated 
18930 77 69 74 68 20 65 76 65 72 79 20 0a 72 6f 77 20  with every .row 
18940 6f 66 20 65 76 65 72 79 20 74 61 62 6c 65 20 61  of every table a
18950 6e 64 20 73 6f 20 61 72 65 20 6e 6f 74 20 61 76  nd so are not av
18960 61 69 6c 61 62 6c 65 20 6f 6e 20 5b 57 49 54 48  ailable on [WITH
18970 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
18980 73 2e 0a 5e 54 68 65 20 73 70 65 63 69 61 6c 20  s..^The special 
18990 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c 79  identifiers only
189a0 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 72 6f   refer to the ro
189b0 77 20 6b 65 79 20 69 66 20 74 68 65 20 5b 43 52  w key if the [CR
189c0 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74  EATE TABLE].stat
189d0 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 64  ement does not d
189e0 65 66 69 6e 65 20 61 20 72 65 61 6c 20 63 6f 6c  efine a real col
189f0 75 6d 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d  umn with the sam
18a00 65 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 72 6f 77  e name..^The row
18a10 69 64 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  id can be used a
18a20 6e 79 77 68 65 72 65 20 61 20 72 65 67 75 6c 61  nywhere a regula
18a30 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e 20 62 65 20  r.column can be 
18a40 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  used.</p>..<tcl>
18a50 68 64 5f 66 72 61 67 6d 65 6e 74 20 65 78 69 73  hd_fragment exis
18a60 74 73 5f 6f 70 20 7b 45 58 49 53 54 53 20 6f 70  ts_op {EXISTS op
18a70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 45 58 49  erator} {NOT EXI
18a80 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74  STS operator}</t
18a90 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45 58 49 53  cl>.<h3>The EXIS
18aa0 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e  TS operator</h3>
18ab0 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49 53 54 53  ..<p>^The EXISTS
18ac0 20 6f 70 65 72 61 74 6f 72 20 61 6c 77 61 79 73   operator always
18ad0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6f 6e   evaluates to on
18ae0 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
18af0 20 76 61 6c 75 65 73 20 30 20 0a 61 6e 64 20 31   values 0 .and 1
18b00 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20  . ^If executing 
18b10 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
18b20 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64 20 61  ment specified a
18b30 73 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  s the right-hand
18b40 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65   .operand of the
18b50 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
18b60 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6f 6e   would return on
18b70 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 2c 20  e or more rows, 
18b80 74 68 65 6e 20 74 68 65 0a 45 58 49 53 54 53 20  then the.EXISTS 
18b90 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74  operator evaluat
18ba0 65 73 20 74 6f 20 31 2e 20 5e 49 66 20 65 78 65  es to 1. ^If exe
18bb0 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43  cuting the SELEC
18bc0 54 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 0a 6e  T would return.n
18bd0 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 2c 20 74  o rows at all, t
18be0 68 65 6e 20 74 68 65 20 45 58 49 53 54 53 20 6f  hen the EXISTS o
18bf0 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
18c00 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54 68  s to 0. ..<p>^Th
18c10 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
18c20 6d 6e 73 20 69 6e 20 65 61 63 68 20 72 6f 77 20  mns in each row 
18c30 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
18c40 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
18c50 0a 28 69 66 20 61 6e 79 29 20 61 6e 64 20 74 68  .(if any) and th
18c60 65 20 73 70 65 63 69 66 69 63 20 76 61 6c 75 65  e specific value
18c70 73 20 72 65 74 75 72 6e 65 64 20 68 61 76 65 20  s returned have 
18c80 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65  no effect on the
18c90 20 72 65 73 75 6c 74 73 0a 6f 66 20 74 68 65 20   results.of the 
18ca0 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 2e  EXISTS operator.
18cb0 20 5e 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c   ^In particular,
18cc0 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 69 6e 67   rows containing
18cd0 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
18ce0 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20 61 6e 79  .not handled any
18cf0 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66 72 6f   differently fro
18d00 6d 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20 4e  m rows without N
18d10 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c 74 63  ULL values...<tc
18d20 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 75  l>hd_fragment su
18d30 62 71 20 7b 53 75 62 71 75 65 72 69 65 73 7d 3c  bq {Subqueries}<
18d40 2f 74 63 6c 3e 0a 3c 68 33 3e 53 75 62 71 75 65  /tcl>.<h3>Subque
18d50 72 79 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f  ry Expressions</
18d60 68 33 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45  h3>..<p>^A [SELE
18d70 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 65 6e  CT] statement en
18d80 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65 6e 74  closed in parent
18d90 68 65 73 65 73 20 69 73 20 61 20 73 75 62 71 75  heses is a subqu
18da0 65 72 79 2e 0a 5e 41 6c 6c 20 74 79 70 65 73 20  ery..^All types 
18db0 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  of SELECT statem
18dc0 65 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 61  ent, including.a
18dd0 67 67 72 65 67 61 74 65 20 61 6e 64 20 63 6f 6d  ggregate and com
18de0 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 71 75 65  pound SELECT que
18df0 72 69 65 73 20 28 71 75 65 72 69 65 73 20 77 69  ries (queries wi
18e00 74 68 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65  th keywords like
18e10 0a 55 4e 49 4f 4e 20 6f 72 20 45 58 43 45 50 54  .UNION or EXCEPT
18e20 29 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 61 73  ) are allowed as
18e30 20 73 63 61 6c 61 72 20 73 75 62 71 75 65 72 69   scalar subqueri
18e40 65 73 2e 0a 5e 54 68 65 20 76 61 6c 75 65 20 6f  es..^The value o
18e50 66 20 61 20 73 75 62 71 75 65 72 79 20 65 78 70  f a subquery exp
18e60 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 66  ression is the f
18e70 69 72 73 74 20 72 6f 77 20 6f 66 20 74 68 65 20  irst row of the 
18e80 72 65 73 75 6c 74 0a 66 72 6f 6d 20 74 68 65 20  result.from the 
18e90 65 6e 63 6c 6f 73 65 64 20 5b 53 45 4c 45 43 54  enclosed [SELECT
18ea0 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 49 6e  ] statement..^In
18eb0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61 6e   other words, an
18ec0 20 69 6d 70 6c 69 65 64 20 22 4c 49 4d 49 54 20   implied "LIMIT 
18ed0 31 22 20 69 73 20 61 64 64 65 64 20 74 6f 20 74  1" is added to t
18ee0 68 65 20 73 75 62 71 75 65 72 79 2c 20 6f 76 65  he subquery, ove
18ef0 72 72 69 64 69 6e 67 0a 61 6e 20 65 78 70 6c 69  rriding.an expli
18f00 63 69 74 6c 79 20 63 6f 64 65 64 20 4c 49 4d 49  citly coded LIMI
18f10 54 2e 0a 5e 54 68 65 20 76 61 6c 75 65 20 6f 66  T..^The value of
18f20 20 61 20 73 75 62 71 75 65 72 79 20 65 78 70 72   a subquery expr
18f30 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 20 69  ession is NULL i
18f40 66 20 74 68 65 20 65 6e 63 6c 6f 73 65 64 0a 5b  f the enclosed.[
18f50 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
18f60 74 20 72 65 74 75 72 6e 73 20 6e 6f 20 72 6f 77  t returns no row
18f70 73 2e 0a 0a 3c 70 3e 41 20 73 75 62 71 75 65 72  s...<p>A subquer
18f80 79 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61  y that returns a
18f90 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 69   single column i
18fa0 73 20 61 20 73 63 61 6c 61 72 20 73 75 62 71 75  s a scalar subqu
18fb0 65 72 79 20 61 6e 64 20 63 61 6e 0a 62 65 20 75  ery and can.be u
18fc0 73 65 64 20 6d 6f 73 74 20 61 6e 79 77 68 65 72  sed most anywher
18fd0 65 2e 0a 5e 41 20 73 75 62 71 75 65 72 79 20 74  e..^A subquery t
18fe0 68 61 74 20 72 65 74 75 72 6e 73 20 74 77 6f 20  hat returns two 
18ff0 6f 72 20 6d 6f 72 65 20 63 6f 6c 75 6d 6e 73 20  or more columns 
19000 69 73 20 61 20 5b 72 6f 77 20 76 61 6c 75 65 5d  is a [row value]
19010 0a 73 75 62 71 75 65 72 79 20 61 6e 64 20 63 61  .subquery and ca
19020 6e 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61  n only be used a
19030 73 20 74 68 65 20 6f 70 65 72 61 6e 64 20 6f 66  s the operand of
19040 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70   a comparison op
19050 65 72 61 74 6f 72 2e 0a 0a 3c 74 63 6c 3e 68 64  erator...<tcl>hd
19060 5f 66 72 61 67 6d 65 6e 74 20 63 6f 73 75 62 20  _fragment cosub 
19070 7b 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71  {correlated subq
19080 75 65 72 69 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  ueries}</tcl>.<h
19090 33 3e 43 6f 72 72 65 6c 61 74 65 64 20 53 75 62  3>Correlated Sub
190a0 71 75 65 72 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70  queries</h3>..<p
190b0 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61  >^A [SELECT] sta
190c0 74 65 6d 65 6e 74 20 75 73 65 64 20 61 73 20 65  tement used as e
190d0 69 74 68 65 72 20 61 20 73 63 61 6c 61 72 20 73  ither a scalar s
190e0 75 62 71 75 65 72 79 20 6f 72 20 61 73 20 74 68  ubquery or as th
190f0 65 20 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70  e .right-hand op
19100 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 2c 20  erand of an IN, 
19110 4e 4f 54 20 49 4e 20 6f 72 20 45 58 49 53 54 53  NOT IN or EXISTS
19120 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
19130 63 6f 6e 74 61 69 6e 20 0a 72 65 66 65 72 65 6e  contain .referen
19140 63 65 73 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  ces to columns i
19150 6e 20 74 68 65 20 6f 75 74 65 72 20 71 75 65 72  n the outer quer
19160 79 2e 20 53 75 63 68 20 61 20 73 75 62 71 75 65  y. Such a subque
19170 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 61  ry is known as.a
19180 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71   correlated subq
19190 75 65 72 79 2e 20 5e 41 20 63 6f 72 72 65 6c 61  uery. ^A correla
191a0 74 65 64 20 73 75 62 71 75 65 72 79 20 69 73 20  ted subquery is 
191b0 72 65 65 76 61 6c 75 61 74 65 64 20 65 61 63 68  reevaluated each
191c0 20 74 69 6d 65 0a 69 74 73 20 72 65 73 75 6c 74   time.its result
191d0 20 69 73 20 72 65 71 75 69 72 65 64 2e 20 5e 41   is required. ^A
191e0 6e 20 75 6e 63 6f 72 72 65 6c 61 74 65 64 20 73  n uncorrelated s
191f0 75 62 71 75 65 72 79 20 69 73 20 65 76 61 6c 75  ubquery is evalu
19200 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63 65 0a 61  ated only once.a
19210 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 65  nd the result re
19220 75 73 65 64 20 61 73 20 6e 65 63 65 73 73 61 72  used as necessar
19230 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  y...<tcl>hd_frag
19240 6d 65 6e 74 20 63 61 73 74 65 78 70 72 20 7b 43  ment castexpr {C
19250 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 7d 20  AST expression} 
19260 7b 43 41 53 54 7d 20 7b 63 61 73 74 7d 20 7b 43  {CAST} {cast} {C
19270 41 53 54 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74  AST operator}</t
19280 63 6c 3e 0a 3c 68 33 3e 43 41 53 54 20 65 78 70  cl>.<h3>CAST exp
19290 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c  ressions</h3>..<
192a0 70 3e 41 20 43 41 53 54 20 65 78 70 72 65 73 73  p>A CAST express
192b0 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
192c0 22 43 41 53 54 28 3c 69 3e 65 78 70 72 3c 2f 69  "CAST(<i>expr</i
192d0 3e 20 41 53 20 3c 69 3e 74 79 70 65 2d 6e 61 6d  > AS <i>type-nam
192e0 65 3c 2f 69 3e 29 22 0a 69 73 20 75 73 65 64 20  e</i>)".is used 
192f0 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76  to convert the v
19300 61 6c 75 65 20 6f 66 20 3c 69 3e 65 78 70 72 3c  alue of <i>expr<
19310 2f 69 3e 20 74 6f 20 0a 61 20 64 69 66 66 65 72  /i> to .a differ
19320 65 6e 74 20 5b 73 74 6f 72 61 67 65 20 63 6c 61  ent [storage cla
19330 73 73 5d 20 73 70 65 63 69 66 69 65 64 20 62 79  ss] specified by
19340 20 3c 79 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61   <yyterm>type-na
19350 6d 65 3c 2f 79 79 74 65 72 6d 3e 2e 0a 5e 41 20  me</yyterm>..^A 
19360 43 41 53 54 20 63 6f 6e 76 65 72 73 69 6f 6e 20  CAST conversion 
19370 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68  is similar to th
19380 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 68 61  e conversion tha
19390 74 20 74 61 6b 65 73 0a 70 6c 61 63 65 20 77 68  t takes.place wh
193a0 65 6e 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66  en a [column aff
193b0 69 6e 69 74 79 5d 20 69 73 20 61 70 70 6c 69 65  inity] is applie
193c0 64 20 74 6f 20 61 20 76 61 6c 75 65 20 65 78 63  d to a value exc
193d0 65 70 74 20 74 68 61 74 20 77 69 74 68 0a 74 68  ept that with.th
193e0 65 20 43 41 53 54 20 6f 70 65 72 61 74 6f 72 20  e CAST operator 
193f0 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61  the conversion a
19400 6c 77 61 79 73 20 74 61 6b 65 73 20 70 6c 61 63  lways takes plac
19410 65 20 65 76 65 6e 20 69 66 20 74 68 65 20 63 6f  e even if the co
19420 6e 76 65 72 73 69 6f 6e 0a 6c 6f 73 73 79 20 61  nversion.lossy a
19430 6e 64 20 69 72 72 65 76 65 72 73 69 62 6c 65 2c  nd irreversible,
19440 20 77 68 65 72 65 61 73 20 63 6f 6c 75 6d 6e 20   whereas column 
19450 61 66 66 69 6e 69 74 79 20 6f 6e 6c 79 20 63 68  affinity only ch
19460 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 20 74  anges the data t
19470 79 70 65 0a 6f 66 20 61 20 76 61 6c 75 65 20 69  ype.of a value i
19480 66 20 74 68 65 20 63 68 61 6e 67 65 20 69 73 20  f the change is 
19490 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20 72 65 76  lossless and rev
194a0 65 72 73 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66  ersible...<p>^If
194b0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 3c 69   the value of <i
194c0 3e 65 78 70 72 3c 2f 69 3e 20 69 73 20 4e 55 4c  >expr</i> is NUL
194d0 4c 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  L, then the resu
194e0 6c 74 20 6f 66 20 74 68 65 20 43 41 53 54 0a 65  lt of the CAST.e
194f0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6c 73  xpression is als
19500 6f 20 4e 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69  o NULL. ^Otherwi
19510 73 65 2c 20 74 68 65 20 73 74 6f 72 61 67 65 20  se, the storage 
19520 63 6c 61 73 73 20 6f 66 20 74 68 65 20 72 65 73  class of the res
19530 75 6c 74 0a 69 73 20 64 65 74 65 72 6d 69 6e 65  ult.is determine
19540 64 20 62 79 20 61 70 70 6c 79 69 6e 67 20 74 68  d by applying th
19550 65 20 5b 72 75 6c 65 73 20 66 6f 72 20 64 65 74  e [rules for det
19560 65 72 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20  ermining column 
19570 61 66 66 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65  affinity] to.the
19580 20 3c 79 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61   <yyterm>type-na
19590 6d 65 3c 2f 79 79 74 65 72 6d 3e 2e 0a 0a 3c 74  me</yyterm>...<t
195a0 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c  able border=1>.<
195b0 74 72 3e 0a 20 20 3c 74 68 3e 20 41 66 66 69 6e  tr>.  <th> Affin
195c0 69 74 79 20 6f 66 20 3c 79 79 74 65 72 6d 3e 74  ity of <yyterm>t
195d0 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ype-name</yyterm
195e0 3e 0a 20 20 3c 74 68 3e 20 43 6f 6e 76 65 72 73  >.  <th> Convers
195f0 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 0a 3c  ion Processing.<
19600 74 72 3e 0a 20 20 3c 74 64 3e 20 4e 4f 4e 45 20  tr>.  <td> NONE 
19610 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67  .  <td> ^Casting
19620 20 61 20 76 61 6c 75 65 20 74 6f 20 61 20 3c 79   a value to a <y
19630 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c  yterm>type-name<
19640 2f 79 79 74 65 72 6d 3e 20 77 69 74 68 20 6e 6f  /yyterm> with no
19650 20 61 66 66 69 6e 69 74 79 20 0a 20 20 63 61 75   affinity .  cau
19660 73 65 73 20 74 68 65 20 76 61 6c 75 65 20 74 6f  ses the value to
19670 0a 20 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  .  be converted 
19680 69 6e 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43  into a BLOB.  ^C
19690 61 73 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42  asting to a BLOB
196a0 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 66 69 72   consists of fir
196b0 73 74 20 63 61 73 74 69 6e 67 0a 20 20 74 68 65  st casting.  the
196c0 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54 20 69   value to TEXT i
196d0 6e 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d  n the [encoding]
196e0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
196f0 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65   connection, the
19700 6e 0a 20 20 69 6e 74 65 72 70 72 65 74 69 6e 67  n.  interpreting
19710 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 62   the resulting b
19720 79 74 65 20 73 65 71 75 65 6e 63 65 20 61 73 20  yte sequence as 
19730 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f  a BLOB instead o
19740 66 20 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e  f as TEXT...<tr>
19750 0a 20 20 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c  .  <td> TEXT.  <
19760 74 64 3e 20 5e 54 6f 20 63 61 73 74 20 61 20 42  td> ^To cast a B
19770 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 54 45 58  LOB value to TEX
19780 54 2c 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  T, the sequence 
19790 6f 66 20 62 79 74 65 73 20 74 68 61 74 20 6d 61  of bytes that ma
197a0 6b 65 20 75 70 20 74 68 65 0a 20 20 42 4c 4f 42  ke up the.  BLOB
197b0 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20   is interpreted 
197c0 61 73 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20  as text encoded 
197d0 75 73 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  using the databa
197e0 73 65 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c  se encoding..  <
197f0 70 3e 0a 20 20 20 5e 43 61 73 74 69 6e 67 20 61  p>.   ^Casting a
19800 6e 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41  n INTEGER or REA
19810 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 54 45 58  L value into TEX
19820 54 20 72 65 6e 64 65 72 73 20 74 68 65 20 76 61  T renders the va
19830 6c 75 65 20 61 73 20 69 66 20 76 69 61 20 0a 20  lue as if via . 
19840 20 20 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72     [sqlite3_snpr
19850 69 6e 74 66 28 29 5d 20 65 78 63 65 70 74 20 74  intf()] except t
19860 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e  hat the resultin
19870 67 20 54 45 58 54 20 75 73 65 73 20 74 68 65 20  g TEXT uses the 
19880 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20  [encoding] of.  
19890 20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63    the database c
198a0 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e  onnection...<tr>
198b0 0a 20 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c  .  <td> REAL.  <
198c0 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e  td> ^When castin
198d0 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74  g a BLOB value t
198e0 6f 20 61 20 52 45 41 4c 2c 20 74 68 65 20 76 61  o a REAL, the va
198f0 6c 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e  lue is first con
19900 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20  verted to.      
19910 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c    TEXT..       <
19920 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20  p>^When casting 
19930 61 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20  a TEXT value to 
19940 52 45 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73  REAL, the longes
19950 74 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69  t possible prefi
19960 78 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65  x of.        the
19970 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20   value that can 
19980 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
19990 73 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20  s a real number 
199a0 69 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f  is extracted fro
199b0 6d 0a 20 20 20 20 20 20 20 20 74 68 65 20 54 45  m.        the TE
199c0 58 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  XT value and the
199d0 20 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72   remainder ignor
199e0 65 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67  ed. ^Any leading
199f0 20 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20   spaces in the. 
19a00 20 20 20 20 20 20 20 54 45 58 54 20 76 61 6c 75         TEXT valu
19a10 65 20 61 72 65 20 69 67 6e 6f 72 65 64 20 77 68  e are ignored wh
19a20 65 6e 20 63 6f 6e 76 65 72 67 69 6e 67 20 66 72  en converging fr
19a30 6f 6d 20 54 45 58 54 20 74 6f 20 52 45 41 4c 2e  om TEXT to REAL.
19a40 20 5e 28 49 66 20 74 68 65 72 65 20 69 73 0a 20   ^(If there is. 
19a50 20 20 20 20 20 20 20 6e 6f 20 70 72 65 66 69 78         no prefix
19a60 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
19a70 65 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65  erpreted as a re
19a80 61 6c 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72  al number, the r
19a90 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 20 20 20  esult of the.   
19aa0 20 20 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20       conversion 
19ab0 69 73 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a  is 0.0.)^..<tr>.
19ac0 20 20 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a 20    <td> INTEGER. 
19ad0 20 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74   <td> ^When cast
19ae0 69 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65  ing a BLOB value
19af0 20 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65   to INTEGER, the
19b00 20 76 61 6c 75 65 20 69 73 20 66 69 72 73 74 20   value is first 
19b10 63 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20  converted to.   
19b20 20 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20       TEXT..     
19b30 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69    <p>^When casti
19b40 6e 67 20 61 20 54 45 58 54 20 76 61 6c 75 65 20  ng a TEXT value 
19b50 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20  to INTEGER, the 
19b60 6c 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65  longest possible
19b70 20 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20   prefix of.     
19b80 20 20 20 74 68 65 20 76 61 6c 75 65 20 74 68 61     the value tha
19b90 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72  t can be interpr
19ba0 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67  eted as an integ
19bb0 65 72 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74  er number is ext
19bc0 72 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20  racted from.    
19bd0 20 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c      the TEXT val
19be0 75 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69  ue and the remai
19bf0 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41  nder ignored. ^A
19c00 6e 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65  ny leading space
19c10 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20  s in the.       
19c20 20 54 45 58 54 20 76 61 6c 75 65 20 77 68 65 6e   TEXT value when
19c30 20 63 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d   converting from
19c40 20 54 45 58 54 20 74 6f 20 49 4e 54 45 47 45 52   TEXT to INTEGER
19c50 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49   are ignored. ^I
19c60 66 20 74 68 65 72 65 0a 20 20 20 20 20 20 20 20  f there.        
19c70 69 73 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61  is no prefix tha
19c80 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72  t can be interpr
19c90 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67  eted as an integ
19ca0 65 72 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72  er number, the r
19cb0 65 73 75 6c 74 0a 20 20 20 20 20 20 20 20 6f 66  esult.        of
19cc0 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
19cd0 69 73 20 30 2e 20 20 5e 49 66 20 74 68 65 20 70  is 0.  ^If the p
19ce0 72 65 66 69 78 20 69 6e 74 65 67 65 72 20 69 73  refix integer is
19cf0 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a 20 20   greater than.  
19d00 20 20 20 20 20 20 2b 39 32 32 33 33 37 32 30 33        +922337203
19d10 36 38 35 34 37 37 35 38 30 37 20 74 68 65 6e 20  6854775807 then 
19d20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
19d30 65 20 63 61 73 74 20 69 73 20 65 78 61 63 74 6c  e cast is exactl
19d40 79 0a 20 20 20 20 20 20 20 20 2b 39 32 32 33 33  y.        +92233
19d50 37 32 30 33 36 38 35 34 37 37 35 38 30 37 2e 20  72036854775807. 
19d60 20 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 69 66 20   ^Similarly, if 
19d70 74 68 65 20 70 72 65 66 69 78 20 69 6e 74 65 67  the prefix integ
19d80 65 72 20 69 73 0a 20 20 20 20 20 20 20 20 6c 65  er is.        le
19d90 73 73 20 74 68 61 6e 20 2d 39 32 32 33 33 37 32  ss than -9223372
19da0 30 33 36 38 35 34 37 37 35 38 30 38 20 74 68 65  036854775808 the
19db0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
19dc0 74 68 65 20 63 61 73 74 20 69 73 0a 20 20 20 20  the cast is.    
19dd0 20 20 20 20 65 78 61 63 74 6c 79 20 2d 39 32 32      exactly -922
19de0 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
19df0 2e 0a 0a 20 20 20 20 20 20 20 20 3c 70 3e 5e 57  ...        <p>^W
19e00 68 65 6e 20 63 61 73 74 69 6e 67 20 74 6f 20 49  hen casting to I
19e10 4e 54 45 47 45 52 2c 20 69 66 20 74 68 65 20 74  NTEGER, if the t
19e20 65 78 74 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61  ext looks like a
19e30 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a   floating point.
19e40 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 77 69          value wi
19e50 74 68 20 61 6e 20 65 78 70 6f 6e 65 6e 74 2c 20  th an exponent, 
19e60 74 68 65 20 65 78 70 6f 6e 65 6e 74 20 77 69 6c  the exponent wil
19e70 6c 20 62 65 20 69 67 6e 6f 72 65 64 20 62 65 63  l be ignored bec
19e80 61 75 73 65 20 69 74 20 69 73 0a 20 20 20 20 20  ause it is.     
19e90 20 20 20 6e 6f 20 70 61 72 74 20 6f 66 20 74 68     no part of th
19ea0 65 20 69 6e 74 65 67 65 72 20 70 72 65 66 69 78  e integer prefix
19eb0 2e 20 20 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c  .  ^For example,
19ec0 0a 20 20 20 20 20 20 20 20 22 28 43 41 53 54 20  .        "(CAST 
19ed0 27 31 32 33 65 2b 35 27 20 41 53 20 49 4e 54 45  '123e+5' AS INTE
19ee0 47 45 52 29 22 20 72 65 73 75 6c 74 73 20 69 6e  GER)" results in
19ef0 20 31 32 33 2c 20 6e 6f 74 20 69 6e 20 31 32 33   123, not in 123
19f00 30 30 30 30 30 2e 0a 0a 20 20 20 20 20 20 20 20  00000...        
19f10 3c 70 3e 20 5e 28 54 68 65 20 43 41 53 54 20 6f  <p> ^(The CAST o
19f20 70 65 72 61 74 6f 72 20 75 6e 64 65 72 73 74 61  perator understa
19f30 6e 64 73 20 64 65 63 69 6d 61 6c 0a 20 20 20 20  nds decimal.    
19f40 20 20 20 20 69 6e 74 65 67 65 72 73 20 6f 6e 6c      integers onl
19f50 79 20 26 6d 64 61 73 68 3b 20 63 6f 6e 76 65 72  y &mdash; conver
19f60 73 69 6f 6e 20 6f 66 20 5b 68 65 78 61 64 65 63  sion of [hexadec
19f70 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 5d 20 73  imal integers] s
19f80 74 6f 70 73 20 0a 20 20 20 20 20 20 20 20 61 74  tops .        at
19f90 20 74 68 65 20 22 78 22 20 69 6e 20 74 68 65 20   the "x" in the 
19fa0 22 30 78 22 20 70 72 65 66 69 78 20 6f 66 20 74  "0x" prefix of t
19fb0 68 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69  he hexadecimal i
19fc0 6e 74 65 67 65 72 20 73 74 72 69 6e 67 20 0a 20  nteger string . 
19fd0 20 20 20 20 20 20 20 61 6e 64 20 74 68 75 73 20         and thus 
19fe0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
19ff0 53 54 20 69 73 20 61 6c 77 61 79 73 20 7a 65 72  ST is always zer
1a000 6f 2e 29 5e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e  o.)^..      <p>^
1a010 41 20 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c  A cast of a REAL
1a020 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49   value into an I
1a030 4e 54 45 47 45 52 20 72 65 73 75 6c 74 73 20 69  NTEGER results i
1a040 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20  n the integer.  
1a050 20 20 20 20 62 65 74 77 65 65 6e 20 74 68 65 20      between the 
1a060 52 45 41 4c 20 76 61 6c 75 65 20 61 6e 64 20 7a  REAL value and z
1a070 65 72 6f 20 74 68 61 74 20 69 73 20 63 6c 6f 73  ero that is clos
1a080 65 73 74 20 74 6f 20 74 68 65 20 52 45 41 4c 20  est to the REAL 
1a090 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 5e 49 66  value..      ^If
1a0a0 20 61 20 52 45 41 4c 20 69 73 20 67 72 65 61 74   a REAL is great
1a0b0 65 72 20 74 68 61 6e 20 74 68 65 20 67 72 65 61  er than the grea
1a0c0 74 65 73 74 20 70 6f 73 73 69 62 6c 65 20 73 69  test possible si
1a0d0 67 6e 65 64 0a 20 20 20 20 20 20 69 6e 74 65 67  gned.      integ
1a0e0 65 72 20 28 2b 39 32 32 33 33 37 32 30 33 36 38  er (+92233720368
1a0f0 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74  54775807) then t
1a100 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
1a110 20 67 72 65 61 74 65 73 74 20 70 6f 73 73 69 62   greatest possib
1a120 6c 65 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20  le.      signed 
1a130 69 6e 74 65 67 65 72 20 61 6e 64 20 69 66 20 74  integer and if t
1a140 68 65 20 52 45 41 4c 20 69 73 20 6c 65 73 73 20  he REAL is less 
1a150 74 68 61 6e 20 74 68 65 20 6c 65 61 73 74 20 70  than the least p
1a160 6f 73 73 69 62 6c 65 20 73 69 67 6e 65 64 0a 20  ossible signed. 
1a170 20 20 20 20 20 69 6e 74 65 67 65 72 20 28 2d 39       integer (-9
1a180 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
1a190 30 38 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  08) then the res
1a1a0 75 6c 74 20 69 73 20 74 68 65 20 6c 65 61 73 74  ult is the least
1a1b0 20 70 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20   possible.      
1a1c0 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a  signed integer..
1a1d0 0a 20 20 20 20 20 20 3c 70 3e 50 72 69 6f 72 20  .      <p>Prior 
1a1e0 74 6f 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  to SQLite versio
1a1f0 6e 20 33 2e 38 2e 32 20 28 5b 64 61 74 65 6f 66  n 3.8.2 ([dateof
1a200 3a 33 2e 38 2e 32 5d 29 2c 0a 20 20 20 20 20 20  :3.8.2]),.      
1a210 63 61 73 74 69 6e 67 20 61 20 52 45 41 4c 20 76  casting a REAL v
1a220 61 6c 75 65 20 67 72 65 61 74 65 72 20 74 68 61  alue greater tha
1a230 6e 0a 20 20 20 20 20 20 2b 39 32 32 33 33 37 32  n.      +9223372
1a240 30 33 36 38 35 34 37 37 35 38 30 37 2e 30 20 69  036854775807.0 i
1a250 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72  nto an integer r
1a260 65 73 75 6c 74 65 64 20 69 6e 20 74 68 65 20 6d  esulted in the m
1a270 6f 73 74 20 6e 65 67 61 74 69 76 65 0a 20 20 20  ost negative.   
1a280 20 20 20 69 6e 74 65 67 65 72 2c 20 2d 39 32 32     integer, -922
1a290 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
1a2a0 2e 20 20 54 68 69 73 20 62 65 68 61 76 69 6f 72  .  This behavior
1a2b0 20 77 61 73 20 6d 65 61 6e 74 20 74 6f 20 65 6d   was meant to em
1a2c0 75 6c 61 74 65 20 74 68 65 0a 20 20 20 20 20 20  ulate the.      
1a2d0 62 65 68 61 76 69 6f 72 20 6f 66 20 78 38 36 2f  behavior of x86/
1a2e0 78 36 34 20 68 61 72 64 77 61 72 65 20 77 68 65  x64 hardware whe
1a2f0 6e 20 64 6f 69 6e 67 20 74 68 65 20 65 71 75 69  n doing the equi
1a300 76 61 6c 65 6e 74 20 63 61 73 74 2e 0a 0a 3c 74  valent cast...<t
1a310 72 3e 0a 20 20 3c 74 64 3e 20 4e 55 4d 45 52 49  r>.  <td> NUMERI
1a320 43 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e  C.  <td> ^Castin
1a330 67 20 61 20 54 45 58 54 20 6f 72 20 42 4c 4f 42  g a TEXT or BLOB
1a340 20 76 61 6c 75 65 20 69 6e 74 6f 20 4e 55 4d 45   value into NUME
1a350 52 49 43 20 66 69 72 73 74 20 64 6f 65 73 20 61  RIC first does a
1a360 20 66 6f 72 63 65 64 0a 20 20 20 63 6f 6e 76 65   forced.   conve
1a370 72 73 69 6f 6e 20 69 6e 74 6f 20 52 45 41 4c 20  rsion into REAL 
1a380 62 75 74 20 74 68 65 6e 20 66 75 72 74 68 65 72  but then further
1a390 20 63 6f 6e 76 65 72 74 73 20 74 68 65 20 72 65   converts the re
1a3a0 73 75 6c 74 20 69 6e 74 6f 20 49 4e 54 45 47 45  sult into INTEGE
1a3b0 52 20 69 66 0a 20 20 20 61 6e 64 20 6f 6e 6c 79  R if.   and only
1a3c0 20 69 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69   if the conversi
1a3d0 6f 6e 20 66 72 6f 6d 20 52 45 41 4c 20 74 6f 20  on from REAL to 
1a3e0 49 4e 54 45 47 45 52 20 69 73 20 6c 6f 73 73 6c  INTEGER is lossl
1a3f0 65 73 73 20 61 6e 64 20 72 65 76 65 72 73 69 62  ess and reversib
1a400 6c 65 2e 0a 20 20 20 54 68 69 73 20 69 73 20 74  le..   This is t
1a410 68 65 20 6f 6e 6c 79 20 63 6f 6e 74 65 78 74 20  he only context 
1a420 69 6e 20 53 51 4c 69 74 65 20 77 68 65 72 65 20  in SQLite where 
1a430 74 68 65 20 4e 55 4d 45 52 49 43 20 61 6e 64 20  the NUMERIC and 
1a440 49 4e 54 45 47 45 52 20 5b 61 66 66 69 6e 69 74  INTEGER [affinit
1a450 69 65 73 5d 0a 20 20 20 62 65 68 61 76 65 20 64  ies].   behave d
1a460 69 66 66 65 72 65 6e 74 6c 79 2e 0a 20 20 20 3c  ifferently..   <
1a470 70 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 52 45  p> ^Casting a RE
1a480 41 4c 20 6f 72 20 49 4e 54 45 47 45 52 20 76 61  AL or INTEGER va
1a490 6c 75 65 20 74 6f 20 4e 55 4d 45 52 49 43 20 69  lue to NUMERIC i
1a4a0 73 20 61 20 6e 6f 2d 6f 70 2c 20 65 76 65 6e 20  s a no-op, even 
1a4b0 69 66 20 61 20 72 65 61 6c 0a 20 20 20 76 61 6c  if a real.   val
1a4c0 75 65 20 63 6f 75 6c 64 20 62 65 20 6c 6f 73 73  ue could be loss
1a4d0 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64  lessly converted
1a4e0 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a   to an integer..
1a4f0 0a 3c 2f 74 72 3e 0a 0a 3c 2f 74 61 62 6c 65 3e  .</tr>..</table>
1a500 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
1a510 74 68 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  the result from 
1a520 63 61 73 74 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d  casting any non-
1a530 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20  BLOB value into 
1a540 61 20 0a 42 4c 4f 42 20 61 6e 64 20 74 68 65 20  a .BLOB and the 
1a550 72 65 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74  result from cast
1a560 69 6e 67 20 61 6e 79 20 42 4c 4f 42 20 76 61 6c  ing any BLOB val
1a570 75 65 20 69 6e 74 6f 20 61 20 6e 6f 6e 2d 42 4c  ue into a non-BL
1a580 4f 42 20 76 61 6c 75 65 0a 6d 61 79 20 62 65 20  OB value.may be 
1a590 64 69 66 66 65 72 65 6e 74 20 64 65 70 65 6e 64  different depend
1a5a0 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 74  ing on whether t
1a5b0 68 65 20 64 61 74 61 62 61 73 65 20 5b 65 6e 63  he database [enc
1a5c0 6f 64 69 6e 67 5d 20 69 73 20 55 54 46 2d 38 2c  oding] is UTF-8,
1a5d0 0a 55 54 46 2d 31 36 62 65 2c 20 6f 72 20 55 54  .UTF-16be, or UT
1a5e0 46 2d 31 36 6c 65 2e 0a 0a 0a 3c 74 63 6c 3e 68  F-16le....<tcl>h
1a5f0 64 5f 66 72 61 67 6d 65 6e 74 20 62 6f 6f 6c 65  d_fragment boole
1a600 61 6e 65 78 70 72 20 7b 62 6f 6f 6c 65 61 6e 20  anexpr {boolean 
1a610 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c  expression}</tcl
1a620 3e 0a 3c 68 33 3e 42 6f 6f 6c 65 61 6e 20 45 78  >.<h3>Boolean Ex
1a630 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a  pressions</h3>..
1a640 3c 70 3e 54 68 65 20 53 51 4c 20 6c 61 6e 67 75  <p>The SQL langu
1a650 61 67 65 20 66 65 61 74 75 72 65 73 20 73 65 76  age features sev
1a660 65 72 61 6c 20 63 6f 6e 74 65 78 74 73 20 77 68  eral contexts wh
1a670 65 72 65 20 61 6e 20 65 78 70 72 65 73 73 69 6f  ere an expressio
1a680 6e 20 69 73 20 0a 65 76 61 6c 75 61 74 65 64 20  n is .evaluated 
1a690 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 63  and the result c
1a6a0 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20 62 6f  onverted to a bo
1a6b0 6f 6c 65 61 6e 20 28 74 72 75 65 20 6f 72 20 66  olean (true or f
1a6c0 61 6c 73 65 29 20 76 61 6c 75 65 2e 20 54 68 65  alse) value. The
1a6d0 73 65 0a 63 6f 6e 74 65 78 74 73 20 61 72 65 3a  se.contexts are:
1a6e0 0a 0a 20 20 3c 75 6c 3e 0a 20 20 20 20 3c 6c 69  ..  <ul>.    <li
1a6f0 3e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  > the WHERE clau
1a700 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 2c 20  se of a SELECT, 
1a710 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
1a720 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20   statement,.    
1a730 3c 6c 69 3e 20 74 68 65 20 4f 4e 20 6f 72 20 55  <li> the ON or U
1a740 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
1a750 20 6a 6f 69 6e 20 69 6e 20 61 20 53 45 4c 45 43   join in a SELEC
1a760 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20  T statement,.   
1a770 20 3c 6c 69 3e 20 74 68 65 20 48 41 56 49 4e 47   <li> the HAVING
1a780 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
1a790 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20  ECT statement,. 
1a7a0 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e     <li> the WHEN
1a7b0 20 63 6c 61 75 73 65 20 6f 66 20 61 6e 20 53 51   clause of an SQ
1a7c0 4c 20 74 72 69 67 67 65 72 2c 20 61 6e 64 0a 20  L trigger, and. 
1a7d0 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e     <li> the WHEN
1a7e0 20 63 6c 61 75 73 65 20 6f 72 20 63 6c 61 75 73   clause or claus
1a7f0 65 73 20 6f 66 20 73 6f 6d 65 20 43 41 53 45 20  es of some CASE 
1a800 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 20 20 3c  expressions..  <
1a810 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 63 6f  /ul>..<p>^(To co
1a820 6e 76 65 72 74 20 74 68 65 20 72 65 73 75 6c 74  nvert the result
1a830 73 20 6f 66 20 61 6e 20 53 51 4c 20 65 78 70 72  s of an SQL expr
1a840 65 73 73 69 6f 6e 20 74 6f 20 61 20 62 6f 6f 6c  ession to a bool
1a850 65 61 6e 20 76 61 6c 75 65 2c 20 53 51 4c 69 74  ean value, SQLit
1a860 65 0a 66 69 72 73 74 20 63 61 73 74 73 20 74 68  e.first casts th
1a870 65 20 72 65 73 75 6c 74 20 74 6f 20 61 20 4e 55  e result to a NU
1a880 4d 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74  MERIC value in t
1a890 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61  he same way as a
1a8a0 20 0a 5b 43 41 53 54 20 65 78 70 72 65 73 73 69   .[CAST expressi
1a8b0 6f 6e 5d 2e 20 41 20 6e 75 6d 65 72 69 63 20 7a  on]. A numeric z
1a8c0 65 72 6f 20 76 61 6c 75 65 20 28 69 6e 74 65 67  ero value (integ
1a8d0 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65  er value 0 or re
1a8e0 61 6c 20 0a 76 61 6c 75 65 20 30 2e 30 29 20 69  al .value 0.0) i
1a8f0 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  s considered to 
1a900 62 65 20 66 61 6c 73 65 2e 20 20 41 20 4e 55 4c  be false.  A NUL
1a910 4c 20 76 61 6c 75 65 20 69 73 20 73 74 69 6c 6c  L value is still
1a920 20 4e 55 4c 4c 2e 0a 41 6c 6c 20 6f 74 68 65 72   NULL..All other
1a930 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
1a940 69 64 65 72 65 64 20 74 72 75 65 2e 29 5e 0a 0a  idered true.)^..
1a950 3c 70 3e 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65  <p>^(For example
1a960 2c 20 74 68 65 20 76 61 6c 75 65 73 20 4e 55 4c  , the values NUL
1a970 4c 2c 20 30 2e 30 2c 20 30 2c 20 27 65 6e 67 6c  L, 0.0, 0, 'engl
1a980 69 73 68 27 20 61 6e 64 20 27 30 27 20 61 72 65  ish' and '0' are
1a990 20 61 6c 6c 20 63 6f 6e 73 69 64 65 72 65 64 0a   all considered.
1a9a0 74 6f 20 62 65 20 66 61 6c 73 65 2e 29 5e 20 5e  to be false.)^ ^
1a9b0 28 56 61 6c 75 65 73 20 31 2c 20 31 2e 30 2c 20  (Values 1, 1.0, 
1a9c0 30 2e 31 2c 20 2d 30 2e 31 20 61 6e 64 20 27 31  0.1, -0.1 and '1
1a9d0 65 6e 67 6c 69 73 68 27 20 61 72 65 20 63 6f 6e  english' are con
1a9e0 73 69 64 65 72 65 64 20 74 6f 20 0a 62 65 20 74  sidered to .be t
1a9f0 72 75 65 2e 29 5e 0a 0a 3c 70 3e 42 65 67 69 6e  rue.)^..<p>Begin
1aa00 6e 69 6e 67 20 77 69 74 68 20 53 51 4c 69 74 65  ning with SQLite
1aa10 20 33 2e 32 33 2e 30 20 28 5b 64 61 74 65 6f 66   3.23.0 ([dateof
1aa20 3a 33 2e 32 33 2e 30 5d 29 2c 20 53 51 4c 69 74  :3.23.0]), SQLit
1aa30 65 20 72 65 63 6f 67 6e 69 7a 65 73 20 74 68 65  e recognizes the
1aa40 0a 69 64 65 6e 74 69 66 69 65 72 73 20 22 54 52  .identifiers "TR
1aa50 55 45 22 20 61 6e 64 20 22 46 41 4c 53 45 22 20  UE" and "FALSE" 
1aa60 61 73 20 62 6f 6f 6c 65 61 6e 20 6c 69 74 65 72  as boolean liter
1aa70 61 6c 73 2c 20 69 66 20 61 6e 64 20 6f 6e 6c 79  als, if and only
1aa80 20 69 66 20 74 68 6f 73 65 0a 69 64 65 6e 74 69   if those.identi
1aa90 66 69 65 72 73 20 61 72 65 20 6e 6f 74 20 61 6c  fiers are not al
1aaa0 72 65 61 64 79 20 75 73 65 64 20 66 6f 72 20 73  ready used for s
1aab0 6f 6d 65 20 6f 74 68 65 72 20 6d 65 61 6e 69 6e  ome other meanin
1aac0 67 2e 20 20 49 66 20 74 68 65 72 65 20 61 6c 72  g.  If there alr
1aad0 65 61 64 79 0a 65 78 69 73 74 73 20 63 6f 6c 75  eady.exists colu
1aae0 6d 6e 73 20 6f 72 20 74 61 62 6c 65 73 20 6f 72  mns or tables or
1aaf0 20 6f 74 68 65 72 20 6f 62 6a 65 63 74 73 20 6e   other objects n
1ab00 61 6d 65 64 20 54 52 55 45 20 6f 72 20 46 41 4c  amed TRUE or FAL
1ab10 53 45 2c 20 74 68 65 6e 20 66 6f 72 0a 74 68 65  SE, then for.the
1ab20 20 73 61 6b 65 20 6f 66 20 62 61 63 6b 77 61 72   sake of backwar
1ab30 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
1ab40 2c 20 74 68 65 20 54 52 55 45 20 61 6e 64 20 46  , the TRUE and F
1ab50 41 4c 53 45 20 69 64 65 6e 74 69 66 69 65 72 73  ALSE identifiers
1ab60 20 72 65 66 65 72 0a 74 6f 20 74 68 6f 73 65 20   refer.to those 
1ab70 6f 74 68 65 72 20 6f 62 6a 65 63 74 73 2c 20 6e  other objects, n
1ab80 6f 74 20 74 6f 20 74 68 65 20 62 6f 6f 6c 65 61  ot to the boolea
1ab90 6e 20 76 61 6c 75 65 73 2e 0a 0a 3c 70 3e 54 68  n values...<p>Th
1aba0 65 20 62 6f 6f 6c 65 61 6e 20 69 64 65 6e 74 69  e boolean identi
1abb0 66 69 65 72 73 20 54 52 55 45 20 61 6e 64 20 46  fiers TRUE and F
1abc0 41 4c 53 45 20 61 72 65 20 75 73 75 61 6c 6c 79  ALSE are usually
1abd0 20 6a 75 73 74 20 61 6c 69 61 73 65 73 20 66 6f   just aliases fo
1abe0 72 0a 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  r.the integer va
1abf0 6c 75 65 73 20 31 20 61 6e 64 20 30 2c 20 72 65  lues 1 and 0, re
1ac00 73 70 65 63 74 69 76 65 6c 79 2e 20 20 48 6f 77  spectively.  How
1ac10 65 76 65 72 2c 20 69 66 20 54 52 55 45 20 6f 72  ever, if TRUE or
1ac20 20 46 41 4c 53 45 0a 6f 63 63 75 72 20 6f 6e 20   FALSE.occur on 
1ac30 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73  the right-hand s
1ac40 69 64 65 20 6f 66 20 61 6e 20 49 53 20 6f 70 65  ide of an IS ope
1ac50 72 61 74 6f 72 2c 20 74 68 65 6e 20 74 68 65 79  rator, then they
1ac60 20 66 6f 72 6d 20 6e 65 77 0a 75 6e 61 72 79 20   form new.unary 
1ac70 70 6f 73 74 66 69 78 20 6f 70 65 72 61 74 6f 72  postfix operator
1ac80 73 20 22 49 53 20 54 52 55 45 22 20 61 6e 64 20  s "IS TRUE" and 
1ac90 22 49 53 20 46 41 4c 53 45 22 20 77 68 69 63 68  "IS FALSE" which
1aca0 20 74 65 73 74 20 74 68 65 20 62 6f 6f 6c 65 61   test the boolea
1acb0 6e 0a 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  n.value of the o
1acc0 70 65 72 61 6e 64 20 6f 6e 20 74 68 65 20 6c 65  perand on the le
1acd0 66 74 2e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f  ft...<h3>Functio
1ace0 6e 73 3c 2f 68 33 3e 0a 3c 70 3e 53 51 4c 69 74  ns</h3>.<p>SQLit
1acf0 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20  e supports many 
1ad00 5b 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65  [corefunc|simple
1ad10 5d 2c 20 5b 61 67 67 66 75 6e 63 7c 61 67 67 72  ], [aggfunc|aggr
1ad20 65 67 61 74 65 5d 2c 0a 61 6e 64 20 5b 77 69 6e  egate],.and [win
1ad30 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 7c 77 69  dow functions|wi
1ad40 6e 64 6f 77 5d 0a 53 51 4c 20 66 75 6e 63 74 69  ndow].SQL functi
1ad50 6f 6e 73 2e 20 20 46 6f 72 20 70 72 65 73 65 6e  ons.  For presen
1ad60 74 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c  tation purposes,
1ad70 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
1ad80 73 20 61 72 65 20 66 75 72 74 68 65 72 0a 73 75  s are further.su
1ad90 62 64 69 76 69 64 65 64 20 69 6e 74 6f 20 5b 63  bdivided into [c
1ada0 6f 72 65 66 75 6e 63 20 7c 20 63 6f 72 65 20 66  orefunc | core f
1adb0 75 6e 63 74 69 6f 6e 73 5d 2c 20 5b 64 61 74 65  unctions], [date
1adc0 66 75 6e 63 7c 64 61 74 65 2d 74 69 6d 65 20 66  func|date-time f
1add0 75 6e 63 74 69 6f 6e 73 5d 2c 0a 61 6e 64 20 5b  unctions],.and [
1ade0 6a 73 6f 6e 31 7c 4a 53 4f 4e 20 66 75 6e 63 74  json1|JSON funct
1adf0 69 6f 6e 73 5d 2e 0a 41 70 70 6c 69 63 61 74 69  ions]..Applicati
1ae00 6f 6e 73 20 63 61 6e 20 61 64 64 20 6e 65 77 20  ons can add new 
1ae10 66 75 6e 63 74 69 6f 6e 73 2c 20 77 72 69 74 74  functions, writt
1ae20 65 6e 20 69 6e 20 43 2f 43 2b 2b 2c 20 75 73 69  en in C/C++, usi
1ae30 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f  ng the.[sqlite3_
1ae40 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
1ae50 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 0a 3c 2f  )] interface..</
1ae60 70 3e 0a 0a 3c 70 3e 5e 49 74 20 69 73 20 70 6f  p>..<p>^It is po
1ae70 73 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20 61  ssible to have a
1ae80 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
1ae90 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 73 61  tion with the sa
1aea0 6d 65 20 6e 61 6d 65 20 61 73 20 61 0a 73 69 6d  me name as a.sim
1aeb0 70 6c 65 20 66 75 6e 63 74 69 6f 6e 2c 20 61 73  ple function, as
1aec0 20 6c 6f 6e 67 20 61 73 20 74 68 65 20 6e 75 6d   long as the num
1aed0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
1aee0 20 66 6f 72 20 74 68 65 20 74 77 6f 20 66 6f 72   for the two for
1aef0 6d 73 20 6f 66 20 74 68 65 0a 66 75 6e 63 74 69  ms of the.functi
1af00 6f 6e 20 61 72 65 20 64 69 66 66 65 72 65 6e 74  on are different
1af10 2e 20 20 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c  .  ^For example,
1af20 20 74 68 65 20 5b 61 67 67 5f 6d 61 78 7c 6d 61   the [agg_max|ma
1af30 78 28 29 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69  x()] function wi
1af40 74 68 20 61 0a 73 69 6e 67 6c 65 20 61 72 67 75  th a.single argu
1af50 6d 65 6e 74 20 69 73 20 61 6e 20 61 67 67 72 65  ment is an aggre
1af60 67 61 74 65 20 61 6e 64 20 74 68 65 20 5b 6d 61  gate and the [ma
1af70 78 28 29 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69  x()] function wi
1af80 74 68 20 74 77 6f 20 6f 72 20 6d 6f 72 65 0a 61  th two or more.a
1af90 72 67 75 6d 65 6e 74 73 20 69 73 20 61 20 73 69  rguments is a si
1afa0 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a  mple function...
1afb0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1afc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1afd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1afe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1aff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b000 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 6f  ####.Section {Co
1b010 72 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 63 6f  re Functions} co
1b020 72 65 66 75 6e 63 20 7b 2a 63 6f 72 65 66 75 6e  refunc {*corefun
1b030 63 7d 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  c}.unset -nocomp
1b040 6c 61 69 6e 20 63 6f 72 65 66 75 6e 63 73 65 74  lain corefuncset
1b050 0a 70 72 6f 63 20 66 75 6e 63 64 65 66 20 7b 73  .proc funcdef {s
1b060 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64  yntax keywords d
1b070 65 73 63 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20  esc} {.  global 
1b080 63 6f 72 65 66 75 6e 63 73 65 74 0a 20 20 72 65  corefuncset.  re
1b090 67 65 78 70 20 7b 5e 5b 61 2d 7a 5f 5d 2b 7d 20  gexp {^[a-z_]+} 
1b0a0 24 73 79 6e 74 61 78 20 62 61 73 65 73 79 6e 74  $syntax basesynt
1b0b0 61 78 0a 20 20 73 65 74 20 63 6f 72 65 66 75 6e  ax.  set corefun
1b0c0 63 73 65 74 28 24 62 61 73 65 73 79 6e 74 61 78  cset($basesyntax
1b0d0 29 20 5b 6c 69 73 74 20 24 73 79 6e 74 61 78 20  ) [list $syntax 
1b0e0 24 6b 65 79 77 6f 72 64 73 20 24 64 65 73 63 5d  $keywords $desc]
1b0f0 0a 7d 0a 66 75 6e 63 64 65 66 20 7b 61 62 73 28  .}.funcdef {abs(
1b100 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
1b110 61 62 73 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  abs(X) function 
1b120 72 65 74 75 72 6e 73 20 74 68 65 20 61 62 73 6f  returns the abso
1b130 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68  lute value of th
1b140 65 20 6e 75 6d 65 72 69 63 0a 20 20 61 72 67 75  e numeric.  argu
1b150 6d 65 6e 74 20 58 2e 20 20 5e 41 62 73 28 58 29  ment X.  ^Abs(X)
1b160 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66   returns NULL if
1b170 20 58 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e   X is NULL. .  ^
1b180 28 41 62 73 28 58 29 20 72 65 74 75 72 6e 73 20  (Abs(X) returns 
1b190 30 2e 30 20 69 66 20 58 20 69 73 20 61 20 73 74  0.0 if X is a st
1b1a0 72 69 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74  ring or blob.  t
1b1b0 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  hat cannot be co
1b1c0 6e 76 65 72 74 65 64 20 74 6f 20 61 20 6e 75 6d  nverted to a num
1b1d0 65 72 69 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e  eric value.)^  ^
1b1e0 49 66 20 58 20 69 73 20 74 68 65 20 0a 20 20 69  If X is the .  i
1b1f0 6e 74 65 67 65 72 20 2d 39 32 32 33 33 37 32 30  nteger -92233720
1b200 33 36 38 35 34 37 37 35 38 30 38 20 74 68 65 6e  36854775808 then
1b210 20 61 62 73 28 58 29 20 74 68 72 6f 77 73 20 61   abs(X) throws a
1b220 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  n integer overfl
1b230 6f 77 0a 20 20 65 72 72 6f 72 20 73 69 6e 63 65  ow.  error since
1b240 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 71 75   there is no equ
1b250 69 76 61 6c 65 6e 74 20 70 6f 73 69 74 69 76 65  ivalent positive
1b260 20 36 34 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70   64-bit two comp
1b270 6c 65 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a  lement value..}.
1b280 0a 66 75 6e 63 64 65 66 20 7b 63 68 61 6e 67 65  .funcdef {change
1b290 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  s()} {} {.  ^The
1b2a0 20 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74   changes() funct
1b2b0 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1b2c0 6e 75 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61  number of databa
1b2d0 73 65 20 72 6f 77 73 20 74 68 61 74 20 77 65 72  se rows that wer
1b2e0 65 20 63 68 61 6e 67 65 64 0a 20 20 6f 72 20 69  e changed.  or i
1b2f0 6e 73 65 72 74 65 64 20 6f 72 20 64 65 6c 65 74  nserted or delet
1b300 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
1b310 65 63 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65  ecently complete
1b320 64 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  d INSERT, DELETE
1b330 2c 0a 20 20 6f 72 20 55 50 44 41 54 45 20 73 74  ,.  or UPDATE st
1b340 61 74 65 6d 65 6e 74 2c 20 65 78 63 6c 75 73 69  atement, exclusi
1b350 76 65 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73  ve of statements
1b360 20 69 6e 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 20   in lower-level 
1b370 74 72 69 67 67 65 72 73 2e 0a 20 20 5e 54 68 65  triggers..  ^The
1b380 20 63 68 61 6e 67 65 73 28 29 20 53 51 4c 20 66   changes() SQL f
1b390 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
1b3a0 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
1b3b0 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  [sqlite3_changes
1b3c0 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 66 75 6e 63  ()].  C/C++ func
1b3d0 74 69 6f 6e 20 61 6e 64 20 68 65 6e 63 65 20 66  tion and hence f
1b3e0 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d 65 20  ollows the same 
1b3f0 72 75 6c 65 73 20 66 6f 72 20 63 6f 75 6e 74 69  rules for counti
1b400 6e 67 20 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66  ng changes..}..f
1b410 75 6e 63 64 65 66 20 7b 63 68 61 72 28 58 31 2c  uncdef {char(X1,
1b420 58 32 2c 2e 2e 2e 2c 58 4e 29 7d 20 7b 7d 20 7b  X2,...,XN)} {} {
1b430 0a 20 20 5e 28 54 68 65 20 63 68 61 72 28 58 31  .  ^(The char(X1
1b440 2c 58 32 2c 2e 2e 2e 2c 58 4e 29 20 66 75 6e 63  ,X2,...,XN) func
1b450 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
1b460 74 72 69 6e 67 20 63 6f 6d 70 6f 73 65 64 20 6f  tring composed o
1b470 66 20 63 68 61 72 61 63 74 65 72 73 20 68 61 76  f characters hav
1b480 69 6e 67 20 74 68 65 0a 20 20 20 75 6e 69 63 6f  ing the.   unico
1b490 64 65 20 63 6f 64 65 20 70 6f 69 6e 74 20 76 61  de code point va
1b4a0 6c 75 65 73 20 6f 66 20 69 6e 74 65 67 65 72 73  lues of integers
1b4b0 20 58 31 20 74 68 72 6f 75 67 68 20 58 4e 2c 20   X1 through XN, 
1b4c0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 29 5e 0a  respectively.)^.
1b4d0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c  }..funcdef {coal
1b4e0 65 73 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  esce(X,Y,...)} {
1b4f0 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f 61 6c 65  } {.  ^The coale
1b500 73 63 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  sce() function r
1b510 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66  eturns a copy of
1b520 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   its first non-N
1b530 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72  ULL argument, or
1b540 0a 20 20 4e 55 4c 4c 20 69 66 20 61 6c 6c 20 61  .  NULL if all a
1b550 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c  rguments are NUL
1b560 4c 2e 20 20 5e 43 6f 61 6c 65 73 63 65 28 29 20  L.  ^Coalesce() 
1b570 6d 75 73 74 20 68 61 76 65 20 61 74 20 6c 65 61  must have at lea
1b580 73 74 20 0a 20 20 32 20 61 72 67 75 6d 65 6e 74  st .  2 argument
1b590 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67  s..}..funcdef {g
1b5a0 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  lob(X,Y)} {} {. 
1b5b0 20 5e 54 68 65 20 67 6c 6f 62 28 58 2c 59 29 20   ^The glob(X,Y) 
1b5c0 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69  function is equi
1b5d0 76 61 6c 65 6e 74 20 74 6f 20 74 68 65 0a 20 20  valent to the.  
1b5e0 65 78 70 72 65 73 73 69 6f 6e 20 22 3c 62 3e 59  expression "<b>Y
1b5f0 20 47 4c 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20 20   GLOB X</b>"..  
1b600 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58 20  Note that the X 
1b610 61 6e 64 20 59 20 61 72 67 75 6d 65 6e 74 73 20  and Y arguments 
1b620 61 72 65 20 72 65 76 65 72 73 65 64 20 69 6e 20  are reversed in 
1b630 74 68 65 20 67 6c 6f 62 28 29 20 66 75 6e 63 74  the glob() funct
1b640 69 6f 6e 0a 20 20 72 65 6c 61 74 69 76 65 20 74  ion.  relative t
1b650 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f  o the infix [GLO
1b660 42 5d 20 6f 70 65 72 61 74 6f 72 2e 20 20 59 20  B] operator.  Y 
1b670 69 73 20 74 68 65 20 73 74 72 69 6e 67 20 61 6e  is the string an
1b680 64 20 58 20 69 73 20 74 68 65 0a 20 20 70 61 74  d X is the.  pat
1b690 74 65 72 6e 2e 20 20 53 6f 2c 20 66 6f 72 20 65  tern.  So, for e
1b6a0 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 6f 6c 6c  xample, the foll
1b6b0 6f 77 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  owing expression
1b6c0 73 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74  s are equivalent
1b6d0 3a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  :.  <blockquote>
1b6e0 3c 70 72 65 3e 0a 20 20 20 20 20 6e 61 6d 65 20  <pre>.     name 
1b6f0 47 4c 4f 42 20 27 2a 68 65 6c 69 75 6d 2a 27 0a  GLOB '*helium*'.
1b700 20 20 20 20 20 67 6c 6f 62 28 27 2a 68 65 6c 69       glob('*heli
1b710 75 6d 2a 27 2c 6e 61 6d 65 29 0a 20 20 3c 2f 70  um*',name).  </p
1b720 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
1b730 0a 20 20 3c 70 3e 5e 49 66 20 74 68 65 20 5b 73  .  <p>^If the [s
1b740 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
1b750 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  nction()] interf
1b760 61 63 65 20 69 73 20 75 73 65 64 20 74 6f 0a 20  ace is used to. 
1b770 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 67 6c   override the gl
1b780 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  ob(X,Y) function
1b790 20 77 69 74 68 20 61 6e 20 61 6c 74 65 72 6e 61   with an alterna
1b7a0 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tive implementat
1b7b0 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65 20 5b  ion then.  the [
1b7c0 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20 77  GLOB] operator w
1b7d0 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20 61  ill invoke the a
1b7e0 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65  lternative imple
1b7f0 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75  mentation..}..fu
1b800 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c  ncdef {ifnull(X,
1b810 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1b820 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f  ifnull() functio
1b830 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79  n returns a copy
1b840 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f   of its first no
1b850 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c  n-NULL argument,
1b860 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62 6f   or.  NULL if bo
1b870 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  th arguments are
1b880 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28   NULL.  ^Ifnull(
1b890 29 20 6d 75 73 74 20 68 61 76 65 20 65 78 61 63  ) must have exac
1b8a0 74 6c 79 20 32 20 61 72 67 75 6d 65 6e 74 73 2e  tly 2 arguments.
1b8b0 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29  .  ^The ifnull()
1b8c0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75   function is equ
1b8d0 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61 6c  ivalent to [coal
1b8e0 65 73 63 65 28 29 5d 20 77 69 74 68 20 74 77 6f  esce()] with two
1b8f0 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66   arguments..}..f
1b900 75 6e 63 64 65 66 20 7b 69 6e 73 74 72 28 58 2c  uncdef {instr(X,
1b910 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1b920 69 6e 73 74 72 28 58 2c 59 29 20 66 75 6e 63 74  instr(X,Y) funct
1b930 69 6f 6e 20 66 69 6e 64 73 20 74 68 65 20 66 69  ion finds the fi
1b940 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f  rst occurrence o
1b950 66 20 73 74 72 69 6e 67 20 59 20 77 69 74 68 69  f string Y withi
1b960 6e 20 0a 20 20 73 74 72 69 6e 67 20 58 20 61 6e  n .  string X an
1b970 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  d returns the nu
1b980 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20 63 68  mber of prior ch
1b990 61 72 61 63 74 65 72 73 20 70 6c 75 73 20 31 2c  aracters plus 1,
1b9a0 20 6f 72 20 30 20 69 66 0a 20 20 59 20 69 73 20   or 0 if.  Y is 
1b9b0 6e 6f 77 68 65 72 65 20 66 6f 75 6e 64 20 77 69  nowhere found wi
1b9c0 74 68 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c 20 69  thin X..  ^Or, i
1b9d0 66 20 58 20 61 6e 64 20 59 20 61 72 65 20 62 6f  f X and Y are bo
1b9e0 74 68 20 42 4c 4f 42 73 2c 20 74 68 65 6e 20 69  th BLOBs, then i
1b9f0 6e 73 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e  nstr(X,Y) return
1ba00 73 20 6f 6e 65 0a 20 20 6d 6f 72 65 20 74 68 61  s one.  more tha
1ba10 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 62 79 74  n the number byt
1ba20 65 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  es prior to the 
1ba30 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65  first occurrence
1ba40 20 6f 66 20 59 2c 20 6f 72 20 30 20 69 66 0a 20   of Y, or 0 if. 
1ba50 20 59 20 64 6f 65 73 20 6e 6f 74 20 6f 63 63 75   Y does not occu
1ba60 72 20 61 6e 79 77 68 65 72 65 20 77 69 74 68 69  r anywhere withi
1ba70 6e 20 58 2e 0a 20 20 5e 49 66 20 62 6f 74 68 20  n X..  ^If both 
1ba80 61 72 67 75 6d 65 6e 74 73 20 58 20 61 6e 64 20  arguments X and 
1ba90 59 20 74 6f 20 69 6e 73 74 72 28 58 2c 59 29 20  Y to instr(X,Y) 
1baa0 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 6e 64  are non-NULL and
1bab0 20 61 72 65 20 6e 6f 74 20 42 4c 4f 42 73 0a 20   are not BLOBs. 
1bac0 20 74 68 65 6e 20 62 6f 74 68 20 61 72 65 20 69   then both are i
1bad0 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 73 74  nterpreted as st
1bae0 72 69 6e 67 73 2e 0a 20 20 5e 49 66 20 65 69 74  rings..  ^If eit
1baf0 68 65 72 20 58 20 6f 72 20 59 20 61 72 65 20 4e  her X or Y are N
1bb00 55 4c 4c 20 69 6e 20 69 6e 73 74 72 28 58 2c 59  ULL in instr(X,Y
1bb10 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
1bb20 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75  t is NULL..}..fu
1bb30 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d 20 7b  ncdef {hex(X)} {
1bb40 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78 28 29  } {.  ^The hex()
1bb50 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72 70   function interp
1bb60 72 65 74 73 20 69 74 73 20 61 72 67 75 6d 65 6e  rets its argumen
1bb70 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e 64 20  t as a BLOB and 
1bb80 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69  returns.  a stri
1bb90 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20  ng which is the 
1bba0 75 70 70 65 72 2d 63 61 73 65 20 68 65 78 61 64  upper-case hexad
1bbb0 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67  ecimal rendering
1bbc0 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   of the content 
1bbd0 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e 0a  of.  that blob..
1bbe0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73 74  }..funcdef {last
1bbf0 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 7d  _insert_rowid()}
1bc00 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61 73   {} {.  ^The las
1bc10 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1bc20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1bc30 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20 20  s the [ROWID].  
1bc40 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f 77 20  of the last row 
1bc50 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68 65 20  insert from the 
1bc60 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
1bc70 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b 65  ion which invoke
1bc80 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69 6f 6e  d the.  function
1bc90 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e  ..  ^The last_in
1bca0 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53 51 4c  sert_rowid() SQL
1bcb0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
1bcc0 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
1bcd0 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73  e.  [sqlite3_las
1bce0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1bcf0 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  ] C/C++ interfac
1bd00 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66  e function..}..f
1bd10 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68 28 58  uncdef {length(X
1bd20 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72 20 61  )} {} {.  ^For a
1bd30 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 58 2c   string value X,
1bd40 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66   the length(X) f
1bd50 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1bd60 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a 20  the number of . 
1bd70 20 63 68 61 72 61 63 74 65 72 73 20 28 6e 6f 74   characters (not
1bd80 20 62 79 74 65 73 29 20 69 6e 20 58 20 70 72 69   bytes) in X pri
1bd90 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  or to the first 
1bda0 4e 55 4c 20 63 68 61 72 61 63 74 65 72 2e 0a 20  NUL character.. 
1bdb0 20 53 69 6e 63 65 20 53 51 4c 69 74 65 20 73 74   Since SQLite st
1bdc0 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20 6e 6f 72  rings do not nor
1bdd0 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 4e 55  mally contain NU
1bde0 4c 20 63 68 61 72 61 63 74 65 72 73 2c 20 74 68  L characters, th
1bdf0 65 20 6c 65 6e 67 74 68 28 58 29 0a 20 20 66 75  e length(X).  fu
1be00 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75 73 75 61  nction will usua
1be10 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 74  lly return the t
1be20 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63  otal number of c
1be30 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65  haracters in the
1be40 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 46 6f   string X..  ^Fo
1be50 72 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 20 58  r a blob value X
1be60 2c 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75  , length(X) retu
1be70 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
1be80 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 62  f bytes in the b
1be90 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69 73 20  lob..  ^If X is 
1bea0 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74 68  NULL then length
1beb0 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e  (X) is NULL..  ^
1bec0 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69 63 20  If X is numeric 
1bed0 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 72  then length(X) r
1bee0 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67 74  eturns the lengt
1bef0 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a 20 20  h of a string.  
1bf00 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
1bf10 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
1bf20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65 28  {like(X,Y) like(
1bf30 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e  X,Y,Z)} {} {.  ^
1bf40 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  The like() funct
1bf50 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69  ion is used to i
1bf60 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 22  mplement the.  "
1bf70 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23 39 31  <b>Y LIKE X &#91
1bf80 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b 3c 2f  ;ESCAPE Z&#93;</
1bf90 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  b>" expression. 
1bfa0 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74 69 6f  .  ^If the optio
1bfb0 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73  nal ESCAPE claus
1bfc0 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68  e is present, th
1bfd0 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20  en the.  like() 
1bfe0 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f  function is invo
1bff0 6b 65 64 20 77 69 74 68 20 74 68 72 65 65 20 61  ked with three a
1c000 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68 65  rguments.  ^Othe
1c010 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20 20 69  rwise, it is.  i
1c020 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77 6f 20  nvoked with two 
1c030 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20  arguments only. 
1c040 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58 20  Note that the X 
1c050 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65 72 73  and Y parameters
1c060 20 61 72 65 0a 20 20 72 65 76 65 72 73 65 64 20   are.  reversed 
1c070 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75  in the like() fu
1c080 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76 65 20  nction relative 
1c090 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 4c 49  to the infix [LI
1c0a0 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20  KE] operator..  
1c0b0 58 20 69 73 20 74 68 65 20 70 61 74 74 65 72 6e  X is the pattern
1c0c0 20 61 6e 64 20 59 20 69 73 20 74 68 65 20 73 74   and Y is the st
1c0d0 72 69 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67  ring to match ag
1c0e0 61 69 6e 73 74 20 74 68 61 74 20 70 61 74 74 65  ainst that patte
1c0f0 72 6e 2e 0a 20 20 48 65 6e 63 65 2c 20 74 68 65  rn..  Hence, the
1c100 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65   following expre
1c110 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76  ssions are equiv
1c120 61 6c 65 6e 74 3a 0a 20 20 3c 62 6c 6f 63 6b 71  alent:.  <blockq
1c130 75 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 20 20 20  uote><pre>.     
1c140 6e 61 6d 65 20 4c 49 4b 45 20 27 25 6e 65 6f 6e  name LIKE '%neon
1c150 25 27 0a 20 20 20 20 20 6c 69 6b 65 28 27 25 6e  %'.     like('%n
1c160 65 6f 6e 25 27 2c 6e 61 6d 65 29 0a 20 20 3c 2f  eon%',name).  </
1c170 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
1c180 3e 0a 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65  >.  ^The [sqlite
1c190 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
1c1a0 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63  n()] interface c
1c1b0 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76  an be used to ov
1c1c0 65 72 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b  erride the.  lik
1c1d0 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  e() function and
1c1e0 20 74 68 65 72 65 62 79 20 63 68 61 6e 67 65 20   thereby change 
1c1f0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  the operation of
1c200 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70   the.  [LIKE] op
1c210 65 72 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76  erator.  When ov
1c220 65 72 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b  erriding the lik
1c230 65 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74  e() function, it
1c240 20 6d 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e   may be importan
1c250 74 0a 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20  t.  to override 
1c260 62 6f 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64  both the two and
1c270 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20   three argument 
1c280 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20  versions of the 
1c290 6c 69 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69  like() .  functi
1c2a0 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64  on. Otherwise, d
1c2b0 69 66 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61  ifferent code ma
1c2c0 79 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69  y be called to i
1c2d0 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b  mplement the.  [
1c2e0 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64  LIKE] operator d
1c2f0 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
1c300 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53  her or not an ES
1c310 43 41 50 45 20 63 6c 61 75 73 65 20 77 61 73 20  CAPE clause was 
1c320 0a 20 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a  .  specified..}.
1c330 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c  ..funcdef {likel
1c340 69 68 6f 6f 64 28 58 2c 59 29 7d 20 7b 7d 20 7b  ihood(X,Y)} {} {
1c350 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f  .  ^The likeliho
1c360 6f 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  od(X,Y) function
1c370 20 72 65 74 75 72 6e 73 20 61 72 67 75 6d 65 6e   returns argumen
1c380 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20  t X unchanged.. 
1c390 20 5e 28 54 68 65 20 76 61 6c 75 65 20 59 20 69   ^(The value Y i
1c3a0 6e 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59  n likelihood(X,Y
1c3b0 29 20 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61  ) must be a floa
1c3c0 74 69 6e 67 20 70 6f 69 6e 74 20 63 6f 6e 73 74  ting point const
1c3d0 61 6e 74 0a 20 20 62 65 74 77 65 65 6e 20 30 2e  ant.  between 0.
1c3e0 30 20 61 6e 64 20 31 2e 30 2c 20 69 6e 63 6c 75  0 and 1.0, inclu
1c3f0 73 69 76 65 2e 29 5e 0a 20 20 5e 54 68 65 20 6c  sive.)^.  ^The l
1c400 69 6b 65 6c 69 68 6f 6f 64 28 58 29 20 66 75 6e  ikelihood(X) fun
1c410 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70  ction is a no-op
1c420 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
1c430 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d  enerator.  optim
1c440 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74 68 61  izes away so tha
1c450 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f  t it consumes no
1c460 20 43 50 55 20 63 79 63 6c 65 73 20 64 75 72 69   CPU cycles duri
1c470 6e 67 20 72 75 6e 2d 74 69 6d 65 0a 20 20 28 74  ng run-time.  (t
1c480 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63  hat is, during c
1c490 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33  alls to [sqlite3
1c4a0 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68  _step()])..  ^Th
1c4b0 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65  e purpose of the
1c4c0 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29   likelihood(X,Y)
1c4d0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20   function is to 
1c4e0 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20  provide a hint. 
1c4f0 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c   to the query pl
1c500 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61  anner that the a
1c510 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62  rgument X is a b
1c520 6f 6f 6c 65 61 6e 20 74 68 61 74 20 69 73 0a 20  oolean that is. 
1c530 20 74 72 75 65 20 77 69 74 68 20 61 20 70 72 6f   true with a pro
1c540 62 61 62 69 6c 69 74 79 20 6f 66 20 61 70 70 72  bability of appr
1c550 6f 78 69 6d 61 74 65 6c 79 20 59 2e 0a 20 20 5e  oximately Y..  ^
1c560 28 54 68 65 20 5b 75 6e 6c 69 6b 65 6c 79 28 58  (The [unlikely(X
1c570 29 5d 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73  )] function is s
1c580 68 6f 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69  hort-hand for li
1c590 6b 65 6c 69 68 6f 6f 64 28 58 2c 30 2e 30 36 32  kelihood(X,0.062
1c5a0 35 29 2e 29 5e 0a 20 20 5e 28 54 68 65 20 5b 6c  5).)^.  ^(The [l
1c5b0 69 6b 65 6c 79 28 58 29 5d 20 66 75 6e 63 74 69  ikely(X)] functi
1c5c0 6f 6e 20 69 73 20 73 68 6f 72 74 2d 68 61 6e 64  on is short-hand
1c5d0 20 66 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28   for likelihood(
1c5e0 58 2c 30 2e 39 33 37 35 29 2e 29 5e 0a 7d 0a 0a  X,0.9375).)^.}..
1c5f0 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 79 28  funcdef {likely(
1c600 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
1c610 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69  likely(X) functi
1c620 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
1c630 72 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e  rgument X unchan
1c640 67 65 64 2e 0a 20 20 5e 54 68 65 20 6c 69 6b 65  ged..  ^The like
1c650 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69  ly(X) function i
1c660 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74  s a no-op that t
1c670 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1c680 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77  r.  optimizes aw
1c690 61 79 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f  ay so that it co
1c6a0 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79  nsumes no CPU cy
1c6b0 63 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69  cles at.  run-ti
1c6c0 6d 65 20 28 74 68 61 74 20 69 73 2c 20 64 75 72  me (that is, dur
1c6d0 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71  ing calls to [sq
1c6e0 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a  lite3_step()])..
1c6f0 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f    ^The purpose o
1c700 66 20 74 68 65 20 6c 69 6b 65 6c 79 28 58 29 20  f the likely(X) 
1c710 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70  function is to p
1c720 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20  rovide a hint.  
1c730 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  to the query pla
1c740 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72  nner that the ar
1c750 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f  gument X is a bo
1c760 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 74 68  olean value.  th
1c770 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
1c780 75 65 2e 20 5e 28 54 68 65 20 6c 69 6b 65 6c 79  ue. ^(The likely
1c790 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  (X) function is 
1c7a0 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 74 6f 20  equivalent.  to 
1c7b0 5b 6c 69 6b 65 6c 69 68 6f 6f 64 5d 28 58 2c 30  [likelihood](X,0
1c7c0 2e 39 33 37 35 29 2e 29 5e 20 53 65 65 20 61 6c  .9375).)^ See al
1c7d0 73 6f 3a 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29  so: [unlikely(X)
1c7e0 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  ]..}..funcdef {l
1c7f0 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 29  oad_extension(X)
1c800 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
1c810 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
1c820 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
1c830 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 6c  (X,Y) function l
1c840 6f 61 64 73 20 5b 53 51 4c 69 74 65 20 65 78 74  oads [SQLite ext
1c850 65 6e 73 69 6f 6e 73 5d 20 6f 75 74 20 6f 66 20  ensions] out of 
1c860 74 68 65 20 73 68 61 72 65 64 0a 20 20 6c 69 62  the shared.  lib
1c870 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 64 20  rary file named 
1c880 58 20 75 73 69 6e 67 20 74 68 65 20 65 6e 74 72  X using the entr
1c890 79 20 70 6f 69 6e 74 20 59 2e 20 20 5e 54 68 65  y point Y.  ^The
1c8a0 20 72 65 73 75 6c 74 20 6f 66 20 6c 6f 61 64 5f   result of load_
1c8b0 65 78 74 65 6e 73 69 6f 6e 28 29 0a 20 20 69 73  extension().  is
1c8c0 20 61 6c 77 61 79 73 20 61 20 4e 55 4c 4c 2e 20   always a NULL. 
1c8d0 20 5e 49 66 20 59 20 69 73 20 6f 6d 69 74 74 65   ^If Y is omitte
1c8e0 64 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75  d then the defau
1c8f0 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 6e  lt entry point n
1c900 61 6d 65 20 69 73 20 75 73 65 64 2e 0a 20 20 5e  ame is used..  ^
1c910 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  The load_extensi
1c920 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 61  on() function ra
1c930 69 73 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f  ises an exceptio
1c940 6e 20 69 66 20 74 68 65 20 65 78 74 65 6e 73 69  n if the extensi
1c950 6f 6e 20 66 61 69 6c 73 20 74 6f 0a 20 20 6c 6f  on fails to.  lo
1c960 61 64 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65  ad or initialize
1c970 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c   correctly...  <
1c980 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65  p>^The load_exte
1c990 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e  nsion() function
1c9a0 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68   will fail if th
1c9b0 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 74 74 65  e extension atte
1c9c0 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f 64 69 66  mpts to .  modif
1c9d0 79 20 6f 72 20 64 65 6c 65 74 65 20 61 6e 20 53  y or delete an S
1c9e0 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 63  QL function or c
1c9f0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
1ca00 65 2e 20 20 5e 54 68 65 0a 20 20 65 78 74 65 6e  e.  ^The.  exten
1ca10 73 69 6f 6e 20 63 61 6e 20 61 64 64 20 6e 65 77  sion can add new
1ca20 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f   functions or co
1ca30 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
1ca40 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74 0a 20 20  s, but cannot.  
1ca50 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65  modify or delete
1ca60 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63 74 69   existing functi
1ca70 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67  ons or collating
1ca80 20 73 65 71 75 65 6e 63 65 73 20 62 65 63 61 75   sequences becau
1ca90 73 65 0a 20 20 74 68 6f 73 65 20 66 75 6e 63 74  se.  those funct
1caa0 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c  ions and/or coll
1cab0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
1cac0 6d 69 67 68 74 20 62 65 20 75 73 65 64 20 65 6c  might be used el
1cad0 73 65 77 68 65 72 65 0a 20 20 69 6e 20 74 68 65  sewhere.  in the
1cae0 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69   currently runni
1caf0 6e 67 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ng SQL statement
1cb00 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e 20 65 78  .  To load an ex
1cb10 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a 20 20 63  tension that.  c
1cb20 68 61 6e 67 65 73 20 6f 72 20 64 65 6c 65 74 65  hanges or delete
1cb30 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63  s functions or c
1cb40 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
1cb50 65 73 2c 20 75 73 65 20 74 68 65 0a 20 20 5b 73  es, use the.  [s
1cb60 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65  qlite3_load_exte
1cb70 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67 75  nsion()] C-langu
1cb80 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a 0a 20 20  age API.</p>..  
1cb90 3c 70 3e 46 6f 72 20 73 65 63 75 72 69 74 79 20  <p>For security 
1cba0 72 65 61 73 6f 6e 73 2c 20 65 78 74 65 6e 73 69  reasons, extensi
1cbb0 6f 6e 20 6c 6f 61 64 65 64 20 69 73 20 74 75 72  on loaded is tur
1cbc0 6e 65 64 20 6f 66 66 20 62 79 20 64 65 66 61 75  ned off by defau
1cbd0 6c 74 20 61 6e 64 20 6d 75 73 74 0a 20 20 62 65  lt and must.  be
1cbe0 20 65 6e 61 62 6c 65 64 20 62 79 20 61 20 70 72   enabled by a pr
1cbf0 69 6f 72 20 63 61 6c 6c 20 74 6f 20 5b 73 71 6c  ior call to [sql
1cc00 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64  ite3_enable_load
1cc10 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 2e 3c 2f  _extension()].</
1cc20 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  p>.}..funcdef {l
1cc30 6f 77 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  ower(X)} {} {.  
1cc40 5e 54 68 65 20 6c 6f 77 65 72 28 58 29 20 66 75  ^The lower(X) fu
1cc50 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1cc60 20 63 6f 70 79 20 6f 66 20 73 74 72 69 6e 67 20   copy of string 
1cc70 58 20 77 69 74 68 20 61 6c 6c 20 41 53 43 49 49  X with all ASCII
1cc80 20 63 68 61 72 61 63 74 65 72 73 0a 20 20 63 6f   characters.  co
1cc90 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72  nverted to lower
1cca0 20 63 61 73 65 2e 20 20 5e 54 68 65 20 64 65 66   case.  ^The def
1ccb0 61 75 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f  ault built-in lo
1ccc0 77 65 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 77  wer() function w
1ccd0 6f 72 6b 73 0a 20 20 66 6f 72 20 41 53 43 49 49  orks.  for ASCII
1cce0 20 63 68 61 72 61 63 74 65 72 73 20 6f 6e 6c 79   characters only
1ccf0 2e 20 20 54 6f 20 64 6f 20 63 61 73 65 20 63 6f  .  To do case co
1cd00 6e 76 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e  nversions on non
1cd10 2d 41 53 43 49 49 0a 20 20 63 68 61 72 61 63 74  -ASCII.  charact
1cd20 65 72 73 2c 20 6c 6f 61 64 20 74 68 65 20 49 43  ers, load the IC
1cd30 55 20 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a  U extension..}..
1cd40 66 75 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28 58  funcdef {ltrim(X
1cd50 29 20 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d  ) ltrim(X,Y)} {}
1cd60 20 7b 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d 28   {.  ^The ltrim(
1cd70 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
1cd80 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66  turns a string f
1cd90 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
1cda0 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
1cdb0 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
1cdc0 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d  appear in Y from
1cdd0 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f   the left side o
1cde0 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59  f X..  ^If the Y
1cdf0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69   argument is omi
1ce00 74 74 65 64 2c 20 6c 74 72 69 6d 28 58 29 20 72  tted, ltrim(X) r
1ce10 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72  emoves spaces fr
1ce20 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64 65  om the left side
1ce30 0a 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  .  of X..}..func
1ce40 64 65 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e  def {max(X,Y,...
1ce50 29 7d 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63  )} {*maxCoreFunc
1ce60 20 2a 6d 61 78 20 7b 6d 61 78 28 29 20 53 51 4c   *max {max() SQL
1ce70 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1ce80 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d  ^The multi-argum
1ce90 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69  ent max() functi
1cea0 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
1ceb0 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65  rgument with the
1cec0 20 0a 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75   .  maximum valu
1ced0 65 2c 20 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c  e, or return NUL
1cee0 4c 20 69 66 20 61 6e 79 20 61 72 67 75 6d 65 6e  L if any argumen
1cef0 74 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54  t is NULL. .  ^T
1cf00 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
1cf10 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e  t max() function
1cf20 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72   searches its ar
1cf30 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66  guments from lef
1cf40 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72  t to right.  for
1cf50 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61   an argument tha
1cf60 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c  t defines a coll
1cf70 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61  ating function a
1cf80 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c  nd uses that col
1cf90 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f  lating.  functio
1cfa0 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
1cfb0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e   comparisons.  ^
1cfc0 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61  If none of the a
1cfd0 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28  rguments to max(
1cfe0 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c  ).  define a col
1cff0 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c  lating function,
1d000 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59   then the BINARY
1d010 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
1d020 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 5e  ion is used..  ^
1d030 28 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 61  (Note that <b>ma
1d040 78 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d  x()</b> is a sim
1d050 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65  ple function whe
1d060 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72 20  n.  it has 2 or 
1d070 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62  more arguments b
1d080 75 74 20 6f 70 65 72 61 74 65 73 20 61 73 20 61  ut operates as a
1d090 6e 0a 20 20 5b 6d 61 78 41 67 67 46 75 6e 63 20  n.  [maxAggFunc 
1d0a0 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  | aggregate func
1d0b0 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f  tion] if given o
1d0c0 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67  nly a single arg
1d0d0 75 6d 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  ument.)^.}..func
1d0e0 64 65 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e  def {min(X,Y,...
1d0f0 29 7d 20 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63  )} {*minCoreFunc
1d100 20 2a 6d 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c   *min {min() SQL
1d110 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1d120 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d  ^The multi-argum
1d130 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69  ent min() functi
1d140 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
1d150 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65  rgument with the
1d160 0a 20 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65  .  minimum value
1d170 2e 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61  ..  ^The multi-a
1d180 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75  rgument min() fu
1d190 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20  nction searches 
1d1a0 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72  its arguments fr
1d1b0 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
1d1c0 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65  .  for an argume
1d1d0 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  nt that defines 
1d1e0 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
1d1f0 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68  tion and uses th
1d200 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66  at collating.  f
1d210 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20  unction for all 
1d220 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f  string compariso
1d230 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66  ns.  ^If none of
1d240 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74   the arguments t
1d250 6f 20 6d 69 6e 28 29 0a 20 20 64 65 66 69 6e 65  o min().  define
1d260 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
1d270 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ction, then the 
1d280 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67  BINARY collating
1d290 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
1d2a0 64 2e 0a 20 20 5e 28 4e 6f 74 65 20 74 68 61 74  d..  ^(Note that
1d2b0 20 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73   <b>min()</b> is
1d2c0 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69   a simple functi
1d2d0 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73  on when.  it has
1d2e0 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d   2 or more argum
1d2f0 65 6e 74 73 20 62 75 74 20 6f 70 65 72 61 74 65  ents but operate
1d300 73 20 61 73 20 61 6e 20 0a 20 20 5b 6d 69 6e 41  s as an .  [minA
1d310 67 67 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61  ggFunc | aggrega
1d320 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20  te function] if 
1d330 67 69 76 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73  given.  only a s
1d340 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 29  ingle argument.)
1d350 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6e 75  ^.}..funcdef {nu
1d360 6c 6c 69 66 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  llif(X,Y)} {} {.
1d370 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c    ^The nullif(X,
1d380 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
1d390 72 6e 73 20 69 74 73 20 66 69 72 73 74 20 61 72  rns its first ar
1d3a0 67 75 6d 65 6e 74 20 69 66 20 74 68 65 20 61 72  gument if the ar
1d3b0 67 75 6d 65 6e 74 73 20 61 72 65 0a 20 20 64 69  guments are.  di
1d3c0 66 66 65 72 65 6e 74 20 61 6e 64 20 4e 55 4c 4c  fferent and NULL
1d3d0 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
1d3e0 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 2e 20  s are the same. 
1d3f0 20 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59   ^The nullif(X,Y
1d400 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 73 65 61  ) function.  sea
1d410 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d 65  rches its argume
1d420 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  nts from left to
1d430 20 72 69 67 68 74 20 66 6f 72 20 61 6e 20 61 72   right for an ar
1d440 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69  gument that defi
1d450 6e 65 73 20 61 0a 20 20 63 6f 6c 6c 61 74 69 6e  nes a.  collatin
1d460 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75  g function and u
1d470 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69  ses that collati
1d480 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ng function for 
1d490 61 6c 6c 20 73 74 72 69 6e 67 0a 20 20 63 6f 6d  all string.  com
1d4a0 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e  parisons.  ^If n
1d4b0 65 69 74 68 65 72 20 61 72 67 75 6d 65 6e 74 20  either argument 
1d4c0 74 6f 20 6e 75 6c 6c 69 66 28 29 20 64 65 66 69  to nullif() defi
1d4d0 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  nes a collating 
1d4e0 66 75 6e 63 74 69 6f 6e 0a 20 20 74 68 65 6e 20  function.  then 
1d4f0 74 68 65 20 42 49 4e 41 52 59 20 69 73 20 75 73  the BINARY is us
1d500 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ed..}..funcdef {
1d510 70 72 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e  printf(FORMAT,..
1d520 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65  .)} {} {.  ^(The
1d530 20 70 72 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e   printf(FORMAT,.
1d540 2e 2e 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ..) SQL function
1d550 20 77 6f 72 6b 73 20 6c 69 6b 65 20 74 68 65 20   works like the 
1d560 5b 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  [sqlite3_mprintf
1d570 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 0a 20  ()] C-language. 
1d580 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68   function and th
1d590 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74  e printf() funct
1d5a0 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 73 74 61  ion from the sta
1d5b0 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 2e  ndard C library.
1d5c0 29 5e 0a 20 20 54 68 65 20 66 69 72 73 74 20 61  )^.  The first a
1d5d0 72 67 75 6d 65 6e 74 20 69 73 20 61 20 66 6f 72  rgument is a for
1d5e0 6d 61 74 20 73 74 72 69 6e 67 20 74 68 61 74 20  mat string that 
1d5f0 73 70 65 63 69 66 69 65 73 20 68 6f 77 20 74 6f  specifies how to
1d600 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 6f   construct the o
1d610 75 74 70 75 74 0a 20 20 73 74 72 69 6e 67 20 75  utput.  string u
1d620 73 69 6e 67 20 76 61 6c 75 65 73 20 74 61 6b 65  sing values take
1d630 6e 20 66 72 6f 6d 20 73 75 62 73 65 71 75 65 6e  n from subsequen
1d640 74 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 49  t arguments.  ^I
1d650 66 20 74 68 65 20 46 4f 52 4d 41 54 20 61 72 67  f the FORMAT arg
1d660 75 6d 65 6e 74 20 69 73 0a 20 20 6d 69 73 73 69  ument is.  missi
1d670 6e 67 20 6f 72 20 4e 55 4c 4c 20 74 68 65 6e 20  ng or NULL then 
1d680 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
1d690 4c 4c 2e 20 20 5e 54 68 65 20 25 6e 20 66 6f 72  LL.  ^The %n for
1d6a0 6d 61 74 20 69 73 20 73 69 6c 65 6e 74 6c 79 20  mat is silently 
1d6b0 69 67 6e 6f 72 65 64 20 61 6e 64 0a 20 20 64 6f  ignored and.  do
1d6c0 65 73 20 6e 6f 74 20 63 6f 6e 73 75 6d 65 20 61  es not consume a
1d6d0 6e 20 61 72 67 75 6d 65 6e 74 2e 20 20 5e 54 68  n argument.  ^Th
1d6e0 65 20 25 70 20 66 6f 72 6d 61 74 20 69 73 20 61  e %p format is a
1d6f0 6e 20 61 6c 69 61 73 20 66 6f 72 20 25 58 2e 20  n alias for %X. 
1d700 20 5e 54 68 65 20 25 7a 20 66 6f 72 6d 61 74 0a   ^The %z format.
1d710 20 20 69 73 20 69 6e 74 65 72 63 68 61 6e 67 65    is interchange
1d720 61 62 6c 65 20 77 69 74 68 20 25 73 2e 20 20 5e  able with %s.  ^
1d730 28 49 66 20 74 68 65 72 65 20 61 72 65 20 74 6f  (If there are to
1d740 6f 20 66 65 77 20 61 72 67 75 6d 65 6e 74 73 20  o few arguments 
1d750 69 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  in the argument 
1d760 6c 69 73 74 2c 0a 20 20 6d 69 73 73 69 6e 67 20  list,.  missing 
1d770 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 61 73  arguments are as
1d780 73 75 6d 65 64 20 74 6f 20 68 61 76 65 20 61 20  sumed to have a 
1d790 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 77 68 69 63  NULL value, whic
1d7a0 68 20 69 73 20 74 72 61 6e 73 6c 61 74 65 64 20  h is translated 
1d7b0 69 6e 74 6f 0a 20 20 30 20 6f 72 20 30 2e 30 20  into.  0 or 0.0 
1d7c0 66 6f 72 20 6e 75 6d 65 72 69 63 20 66 6f 72 6d  for numeric form
1d7d0 61 74 73 20 6f 72 20 61 6e 20 65 6d 70 74 79 20  ats or an empty 
1d7e0 73 74 72 69 6e 67 20 66 6f 72 20 25 73 2e 29 5e  string for %s.)^
1d7f0 20 20 53 65 65 20 74 68 65 0a 20 20 5b 62 75 69    See the.  [bui
1d800 6c 74 2d 69 6e 20 70 72 69 6e 74 66 28 29 5d 20  lt-in printf()] 
1d810 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f  documentation fo
1d820 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
1d830 6f 72 6d 61 74 69 6f 6e 2e 0a 7d 0a 20 20 0a 0a  ormation..}.  ..
1d840 66 75 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58  funcdef {quote(X
1d850 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71  )} {} {.  ^The q
1d860 75 6f 74 65 28 58 29 20 66 75 6e 63 74 69 6f 6e  uote(X) function
1d870 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 65 78   returns the tex
1d880 74 20 6f 66 20 61 6e 20 53 51 4c 20 6c 69 74 65  t of an SQL lite
1d890 72 61 6c 20 77 68 69 63 68 0a 20 20 69 73 20 74  ral which.  is t
1d8a0 68 65 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20  he value of its 
1d8b0 61 72 67 75 6d 65 6e 74 20 73 75 69 74 61 62 6c  argument suitabl
1d8c0 65 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20  e for inclusion 
1d8d0 69 6e 74 6f 20 61 6e 20 53 51 4c 20 73 74 61 74  into an SQL stat
1d8e0 65 6d 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67  ement..  ^String
1d8f0 73 20 61 72 65 20 73 75 72 72 6f 75 6e 64 65 64  s are surrounded
1d900 20 62 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65   by single-quote
1d910 73 20 77 69 74 68 20 65 73 63 61 70 65 73 20 6f  s with escapes o
1d920 6e 20 69 6e 74 65 72 69 6f 72 20 71 75 6f 74 65  n interior quote
1d930 73 0a 20 20 61 73 20 6e 65 65 64 65 64 2e 20 20  s.  as needed.  
1d940 5e 42 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f 64  ^BLOBs are encod
1d950 65 64 20 61 73 20 68 65 78 61 64 65 63 69 6d 61  ed as hexadecima
1d960 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 20 20 5e 53  l literals..  ^S
1d970 74 72 69 6e 67 73 20 77 69 74 68 20 65 6d 62 65  trings with embe
1d980 64 64 65 64 20 4e 55 4c 20 63 68 61 72 61 63 74  dded NUL charact
1d990 65 72 73 20 63 61 6e 6e 6f 74 20 62 65 20 72 65  ers cannot be re
1d9a0 70 72 65 73 65 6e 74 65 64 20 61 73 20 73 74 72  presented as str
1d9b0 69 6e 67 0a 20 20 6c 69 74 65 72 61 6c 73 20 69  ing.  literals i
1d9c0 6e 20 53 51 4c 20 61 6e 64 20 68 65 6e 63 65 20  n SQL and hence 
1d9d0 74 68 65 20 72 65 74 75 72 6e 65 64 20 73 74 72  the returned str
1d9e0 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 74  ing literal is t
1d9f0 72 75 6e 63 61 74 65 64 20 70 72 69 6f 72 0a 20  runcated prior. 
1da00 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55   to the first NU
1da10 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  L..}..funcdef {r
1da20 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20  andom()} {} {.  
1da30 5e 54 68 65 20 72 61 6e 64 6f 6d 28 29 20 66 75  ^The random() fu
1da40 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1da50 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69   pseudo-random i
1da60 6e 74 65 67 65 72 0a 20 20 62 65 74 77 65 65 6e  nteger.  between
1da70 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
1da80 37 35 38 30 38 20 61 6e 64 20 2b 39 32 32 33 33  75808 and +92233
1da90 37 32 30 33 36 38 35 34 37 37 35 38 30 37 2e 0a  72036854775807..
1daa0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64  }..funcdef {rand
1dab0 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a  omblob(N)} {} {.
1dac0 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 62 6c 6f    ^The randomblo
1dad0 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  b(N) function re
1dae0 74 75 72 6e 20 61 6e 20 4e 2d 62 79 74 65 20 62  turn an N-byte b
1daf0 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70  lob containing p
1db00 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62  seudo-random.  b
1db10 79 74 65 73 2e 20 5e 49 66 20 4e 20 69 73 20 6c  ytes. ^If N is l
1db20 65 73 73 20 74 68 61 6e 20 31 20 74 68 65 6e 20  ess than 1 then 
1db30 61 20 31 2d 62 79 74 65 20 72 61 6e 64 6f 6d 20  a 1-byte random 
1db40 62 6c 6f 62 20 69 73 20 72 65 74 75 72 6e 65 64  blob is returned
1db50 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61  ...  <p>Hint:  a
1db60 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20  pplications can 
1db70 67 65 6e 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c  generate globall
1db80 79 20 75 6e 69 71 75 65 20 69 64 65 6e 74 69 66  y unique identif
1db90 69 65 72 73 0a 20 20 75 73 69 6e 67 20 74 68 69  iers.  using thi
1dba0 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74  s function toget
1dbb0 68 65 72 20 77 69 74 68 20 5b 68 65 78 28 29 5d  her with [hex()]
1dbc0 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72   and/or.  [lower
1dbd0 28 29 5d 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f  ()] like this:</
1dbe0 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74  p>..  <blockquot
1dbf0 65 3e 0a 20 20 68 65 78 28 72 61 6e 64 6f 6d 62  e>.  hex(randomb
1dc00 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72  lob(16))<br></br
1dc10 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78 28 72 61  >.  lower(hex(ra
1dc20 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20  ndomblob(16))). 
1dc30 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d   </blockquote>.}
1dc40 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65 70 6c 61  ..funcdef {repla
1dc50 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a  ce(X,Y,Z)} {} {.
1dc60 20 20 5e 54 68 65 20 72 65 70 6c 61 63 65 28 58    ^The replace(X
1dc70 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72  ,Y,Z) function r
1dc80 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
1dc90 66 6f 72 6d 65 64 20 62 79 20 73 75 62 73 74 69  formed by substi
1dca0 74 75 74 69 6e 67 0a 20 20 73 74 72 69 6e 67 20  tuting.  string 
1dcb0 5a 20 66 6f 72 20 65 76 65 72 79 20 6f 63 63 75  Z for every occu
1dcc0 72 72 65 6e 63 65 20 6f 66 20 73 74 72 69 6e 67  rrence of string
1dcd0 20 59 20 69 6e 20 73 74 72 69 6e 67 20 58 2e 20   Y in string X. 
1dce0 20 5e 54 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20   ^The [BINARY]. 
1dcf0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
1dd00 6e 63 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  nce is used for 
1dd10 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49  comparisons.  ^I
1dd20 66 20 59 20 69 73 20 61 6e 20 65 6d 70 74 79 0a  f Y is an empty.
1dd30 20 20 73 74 72 69 6e 67 20 74 68 65 6e 20 72 65    string then re
1dd40 74 75 72 6e 20 58 20 75 6e 63 68 61 6e 67 65 64  turn X unchanged
1dd50 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 6f 74 20  .  ^If Z is not 
1dd60 69 6e 69 74 69 61 6c 6c 79 0a 20 20 61 20 73 74  initially.  a st
1dd70 72 69 6e 67 2c 20 69 74 20 69 73 20 63 61 73 74  ring, it is cast
1dd80 20 74 6f 20 61 20 55 54 46 2d 38 20 73 74 72 69   to a UTF-8 stri
1dd90 6e 67 20 70 72 69 6f 72 20 74 6f 20 70 72 6f 63  ng prior to proc
1dda0 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64  essing..}..funcd
1ddb0 65 66 20 7b 72 6f 75 6e 64 28 58 29 20 72 6f 75  ef {round(X) rou
1ddc0 6e 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  nd(X,Y)} {} {.  
1ddd0 5e 54 68 65 20 72 6f 75 6e 64 28 58 2c 59 29 20  ^The round(X,Y) 
1dde0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1ddf0 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e   a floating-poin
1de00 74 0a 20 20 76 61 6c 75 65 20 58 20 72 6f 75 6e  t.  value X roun
1de10 64 65 64 20 74 6f 20 59 20 64 69 67 69 74 73 20  ded to Y digits 
1de20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20  to the right of 
1de30 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
1de40 74 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  t..  ^If the Y a
1de50 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
1de60 65 64 2c 20 69 74 20 69 73 20 61 73 73 75 6d 65  ed, it is assume
1de70 64 20 74 6f 20 62 65 20 30 2e 0a 7d 0a 0a 66 75  d to be 0..}..fu
1de80 6e 63 64 65 66 20 7b 72 74 72 69 6d 28 58 29 20  ncdef {rtrim(X) 
1de90 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b  rtrim(X,Y)} {} {
1dea0 0a 20 20 5e 54 68 65 20 72 74 72 69 6d 28 58 2c  .  ^The rtrim(X,
1deb0 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
1dec0 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
1ded0 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
1dee0 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
1def0 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
1df00 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74  pear in Y from t
1df10 68 65 20 72 69 67 68 74 20 73 69 64 65 20 6f 66  he right side of
1df20 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20   X..  ^If the Y 
1df30 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
1df40 74 65 64 2c 20 72 74 72 69 6d 28 58 29 20 72 65  ted, rtrim(X) re
1df50 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f  moves spaces fro
1df60 6d 20 74 68 65 20 72 69 67 68 74 0a 20 20 73 69  m the right.  si
1df70 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  de of X..}..func
1df80 64 65 66 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d  def {soundex(X)}
1df90 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75   {} {.  ^The sou
1dfa0 6e 64 65 78 28 58 29 20 66 75 6e 63 74 69 6f 6e  ndex(X) function
1dfb0 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
1dfc0 67 20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f  g that is the so
1dfd0 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a  undex encoding .
1dfe0 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20    of the string 
1dff0 58 2e 0a 20 20 5e 54 68 65 20 73 74 72 69 6e 67  X..  ^The string
1e000 20 22 3f 30 30 30 22 20 69 73 20 72 65 74 75 72   "?000" is retur
1e010 6e 65 64 20 69 66 20 74 68 65 20 61 72 67 75 6d  ned if the argum
1e020 65 6e 74 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63  ent is NULL or c
1e030 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43  ontains.  no ASC
1e040 49 49 20 61 6c 70 68 61 62 65 74 69 63 20 63 68  II alphabetic ch
1e050 61 72 61 63 74 65 72 73 2e 0a 20 20 5e 28 54 68  aracters..  ^(Th
1e060 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
1e070 6d 69 74 74 65 64 20 66 72 6f 6d 20 53 51 4c 69  mitted from SQLi
1e080 74 65 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 20  te by default.. 
1e090 20 49 74 20 69 73 20 6f 6e 6c 79 20 61 76 61 69   It is only avai
1e0a0 6c 61 62 6c 65 20 69 66 20 74 68 65 20 5b 53 51  lable if the [SQ
1e0b0 4c 49 54 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f  LITE_SOUNDEX] co
1e0c0 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
1e0d0 6e 0a 20 20 69 73 20 75 73 65 64 20 77 68 65 6e  n.  is used when
1e0e0 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74   SQLite is built
1e0f0 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .)^.}..funcdef {
1e100 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
1e110 74 69 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20  tion_get(N)} {} 
1e120 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  {.  ^The sqlite_
1e130 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
1e140 74 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  t() SQL function
1e150 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
1e160 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69  ound the.  [sqli
1e170 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
1e180 6e 5f 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66  n_get()] C/C++ f
1e190 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73  unction..  ^This
1e1a0 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
1e1b0 20 74 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c   the N-th compil
1e1c0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73  e-time option us
1e1d0 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69  ed to build SQLi
1e1e0 74 65 0a 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20  te.  or NULL if 
1e1f0 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67  N is out of rang
1e200 65 2e 20 20 53 65 65 20 61 6c 73 6f 20 74 68 65  e.  See also the
1e210 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e   [compile_option
1e220 73 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75  s pragma]..}..fu
1e230 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f  ncdef {sqlite_co
1e240 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64  mpileoption_used
1e250 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
1e260 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f   sqlite_compileo
1e270 70 74 69 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c  ption_used() SQL
1e280 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
1e290 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
1e2a0 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d  e.  [sqlite3_com
1e2b0 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
1e2c0 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f  )] C/C++ functio
1e2d0 6e 2e 0a 20 20 5e 57 68 65 6e 20 74 68 65 20 61  n..  ^When the a
1e2e0 72 67 75 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c  rgument X to sql
1e2f0 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
1e300 6e 5f 75 73 65 64 28 58 29 20 69 73 20 61 20 73  n_used(X) is a s
1e310 74 72 69 6e 67 20 77 68 69 63 68 0a 20 20 69 73  tring which.  is
1e320 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63   the name of a c
1e330 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
1e340 6f 6e 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65  on, this routine
1e350 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 28 31   returns true (1
1e360 29 20 6f 72 0a 20 20 66 61 6c 73 65 20 28 30 29  ) or.  false (0)
1e370 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
1e380 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61  ether or not tha
1e390 74 20 6f 70 74 69 6f 6e 20 77 61 73 20 75 73 65  t option was use
1e3a0 64 20 64 75 72 69 6e 67 20 74 68 65 0a 20 20 62  d during the.  b
1e3b0 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  uild..}..funcdef
1e3c0 20 7b 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28   {sqlite_offset(
1e3d0 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
1e3e0 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29  sqlite_offset(X)
1e3f0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1e400 73 20 74 68 65 20 62 79 74 65 20 6f 66 66 73 65  s the byte offse
1e410 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
1e420 65 0a 20 20 66 69 6c 65 20 66 6f 72 20 74 68 65  e.  file for the
1e430 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
1e440 65 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 68  e record from wh
1e450 69 63 68 20 76 61 6c 75 65 20 77 6f 75 6c 64 20  ich value would 
1e460 62 65 20 72 65 61 64 2e 0a 20 20 49 66 20 58 20  be read..  If X 
1e470 69 73 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  is not a column 
1e480 69 6e 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  in an ordinary t
1e490 61 62 6c 65 2c 20 74 68 65 6e 20 73 71 6c 69 74  able, then sqlit
1e4a0 65 5f 6f 66 66 73 65 74 28 58 29 20 72 65 74 75  e_offset(X) retu
1e4b0 72 6e 73 0a 20 20 4e 55 4c 4c 2e 20 20 54 68 65  rns.  NULL.  The
1e4c0 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
1e4d0 62 79 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74  by sqlite_offset
1e4e0 28 58 29 20 6d 69 67 68 74 20 72 65 66 65 72 65  (X) might refere
1e4f0 6e 63 65 20 65 69 74 68 65 72 20 74 68 65 0a 20  nce either the. 
1e500 20 6f 72 69 67 69 6e 61 6c 20 74 61 62 6c 65 20   original table 
1e510 6f 72 20 61 6e 20 69 6e 64 65 78 2c 20 64 65 70  or an index, dep
1e520 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 71 75  ending on the qu
1e530 65 72 79 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ery.  If the val
1e540 75 65 20 58 20 77 6f 75 6c 64 0a 20 20 6e 6f 72  ue X would.  nor
1e550 6d 61 6c 6c 79 20 62 65 20 65 78 74 72 61 63 74  mally be extract
1e560 65 64 20 66 72 6f 6d 20 61 6e 20 69 6e 64 65 78  ed from an index
1e570 2c 20 74 68 65 20 73 71 6c 69 74 65 5f 6f 66 66  , the sqlite_off
1e580 73 65 74 28 58 29 20 72 65 74 75 72 6e 73 20 74  set(X) returns t
1e590 68 65 0a 20 20 6f 66 66 73 65 74 20 74 6f 20 74  he.  offset to t
1e5a0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
1e5b0 20 69 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 20   index record.  
1e5c0 49 66 20 74 68 65 20 76 61 6c 75 65 20 58 20 77  If the value X w
1e5d0 6f 75 6c 64 20 62 65 0a 20 20 65 78 74 72 61 63  ould be.  extrac
1e5e0 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6f 72 69  ted from the ori
1e5f0 67 69 6e 61 6c 20 74 61 62 6c 65 2c 20 74 68 65  ginal table, the
1e600 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28  n sqlite_offset(
1e610 58 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 6f  X) returns the o
1e620 66 66 73 65 74 0a 20 20 74 6f 20 74 68 65 20 74  ffset.  to the t
1e630 61 62 6c 65 20 72 65 63 6f 72 64 2e 0a 0a 20 20  able record...  
1e640 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 6f 66  <p>The sqlite_of
1e650 66 73 65 74 28 58 29 20 53 51 4c 20 66 75 6e 63  fset(X) SQL func
1e660 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 61 76 61  tion is only ava
1e670 69 6c 61 62 6c 65 20 69 66 20 53 51 4c 69 74 65  ilable if SQLite
1e680 20 69 73 20 62 75 69 6c 74 0a 20 20 75 73 69 6e   is built.  usin
1e690 67 20 74 68 65 20 5b 2d 44 53 51 4c 49 54 45 5f  g the [-DSQLITE_
1e6a0 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51  ENABLE_OFFSET_SQ
1e6b0 4c 5f 46 55 4e 43 5d 20 63 6f 6d 70 69 6c 65 2d  L_FUNC] compile-
1e6c0 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 0a 7d 0a 0a  time option..}..
1e6d0 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f  funcdef {sqlite_
1e6e0 73 6f 75 72 63 65 5f 69 64 28 29 7d 20 7b 7d 20  source_id()} {} 
1e6f0 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  {.  ^The sqlite_
1e700 73 6f 75 72 63 65 5f 69 64 28 29 20 66 75 6e 63  source_id() func
1e710 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
1e720 74 72 69 6e 67 20 74 68 61 74 20 69 64 65 6e 74  tring that ident
1e730 69 66 69 65 73 20 74 68 65 0a 20 20 73 70 65 63  ifies the.  spec
1e740 69 66 69 63 20 76 65 72 73 69 6f 6e 20 6f 66 20  ific version of 
1e750 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20  the source code 
1e760 74 68 61 74 20 77 61 73 20 75 73 65 64 20 74 6f  that was used to
1e770 20 62 75 69 6c 64 20 74 68 65 20 53 51 4c 69 74   build the SQLit
1e780 65 0a 20 20 6c 69 62 72 61 72 79 2e 20 20 5e 54  e.  library.  ^T
1e790 68 65 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e  he string return
1e7a0 65 64 20 62 79 20 73 71 6c 69 74 65 5f 73 6f 75  ed by sqlite_sou
1e7b0 72 63 65 5f 69 64 28 29 20 69 73 0a 20 20 74 68  rce_id() is.  th
1e7c0 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1e7d0 74 68 61 74 20 74 68 65 20 73 6f 75 72 63 65 20  that the source 
1e7e0 63 6f 64 65 20 77 61 73 20 63 68 65 63 6b 65 64  code was checked
1e7f0 20 69 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a   in followed by.
1e800 20 20 74 68 65 20 53 48 41 31 20 68 61 73 68 20    the SHA1 hash 
1e810 66 6f 72 20 74 68 61 74 20 63 68 65 63 6b 2d 69  for that check-i
1e820 6e 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69  n.  ^This functi
1e830 6f 6e 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77  on is.  an SQL w
1e840 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
1e850 65 20 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63  e [sqlite3_sourc
1e860 65 69 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61  eid()] C interfa
1e870 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ce..}..funcdef {
1e880 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29  sqlite_version()
1e890 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
1e8a0 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66  lite_version() f
1e8b0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1e8c0 74 68 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69  the version stri
1e8d0 6e 67 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ng for the SQLit
1e8e0 65 0a 20 20 6c 69 62 72 61 72 79 20 74 68 61 74  e.  library that
1e8f0 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54   is running.  ^T
1e900 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
1e910 61 6e 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72  an SQL.  wrapper
1e920 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c   around the [sql
1e930 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28  ite3_libversion(
1e940 29 5d 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a  )] C-interface..
1e950 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73  }..funcdef {subs
1e960 74 72 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72  tr(X,Y,Z) substr
1e970 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
1e980 68 65 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29  he substr(X,Y,Z)
1e990 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1e9a0 73 20 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66  s a substring of
1e9b0 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20   input string X 
1e9c0 74 68 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69  that begins.  wi
1e9d0 74 68 20 74 68 65 20 59 2d 74 68 20 63 68 61 72  th the Y-th char
1e9e0 61 63 74 65 72 20 61 6e 64 20 77 68 69 63 68 20  acter and which 
1e9f0 69 73 20 5a 20 63 68 61 72 61 63 74 65 72 73 20  is Z characters 
1ea00 6c 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73  long..  ^If Z is
1ea10 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75   omitted then su
1ea20 62 73 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e  bstr(X,Y) return
1ea30 73 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73  s all characters
1ea40 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64   through the end
1ea50 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  .  of the string
1ea60 20 58 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74   X beginning wit
1ea70 68 20 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54  h the Y-th..  ^T
1ea80 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61  he left-most cha
1ea90 72 61 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e  racter of X is n
1eaa0 75 6d 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20  umber 1.  ^If Y 
1eab0 69 73 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68  is negative.  th
1eac0 65 6e 20 74 68 65 20 66 69 72 73 74 20 63 68 61  en the first cha
1ead0 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 75  racter of the su
1eae0 62 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64  bstring is found
1eaf0 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f   by counting fro
1eb00 6d 20 74 68 65 0a 20 20 72 69 67 68 74 20 72 61  m the.  right ra
1eb10 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65  ther than the le
1eb20 66 74 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65  ft.  ^If Z is ne
1eb30 67 61 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68  gative then.  th
1eb40 65 20 61 62 73 28 5a 29 20 63 68 61 72 61 63 74  e abs(Z) charact
1eb50 65 72 73 20 70 72 65 63 65 64 69 6e 67 20 74 68  ers preceding th
1eb60 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72  e Y-th character
1eb70 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20   are returned.. 
1eb80 20 5e 49 66 20 58 20 69 73 20 61 20 73 74 72 69   ^If X is a stri
1eb90 6e 67 20 74 68 65 6e 20 63 68 61 72 61 63 74 65  ng then characte
1eba0 72 73 20 69 6e 64 69 63 65 73 20 72 65 66 65 72  rs indices refer
1ebb0 20 74 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38   to actual UTF-8
1ebc0 20 0a 20 20 63 68 61 72 61 63 74 65 72 73 2e 20   .  characters. 
1ebd0 20 5e 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42   ^If X is a BLOB
1ebe0 20 74 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65   then the indice
1ebf0 73 20 72 65 66 65 72 20 74 6f 20 62 79 74 65 73  s refer to bytes
1ec00 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f  ..}..funcdef {to
1ec10 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b  tal_changes()} {
1ec20 7d 20 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c  } {.  ^The total
1ec30 5f 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74  _changes() funct
1ec40 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1ec50 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68  number of row ch
1ec60 61 6e 67 65 73 0a 20 20 63 61 75 73 65 64 20 62  anges.  caused b
1ec70 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
1ec80 20 6f 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61   or DELETE.  sta
1ec90 74 65 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68  tements since th
1eca0 65 20 63 75 72 72 65 6e 74 20 64 61 74 61 62 61  e current databa
1ecb0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61  se connection wa
1ecc0 73 20 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69  s opened..  ^Thi
1ecd0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  s function is a 
1ece0 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
1ecf0 68 65 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61  he [sqlite3_tota
1ed00 6c 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43  l_changes()].  C
1ed10 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a  /C++ interface..
1ed20 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d  }..funcdef {trim
1ed30 28 58 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b  (X) trim(X,Y)} {
1ed40 7d 20 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28  } {.  ^The trim(
1ed50 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
1ed60 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66  turns a string f
1ed70 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
1ed80 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
1ed90 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
1eda0 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d  appear in Y from
1edb0 20 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e   both ends of X.
1edc0 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
1edd0 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
1ede0 2c 20 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65  , trim(X) remove
1edf0 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f  s spaces from bo
1ee00 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a  th ends of X..}.
1ee10 0a 66 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66  .funcdef {typeof
1ee20 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
1ee30 20 74 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74   typeof(X) funct
1ee40 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
1ee50 72 69 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61  ring that indica
1ee60 74 65 73 20 74 68 65 20 5b 64 61 74 61 74 79 70  tes the [datatyp
1ee70 65 5d 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72  e] of.  the expr
1ee80 65 73 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22  ession X: "null"
1ee90 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65  , "integer", "re
1eea0 61 6c 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20  al", "text", or 
1eeb0 22 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64  "blob"..}..funcd
1eec0 65 66 20 7b 75 6e 6c 69 6b 65 6c 79 28 58 29 7d  ef {unlikely(X)}
1eed0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e 6c   {} {.  ^The unl
1eee0 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f  ikely(X) functio
1eef0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72  n returns the ar
1ef00 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67  gument X unchang
1ef10 65 64 2e 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b  ed..  ^The unlik
1ef20 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
1ef30 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20  is a no-op that 
1ef40 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1ef50 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61  or.  optimizes a
1ef60 77 61 79 20 73 6f 20 74 68 61 74 20 69 74 20 63  way so that it c
1ef70 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63  onsumes no CPU c
1ef80 79 63 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d 74  ycles at.  run-t
1ef90 69 6d 65 20 28 74 68 61 74 20 69 73 2c 20 64 75  ime (that is, du
1efa0 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73  ring calls to [s
1efb0 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e  qlite3_step()]).
1efc0 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20  .  ^The purpose 
1efd0 6f 66 20 74 68 65 20 75 6e 6c 69 6b 65 6c 79 28  of the unlikely(
1efe0 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74  X) function is t
1eff0 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74  o provide a hint
1f000 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72 79 20  .  to the query 
1f010 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65  planner that the
1f020 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61   argument X is a
1f030 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20   boolean value. 
1f040 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
1f050 20 6e 6f 74 20 74 72 75 65 2e 20 5e 28 54 68 65   not true. ^(The
1f060 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e   unlikely(X) fun
1f070 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c  ction is equival
1f080 65 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69  ent.  to [likeli
1f090 68 6f 6f 64 5d 28 58 2c 20 30 2e 30 36 32 35 29  hood](X, 0.0625)
1f0a0 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .)^.}..funcdef {
1f0b0 75 6e 69 63 6f 64 65 28 58 29 7d 20 7b 7d 20 7b  unicode(X)} {} {
1f0c0 0a 20 20 5e 54 68 65 20 75 6e 69 63 6f 64 65 28  .  ^The unicode(
1f0d0 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1f0e0 72 6e 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20  rns the numeric 
1f0f0 75 6e 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69  unicode code poi
1f100 6e 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  nt corresponding
1f110 20 74 6f 0a 20 20 74 68 65 20 66 69 72 73 74 20   to.  the first 
1f120 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
1f130 20 73 74 72 69 6e 67 20 58 2e 20 20 49 66 20 74   string X.  If t
1f140 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 75  he argument to u
1f150 6e 69 63 6f 64 65 28 58 29 20 69 73 20 6e 6f 74  nicode(X) is not
1f160 20 61 20 73 74 72 69 6e 67 0a 20 20 74 68 65 6e   a string.  then
1f170 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 75   the result is u
1f180 6e 64 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e  ndefined..}..fun
1f190 63 64 65 66 20 7b 75 70 70 65 72 28 58 29 7d 20  cdef {upper(X)} 
1f1a0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 70 70 65  {} {.  ^The uppe
1f1b0 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  r(X) function re
1f1c0 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
1f1d0 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 69  input string X i
1f1e0 6e 20 77 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c  n which all .  l
1f1f0 6f 77 65 72 2d 63 61 73 65 20 41 53 43 49 49 20  ower-case ASCII 
1f200 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20 63  characters are c
1f210 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 68 65 69  onverted to thei
1f220 72 20 75 70 70 65 72 2d 63 61 73 65 20 65 71 75  r upper-case equ
1f230 69 76 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63  ivalent..}..func
1f240 64 65 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29  def {zeroblob(N)
1f250 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65  } {} {.  ^The ze
1f260 72 6f 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69  roblob(N) functi
1f270 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 42 4c 4f  on returns a BLO
1f280 42 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20  B consisting of 
1f290 4e 20 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e  N bytes of 0x00.
1f2a0 0a 20 20 53 51 4c 69 74 65 20 6d 61 6e 61 67 65  .  SQLite manage
1f2b0 73 20 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62  s these zeroblob
1f2c0 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e 74  s very efficient
1f2d0 6c 79 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63  ly.  Zeroblobs c
1f2e0 61 6e 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20  an be used to.  
1f2f0 72 65 73 65 72 76 65 20 73 70 61 63 65 20 66 6f  reserve space fo
1f300 72 20 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73  r a BLOB that is
1f310 20 6c 61 74 65 72 20 77 72 69 74 74 65 6e 20 75   later written u
1f320 73 69 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65 33  sing .  [sqlite3
1f330 5f 62 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69  _blob_open() | i
1f340 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20  ncremental BLOB 
1f350 49 2f 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51  I/O]..  ^This SQ
1f360 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d  L function is im
1f370 70 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20  plemented using 
1f380 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73  the [sqlite3_res
1f390 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a  ult_zeroblob()].
1f3a0 20 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74    routine from t
1f3b0 68 65 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  he C/C++ interfa
1f3c0 63 65 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  ce..}.</tcl>..<p
1f3d0 3e 54 68 65 20 63 6f 72 65 20 66 75 6e 63 74 69  >The core functi
1f3e0 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20  ons shown below 
1f3f0 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79  are available by
1f400 20 64 65 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65   default. .[date
1f410 66 75 6e 63 20 7c 20 44 61 74 65 20 26 61 6d 70  func | Date &amp
1f420 3b 20 54 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  ; Time functions
1f430 5d 2c 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67  ],.[aggfunc | ag
1f440 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1f450 73 5d 2c 0a 5b 62 75 69 6c 74 69 6e 20 77 69 6e  s],.[builtin win
1f460 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 7c 77 69  dow functions|wi
1f470 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 5d 2c  ndow functions],
1f480 20 61 6e 64 0a 5b 6a 73 6f 6e 31 20 7c 20 4a 53   and.[json1 | JS
1f490 4f 4e 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72  ON functions] ar
1f4a0 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70  e documented sep
1f4b0 61 72 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70  arately.  An.app
1f4c0 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20 64 65 66  lication may def
1f4d0 69 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66  ine additional.f
1f4e0 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e  unctions written
1f4f0 20 69 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20   in C and added 
1f500 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
1f510 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65  engine using.the
1f520 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   [sqlite3_create
1f530 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49  _function()] API
1f540 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74  .</p>..<tcl>.set
1f550 20 6c 78 20 7b 7d 0a 66 6f 72 65 61 63 68 20 62   lx {}.foreach b
1f560 61 73 65 73 79 6e 74 61 78 20 5b 61 72 72 61 79  asesyntax [array
1f570 20 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73   names corefuncs
1f580 65 74 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20  et] {.  foreach 
1f590 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73  {syntax keywords
1f5a0 20 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63   desc} $corefunc
1f5b0 73 65 74 28 24 62 61 73 65 73 79 6e 74 61 78 29  set($basesyntax)
1f5c0 20 62 72 65 61 6b 0a 20 20 72 65 67 65 78 70 20   break.  regexp 
1f5d0 7b 5e 5b 61 2d 7a 5f 5d 2b 7d 20 24 62 61 73 65  {^[a-z_]+} $base
1f5e0 73 79 6e 74 61 78 20 66 72 61 67 6d 65 6e 74 0a  syntax fragment.
1f5f0 20 20 66 6f 72 65 61 63 68 20 63 6f 72 65 73 79    foreach coresy
1f600 6e 74 61 78 20 24 73 79 6e 74 61 78 20 7b 0a 20  ntax $syntax {. 
1f610 20 20 20 6c 61 70 70 65 6e 64 20 6c 78 20 5b 6c     lappend lx [l
1f620 69 73 74 20 24 66 72 61 67 6d 65 6e 74 20 24 63  ist $fragment $c
1f630 6f 72 65 73 79 6e 74 61 78 20 30 5d 0a 20 20 7d  oresyntax 0].  }
1f640 0a 7d 0a 68 64 5f 6c 69 73 74 5f 6f 66 5f 6c 69  .}.hd_list_of_li
1f650 6e 6b 73 20 7b 7d 20 32 32 35 20 5b 6c 73 6f 72  nks {} 225 [lsor
1f660 74 20 2d 69 6e 64 65 78 20 31 20 24 6c 78 5d 0a  t -index 1 $lx].
1f670 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c 68 72 20  .hd_putsnl "<hr 
1f680 63 6c 61 73 73 3d 27 78 68 72 27 3e 22 0a 68 64  class='xhr'>".hd
1f690 5f 70 75 74 73 6e 6c 20 22 3c 64 6c 3e 22 0a 66  _putsnl "<dl>".f
1f6a0 6f 72 65 61 63 68 20 62 61 73 65 73 79 6e 74 61  oreach basesynta
1f6b0 78 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20  x [lsort [array 
1f6c0 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73 65  names corefuncse
1f6d0 74 5d 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20  t]] {.  foreach 
1f6e0 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73  {syntax keywords
1f6f0 20 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63   desc} $corefunc
1f700 73 65 74 28 24 62 61 73 65 73 79 6e 74 61 78 29  set($basesyntax)
1f710 20 62 72 65 61 6b 0a 20 20 72 65 67 73 75 62 20   break.  regsub 
1f720 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69  -all {\s+} [stri
1f730 6e 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d  ng trim $syntax]
1f740 20 7b 3c 62 72 20 2f 3e 7d 20 73 79 6e 74 61 78   {<br />} syntax
1f750 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
1f760 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73  \(([^*)]+)\)} $s
1f770 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69  yntax {(<i>\1</i
1f780 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67  >)} syntax.  reg
1f790 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79  sub -all {,} $sy
1f7a0 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20  ntax {</i>,<i>} 
1f7b0 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
1f7c0 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c  -all {<i>\.\.\.<
1f7d0 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e  /i>} $syntax {..
1f7e0 2e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 65  .} syntax.  rege
1f7f0 78 70 20 7b 5e 5b 61 2d 7a 5d 2b 7d 20 24 62 61  xp {^[a-z]+} $ba
1f800 73 65 73 79 6e 74 61 78 20 66 72 61 67 6d 65 6e  sesyntax fragmen
1f810 74 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68  t.  if {[llength
1f820 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20   $keywords]==0} 
1f830 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61  {.    regexp {[a
1f840 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e  -z_]+} $syntax n
1f850 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d  ame.    hd_fragm
1f860 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65  ent $name *$name
1f870 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20   "${name}() SQL 
1f880 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c  function".  } el
1f890 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61  se {.    set fra
1f8a0 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b  gname [lindex $k
1f8b0 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72  eywords 0].    r
1f8c0 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d  egsub -all {[^a-
1f8d0 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d  z]} $fragname {}
1f8e0 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64   fragname.    hd
1f8f0 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e  _fragment $fragn
1f900 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f  ame.    eval hd_
1f910 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67  keywords [string
1f920 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b   map {\n { }} $k
1f930 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68  eywords].  }.  h
1f940 64 5f 70 75 74 73 20 22 3c 64 74 3e 3c 70 3e 3c  d_puts "<dt><p><
1f950 62 3e 24 73 79 6e 74 61 78 3c 2f 62 3e 3c 2f 64  b>$syntax</b></d
1f960 74 3e 22 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65  t>".  hd_resolve
1f970 20 22 3c 64 64 3e 3c 70 3e 24 64 65 73 63 3c 2f   "<dd><p>$desc</
1f980 64 64 3e 5c 6e 22 0a 7d 0a 68 64 5f 70 75 74 73  dd>\n".}.hd_puts
1f990 6e 6c 20 22 3c 2f 64 6c 3e 22 0a 0a 23 23 23 23  nl "</dl>"..####
1f9a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9e0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
1f9f0 6f 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d  on {Date And Tim
1fa00 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74  e Functions} dat
1fa10 65 66 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63  efunc {*datefunc
1fa20 20 7b 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20   {date and time 
1fa30 66 75 6e 63 74 69 6f 6e 73 7d 7d 0a 68 64 5f 6b  functions}}.hd_k
1fa40 65 79 77 6f 72 64 73 20 7b 64 61 74 65 28 29 20  eywords {date() 
1fa50 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 74  SQL function} {t
1fa60 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69  ime() SQL functi
1fa70 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20  on}.hd_keywords 
1fa80 7b 64 61 74 65 74 69 6d 65 28 29 20 53 51 4c 20  {datetime() SQL 
1fa90 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61  function} {julia
1faa0 6e 64 61 79 28 29 20 53 51 4c 20 66 75 6e 63 74  nday() SQL funct
1fab0 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73  ion}.hd_keywords
1fac0 20 7b 73 74 72 66 74 69 6d 65 28 29 20 53 51 4c   {strftime() SQL
1fad0 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c   function}.</tcl
1fae0 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73 75  >..<p>.SQLite su
1faf0 70 70 6f 72 74 73 20 66 69 76 65 20 64 61 74 65  pports five date
1fb00 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
1fb10 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  ons as follows:.
1fb20 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c  </p>..<p>.<ol>.<
1fb30 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 28 3c 2f  li> ^(<b>date(</
1fb40 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c  b><i>timestring,
1fb50 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
1fb60 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
1fb70 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69  </b>)^ </li>.<li
1fb80 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e  > ^(<b>time(</b>
1fb90 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
1fba0 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
1fbb0 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
1fbc0 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  b>)^ </li>.<li> 
1fbd0 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c 2f  ^(<b>datetime(</
1fbe0 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c  b><i>timestring,
1fbf0 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
1fc00 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
1fc10 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69  </b>)^ </li>.<li
1fc20 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64 61 79  > ^(<b>julianday
1fc30 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
1fc40 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
1fc50 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
1fc60 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
1fc70 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72 66 74 69  <li> ^(<b>strfti
1fc80 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74  me(</b><i>format
1fc90 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f  , timestring, mo
1fca0 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72  difier, modifier
1fcb0 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62  , ...</i><b>)</b
1fcc0 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a  >)^ </li>.</ol>.
1fcd0 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76 65 20 64  .<p>.^All five d
1fce0 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
1fcf0 63 74 69 6f 6e 73 20 74 61 6b 65 20 61 20 74 69  ctions take a ti
1fd00 6d 65 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20  me string as an 
1fd10 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54 68 65 20  argument. .^The 
1fd20 74 69 6d 65 20 73 74 72 69 6e 67 20 69 73 20 66  time string is f
1fd30 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20  ollowed by zero 
1fd40 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72  or more modifier
1fd50 73 2e 20 0a 5e 54 68 65 20 73 74 72 66 74 69 6d  s. .^The strftim
1fd60 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73  e() function als
1fd70 6f 20 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74  o takes a format
1fd80 20 73 74 72 69 6e 67 20 61 73 20 69 74 73 20 66   string as its f
1fd90 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c  irst argument..<
1fda0 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74  /p>..<p>.The dat
1fdb0 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1fdc0 69 6f 6e 73 20 75 73 65 20 61 20 73 75 62 73 65  ions use a subse
1fdd0 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  t of.[http://en.
1fde0 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1fdf0 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c 20 49 53  ki/ISO_8601 | IS
1fe00 30 2d 38 36 30 31 5d 20 64 61 74 65 20 61 6e 64  0-8601] date and
1fe10 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e   time.formats..^
1fe20 54 68 65 20 64 61 74 65 28 29 20 66 75 6e 63 74  The date() funct
1fe30 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1fe40 64 61 74 65 20 69 6e 20 74 68 69 73 20 66 6f 72  date in this for
1fe50 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44 2e  mat: YYYY-MM-DD.
1fe60 20 0a 5e 54 68 65 20 74 69 6d 65 28 29 20 66 75   .^The time() fu
1fe70 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
1fe80 68 65 20 74 69 6d 65 20 61 73 20 48 48 3a 4d 4d  he time as HH:MM
1fe90 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61 74 65 74  :SS. .^The datet
1fea0 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ime() function r
1feb0 65 74 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d 2d  eturns "YYYY-MM-
1fec0 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e  DD HH:MM:SS". .^
1fed0 28 54 68 65 20 6a 75 6c 69 61 6e 64 61 79 28 29  (The julianday()
1fee0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1fef0 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65  s the .[http://e
1ff00 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
1ff10 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20  wiki/Julian_day 
1ff20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d 20 2d 20  | Julian day] - 
1ff30 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 61  the.number of da
1ff40 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e  ys since noon in
1ff50 20 47 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e 6f   Greenwich on No
1ff60 76 65 6d 62 65 72 20 32 34 2c 20 34 37 31 34 20  vember 24, 4714 
1ff70 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a 2f 2f 65  B.C. .([http://e
1ff80 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
1ff90 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f 47  wiki/Proleptic_G
1ffa0 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61  regorian_calenda
1ffb0 72 20 7c 20 50 72 6f 6c 65 70 74 69 63 20 47 72  r | Proleptic Gr
1ffc0 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72  egorian calendar
1ffd0 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74 72 66 74  ]).)^.^The strft
1ffe0 69 6d 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ime() routine re
1fff0 74 75 72 6e 73 20 74 68 65 20 64 61 74 65 20 66  turns the date f
20000 6f 72 6d 61 74 74 65 64 20 61 63 63 6f 72 64 69  ormatted accordi
20010 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d 61  ng to .the forma
20020 74 20 73 74 72 69 6e 67 20 73 70 65 63 69 66 69  t string specifi
20030 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ed as the first 
20040 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68 65 20 66  argument..^The f
20050 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 75 70  ormat string sup
20060 70 6f 72 74 73 20 74 68 65 20 6d 6f 73 74 20 63  ports the most c
20070 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75 74 69  ommon substituti
20080 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65  ons found in the
20090 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e 67 72   .[http://opengr
200a0 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75  oup.org/onlinepu
200b0 62 73 2f 30 30 37 39 30 38 37 39 39 2f 78 73 68  bs/007908799/xsh
200c0 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c 20 7c  /strftime.html |
200d0 20 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63   strftime() func
200e0 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65 20 73  tion].from the s
200f0 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72  tandard C librar
20100 79 20 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73  y plus two new s
20110 75 62 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66  ubstitutions, %f
20120 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68 65 20 66   and %J..^(The f
20130 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20 63 6f  ollowing is a co
20140 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f 66 20 76  mplete list of v
20150 61 6c 69 64 20 73 74 72 66 74 69 6d 65 28 29 20  alid strftime() 
20160 73 75 62 73 74 69 74 75 74 69 6f 6e 73 3a 0a 3c  substitutions:.<
20170 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
20180 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
20190 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  "0" cellpadding=
201a0 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d  "0" cellspacing=
201b0 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64  "0">.<tr><td><td
201c0 20 77 69 64 74 68 3d 22 31 30 22 3e 3c 74 64 3e   width="10"><td>
201d0 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20  </tr>..<tr><td> 
201e0 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %d <td><td> day 
201f0 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74 72  of month: 00.<tr
20200 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e 3c 74 64  ><td> %f <td><td
20210 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63  > fractional sec
20220 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a 3c 74 72  onds: SS.SSS.<tr
20230 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e 3c 74 64  ><td> %H <td><td
20240 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34 20 0a 3c  > hour: 00-24 .<
20250 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74 64 3e 3c  tr><td> %j <td><
20260 74 64 3e 20 64 61 79 20 6f 66 20 79 65 61 72 3a  td> day of year:
20270 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e 3c 74 64   001-366.<tr><td
20280 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a 75  > %J <td><td> Ju
20290 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 0a  lian day number.
202a0 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c 74 64 3e  <tr><td> %m <td>
202b0 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d 31  <td> month: 01-1
202c0 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d 20 3c 74  2.<tr><td> %M <t
202d0 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65 3a 20 30  d><td> minute: 0
202e0 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 73  0-59.<tr><td> %s
202f0 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64   <td><td> second
20300 73 20 73 69 6e 63 65 20 31 39 37 30 2d 30 31 2d  s since 1970-01-
20310 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25 53 20 3c  01.<tr><td> %S <
20320 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 3a  td><td> seconds:
20330 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20   00-59.<tr><td> 
20340 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %w <td><td> day 
20350 6f 66 20 77 65 65 6b 20 30 2d 36 20 77 69 74 68  of week 0-6 with
20360 20 53 75 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c   Sunday==0.<tr><
20370 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74 64 3e 20  td> %W <td><td> 
20380 77 65 65 6b 20 6f 66 20 79 65 61 72 3a 20 30 30  week of year: 00
20390 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20 25 59 20  -53.<tr><td> %Y 
203a0 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72 3a 20 30  <td><td> year: 0
203b0 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e 3c 74 64  000-9999.<tr><td
203c0 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e 20 25 0a  > %% <td><td> %.
203d0 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
203e0 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28  quote>)^..<p>.^(
203f0 4e 6f 74 69 63 65 20 74 68 61 74 20 61 6c 6c 20  Notice that all 
20400 6f 74 68 65 72 20 64 61 74 65 20 61 6e 64 20 74  other date and t
20410 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61  ime functions ca
20420 6e 20 62 65 20 65 78 70 72 65 73 73 65 64 0a 69  n be expressed.i
20430 6e 20 74 65 72 6d 73 20 6f 66 20 73 74 72 66 74  n terms of strft
20440 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  ime():.</p>..<bl
20450 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
20460 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c   border="0" cell
20470 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c  padding="0" cell
20480 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72  spacing="0">.<tr
20490 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e  ><td><b>Function
204a0 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d 22 33  </b><td width="3
204b0 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76 61  0"><td><b>Equiva
204c0 6c 65 6e 74 20 73 74 72 66 74 69 6d 65 28 29 3c  lent strftime()<
204d0 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64  /b>.<tr><td>   d
204e0 61 74 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74  ate(...)      <t
204f0 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65  d><td>  strftime
20500 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e  ('%Y-%m-%d', ...
20510 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69 6d  ).<tr><td>   tim
20520 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e  e(...)      <td>
20530 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27  <td>  strftime('
20540 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a  %H:%M:%S', ...).
20550 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 74  <tr><td>   datet
20560 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74  ime(...)  <td><t
20570 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59  d>  strftime('%Y
20580 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 27  -%m-%d %H:%M:%S'
20590 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
205a0 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e 29    julianday(...)
205b0 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
205c0 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c  ime('%J', ...).<
205d0 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
205e0 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65  uote>)^..<p>.The
205f0 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66 6f   only reasons fo
20600 72 20 70 72 6f 76 69 64 69 6e 67 20 66 75 6e 63  r providing func
20610 74 69 6f 6e 73 20 6f 74 68 65 72 20 74 68 61 6e  tions other than
20620 20 73 74 72 66 74 69 6d 65 28 29 20 69 73 0a 66   strftime() is.f
20630 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 61  or convenience a
20640 6e 64 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63  nd for efficienc
20650 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d  y..</p>..<h3>Tim
20660 65 20 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a  e Strings</h3>..
20670 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73 74 72 69  <p>^(A time stri
20680 6e 67 20 63 61 6e 20 62 65 20 69 6e 20 61 6e 79  ng can be in any
20690 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
206a0 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a  g formats:</p>..
206b0 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  <ol>.<li> <i>YYY
206c0 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e  Y-MM-DD</i>.<li>
206d0 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
206e0 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  H:MM</i>.<li> <i
206f0 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  >YYYY-MM-DD HH:M
20700 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  M:SS</i>.<li> <i
20710 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  >YYYY-MM-DD HH:M
20720 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
20730 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
20740 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
20750 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :MM</i>.<li> <i>
20760 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62  YYYY-MM-DD</i><b
20770 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53  >T</b><i>HH:MM:S
20780 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59  S</i>.<li> <i>YY
20790 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54  YY-MM-DD</i><b>T
207a0 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e  </b><i>HH:MM:SS.
207b0 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  SSS</i>.<li> <i>
207c0 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  HH:MM</i>.<li> <
207d0 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c  i>HH:MM:SS</i>.<
207e0 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e  li> <i>HH:MM:SS.
207f0 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e  SSS</i>.<li> <b>
20800 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e  now</b>.<li> <i>
20810 44 44 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a 3c  DDDDDDDDDD</i>.<
20820 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20  /ol>)^..<p>.^In 
20830 66 6f 72 6d 61 74 73 20 35 20 74 68 72 6f 75 67  formats 5 throug
20840 68 20 37 2c 20 74 68 65 20 22 54 22 20 69 73 20  h 7, the "T" is 
20850 61 20 6c 69 74 65 72 61 6c 20 63 68 61 72 61 63  a literal charac
20860 74 65 72 20 73 65 70 61 72 61 74 69 6e 67 20 0a  ter separating .
20870 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 68 65  the date and the
20880 20 74 69 6d 65 2c 20 61 73 20 72 65 71 75 69 72   time, as requir
20890 65 64 20 62 79 20 0a 5b 68 74 74 70 3a 2f 2f 77  ed by .[http://w
208a0 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f  ww.w3c.org/TR/NO
208b0 54 45 2d 64 61 74 65 74 69 6d 65 20 7c 20 49 53  TE-datetime | IS
208c0 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61  O-8601]. .^Forma
208d0 74 73 20 38 20 74 68 72 6f 75 67 68 20 31 30 20  ts 8 through 10 
208e0 74 68 61 74 20 73 70 65 63 69 66 79 20 6f 6e 6c  that specify onl
208f0 79 20 61 20 74 69 6d 65 20 61 73 73 75 6d 65 20  y a time assume 
20900 61 20 64 61 74 65 20 6f 66 20 0a 32 30 30 30 2d  a date of .2000-
20910 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31 31  01-01. Format 11
20920 2c 20 74 68 65 20 73 74 72 69 6e 67 20 27 6e 6f  , the string 'no
20930 77 27 2c 20 69 73 20 63 6f 6e 76 65 72 74 65 64  w', is converted
20940 20 69 6e 74 6f 20 74 68 65 20 0a 63 75 72 72 65   into the .curre
20950 6e 74 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  nt date and time
20960 20 61 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f   as obtained fro
20970 6d 20 74 68 65 20 78 43 75 72 72 65 6e 74 54 69  m the xCurrentTi
20980 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68 65  me method.of the
20990 20 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d 20 6f   [sqlite3_vfs] o
209a0 62 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a 5e 54  bject in use..^T
209b0 68 65 20 27 6e 6f 77 27 20 61 72 67 75 6d 65 6e  he 'now' argumen
209c0 74 20 74 6f 20 64 61 74 65 20 61 6e 64 20 74 69  t to date and ti
209d0 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6c 77  me functions alw
209e0 61 79 73 20 72 65 74 75 72 6e 73 20 65 78 61 63  ays returns exac
209f0 74 6c 79 20 74 68 65 0a 73 61 6d 65 20 76 61 6c  tly the.same val
20a00 75 65 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20  ue for multiple 
20a10 69 6e 76 6f 63 61 74 69 6f 6e 73 20 77 69 74 68  invocations with
20a20 69 6e 20 74 68 65 20 73 61 6d 65 20 5b 73 71 6c  in the same [sql
20a30 69 74 65 33 5f 73 74 65 70 28 29 5d 20 63 61 6c  ite3_step()] cal
20a40 6c 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77  l..^[http://en.w
20a50 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
20a60 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e  i/Coordinated_Un
20a70 69 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55  iversal_Time | U
20a80 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e  niversal Coordin
20a90 61 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d  ated Time (UTC)]
20aa0 20 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d   is used. .^Form
20ab0 61 74 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68  at 12 is the .[h
20ac0 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
20ad0 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69  ia.org/wiki/Juli
20ae0 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20  an_day | Julian 
20af0 64 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72  day number].expr
20b00 65 73 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74  essed as a float
20b10 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
20b20 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 6d 61  .</p>..<p>.Forma
20b30 74 73 20 32 20 74 68 72 6f 75 67 68 20 31 30 20  ts 2 through 10 
20b40 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c  may be optionall
20b50 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  y followed by a 
20b60 74 69 6d 65 7a 6f 6e 65 20 69 6e 64 69 63 61 74  timezone indicat
20b70 6f 72 20 6f 66 20 74 68 65 20 66 6f 72 6d 0a 22  or of the form."
20b80 3c 69 3e 26 23 39 31 3b 2b 2d 26 23 39 33 3b 48  <i>&#91;+-&#93;H
20b90 48 3a 4d 4d 3c 2f 69 3e 22 20 6f 72 20 6a 75 73  H:MM</i>" or jus
20ba0 74 20 22 3c 69 3e 5a 3c 2f 69 3e 22 2e 20 20 54  t "<i>Z</i>".  T
20bb0 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
20bc0 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 55   functions use U
20bd0 54 43 20 6f 72 20 22 7a 75 6c 75 22 0a 74 69 6d  TC or "zulu".tim
20be0 65 20 69 6e 74 65 72 6e 61 6c 6c 79 2c 20 61 6e  e internally, an
20bf0 64 20 73 6f 20 74 68 65 20 22 5a 22 20 73 75 66  d so the "Z" suf
20c00 66 69 78 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20  fix is a no-op. 
20c10 20 41 6e 79 20 6e 6f 6e 2d 7a 65 72 6f 20 22 48   Any non-zero "H
20c20 48 3a 4d 4d 22 20 73 75 66 66 69 78 20 69 73 0a  H:MM" suffix is.
20c30 73 75 62 74 72 61 63 74 65 64 20 66 72 6f 6d 20  subtracted from 
20c40 74 68 65 20 69 6e 64 69 63 61 74 65 64 20 64 61  the indicated da
20c50 74 65 20 61 6e 64 20 74 69 6d 65 20 69 6e 20 6f  te and time in o
20c60 72 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65 20  rder to compute 
20c70 7a 75 6c 75 20 74 69 6d 65 2e 0a 46 6f 72 20 65  zulu time..For e
20c80 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 6f 66 20 74  xample, all of t
20c90 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 69 6d  he following tim
20ca0 65 20 73 74 72 69 6e 67 73 20 61 72 65 20 65 71  e strings are eq
20cb0 75 69 76 61 6c 65 6e 74 3a 0a 3c 2f 70 3e 0a 0a  uivalent:.</p>..
20cc0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 32 30 31  <blockquote>.201
20cd0 33 2d 31 30 2d 30 37 20 30 38 3a 32 33 3a 31 39  3-10-07 08:23:19
20ce0 2e 31 32 30 3c 62 72 3e 0a 32 30 31 33 2d 31 30  .120<br>.2013-10
20cf0 2d 30 37 54 30 38 3a 32 33 3a 31 39 2e 31 32 30  -07T08:23:19.120
20d00 5a 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30 37  Z<br>.2013-10-07
20d10 20 30 34 3a 32 33 3a 31 39 2e 31 32 30 2d 30 34   04:23:19.120-04
20d20 3a 30 30 3c 62 72 3e 0a 32 34 35 36 35 37 32 2e  :00<br>.2456572.
20d30 38 34 39 35 32 36 38 35 0a 3c 2f 62 6c 6f 63 6b  84952685.</block
20d40 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 5e 28 49 6e  quote>..<p>.^(In
20d50 20 66 6f 72 6d 61 74 73 20 34 2c 20 37 2c 20 61   formats 4, 7, a
20d60 6e 64 20 31 30 2c 20 74 68 65 20 66 72 61 63 74  nd 10, the fract
20d70 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 20 76 61  ional seconds va
20d80 6c 75 65 20 53 53 2e 53 53 53 20 63 61 6e 20 68  lue SS.SSS can h
20d90 61 76 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ave.one or more 
20da0 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77 69 6e 67  digits following
20db0 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
20dc0 6e 74 2e 20 20 45 78 61 63 74 6c 79 20 74 68 72  nt.  Exactly thr
20dd0 65 65 20 64 69 67 69 74 73 20 61 72 65 0a 73 68  ee digits are.sh
20de0 6f 77 6e 20 69 6e 20 74 68 65 20 65 78 61 6d 70  own in the examp
20df0 6c 65 73 20 62 65 63 61 75 73 65 20 6f 6e 6c 79  les because only
20e00 20 74 68 65 20 66 69 72 73 74 20 74 68 72 65 65   the first three
20e10 20 64 69 67 69 74 73 20 61 72 65 20 73 69 67 6e   digits are sign
20e20 69 66 69 63 61 6e 74 0a 74 6f 20 74 68 65 20 72  ificant.to the r
20e30 65 73 75 6c 74 2c 20 62 75 74 20 74 68 65 20 69  esult, but the i
20e40 6e 70 75 74 20 73 74 72 69 6e 67 20 63 61 6e 20  nput string can 
20e50 68 61 76 65 20 66 65 77 65 72 20 6f 72 20 6d 6f  have fewer or mo
20e60 72 65 20 74 68 61 6e 20 74 68 72 65 65 20 64 69  re than three di
20e70 67 69 74 73 0a 61 6e 64 20 74 68 65 20 64 61 74  gits.and the dat
20e80 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  e/time functions
20e90 20 77 69 6c 6c 20 73 74 69 6c 6c 20 6f 70 65 72   will still oper
20ea0 61 74 65 20 63 6f 72 72 65 63 74 6c 79 2e 29 5e  ate correctly.)^
20eb0 0a 53 69 6d 69 6c 61 72 6c 79 2c 20 66 6f 72 6d  .Similarly, form
20ec0 61 74 20 31 32 20 69 73 20 73 68 6f 77 6e 20 77  at 12 is shown w
20ed0 69 74 68 20 31 30 20 73 69 67 6e 69 66 69 63 61  ith 10 significa
20ee0 6e 74 20 64 69 67 69 74 73 2c 20 62 75 74 20 74  nt digits, but t
20ef0 68 65 20 64 61 74 65 2f 74 69 6d 65 0a 66 75 6e  he date/time.fun
20f00 63 74 69 6f 6e 73 20 77 69 6c 6c 20 72 65 61 6c  ctions will real
20f10 6c 79 20 61 63 63 65 70 74 20 61 73 20 6d 61 6e  ly accept as man
20f20 79 20 6f 72 20 61 73 20 66 65 77 20 64 69 67 69  y or as few digi
20f30 74 73 20 61 73 20 61 72 65 20 6e 65 63 65 73 73  ts as are necess
20f40 61 72 79 20 74 6f 0a 72 65 70 72 65 73 65 6e 74  ary to.represent
20f50 20 74 68 65 20 4a 75 6c 69 61 6e 20 64 61 79 20   the Julian day 
20f60 6e 75 6d 62 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68  number..</p>..<h
20f70 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33 3e  3>Modifiers</h3>
20f80 0a 0a 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20 73  ..<p>^The time s
20f90 74 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f 6c  tring can be fol
20fa0 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72  lowed by zero or
20fb0 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 20   more modifiers 
20fc0 74 68 61 74 20 0a 61 6c 74 65 72 20 64 61 74 65  that .alter date
20fd0 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 45   and/or time. ^E
20fe0 61 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20  ach modifier.is 
20ff0 61 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  a transformation
21000 20 74 68 61 74 20 69 73 20 61 70 70 6c 69 65 64   that is applied
21010 20 74 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c   to the time val
21020 75 65 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a  ue to its left..
21030 5e 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61  ^Modifiers are a
21040 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74  pplied from left
21050 20 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72   to right; order
21060 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e   is important..^
21070 28 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d  (The available m
21080 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 73 20  odifiers are as 
21090 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f  follows.</p>..<o
210a0 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73  l>.<li> NNN days
210b0 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a  .<li> NNN hours.
210c0 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73  <li> NNN minutes
210d0 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73  .<li> NNN.NNNN s
210e0 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20  econds.<li> NNN 
210f0 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20  months.<li> NNN 
21100 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74  years.<li> start
21110 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73   of month.<li> s
21120 74 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69  tart of year.<li
21130 3e 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c  > start of day.<
21140 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c  li> weekday N.<l
21150 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69  i> unixepoch.<li
21160 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e  > localtime.<li>
21170 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c   utc .</ol>)^..<
21180 70 3e 5e 54 68 65 20 66 69 72 73 74 20 73 69 78  p>^The first six
21190 20 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74 68   modifiers (1 th
211a0 72 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79  rough 6) .simply
211b0 20 61 64 64 20 74 68 65 20 73 70 65 63 69 66 69   add the specifi
211c0 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d  ed amount of tim
211d0 65 20 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e  e to the date an
211e0 64 20 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65  d time .specifie
211f0 64 20 62 79 20 74 68 65 20 70 72 65 63 65 64 69  d by the precedi
21200 6e 67 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e  ng timestring an
21210 64 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 54 68  d modifiers..^Th
21220 65 20 27 73 27 20 63 68 61 72 61 63 74 65 72 20  e 's' character 
21230 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
21240 65 20 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73  e modifier names
21250 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 4e   is optional..^N
21260 6f 74 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d  ote that "&plusm
21270 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f  n;NNN months" wo
21280 72 6b 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67  rks by rendering
21290 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61   the original da
212a0 74 65 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59  te into.the YYYY
212b0 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61  -MM-DD format, a
212c0 64 64 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d  dding the &plusm
212d0 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20  n;NNN to the MM 
212e0 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65  month value, the
212f0 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68  n.normalizing th
21300 65 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73  e result.  ^Thus
21310 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  , for example, t
21320 68 65 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d  he data 2001-03-
21330 33 31 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27  31 modified.by '
21340 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61  +1 month' initia
21350 6c 6c 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d  lly yields 2001-
21360 30 34 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c  04-31, but April
21370 20 6f 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79   only has 30 day
21380 73 0a 73 6f 20 74 68 65 20 64 61 74 65 20 69 73  s.so the date is
21390 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32   normalized to 2
213a0 30 30 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73  001-05-01.  ^A s
213b0 69 6d 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63  imilar effect oc
213c0 63 75 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72  curs when.the or
213d0 69 67 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46  iginal date is F
213e0 65 62 72 75 61 72 79 20 32 39 20 6f 66 20 61 20  ebruary 29 of a 
213f0 6c 65 61 70 79 65 61 72 20 61 6e 64 20 74 68 65  leapyear and the
21400 20 6d 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c   modifier is.&pl
21410 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65  usmn;N years whe
21420 72 65 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75  re N is not a mu
21430 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c  ltiple of four.<
21440 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74  /p>..<p>^The "st
21450 61 72 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72  art of" modifier
21460 73 20 28 37 20 74 68 72 6f 75 67 68 20 39 29 20  s (7 through 9) 
21470 73 68 69 66 74 20 74 68 65 20 64 61 74 65 20 62  shift the date b
21480 61 63 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65  ackwards .to the
21490 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
214a0 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c  e current month,
214b0 20 79 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70   year or day.</p
214c0 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 22 77 65 65  >..<p>^(The "wee
214d0 6b 64 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61  kday" modifier a
214e0 64 76 61 6e 63 65 73 20 74 68 65 20 64 61 74 65  dvances the date
214f0 20 66 6f 72 77 61 72 64 2c 20 69 66 20 6e 65 63   forward, if nec
21500 65 73 73 61 72 79 2c 0a 74 6f 20 74 68 65 20 6e  essary,.to the n
21510 65 78 74 20 64 61 74 65 20 77 68 65 72 65 20 74  ext date where t
21520 68 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65  he weekday numbe
21530 72 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69  r is N. Sunday i
21540 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31  s 0, Monday is 1
21550 2c 0a 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 29  ,.and so forth.)
21560 5e 0a 5e 49 66 20 74 68 65 20 64 61 74 65 20 69  ^.^If the date i
21570 73 20 61 6c 72 65 61 64 79 20 6f 6e 20 74 68 65  s already on the
21580 20 64 65 73 69 72 65 64 20 77 65 65 6b 64 61 79   desired weekday
21590 2c 20 74 68 65 20 22 77 65 65 6b 64 61 79 22 20  , the "weekday" 
215a0 6d 6f 64 69 66 69 65 72 0a 6c 65 61 76 65 73 20  modifier.leaves 
215b0 74 68 65 20 64 61 74 65 20 75 6e 63 68 61 6e 67  the date unchang
215c0 65 64 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ed.  </p>..<p>^T
215d0 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d  he "unixepoch" m
215e0 6f 64 69 66 69 65 72 20 28 31 31 29 20 6f 6e 6c  odifier (11) onl
215f0 79 20 77 6f 72 6b 73 20 69 66 20 69 74 20 69 6d  y works if it im
21600 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
21610 73 20 0a 61 20 74 69 6d 65 73 74 72 69 6e 67 20  s .a timestring 
21620 69 6e 20 74 68 65 20 44 44 44 44 44 44 44 44 44  in the DDDDDDDDD
21630 44 20 66 6f 72 6d 61 74 2e 20 0a 5e 54 68 69 73  D format. .^This
21640 20 6d 6f 64 69 66 69 65 72 20 63 61 75 73 65 73   modifier causes
21650 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44 20   the DDDDDDDDDD 
21660 74 6f 20 62 65 20 69 6e 74 65 72 70 72 65 74 65  to be interprete
21670 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c 69  d not .as a Juli
21680 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20 61 73  an day number as
21690 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75   it normally wou
216a0 6c 64 20 62 65 2c 20 62 75 74 20 61 73 0a 5b 68  ld be, but as.[h
216b0 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
216c0 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78  ia.org/wiki/Unix
216d0 5f 74 69 6d 65 20 7c 20 55 6e 69 78 20 54 69 6d  _time | Unix Tim
216e0 65 5d 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65 72  e] - the .number
216f0 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63   of seconds sinc
21700 65 20 31 39 37 30 2e 20 20 49 66 20 74 68 65 20  e 1970.  If the 
21710 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69  "unixepoch" modi
21720 66 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66 6f  fier does not.fo
21730 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74 72 69 6e  llow a timestrin
21740 67 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 44 44  g of the form DD
21750 44 44 44 44 44 44 44 44 20 77 68 69 63 68 20 65  DDDDDDDD which e
21760 78 70 72 65 73 73 65 73 20 74 68 65 20 6e 75 6d  xpresses the num
21770 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20 73  ber.of seconds s
21780 69 6e 63 65 20 31 39 37 30 20 6f 72 20 69 66 20  ince 1970 or if 
21790 6f 74 68 65 72 20 6d 6f 64 69 66 69 65 72 73 0a  other modifiers.
217a0 73 65 70 61 72 61 74 65 20 74 68 65 20 22 75 6e  separate the "un
217b0 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65  ixepoch" modifie
217c0 72 20 66 72 6f 6d 20 70 72 69 6f 72 20 44 44 44  r from prior DDD
217d0 44 44 44 44 44 44 44 20 74 68 65 6e 20 74 68 65  DDDDDDD then the
217e0 0a 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64  .behavior is und
217f0 65 66 69 6e 65 64 2e 0a 46 6f 72 20 53 51 4c 69  efined..For SQLi
21800 74 65 20 76 65 72 73 69 6f 6e 73 20 62 65 66 6f  te versions befo
21810 72 65 20 33 2e 31 36 2e 30 20 28 5b 64 61 74 65  re 3.16.0 ([date
21820 6f 66 3a 33 2e 31 36 2e 30 5d 29 2c 20 0a 74 68  of:3.16.0]), .th
21830 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
21840 64 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72 6b  difier only work
21850 73 20 66 6f 72 0a 64 61 74 65 73 20 62 65 74 77  s for.dates betw
21860 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30  een 0000-01-01 0
21870 30 3a 30 30 3a 30 30 20 61 6e 64 20 35 33 35 32  0:00:00 and 5352
21880 2d 31 31 2d 30 31 20 31 30 3a 35 32 3a 34 37 20  -11-01 10:52:47 
21890 28 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20 2d  (unix times.of -
218a0 36 32 31 36 37 32 31 39 32 30 30 20 74 68 72 6f  62167219200 thro
218b0 75 67 68 20 31 30 36 37 35 31 39 39 31 31 36 37  ugh 106751991167
218c0 29 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ).</p>..<tcl>hd_
218d0 66 72 61 67 6d 65 6e 74 20 6c 6f 63 61 6c 74 69  fragment localti
218e0 6d 65 20 7b 6c 6f 63 61 6c 74 69 6d 65 20 6d 6f  me {localtime mo
218f0 64 69 66 69 65 72 7d 20 7b 27 75 74 63 27 20 6d  difier} {'utc' m
21900 6f 64 69 66 69 65 72 7d 3c 2f 74 63 6c 3e 0a 3c  odifier}</tcl>.<
21910 70 3e 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d  p>^The "localtim
21920 65 22 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29  e" modifier (12)
21930 20 61 73 73 75 6d 65 73 20 74 68 65 20 74 69 6d   assumes the tim
21940 65 20 73 74 72 69 6e 67 20 74 6f 20 69 74 73 20  e string to its 
21950 6c 65 66 74 20 69 73 20 69 6e 0a 55 6e 69 76 65  left is in.Unive
21960 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64  rsal Coordinated
21970 20 54 69 6d 65 20 28 55 54 43 29 20 61 6e 64 20   Time (UTC) and 
21980 61 64 6a 75 73 74 73 20 74 68 65 20 74 69 6d 65  adjusts the time
21990 0a 73 74 72 69 6e 67 20 73 6f 20 74 68 61 74 20  .string so that 
219a0 69 74 20 64 69 73 70 6c 61 79 73 20 6c 6f 63 61  it displays loca
219b0 6c 74 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61  ltime.  If "loca
219c0 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61  ltime".follows a
219d0 20 74 69 6d 65 20 74 68 61 74 20 69 73 20 6e 6f   time that is no
219e0 74 20 55 54 43 2c 20 74 68 65 6e 20 74 68 65 20  t UTC, then the 
219f0 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65  behavior is unde
21a00 66 69 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75 74  fined..^(The "ut
21a10 63 22 20 6d 6f 64 69 66 69 65 72 20 69 73 20 74  c" modifier is t
21a20 68 65 20 6f 70 70 6f 73 69 74 65 20 6f 66 20 22  he opposite of "
21a30 6c 6f 63 61 6c 74 69 6d 65 22 2e 20 20 0a 22 75  localtime".  ."u
21a40 74 63 22 20 61 73 73 75 6d 65 73 20 74 68 61 74  tc" assumes that
21a50 20 74 68 65 20 73 74 72 69 6e 67 0a 74 6f 20 69   the string.to i
21a60 74 73 20 6c 65 66 74 20 69 73 20 69 6e 20 74 68  ts left is in th
21a70 65 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65  e local timezone
21a80 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 61   and adjusts tha
21a90 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65 20 69  t string to be i
21aa0 6e 20 55 54 43 2e 29 5e 0a 49 66 20 74 68 65 20  n UTC.)^.If the 
21ab0 70 72 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20  prior string is 
21ac0 6e 6f 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65  not in localtime
21ad0 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
21ae0 74 20 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e  t of "utc" is.un
21af0 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68  defined.</p>..<h
21b00 33 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a  3>Examples</h3>.
21b10 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
21b20 65 20 63 75 72 72 65 6e 74 20 64 61 74 65 2e 3c  e current date.<
21b30 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
21b40 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77  SELECT date('now
21b50 27 29 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  ');</blockquote>
21b60 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
21b70 20 74 68 65 20 6c 61 73 74 20 64 61 79 20 6f 66   the last day of
21b80 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e   the current mon
21b90 74 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  th.</p>..<blockq
21ba0 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65  uote>SELECT date
21bb0 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66  ('now','start of
21bc0 20 6d 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74   month','+1 mont
21bd0 68 27 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f  h','-1 day');.</
21be0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
21bf0 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
21c00 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69  date and time gi
21c10 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73  ven a unix times
21c20 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36 2e  tamp 1092941466.
21c30 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
21c40 65 3e 0a 20 20 20 20 53 45 4c 45 43 54 20 64 61  e>.    SELECT da
21c50 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36  tetime(109294146
21c60 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 29 3b  6, 'unixepoch');
21c70 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
21c80 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
21c90 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
21ca0 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69   given a unix ti
21cb0 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34 31 34  mestamp 10929414
21cc0 36 36 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73  66, and .compens
21cd0 61 74 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63  ate for your loc
21ce0 61 6c 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e  al timezone.</p>
21cf0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
21d00 20 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65   SELECT datetime
21d10 28 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e  (1092941466, 'un
21d20 69 78 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c  ixepoch', 'local
21d30 74 69 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  time');.</blockq
21d40 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
21d50 6d 70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e  mpute the curren
21d60 74 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70  t unix timestamp
21d70 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
21d80 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72  te>.  SELECT str
21d90 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27  ftime('%s','now'
21da0 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
21db0 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
21dc0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
21dd0 61 79 73 20 73 69 6e 63 65 20 74 68 65 20 73 69  ays since the si
21de0 67 6e 69 6e 67 20 6f 66 20 74 68 65 20 55 53 20  gning of the US 
21df0 44 65 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49  Declaration.of I
21e00 6e 64 65 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e  ndependence.</p>
21e10 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
21e20 20 53 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61   SELECT julianda
21e30 79 28 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61  y('now') - julia
21e40 6e 64 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34  nday('1776-07-04
21e50 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
21e60 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
21e70 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
21e80 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20  seconds since a 
21e90 70 61 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e  particular momen
21ea0 74 20 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a  t in 2004:</p>..
21eb0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
21ec0 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27  ELECT strftime('
21ed0 25 73 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72  %s','now') - str
21ee0 66 74 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34  ftime('%s','2004
21ef0 2d 30 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27  -01-01 02:34:56'
21f00 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
21f10 29 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74  )^..^(<p>.Comput
21f20 65 20 74 68 65 20 64 61 74 65 20 6f 66 20 74 68  e the date of th
21f30 65 20 66 69 72 73 74 20 54 75 65 73 64 61 79 20  e first Tuesday 
21f40 69 6e 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74  in October.for t
21f50 68 65 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e  he current year.
21f60 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
21f70 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74  te>.  SELECT dat
21f80 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f  e('now','start o
21f90 66 20 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74  f year','+9 mont
21fa0 68 73 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29  hs','weekday 2')
21fb0 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
21fc0 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
21fd0 74 68 65 20 74 69 6d 65 20 73 69 6e 63 65 20 74  the time since t
21fe0 68 65 20 75 6e 69 78 20 65 70 6f 63 68 20 69 6e  he unix epoch in
21ff0 20 73 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20   seconds .(like 
22000 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e  strftime('%s','n
22010 6f 77 27 29 20 65 78 63 65 70 74 20 69 6e 63 6c  ow') except incl
22020 75 64 65 73 20 66 72 61 63 74 69 6f 6e 61 6c 20  udes fractional 
22030 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  part):</p>..<blo
22040 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
22050 54 20 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f  T (julianday('no
22060 77 27 29 20 2d 20 32 34 34 30 35 38 37 2e 35 29  w') - 2440587.5)
22070 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63  *86400.0;.</bloc
22080 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43  kquote>)^..<h3>C
22090 61 76 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c  aveats And Bugs<
220a0 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d  /h3>..<p>The com
220b0 70 75 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61  putation of loca
220c0 6c 20 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68  l time depends h
220d0 65 61 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68  eavily on the wh
220e0 69 6d 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61  im .of politicia
220f0 6e 73 20 61 6e 64 20 69 73 20 74 68 75 73 20 64  ns and is thus d
22100 69 66 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20  ifficult to get 
22110 63 6f 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c  correct for .all
22120 20 6c 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68   locales. ^In th
22130 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  is implementatio
22140 6e 2c 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  n, the standard 
22150 43 20 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74  C library .funct
22160 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28  ion localtime_r(
22170 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 73 73  ) is used to ass
22180 69 73 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75  ist in the calcu
22190 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c  lation of .local
221a0 20 74 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c   time.  ^(The .l
221b0 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66  ocaltime_r() C f
221c0 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79  unction normally
221d0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
221e0 79 65 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39  years.between 19
221f0 37 30 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72  70 and 2037. For
22200 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74   dates outside t
22210 68 69 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74  his range, SQLit
22220 65 20 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d  e .attempts to m
22230 61 70 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f  ap the year into
22240 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79   an equivalent y
22250 65 61 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73  ear within .this
22260 20 72 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63   range, do the c
22270 61 6c 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e  alculation, then
22280 20 6d 61 70 20 74 68 65 20 79 65 61 72 20 62 61   map the year ba
22290 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e  ck.)^</p>...<p>^
222a0 28 54 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73  (These functions
222b0 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64   only work for d
222c0 61 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30  ates between 000
222d0 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30  0-01-01 00:00:00
222e0 0a 61 6e 64 20 39 39 39 39 2d 31 32 2d 33 31 20  .and 9999-12-31 
222f0 32 33 3a 35 39 3a 35 39 20 28 6a 75 6c 69 64 61  23:59:59 (julida
22300 6e 20 64 61 79 20 6e 75 6d 62 65 72 73 20 31 37  n day numbers 17
22310 32 31 30 35 39 2e 35 20 74 68 72 6f 75 67 68 20  21059.5 through 
22320 35 33 37 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f  5373484.5).)^.Fo
22330 72 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20  r dates outside 
22340 74 68 61 74 20 72 61 6e 67 65 2c 20 74 68 65 20  that range, the 
22350 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 73 65  results of these
22360 0a 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 75  .functions are u
22370 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c  ndefined.</p>..<
22380 70 3e 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64  p>Non-Vista Wind
22390 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e  ows platforms on
223a0 6c 79 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73  ly support one s
223b0 65 74 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e  et of DST rules.
223c0 20 0a 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70   .Vista only sup
223d0 70 6f 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65  ports two. There
223e0 66 6f 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70  fore, on these p
223f0 6c 61 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f  latforms, .histo
22400 72 69 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c  rical DST calcul
22410 61 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69  ations will be i
22420 6e 63 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65  ncorrect. .For e
22430 78 61 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55  xample, in the U
22440 53 2c 20 69 6e 20 32 30 30 37 20 74 68 65 20 44  S, in 2007 the D
22450 53 54 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64  ST rules changed
22460 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e  . .Non-Vista Win
22470 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61  dows platforms a
22480 70 70 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30  pply the new 200
22490 37 20 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20  7 DST rules .to 
224a0 61 6c 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61  all previous yea
224b0 72 73 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74  rs as well. Vist
224c0 61 20 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20  a does somewhat 
224d0 62 65 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72  better.getting r
224e0 65 73 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62  esults correct b
224f0 61 63 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65  ack to 1986, whe
22500 6e 20 74 68 65 20 72 75 6c 65 73 20 77 65 72 65  n the rules were
22510 20 61 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f   also changed.</
22520 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72  p>..<p>All inter
22530 6e 61 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73  nal computations
22540 20 61 73 73 75 6d 65 20 74 68 65 20 0a 5b 68 74   assume the .[ht
22550 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
22560 61 2e 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f  a.org/wiki/Grego
22570 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20  rian_calendar | 
22580 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64  Gregorian calend
22590 61 72 5d 0a 73 79 73 74 65 6d 2e 20 20 49 74 20  ar].system.  It 
225a0 69 73 20 61 6c 73 6f 20 61 73 73 75 6d 65 64 20  is also assumed 
225b0 74 68 61 74 20 65 76 65 72 79 0a 64 61 79 20 69  that every.day i
225c0 73 20 65 78 61 63 74 6c 79 20 38 36 34 30 30 20  s exactly 86400 
225d0 73 65 63 6f 6e 64 73 20 69 6e 20 64 75 72 61 74  seconds in durat
225e0 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ion.</p>..<tcl>.
225f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
22640 65 63 74 69 6f 6e 20 7b 41 67 67 72 65 67 61 74  ection {Aggregat
22650 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e Functions} agg
22660 66 75 6e 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a  func {*aggfunc}.
22670 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
22680 6e 20 63 6f 72 65 66 75 6e 63 73 65 74 0a 0a 66  n corefuncset..f
22690 75 6e 63 64 65 66 20 7b 61 76 67 28 58 29 7d 20  uncdef {avg(X)} 
226a0 7b 2a 61 76 67 20 7b 61 76 67 28 29 20 61 67 67  {*avg {avg() agg
226b0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
226c0 7d 20 7b 0a 20 20 5e 54 68 65 20 61 76 67 28 29  } {.  ^The avg()
226d0 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75   function.  retu
226e0 72 6e 73 20 74 68 65 20 61 76 65 72 61 67 65 20  rns the average 
226f0 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e  value of all non
22700 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77  -NULL <i>X</i> w
22710 69 74 68 69 6e 20 61 0a 20 20 67 72 6f 75 70 2e  ithin a.  group.
22720 20 20 5e 53 74 72 69 6e 67 20 61 6e 64 20 42 4c    ^String and BL
22730 4f 42 20 76 61 6c 75 65 73 20 74 68 61 74 20 64  OB values that d
22740 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20  o not look like 
22750 6e 75 6d 62 65 72 73 20 61 72 65 0a 20 20 69 6e  numbers are.  in
22760 74 65 72 70 72 65 74 65 64 20 61 73 20 30 2e 0a  terpreted as 0..
22770 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
22780 20 61 76 67 28 29 20 69 73 20 61 6c 77 61 79 73   avg() is always
22790 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
227a0 74 20 76 61 6c 75 65 20 61 73 20 6c 6f 6e 67 20  t value as long 
227b0 61 73 0a 20 20 61 74 20 74 68 65 72 65 20 69 73  as.  at there is
227c0 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6e 6f   at least one no
227d0 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 65 76 65  n-NULL input eve
227e0 6e 20 69 66 20 61 6c 6c 0a 20 20 69 6e 70 75 74  n if all.  input
227f0 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 20  s are integers. 
22800 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
22810 61 76 67 28 29 20 69 73 20 4e 55 4c 4c 20 69 66  avg() is NULL if
22820 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 20 20 74   and only if.  t
22830 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d  here are no non-
22840 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20 20 0a 7d  NULL inputs.  .}
22850 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 75 6e 74  ..funcdef {count
22860 28 58 29 20 63 6f 75 6e 74 28 2a 29 7d 20 7b 2a  (X) count(*)} {*
22870 63 6f 75 6e 74 20 7b 63 6f 75 6e 74 28 29 20 61  count {count() a
22880 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
22890 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f 75  n}} {.  ^The cou
228a0 6e 74 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  nt(X) function r
228b0 65 74 75 72 6e 73 0a 20 20 61 20 63 6f 75 6e 74  eturns.  a count
228c0 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   of the number o
228d0 66 20 74 69 6d 65 73 0a 20 20 74 68 61 74 20 3c  f times.  that <
228e0 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 4e  i>X</i> is not N
228f0 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e 20  ULL in a group. 
22900 20 5e 54 68 65 20 63 6f 75 6e 74 28 2a 29 20 66   ^The count(*) f
22910 75 6e 63 74 69 6f 6e 0a 20 20 28 77 69 74 68 20  unction.  (with 
22920 6e 6f 20 61 72 67 75 6d 65 6e 74 73 29 20 72 65  no arguments) re
22930 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20  turns the total 
22940 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
22950 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a  n the group..}..
22960 66 75 6e 63 64 65 66 20 7b 67 72 6f 75 70 5f 63  funcdef {group_c
22970 6f 6e 63 61 74 28 58 29 20 67 72 6f 75 70 5f 63  oncat(X) group_c
22980 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b 0a 20 20  oncat(X,Y)} {.  
22990 2a 67 72 6f 75 70 5f 63 6f 6e 63 61 74 20 7b 67  *group_concat {g
229a0 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 61 67  roup_concat() ag
229b0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
229c0 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 67 72 6f  }.} {.  ^The gro
229d0 75 70 5f 63 6f 6e 63 61 74 28 29 20 66 75 6e 63  up_concat() func
229e0 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20 61  tion returns.  a
229f0 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69 73   string which is
22a00 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74 69   the concatenati
22a10 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e 2d  on of.  all non-
22a20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 6f 66 20 3c  NULL values of <
22a30 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49 66 20 70 61  i>X</i>.  ^If pa
22a40 72 61 6d 65 74 65 72 20 3c 69 3e 59 3c 2f 69 3e  rameter <i>Y</i>
22a50 20 69 73 20 70 72 65 73 65 6e 74 20 74 68 65 6e   is present then
22a60 0a 20 20 69 74 20 69 73 20 75 73 65 64 20 61 73  .  it is used as
22a70 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20   the separator. 
22a80 20 62 65 74 77 65 65 6e 20 69 6e 73 74 61 6e 63   between instanc
22a90 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20  es of <i>X</i>. 
22aa0 20 5e 41 20 63 6f 6d 6d 61 20 28 22 2c 22 29 20   ^A comma (",") 
22ab0 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 73  is used as the s
22ac0 65 70 61 72 61 74 6f 72 0a 20 20 69 66 20 3c 69  eparator.  if <i
22ad0 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74 74 65  >Y</i> is omitte
22ae0 64 2e 20 20 54 68 65 20 6f 72 64 65 72 20 6f 66  d.  The order of
22af0 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74 65   the concatenate
22b00 64 20 65 6c 65 6d 65 6e 74 73 20 69 73 0a 20 20  d elements is.  
22b10 61 72 62 69 74 72 61 72 79 2e 0a 7d 0a 0a 66 75  arbitrary..}..fu
22b20 6e 63 64 65 66 20 7b 6d 61 78 28 58 29 7d 20 7b  ncdef {max(X)} {
22b30 2a 6d 61 78 41 67 67 46 75 6e 63 20 2a 61 67 67  *maxAggFunc *agg
22b40 5f 6d 61 78 20 7b 6d 61 78 28 29 20 61 67 67 72  _max {max() aggr
22b50 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d  egate function}}
22b60 20 7b 0a 20 20 5e 54 68 65 20 6d 61 78 28 29 20   {.  ^The max() 
22b70 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
22b80 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65  on.  returns the
22b90 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f   maximum value o
22ba0 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20  f all values in 
22bb0 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68  the group..  ^Th
22bc0 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  e maximum value 
22bd0 69 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61  is the value tha
22be0 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75 72  t would be retur
22bf0 6e 65 64 20 6c 61 73 74 20 69 6e 20 61 6e 0a 20  ned last in an. 
22c00 20 4f 52 44 45 52 20 42 59 20 6f 6e 20 74 68 65   ORDER BY on the
22c10 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e   same column.  ^
22c20 41 67 67 72 65 67 61 74 65 20 6d 61 78 28 29 20  Aggregate max() 
22c30 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 0a 20 20  returns NULL .  
22c40 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74  if and only if t
22c50 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d  here are no non-
22c60 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74  NULL values in t
22c70 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e  he group..}..fun
22c80 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d 20 7b 2a  cdef {min(X)} {*
22c90 6d 69 6e 41 67 67 46 75 6e 63 20 2a 61 67 67 5f  minAggFunc *agg_
22ca0 6d 69 6e 20 7b 6d 69 6e 28 29 20 61 67 67 72 65  min {min() aggre
22cb0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20  gate function}} 
22cc0 7b 0a 20 20 5e 54 68 65 20 6d 69 6e 28 29 20 61  {.  ^The min() a
22cd0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
22ce0 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65 20  n.  returns the 
22cf0 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c  minimum non-NULL
22d00 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61   value of all va
22d10 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
22d20 70 2e 0a 20 20 5e 54 68 65 20 6d 69 6e 69 6d 75  p..  ^The minimu
22d30 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 66  m value is the f
22d40 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61  irst non-NULL va
22d50 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 61  lue that would a
22d60 70 70 65 61 72 0a 20 20 69 6e 20 61 6e 20 4f 52  ppear.  in an OR
22d70 44 45 52 20 42 59 20 6f 66 20 74 68 65 20 63 6f  DER BY of the co
22d80 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67 72 65 67 61  lumn..  ^Aggrega
22d90 74 65 20 6d 69 6e 28 29 20 72 65 74 75 72 6e 73  te min() returns
22da0 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c   NULL if and onl
22db0 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  y if there are n
22dc0 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20 20 76 61 6c  o non-NULL.  val
22dd0 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
22de0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75  ..}..funcdef {su
22df0 6d 28 58 29 20 74 6f 74 61 6c 28 58 29 7d 20 7b  m(X) total(X)} {
22e00 0a 20 20 2a 73 75 6d 46 75 6e 63 20 2a 73 75 6d  .  *sumFunc *sum
22e10 20 2a 74 6f 74 61 6c 0a 20 20 7b 73 75 6d 28 29   *total.  {sum()
22e20 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
22e30 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61 6c 28 29 20  ion}.  {total() 
22e40 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
22e50 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 73  on}.} {.  ^The s
22e60 75 6d 28 29 20 61 6e 64 20 74 6f 74 61 6c 28 29  um() and total()
22e70 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
22e80 69 6f 6e 73 0a 20 20 72 65 74 75 72 6e 20 73 75  ions.  return su
22e90 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  m of all non-NUL
22ea0 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  L values in the 
22eb0 67 72 6f 75 70 2e 0a 20 20 5e 49 66 20 74 68 65  group..  ^If the
22ec0 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55  re are no non-NU
22ed0 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73 20 74 68  LL input rows th
22ee0 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73  en sum() returns
22ef0 0a 20 20 4e 55 4c 4c 20 62 75 74 20 74 6f 74 61  .  NULL but tota
22f00 6c 28 29 20 72 65 74 75 72 6e 73 20 30 2e 30 2e  l() returns 0.0.
22f10 0a 20 20 4e 55 4c 4c 20 69 73 20 6e 6f 74 20 6e  .  NULL is not n
22f20 6f 72 6d 61 6c 6c 79 20 61 20 68 65 6c 70 66 75  ormally a helpfu
22f30 6c 20 72 65 73 75 6c 74 20 66 6f 72 20 74 68 65  l result for the
22f40 20 73 75 6d 20 6f 66 20 6e 6f 20 72 6f 77 73 0a   sum of no rows.
22f50 20 20 62 75 74 20 74 68 65 20 53 51 4c 20 73 74    but the SQL st
22f60 61 6e 64 61 72 64 20 72 65 71 75 69 72 65 73 20  andard requires 
22f70 69 74 20 61 6e 64 20 6d 6f 73 74 20 6f 74 68 65  it and most othe
22f80 72 0a 20 20 53 51 4c 20 64 61 74 61 62 61 73 65  r.  SQL database
22f90 20 65 6e 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65   engines impleme
22fa0 6e 74 20 73 75 6d 28 29 20 74 68 61 74 20 77 61  nt sum() that wa
22fb0 79 20 73 6f 20 53 51 4c 69 74 65 20 64 6f 65 73  y so SQLite does
22fc0 20 69 74 20 69 6e 20 74 68 65 0a 20 20 73 61 6d   it in the.  sam
22fd0 65 20 77 61 79 20 69 6e 20 6f 72 64 65 72 20 74  e way in order t
22fe0 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e  o be compatible.
22ff0 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64     The non-stand
23000 61 72 64 20 74 6f 74 61 6c 28 29 20 66 75 6e 63  ard total() func
23010 74 69 6f 6e 0a 20 20 69 73 20 70 72 6f 76 69 64  tion.  is provid
23020 65 64 20 61 73 20 61 20 63 6f 6e 76 65 6e 69 65  ed as a convenie
23030 6e 74 20 77 61 79 20 74 6f 20 77 6f 72 6b 20 61  nt way to work a
23040 72 6f 75 6e 64 20 74 68 69 73 20 64 65 73 69 67  round this desig
23050 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 69 6e 20 74  n problem.  in t
23060 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e  he SQL language.
23070 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20  </p>..  <p>^The 
23080 72 65 73 75 6c 74 20 6f 66 20 74 6f 74 61 6c 28  result of total(
23090 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c  ) is always a fl
230a0 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
230b0 75 65 2e 0a 20 20 5e 54 68 65 20 72 65 73 75 6c  ue..  ^The resul
230c0 74 20 6f 66 20 73 75 6d 28 29 20 69 73 20 61 6e  t of sum() is an
230d0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
230e0 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  f all non-NULL i
230f0 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65 67 65  nputs are intege
23100 72 73 2e 0a 20 20 5e 49 66 20 61 6e 79 20 69 6e  rs..  ^If any in
23110 70 75 74 20 74 6f 20 73 75 6d 28 29 20 69 73 20  put to sum() is 
23120 6e 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67  neither an integ
23130 65 72 20 6f 72 20 61 20 4e 55 4c 4c 0a 20 20 74  er or a NULL.  t
23140 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e  hen sum() return
23150 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
23160 6e 74 20 76 61 6c 75 65 0a 20 20 77 68 69 63 68  nt value.  which
23170 20 6d 69 67 68 74 20 62 65 20 61 6e 20 61 70 70   might be an app
23180 72 6f 78 69 6d 61 74 69 6f 6e 20 74 6f 20 74 68  roximation to th
23190 65 20 74 72 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a  e true sum.</p>.
231a0 0a 20 20 3c 70 3e 5e 53 75 6d 28 29 20 77 69 6c  .  <p>^Sum() wil
231b0 6c 20 74 68 72 6f 77 20 61 6e 20 22 69 6e 74 65  l throw an "inte
231c0 67 65 72 20 6f 76 65 72 66 6c 6f 77 22 20 65 78  ger overflow" ex
231d0 63 65 70 74 69 6f 6e 20 69 66 20 61 6c 6c 20 69  ception if all i
231e0 6e 70 75 74 73 0a 20 20 61 72 65 20 69 6e 74 65  nputs.  are inte
231f0 67 65 72 73 20 6f 72 20 4e 55 4c 4c 0a 20 20 61  gers or NULL.  a
23200 6e 64 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76  nd an integer ov
23210 65 72 66 6c 6f 77 20 6f 63 63 75 72 73 20 61 74  erflow occurs at
23220 20 61 6e 79 20 70 6f 69 6e 74 20 64 75 72 69 6e   any point durin
23230 67 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f  g the computatio
23240 6e 2e 0a 20 20 5e 54 6f 74 61 6c 28 29 20 6e 65  n..  ^Total() ne
23250 76 65 72 20 74 68 72 6f 77 73 20 61 6e 20 69 6e  ver throws an in
23260 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 2e 0a  teger overflow..
23270 7d 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e 0a 54  }.</tcl>...<p>.T
23280 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
23290 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c  ctions shown bel
232a0 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  ow are available
232b0 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 41 64   by default.  Ad
232c0 64 69 74 69 6f 6e 61 6c 0a 61 67 67 72 65 67 61  ditional.aggrega
232d0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 77 72 69  te functions wri
232e0 74 74 65 6e 20 69 6e 20 43 20 6d 61 79 20 62 65  tten in C may be
232f0 20 61 64 64 65 64 20 75 73 69 6e 67 20 74 68 65   added using the
23300 20 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74   .[sqlite3_creat
23310 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f 61  e_function()]</a
23320 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a  >.API.</p>..<p>.
23330 5e 49 6e 20 61 6e 79 20 61 67 67 72 65 67 61 74  ^In any aggregat
23340 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20  e function that 
23350 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20 61  takes a single a
23360 72 67 75 6d 65 6e 74 2c 20 74 68 61 74 20 61 72  rgument, that ar
23370 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20 70 72  gument.can be pr
23380 65 63 65 64 65 64 20 62 79 20 74 68 65 20 6b 65  eceded by the ke
23390 79 77 6f 72 64 20 44 49 53 54 49 4e 43 54 2e 20  yword DISTINCT. 
233a0 20 5e 49 6e 20 73 75 63 68 20 63 61 73 65 73 2c   ^In such cases,
233b0 20 64 75 70 6c 69 63 61 74 65 0a 65 6c 65 6d 65   duplicate.eleme
233c0 6e 74 73 20 61 72 65 20 66 69 6c 74 65 72 65 64  nts are filtered
233d0 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 70 61   before being pa
233e0 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20 61 67  ssed into the ag
233f0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
23400 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ..^For example, 
23410 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 63 6f  the function "co
23420 75 6e 74 28 64 69 73 74 69 6e 63 74 20 58 29 22  unt(distinct X)"
23430 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 74 68 65   will return the
23440 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73 74 69   number.of disti
23450 6e 63 74 20 76 61 6c 75 65 73 20 6f 66 20 63 6f  nct values of co
23460 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61 64 20 6f  lumn X instead o
23470 66 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  f the total numb
23480 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76  er of non-null.v
23490 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d 6e 20  alues in column 
234a0 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 73  X..</p>..<tcl>.s
234b0 65 74 20 6c 78 20 7b 7d 0a 66 6f 72 65 61 63 68  et lx {}.foreach
234c0 20 62 61 73 65 73 79 6e 74 61 78 20 5b 61 72 72   basesyntax [arr
234d0 61 79 20 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e  ay names corefun
234e0 63 73 65 74 5d 20 7b 0a 20 20 66 6f 72 65 61 63  cset] {.  foreac
234f0 68 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72  h {syntax keywor
23500 64 73 20 64 65 73 63 7d 20 24 63 6f 72 65 66 75  ds desc} $corefu
23510 6e 63 73 65 74 28 24 62 61 73 65 73 79 6e 74 61  ncset($basesynta
23520 78 29 20 62 72 65 61 6b 0a 20 20 72 65 67 65 78  x) break.  regex
23530 70 20 7b 5e 5b 61 2d 7a 5f 5d 2b 7d 20 24 62 61  p {^[a-z_]+} $ba
23540 73 65 73 79 6e 74 61 78 20 66 72 61 67 6d 65 6e  sesyntax fragmen
23550 74 0a 20 20 66 6f 72 65 61 63 68 20 63 6f 72 65  t.  foreach core
23560 73 79 6e 74 61 78 20 24 73 79 6e 74 61 78 20 7b  syntax $syntax {
23570 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 78 20  .    lappend lx 
23580 5b 6c 69 73 74 20 24 66 72 61 67 6d 65 6e 74 20  [list $fragment 
23590 24 63 6f 72 65 73 79 6e 74 61 78 20 30 5d 0a 20  $coresyntax 0]. 
235a0 20 7d 0a 7d 0a 68 64 5f 6c 69 73 74 5f 6f 66 5f   }.}.hd_list_of_
235b0 6c 69 6e 6b 73 20 7b 7d 20 32 32 35 20 5b 6c 73  links {} 225 [ls
235c0 6f 72 74 20 2d 69 6e 64 65 78 20 31 20 24 6c 78  ort -index 1 $lx
235d0 5d 0a 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c 68  ]..hd_putsnl "<h
235e0 72 20 63 6c 61 73 73 3d 27 78 68 72 27 3e 22 0a  r class='xhr'>".
235f0 68 64 5f 70 75 74 73 6e 6c 20 22 3c 64 6c 3e 22  hd_putsnl "<dl>"
23600 0a 66 6f 72 65 61 63 68 20 62 61 73 65 73 79 6e  .foreach basesyn
23610 74 61 78 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61  tax [lsort [arra
23620 79 20 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e 63  y names corefunc
23630 73 65 74 5d 5d 20 7b 0a 20 20 66 6f 72 65 61 63  set]] {.  foreac
23640 68 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72  h {syntax keywor
23650 64 73 20 64 65 73 63 7d 20 24 63 6f 72 65 66 75  ds desc} $corefu
23660 6e 63 73 65 74 28 24 62 61 73 65 73 79 6e 74 61  ncset($basesynta
23670 78 29 20 62 72 65 61 6b 0a 20 20 72 65 67 73 75  x) break.  regsu
23680 62 20 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74  b -all {\s+} [st
23690 72 69 6e 67 20 74 72 69 6d 20 24 73 79 6e 74 61  ring trim $synta
236a0 78 5d 20 7b 3c 62 72 20 2f 3e 7d 20 73 79 6e 74  x] {<br />} synt
236b0 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
236c0 20 7b 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20   {\(([^*)]+)\)} 
236d0 24 73 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c  $syntax {(<i>\1<
236e0 2f 69 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20 72  /i>)} syntax.  r
236f0 65 67 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24  egsub -all {,} $
23700 73 79 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e  syntax {</i>,<i>
23710 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75  } syntax.  regsu
23720 62 20 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c  b -all {<i>\.\.\
23730 2e 3c 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b  .</i>} $syntax {
23740 2e 2e 2e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65  ...} syntax.  re
23750 67 65 78 70 20 7b 5e 5b 61 2d 7a 5d 2b 7d 20 24  gexp {^[a-z]+} $
23760 62 61 73 65 73 79 6e 74 61 78 20 66 72 61 67 6d  basesyntax fragm
23770 65 6e 74 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67  ent.  if {[lleng
23780 74 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30  th $keywords]==0
23790 7d 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b  } {.    regexp {
237a0 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78  [a-z_]+} $syntax
237b0 20 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61   name.    hd_fra
237c0 67 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61  gment $name *$na
237d0 6d 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51  me "${name}() SQ
237e0 4c 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20  L function".  } 
237f0 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66  else {.    set f
23800 72 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20  ragname [lindex 
23810 24 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20  $keywords 0].   
23820 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e   regsub -all {[^
23830 61 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20  a-z]} $fragname 
23840 7b 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20  {} fragname.    
23850 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61  hd_fragment $fra
23860 67 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68  gname.    eval h
23870 64 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69  d_keywords [stri
23880 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20  ng map {\n { }} 
23890 24 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20  $keywords].  }. 
238a0 20 68 64 5f 70 75 74 73 20 22 3c 64 74 3e 3c 70   hd_puts "<dt><p
238b0 3e 3c 62 3e 24 73 79 6e 74 61 78 3c 2f 62 3e 3c  ><b>$syntax</b><
238c0 2f 64 74 3e 22 0a 20 20 68 64 5f 72 65 73 6f 6c  /dt>".  hd_resol
238d0 76 65 20 22 3c 64 64 3e 3c 70 3e 24 64 65 73 63  ve "<dd><p>$desc
238e0 3c 2f 64 64 3e 5c 6e 22 0a 7d 0a 68 64 5f 70 75  </dd>\n".}.hd_pu
238f0 74 73 6e 6c 20 22 3c 2f 64 6c 3e 22 0a 0a 23 23  tsnl "</dl>"..##
23900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23940 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
23950 74 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73 65  tion INSERT inse
23960 72 74 20 7b 49 4e 53 45 52 54 20 2a 49 4e 53 45  rt {INSERT *INSE
23970 52 54 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  RTs}..RecursiveB
23980 75 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 73  ubbleDiagram ins
23990 65 72 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ert-stmt.</tcl>.
239a0 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20 73  .<p>The INSERT s
239b0 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69  tatement comes i
239c0 6e 20 74 68 72 65 65 20 62 61 73 69 63 20 66 6f  n three basic fo
239d0 72 6d 73 2e 20 20 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  rms.  .<ol>.<li>
239e0 3c 70 3e 3c 62 3e 49 4e 53 45 52 54 20 49 4e 54  <p><b>INSERT INT
239f0 4f 20 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 3c 2f  O </b><i>table</
23a00 69 3e 3c 62 3e 20 56 41 4c 55 45 53 28 2e 2e 2e  i><b> VALUES(...
23a10 29 3b 3c 2f 62 3e 0a 3c 70 3e 5e 54 68 65 20 66  );</b>.<p>^The f
23a20 69 72 73 74 20 66 6f 72 6d 20 28 77 69 74 68 20  irst form (with 
23a30 74 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65 79  the "VALUES" key
23a40 77 6f 72 64 29 20 63 72 65 61 74 65 73 20 6f 6e  word) creates on
23a50 65 20 6f 72 20 6d 6f 72 65 0a 6e 65 77 20 72 6f  e or more.new ro
23a60 77 73 20 69 6e 0a 61 6e 20 65 78 69 73 74 69 6e  ws in.an existin
23a70 67 20 74 61 62 6c 65 2e 20 5e 49 66 20 74 68 65  g table. ^If the
23a80 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d   <yyterm>column-
23a90 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69  name</yyterm> li
23aa0 73 74 20 61 66 74 65 72 0a 3c 79 79 74 65 72 6d  st after.<yyterm
23ab0 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74  >table-name</yyt
23ac0 65 72 6d 3e 20 69 73 20 6f 6d 69 74 74 65 64 20  erm> is omitted 
23ad0 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a  then the number.
23ae0 6f 66 20 76 61 6c 75 65 73 20 69 6e 73 65 72 74  of values insert
23af0 65 64 20 69 6e 74 6f 20 65 61 63 68 20 72 6f 77  ed into each row
23b00 0a 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d  .must be the sam
23b10 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e as the number 
23b20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
23b30 65 20 74 61 62 6c 65 2e 20 5e 49 6e 20 74 68 69  e table. ^In thi
23b40 73 20 63 61 73 65 0a 74 68 65 20 72 65 73 75 6c  s case.the resul
23b50 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20  t of evaluating 
23b60 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78  the left-most ex
23b70 70 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20 65 61  pression from ea
23b80 63 68 20 74 65 72 6d 20 6f 66 0a 74 68 65 20 56  ch term of.the V
23b90 41 4c 55 45 53 20 6c 69 73 74 20 69 73 20 69 6e  ALUES list is in
23ba0 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
23bb0 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
23bc0 20 6f 66 20 65 61 63 68 20 6e 65 77 20 72 6f 77   of each new row
23bd0 2c 0a 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 66  ,.and so forth f
23be0 6f 72 20 65 61 63 68 20 73 75 62 73 65 71 75 65  or each subseque
23bf0 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e  nt expression. ^
23c00 49 66 20 61 20 3c 79 79 74 65 72 6d 3e 63 6f 6c  If a <yyterm>col
23c10 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  umn-name</yyterm
23c20 3e 0a 6c 69 73 74 20 69 73 20 73 70 65 63 69 66  >.list is specif
23c30 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 75  ied, then the nu
23c40 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69  mber of values i
23c50 6e 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74  n each term of t
23c60 68 65 0a 56 41 4c 55 45 20 6c 69 73 74 20 6d 75  he.VALUE list mu
23c70 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d  st match the num
23c80 62 65 72 20 6f 66 0a 73 70 65 63 69 66 69 65 64  ber of.specified
23c90 20 63 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63 68 20   columns. ^Each 
23ca0 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c  of the named col
23cb0 75 6d 6e 73 20 6f 66 20 74 68 65 20 6e 65 77 20  umns of the new 
23cc0 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64  row is populated
23cd0 0a 77 69 74 68 20 74 68 65 20 72 65 73 75 6c 74  .with the result
23ce0 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20  s of evaluating 
23cf0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
23d00 67 20 56 41 4c 55 45 53 20 65 78 70 72 65 73 73  g VALUES express
23d10 69 6f 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c 75  ion. ^Table.colu
23d20 6d 6e 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  mns that do not 
23d30 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 63 6f  appear in the co
23d40 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65 20 70 6f  lumn list are po
23d50 70 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65  pulated with the
23d60 20 0a 5b 64 65 66 61 75 6c 74 20 63 6f 6c 75 6d   .[default colum
23d70 6e 20 76 61 6c 75 65 5d 20 28 73 70 65 63 69 66  n value] (specif
23d80 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  ied as part of t
23d90 68 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he [CREATE TABLE
23da0 5d 20 73 74 61 74 65 6d 65 6e 74 29 2c 20 6f 72  ] statement), or
23db0 0a 77 69 74 68 20 4e 55 4c 4c 20 69 66 20 6e 6f  .with NULL if no
23dc0 20 5b 64 65 66 61 75 6c 74 20 76 61 6c 75 65 5d   [default value]
23dd0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a   is specified...
23de0 3c 6c 69 3e 3c 70 3e 3c 62 3e 49 4e 53 45 52 54  <li><p><b>INSERT
23df0 20 49 4e 54 4f 20 3c 2f 62 3e 3c 69 3e 74 61 62   INTO </b><i>tab
23e00 6c 65 3c 2f 69 3e 3c 62 3e 20 53 45 4c 45 43 54  le</i><b> SELECT
23e10 20 2e 2e 2e 3b 3c 2f 62 3e 0a 3c 70 3e 54 68 65   ...;</b>.<p>The
23e20 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20   second form of 
23e30 74 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65  the INSERT state
23e40 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61 20  ment contains a 
23e50 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65  [SELECT] stateme
23e60 6e 74 0a 69 6e 73 74 65 61 64 20 6f 66 20 61 20  nt.instead of a 
23e70 56 41 4c 55 45 53 20 63 6c 61 75 73 65 2e 20 5e  VALUES clause. ^
23e80 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 69  A new entry is i
23e90 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
23ea0 20 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 0a   table for each.
23eb0 72 6f 77 20 6f 66 20 64 61 74 61 20 72 65 74 75  row of data retu
23ec0 72 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e  rned by executin
23ed0 67 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  g the SELECT sta
23ee0 74 65 6d 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f  tement. ^If a co
23ef0 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65  lumn-list is.spe
23f00 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62  cified, the numb
23f10 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
23f20 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
23f30 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62  he SELECT must b
23f40 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68  e the same.as th
23f50 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 6d  e number of item
23f60 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d  s in the column-
23f70 6c 69 73 74 2e 20 5e 4f 74 68 65 72 77 69 73 65  list. ^Otherwise
23f80 2c 20 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c  , if no column-l
23f90 69 73 74 20 69 73 0a 73 70 65 63 69 66 69 65 64  ist is.specified
23fa0 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  , the number of 
23fb0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
23fc0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45 4c  esult of the SEL
23fd0 45 43 54 20 6d 75 73 74 20 62 65 20 74 68 65 20  ECT must be the 
23fe0 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d 62  same.as the numb
23ff0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
24000 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79   the table. ^Any
24010 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
24020 74 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 5b 63 6f  t, including.[co
24030 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 5d 20  mpound SELECTs] 
24040 61 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74 65  and SELECT state
24050 6d 65 6e 74 73 20 77 69 74 68 20 5b 4f 52 44 45  ments with [ORDE
24060 52 20 42 59 5d 20 61 6e 64 2f 6f 72 20 5b 4c 49  R BY] and/or [LI
24070 4d 49 54 5d 20 63 6c 61 75 73 65 73 2c 20 0a 6d  MIT] clauses, .m
24080 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 61 6e  ay be used in an
24090 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
240a0 74 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 2e 0a  t of this form..
240b0 0a 3c 70 3e 54 6f 20 61 76 6f 69 64 20 61 20 70  .<p>To avoid a p
240c0 61 72 73 69 6e 67 20 61 6d 62 69 67 75 69 74 79  arsing ambiguity
240d0 2c 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  , the SELECT sta
240e0 74 65 6d 65 6e 74 20 73 68 6f 75 6c 64 20 61 6c  tement should al
240f0 77 61 79 73 0a 63 6f 6e 74 61 69 6e 20 61 20 57  ways.contain a W
24100 48 45 52 45 20 63 6c 61 75 73 65 2c 20 65 76 65  HERE clause, eve
24110 6e 20 69 66 20 74 68 61 74 20 63 6c 61 75 73 65  n if that clause
24120 20 69 73 20 73 69 6d 70 6c 79 20 22 57 48 45 52   is simply "WHER
24130 45 20 74 72 75 65 22 2c 0a 69 66 20 74 68 65 20  E true",.if the 
24140 5b 75 70 73 65 72 74 2d 63 6c 61 75 73 65 5d 20  [upsert-clause] 
24150 69 73 20 70 72 65 73 65 6e 74 2e 20 20 57 69 74  is present.  Wit
24160 68 6f 75 74 20 74 68 65 20 57 48 45 52 45 20 63  hout the WHERE c
24170 6c 61 75 73 65 2c 20 74 68 65 0a 70 61 72 73 65  lause, the.parse
24180 72 20 64 6f 65 73 20 6e 6f 74 20 6b 6e 6f 77 20  r does not know 
24190 69 66 20 74 68 65 20 74 6f 6b 65 6e 20 22 4f 4e  if the token "ON
241a0 22 20 69 73 20 70 61 72 74 20 6f 66 20 61 20 6a  " is part of a j
241b0 6f 69 6e 20 63 6f 6e 73 74 72 61 69 6e 74 0a 6f  oin constraint.o
241c0 6e 20 74 68 65 20 53 45 4c 45 43 54 2c 20 6f 72  n the SELECT, or
241d0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
241e0 66 20 74 68 65 20 5b 75 70 73 65 72 74 2d 63 6c  f the [upsert-cl
241f0 61 75 73 65 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c  ause]...<li><p><
24200 62 3e 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 2f  b>INSERT INTO </
24210 62 3e 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 3c 62  b><i>table</i><b
24220 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53  > DEFAULT VALUES
24230 3b 3c 2f 62 3e 0a 3c 70 3e 54 68 65 20 74 68 69  ;</b>.<p>The thi
24240 72 64 20 66 6f 72 6d 20 6f 66 20 61 6e 20 49 4e  rd form of an IN
24250 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69  SERT statement i
24260 73 20 77 69 74 68 20 44 45 46 41 55 4c 54 20 56  s with DEFAULT V
24270 41 4c 55 45 53 2e 0a 5e 28 54 68 65 20 49 4e 53  ALUES..^(The INS
24280 45 52 54 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20  ERT ... DEFAULT 
24290 56 41 4c 55 45 53 20 73 74 61 74 65 6d 65 6e 74  VALUES statement
242a0 20 69 6e 73 65 72 74 73 20 61 20 73 69 6e 67 6c   inserts a singl
242b0 65 20 6e 65 77 20 72 6f 77 20 69 6e 74 6f 20 74  e new row into t
242c0 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e 29  he.named table.)
242d0 5e 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ^ ^Each column o
242e0 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73  f the new row is
242f0 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20   populated with 
24300 69 74 73 20 0a 5b 64 65 66 61 75 6c 74 20 76 61  its .[default va
24310 6c 75 65 5d 2c 20 6f 72 20 77 69 74 68 20 61 20  lue], or with a 
24320 4e 55 4c 4c 20 69 66 20 6e 6f 20 64 65 66 61 75  NULL if no defau
24330 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70 65 63  lt value is spec
24340 69 66 69 65 64 20 0a 61 73 20 70 61 72 74 20 6f  ified .as part o
24350 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64 65 66  f the column def
24360 69 6e 69 74 69 6f 6e 20 69 6e 20 74 68 65 20 5b  inition in the [
24370 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74  CREATE TABLE] st
24380 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20 5b 75 70  atement..The [up
24390 73 65 72 74 2d 63 6c 61 75 73 65 5d 20 69 73 20  sert-clause] is 
243a0 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 61 66  not supported af
243b0 74 65 72 20 44 45 46 41 55 4c 54 20 56 41 4c 55  ter DEFAULT VALU
243c0 45 53 2e 0a 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a  ES...</ol>..<p>.
243d0 5e 54 68 65 20 69 6e 69 74 69 61 6c 20 22 49 4e  ^The initial "IN
243e0 53 45 52 54 22 20 6b 65 79 77 6f 72 64 20 63 61  SERT" keyword ca
243f0 6e 20 62 65 20 72 65 70 6c 61 63 65 64 20 62 79  n be replaced by
24400 0a 22 52 45 50 4c 41 43 45 22 20 6f 72 20 22 49  ."REPLACE" or "I
24410 4e 53 45 52 54 20 4f 52 20 3c 69 3e 61 63 74 69  NSERT OR <i>acti
24420 6f 6e 3c 2f 69 3e 22 20 74 6f 20 73 70 65 63 69  on</i>" to speci
24430 66 79 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  fy an alternativ
24440 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 5b 4f 4e  e.constraint [ON
24450 20 43 4f 4e 46 4c 49 43 54 7c 63 6f 6e 66 6c 69   CONFLICT|confli
24460 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
24470 67 6f 72 69 74 68 6d 5d 20 74 6f 20 75 73 65 20  gorithm] to use 
24480 64 75 72 69 6e 67 20 0a 74 68 61 74 20 6f 6e 65  during .that one
24490 20 49 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64 2e   INSERT command.
244a0 0a 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69  .For compatibili
244b0 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2c 20 5e  ty with MySQL, ^
244c0 74 68 65 20 70 61 72 73 65 72 20 61 6c 6c 6f 77  the parser allow
244d0 73 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65  s the use of the
244e0 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20  .single keyword 
244f0 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65  <a href="lang_re
24500 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c  place.html">REPL
24510 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61  ACE</a> as an .a
24520 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52 54  lias for "INSERT
24530 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 0a 3c   OR REPLACE"...<
24540 70 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c  p>^(The optional
24550 20 22 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65   "<i>schema-name
24560 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70 72  </i><b>.</b>" pr
24570 65 66 69 78 20 6f 6e 20 74 68 65 20 0a 3c 79 79  efix on the .<yy
24580 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  term>table-name<
24590 2f 79 79 74 65 72 6d 3e 0a 69 73 20 73 75 70 70  /yyterm>.is supp
245a0 6f 72 74 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65  orted for top-le
245b0 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74 65  vel INSERT state
245c0 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29 5e 20 20 5e  ments only.)^  ^
245d0 54 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6d  The table name m
245e0 75 73 74 20 62 65 0a 75 6e 71 75 61 6c 69 66 69  ust be.unqualifi
245f0 65 64 20 66 6f 72 20 49 4e 53 45 52 54 20 73 74  ed for INSERT st
24600 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63  atements that oc
24610 63 75 72 20 77 69 74 68 69 6e 20 5b 43 52 45 41  cur within [CREA
24620 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74  TE TRIGGER] stat
24630 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d 69 6c 61 72  ements..^Similar
24640 6c 79 2c 20 74 68 65 20 22 44 45 46 41 55 4c 54  ly, the "DEFAULT
24650 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66   VALUES" form of
24660 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61 74   the INSERT stat
24670 65 6d 65 6e 74 20 69 73 20 73 75 70 70 6f 72 74  ement is support
24680 65 64 20 66 6f 72 0a 74 6f 70 2d 6c 65 76 65 6c  ed for.top-level
24690 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
246a0 74 73 20 6f 6e 6c 79 20 61 6e 64 20 6e 6f 74 20  ts only and not 
246b0 66 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74 65  for INSERT state
246c0 6d 65 6e 74 73 20 77 69 74 68 69 6e 0a 74 72 69  ments within.tri
246d0 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a 3c 70 3e 54  ggers..<p>..<p>T
246e0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 41 53 20  he optional "AS 
246f0 3c 79 79 74 65 72 6d 3e 61 6c 69 61 73 3c 2f 79  <yyterm>alias</y
24700 79 74 65 72 6d 3e 22 20 70 68 72 61 73 65 20 70  yterm>" phrase p
24710 72 6f 76 69 64 65 73 20 61 6e 20 61 6c 74 65 72  rovides an alter
24720 6e 61 74 69 76 65 0a 6e 61 6d 65 20 66 6f 72 20  native.name for 
24730 74 68 65 20 74 61 62 6c 65 20 69 6e 74 6f 20 77  the table into w
24740 68 69 63 68 20 63 6f 6e 74 65 6e 74 20 69 73 20  hich content is 
24750 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2e 20  being inserted. 
24760 20 54 68 65 20 61 6c 69 61 73 20 6e 61 6d 65 0a   The alias name.
24770 63 61 6e 20 62 65 20 75 73 65 64 20 77 69 74 68  can be used with
24780 69 6e 20 57 48 45 52 45 20 61 6e 64 20 53 45 54  in WHERE and SET
24790 20 63 6c 61 75 73 65 73 20 6f 66 20 74 68 65 20   clauses of the 
247a0 5b 55 50 53 45 52 54 5d 2e 20 20 49 66 20 74 68  [UPSERT].  If th
247b0 65 72 65 20 69 73 20 6e 6f 0a 5b 75 70 73 65 72  ere is no.[upser
247c0 74 2d 63 6c 61 75 73 65 5d 2c 20 74 68 65 6e 20  t-clause], then 
247d0 74 68 65 20 3c 79 79 74 65 72 6d 3e 61 6c 69 61  the <yyterm>alia
247e0 73 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 70 6f  s</yyterm> is po
247f0 69 6e 74 6c 65 73 73 2c 20 62 75 74 20 61 6c 73  intless, but als
24800 6f 0a 68 61 72 6d 6c 65 73 73 2e 0a 0a 3c 70 3e  o.harmless...<p>
24810 53 65 65 20 74 68 65 20 73 65 70 61 72 61 74 65  See the separate
24820 20 5b 55 50 53 45 52 54 5d 20 64 6f 63 75 6d 65   [UPSERT] docume
24830 6e 74 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  ntation for the 
24840 61 64 64 69 74 69 6f 6e 61 6c 20 74 72 61 69 6c  additional trail
24850 69 6e 67 0a 73 79 6e 74 61 78 20 74 68 61 74 20  ing.syntax that 
24860 63 61 6e 20 63 61 75 73 65 20 61 6e 20 49 4e 53  can cause an INS
24870 45 52 54 20 74 6f 20 62 65 68 61 76 65 20 61 73  ERT to behave as
24880 20 61 6e 20 55 50 44 41 54 45 20 69 66 20 74 68   an UPDATE if th
24890 65 20 49 4e 53 45 52 54 20 77 6f 75 6c 64 0a 6f  e INSERT would.o
248a0 74 68 65 72 77 69 73 65 20 76 69 6f 6c 61 74 65  therwise violate
248b0 20 61 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f   a uniqueness co
248c0 6e 73 74 72 61 69 6e 74 2e 20 20 54 68 65 20 5b  nstraint.  The [
248d0 75 70 73 65 72 74 20 63 6c 61 75 73 65 5d 20 69  upsert clause] i
248e0 73 20 6e 6f 74 0a 61 6c 6c 6f 77 65 64 20 6f 6e  s not.allowed on
248f0 20 61 6e 20 22 49 4e 53 45 52 54 20 2e 2e 2e 20   an "INSERT ... 
24900 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 2e  DEFAULT VALUES".
24910 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
24920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24960 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
24970 75 70 73 65 72 74 20 55 50 53 45 52 54 20 7b 55  upsert UPSERT {U
24980 50 53 45 52 54 20 7b 75 70 73 65 72 74 20 63 6c  PSERT {upsert cl
24990 61 75 73 65 7d 7d 0a 0a 52 65 63 75 72 73 69 76  ause}}..Recursiv
249a0 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75  eBubbleDiagram u
249b0 70 73 65 72 74 2d 63 6c 61 75 73 65 0a 3c 2f 74  psert-clause.</t
249c0 63 6c 3e 0a 0a 3c 70 3e 55 50 53 45 52 54 20 69  cl>..<p>UPSERT i
249d0 73 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74  s a special synt
249e0 61 78 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 5b  ax addition to [
249f0 49 4e 53 45 52 54 5d 20 74 68 61 74 20 63 61 75  INSERT] that cau
24a00 73 65 73 20 74 68 65 0a 49 4e 53 45 52 54 20 74  ses the.INSERT t
24a10 6f 20 62 65 68 61 76 65 20 61 73 20 61 6e 20 5b  o behave as an [
24a20 55 50 44 41 54 45 5d 20 6f 72 20 61 20 6e 6f 2d  UPDATE] or a no-
24a30 6f 70 20 69 66 20 74 68 65 20 49 4e 53 45 52 54  op if the INSERT
24a40 20 77 6f 75 6c 64 20 76 69 6f 6c 61 74 65 0a 61   would violate.a
24a50 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73   uniqueness cons
24a60 74 72 61 69 6e 74 2e 0a 55 50 53 45 52 54 20 69  traint..UPSERT i
24a70 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53  s not standard S
24a80 51 4c 2e 20 20 55 50 53 45 52 54 20 69 6e 20 53  QL.  UPSERT in S
24a90 51 4c 69 74 65 20 66 6f 6c 6c 6f 77 73 20 74 68  QLite follows th
24aa0 65 0a 73 79 6e 74 61 78 20 65 73 74 61 62 6c 69  e.syntax establi
24ab0 73 68 65 64 20 62 79 20 50 6f 73 74 67 72 65 53  shed by PostgreS
24ac0 51 4c 2e 0a 55 50 53 45 52 54 20 73 79 6e 74 61  QL..UPSERT synta
24ad0 78 20 77 61 73 20 61 64 64 65 64 20 74 6f 20 53  x was added to S
24ae0 51 4c 69 74 65 20 77 69 74 68 20 76 65 72 73 69  QLite with versi
24af0 6f 6e 20 33 2e 32 34 2e 30 20 28 5b 64 61 74 65  on 3.24.0 ([date
24b00 6f 66 3a 33 2e 32 34 2e 30 5d 29 2e 0a 0a 3c 70  of:3.24.0])...<p
24b10 3e 41 6e 20 55 50 53 45 52 54 20 69 73 20 61 6e  >An UPSERT is an
24b20 20 6f 72 64 69 6e 61 72 79 20 5b 49 4e 53 45 52   ordinary [INSER
24b30 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  T] statement tha
24b40 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
24b50 0a 74 68 65 20 73 70 65 63 69 61 6c 20 4f 4e 20  .the special ON 
24b60 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
24b70 73 68 6f 77 6e 20 61 62 6f 76 65 2e 0a 0a 3c 70  shown above...<p
24b80 3e 54 68 65 20 73 79 6e 74 61 78 20 74 68 61 74  >The syntax that
24b90 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65   occurs in betwe
24ba0 65 6e 20 74 68 65 20 22 4f 4e 20 43 4f 4e 46 4c  en the "ON CONFL
24bb0 49 43 54 22 20 61 6e 64 20 22 44 4f 22 20 6b 65  ICT" and "DO" ke
24bc0 79 77 6f 72 64 73 0a 69 73 20 63 61 6c 6c 65 64  ywords.is called
24bd0 20 74 68 65 20 22 63 6f 6e 66 6c 69 63 74 20 74   the "conflict t
24be0 61 72 67 65 74 22 2e 20 20 54 68 65 20 63 6f 6e  arget".  The con
24bf0 66 6c 69 63 74 20 74 61 72 67 65 74 20 73 70 65  flict target spe
24c00 63 69 66 69 65 73 20 61 20 73 70 65 63 69 66 69  cifies a specifi
24c10 63 0a 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  c.uniqueness con
24c20 73 74 72 61 69 6e 74 20 74 68 61 74 20 77 69 6c  straint that wil
24c30 6c 20 74 72 69 67 67 65 72 20 74 68 65 20 75 70  l trigger the up
24c40 73 65 72 74 2e 20 20 54 68 65 20 63 6f 6e 66 6c  sert.  The confl
24c50 69 63 74 20 74 61 72 67 65 74 0a 69 73 20 72 65  ict target.is re
24c60 71 75 69 72 65 64 20 66 6f 72 20 44 4f 20 55 50  quired for DO UP
24c70 44 41 54 45 20 75 70 73 65 72 74 73 2c 20 62 75  DATE upserts, bu
24c80 74 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20 66 6f  t is optional fo
24c90 72 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 0a 41 20  r DO NOTHING..A 
24ca0 44 4f 20 4e 4f 54 48 49 4e 47 20 75 70 73 65 72  DO NOTHING upser
24cb0 74 20 77 69 74 68 6f 75 74 20 61 20 63 6f 6e 66  t without a conf
24cc0 6c 69 63 74 20 74 61 72 67 65 74 20 77 6f 72 6b  lict target work
24cd0 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 6e  s the same as an
24ce0 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7c 49 4e  .[ON CONFLICT|IN
24cf0 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 5d 2e  SERT OR IGNORE].
24d00 0a 0a 3c 70 3e 49 66 20 74 68 65 20 69 6e 73 65  ..<p>If the inse
24d10 72 74 20 6f 70 65 72 61 74 69 6f 6e 20 77 6f 75  rt operation wou
24d20 6c 64 20 63 61 75 73 65 20 74 68 65 20 75 6e 69  ld cause the uni
24d30 71 75 65 6e 65 73 73 20 63 6f 6e 73 74 72 61 69  queness constrai
24d40 6e 74 20 69 64 65 6e 74 69 66 69 65 64 0a 62 79  nt identified.by
24d50 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 2d 74 61   the conflict-ta
24d60 72 67 65 74 20 63 6c 61 75 73 65 20 74 6f 20 66  rget clause to f
24d70 61 69 6c 2c 20 74 68 65 6e 20 74 68 65 20 69 6e  ail, then the in
24d80 73 65 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20  sert is omitted 
24d90 61 6e 64 0a 65 69 74 68 65 72 20 74 68 65 20 44  and.either the D
24da0 4f 20 4e 4f 54 48 49 4e 47 20 6f 72 20 44 4f 20  O NOTHING or DO 
24db0 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e  UPDATE operation
24dc0 20 69 73 20 70 65 72 66 6f 72 6d 65 64 20 69 6e   is performed in
24dd0 73 74 65 61 64 2e 0a 49 6e 20 74 68 65 20 63 61  stead..In the ca
24de0 73 65 20 6f 66 20 61 20 6d 75 6c 74 69 2d 72 6f  se of a multi-ro
24df0 77 20 69 6e 73 65 72 74 2c 20 74 68 69 73 20 64  w insert, this d
24e00 65 63 69 73 69 6f 6e 20 69 73 20 6d 61 64 65 20  ecision is made 
24e10 73 65 70 61 72 61 74 65 6c 79 0a 66 6f 72 20 65  separately.for e
24e20 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 69  ach row of the i
24e30 6e 73 65 72 74 2e 0a 0a 3c 70 3e 43 6f 6c 75 6d  nsert...<p>Colum
24e40 6e 20 6e 61 6d 65 73 20 69 6e 20 74 68 65 20 65  n names in the e
24e50 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 20  xpressions of a 
24e60 44 4f 20 55 50 44 41 54 45 20 72 65 66 65 72 20  DO UPDATE refer 
24e70 74 6f 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a  to the original.
24e80 75 6e 63 68 61 6e 67 65 64 20 76 61 6c 75 65 20  unchanged value 
24e90 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 62  of the column, b
24ea0 65 66 6f 72 65 20 74 68 65 20 61 74 74 65 6d 70  efore the attemp
24eb0 74 65 64 20 49 4e 53 45 52 54 2e 20 20 54 6f 20  ted INSERT.  To 
24ec0 75 73 65 20 74 68 65 0a 76 61 6c 75 65 20 74 68  use the.value th
24ed0 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  at would have be
24ee0 65 6e 20 69 6e 73 65 72 74 65 64 20 68 61 64 20  en inserted had 
24ef0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 6e  the constraint n
24f00 6f 74 20 66 61 69 6c 65 64 2c 0a 61 64 64 20 74  ot failed,.add t
24f10 68 65 20 73 70 65 63 69 61 6c 20 22 65 78 63 6c  he special "excl
24f20 75 64 65 64 2e 22 20 74 61 62 6c 65 20 71 75 61  uded." table qua
24f30 6c 69 66 69 65 72 20 74 6f 20 74 68 65 20 63 6f  lifier to the co
24f40 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 0a 3c 70 3e 53  lumn name...<p>S
24f50 6f 6d 65 20 65 78 61 6d 70 6c 65 73 20 77 69 6c  ome examples wil
24f60 6c 20 68 65 6c 70 20 69 6c 6c 75 73 74 72 61 74  l help illustrat
24f70 65 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65  e the difference
24f80 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
24f90 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
24fa0 45 20 76 6f 63 61 62 75 6c 61 72 79 28 77 6f 72  E vocabulary(wor
24fb0 64 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b  d TEXT PRIMARY K
24fc0 45 59 2c 20 63 6f 75 6e 74 20 49 4e 54 20 44 45  EY, count INT DE
24fd0 46 41 55 4c 54 20 31 29 3b 0a 49 4e 53 45 52 54  FAULT 1);.INSERT
24fe0 20 49 4e 54 4f 20 76 6f 63 61 62 75 6c 61 72 79   INTO vocabulary
24ff0 28 77 6f 72 64 29 20 56 41 4c 55 45 53 28 27 6a  (word) VALUES('j
25000 6f 76 69 61 6c 27 29 0a 20 20 4f 4e 20 43 4f 4e  ovial').  ON CON
25010 46 4c 49 43 54 28 77 6f 72 64 29 20 44 4f 20 55  FLICT(word) DO U
25020 50 44 41 54 45 20 53 45 54 20 63 6f 75 6e 74 3d  PDATE SET count=
25030 63 6f 75 6e 74 2b 31 3b 0a 3c 2f 70 72 65 3e 3c  count+1;.</pre><
25040 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
25050 3e 54 68 65 20 75 70 73 65 72 74 20 61 62 6f 76  >The upsert abov
25060 65 20 69 6e 73 65 72 74 73 20 74 68 65 20 6e 65  e inserts the ne
25070 77 20 76 6f 63 61 62 75 6c 61 72 79 20 77 6f 72  w vocabulary wor
25080 64 20 22 6a 6f 76 69 61 6c 22 20 69 66 20 74 68  d "jovial" if th
25090 61 74 0a 77 6f 72 64 20 69 73 20 6e 6f 74 20 61  at.word is not a
250a0 6c 72 65 61 64 79 20 69 6e 20 74 68 65 20 64 69  lready in the di
250b0 63 74 69 6f 6e 61 72 79 2c 20 6f 72 20 69 66 20  ctionary, or if 
250c0 69 74 20 69 73 20 61 6c 72 65 61 64 79 20 69 6e  it is already in
250d0 20 74 68 65 0a 64 69 63 74 69 6f 6e 61 72 79 2c   the.dictionary,
250e0 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 74   it increments t
250f0 68 65 20 63 6f 75 6e 74 65 72 2e 20 20 54 68 65  he counter.  The
25100 20 22 63 6f 75 6e 74 2b 31 22 20 65 78 70 72 65   "count+1" expre
25110 73 73 69 6f 6e 0a 63 6f 75 6c 64 20 61 6c 73 6f  ssion.could also
25120 20 62 65 20 77 72 69 74 74 65 6e 20 61 73 20 22   be written as "
25130 76 6f 63 61 62 75 6c 61 72 79 2e 63 6f 75 6e 74  vocabulary.count
25140 22 2e 20 20 50 6f 73 74 67 72 65 53 51 4c 20 72  ".  PostgreSQL r
25150 65 71 75 69 72 65 73 20 74 68 65 0a 73 65 63 6f  equires the.seco
25160 6e 64 20 66 6f 72 6d 2c 20 62 75 74 20 53 51 4c  nd form, but SQL
25170 69 74 65 20 61 63 63 65 70 74 73 20 65 69 74 68  ite accepts eith
25180 65 72 2e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  er...<blockquote
25190 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
251a0 42 4c 45 20 70 68 6f 6e 65 62 6f 6f 6b 28 6e 61  BLE phonebook(na
251b0 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  me TEXT PRIMARY 
251c0 4b 45 59 2c 20 70 68 6f 6e 65 6e 75 6d 62 65 72  KEY, phonenumber
251d0 20 54 45 58 54 29 3b 0a 49 4e 53 45 52 54 20 49   TEXT);.INSERT I
251e0 4e 54 4f 20 70 68 6f 6e 65 62 6f 6f 6b 28 6e 61  NTO phonebook(na
251f0 6d 65 2c 70 68 6f 6e 65 6e 75 6d 62 65 72 29 20  me,phonenumber) 
25200 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 27  VALUES('Alice','
25210 37 30 34 2d 35 35 35 2d 31 32 31 32 27 29 0a 20  704-555-1212'). 
25220 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 6e 61 6d   ON CONFLICT(nam
25230 65 29 20 44 4f 20 55 50 44 41 54 45 20 53 45 54  e) DO UPDATE SET
25240 20 70 68 6f 6e 65 6e 75 6d 62 65 72 3d 65 78 63   phonenumber=exc
25250 6c 75 64 65 64 2e 70 68 6f 6e 65 6e 75 6d 62 65  luded.phonenumbe
25260 72 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  r;.</pre></block
25270 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68  quote>..<p>In th
25280 65 20 73 65 63 6f 6e 64 20 65 78 61 6d 70 6c 65  e second example
25290 2c 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  , the expression
252a0 20 69 6e 20 74 68 65 20 44 4f 20 55 50 44 41 54   in the DO UPDAT
252b0 45 20 63 6c 61 75 73 65 20 69 73 0a 6f 66 20 74  E clause is.of t
252c0 68 65 20 66 6f 72 6d 20 22 65 78 63 6c 75 64 65  he form "exclude
252d0 64 2e 70 68 6f 6e 65 6e 75 6d 62 65 72 22 2e 20  d.phonenumber". 
252e0 20 54 68 65 20 22 65 78 63 6c 75 64 65 64 2e 22   The "excluded."
252f0 20 70 72 65 66 69 78 20 63 61 75 73 65 73 20 74   prefix causes t
25300 68 65 0a 22 70 68 6f 6e 65 6e 75 6d 62 65 72 22  he."phonenumber"
25310 20 74 6f 20 72 65 66 65 72 20 74 6f 20 74 68 65   to refer to the
25320 20 76 61 6c 75 65 20 66 6f 72 20 70 68 6f 6e 65   value for phone
25330 6e 75 6d 62 65 72 20 74 68 61 74 20 77 6f 75 6c  number that woul
25340 64 20 68 61 76 65 20 62 65 65 6e 0a 69 6e 73 65  d have been.inse
25350 72 74 65 64 20 68 61 64 20 74 68 65 72 65 20 62  rted had there b
25360 65 65 6e 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 2e  een no conflict.
25370 20 20 48 65 6e 63 65 2c 20 74 68 65 20 65 66 66    Hence, the eff
25380 65 63 74 20 6f 66 20 74 68 65 20 75 70 73 65 72  ect of the upser
25390 74 0a 69 73 20 74 6f 20 69 6e 73 65 72 74 20 61  t.is to insert a
253a0 20 70 68 6f 6e 65 6e 75 6d 62 65 72 20 6f 66 20   phonenumber of 
253b0 41 6c 69 63 65 20 69 66 20 6e 6f 6e 65 20 65 78  Alice if none ex
253c0 69 73 74 73 2c 20 6f 72 20 74 6f 20 6f 76 65 72  ists, or to over
253d0 77 72 69 74 65 0a 61 6e 79 20 70 72 69 6f 72 20  write.any prior 
253e0 70 68 6f 6e 65 6e 75 6d 62 65 72 20 66 6f 72 20  phonenumber for 
253f0 41 6c 69 63 65 20 77 69 74 68 20 74 68 65 20 6e  Alice with the n
25400 65 77 20 6f 6e 65 2e 0a 0a 3c 70 3e 4e 6f 74 65  ew one...<p>Note
25410 20 74 68 61 74 20 74 68 65 20 44 4f 20 55 50 44   that the DO UPD
25420 41 54 45 20 63 6c 61 75 73 65 20 61 63 74 73 20  ATE clause acts 
25430 6f 6e 6c 79 20 6f 6e 20 74 68 65 20 73 69 6e 67  only on the sing
25440 6c 65 20 72 6f 77 0a 74 68 61 74 20 65 78 70 65  le row.that expe
25450 72 69 65 6e 63 65 64 20 74 68 65 20 63 6f 6e 73  rienced the cons
25460 74 72 61 69 6e 74 20 65 72 72 6f 72 20 64 75 72  traint error dur
25470 69 6e 67 20 49 4e 53 45 52 54 2e 20 20 49 74 20  ing INSERT.  It 
25480 69 73 20 6e 6f 74 0a 6e 65 63 65 73 73 61 72 79  is not.necessary
25490 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 20 57 48   to include a WH
254a0 45 52 45 20 63 6c 61 75 73 65 20 74 68 61 74 20  ERE clause that 
254b0 72 65 73 74 72 69 63 74 69 6f 6e 73 20 74 68 65  restrictions the
254c0 20 61 63 74 69 6f 6e 0a 74 6f 20 74 68 61 74 20   action.to that 
254d0 6f 6e 65 20 72 6f 77 2e 20 20 54 68 65 20 6f 6e  one row.  The on
254e0 6c 79 20 75 73 65 20 66 6f 72 20 74 68 65 20 57  ly use for the W
254f0 48 45 52 45 20 63 6c 61 75 73 65 20 61 74 0a 74  HERE clause at.t
25500 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 44 4f  he end of the DO
25510 20 55 50 44 41 54 45 20 69 73 20 74 6f 20 6f 70   UPDATE is to op
25520 74 69 6f 6e 61 6c 6c 79 20 63 68 61 6e 67 65 20  tionally change 
25530 74 68 65 20 44 4f 20 55 50 44 41 54 45 0a 69 6e  the DO UPDATE.in
25540 74 6f 20 61 20 6e 6f 2d 6f 70 20 64 65 70 65 6e  to a no-op depen
25550 64 69 6e 67 20 6f 6e 20 74 68 65 20 6f 72 69 67  ding on the orig
25560 69 6e 61 6c 20 61 6e 64 2f 6f 72 20 6e 65 77 20  inal and/or new 
25570 76 61 6c 75 65 73 2e 0a 46 6f 72 20 65 78 61 6d  values..For exam
25580 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ple:..<blockquot
25590 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
255a0 41 42 4c 45 20 70 68 6f 6e 65 62 6f 6f 6b 32 28  ABLE phonebook2(
255b0 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49  .  name TEXT PRI
255c0 4d 41 52 59 20 4b 45 59 2c 0a 20 20 70 68 6f 6e  MARY KEY,.  phon
255d0 65 6e 75 6d 62 65 72 20 54 45 58 54 2c 0a 20 20  enumber TEXT,.  
255e0 76 61 6c 69 64 44 61 74 65 20 44 41 54 45 0a 29  validDate DATE.)
255f0 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 70 68  ;.INSERT INTO ph
25600 6f 6e 65 62 6f 6f 6b 32 28 6e 61 6d 65 2c 70 68  onebook2(name,ph
25610 6f 6e 65 6e 75 6d 62 65 72 2c 76 61 6c 69 64 44  onenumber,validD
25620 61 74 65 29 0a 20 20 56 41 4c 55 45 53 28 27 41  ate).  VALUES('A
25630 6c 69 63 65 27 2c 27 37 30 34 2d 35 35 35 2d 31  lice','704-555-1
25640 32 31 32 27 2c 27 32 30 31 38 2d 30 35 2d 30 38  212','2018-05-08
25650 27 29 0a 20 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ').  ON CONFLICT
25660 28 6e 61 6d 65 29 20 44 4f 20 55 50 44 41 54 45  (name) DO UPDATE
25670 20 53 45 54 0a 20 20 20 20 70 68 6f 6e 65 6e 75   SET.    phonenu
25680 6d 62 65 72 3d 65 78 63 6c 75 64 65 64 2e 70 68  mber=excluded.ph
25690 6f 6e 65 6e 75 6d 62 65 72 2c 0a 20 20 20 20 76  onenumber,.    v
256a0 61 6c 69 64 44 61 74 65 3d 65 78 63 6c 75 64 65  alidDate=exclude
256b0 64 2e 76 61 6c 69 64 44 61 74 65 0a 20 20 57 48  d.validDate.  WH
256c0 45 52 45 20 65 78 63 6c 75 64 65 64 2e 76 61 6c  ERE excluded.val
256d0 69 64 44 61 74 65 3e 70 68 6f 6e 65 62 6f 6f 6b  idDate>phonebook
256e0 32 2e 76 61 6c 69 64 44 61 74 65 3b 0a 3c 2f 70  2.validDate;.</p
256f0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
25700 0a 0a 3c 70 3e 49 6e 20 74 68 69 73 20 6c 61 73  ..<p>In this las
25710 74 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  t example, the p
25720 68 6f 6e 65 62 6f 6f 6b 32 20 65 6e 74 72 79 20  honebook2 entry 
25730 69 73 20 6f 6e 6c 79 0a 75 70 64 61 74 65 64 20  is only.updated 
25740 69 66 20 74 68 65 20 76 61 6c 69 64 44 61 74 65  if the validDate
25750 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 69   for the newly i
25760 6e 73 65 72 74 65 64 20 76 61 6c 75 65 20 69 73  nserted value is
25770 0a 6e 65 77 65 72 20 74 68 61 6e 20 74 68 65 20  .newer than the 
25780 65 6e 74 72 79 20 61 6c 72 65 61 64 79 20 69 6e  entry already in
25790 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
257a0 74 68 65 20 74 61 62 6c 65 20 61 6c 72 65 61 64  the table alread
257b0 79 0a 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65 6e  y.contains an en
257c0 74 72 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  try with the sam
257d0 65 20 6e 61 6d 65 20 61 6e 64 20 61 20 63 75 72  e name and a cur
257e0 72 65 6e 74 20 76 61 6c 69 64 44 61 74 65 2c 0a  rent validDate,.
257f0 74 68 65 6e 20 74 68 65 20 57 48 45 52 45 20 63  then the WHERE c
25800 6c 61 75 73 65 20 63 61 75 73 65 73 20 74 68 65  lause causes the
25810 20 44 4f 20 55 50 44 41 54 45 20 74 6f 20 62 65   DO UPDATE to be
25820 63 6f 6d 65 20 61 20 6e 6f 2d 6f 70 2e 0a 0a 3c  come a no-op...<
25830 68 33 3e 4c 69 6d 69 74 61 74 69 6f 6e 73 3c 2f  h3>Limitations</
25840 68 33 3e 0a 0a 3c 70 3e 55 50 53 45 52 54 20 64  h3>..<p>UPSERT d
25850 6f 65 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c  oes not currentl
25860 79 20 77 6f 72 6b 20 66 6f 72 20 5b 76 69 72 74  y work for [virt
25870 75 61 6c 20 74 61 62 6c 65 73 5d 2e 0a 0a 0a 3c  ual tables]....<
25880 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
25890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
258a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
258b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
258c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
258d0 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e 20  ###.Section {ON 
258e0 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d  CONFLICT clause}
258f0 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e 66   conflict {{conf
25900 6c 69 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f 4e  lict clause} {ON
25910 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 52 65 63   CONFLICT}}..Rec
25920 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
25930 72 61 6d 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61  ram conflict-cla
25940 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  use.</tcl>..<p>T
25950 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  he ON CONFLICT c
25960 6c 61 75 73 65 20 69 73 20 61 0a 6e 6f 6e 2d 73  lause is a.non-s
25970 74 61 6e 64 61 72 64 20 65 78 74 65 6e 73 69 6f  tandard extensio
25980 6e 20 73 70 65 63 69 66 69 63 20 74 6f 20 53 51  n specific to SQ
25990 4c 69 74 65 20 0a 74 68 61 74 20 63 61 6e 20 61  Lite .that can a
259a0 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74  ppear in many ot
259b0 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73  her SQL commands
259c0 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20 69 74  ..It is given it
259d0 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e  s own section in
259e0 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 62   this document b
259f0 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74  ecause it is not
25a00 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72  .part of standar
25a10 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72 65 66  d SQL and theref
25a20 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20 62 65  ore might not be
25a30 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a   familiar.</p>..
25a40 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  <p>The ON CONFLI
25a50 43 54 20 63 6c 61 75 73 65 20 64 65 73 63 72 69  CT clause descri
25a60 62 65 64 20 68 65 72 65 20 68 61 73 20 62 65 65  bed here has bee
25a70 6e 20 61 20 70 61 72 74 20 6f 66 0a 53 51 4c 69  n a part of.SQLi
25a80 74 65 20 73 69 6e 63 65 20 62 65 66 6f 72 65 20  te since before 
25a90 76 65 72 73 69 6f 6e 20 33 2e 30 2e 30 20 28 5b  version 3.0.0 ([
25aa0 64 61 74 65 6f 66 3a 33 2e 30 2e 30 5d 29 2e 20  dateof:3.0.0]). 
25ab0 20 54 68 65 20 70 68 72 61 73 65 0a 22 4f 4e 26   The phrase."ON&
25ac0 6e 62 73 70 3b 43 4f 4e 46 4c 49 43 54 22 20 69  nbsp;CONFLICT" i
25ad0 73 20 61 6c 73 6f 20 70 61 72 74 20 6f 66 20 5b  s also part of [
25ae0 55 50 53 45 52 54 5d 2c 20 77 68 69 63 68 20 69  UPSERT], which i
25af0 73 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 0a 74  s an extension.t
25b00 6f 20 5b 49 4e 53 45 52 54 5d 20 61 64 64 65 64  o [INSERT] added
25b10 20 69 6e 20 76 65 72 73 69 6f 6e 20 33 2e 32 34   in version 3.24
25b20 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33 2e 32 34  .0 ([dateof:3.24
25b30 2e 30 5d 29 2e 20 20 44 6f 20 6e 6f 74 0a 63 6f  .0]).  Do not.co
25b40 6e 66 75 73 65 20 74 68 65 73 65 20 74 77 6f 20  nfuse these two 
25b50 73 65 70 61 72 61 74 65 20 75 73 65 73 20 6f 66  separate uses of
25b60 20 74 68 65 20 22 4f 4e 26 6e 62 73 70 3b 43 4f   the "ON&nbsp;CO
25b70 4e 46 4c 49 43 54 22 20 70 68 72 61 73 65 2e 0a  NFLICT" phrase..
25b80 0a 3c 70 3e 5e 54 68 65 20 73 79 6e 74 61 78 20  .<p>^The syntax 
25b90 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  for the ON CONFL
25ba0 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 61 73  ICT clause is as
25bb0 20 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72   shown above for
25bc0 0a 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c  .the CREATE TABL
25bd0 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72  E command.  ^For
25be0 20 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64 0a   the INSERT and.
25bf0 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c  UPDATE commands,
25c00 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 4f   the keywords "O
25c10 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65 20  N CONFLICT" are 
25c20 72 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52 22  replaced by "OR"
25c30 20 73 6f 20 74 68 61 74 0a 74 68 65 20 73 79 6e   so that.the syn
25c40 74 61 78 20 72 65 61 64 73 20 6d 6f 72 65 20 6e  tax reads more n
25c50 61 74 75 72 61 6c 6c 79 2e 20 20 46 6f 72 20 65  aturally.  For e
25c60 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64 20  xample, instead 
25c70 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43 4f  of."INSERT ON CO
25c80 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20 77  NFLICT IGNORE" w
25c90 65 20 68 61 76 65 20 22 49 4e 53 45 52 54 20 4f  e have "INSERT O
25ca0 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20 6b  R IGNORE"..The k
25cb0 65 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20 62  eywords change b
25cc0 75 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f  ut the meaning o
25cd0 66 20 74 68 65 20 63 6c 61 75 73 65 20 69 73 20  f the clause is 
25ce0 74 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72 20  the same.either 
25cf0 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  way.</p>..<p>The
25d00 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
25d10 75 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20 5b  use applies to [
25d20 55 4e 49 51 55 45 5d 2c 20 5b 4e 4f 54 20 4e 55  UNIQUE], [NOT NU
25d30 4c 4c 5d 2c 0a 5b 43 48 45 43 4b 5d 2c 20 61 6e  LL],.[CHECK], an
25d40 64 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  d [PRIMARY KEY] 
25d50 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 54 68 65  constraints..The
25d60 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
25d70 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74 0a  orithm does not.
25d80 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49 47  apply to [FOREIG
25d90 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
25da0 73 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66 69  s]..There are fi
25db0 76 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  ve conflict reso
25dc0 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
25dd0 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42 41   choices:.ROLLBA
25de0 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c 2c  CK, ABORT, FAIL,
25df0 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45 50   IGNORE, and REP
25e00 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61 75  LACE..^The defau
25e10 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  lt conflict reso
25e20 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
25e30 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69 73   is ABORT.  This
25e40 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d 65  .is what they me
25e50 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64  an:</p>..<dl>.<d
25e60 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62  t><b>ROLLBACK</b
25e70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
25e80 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
25e90 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
25ea0 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
25eb0 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65 73  the ROLLBACK.res
25ec0 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
25ed0 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72  m aborts the cur
25ee0 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65  rent SQL stateme
25ef0 6e 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49 54  nt with.an SQLIT
25f00 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72  E_CONSTRAINT err
25f10 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61 63  or and rolls bac
25f20 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  k the current tr
25f30 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20 6e  ansaction..^If n
25f40 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
25f50 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20 74  .active (other t
25f60 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20  han the implied 
25f70 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74  transaction that
25f80 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20 65   is created on e
25f90 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68  very.command) th
25fa0 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
25fb0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
25fc0 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20 73  ithm works the s
25fd0 61 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52 54  ame as the.ABORT
25fe0 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e 3c   algorithm.</p><
25ff0 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f  /dd>..<dt><b>ABO
26000 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  RT</b></dt>.<dd>
26010 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70  <p> ^When an app
26020 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  licable constrai
26030 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
26040 75 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a 72  urs, the ABORT.r
26050 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
26060 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63  thm aborts the c
26070 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65  urrent SQL state
26080 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51 4c  ment.with an SQL
26090 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65  ITE_CONSTRAINT e
260a0 72 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20 6f  rror and backs o
260b0 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a 6d  ut any changes.m
260c0 61 64 65 20 62 79 20 74 68 65 20 63 75 72 72 65  ade by the curre
260d0 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  nt SQL statement
260e0 3b 20 62 75 74 20 63 68 61 6e 67 65 73 20 63 61  ; but changes ca
260f0 75 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53 51  used.by prior SQ
26100 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  L statements wit
26110 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72 61  hin the same tra
26120 6e 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72 65  nsaction are pre
26130 73 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a 74  served and the.t
26140 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69  ransaction remai
26150 6e 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73 20  ns active..This 
26160 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  is the default b
26170 65 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65 20  ehavior and the 
26180 62 65 68 61 76 69 6f 72 20 73 70 65 63 69 66 69  behavior specifi
26190 65 64 20 62 79 20 74 68 65 20 53 51 4c 0a 73 74  ed by the SQL.st
261a0 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e  andard.</p></dd>
261b0 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62  ..<dt><b>FAIL</b
261c0 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
261d0 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
261e0 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
261f0 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
26200 74 68 65 20 46 41 49 4c 0a 72 65 73 6f 6c 75 74  the FAIL.resolut
26210 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62  ion algorithm ab
26220 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
26230 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77   SQL statement w
26240 69 74 68 20 61 6e 0a 53 51 4c 49 54 45 5f 43 4f  ith an.SQLITE_CO
26250 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 2e 20  NSTRAINT error. 
26260 20 5e 42 75 74 20 74 68 65 20 46 41 49 4c 20 72   ^But the FAIL r
26270 65 73 6f 6c 75 74 69 6f 6e 20 64 6f 65 73 20 6e  esolution does n
26280 6f 74 0a 62 61 63 6b 20 6f 75 74 20 70 72 69 6f  ot.back out prio
26290 72 20 63 68 61 6e 67 65 73 20 6f 66 20 74 68 65  r changes of the
262a0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74   SQL statement t
262b0 68 61 74 20 66 61 69 6c 65 64 20 6e 6f 72 20 64  hat failed nor d
262c0 6f 65 73 0a 69 74 20 65 6e 64 20 74 68 65 20 74  oes.it end the t
262d0 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72  ransaction..^For
262e0 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20   example, if an 
262f0 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74  UPDATE.statement
26300 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 20 63   encountered a c
26310 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
26320 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30 74 68  ion on the 100th
26330 20 72 6f 77 20 74 68 61 74 0a 69 74 20 61 74 74   row that.it att
26340 65 6d 70 74 73 20 74 6f 20 75 70 64 61 74 65 2c  empts to update,
26350 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20   then the first 
26360 39 39 20 72 6f 77 20 63 68 61 6e 67 65 73 20 61  99 row changes a
26370 72 65 20 70 72 65 73 65 72 76 65 64 0a 62 75 74  re preserved.but
26380 20 63 68 61 6e 67 65 73 20 74 6f 20 72 6f 77 73   changes to rows
26390 20 31 30 30 20 61 6e 64 20 62 65 79 6f 6e 64 20   100 and beyond 
263a0 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e  never occur.</p>
263b0 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47  </dd>..<dt><b>IG
263c0 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  NORE</b></dt>.<d
263d0 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61  d><p> ^When an a
263e0 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72  pplicable constr
263f0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
26400 63 63 75 72 73 2c 20 0a 74 68 65 20 49 47 4e 4f  ccurs, .the IGNO
26410 52 45 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  RE resolution al
26420 67 6f 72 69 74 68 6d 20 73 6b 69 70 73 20 74 68  gorithm skips th
26430 65 20 6f 6e 65 20 72 6f 77 20 74 68 61 74 20 63  e one row that c
26440 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73  ontains.the cons
26450 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
26460 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 70   and continues p
26470 72 6f 63 65 73 73 69 6e 67 20 73 75 62 73 65 71  rocessing subseq
26480 75 65 6e 74 20 72 6f 77 73 0a 6f 66 20 74 68 65  uent rows.of the
26490 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61   SQL statement a
264a0 73 20 69 66 20 6e 6f 74 68 69 6e 67 20 77 65 6e  s if nothing wen
264b0 74 20 77 72 6f 6e 67 2e 0a 4f 74 68 65 72 20 72  t wrong..Other r
264c0 6f 77 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61  ows before and a
264d0 66 74 65 72 20 74 68 65 20 72 6f 77 20 74 68 61  fter the row tha
264e0 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68 65 20  t.contained the 
264f0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
26500 74 69 6f 6e 20 61 72 65 20 69 6e 73 65 72 74 65  tion are inserte
26510 64 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f 72  d or updated.nor
26520 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f 72  mally. ^No error
26530 20 69 73 20 72 65 74 75 72 6e 65 64 20 77 68 65   is returned whe
26540 6e 20 74 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e  n the IGNORE con
26550 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
26560 0a 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73  .algorithm is us
26570 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ed.</p></dd>..<d
26580 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e  t><b>REPLACE</b>
26590 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57  </dt>.<dd><p> ^W
265a0 68 65 6e 20 61 20 5b 55 4e 49 51 55 45 5d 20 6f  hen a [UNIQUE] o
265b0 72 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  r [PRIMARY KEY] 
265c0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
265d0 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68  tion occurs, .th
265e0 65 20 52 45 50 4c 41 43 45 20 61 6c 67 6f 72 69  e REPLACE algori
265f0 74 68 6d 0a 64 65 6c 65 74 65 73 20 70 72 65 2d  thm.deletes pre-
26600 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20 74 68  existing rows th
26610 61 74 20 61 72 65 20 63 61 75 73 69 6e 67 20 74  at are causing t
26620 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
26630 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f 72 20 74 6f  olation.prior to
26640 20 69 6e 73 65 72 74 69 6e 67 20 6f 72 20 75 70   inserting or up
26650 64 61 74 69 6e 67 20 74 68 65 20 63 75 72 72 65  dating the curre
26660 6e 74 20 72 6f 77 20 61 6e 64 20 74 68 65 20 63  nt row and the c
26670 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73  ommand continues
26680 20 0a 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d   .executing norm
26690 61 6c 6c 79 2e 0a 5e 49 66 20 61 20 5b 4e 4f 54  ally..^If a [NOT
266a0 20 4e 55 4c 4c 5d 20 63 6f 6e 73 74 72 61 69 6e   NULL] constrain
266b0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
266c0 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20  rs, the REPLACE 
266d0 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c 75 74  conflict.resolut
266e0 69 6f 6e 20 72 65 70 6c 61 63 65 73 20 74 68 65  ion replaces the
266f0 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77 69 74 68   NULL value with
26700 0a 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c  .the default val
26710 75 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75  ue for that colu
26720 6d 6e 2c 20 6f 72 20 69 66 20 74 68 65 20 63 6f  mn, or if the co
26730 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61  lumn has no defa
26740 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20  ult.value, then 
26750 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69  the ABORT algori
26760 74 68 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49 66  thm is used..^If
26770 20 61 20 5b 43 48 45 43 4b 5d 20 63 6f 6e 73 74   a [CHECK] const
26780 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
26790 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c  occurs, the REPL
267a0 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ACE conflict res
267b0 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68  olution.algorith
267c0 6d 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 6c  m always works l
267d0 69 6b 65 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a  ike ABORT.</p>..
267e0 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 52 45 50  <p>^When the REP
267f0 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  LACE conflict re
26800 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67  solution strateg
26810 79 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20 69  y deletes rows i
26820 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69 73  n order to.satis
26830 66 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c  fy a constraint,
26840 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
26850 20 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67 65   | delete trigge
26860 72 73 5d 20 66 69 72 65 20 69 66 20 61 6e 64 20  rs] fire if and 
26870 6f 6e 6c 79 20 69 66 0a 5b 72 65 63 75 72 73 69  only if.[recursi
26880 76 65 5f 74 72 69 67 67 65 72 73 20 70 72 61 67  ve_triggers prag
26890 6d 61 20 7c 20 72 65 63 75 72 73 69 76 65 20 74  ma | recursive t
268a0 72 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e 61  riggers] are ena
268b0 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  bled.</p>..<p>^T
268c0 68 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64 61  he [sqlite3_upda
268d0 74 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74 65  te_hook | update
268e0 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69 6e   hook] is not in
268f0 76 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20 74  voked for rows t
26900 68 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64 20  hat.are deleted 
26910 62 79 20 74 68 65 20 52 45 50 4c 41 43 45 20 63  by the REPLACE c
26920 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
26930 6f 6e 20 73 74 72 61 74 65 67 79 2e 20 20 5e 4e  on strategy.  ^N
26940 6f 72 20 64 6f 65 73 0a 52 45 50 4c 41 43 45 20  or does.REPLACE 
26950 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 5b 73  increment the [s
26960 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20 7c  qlite3_changes |
26970 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d   change counter]
26980 2e 0a 54 68 65 20 65 78 63 65 70 74 69 6f 6e 61  ..The exceptiona
26990 6c 20 62 65 68 61 76 69 6f 72 73 20 64 65 66 69  l behaviors defi
269a0 6e 65 64 20 69 6e 20 74 68 69 73 20 70 61 72 61  ned in this para
269b0 67 72 61 70 68 20 6d 69 67 68 74 20 63 68 61 6e  graph might chan
269c0 67 65 20 0a 69 6e 20 61 20 66 75 74 75 72 65 20  ge .in a future 
269d0 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64  release.</p>.</d
269e0 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61 6c 67 6f  l>..<p>^The algo
269f0 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20  rithm specified 
26a00 69 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65  in the OR clause
26a10 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 72   of an INSERT or
26a20 20 55 50 44 41 54 45 0a 6f 76 65 72 72 69 64 65   UPDATE.override
26a30 73 20 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20  s any algorithm 
26a40 73 70 65 63 69 66 69 65 64 20 69 6e 20 61 20 43  specified in a C
26a50 52 45 41 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66  REATE TABLE..^If
26a60 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69 73   no algorithm is
26a70 20 73 70 65 63 69 66 69 65 64 20 61 6e 79 77 68   specified anywh
26a80 65 72 65 2c 20 74 68 65 20 41 42 4f 52 54 20 61  ere, the ABORT a
26a90 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
26aa0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
26ab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26ad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26af0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
26b00 69 6f 6e 20 52 45 49 4e 44 45 58 20 72 65 69 6e  ion REINDEX rein
26b10 64 65 78 20 52 45 49 4e 44 45 58 0a 0a 52 65 63  dex REINDEX..Rec
26b20 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
26b30 72 61 6d 20 72 65 69 6e 64 65 78 2d 73 74 6d 74  ram reindex-stmt
26b40 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
26b50 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64   REINDEX command
26b60 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 6c 65   is used to dele
26b70 74 65 20 61 6e 64 20 72 65 63 72 65 61 74 65 20  te and recreate 
26b80 69 6e 64 69 63 65 73 20 66 72 6f 6d 20 73 63 72  indices from scr
26b90 61 74 63 68 2e 0a 54 68 69 73 20 69 73 20 75 73  atch..This is us
26ba0 65 66 75 6c 20 77 68 65 6e 20 74 68 65 20 64 65  eful when the de
26bb0 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f  finition of a co
26bc0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
26bd0 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f   has changed..</
26be0 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52  p>..<p>^If the R
26bf0 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20 69  EINDEX keyword i
26c00 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62  s not followed b
26c10 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65  y a collation-se
26c20 71 75 65 6e 63 65 20 6f 72 20 64 61 74 61 62 61  quence or databa
26c30 73 65 20 0a 6f 62 6a 65 63 74 20 69 64 65 6e 74  se .object ident
26c40 69 66 69 65 72 2c 20 74 68 65 6e 20 61 6c 6c 20  ifier, then all 
26c50 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61  indices in all a
26c60 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
26c70 73 20 61 72 65 20 72 65 62 75 69 6c 74 2e 0a 0a  s are rebuilt...
26c80 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e 44  <p>^If the REIND
26c90 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 66 6f  EX keyword is fo
26ca0 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c 6c  llowed by a coll
26cb0 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6e  ation-sequence n
26cc0 61 6d 65 2c 20 74 68 65 6e 0a 61 6c 6c 20 69 6e  ame, then.all in
26cd0 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74  dices in all att
26ce0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
26cf0 74 68 61 74 20 75 73 65 20 74 68 65 20 6e 61 6d  that use the nam
26d00 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  ed collation seq
26d10 75 65 6e 63 65 73 0a 61 72 65 20 72 65 63 72 65  uences.are recre
26d20 61 74 65 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20  ated. ..<p>^Or, 
26d30 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
26d40 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
26d50 52 45 49 4e 44 45 58 20 69 64 65 6e 74 69 66 69  REINDEX identifi
26d60 65 73 20 61 20 73 70 65 63 69 66 69 63 20 0a 64  es a specific .d
26d70 61 74 61 62 61 73 65 20 74 61 62 6c 65 2c 20 74  atabase table, t
26d80 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 20  hen all indices 
26d90 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
26da0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 61  database table a
26db0 72 65 20 72 65 62 75 69 6c 74 2e 20 0a 5e 49 66  re rebuilt. .^If
26dc0 20 69 74 20 69 64 65 6e 74 69 66 69 65 73 20 61   it identifies a
26dd0 20 73 70 65 63 69 66 69 63 20 64 61 74 61 62 61   specific databa
26de0 73 65 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 6a  se index, then j
26df0 75 73 74 20 74 68 61 74 20 69 6e 64 65 78 20 69  ust that index i
26e00 73 20 72 65 63 72 65 61 74 65 64 2e 0a 0a 3c 70  s recreated...<p
26e10 3e 5e 46 6f 72 20 61 20 63 6f 6d 6d 61 6e 64 20  >^For a command 
26e20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 52 45 49  of the form "REI
26e30 4e 44 45 58 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e  NDEX <i>name</i>
26e40 22 2c 20 61 20 6d 61 74 63 68 0a 61 67 61 69 6e  ", a match.again
26e50 73 74 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 6c 61  st <yyterm>colla
26e60 74 69 6f 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  tion-name</yyter
26e70 6d 3e 20 74 61 6b 65 73 20 70 72 65 63 65 64 65  m> takes precede
26e80 6e 63 65 20 6f 76 65 72 20 61 20 6d 61 74 63 68  nce over a match
26e90 0a 61 67 61 69 6e 73 74 20 3c 79 79 74 65 72 6d  .against <yyterm
26ea0 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 79 79 74  >index-name</yyt
26eb0 65 72 6d 3e 20 6f 72 20 3c 79 79 74 65 72 6d 3e  erm> or <yyterm>
26ec0 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  table-name</yyte
26ed0 72 6d 3e 2e 0a 54 68 69 73 20 61 6d 62 69 67 75  rm>..This ambigu
26ee0 69 74 79 20 69 6e 20 74 68 65 20 73 79 6e 74 61  ity in the synta
26ef0 78 20 6d 61 79 20 62 65 20 61 76 6f 69 64 65 64  x may be avoided
26f00 20 62 79 20 61 6c 77 61 79 73 20 73 70 65 63 69   by always speci
26f10 66 79 69 6e 67 20 61 0a 3c 79 79 74 65 72 6d 3e  fying a.<yyterm>
26f20 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74  schema-name</yyt
26f30 65 72 6d 3e 20 77 68 65 6e 20 72 65 69 6e 64 65  erm> when reinde
26f40 78 69 6e 67 20 61 20 73 70 65 63 69 66 69 63 20  xing a specific 
26f50 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
26f60 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
26f70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26f80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26f90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26fb0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52  ######.Section R
26fc0 45 50 4c 41 43 45 20 72 65 70 6c 61 63 65 20 52  EPLACE replace R
26fd0 45 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a  EPLACE..</tcl>..
26fe0 3c 70 3e 5e 54 68 65 20 52 45 50 4c 41 43 45 20  <p>^The REPLACE 
26ff0 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 61 6c  command is an al
27000 69 61 73 20 66 6f 72 20 74 68 65 20 22 5b 4f 4e  ias for the "[ON
27010 20 43 4f 4e 46 4c 49 43 54 20 7c 20 49 4e 53 45   CONFLICT | INSE
27020 52 54 20 4f 52 20 52 45 50 4c 41 43 45 5d 22 0a  RT OR REPLACE]".
27030 76 61 72 69 61 6e 74 20 6f 66 20 74 68 65 20 5b  variant of the [
27040 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e  INSERT] command.
27050 20 20 0a 54 68 69 73 20 61 6c 69 61 73 20 69 73    .This alias is
27060 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 63 6f   provided for co
27070 6d 70 61 74 69 62 69 6c 69 74 79 20 6f 74 68 65  mpatibility othe
27080 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65  r SQL database e
27090 6e 67 69 6e 65 73 2e 20 20 53 65 65 20 74 68 65  ngines.  See the
270a0 20 0a 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61   .[INSERT] comma
270b0 6e 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  nd documentation
270c0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
270d0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e  information.</p>
270e0 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23    ..<tcl>.######
270f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27110 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27120 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27130 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
27140 6e 20 7b 57 49 54 48 20 63 6c 61 75 73 65 7d 20  n {WITH clause} 
27150 77 69 74 68 20 7b 7b 63 6f 6d 6d 6f 6e 20 74 61  with {{common ta
27160 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d  ble expressions}
27170 20 57 49 54 48 7d 0a 0a 52 65 63 75 72 73 69 76   WITH}..Recursiv
27180 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 77  eBubbleDiagram w
27190 69 74 68 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c  ith-clause.</tcl
271a0 3e 0a 0a 3c 70 3e 43 6f 6d 6d 6f 6e 20 54 61 62  >..<p>Common Tab
271b0 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73 20 6f  le Expressions o
271c0 72 20 43 54 45 73 20 61 63 74 20 6c 69 6b 65 20  r CTEs act like 
271d0 74 65 6d 70 6f 72 61 72 79 20 5b 76 69 65 77 73  temporary [views
271e0 5d 20 74 68 61 74 20 65 78 69 73 74 0a 6f 6e 6c  ] that exist.onl
271f0 79 20 66 6f 72 20 74 68 65 20 64 75 72 61 74 69  y for the durati
27200 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 53  on of a single S
27210 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  QL statement.  T
27220 68 65 72 65 20 61 72 65 20 74 77 6f 20 6b 69 6e  here are two kin
27230 64 73 20 6f 66 0a 63 6f 6d 6d 6f 6e 20 74 61 62  ds of.common tab
27240 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 3a 20  le expressions: 
27250 22 6f 72 64 69 6e 61 72 79 22 20 61 6e 64 20 22  "ordinary" and "
27260 72 65 63 75 72 73 69 76 65 22 2e 20 4f 72 64 69  recursive". Ordi
27270 6e 61 72 79 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62  nary .common tab
27280 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  le expressions a
27290 72 65 20 68 65 6c 70 66 75 6c 20 66 6f 72 20 6d  re helpful for m
272a0 61 6b 69 6e 67 0a 71 75 65 72 69 65 73 20 65 61  aking.queries ea
272b0 73 69 65 72 20 74 6f 20 75 6e 64 65 72 73 74 61  sier to understa
272c0 6e 64 20 62 79 20 66 61 63 74 6f 72 69 6e 67 0a  nd by factoring.
272d0 73 75 62 71 75 65 72 69 65 73 20 6f 75 74 20 6f  subqueries out o
272e0 66 20 74 68 65 20 6d 61 69 6e 20 53 51 4c 20 73  f the main SQL s
272f0 74 61 74 65 6d 65 6e 74 2e 0a 52 65 63 75 72 73  tatement..Recurs
27300 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ive common table
27310 20 65 78 70 72 65 73 73 69 6f 6e 73 0a 70 72 6f   expressions.pro
27320 76 69 64 65 20 74 68 65 20 61 62 69 6c 69 74 79  vide the ability
27330 20 74 6f 20 64 6f 20 68 69 65 72 61 72 63 68 69   to do hierarchi
27340 63 61 6c 20 6f 72 0a 72 65 63 75 72 73 69 76 65  cal or.recursive
27350 20 71 75 65 72 69 65 73 20 6f 66 20 74 72 65 65   queries of tree
27360 73 20 61 6e 64 20 67 72 61 70 68 73 2c 20 61 20  s and graphs, a 
27370 63 61 70 61 62 69 6c 69 74 79 0a 74 68 61 74 20  capability.that 
27380 69 73 20 6e 6f 74 20 6f 74 68 65 72 77 69 73 65  is not otherwise
27390 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68   available in th
273a0 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a  e SQL language..
273b0 0a 3c 70 3e 41 6c 6c 20 63 6f 6d 6d 6f 6e 20 74  .<p>All common t
273c0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
273d0 20 28 6f 72 64 69 6e 61 72 79 20 61 6e 64 20 72   (ordinary and r
273e0 65 63 75 72 73 69 76 65 29 20 61 72 65 20 0a 63  ecursive) are .c
273f0 72 65 61 74 65 64 20 62 79 20 70 72 65 70 65 6e  reated by prepen
27400 64 69 6e 67 20 61 20 57 49 54 48 20 63 6c 61 75  ding a WITH clau
27410 73 65 20 69 6e 20 66 72 6f 6e 74 20 6f 66 20 61  se in front of a
27420 20 5b 53 45 4c 45 43 54 5d 2c 20 5b 49 4e 53 45   [SELECT], [INSE
27430 52 54 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 0a 6f  RT], [DELETE],.o
27440 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65  r [UPDATE] state
27450 6d 65 6e 74 2e 20 20 41 20 73 69 6e 67 6c 65 20  ment.  A single 
27460 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 20  WITH clause can 
27470 73 70 65 63 69 66 79 20 6f 6e 65 20 6f 72 20 6d  specify one or m
27480 6f 72 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ore.common table
27490 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 73 6f   expressions, so
274a0 6d 65 20 6f 66 20 77 68 69 63 68 20 61 72 65 20  me of which are 
274b0 6f 72 64 69 6e 61 72 79 20 61 6e 64 20 73 6f 6d  ordinary and som
274c0 65 20 6f 66 20 77 68 69 63 68 0a 61 72 65 20 72  e of which.are r
274d0 65 63 75 72 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e  ecursive...<tcl>
274e0 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64 69  hd_fragment ordi
274f0 6e 61 72 79 63 74 65 20 7b 6f 72 64 69 6e 61 72  narycte {ordinar
27500 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  y common table e
27510 78 70 72 65 73 73 69 6f 6e 73 7d 3c 2f 74 63 6c  xpressions}</tcl
27520 3e 0a 3c 68 33 3e 4f 72 64 69 6e 61 72 79 20 43  >.<h3>Ordinary C
27530 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72  ommon Table Expr
27540 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  essions</h3>..<p
27550 3e 41 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d  >An ordinary com
27560 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
27570 73 69 6f 6e 20 77 6f 72 6b 73 20 61 73 20 69 66  sion works as if
27580 20 69 74 20 77 65 72 65 20 61 20 5b 76 69 65 77   it were a [view
27590 5d 20 74 68 61 74 0a 65 78 69 73 74 73 20 66 6f  ] that.exists fo
275a0 72 20 74 68 65 20 64 75 72 61 74 69 6f 6e 20 6f  r the duration o
275b0 66 20 61 20 73 69 6e 67 6c 65 20 73 74 61 74 65  f a single state
275c0 6d 65 6e 74 2e 20 20 4f 72 64 69 6e 61 72 79 20  ment.  Ordinary 
275d0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 0a 65 78 70  common table.exp
275e0 72 65 73 73 69 6f 6e 73 20 61 72 65 20 75 73 65  ressions are use
275f0 66 75 6c 20 66 6f 72 20 66 61 63 74 6f 72 69 6e  ful for factorin
27600 67 20 6f 75 74 20 73 75 62 71 75 65 72 69 65 73  g out subqueries
27610 20 61 6e 64 20 6d 61 6b 69 6e 67 20 74 68 65 20   and making the 
27620 6f 76 65 72 61 6c 6c 0a 53 51 4c 20 73 74 61 74  overall.SQL stat
27630 65 6d 65 6e 74 20 65 61 73 69 65 72 20 74 6f 20  ement easier to 
27640 72 65 61 64 20 61 6e 64 20 75 6e 64 65 72 73 74  read and underst
27650 61 6e 64 2e 0a 0a 3c 70 3e 41 20 57 49 54 48 20  and...<p>A WITH 
27660 63 6c 61 75 73 65 20 63 61 6e 20 63 6f 6e 74 61  clause can conta
27670 69 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d  in ordinary comm
27680 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
27690 69 6f 6e 73 20 65 76 65 6e 20 69 66 0a 69 74 20  ions even if.it 
276a0 69 6e 63 6c 75 64 65 73 20 74 68 65 20 52 45 43  includes the REC
276b0 55 52 53 49 56 45 20 6b 65 79 77 6f 72 64 2e 20  URSIVE keyword. 
276c0 20 54 68 65 20 75 73 65 20 6f 66 20 52 45 43 55   The use of RECU
276d0 52 53 49 56 45 20 64 6f 65 73 20 6e 6f 74 20 66  RSIVE does not f
276e0 6f 72 63 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c  orce.common tabl
276f0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
27700 20 62 65 20 72 65 63 75 72 73 69 76 65 2e 0a 0a   be recursive...
27710 3c 74 63 6c 3e 0a 68 64 5f 66 72 61 67 6d 65 6e  <tcl>.hd_fragmen
27720 74 20 72 65 63 75 72 73 69 76 65 63 74 65 20 7b  t recursivecte {
27730 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e  recursive common
27740 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
27750 6e 73 7d 20 5c 0a 7b 72 65 63 75 72 73 69 76 65  ns} \.{recursive
27760 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
27770 70 72 65 73 73 69 6f 6e 7d 20 7b 72 65 63 75 72  pression} {recur
27780 73 69 76 65 20 71 75 65 72 79 7d 0a 3c 2f 74 63  sive query}.</tc
27790 6c 3e 0a 3c 68 33 3e 52 65 63 75 72 73 69 76 65  l>.<h3>Recursive
277a0 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78   Common Table Ex
277b0 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a  pressions</h3>..
277c0 3c 70 3e 41 20 72 65 63 75 72 73 69 76 65 20 63  <p>A recursive c
277d0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
277e0 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75 73  ession can be us
277f0 65 64 20 74 6f 20 77 72 69 74 65 20 61 20 71 75  ed to write a qu
27800 65 72 79 20 74 68 61 74 0a 77 61 6c 6b 73 20 61  ery that.walks a
27810 20 74 72 65 65 20 6f 72 20 67 72 61 70 68 2e 20   tree or graph. 
27820 20 41 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d   A recursive com
27830 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
27840 73 69 6f 6e 20 68 61 73 20 74 68 65 20 73 61 6d  sion has the sam
27850 65 0a 62 61 73 69 63 20 73 79 6e 74 61 78 20 61  e.basic syntax a
27860 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f  s an ordinary co
27870 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
27880 73 73 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20  ssion, but with 
27890 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 61 64  the following.ad
278a0 64 69 74 69 6f 6e 61 6c 20 66 65 61 74 75 72 65  ditional feature
278b0 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 54 68  s:..<ol>.<li> Th
278c0 65 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d  e "[select-stmt]
278d0 22 0a 20 20 20 20 20 6d 75 73 74 20 62 65 20 61  ".     must be a
278e0 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63   [compound selec
278f0 74 5d 20 77 68 65 72 65 20 74 68 65 20 72 69 67  t] where the rig
27900 68 74 2d 6d 6f 73 74 20 5b 63 6f 6d 70 6f 75 6e  ht-most [compoun
27910 64 2d 6f 70 65 72 61 74 6f 72 5d 20 69 73 0a 20  d-operator] is. 
27920 20 20 20 20 65 69 74 68 65 72 20 55 4e 49 4f 4e      either UNION
27930 20 6f 72 20 55 4e 49 4f 4e 20 41 4c 4c 2e 0a 3c   or UNION ALL..<
27940 6c 69 3e 20 54 68 65 20 74 61 62 6c 65 20 6e 61  li> The table na
27950 6d 65 64 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d  med on the left-
27960 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65  hand side of the
27970 20 41 53 20 6b 65 79 77 6f 72 64 20 6d 75 73 74   AS keyword must
27980 20 61 70 70 65 61 72 0a 20 20 20 20 20 65 78 61   appear.     exa
27990 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65  ctly once in the
279a0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
279b0 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 53  the right-most S
279c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a  ELECT statement.
279d0 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6d 70       of the comp
279e0 6f 75 6e 64 20 73 65 6c 65 63 74 2c 20 61 6e 64  ound select, and
279f0 20 6e 6f 77 68 65 72 65 20 65 6c 73 65 2e 0a 3c   nowhere else..<
27a00 6c 69 3e 20 54 68 65 20 72 69 67 68 74 2d 6d 6f  li> The right-mo
27a10 73 74 20 53 45 4c 45 43 54 20 6f 66 20 74 68 65  st SELECT of the
27a20 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74   compound select
27a30 20 6d 75 73 74 20 6e 6f 74 20 6d 61 6b 65 20 75   must not make u
27a40 73 65 20 6f 66 0a 20 20 20 20 20 5b 41 67 67 72  se of.     [Aggr
27a50 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e 73 7c  egate Functions|
27a60 61 67 67 72 65 67 61 74 65 5d 20 6f 72 20 5b 77  aggregate] or [w
27a70 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 5d  indow functions]
27a80 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20 70  ..</ol>..<p>To p
27a90 75 74 20 69 74 20 61 6e 6f 74 68 65 72 20 77 61  ut it another wa
27aa0 79 2c 20 61 20 72 65 63 75 72 73 69 76 65 20 63  y, a recursive c
27ab0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
27ac0 65 73 73 69 6f 6e 20 6d 75 73 74 0a 6c 6f 6f 6b  ession must.look
27ad0 20 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77   like the follow
27ae0 69 6e 67 3a 0a 0a 3c 74 63 6c 3e 52 65 63 75 72  ing:..<tcl>Recur
27af0 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
27b00 6d 20 72 65 63 75 72 73 69 76 65 2d 63 74 65 3c  m recursive-cte<
27b10 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61 6c 6c 20 74  /tcl>..<p>Call t
27b20 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 62  he table named b
27b30 79 20 74 68 65 20 5b 63 74 65 2d 74 61 62 6c 65  y the [cte-table
27b40 2d 6e 61 6d 65 5d 20 69 6e 20 61 20 72 65 63 75  -name] in a recu
27b50 72 73 69 76 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62  rsive.common tab
27b60 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  le expression th
27b70 65 20 22 72 65 63 75 72 73 69 76 65 20 74 61 62  e "recursive tab
27b80 6c 65 22 2e 0a 49 6e 20 74 68 65 20 5b 72 65 63  le"..In the [rec
27b90 75 72 73 69 76 65 2d 63 74 65 5d 20 62 75 62 62  ursive-cte] bubb
27ba0 6c 65 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65  le diagram above
27bb0 2c 20 74 68 65 20 72 65 63 75 72 73 69 76 65 0a  , the recursive.
27bc0 74 61 62 6c 65 20 6d 75 73 74 20 61 70 70 65 61  table must appea
27bd0 72 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69  r exactly once i
27be0 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
27bf0 65 20 6f 66 20 74 68 65 20 0a 3c 79 79 74 65 72  e of the .<yyter
27c00 6d 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  m>recursive-sele
27c10 63 74 3c 2f 79 79 74 65 72 6d 3e 0a 61 6e 64 20  ct</yyterm>.and 
27c20 6d 75 73 74 20 6e 6f 74 20 61 70 70 65 61 72 20  must not appear 
27c30 61 6e 79 77 68 65 72 65 20 65 6c 73 65 20 69 6e  anywhere else in
27c40 20 65 69 74 68 65 72 20 74 68 65 0a 3c 79 79 74   either the.<yyt
27c50 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65  erm>initial-sele
27c60 63 74 3c 2f 79 79 74 65 72 6d 3e 20 6f 72 20 74  ct</yyterm> or t
27c70 68 65 0a 3c 79 79 74 65 72 6d 3e 72 65 63 75 72  he.<yyterm>recur
27c80 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74  sive-select</yyt
27c90 65 72 6d 3e 2c 20 69 6e 63 6c 75 64 69 6e 67 20  erm>, including 
27ca0 73 75 62 71 75 65 72 69 65 73 2e 0a 54 68 65 20  subqueries..The 
27cb0 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d  <yyterm>initial-
27cc0 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20  select</yyterm> 
27cd0 6d 61 79 20 62 65 0a 61 20 5b 63 6f 6d 70 6f 75  may be.a [compou
27ce0 6e 64 20 73 65 6c 65 63 74 5d 2c 20 62 75 74 20  nd select], but 
27cf0 69 74 20 6d 61 79 20 6e 6f 74 20 69 6e 63 6c 75  it may not inclu
27d00 64 65 20 61 6e 20 4f 52 44 45 52 20 42 59 2c 20  de an ORDER BY, 
27d10 4c 49 4d 49 54 2c 20 6f 72 20 4f 46 46 53 45 54  LIMIT, or OFFSET
27d20 2e 0a 54 68 65 20 72 65 63 75 72 73 69 76 65 2d  ..The recursive-
27d30 73 65 6c 65 63 74 20 6d 75 73 74 20 62 65 20 61  select must be a
27d40 20 73 69 6d 70 6c 65 20 73 65 6c 65 63 74 2c 20   simple select, 
27d50 6e 6f 74 20 61 20 63 6f 6d 70 6f 75 6e 64 2e 20  not a compound. 
27d60 20 54 68 65 0a 72 65 63 75 72 73 69 76 65 2d 73   The.recursive-s
27d70 65 6c 65 63 74 20 69 73 20 61 6c 6c 6f 77 65 64  elect is allowed
27d80 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f   to include an O
27d90 52 44 45 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20  RDER BY, LIMIT, 
27da0 61 6e 64 2f 6f 72 20 4f 46 46 53 45 54 2e 0a 0a  and/or OFFSET...
27db0 3c 70 3e 54 68 65 20 62 61 73 69 63 20 61 6c 67  <p>The basic alg
27dc0 6f 72 69 74 68 6d 20 66 6f 72 20 63 6f 6d 70 75  orithm for compu
27dd0 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ting the content
27de0 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76   of the recursiv
27df0 65 20 74 61 62 6c 65 0a 69 73 20 61 73 20 66 6f  e table.is as fo
27e00 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  llows:..<ol>.<li
27e10 3e 20 52 75 6e 20 74 68 65 20 3c 79 79 74 65 72  > Run the <yyter
27e20 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74  m>initial-select
27e30 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20 61 64  </yyterm> and ad
27e40 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 74 6f  d the results to
27e50 20 61 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20 57   a queue..<li> W
27e60 68 69 6c 65 20 74 68 65 20 71 75 65 75 65 20 69  hile the queue i
27e70 73 20 6e 6f 74 20 65 6d 70 74 79 3a 0a 3c 6f 6c  s not empty:.<ol
27e80 20 74 79 70 65 3d 22 61 22 3e 0a 3c 6c 69 3e 20   type="a">.<li> 
27e90 45 78 74 72 61 63 74 20 61 20 73 69 6e 67 6c 65  Extract a single
27ea0 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 71 75   row from the qu
27eb0 65 75 65 2e 0a 3c 6c 69 3e 20 49 6e 73 65 72 74  eue..<li> Insert
27ec0 20 74 68 61 74 20 73 69 6e 67 6c 65 20 72 6f 77   that single row
27ed0 20 69 6e 74 6f 20 74 68 65 20 72 65 63 75 72 73   into the recurs
27ee0 69 76 65 20 74 61 62 6c 65 0a 3c 6c 69 3e 20 50  ive table.<li> P
27ef0 72 65 74 65 6e 64 20 74 68 61 74 20 74 68 65 20  retend that the 
27f00 73 69 6e 67 6c 65 20 72 6f 77 20 6a 75 73 74 20  single row just 
27f10 65 78 74 72 61 63 74 65 64 20 69 73 20 74 68 65  extracted is the
27f20 20 6f 6e 6c 79 0a 20 20 20 20 20 72 6f 77 20 69   only.     row i
27f30 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  n the recursive 
27f40 74 61 62 6c 65 20 61 6e 64 20 72 75 6e 20 74 68  table and run th
27f50 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
27f60 63 74 2c 0a 20 20 20 20 20 61 64 64 69 6e 67 20  ct,.     adding 
27f70 61 6c 6c 20 72 65 73 75 6c 74 73 20 74 6f 20 74  all results to t
27f80 68 65 20 71 75 65 75 65 2e 0a 3c 2f 6f 6c 3e 0a  he queue..</ol>.
27f90 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 62 61  </ol>..<p>The ba
27fa0 73 69 63 20 70 72 6f 63 65 64 75 72 65 20 61 62  sic procedure ab
27fb0 6f 76 65 20 6d 61 79 20 6d 6f 64 69 66 69 65 64  ove may modified
27fc0 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   by the followin
27fd0 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 72 75 6c  g additional rul
27fe0 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  es:..<ul>.<li><p
27ff0 3e 0a 20 20 49 66 20 61 20 55 4e 49 4f 4e 20 6f  >.  If a UNION o
28000 70 65 72 61 74 6f 72 20 63 6f 6e 6e 65 63 74 73  perator connects
28010 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e 69   the <yyterm>ini
28020 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74  tial-select</yyt
28030 65 72 6d 3e 20 77 69 74 68 20 74 68 65 0a 20 20  erm> with the.  
28040 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76  <yyterm>recursiv
28050 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  e-select</yyterm
28060 3e 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61 64 64  >, then only add
28070 20 72 6f 77 73 20 74 6f 20 74 68 65 20 71 75 65   rows to the que
28080 75 65 20 69 66 20 0a 20 20 6e 6f 20 69 64 65 6e  ue if .  no iden
28090 74 69 63 61 6c 20 72 6f 77 20 68 61 73 0a 20 20  tical row has.  
280a0 62 65 65 6e 20 70 72 65 76 69 6f 75 73 6c 79 20  been previously 
280b0 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75 65  added to the que
280c0 75 65 2e 20 20 52 65 70 65 61 74 65 64 20 72 6f  ue.  Repeated ro
280d0 77 73 20 61 72 65 20 64 69 73 63 61 72 64 65 64  ws are discarded
280e0 20 62 65 66 6f 72 65 20 62 65 69 6e 67 0a 20 20   before being.  
280f0 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75 65  added to the que
28100 75 65 20 65 76 65 6e 20 69 66 20 74 68 65 20 72  ue even if the r
28110 65 70 65 61 74 65 64 20 72 6f 77 73 20 68 61 76  epeated rows hav
28120 65 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 65  e already been e
28130 78 74 72 61 63 74 65 64 0a 20 20 66 72 6f 6d 20  xtracted.  from 
28140 74 68 65 20 71 75 65 75 65 20 62 79 20 74 68 65  the queue by the
28150 20 72 65 63 75 72 73 69 6f 6e 20 73 74 65 70 2e   recursion step.
28160 20 20 49 66 20 74 68 65 20 6f 70 65 72 61 74 6f    If the operato
28170 72 20 69 73 20 55 4e 49 4f 4e 20 41 4c 4c 2c 0a  r is UNION ALL,.
28180 20 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20    then all rows 
28190 67 65 6e 65 72 61 74 65 64 20 62 79 20 62 6f 74  generated by bot
281a0 68 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e  h the <yyterm>in
281b0 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79  itial-select</yy
281c0 74 65 72 6d 3e 20 61 6e 64 20 74 68 65 0a 20 20  term> and the.  
281d0 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76  <yyterm>recursiv
281e0 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  e-select</yyterm
281f0 3e 20 61 72 65 20 61 6c 77 61 79 73 20 61 64 64  > are always add
28200 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 20  ed to the queue 
28210 65 76 65 6e 20 69 66 0a 20 20 74 68 65 79 20 61  even if.  they a
28220 72 65 20 72 65 70 65 61 74 73 2e 0a 20 20 57 68  re repeats..  Wh
28230 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69  en determining i
28240 66 20 61 20 72 6f 77 20 69 73 20 72 65 70 65 61  f a row is repea
28250 74 65 64 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ted, NULL values
28260 20 63 6f 6d 70 61 72 65 0a 20 20 65 71 75 61 6c   compare.  equal
28270 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 20   to one another 
28280 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c 20 74 6f  and not equal to
28290 20 61 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65   any other value
282a0 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20  ..<li><p>.  The 
282b0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 69 66  LIMIT clause, if
282c0 20 70 72 65 73 65 6e 74 2c 20 64 65 74 65 72 6d   present, determ
282d0 69 6e 65 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ines the maximum
282e0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
282f0 74 68 61 74 0a 20 20 77 69 6c 6c 20 65 76 65 72  that.  will ever
28300 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65   be added to the
28310 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
28320 20 69 6e 20 73 74 65 70 20 32 62 2e 0a 20 20 4f   in step 2b..  O
28330 6e 63 65 20 74 68 65 20 6c 69 6d 69 74 20 69 73  nce the limit is
28340 20 72 65 61 63 68 65 64 2c 20 74 68 65 20 72 65   reached, the re
28350 63 75 72 73 69 6f 6e 20 73 74 6f 70 73 2e 0a 20  cursion stops.. 
28360 20 41 20 6c 69 6d 69 74 20 6f 66 20 7a 65 72 6f   A limit of zero
28370 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20 72   means that no r
28380 6f 77 73 20 61 72 65 20 65 76 65 72 20 61 64 64  ows are ever add
28390 65 64 20 74 6f 20 74 68 65 0a 20 20 72 65 63 75  ed to the.  recu
283a0 72 73 69 76 65 20 74 61 62 6c 65 2c 20 61 6e 64  rsive table, and
283b0 20 61 20 6e 65 67 61 74 69 76 65 20 6c 69 6d 69   a negative limi
283c0 74 20 6d 65 61 6e 73 20 61 6e 20 75 6e 6c 69 6d  t means an unlim
283d0 69 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72  ited number of r
283e0 6f 77 73 0a 20 20 6d 61 79 20 62 65 20 61 64 64  ows.  may be add
283f0 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73  ed to the recurs
28400 69 76 65 20 74 61 62 6c 65 2e 0a 3c 6c 69 3e 3c  ive table..<li><
28410 70 3e 0a 20 20 54 68 65 20 4f 46 46 53 45 54 20  p>.  The OFFSET 
28420 63 6c 61 75 73 65 2c 20 69 66 20 69 74 20 69 73  clause, if it is
28430 20 70 72 65 73 65 6e 74 20 61 6e 64 20 68 61 73   present and has
28440 20 61 20 70 6f 73 69 74 69 76 65 20 76 61 6c 75   a positive valu
28450 65 20 4e 2c 20 70 72 65 76 65 6e 74 73 20 74 68  e N, prevents th
28460 65 0a 20 20 66 69 72 73 74 20 4e 20 72 6f 77 73  e.  first N rows
28470 20 66 72 6f 6d 20 62 65 69 6e 67 20 61 64 64 65   from being adde
28480 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69  d to the recursi
28490 76 65 20 74 61 62 6c 65 2e 0a 20 20 54 68 65 20  ve table..  The 
284a0 66 69 72 73 74 20 4e 20 72 6f 77 73 20 61 72 65  first N rows are
284b0 20 73 74 69 6c 6c 20 70 72 6f 63 65 73 73 65 64   still processed
284c0 0a 20 20 62 79 20 74 68 65 20 3c 79 79 74 65 72  .  by the <yyter
284d0 6d 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  m>recursive-sele
284e0 63 74 3c 2f 79 79 74 65 72 6d 3e 20 26 6d 64 61  ct</yyterm> &mda
284f0 73 68 3b 20 74 68 65 79 0a 20 20 6a 75 73 74 20  sh; they.  just 
28500 61 72 65 20 6e 6f 74 20 61 64 64 65 64 20 74 6f  are not added to
28510 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
28520 61 62 6c 65 2e 20 20 52 6f 77 73 20 61 72 65 20  able.  Rows are 
28530 6e 6f 74 20 63 6f 75 6e 74 65 64 20 74 6f 77 61  not counted towa
28540 72 64 0a 20 20 66 75 6c 66 69 6c 6c 69 6e 67 20  rd.  fulfilling 
28550 74 68 65 20 4c 49 4d 49 54 20 75 6e 74 69 6c 20  the LIMIT until 
28560 61 6c 6c 20 4f 46 46 53 45 54 20 72 6f 77 73 20  all OFFSET rows 
28570 68 61 76 65 20 62 65 65 6e 20 73 6b 69 70 70 65  have been skippe
28580 64 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20  d..<li><p>.  If 
28590 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an ORDER BY clau
285a0 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 69  se is present, i
285b0 74 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  t determines the
285c0 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20   order in which 
285d0 72 6f 77 73 0a 20 20 61 72 65 20 65 78 74 72 61  rows.  are extra
285e0 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 71 75  cted from the qu
285f0 65 75 65 20 69 6e 20 73 74 65 70 20 32 61 2e 20  eue in step 2a. 
28600 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
28610 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
28620 0a 20 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65  .  then the orde
28630 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20  r in which rows 
28640 61 72 65 20 65 78 74 72 61 63 74 65 64 20 69 73  are extracted is
28650 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 28 49 6e   undefined.  (In
28660 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20 69   the current.  i
28670 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
28680 68 65 20 71 75 65 75 65 20 62 65 63 6f 6d 65 73  he queue becomes
28690 20 61 20 46 49 46 4f 20 69 66 20 74 68 65 20 4f   a FIFO if the O
286a0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
286b0 73 20 6f 6d 69 74 74 65 64 2c 0a 20 20 62 75 74  s omitted,.  but
286c0 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 73 68   applications sh
286d0 6f 75 6c 64 20 6e 6f 74 20 64 65 70 65 6e 64 20  ould not depend 
286e0 6f 6e 20 74 68 61 74 20 66 61 63 74 20 73 69 6e  on that fact sin
286f0 63 65 20 69 74 20 6d 69 67 68 74 20 63 68 61 6e  ce it might chan
28700 67 65 2e 29 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c  ge.).</ul>..<tcl
28710 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65  >hd_fragment rce
28720 78 31 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 52 65 63  x1</tcl>.<h4>Rec
28730 75 72 73 69 76 65 20 51 75 65 72 79 20 45 78 61  ursive Query Exa
28740 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54  mples</h4>..<p>T
28750 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65  he following que
28760 72 79 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 69  ry returns all i
28770 6e 74 65 67 65 72 73 20 62 65 74 77 65 65 6e 20  ntegers between 
28780 31 20 61 6e 64 20 31 30 30 30 30 30 30 3a 0a 0a  1 and 1000000:..
28790 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
287a0 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  >.WITH RECURSIVE
287b0 0a 20 20 63 6e 74 28 78 29 20 41 53 20 28 56 41  .  cnt(x) AS (VA
287c0 4c 55 45 53 28 31 29 20 55 4e 49 4f 4e 20 41 4c  LUES(1) UNION AL
287d0 4c 20 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f  L SELECT x+1 FRO
287e0 4d 20 63 6e 74 20 57 48 45 52 45 20 78 3c 31 30  M cnt WHERE x<10
287f0 30 30 30 30 30 29 0a 53 45 4c 45 43 54 20 78 20  00000).SELECT x 
28800 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e  FROM cnt;.</pre>
28810 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
28820 70 3e 43 6f 6e 73 69 64 65 72 20 68 6f 77 20 74  p>Consider how t
28830 68 69 73 20 71 75 65 72 79 20 77 6f 72 6b 73 2e  his query works.
28840 20 20 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65    The initial-se
28850 6c 65 63 74 0a 72 75 6e 73 20 66 69 72 73 74 20  lect.runs first 
28860 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20 73 69  and returns a si
28870 6e 67 6c 65 20 72 6f 77 0a 77 69 74 68 20 61 20  ngle row.with a 
28880 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 22 31  single column "1
28890 22 2e 20 20 54 68 69 73 20 6f 6e 65 20 72 6f 77  ".  This one row
288a0 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65   is added to the
288b0 20 71 75 65 75 65 2e 20 20 49 6e 0a 73 74 65 70   queue.  In.step
288c0 20 32 61 2c 20 74 68 61 74 20 6f 6e 65 20 72 6f   2a, that one ro
288d0 77 20 69 73 20 65 78 74 72 61 63 74 65 64 20 66  w is extracted f
288e0 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20 61 6e  rom the queue an
288f0 64 20 61 64 64 65 64 20 74 6f 20 22 63 6e 74 22  d added to "cnt"
28900 2e 0a 54 68 65 6e 20 74 68 65 20 72 65 63 75 72  ..Then the recur
28910 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20 72  sive-select is r
28920 75 6e 20 69 6e 20 61 63 63 6f 72 64 61 6e 63 65  un in accordance
28930 20 77 69 74 68 20 73 74 65 70 20 32 63 20 67 65   with step 2c ge
28940 6e 65 72 61 74 69 6e 67 0a 61 20 73 69 6e 67 6c  nerating.a singl
28950 65 20 6e 65 77 20 72 6f 77 20 77 69 74 68 20 76  e new row with v
28960 61 6c 75 65 20 22 32 22 20 74 6f 20 61 64 64 20  alue "2" to add 
28970 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 54  to the queue.  T
28980 68 65 20 71 75 65 75 65 20 73 74 69 6c 6c 0a 68  he queue still.h
28990 61 73 20 6f 6e 65 20 72 6f 77 2c 20 73 6f 20 73  as one row, so s
289a0 74 65 70 20 32 20 72 65 70 65 61 74 73 2e 20 20  tep 2 repeats.  
289b0 54 68 65 20 22 32 22 20 72 6f 77 20 69 73 20 65  The "2" row is e
289c0 78 74 72 61 63 74 65 64 20 61 6e 64 20 61 64 64  xtracted and add
289d0 65 64 20 74 6f 20 74 68 65 0a 72 65 63 75 72 73  ed to the.recurs
289e0 69 76 65 20 74 61 62 6c 65 20 62 79 20 73 74 65  ive table by ste
289f0 70 73 20 32 61 20 61 6e 64 20 32 62 2e 20 20 54  ps 2a and 2b.  T
28a00 68 65 6e 20 74 68 65 20 72 6f 77 20 63 6f 6e 74  hen the row cont
28a10 61 69 6e 69 6e 67 20 32 20 69 73 20 75 73 65 64  aining 2 is used
28a20 20 0a 61 73 20 69 66 20 69 74 20 77 65 72 65 20   .as if it were 
28a30 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f 6e  the complete con
28a40 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65 63 75  tent of the recu
28a50 72 73 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20  rsive table and 
28a60 74 68 65 20 0a 72 65 63 75 72 73 69 76 65 2d 73  the .recursive-s
28a70 65 6c 65 63 74 20 69 73 20 72 75 6e 20 61 67 61  elect is run aga
28a80 69 6e 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e  in, resulting in
28a90 20 61 20 72 6f 77 20 77 69 74 68 20 76 61 6c 75   a row with valu
28aa0 65 20 22 33 22 20 62 65 69 6e 67 20 61 64 64 65  e "3" being adde
28ab0 64 0a 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20  d.to the queue. 
28ac0 20 54 68 69 73 20 72 65 70 65 61 74 73 20 39 39   This repeats 99
28ad0 39 39 39 39 20 74 69 6d 65 73 20 75 6e 74 69 6c  9999 times until
28ae0 20 66 69 6e 61 6c 6c 79 20 61 74 20 73 74 65 70   finally at step
28af0 20 32 61 20 74 68 65 0a 6f 6e 6c 79 20 76 61 6c   2a the.only val
28b00 75 65 20 6f 6e 20 74 68 65 20 71 75 65 75 65 20  ue on the queue 
28b10 69 73 20 61 20 72 6f 77 20 63 6f 6e 74 61 69 6e  is a row contain
28b20 69 6e 67 20 31 30 30 30 30 30 30 2e 20 20 54 68  ing 1000000.  Th
28b30 61 74 20 72 6f 77 20 69 73 0a 65 78 74 72 61 63  at row is.extrac
28b40 74 65 64 20 61 6e 64 20 61 64 64 65 64 20 74 6f  ted and added to
28b50 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
28b60 61 62 6c 65 2e 20 20 42 75 74 20 74 68 69 73 20  able.  But this 
28b70 74 69 6d 65 2c 20 74 68 65 0a 57 48 45 52 45 20  time, the.WHERE 
28b80 63 6c 61 75 73 65 20 63 61 75 73 65 73 20 74 68  clause causes th
28b90 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
28ba0 63 74 20 74 6f 20 72 65 74 75 72 6e 20 6e 6f 20  ct to return no 
28bb0 72 6f 77 73 2c 20 73 6f 20 74 68 65 0a 71 75 65  rows, so the.que
28bc0 75 65 20 72 65 6d 61 69 6e 73 20 65 6d 70 74 79  ue remains empty
28bd0 20 61 6e 64 20 74 68 65 20 72 65 63 75 72 73 69   and the recursi
28be0 6f 6e 20 73 74 6f 70 73 2e 0a 0a 3c 70 3e 3c 62  on stops...<p><b
28bf0 3e 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6e 6f  >Optimization no
28c00 74 65 3a 3c 2f 62 3e 0a 49 6e 20 74 68 65 20 64  te:</b>.In the d
28c10 69 73 63 75 73 73 69 6f 6e 20 61 62 6f 76 65 2c  iscussion above,
28c20 20 73 74 61 74 65 6d 65 6e 74 73 20 6c 69 6b 65   statements like
28c30 20 22 69 6e 73 65 72 74 20 74 68 65 20 72 6f 77   "insert the row
28c40 20 69 6e 74 6f 0a 74 68 65 20 72 65 63 75 72 73   into.the recurs
28c50 69 76 65 20 74 61 62 6c 65 22 20 73 68 6f 75 6c  ive table" shoul
28c60 64 20 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 20  d be understood 
28c70 63 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 6e 6f  conceptually, no
28c80 74 20 6c 69 74 65 72 61 6c 6c 79 2e 0a 49 74 20  t literally..It 
28c90 73 6f 75 6e 64 73 20 61 73 20 69 66 20 53 51 4c  sounds as if SQL
28ca0 69 74 65 20 69 73 20 61 63 63 75 6d 75 6c 61 74  ite is accumulat
28cb0 69 6e 67 20 61 20 68 75 67 65 20 74 61 62 6c 65  ing a huge table
28cc0 0a 63 6f 6e 74 61 69 6e 69 6e 67 20 6f 6e 65 20  .containing one 
28cd0 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 2c 20 74 68  million rows, th
28ce0 65 6e 20 67 6f 69 6e 67 20 62 61 63 6b 20 61 6e  en going back an
28cf0 64 20 73 63 61 6e 6e 69 6e 67 20 74 68 61 74 20  d scanning that 
28d00 74 61 62 6c 65 0a 66 72 6f 6d 20 74 6f 70 20 74  table.from top t
28d10 6f 20 62 6f 74 74 6f 6d 20 74 6f 20 67 65 6e 65  o bottom to gene
28d20 72 61 74 65 20 74 68 65 20 72 65 73 75 6c 74 2e  rate the result.
28d30 20 20 57 68 61 74 20 72 65 61 6c 6c 79 20 68 61    What really ha
28d40 70 70 65 6e 73 0a 69 73 20 74 68 61 74 20 74 68  ppens.is that th
28d50 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
28d60 72 20 73 65 65 73 20 74 68 61 74 20 76 61 6c 75  r sees that valu
28d70 65 73 20 69 6e 20 74 68 65 0a 22 63 6e 74 22 20  es in the."cnt" 
28d80 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 20  recursive table 
28d90 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 6f 6e  are only used on
28da0 63 65 2e 20 20 53 6f 20 61 73 20 65 61 63 68 20  ce.  So as each 
28db0 72 6f 77 20 69 73 20 61 64 64 65 64 20 74 6f 0a  row is added to.
28dc0 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61  the recursive ta
28dd0 62 6c 65 2c 20 74 68 61 74 20 72 6f 77 20 69 73  ble, that row is
28de0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 72 65 74   immediately ret
28df0 75 72 6e 65 64 20 61 73 20 61 20 72 65 73 75 6c  urned as a resul
28e00 74 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a 53 45  t of the main.SE
28e10 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61  LECT statement a
28e20 6e 64 20 74 68 65 6e 20 64 69 73 63 61 72 64 65  nd then discarde
28e30 64 2e 20 20 53 51 4c 69 74 65 20 64 6f 65 73 20  d.  SQLite does 
28e40 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 63 63  <em>not</em> acc
28e50 75 6d 75 6c 61 74 65 0a 61 20 74 65 6d 70 6f 72  umulate.a tempor
28e60 61 72 79 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  ary table contai
28e70 6e 69 6e 67 20 61 20 6d 69 6c 6c 69 6f 6e 20 72  ning a million r
28e80 6f 77 73 2e 20 20 56 65 72 79 20 6c 69 74 74 6c  ows.  Very littl
28e90 65 20 6d 65 6d 6f 72 79 20 69 73 0a 6e 65 65 64  e memory is.need
28ea0 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20 61 62  ed to run the ab
28eb0 6f 76 65 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f  ove example.  Ho
28ec0 77 65 76 65 72 2c 20 69 66 20 74 68 65 20 65 78  wever, if the ex
28ed0 61 6d 70 6c 65 20 68 61 64 20 75 73 65 64 0a 55  ample had used.U
28ee0 4e 49 4f 4e 20 69 6e 73 74 65 61 64 20 6f 66 20  NION instead of 
28ef0 55 4e 49 4f 4e 20 41 4c 4c 2c 20 74 68 65 6e 20  UNION ALL, then 
28f00 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 68 61 76  SQLite would hav
28f10 65 20 68 61 64 20 74 6f 20 6b 65 65 70 20 61 72  e had to keep ar
28f20 6f 75 6e 64 0a 61 6c 6c 20 70 72 65 76 69 6f 75  ound.all previou
28f30 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 63 6f  sly generated co
28f40 6e 74 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74  ntent in order t
28f50 6f 20 63 68 65 63 6b 20 66 6f 72 20 64 75 70 6c  o check for dupl
28f60 69 63 61 74 65 73 2e 0a 46 6f 72 20 74 68 69 73  icates..For this
28f70 20 72 65 61 73 6f 6e 2c 20 70 72 6f 67 72 61 6d   reason, program
28f80 6d 65 72 73 20 73 68 6f 75 6c 64 20 73 74 72 69  mers should stri
28f90 76 65 20 74 6f 20 75 73 65 20 55 4e 49 4f 4e 20  ve to use UNION 
28fa0 41 4c 4c 20 69 6e 73 74 65 61 64 0a 6f 66 20 55  ALL instead.of U
28fb0 4e 49 4f 4e 20 77 68 65 6e 20 66 65 61 73 69 62  NION when feasib
28fc0 6c 65 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20  le...<p>Here is 
28fd0 61 20 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74  a variation on t
28fe0 68 65 20 70 72 65 76 69 6f 75 73 20 65 78 61 6d  he previous exam
28ff0 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ple:..<blockquot
29000 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
29010 55 52 53 49 56 45 0a 20 20 63 6e 74 28 78 29 20  URSIVE.  cnt(x) 
29020 41 53 20 28 0a 20 20 20 20 20 53 45 4c 45 43 54  AS (.     SELECT
29030 20 31 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c   1.     UNION AL
29040 4c 0a 20 20 20 20 20 53 45 4c 45 43 54 20 78 2b  L.     SELECT x+
29050 31 20 46 52 4f 4d 20 63 6e 74 0a 20 20 20 20 20  1 FROM cnt.     
29060 20 4c 49 4d 49 54 20 31 30 30 30 30 30 30 0a 20   LIMIT 1000000. 
29070 20 29 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d   ).SELECT x FROM
29080 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c   cnt;.</pre></bl
29090 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
290a0 65 72 65 20 61 72 65 20 74 77 6f 20 64 69 66 66  ere are two diff
290b0 65 72 65 6e 63 65 73 20 69 6e 20 74 68 69 73 20  erences in this 
290c0 76 61 72 69 61 74 69 6f 6e 2e 20 20 54 68 65 20  variation.  The 
290d0 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 69  initial-select i
290e0 73 0a 22 53 45 4c 45 43 54 20 31 22 20 69 6e 73  s."SELECT 1" ins
290f0 74 65 61 64 20 6f 66 20 22 56 41 4c 55 45 53 28  tead of "VALUES(
29100 31 29 22 2e 20 20 42 75 74 20 74 68 6f 73 65 20  1)".  But those 
29110 61 72 65 20 6a 75 73 74 20 64 69 66 66 65 72 65  are just differe
29120 6e 74 0a 73 79 6e 74 61 78 65 73 20 66 6f 72 20  nt.syntaxes for 
29130 73 61 79 69 6e 67 20 65 78 61 63 74 6c 79 20 74  saying exactly t
29140 68 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20  he same thing.  
29150 54 68 65 20 6f 74 68 65 72 20 63 68 61 6e 67 65  The other change
29160 20 69 73 20 74 68 61 74 20 74 68 65 0a 72 65 63   is that the.rec
29170 75 72 73 69 6f 6e 20 69 73 20 73 74 6f 70 70 65  ursion is stoppe
29180 64 20 62 79 20 61 20 4c 49 4d 49 54 20 72 61 74  d by a LIMIT rat
29190 68 65 72 20 74 68 61 6e 20 61 20 57 48 45 52 45  her than a WHERE
291a0 20 63 6c 61 75 73 65 2e 20 20 54 68 65 20 75 73   clause.  The us
291b0 65 20 6f 66 0a 4c 49 4d 49 54 20 6d 65 61 6e 73  e of.LIMIT means
291c0 20 74 68 61 74 20 77 68 65 6e 20 74 68 65 20 6f   that when the o
291d0 6e 65 2d 6d 69 6c 6c 69 6f 6e 74 68 20 72 6f 77  ne-millionth row
291e0 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65   is added to the
291f0 20 22 63 6e 74 22 20 74 61 62 6c 65 0a 28 61 6e   "cnt" table.(an
29200 64 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  d returned by th
29210 65 20 6d 61 69 6e 20 53 45 4c 45 43 54 2c 20 74  e main SELECT, t
29220 68 61 6e 6b 73 20 74 6f 20 74 68 65 20 71 75 65  hanks to the que
29230 72 79 20 6f 70 74 69 6d 69 7a 65 72 29 0a 74 68  ry optimizer).th
29240 65 6e 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  en the recursion
29250 20 73 74 6f 70 73 20 69 6d 6d 65 64 69 61 74 65   stops immediate
29260 6c 79 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  ly regardless of
29270 20 68 6f 77 20 6d 61 6e 79 20 72 6f 77 73 20 6d   how many rows m
29280 69 67 68 74 20 62 65 0a 6c 65 66 74 20 69 6e 20  ight be.left in 
29290 74 68 65 20 71 75 65 75 65 2e 20 20 4f 6e 20 6d  the queue.  On m
292a0 6f 72 65 20 63 6f 6d 70 6c 65 78 20 71 75 65 72  ore complex quer
292b0 69 65 73 2c 20 69 74 20 63 61 6e 20 73 6f 6d 65  ies, it can some
292c0 74 69 6d 65 73 20 62 65 0a 64 69 66 66 69 63 75  times be.difficu
292d0 6c 74 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61  lt to ensure tha
292e0 74 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  t the WHERE clau
292f0 73 65 20 77 69 6c 6c 20 65 76 65 6e 74 75 61 6c  se will eventual
29300 6c 79 20 63 61 75 73 65 20 74 68 65 0a 71 75 65  ly cause the.que
29310 75 65 20 74 6f 20 64 72 61 69 6e 20 61 6e 64 20  ue to drain and 
29320 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 74 6f  the recursion to
29330 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75 74   terminate.  But
29340 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
29350 65 20 77 69 6c 6c 0a 61 6c 77 61 79 73 20 73 74  e will.always st
29360 6f 70 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  op the recursion
29370 2e 20 20 53 6f 20 69 74 20 69 73 20 67 6f 6f 64  .  So it is good
29380 20 70 72 61 63 74 69 63 65 20 74 6f 20 61 6c 77   practice to alw
29390 61 79 73 20 69 6e 63 6c 75 64 65 20 61 0a 4c 49  ays include a.LI
293a0 4d 49 54 20 63 6c 61 75 73 65 20 61 73 20 61 20  MIT clause as a 
293b0 73 61 66 65 74 79 20 69 66 20 61 6e 20 75 70 70  safety if an upp
293c0 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20  er bound on the 
293d0 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65 63 75  size of the recu
293e0 72 73 69 6f 6e 20 0a 69 73 20 6b 6e 6f 77 6e 2e  rsion .is known.
293f0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
29400 6e 74 20 72 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c  nt rcex2</tcl>.<
29410 68 34 3e 48 69 65 72 61 72 63 68 69 63 61 6c 20  h4>Hierarchical 
29420 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f  Query Examples</
29430 68 34 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72  h4>..<p>Consider
29440 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 64 65   a table that de
29450 73 63 72 69 62 65 73 20 74 68 65 20 6d 65 6d 62  scribes the memb
29460 65 72 73 20 6f 66 20 61 6e 20 6f 72 67 61 6e 69  ers of an organi
29470 7a 61 74 69 6f 6e 20 61 73 0a 77 65 6c 6c 20 61  zation as.well a
29480 73 20 74 68 65 20 63 68 61 69 6e 2d 6f 66 2d 63  s the chain-of-c
29490 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e 20 74 68  ommand within th
294a0 61 74 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a  at organization:
294b0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
294c0 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
294d0 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54 45 58   org(.  name TEX
294e0 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20  T PRIMARY KEY,. 
294f0 20 62 6f 73 73 20 54 45 58 54 20 52 45 46 45 52   boss TEXT REFER
29500 45 4e 43 45 53 20 6f 72 67 2c 0a 20 20 68 65 69  ENCES org,.  hei
29510 67 68 74 20 49 4e 54 2c 0a 20 20 2d 2d 20 6f 74  ght INT,.  -- ot
29520 68 65 72 20 63 6f 6e 74 65 6e 74 20 6f 6d 69 74  her content omit
29530 74 65 64 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ted.);.</pre></b
29540 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45  lockquote>..<p>E
29550 76 65 72 79 20 6d 65 6d 62 65 72 20 69 6e 20 74  very member in t
29560 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20  he organization 
29570 68 61 73 20 61 20 6e 61 6d 65 2c 20 61 6e 64 20  has a name, and 
29580 6d 6f 73 74 20 6d 65 6d 62 65 72 73 20 68 61 76  most members hav
29590 65 0a 61 20 73 69 6e 67 6c 65 20 62 6f 73 73 2e  e.a single boss.
295a0 20 20 28 54 68 65 20 68 65 61 64 20 6f 66 20 74    (The head of t
295b0 68 65 20 77 68 6f 6c 65 20 6f 72 67 61 6e 69 7a  he whole organiz
295c0 61 74 69 6f 6e 20 68 61 73 20 61 20 4e 55 4c 4c  ation has a NULL
295d0 0a 22 62 6f 73 73 22 20 66 69 65 6c 64 2e 29 20  ."boss" field.) 
295e0 54 68 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20  The rows of the 
295f0 22 6f 72 67 22 20 74 61 62 6c 65 20 66 6f 72 6d  "org" table form
29600 20 61 20 74 72 65 65 2e 0a 0a 3c 70 3e 48 65 72   a tree...<p>Her
29610 65 20 69 73 20 61 20 71 75 65 72 79 20 74 68 61  e is a query tha
29620 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 61  t computes the a
29630 76 65 72 61 67 65 20 68 65 69 67 68 74 20 6f 76  verage height ov
29640 65 72 20 65 76 65 72 79 6f 6e 65 0a 69 6e 20 41  er everyone.in A
29650 6c 69 63 65 27 73 20 6f 72 67 61 6e 69 7a 61 74  lice's organizat
29660 69 6f 6e 2c 20 69 6e 63 6c 75 64 69 6e 67 20 41  ion, including A
29670 6c 69 63 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  lice:..<blockquo
29680 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
29690 43 55 52 53 49 56 45 0a 20 20 77 6f 72 6b 73 5f  CURSIVE.  works_
296a0 66 6f 72 5f 61 6c 69 63 65 28 6e 29 20 41 53 20  for_alice(n) AS 
296b0 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c  (.    VALUES('Al
296c0 69 63 65 27 29 0a 20 20 20 20 55 4e 49 4f 4e 0a  ice').    UNION.
296d0 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20      SELECT name 
296e0 46 52 4f 4d 20 6f 72 67 2c 20 77 6f 72 6b 73 5f  FROM org, works_
296f0 66 6f 72 5f 61 6c 69 63 65 0a 20 20 20 20 20 57  for_alice.     W
29700 48 45 52 45 20 6f 72 67 2e 62 6f 73 73 3d 77 6f  HERE org.boss=wo
29710 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 2e 6e 0a  rks_for_alice.n.
29720 20 20 29 0a 53 45 4c 45 43 54 20 61 76 67 28 68    ).SELECT avg(h
29730 65 69 67 68 74 29 20 46 52 4f 4d 20 6f 72 67 0a  eight) FROM org.
29740 20 57 48 45 52 45 20 6f 72 67 2e 6e 61 6d 65 20   WHERE org.name 
29750 49 4e 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69  IN works_for_ali
29760 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  ce;.</pre></bloc
29770 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
29780 6e 65 78 74 20 65 78 61 6d 70 6c 65 20 75 73 65  next example use
29790 73 20 74 77 6f 20 0a 63 6f 6d 6d 6f 6e 20 74 61  s two .common ta
297a0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ble expressions 
297b0 69 6e 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  in a single WITH
297c0 20 63 6c 61 75 73 65 2e 20 20 0a 54 68 65 20 66   clause.  .The f
297d0 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 72  ollowing table r
297e0 65 63 6f 72 64 73 20 61 20 66 61 6d 69 6c 79 20  ecords a family 
297f0 74 72 65 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  tree:..<blockquo
29800 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
29810 54 41 42 4c 45 20 66 61 6d 69 6c 79 28 0a 20 20  TABLE family(.  
29820 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52  name TEXT PRIMAR
29830 59 20 4b 45 59 2c 0a 20 20 6d 6f 6d 20 54 45 58  Y KEY,.  mom TEX
29840 54 20 52 45 46 45 52 45 4e 43 45 53 20 66 61 6d  T REFERENCES fam
29850 69 6c 79 2c 0a 20 20 64 61 64 20 54 45 58 54 20  ily,.  dad TEXT 
29860 52 45 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c  REFERENCES famil
29870 79 2c 0a 20 20 62 6f 72 6e 20 44 41 54 45 54 49  y,.  born DATETI
29880 4d 45 2c 0a 20 20 64 69 65 64 20 44 41 54 45 54  ME,.  died DATET
29890 49 4d 45 2c 20 2d 2d 20 4e 55 4c 4c 20 69 66 20  IME, -- NULL if 
298a0 73 74 69 6c 6c 20 61 6c 69 76 65 0a 20 20 2d 2d  still alive.  --
298b0 20 6f 74 68 65 72 20 63 6f 6e 74 65 6e 74 0a 29   other content.)
298c0 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
298d0 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 66  uote>..<p>The "f
298e0 61 6d 69 6c 79 22 20 74 61 62 6c 65 20 69 73 20  amily" table is 
298f0 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 65  similar to the e
29900 61 72 6c 69 65 72 20 22 6f 72 67 22 20 74 61 62  arlier "org" tab
29910 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 20 0a  le except that .
29920 6e 6f 77 20 74 68 65 72 65 20 61 72 65 20 74 77  now there are tw
29930 6f 20 70 61 72 65 6e 74 73 20 74 6f 20 65 61 63  o parents to eac
29940 68 20 6d 65 6d 62 65 72 2e 0a 57 65 20 77 61 6e  h member..We wan
29950 74 20 74 6f 20 6b 6e 6f 77 20 61 6c 6c 20 6c 69  t to know all li
29960 76 69 6e 67 20 61 6e 63 65 73 74 6f 72 73 20 6f  ving ancestors o
29970 66 20 41 6c 69 63 65 2c 20 66 72 6f 6d 20 6f 6c  f Alice, from ol
29980 64 65 73 74 20 74 6f 20 79 6f 75 6e 67 65 73 74  dest to youngest
29990 2e 0a 41 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f  ..An ordinary co
299a0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
299b0 73 73 69 6f 6e 2c 20 22 70 61 72 65 6e 74 5f 6f  ssion, "parent_o
299c0 66 22 2c 20 69 73 20 64 65 66 69 6e 65 64 20 66  f", is defined f
299d0 69 72 73 74 2e 20 20 54 68 61 74 0a 6f 72 64 69  irst.  That.ordi
299e0 6e 61 72 79 20 43 54 45 20 69 73 20 61 20 76 69  nary CTE is a vi
299f0 65 77 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  ew that can be u
29a00 73 65 64 20 74 6f 20 66 69 6e 64 20 61 6c 6c 20  sed to find all 
29a10 70 61 72 65 6e 74 73 20 6f 66 20 61 6e 79 0a 69  parents of any.i
29a20 6e 64 69 76 69 64 75 61 6c 2e 20 20 54 68 61 74  ndividual.  That
29a30 20 6f 72 64 69 6e 61 72 79 20 43 54 45 20 69 73   ordinary CTE is
29a40 20 74 68 65 6e 20 75 73 65 64 20 69 6e 20 74 68   then used in th
29a50 65 20 22 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61  e "ancestor_of_a
29a60 6c 69 63 65 22 0a 72 65 63 75 72 73 69 76 65 20  lice".recursive 
29a70 43 54 45 2e 20 20 54 68 65 20 72 65 63 75 72 73  CTE.  The recurs
29a80 69 76 65 20 43 54 45 20 69 73 20 74 68 65 6e 20  ive CTE is then 
29a90 75 73 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61  used in the fina
29aa0 6c 20 71 75 65 72 79 3a 0a 0a 3c 62 6c 6f 63 6b  l query:..<block
29ab0 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
29ac0 20 52 45 43 55 52 53 49 56 45 0a 20 20 70 61 72   RECURSIVE.  par
29ad0 65 6e 74 5f 6f 66 28 6e 61 6d 65 2c 20 70 61 72  ent_of(name, par
29ae0 65 6e 74 29 20 41 53 0a 20 20 20 20 28 53 45 4c  ent) AS.    (SEL
29af0 45 43 54 20 6e 61 6d 65 2c 20 6d 6f 6d 20 46 52  ECT name, mom FR
29b00 4f 4d 20 66 61 6d 69 6c 79 20 55 4e 49 4f 4e 20  OM family UNION 
29b10 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 64 61 64  SELECT name, dad
29b20 20 46 52 4f 4d 20 66 61 6d 69 6c 79 29 2c 0a 20   FROM family),. 
29b30 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69   ancestor_of_ali
29b40 63 65 28 6e 61 6d 65 29 20 41 53 0a 20 20 20 20  ce(name) AS.    
29b50 28 53 45 4c 45 43 54 20 70 61 72 65 6e 74 20 46  (SELECT parent F
29b60 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20 57 48  ROM parent_of WH
29b70 45 52 45 20 6e 61 6d 65 3d 27 41 6c 69 63 65 27  ERE name='Alice'
29b80 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a  .     UNION ALL.
29b90 20 20 20 20 20 53 45 4c 45 43 54 20 70 61 72 65       SELECT pare
29ba0 6e 74 20 46 52 4f 4d 20 70 61 72 65 6e 74 5f 6f  nt FROM parent_o
29bb0 66 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72 5f  f JOIN ancestor_
29bc0 6f 66 5f 61 6c 69 63 65 20 55 53 49 4e 47 28 6e  of_alice USING(n
29bd0 61 6d 65 29 29 0a 53 45 4c 45 43 54 20 66 61 6d  ame)).SELECT fam
29be0 69 6c 79 2e 6e 61 6d 65 20 46 52 4f 4d 20 61 6e  ily.name FROM an
29bf0 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2c  cestor_of_alice,
29c00 20 66 61 6d 69 6c 79 0a 20 57 48 45 52 45 20 61   family. WHERE a
29c10 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65  ncestor_of_alice
29c20 2e 6e 61 6d 65 3d 66 61 6d 69 6c 79 2e 6e 61 6d  .name=family.nam
29c30 65 0a 20 20 20 41 4e 44 20 64 69 65 64 20 49 53  e.   AND died IS
29c40 20 4e 55 4c 4c 0a 20 4f 52 44 45 52 20 42 59 20   NULL. ORDER BY 
29c50 62 6f 72 6e 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  born;.</pre></bl
29c60 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e  ockquote>..<tcl>
29c70 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78  hd_fragment rcex
29c80 33 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 51 75 65 72  3</tcl>.<h4>Quer
29c90 69 65 73 20 41 67 61 69 6e 73 74 20 41 20 47 72  ies Against A Gr
29ca0 61 70 68 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20 76  aph</h4>..<p>A v
29cb0 65 72 73 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20 73  ersion control s
29cc0 79 73 74 65 6d 20 28 56 43 53 29 20 77 69 6c 6c  ystem (VCS) will
29cd0 20 74 79 70 69 63 61 6c 6c 79 20 73 74 6f 72 65   typically store
29ce0 20 74 68 65 20 65 76 6f 6c 76 69 6e 67 0a 76 65   the evolving.ve
29cf0 72 73 69 6f 6e 73 20 6f 66 20 61 20 70 72 6f 6a  rsions of a proj
29d00 65 63 74 20 61 73 20 61 20 64 69 72 65 63 74 65  ect as a directe
29d10 64 20 61 63 79 63 6c 69 63 20 67 72 61 70 68 20  d acyclic graph 
29d20 28 44 41 47 29 2e 20 20 43 61 6c 6c 20 65 61 63  (DAG).  Call eac
29d30 68 0a 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  h.version of the
29d40 20 70 72 6f 6a 65 63 74 20 61 20 22 63 68 65 63   project a "chec
29d50 6b 69 6e 22 2e 20 20 41 20 73 69 6e 67 6c 65 0a  kin".  A single.
29d60 63 68 65 63 6b 69 6e 20 63 61 6e 20 68 61 76 65  checkin can have
29d70 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61   zero or more pa
29d80 72 65 6e 74 73 2e 20 20 4d 6f 73 74 20 63 68 65  rents.  Most che
29d90 63 6b 69 6e 73 20 28 65 78 63 65 70 74 20 74 68  ckins (except th
29da0 65 0a 66 69 72 73 74 29 20 68 61 76 65 20 61 20  e.first) have a 
29db0 73 69 6e 67 6c 65 20 70 61 72 65 6e 74 2c 20 62  single parent, b
29dc0 75 74 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f  ut in the case o
29dd0 66 20 61 20 6d 65 72 67 65 2c 20 61 20 63 68 65  f a merge, a che
29de0 63 6b 69 6e 0a 6d 69 67 68 74 20 68 61 76 65 20  ckin.might have 
29df0 74 77 6f 20 6f 72 20 74 68 72 65 65 20 6f 72 20  two or three or 
29e00 6d 6f 72 65 20 70 61 72 65 6e 74 73 2e 20 20 41  more parents.  A
29e10 20 73 63 68 65 6d 61 20 74 6f 20 6b 65 65 70 20   schema to keep 
29e20 74 72 61 63 6b 20 6f 66 0a 63 68 65 63 6b 69 6e  track of.checkin
29e30 73 20 61 6e 64 20 74 68 65 20 6f 72 64 65 72 20  s and the order 
29e40 69 6e 20 77 68 69 63 68 20 74 68 65 79 20 6f 63  in which they oc
29e50 63 75 72 20 6d 69 67 68 74 20 6c 6f 6f 6b 20 73  cur might look s
29e60 6f 6d 65 74 68 69 6e 67 20 6c 69 6b 65 0a 74 68  omething like.th
29e70 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  is:..<blockquote
29e80 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
29e90 42 4c 45 20 63 68 65 63 6b 69 6e 28 0a 20 20 69  BLE checkin(.  i
29ea0 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  d INTEGER PRIMAR
29eb0 59 20 4b 45 59 2c 0a 20 20 6d 74 69 6d 65 20 49  Y KEY,.  mtime I
29ec0 4e 54 45 47 45 52 20 2d 2d 20 74 69 6d 65 73 74  NTEGER -- timest
29ed0 61 6d 70 20 77 68 65 6e 20 74 68 69 73 20 63 68  amp when this ch
29ee0 65 63 6b 69 6e 20 6f 63 63 75 72 72 65 64 0a 29  eckin occurred.)
29ef0 3b 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 64  ;.CREATE TABLE d
29f00 65 72 69 76 65 64 66 72 6f 6d 28 0a 20 20 78 66  erivedfrom(.  xf
29f10 72 6f 6d 20 49 4e 54 45 47 45 52 20 4e 4f 54 20  rom INTEGER NOT 
29f20 4e 55 4c 4c 20 52 45 46 45 52 45 4e 43 45 53 20  NULL REFERENCES 
29f30 63 68 65 63 6b 69 6e 2c 20 2d 2d 20 70 61 72 65  checkin, -- pare
29f40 6e 74 20 63 68 65 63 6b 69 6e 0a 20 20 78 74 6f  nt checkin.  xto
29f50 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c   INTEGER NOT NUL
29f60 4c 20 52 45 46 45 52 45 4e 43 45 53 20 63 68 65  L REFERENCES che
29f70 63 6b 69 6e 2c 20 20 20 2d 2d 20 64 65 72 69 76  ckin,   -- deriv
29f80 65 64 20 63 68 65 63 6b 69 6e 0a 20 20 50 52 49  ed checkin.  PRI
29f90 4d 41 52 59 20 4b 45 59 28 78 66 72 6f 6d 2c 78  MARY KEY(xfrom,x
29fa0 74 6f 29 0a 29 3b 0a 43 52 45 41 54 45 20 49 4e  to).);.CREATE IN
29fb0 44 45 58 20 64 65 72 69 76 65 64 66 72 6f 6d 5f  DEX derivedfrom_
29fc0 62 61 63 6b 20 4f 4e 20 64 65 72 69 76 65 64 66  back ON derivedf
29fd0 72 6f 6d 28 78 74 6f 2c 78 66 72 6f 6d 29 3b 0a  rom(xto,xfrom);.
29fe0 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
29ff0 74 65 3e 0a 0a 3c 70 3e 54 68 69 73 20 67 72 61  te>..<p>This gra
2a000 70 68 20 69 73 20 61 63 79 63 6c 69 63 2e 20 20  ph is acyclic.  
2a010 41 6e 64 20 77 65 20 61 73 73 75 6d 65 20 74 68  And we assume th
2a020 61 74 20 74 68 65 20 6d 74 69 6d 65 20 6f 66 20  at the mtime of 
2a030 65 76 65 72 79 0a 63 68 69 6c 64 20 63 68 65 63  every.child chec
2a040 6b 69 6e 20 69 73 20 6e 6f 20 6c 65 73 73 20 74  kin is no less t
2a050 68 61 6e 20 74 68 65 20 6d 74 69 6d 65 20 6f 66  han the mtime of
2a060 20 61 6c 6c 20 69 74 73 20 70 61 72 65 6e 74 73   all its parents
2a070 2e 20 20 42 75 74 0a 75 6e 6c 69 6b 65 20 74 68  .  But.unlike th
2a080 65 20 65 61 72 6c 69 65 72 20 65 78 61 6d 70 6c  e earlier exampl
2a090 65 73 2c 20 74 68 69 73 20 67 72 61 70 68 20 6d  es, this graph m
2a0a0 69 67 68 74 20 68 61 76 65 20 6d 75 6c 74 69 70  ight have multip
2a0b0 6c 65 20 70 61 74 68 73 20 6f 66 0a 64 69 66 66  le paths of.diff
2a0c0 65 72 69 6e 67 20 6c 65 6e 67 74 68 73 20 62 65  ering lengths be
2a0d0 74 77 65 65 6e 20 61 6e 79 20 74 77 6f 20 63 68  tween any two ch
2a0e0 65 63 6b 69 6e 73 2e 0a 0a 3c 70 3e 57 65 20 77  eckins...<p>We w
2a0f0 61 6e 74 20 74 6f 20 6b 6e 6f 77 20 74 68 65 20  ant to know the 
2a100 74 77 65 6e 74 79 20 6d 6f 73 74 20 72 65 63 65  twenty most rece
2a110 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 69 6e 20  nt ancestors in 
2a120 74 69 6d 65 20 28 6f 75 74 20 6f 66 0a 74 68 65  time (out of.the
2a130 20 74 68 6f 75 73 61 6e 64 73 20 61 6e 64 20 74   thousands and t
2a140 68 6f 75 73 61 6e 64 73 20 6f 66 20 61 6e 63 65  housands of ance
2a150 73 74 6f 72 73 20 69 6e 20 74 68 65 20 77 68 6f  stors in the who
2a160 6c 65 20 44 41 47 29 20 66 6f 72 0a 63 68 65 63  le DAG) for.chec
2a170 6b 69 6e 20 22 40 42 41 53 45 4c 49 4e 45 22 2e  kin "@BASELINE".
2a180 20 20 28 41 20 71 75 65 72 79 20 73 69 6d 69 6c    (A query simil
2a190 61 72 20 74 6f 20 74 68 69 73 20 69 73 20 75 73  ar to this is us
2a1a0 65 64 0a 62 79 20 74 68 65 20 3c 61 20 68 72 65  ed.by the <a hre
2a1b0 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 66 6f  f="http://www.fo
2a1c0 73 73 69 6c 2d 73 63 6d 2e 6f 72 67 2f 22 3e 46  ssil-scm.org/">F
2a1d0 6f 73 73 69 6c 3c 2f 61 3e 20 56 43 53 20 74 6f  ossil</a> VCS to
2a1e0 0a 73 68 6f 77 20 74 68 65 20 4e 20 6d 6f 73 74  .show the N most
2a1f0 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f 72   recent ancestor
2a200 73 20 6f 66 20 61 20 63 68 65 63 6b 2e 20 20 46  s of a check.  F
2a210 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 3c 61 20 68  or example:.<a h
2a220 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e  ref="http://www.
2a230 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74  sqlite.org/src/t
2a240 69 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26  imeline?p=trunk&
2a250 6e 3d 33 30 22 3e 68 74 74 70 3a 2f 2f 77 77 77  n=30">http://www
2a260 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f  .sqlite.org/src/
2a270 74 69 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b  timeline?p=trunk
2a280 26 6e 3d 33 30 3c 2f 61 3e 2e 29 0a 0a 3c 62 6c  &n=30</a>.)..<bl
2a290 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
2a2a0 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
2a2b0 61 6e 63 65 73 74 6f 72 28 69 64 2c 6d 74 69 6d  ancestor(id,mtim
2a2c0 65 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45  e) AS (.    SELE
2a2d0 43 54 20 69 64 2c 20 6d 74 69 6d 65 20 46 52 4f  CT id, mtime FRO
2a2e0 4d 20 63 68 65 63 6b 69 6e 20 57 48 45 52 45 20  M checkin WHERE 
2a2f0 69 64 3d 40 42 41 53 45 4c 49 4e 45 0a 20 20 20  id=@BASELINE.   
2a300 20 55 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43   UNION.    SELEC
2a310 54 20 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 66  T derivedfrom.xf
2a320 72 6f 6d 2c 20 63 68 65 63 6b 69 6e 2e 6d 74 69  rom, checkin.mti
2a330 6d 65 0a 20 20 20 20 20 20 46 52 4f 4d 20 61 6e  me.      FROM an
2a340 63 65 73 74 6f 72 2c 20 64 65 72 69 76 65 64 66  cestor, derivedf
2a350 72 6f 6d 2c 20 63 68 65 63 6b 69 6e 0a 20 20 20  rom, checkin.   
2a360 20 20 57 48 45 52 45 20 61 6e 63 65 73 74 6f 72    WHERE ancestor
2a370 2e 69 64 3d 64 65 72 69 76 65 64 66 72 6f 6d 2e  .id=derivedfrom.
2a380 78 74 6f 0a 20 20 20 20 20 20 20 41 4e 44 20 63  xto.       AND c
2a390 68 65 63 6b 69 6e 2e 69 64 3d 64 65 72 69 76 65  heckin.id=derive
2a3a0 64 66 72 6f 6d 2e 78 66 72 6f 6d 0a 20 20 20 20  dfrom.xfrom.    
2a3b0 20 4f 52 44 45 52 20 42 59 20 63 68 65 63 6b 69   ORDER BY checki
2a3c0 6e 2e 6d 74 69 6d 65 20 44 45 53 43 0a 20 20 20  n.mtime DESC.   
2a3d0 20 20 4c 49 4d 49 54 20 32 30 0a 20 20 29 0a 53    LIMIT 20.  ).S
2a3e0 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63 68 65  ELECT * FROM che
2a3f0 63 6b 69 6e 20 4a 4f 49 4e 20 61 6e 63 65 73 74  ckin JOIN ancest
2a400 6f 72 20 55 53 49 4e 47 28 69 64 29 3b 0a 3c 2f  or USING(id);.</
2a410 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
2a420 3e 0a 0a 3c 70 3e 0a 54 68 65 20 22 4f 52 44 45  >..<p>.The "ORDE
2a430 52 20 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74 69  R BY checkin.mti
2a440 6d 65 20 44 45 53 43 22 20 74 65 72 6d 20 69 6e  me DESC" term in
2a450 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73   the recursive-s
2a460 65 6c 65 63 74 20 6d 61 6b 65 73 0a 74 68 65 20  elect makes.the 
2a470 71 75 65 72 79 20 72 75 6e 20 6d 75 63 68 20 66  query run much f
2a480 61 73 74 65 72 20 62 79 20 70 72 65 76 65 6e 74  aster by prevent
2a490 69 6e 67 20 69 74 20 66 72 6f 6d 20 66 6f 6c 6c  ing it from foll
2a4a0 6f 77 69 6e 67 0a 62 72 61 6e 63 68 65 73 20 74  owing.branches t
2a4b0 68 61 74 20 6d 65 72 67 65 20 63 68 65 63 6b 69  hat merge checki
2a4c0 6e 73 0a 66 72 6f 6d 20 6c 6f 6e 67 20 61 67 6f  ns.from long ago
2a4d0 2e 20 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  .  The ORDER BY 
2a4e0 66 6f 72 63 65 73 20 74 68 65 20 72 65 63 75 72  forces the recur
2a4f0 73 69 76 65 2d 73 65 6c 65 63 74 20 74 6f 20 66  sive-select to f
2a500 6f 63 75 73 0a 6f 6e 20 74 68 65 20 6d 6f 73 74  ocus.on the most
2a510 20 72 65 63 65 6e 74 20 63 68 65 63 6b 69 6e 73   recent checkins
2a520 2c 20 74 68 65 20 6f 6e 65 73 20 77 65 20 77 61  , the ones we wa
2a530 6e 74 2e 20 20 57 69 74 68 6f 75 74 20 74 68 65  nt.  Without the
2a540 20 4f 52 44 45 52 20 42 59 0a 6f 6e 20 74 68 65   ORDER BY.on the
2a550 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
2a560 74 2c 20 6f 6e 65 20 77 6f 75 6c 64 20 62 65 20  t, one would be 
2a570 66 6f 72 63 65 64 20 74 6f 20 63 6f 6d 70 75 74  forced to comput
2a580 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 73  e the complete s
2a590 65 74 20 6f 66 0a 74 68 6f 75 73 61 6e 64 73 20  et of.thousands 
2a5a0 6f 66 20 61 6e 63 65 73 74 6f 72 73 2c 20 73 6f  of ancestors, so
2a5b0 72 74 20 74 68 65 6d 20 61 6c 6c 20 62 79 20 6d  rt them all by m
2a5c0 74 69 6d 65 2c 20 74 68 65 6e 20 74 61 6b 65 20  time, then take 
2a5d0 74 68 65 20 74 6f 70 20 74 77 65 6e 74 79 2e 0a  the top twenty..
2a5e0 54 68 65 20 4f 52 44 45 52 20 42 59 20 65 73 73  The ORDER BY ess
2a5f0 65 6e 74 69 61 6c 6c 79 20 73 65 74 73 20 75 70  entially sets up
2a600 20 61 20 70 72 69 6f 72 69 74 79 20 71 75 65 75   a priority queu
2a610 65 20 74 68 61 74 0a 66 6f 72 63 65 73 20 74 68  e that.forces th
2a620 65 20 72 65 63 75 72 73 69 76 65 20 71 75 65 72  e recursive quer
2a630 79 20 74 6f 20 6c 6f 6f 6b 20 61 74 20 74 68 65  y to look at the
2a640 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e 63   most recent anc
2a650 65 73 74 6f 72 73 20 66 69 72 73 74 2c 0a 61 6c  estors first,.al
2a660 6c 6f 77 69 6e 67 20 74 68 65 20 75 73 65 20 6f  lowing the use o
2a670 66 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  f a LIMIT clause
2a680 20 74 6f 20 72 65 73 74 72 69 63 74 20 74 68 65   to restrict the
2a690 20 73 63 6f 70 65 20 6f 66 20 74 68 65 0a 71 75   scope of the.qu
2a6a0 65 72 79 20 74 6f 20 6a 75 73 74 20 74 68 65 20  ery to just the 
2a6b0 63 68 65 63 6b 69 6e 73 20 6f 66 20 69 6e 74 65  checkins of inte
2a6c0 72 65 73 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  rest...<tcl>hd_f
2a6d0 72 61 67 6d 65 6e 74 20 77 69 74 68 6f 72 64 65  ragment withorde
2a6e0 72 62 79 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 43 6f  rby</tcl>.<h4>Co
2a6f0 6e 74 72 6f 6c 6c 69 6e 67 20 44 65 70 74 68 2d  ntrolling Depth-
2a700 46 69 72 73 74 20 56 65 72 73 75 73 20 42 72 65  First Versus Bre
2a710 61 64 74 68 2d 46 69 72 73 74 20 53 65 61 72 63  adth-First Searc
2a720 68 20 4f 66 20 61 20 54 72 65 65 0a 55 73 69 6e  h Of a Tree.Usin
2a730 67 20 4f 52 44 45 52 20 42 59 3c 2f 68 34 3e 0a  g ORDER BY</h4>.
2a740 0a 3c 70 3e 41 6e 20 4f 52 44 45 52 20 42 59 20  .<p>An ORDER BY 
2a750 63 6c 61 75 73 65 20 6f 6e 20 74 68 65 20 72 65  clause on the re
2a760 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 63  cursive-select c
2a770 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63 6f  an be used to co
2a780 6e 74 72 6f 6c 0a 77 68 65 74 68 65 72 20 74 68  ntrol.whether th
2a790 65 20 73 65 61 72 63 68 20 6f 66 20 61 20 74 72  e search of a tr
2a7a0 65 65 20 69 73 20 64 65 70 74 68 2d 66 69 72 73  ee is depth-firs
2a7b0 74 20 6f 72 20 62 72 65 61 64 74 68 2d 66 69 72  t or breadth-fir
2a7c0 73 74 2e 20 20 54 6f 0a 69 6c 6c 75 73 74 72 61  st.  To.illustra
2a7d0 74 65 2c 20 77 65 20 77 69 6c 6c 20 75 73 65 20  te, we will use 
2a7e0 61 20 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74  a variation on t
2a7f0 68 65 20 22 6f 72 67 22 20 74 61 62 6c 65 20 66  he "org" table f
2a800 72 6f 6d 20 61 6e 20 65 78 61 6d 70 6c 65 0a 61  rom an example.a
2a810 62 6f 76 65 2c 20 77 69 74 68 6f 75 74 20 74 68  bove, without th
2a820 65 20 22 68 65 69 67 68 74 22 20 63 6f 6c 75 6d  e "height" colum
2a830 6e 2c 20 61 6e 64 20 77 69 74 68 20 73 6f 6d 65  n, and with some
2a840 20 72 65 61 6c 20 64 61 74 61 20 69 6e 73 65 72   real data inser
2a850 74 65 64 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ted:..<blockquot
2a860 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
2a870 41 42 4c 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65  ABLE org(.  name
2a880 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45   TEXT PRIMARY KE
2a890 59 2c 0a 20 20 62 6f 73 73 20 54 45 58 54 20 52  Y,.  boss TEXT R
2a8a0 45 46 45 52 45 4e 43 45 53 20 6f 72 67 0a 29 20  EFERENCES org.) 
2a8b0 57 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 49  WITHOUT ROWID;.I
2a8c0 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56  NSERT INTO org V
2a8d0 41 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 4e 55  ALUES('Alice',NU
2a8e0 4c 4c 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  LL);.INSERT INTO
2a8f0 20 6f 72 67 20 56 41 4c 55 45 53 28 27 42 6f 62   org VALUES('Bob
2a900 27 2c 27 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45  ','Alice');.INSE
2a910 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55  RT INTO org VALU
2a920 45 53 28 27 43 69 6e 64 79 27 2c 27 41 6c 69 63  ES('Cindy','Alic
2a930 65 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  e');.INSERT INTO
2a940 20 6f 72 67 20 56 41 4c 55 45 53 28 27 44 61 76   org VALUES('Dav
2a950 65 27 2c 27 42 6f 62 27 29 3b 0a 49 4e 53 45 52  e','Bob');.INSER
2a960 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45  T INTO org VALUE
2a970 53 28 27 45 6d 6d 61 27 2c 27 42 6f 62 27 29 3b  S('Emma','Bob');
2a980 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67  .INSERT INTO org
2a990 20 56 41 4c 55 45 53 28 27 46 72 65 64 27 2c 27   VALUES('Fred','
2a9a0 43 69 6e 64 79 27 29 3b 0a 49 4e 53 45 52 54 20  Cindy');.INSERT 
2a9b0 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28  INTO org VALUES(
2a9c0 27 47 61 69 6c 27 2c 27 43 69 6e 64 79 27 29 3b  'Gail','Cindy');
2a9d0 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
2a9e0 6f 74 65 3e 0a 0a 3c 70 3e 48 65 72 65 20 69 73  ote>..<p>Here is
2a9f0 20 61 20 71 75 65 72 79 20 74 6f 20 73 68 6f 77   a query to show
2aa00 20 74 68 65 20 74 72 65 65 20 73 74 72 75 63 74   the tree struct
2aa10 75 72 65 20 69 6e 20 61 20 62 72 65 61 64 74 68  ure in a breadth
2aa20 2d 66 69 72 73 74 20 70 61 74 74 65 72 6e 3a 0a  -first pattern:.
2aa30 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
2aa40 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56  e>.WITH RECURSIV
2aa50 45 0a 20 20 75 6e 64 65 72 5f 61 6c 69 63 65 28  E.  under_alice(
2aa60 6e 61 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20 28  name,level) AS (
2aa70 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69  .    VALUES('Ali
2aa80 63 65 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f 4e  ce',0).    UNION
2aa90 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20   ALL.    SELECT 
2aaa0 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72 5f  org.name, under_
2aab0 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20 20  alice.level+1.  
2aac0 20 20 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f 49      FROM org JOI
2aad0 4e 20 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f 4e  N under_alice ON
2aae0 20 6f 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72 5f   org.boss=under_
2aaf0 61 6c 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20 20  alice.name.     
2ab00 4f 52 44 45 52 20 42 59 20 32 0a 20 20 29 0a 53  ORDER BY 2.  ).S
2ab10 45 4c 45 43 54 20 73 75 62 73 74 72 28 27 2e 2e  ELECT substr('..
2ab20 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65  ........',1,leve
2ab30 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f  l*3) || name FRO
2ab40 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c  M under_alice;.<
2ab50 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
2ab60 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 4f 52 44 45  e>..<p>The "ORDE
2ab70 52 20 42 59 20 32 22 20 28 77 68 69 63 68 20 6d  R BY 2" (which m
2ab80 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73  eans the same as
2ab90 20 22 4f 52 44 45 52 20 42 59 20 75 6e 64 65 72   "ORDER BY under
2aba0 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 22 29  _alice.level+1")
2abb0 0a 63 61 75 73 65 73 20 68 69 67 68 65 72 20 6c  .causes higher l
2abc0 65 76 65 6c 73 20 69 6e 20 74 68 65 20 6f 72 67  evels in the org
2abd0 61 6e 69 7a 61 74 69 6f 6e 20 63 68 61 72 74 20  anization chart 
2abe0 28 77 69 74 68 20 73 6d 61 6c 6c 65 72 20 22 6c  (with smaller "l
2abf0 65 76 65 6c 22 20 76 61 6c 75 65 73 29 0a 74 6f  evel" values).to
2ac00 20 62 65 20 70 72 6f 63 65 73 73 65 64 20 66 69   be processed fi
2ac10 72 73 74 2c 20 72 65 73 75 6c 74 69 6e 67 20 69  rst, resulting i
2ac20 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69 72 73  n a breadth-firs
2ac30 74 20 73 65 61 72 63 68 2e 20 20 54 68 65 20 6f  t search.  The o
2ac40 75 74 70 75 74 20 69 73 3a 0a 0a 3c 62 6c 6f 63  utput is:..<bloc
2ac50 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c 69  kquote><pre>.Ali
2ac60 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 43 69 6e  ce....Bob....Cin
2ac70 64 79 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e  dy.......Dave...
2ac80 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e 46  ....Emma.......F
2ac90 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c  red.......Gail.<
2aca0 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
2acb0 65 3e 0a 0a 3c 70 3e 42 75 74 20 69 66 20 77 65  e>..<p>But if we
2acc0 20 63 68 61 6e 67 65 20 74 68 65 20 4f 52 44 45   change the ORDE
2acd0 52 20 42 59 20 63 6c 61 75 73 65 20 74 6f 20 61  R BY clause to a
2ace0 64 64 20 74 68 65 20 22 44 45 53 43 22 20 6d 6f  dd the "DESC" mo
2acf0 64 69 66 69 65 72 2c 20 74 68 61 74 20 77 69 6c  difier, that wil
2ad00 6c 0a 63 61 75 73 65 20 6c 6f 77 65 72 20 6c 65  l.cause lower le
2ad10 76 65 6c 73 20 69 6e 20 74 68 65 20 6f 72 67 61  vels in the orga
2ad20 6e 69 7a 61 74 69 6f 6e 20 28 77 69 74 68 20 6c  nization (with l
2ad30 61 72 67 65 72 20 22 6c 65 76 65 6c 22 20 76 61  arger "level" va
2ad40 6c 75 65 73 29 20 74 6f 20 62 65 0a 70 72 6f 63  lues) to be.proc
2ad50 65 73 73 65 64 20 66 69 72 73 74 20 62 79 20 74  essed first by t
2ad60 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
2ad70 65 63 74 2c 20 72 65 73 75 6c 74 69 6e 67 20 69  ect, resulting i
2ad80 6e 20 61 20 64 65 70 74 68 2d 66 69 72 73 74 20  n a depth-first 
2ad90 73 65 61 72 63 68 3a 0a 0a 3c 62 6c 6f 63 6b 71  search:..<blockq
2ada0 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20  uote><pre>.WITH 
2adb0 52 45 43 55 52 53 49 56 45 0a 20 20 75 6e 64 65  RECURSIVE.  unde
2adc0 72 5f 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65 76  r_alice(name,lev
2add0 65 6c 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c  el) AS (.    VAL
2ade0 55 45 53 28 27 41 6c 69 63 65 27 2c 30 29 0a 20  UES('Alice',0). 
2adf0 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20     UNION ALL.   
2ae00 20 53 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d 65   SELECT org.name
2ae10 2c 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65  , under_alice.le
2ae20 76 65 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f 4d  vel+1.      FROM
2ae30 20 6f 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72 5f   org JOIN under_
2ae40 61 6c 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f 73  alice ON org.bos
2ae50 73 3d 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e 61  s=under_alice.na
2ae60 6d 65 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59  me.     ORDER BY
2ae70 20 32 20 3c 62 3e 44 45 53 43 3c 2f 62 3e 0a 20   2 <b>DESC</b>. 
2ae80 20 29 0a 53 45 4c 45 43 54 20 73 75 62 73 74 72   ).SELECT substr
2ae90 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c  ('..........',1,
2aea0 6c 65 76 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65  level*3) || name
2aeb0 20 46 52 4f 4d 20 75 6e 64 65 72 5f 61 6c 69 63   FROM under_alic
2aec0 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  e;.</pre></block
2aed0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f  quote>..<p>The o
2aee0 75 74 70 75 74 20 6f 66 20 74 68 69 73 20 72 65  utput of this re
2aef0 76 69 73 65 64 20 71 75 65 72 79 20 69 73 3a 0a  vised query is:.
2af00 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
2af10 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a  e>.Alice....Bob.
2af20 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e  ......Dave......
2af30 2e 45 6d 6d 61 0a 2e 2e 2e 43 69 6e 64 79 0a 2e  .Emma....Cindy..
2af40 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e  .....Fred.......
2af50 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  Gail.</pre></blo
2af60 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 57 68 65  ckquote>..<p>Whe
2af70 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  n the ORDER BY c
2af80 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64  lause is omitted
2af90 20 66 72 6f 6d 20 74 68 65 20 72 65 63 75 72 73   from the recurs
2afa0 69 76 65 2d 73 65 6c 65 63 74 2c 20 74 68 65 0a  ive-select, the.
2afb0 71 75 65 75 65 20 62 65 68 61 76 65 73 20 61 73  queue behaves as
2afc0 20 61 20 46 49 46 4f 2c 20 77 68 69 63 68 20 72   a FIFO, which r
2afd0 65 73 75 6c 74 73 20 69 6e 20 61 20 62 72 65 61  esults in a brea
2afe0 64 74 68 2d 66 69 72 73 74 20 73 65 61 72 63 68  dth-first search
2aff0 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  ....<tcl>hd_frag
2b000 6d 65 6e 74 20 6d 61 6e 64 65 6c 62 72 6f 74 20  ment mandelbrot 
2b010 7b 63 6f 6d 70 75 74 65 20 74 68 65 20 4d 61 6e  {compute the Man
2b020 64 65 6c 62 72 6f 74 20 73 65 74 7d 3c 2f 74 63  delbrot set}</tc
2b030 6c 3e 0a 3c 68 34 3e 4f 75 74 6c 61 6e 64 69 73  l>.<h4>Outlandis
2b040 68 20 52 65 63 75 72 73 69 76 65 20 51 75 65 72  h Recursive Quer
2b050 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a  y Examples</h4>.
2b060 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
2b070 67 20 71 75 65 72 79 20 63 6f 6d 70 75 74 65 73  g query computes
2b080 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f   an approximatio
2b090 6e 20 6f 66 20 74 68 65 20 4d 61 6e 64 65 6c 62  n of the Mandelb
2b0a0 72 6f 74 20 53 65 74 0a 61 6e 64 20 6f 75 74 70  rot Set.and outp
2b0b0 75 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 61  uts the result a
2b0c0 73 20 41 53 43 49 49 2d 61 72 74 3a 0a 0a 3c 62  s ASCII-art:..<b
2b0d0 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
2b0e0 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
2b0f0 20 78 61 78 69 73 28 78 29 20 41 53 20 28 56 41   xaxis(x) AS (VA
2b100 4c 55 45 53 28 2d 32 2e 30 29 20 55 4e 49 4f 4e  LUES(-2.0) UNION
2b110 20 41 4c 4c 20 53 45 4c 45 43 54 20 78 2b 30 2e   ALL SELECT x+0.
2b120 30 35 20 46 52 4f 4d 20 78 61 78 69 73 20 57 48  05 FROM xaxis WH
2b130 45 52 45 20 78 26 6c 74 3b 31 2e 32 29 2c 0a 20  ERE x&lt;1.2),. 
2b140 20 79 61 78 69 73 28 79 29 20 41 53 20 28 56 41   yaxis(y) AS (VA
2b150 4c 55 45 53 28 2d 31 2e 30 29 20 55 4e 49 4f 4e  LUES(-1.0) UNION
2b160 20 41 4c 4c 20 53 45 4c 45 43 54 20 79 2b 30 2e   ALL SELECT y+0.
2b170 31 20 46 52 4f 4d 20 79 61 78 69 73 20 57 48 45  1 FROM yaxis WHE
2b180 52 45 20 79 26 6c 74 3b 31 2e 30 29 2c 0a 20 20  RE y&lt;1.0),.  
2b190 6d 28 69 74 65 72 2c 20 63 78 2c 20 63 79 2c 20  m(iter, cx, cy, 
2b1a0 78 2c 20 79 29 20 41 53 20 28 0a 20 20 20 20 53  x, y) AS (.    S
2b1b0 45 4c 45 43 54 20 30 2c 20 78 2c 20 79 2c 20 30  ELECT 0, x, y, 0
2b1c0 2e 30 2c 20 30 2e 30 20 46 52 4f 4d 20 78 61 78  .0, 0.0 FROM xax
2b1d0 69 73 2c 20 79 61 78 69 73 0a 20 20 20 20 55 4e  is, yaxis.    UN
2b1e0 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45  ION ALL.    SELE
2b1f0 43 54 20 69 74 65 72 2b 31 2c 20 63 78 2c 20 63  CT iter+1, cx, c
2b200 79 2c 20 78 2a 78 2d 79 2a 79 20 2b 20 63 78 2c  y, x*x-y*y + cx,
2b210 20 32 2e 30 2a 78 2a 79 20 2b 20 63 79 20 46 52   2.0*x*y + cy FR
2b220 4f 4d 20 6d 20 0a 20 20 20 20 20 57 48 45 52 45  OM m .     WHERE
2b230 20 28 78 2a 78 20 2b 20 79 2a 79 29 20 26 6c 74   (x*x + y*y) &lt
2b240 3b 20 34 2e 30 20 41 4e 44 20 69 74 65 72 26 6c  ; 4.0 AND iter&l
2b250 74 3b 32 38 0a 20 20 29 2c 0a 20 20 6d 32 28 69  t;28.  ),.  m2(i
2b260 74 65 72 2c 20 63 78 2c 20 63 79 29 20 41 53 20  ter, cx, cy) AS 
2b270 28 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 61 78  (.    SELECT max
2b280 28 69 74 65 72 29 2c 20 63 78 2c 20 63 79 20 46  (iter), cx, cy F
2b290 52 4f 4d 20 6d 20 47 52 4f 55 50 20 42 59 20 63  ROM m GROUP BY c
2b2a0 78 2c 20 63 79 0a 20 20 29 2c 0a 20 20 61 28 74  x, cy.  ),.  a(t
2b2b0 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43  ) AS (.    SELEC
2b2c0 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 20  T group_concat( 
2b2d0 73 75 62 73 74 72 28 27 20 2e 2b 2a 23 27 2c 20  substr(' .+*#', 
2b2e0 31 2b 6d 69 6e 28 69 74 65 72 2f 37 2c 34 29 2c  1+min(iter/7,4),
2b2f0 20 31 29 2c 20 27 27 29 20 0a 20 20 20 20 46 52   1), '') .    FR
2b300 4f 4d 20 6d 32 20 47 52 4f 55 50 20 42 59 20 63  OM m2 GROUP BY c
2b310 79 0a 20 20 29 0a 53 45 4c 45 43 54 20 67 72 6f  y.  ).SELECT gro
2b320 75 70 5f 63 6f 6e 63 61 74 28 72 74 72 69 6d 28  up_concat(rtrim(
2b330 74 29 2c 78 27 30 61 27 29 20 46 52 4f 4d 20 61  t),x'0a') FROM a
2b340 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
2b350 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68 69  uote>..<p>In thi
2b360 73 20 71 75 65 72 79 2c 20 74 68 65 20 22 78 61  s query, the "xa
2b370 78 69 73 22 20 61 6e 64 20 22 79 61 78 69 73 22  xis" and "yaxis"
2b380 20 43 54 45 73 20 64 65 66 69 6e 65 20 74 68 65   CTEs define the
2b390 20 67 72 69 64 20 6f 66 20 70 6f 69 6e 74 73 20   grid of points 
2b3a0 66 6f 72 0a 77 68 69 63 68 20 74 68 65 20 4d 61  for.which the Ma
2b3b0 6e 64 65 6c 62 72 6f 74 20 53 65 74 20 77 69 6c  ndelbrot Set wil
2b3c0 6c 20 62 65 20 61 70 70 72 6f 78 69 6d 61 74 65  l be approximate
2b3d0 64 2e 20 20 45 61 63 68 20 72 6f 77 20 69 6e 20  d.  Each row in 
2b3e0 74 68 65 0a 22 6d 28 69 74 65 72 2c 63 78 2c 63  the."m(iter,cx,c
2b3f0 79 2c 78 2c 79 29 22 20 43 54 45 20 6d 65 61 6e  y,x,y)" CTE mean
2b400 73 20 74 68 61 74 20 61 66 74 65 72 20 22 69 74  s that after "it
2b410 65 72 22 20 69 74 65 72 61 74 69 6f 6e 73 2c 20  er" iterations, 
2b420 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 0a 69  the Mandelbrot.i
2b430 74 65 72 61 74 69 6f 6e 20 73 74 61 72 74 69 6e  teration startin
2b440 67 20 61 74 20 63 78 2c 63 79 20 68 61 73 20 72  g at cx,cy has r
2b450 65 61 63 68 65 64 20 70 6f 69 6e 74 20 78 2c 79  eached point x,y
2b460 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  .  The number of
2b470 20 69 74 65 72 61 74 69 6f 6e 73 0a 69 6e 20 74   iterations.in t
2b480 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20 6c  his example is l
2b490 69 6d 69 74 65 64 20 74 6f 20 32 38 20 28 77 68  imited to 28 (wh
2b4a0 69 63 68 20 73 65 76 65 72 65 6c 79 20 6c 69 6d  ich severely lim
2b4b0 69 74 73 20 74 68 65 20 72 65 73 6f 6c 75 74 69  its the resoluti
2b4c0 6f 6e 20 6f 66 0a 74 68 65 20 63 6f 6d 70 75 74  on of.the comput
2b4d0 61 74 69 6f 6e 2c 20 62 75 74 20 69 73 20 73 75  ation, but is su
2b4e0 66 66 69 63 69 65 6e 74 20 66 6f 72 20 6c 6f 77  fficient for low
2b4f0 2d 72 65 73 6f 6c 75 74 69 6f 6e 20 41 53 43 49  -resolution ASCI
2b500 49 2d 61 72 74 20 6f 75 74 70 75 74 29 2e 0a 54  I-art output)..T
2b510 68 65 20 22 6d 32 28 69 74 65 72 2c 63 78 2c 63  he "m2(iter,cx,c
2b520 79 29 22 20 43 54 45 20 68 6f 6c 64 73 20 74 68  y)" CTE holds th
2b530 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
2b540 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 72   of iterations r
2b550 65 61 63 68 65 64 20 77 68 65 6e 0a 73 74 61 72  eached when.star
2b560 74 69 6e 67 20 61 74 20 70 6f 69 6e 74 20 63 78  ting at point cx
2b570 2c 63 79 2e 0a 46 69 6e 61 6c 6c 79 2c 20 65 61  ,cy..Finally, ea
2b580 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 22 61  ch row in the "a
2b590 28 74 29 22 20 43 54 45 20 68 6f 6c 64 73 20 61  (t)" CTE holds a
2b5a0 20 73 74 72 69 6e 67 20 0a 77 68 69 63 68 20 69   string .which i
2b5b0 73 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65 20  s a single line 
2b5c0 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 41 53  of the output AS
2b5d0 43 49 49 2d 61 72 74 2e 0a 54 68 65 20 53 45 4c  CII-art..The SEL
2b5e0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74  ECT statement at
2b5f0 20 74 68 65 20 65 6e 64 20 6a 75 73 74 20 71 75   the end just qu
2b600 65 72 69 65 73 20 74 68 65 20 22 61 22 20 43 54  eries the "a" CT
2b610 45 20 74 6f 0a 72 65 74 72 69 65 76 65 20 61 6c  E to.retrieve al
2b620 6c 20 6c 69 6e 65 73 20 6f 66 20 41 53 43 49 49  l lines of ASCII
2b630 2d 61 72 74 2c 20 6f 6e 65 20 62 79 20 6f 6e 65  -art, one by one
2b640 2e 0a 0a 3c 70 3e 52 75 6e 6e 69 6e 67 20 74 68  ...<p>Running th
2b650 65 20 71 75 65 72 79 20 61 62 6f 76 65 20 69 6e  e query above in
2b660 20 61 6e 20 53 51 4c 69 74 65 20 5b 63 6f 6d 6d   an SQLite [comm
2b670 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d 20  and-line shell] 
2b680 72 65 73 75 6c 74 73 0a 69 6e 20 74 68 65 20 66  results.in the f
2b690 6f 6c 6c 6f 77 69 6e 67 20 6f 75 74 70 75 74 3a  ollowing output:
2b6a0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
2b6b0 72 65 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20  re>.            
2b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6d0 20 20 20 20 20 20 20 20 2e 2e 2e 2e 23 0a 20 20          ....#.  
2b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b700 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20 20 20   ..#*...        
2b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b720 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23 23 23           ..+####
2b730 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
2b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
2b750 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20  ......+####.... 
2b760 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20    +.            
2b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
2b780 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b  .##+*##########+
2b790 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20  .++++.          
2b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7b0 2e 2b 2e 23 23 23 23 23 23 23 23 23 23 23 23 23  .+.#############
2b7c0 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20  #####+..        
2b7d0 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e        ..........
2b7e0 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23 23 23 23  ...+############
2b7f0 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20 20 20 20  #######+.+.     
2b800 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23           ..++..#
2b810 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23 23  .....*##########
2b820 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20  ###########+..  
2b830 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23             ...+#
2b840 23 23 23 23 23 23 2b 2b 23 23 23 23 23 23 23 23  ######++########
2b850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e  ###############.
2b860 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2b  .          ....+
2b870 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  *###############
2b880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b890 23 2e 0a 20 23 23 23 23 23 23 23 23 23 23 23 23  #.. ############
2b8a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b8b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b8c0 23 2e 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 2e  #....          .
2b8d0 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23 23 23  ...+*###########
2b8e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b8f0 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20  #####..         
2b900 20 20 20 20 2e 2e 2e 2b 23 23 23 23 23 23 23 2b      ...+#######+
2b910 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +###############
2b920 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20 20 20  ########..      
2b930 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e          ..++..#.
2b940 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23 23 23  ....*###########
2b950 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20  ##########+..   
2b960 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e             .....
2b970 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23  ........+#######
2b980 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a  ############+.+.
2b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9a0 20 20 20 20 20 20 20 20 20 20 2e 2b 2e 23 23 23            .+.###
2b9b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b  ###############+
2b9c0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23               ..#
2b9e0 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b 2e 2b  #+*##########+.+
2b9f0 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +++.            
2ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba10 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e  .......+####....
2ba20 20 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20     +.           
2ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba40 20 20 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e 0a        ..+####+..
2ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba70 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20     ..#*...      
2ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
2baa0 2e 2e 23 0a 20 20 20 20 20 20 20 20 20 20 20 20  ..#.            
2bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bac0 20 20 20 20 20 20 20 20 2b 2e 0a 3c 2f 70 72 65          +..</pre
2bad0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
2bae0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2baf0 20 73 75 64 6f 6b 75 20 7b 73 6f 6c 76 65 20 53   sudoku {solve S
2bb00 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 73 7d 20 3c  udoku puzzles} <
2bb10 2f 74 63 6c 3e 0a 3c 70 3e 54 68 69 73 20 6e 65  /tcl>.<p>This ne
2bb20 78 74 20 71 75 65 72 79 20 73 6f 6c 76 65 73 20  xt query solves 
2bb30 61 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 2e  a Sudoku puzzle.
2bb40 20 20 54 68 65 20 73 74 61 74 65 20 6f 66 20 74    The state of t
2bb50 68 65 20 70 75 7a 7a 6c 65 20 69 73 0a 64 65 66  he puzzle is.def
2bb60 69 6e 65 64 20 62 79 20 61 6e 20 38 31 2d 63 68  ined by an 81-ch
2bb70 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 20 66  aracter string f
2bb80 6f 72 6d 65 64 20 62 79 20 72 65 61 64 69 6e 67  ormed by reading
2bb90 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
2bba0 65 0a 70 75 7a 7a 6c 65 20 62 6f 78 20 72 6f 77  e.puzzle box row
2bbb0 20 62 79 20 72 6f 77 20 66 72 6f 6d 20 6c 65 66   by row from lef
2bbc0 74 20 74 6f 20 72 69 67 68 74 20 61 6e 64 20 74  t to right and t
2bbd0 68 65 6e 20 66 72 6f 6d 20 74 6f 70 20 74 6f 20  hen from top to 
2bbe0 62 6f 74 74 6f 6d 2e 0a 42 6c 61 6e 6b 20 73 71  bottom..Blank sq
2bbf0 75 61 72 65 73 20 69 6e 20 74 68 65 20 70 75 7a  uares in the puz
2bc00 7a 6c 65 20 61 72 65 20 64 65 6e 6f 74 65 64 20  zle are denoted 
2bc10 62 79 20 61 20 22 2e 22 20 63 68 61 72 61 63 74  by a "." charact
2bc20 65 72 2e 20 20 0a 54 68 75 73 20 74 68 65 20 69  er.  .Thus the i
2bc30 6e 70 75 74 20 73 74 72 69 6e 67 3a 0a 0a 3c 62  nput string:..<b
2bc40 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 2e 2e 37  lockquote>.53..7
2bc50 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38  ....6..195....98
2bc60 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34  ....6.8...6...34
2bc70 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e  ..8.3..17...2...
2bc80 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39  6.6....28....419
2bc90 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c 2f 62  ..5....8..79.</b
2bca0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43  lockquote>..<p>C
2bcb0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 20  orresponds to a 
2bcc0 70 75 7a 7a 6c 65 20 6c 69 6b 65 20 74 68 69 73  puzzle like this
2bcd0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  :..<blockquote>.
2bce0 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 31  <table border="1
2bcf0 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
2bd00 22 3e 0a 3c 74 72 3e 3c 74 64 3e 35 3c 74 64 3e  ">.<tr><td>5<td>
2bd10 33 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37  3<td> <td> <td>7
2bd20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
2bd30 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 36 3c 74 64  td>.<tr><td>6<td
2bd40 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 3c 74 64 3e  > <td> <td>1<td>
2bd50 39 3c 74 64 3e 35 3c 74 64 3e 20 3c 74 64 3e 20  9<td>5<td> <td> 
2bd60 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74  <td>.<tr><td> <t
2bd70 64 3e 39 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64  d>9<td>8<td> <td
2bd80 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
2bd90 36 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 38 3c  6<td>.<tr><td>8<
2bda0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
2bdb0 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>6<td> <td> <td
2bdc0 3e 20 3c 74 64 3e 33 0a 3c 74 72 3e 3c 74 64 3e  > <td>3.<tr><td>
2bdd0 34 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38  4<td> <td> <td>8
2bde0 3c 74 64 3e 20 3c 74 64 3e 33 3c 74 64 3e 20 3c  <td> <td>3<td> <
2bdf0 74 64 3e 20 3c 74 64 3e 31 0a 3c 74 72 3e 3c 74  td> <td>1.<tr><t
2be00 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>7<td> <td> <td
2be10 3e 20 3c 74 64 3e 32 3c 74 64 3e 20 3c 74 64 3e  > <td>2<td> <td>
2be20 20 3c 74 64 3e 20 3c 74 64 3e 36 0a 3c 74 72 3e   <td> <td>6.<tr>
2be30 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c  <td> <td>6<td> <
2be40 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
2be50 64 3e 32 3c 74 64 3e 38 3c 74 64 3e 0a 3c 74 72  d>2<td>8<td>.<tr
2be60 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  ><td> <td> <td> 
2be70 3c 74 64 3e 34 3c 74 64 3e 31 3c 74 64 3e 39 3c  <td>4<td>1<td>9<
2be80 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 35 0a 3c  td> <td> <td>5.<
2be90 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  tr><td> <td> <td
2bea0 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64 3e  > <td> <td>8<td>
2beb0 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64 3e 39   <td> <td>7<td>9
2bec0 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
2bed0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69 73  kquote>..<p>This
2bee0 20 69 73 20 74 68 65 20 71 75 65 72 79 20 74 68   is the query th
2bef0 61 74 20 73 6f 6c 76 65 73 20 74 68 65 20 70 75  at solves the pu
2bf00 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  zzle:..<blockquo
2bf10 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
2bf20 43 55 52 53 49 56 45 0a 20 20 69 6e 70 75 74 28  CURSIVE.  input(
2bf30 73 75 64 29 20 41 53 20 28 0a 20 20 20 20 56 41  sud) AS (.    VA
2bf40 4c 55 45 53 28 27 35 33 2e 2e 37 2e 2e 2e 2e 36  LUES('53..7....6
2bf50 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36  ..195....98....6
2bf60 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e 33  .8...6...34..8.3
2bf70 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e  ..17...2...6.6..
2bf80 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e 2e  ..28....419..5..
2bf90 2e 2e 38 2e 2e 37 39 27 29 0a 20 20 29 2c 0a 20  ..8..79').  ),. 
2bfa0 20 64 69 67 69 74 73 28 7a 2c 20 6c 70 29 20 41   digits(z, lp) A
2bfb0 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27  S (.    VALUES('
2bfc0 31 27 2c 20 31 29 0a 20 20 20 20 55 4e 49 4f 4e  1', 1).    UNION
2bfd0 20 41 4c 4c 20 53 45 4c 45 43 54 0a 20 20 20 20   ALL SELECT.    
2bfe0 43 41 53 54 28 6c 70 2b 31 20 41 53 20 54 45 58  CAST(lp+1 AS TEX
2bff0 54 29 2c 20 6c 70 2b 31 20 46 52 4f 4d 20 64 69  T), lp+1 FROM di
2c000 67 69 74 73 20 57 48 45 52 45 20 6c 70 26 6c 74  gits WHERE lp&lt
2c010 3b 39 0a 20 20 29 2c 0a 20 20 78 28 73 2c 20 69  ;9.  ),.  x(s, i
2c020 6e 64 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c  nd) AS (.    SEL
2c030 45 43 54 20 73 75 64 2c 20 69 6e 73 74 72 28 73  ECT sud, instr(s
2c040 75 64 2c 20 27 2e 27 29 20 46 52 4f 4d 20 69 6e  ud, '.') FROM in
2c050 70 75 74 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c  put.    UNION AL
2c060 4c 0a 20 20 20 20 53 45 4c 45 43 54 0a 20 20 20  L.    SELECT.   
2c070 20 20 20 73 75 62 73 74 72 28 73 2c 20 31 2c 20     substr(s, 1, 
2c080 69 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20 73  ind-1) || z || s
2c090 75 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29 2c  ubstr(s, ind+1),
2c0a0 0a 20 20 20 20 20 20 69 6e 73 74 72 28 20 73 75  .      instr( su
2c0b0 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31  bstr(s, 1, ind-1
2c0c0 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72  ) || z || substr
2c0d0 28 73 2c 20 69 6e 64 2b 31 29 2c 20 27 2e 27 20  (s, ind+1), '.' 
2c0e0 29 0a 20 20 20 20 20 46 52 4f 4d 20 78 2c 20 64  ).     FROM x, d
2c0f0 69 67 69 74 73 20 41 53 20 7a 0a 20 20 20 20 57  igits AS z.    W
2c100 48 45 52 45 20 69 6e 64 3e 30 0a 20 20 20 20 20  HERE ind>0.     
2c110 20 41 4e 44 20 4e 4f 54 20 45 58 49 53 54 53 20   AND NOT EXISTS 
2c120 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 45  (.            SE
2c130 4c 45 43 54 20 31 0a 20 20 20 20 20 20 20 20 20  LECT 1.         
2c140 20 20 20 20 20 46 52 4f 4d 20 64 69 67 69 74 73       FROM digits
2c150 20 41 53 20 6c 70 0a 20 20 20 20 20 20 20 20 20   AS lp.         
2c160 20 20 20 20 57 48 45 52 45 20 7a 2e 7a 20 3d 20      WHERE z.z = 
2c170 73 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d  substr(s, ((ind-
2c180 31 29 2f 39 29 2a 39 20 2b 20 6c 70 2c 20 31 29  1)/9)*9 + lp, 1)
2c190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c1a0 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72   OR z.z = substr
2c1b0 28 73 2c 20 28 28 69 6e 64 2d 31 29 25 39 29 20  (s, ((ind-1)%9) 
2c1c0 2b 20 28 6c 70 2d 31 29 2a 39 20 2b 20 31 2c 20  + (lp-1)*9 + 1, 
2c1d0 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1).             
2c1e0 20 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73     OR z.z = subs
2c1f0 74 72 28 73 2c 20 28 28 28 69 6e 64 2d 31 29 2f  tr(s, (((ind-1)/
2c200 33 29 20 25 20 33 29 20 2a 20 33 0a 20 20 20 20  3) % 3) * 3.    
2c210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c220 20 20 20 20 2b 20 28 28 69 6e 64 2d 31 29 2f 32      + ((ind-1)/2
2c230 37 29 20 2a 20 32 37 20 2b 20 6c 70 0a 20 20 20  7) * 27 + lp.   
2c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c250 20 20 20 20 20 2b 20 28 28 6c 70 2d 31 29 20 2f       + ((lp-1) /
2c260 20 33 29 20 2a 20 36 2c 20 31 29 0a 20 20 20 20   3) * 6, 1).    
2c270 20 20 20 20 20 29 0a 20 20 29 0a 53 45 4c 45 43       ).  ).SELEC
2c280 54 20 73 20 46 52 4f 4d 20 78 20 57 48 45 52 45  T s FROM x WHERE
2c290 20 69 6e 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c 2f   ind=0;.</pre></
2c2a0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
2c2b0 54 68 65 20 22 69 6e 70 75 74 22 20 43 54 45 20  The "input" CTE 
2c2c0 64 65 66 69 6e 65 73 20 74 68 65 20 69 6e 70 75  defines the inpu
2c2d0 74 20 70 75 7a 7a 6c 65 2e 0a 54 68 65 20 22 64  t puzzle..The "d
2c2e0 69 67 69 74 73 22 20 43 54 45 20 64 65 66 69 6e  igits" CTE defin
2c2f0 65 73 20 61 20 74 61 62 6c 65 20 74 68 61 74 20  es a table that 
2c300 68 6f 6c 64 73 20 61 6c 6c 20 64 69 67 69 74 73  holds all digits
2c310 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39   between 1 and 9
2c320 2e 0a 54 68 65 20 77 6f 72 6b 20 6f 66 20 73 6f  ..The work of so
2c330 6c 76 69 6e 67 20 74 68 65 20 70 75 7a 7a 6c 65  lving the puzzle
2c340 20 69 73 20 75 6e 64 65 72 74 61 6b 65 6e 20 62   is undertaken b
2c350 79 20 74 68 65 20 22 78 22 20 43 54 45 2e 0a 41  y the "x" CTE..A
2c360 6e 20 65 6e 74 72 79 20 69 6e 20 78 28 73 2c 69  n entry in x(s,i
2c370 6e 64 29 20 6d 65 61 6e 73 20 74 68 61 74 20 74  nd) means that t
2c380 68 65 20 38 31 2d 63 68 61 72 61 63 74 65 72 20  he 81-character 
2c390 73 74 72 69 6e 67 20 22 73 22 20 69 73 20 61 20  string "s" is a 
2c3a0 76 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75 7a  valid.sudoku puz
2c3b0 7a 6c 65 20 28 69 74 20 68 61 73 20 6e 6f 20 63  zle (it has no c
2c3c0 6f 6e 66 6c 69 63 74 73 29 20 61 6e 64 20 74 68  onflicts) and th
2c3d0 61 74 20 74 68 65 20 66 69 72 73 74 20 75 6e 6b  at the first unk
2c3e0 6e 6f 77 6e 20 63 68 61 72 61 63 74 65 72 0a 69  nown character.i
2c3f0 73 20 61 74 20 70 6f 73 69 74 69 6f 6e 20 22 69  s at position "i
2c400 6e 64 22 2c 20 6f 72 20 69 6e 64 3d 3d 30 20 69  nd", or ind==0 i
2c410 66 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72 20  f all character 
2c420 70 6f 73 69 74 69 6f 6e 73 20 61 72 65 20 66 69  positions are fi
2c430 6c 6c 65 64 20 69 6e 2e 0a 54 68 65 20 67 6f 61  lled in..The goa
2c440 6c 2c 20 74 68 65 6e 2c 20 69 73 20 74 6f 20 63  l, then, is to c
2c450 6f 6d 70 75 74 65 20 65 6e 74 72 69 65 73 20 66  ompute entries f
2c460 6f 72 20 22 78 22 20 77 69 74 68 20 61 6e 20 22  or "x" with an "
2c470 69 6e 64 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e 54  ind" of 0...<p>T
2c480 68 65 20 73 6f 6c 76 65 72 20 77 6f 72 6b 73 20  he solver works 
2c490 62 79 20 61 64 64 69 6e 67 20 6e 65 77 20 65 6e  by adding new en
2c4a0 74 72 69 65 73 20 74 6f 20 74 68 65 20 22 78 22  tries to the "x"
2c4b0 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
2c4c0 2e 0a 47 69 76 65 6e 20 70 72 69 6f 72 20 65 6e  ..Given prior en
2c4d0 74 72 69 65 73 2c 20 74 68 65 20 72 65 63 75 72  tries, the recur
2c4e0 73 69 76 65 2d 73 65 6c 65 63 74 20 74 72 69 65  sive-select trie
2c4f0 73 20 74 6f 20 66 69 6c 6c 20 69 6e 20 61 20 73  s to fill in a s
2c500 69 6e 67 6c 65 20 6e 65 77 0a 70 6f 73 69 74 69  ingle new.positi
2c510 6f 6e 20 77 69 74 68 20 61 6c 6c 20 76 61 6c 75  on with all valu
2c520 65 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  es between 1 and
2c530 20 39 20 74 68 61 74 20 61 63 74 75 61 6c 6c 79   9 that actually
2c540 20 77 6f 72 6b 20 69 6e 20 74 68 61 74 0a 70 6f   work in that.po
2c550 73 69 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d  sition.  The com
2c560 70 6c 69 63 61 74 65 64 20 22 4e 4f 54 20 45 58  plicated "NOT EX
2c570 49 53 54 53 22 20 73 75 62 71 75 65 72 79 20 69  ISTS" subquery i
2c580 73 20 74 68 65 20 6d 61 67 69 63 20 74 68 61 74  s the magic that
2c590 0a 66 69 67 75 72 65 73 20 6f 75 74 20 77 68 65  .figures out whe
2c5a0 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68  ther or not each
2c5b0 20 63 61 6e 64 69 64 61 74 65 20 22 73 22 20 73   candidate "s" s
2c5c0 74 72 69 6e 67 20 69 73 20 61 20 76 61 6c 69 64  tring is a valid
2c5d0 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 6f  .sudoku puzzle o
2c5e0 72 20 6e 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20 66  r not...<p>The f
2c5f0 69 6e 61 6c 20 61 6e 73 77 65 72 20 69 73 20 66  inal answer is f
2c600 6f 75 6e 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 20  ound by looking 
2c610 66 6f 72 20 61 20 73 74 72 69 6e 67 20 77 69 74  for a string wit
2c620 68 20 69 6e 64 3d 3d 30 2e 0a 49 66 20 74 68 65  h ind==0..If the
2c630 20 6f 72 69 67 69 6e 61 6c 20 73 75 64 6f 6b 75   original sudoku
2c640 20 70 72 6f 62 6c 65 6d 20 64 69 64 20 6e 6f 74   problem did not
2c650 20 68 61 76 65 20 61 20 75 6e 69 71 75 65 20 73   have a unique s
2c660 6f 6c 75 74 69 6f 6e 2c 20 74 68 65 6e 0a 74 68  olution, then.th
2c670 65 20 71 75 65 72 79 20 77 69 6c 6c 20 72 65 74  e query will ret
2c680 75 72 6e 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65  urn all possible
2c690 20 73 6f 6c 75 74 69 6f 6e 73 2e 20 20 49 66 20   solutions.  If 
2c6a0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 70 72 6f  the original pro
2c6b0 62 6c 65 6d 0a 77 61 73 20 75 6e 73 6f 6c 76 61  blem.was unsolva
2c6c0 62 6c 65 2c 20 74 68 65 6e 20 6e 6f 20 72 6f 77  ble, then no row
2c6d0 73 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e  s will be return
2c6e0 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ed.  In this cas
2c6f0 65 2c 20 74 68 65 20 75 6e 69 71 75 65 0a 61 6e  e, the unique.an
2c700 73 77 65 72 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b  swer is:..<block
2c710 71 75 6f 74 65 3e 0a 35 33 34 36 37 38 39 31 32  quote>.534678912
2c720 36 37 32 31 39 35 33 34 38 31 39 38 33 34 32 35  6721953481983425
2c730 36 37 38 35 39 37 36 31 34 32 33 34 32 36 38 35  6785976142342685
2c740 33 37 39 31 37 31 33 39 32 34 38 35 36 39 36 31  3791713924856961
2c750 35 33 37 32 38 34 32 38 37 34 31 39 36 33 35 33  5372842874196353
2c760 34 35 32 38 36 31 37 39 0a 3c 2f 62 6c 6f 63 6b  45286179.</block
2c770 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73  quote>..<p>The s
2c780 6f 6c 75 74 69 6f 6e 20 77 61 73 20 63 6f 6d 70  olution was comp
2c790 75 74 65 64 20 69 6e 20 6c 65 73 73 20 74 68 61  uted in less tha
2c7a0 6e 20 33 30 30 20 6d 69 6c 6c 69 73 65 63 6f 6e  n 300 millisecon
2c7b0 64 73 20 6f 6e 20 61 20 6d 6f 64 65 72 6e 0a 77  ds on a modern.w
2c7c0 6f 72 6b 73 74 61 74 69 6f 6e 2e 0a 0a 3c 68 33  orkstation...<h3
2c7d0 3e 4c 69 6d 69 74 61 74 69 6f 6e 73 20 41 6e 64  >Limitations And
2c7e0 20 43 61 76 65 61 74 73 3c 2f 68 33 3e 0a 0a 3c   Caveats</h3>..<
2c7f0 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20  ul>.<li><p>.The 
2c800 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 6e  WITH clause cann
2c810 6f 74 20 62 65 20 75 73 65 64 20 77 69 74 68 69  ot be used withi
2c820 6e 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47  n a [CREATE TRIG
2c830 47 45 52 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68  GER]..<li><p>.Th
2c840 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 6d 75  e WITH clause mu
2c850 73 74 20 61 70 70 65 61 72 20 61 74 20 74 68 65  st appear at the
2c860 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 20   beginning of a 
2c870 74 6f 70 2d 6c 65 76 65 6c 20 5b 53 45 4c 45 43  top-level [SELEC
2c880 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20  T] statement.or 
2c890 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
2c8a0 20 6f 66 20 61 20 73 75 62 71 75 65 72 79 2e 20   of a subquery. 
2c8b0 20 54 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   The WITH clause
2c8c0 20 63 61 6e 6e 6f 74 20 62 65 20 70 72 65 70 65   cannot be prepe
2c8d0 6e 64 65 64 20 74 6f 0a 74 68 65 20 73 65 63 6f  nded to.the seco
2c8e0 6e 64 20 6f 72 20 73 75 62 73 65 71 75 65 6e 74  nd or subsequent
2c8f0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2c900 74 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  t of a [compound
2c910 20 73 65 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c 70   select]..<li><p
2c920 3e 0a 54 68 65 20 53 51 4c 3a 31 39 39 39 20 73  >.The SQL:1999 s
2c930 70 65 63 20 72 65 71 75 69 72 65 73 20 74 68 61  pec requires tha
2c940 74 20 74 68 65 20 52 45 43 55 52 53 49 56 45 20  t the RECURSIVE 
2c950 6b 65 79 77 6f 72 64 20 66 6f 6c 6c 6f 77 20 57  keyword follow W
2c960 49 54 48 20 69 6e 20 61 6e 79 0a 57 49 54 48 20  ITH in any.WITH 
2c970 63 6c 61 75 73 65 20 74 68 61 74 20 69 6e 63 6c  clause that incl
2c980 75 64 65 73 20 61 20 72 65 63 75 72 73 69 76 65  udes a recursive
2c990 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
2c9a0 70 72 65 73 73 69 6f 6e 2e 20 20 48 6f 77 65 76  pression.  Howev
2c9b0 65 72 2c 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62  er, for.compatib
2c9c0 69 6c 69 74 79 20 77 69 74 68 20 53 71 6c 53 65  ility with SqlSe
2c9d0 72 76 65 72 20 61 6e 64 20 4f 72 61 63 6c 65 2c  rver and Oracle,
2c9e0 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
2c9f0 20 65 6e 66 6f 72 63 65 20 74 68 69 73 20 72 75   enforce this ru
2ca00 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e  le..</ul>..<tcl>
2ca10 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
2ca20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ca30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ca40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ca50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ca60 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45 43 54 20  .Section SELECT 
2ca70 73 65 6c 65 63 74 20 7b 53 45 4c 45 43 54 20 71  select {SELECT q
2ca80 75 65 72 79 7d 0a 0a 52 65 63 75 72 73 69 76 65  uery}..Recursive
2ca90 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65  BubbleDiagram se
2caa0 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  lect-stmt.</tcl>
2cab0 0a 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54  ...<p>The SELECT
2cac0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
2cad0 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20  ed to query the 
2cae0 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a 72  database.  The.r
2caf0 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45 43  esult of a SELEC
2cb00 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  T is zero or mor
2cb10 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20 77  e rows of data w
2cb20 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68 61  here each row.ha
2cb30 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72  s a fixed number
2cb40 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 41 20   of columns.  A 
2cb50 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2cb60 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 0a 61   does not make.a
2cb70 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  ny changes to th
2cb80 65 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e  e database...<p>
2cb90 54 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d  The "[select-stm
2cba0 74 5d 22 20 73 79 6e 74 61 78 20 64 69 61 67 72  t]" syntax diagr
2cbb0 61 6d 20 61 62 6f 76 65 20 61 74 74 65 6d 70 74  am above attempt
2cbc0 73 20 74 6f 20 73 68 6f 77 20 61 73 20 6d 75 63  s to show as muc
2cbd0 68 20 6f 66 20 74 68 65 0a 53 45 4c 45 43 54 20  h of the.SELECT 
2cbe0 73 74 61 74 65 6d 65 6e 74 20 73 79 6e 74 61 78  statement syntax
2cbf0 20 61 73 20 70 6f 73 73 69 62 6c 65 20 69 6e 20   as possible in 
2cc00 61 20 73 69 6e 67 6c 65 20 64 69 61 67 72 61 6d  a single diagram
2cc10 2c 20 62 65 63 61 75 73 65 20 73 6f 6d 65 20 72  , because some r
2cc20 65 61 64 65 72 73 0a 66 69 6e 64 20 74 68 61 74  eaders.find that
2cc30 20 68 65 6c 70 66 75 6c 2e 20 20 54 68 65 20 66   helpful.  The f
2cc40 6f 6c 6c 6f 77 69 6e 67 20 22 5b 66 61 63 74 6f  ollowing "[facto
2cc50 72 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d  red-select-stmt]
2cc60 22 20 69 73 20 61 6e 20 61 6c 74 65 72 6e 61 74  " is an alternat
2cc70 69 76 65 0a 73 79 6e 74 61 78 20 64 69 61 67 72  ive.syntax diagr
2cc80 61 6d 73 20 74 68 61 74 20 65 78 70 72 65 73 73  ams that express
2cc90 65 73 20 74 68 65 20 73 61 6d 65 20 73 79 6e 74  es the same synt
2cca0 61 78 20 62 75 74 20 74 72 69 65 73 20 74 6f 20  ax but tries to 
2ccb0 62 72 65 61 6b 20 74 68 65 20 73 79 6e 74 61 78  break the syntax
2ccc0 20 0a 64 6f 77 6e 20 69 6e 74 6f 20 73 6d 61 6c   .down into smal
2ccd0 6c 65 72 20 63 68 75 6e 6b 73 2e 0a 0a 3c 74 63  ler chunks...<tc
2cce0 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  l>.RecursiveBubb
2ccf0 6c 65 44 69 61 67 72 61 6d 20 2d 2d 69 6e 69 74  leDiagram --init
2cd00 69 61 6c 6c 79 2d 68 69 64 64 65 6e 20 66 61 63  ially-hidden fac
2cd10 74 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d  tored-select-stm
2cd20 74 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f  t select-core.</
2cd30 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68  tcl>..<p>Note th
2cd40 61 74 20 74 68 65 72 65 20 61 72 65 20 70 61 74  at there are pat
2cd50 68 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 73  hs through the s
2cd60 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20 74  yntax diagrams t
2cd70 68 61 74 0a 61 72 65 20 6e 6f 74 20 61 6c 6c 6f  hat.are not allo
2cd80 77 65 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e  wed in practice.
2cd90 20 20 53 6f 6d 65 20 65 78 61 6d 70 6c 65 73 3a    Some examples:
2cda0 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 5b 56 41 4c  .<ul>.<li>A [VAL
2cdb0 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61 6e 20  UES] clause can 
2cdc0 62 65 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  be the first ele
2cdd0 6d 65 6e 74 20 69 6e 20 61 20 5b 63 6f 6d 70 6f  ment in a [compo
2cde0 75 6e 64 20 53 45 4c 45 43 54 5d 0a 20 20 20 20  und SELECT].    
2cdf0 74 68 61 74 20 75 73 65 73 20 61 20 5b 57 49 54  that uses a [WIT
2ce00 48 5d 20 63 6c 61 75 73 65 2c 20 62 75 74 20 61  H] clause, but a
2ce10 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d   [simple SELECT]
2ce20 20 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20 6f   that consists o
2ce30 66 0a 20 20 20 20 6a 75 73 74 20 61 20 5b 56 41  f.    just a [VA
2ce40 4c 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61 6e  LUES] clause can
2ce50 6e 6f 74 20 62 65 20 70 72 65 63 65 64 65 64 20  not be preceded 
2ce60 62 79 20 61 20 5b 57 49 54 48 5d 20 63 6c 61 75  by a [WITH] clau
2ce70 73 65 2e 0a 3c 6c 69 3e 54 68 65 20 5b 57 49 54  se..<li>The [WIT
2ce80 48 5d 20 63 6c 61 75 73 65 20 6d 75 73 74 20 6f  H] clause must o
2ce90 63 63 75 72 20 6f 6e 20 74 68 65 20 66 69 72 73  ccur on the firs
2cea0 74 20 53 45 4c 45 43 54 20 6f 66 20 61 20 5b 63  t SELECT of a [c
2ceb0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2e  ompound SELECT].
2cec0 0a 20 20 20 20 49 74 20 63 61 6e 6e 6f 74 20 66  .    It cannot f
2ced0 6f 6c 6c 6f 77 20 61 20 5b 63 6f 6d 70 6f 75 6e  ollow a [compoun
2cee0 64 2d 6f 70 65 72 61 74 6f 72 5d 2e 0a 3c 2f 75  d-operator]..</u
2cef0 6c 3e 0a 54 68 65 73 65 20 61 6e 64 20 6f 74 68  l>.These and oth
2cf00 65 72 20 73 69 6d 69 6c 61 72 20 73 79 6e 74 61  er similar synta
2cf10 78 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61  x restrictions a
2cf20 72 65 20 64 65 73 63 72 69 62 65 64 20 69 6e 20  re described in 
2cf30 74 68 65 20 74 65 78 74 2e 0a 0a 3c 70 3e 54 68  the text...<p>Th
2cf40 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2cf50 6e 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 63  nt is the most c
2cf60 6f 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61  omplicated comma
2cf70 6e 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61  nd in the SQL la
2cf80 6e 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20  nguage..To make 
2cf90 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  the description 
2cfa0 65 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77  easier to follow
2cfb0 2c 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 70 61  , some of the pa
2cfc0 73 73 61 67 65 73 20 62 65 6c 6f 77 20 64 65 73  ssages below des
2cfd0 63 72 69 62 65 0a 74 68 65 20 77 61 79 20 74 68  cribe.the way th
2cfe0 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20  e data returned 
2cff0 62 79 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  by a SELECT stat
2d000 65 6d 65 6e 74 20 69 73 20 64 65 74 65 72 6d 69  ement is determi
2d010 6e 65 64 20 61 73 20 61 20 73 65 72 69 65 73 20  ned as a series 
2d020 6f 66 0a 73 74 65 70 73 2e 20 49 74 20 69 73 20  of.steps. It is 
2d030 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65  important to kee
2d040 70 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20 74  p in mind that t
2d050 68 69 73 20 69 73 20 70 75 72 65 6c 79 20 69 6c  his is purely il
2d060 6c 75 73 74 72 61 74 69 76 65 20 2d 0a 69 6e 20  lustrative -.in 
2d070 70 72 61 63 74 69 63 65 20 6e 65 69 74 68 65 72  practice neither
2d080 20 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20   SQLite nor any 
2d090 6f 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e 65  other SQL engine
2d0a0 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20   is required to 
2d0b0 66 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20  follow .this or 
2d0c0 61 6e 79 20 6f 74 68 65 72 20 73 70 65 63 69 66  any other specif
2d0d0 69 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 74 63  ic process...<tc
2d0e0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 69  l>hd_fragment si
2d0f0 6d 70 6c 65 73 65 6c 65 63 74 20 7b 73 69 6d 70  mpleselect {simp
2d100 6c 65 20 53 45 4c 45 43 54 7d 3c 2f 74 63 6c 3e  le SELECT}</tcl>
2d110 0a 3c 68 33 3e 53 69 6d 70 6c 65 20 53 65 6c 65  .<h3>Simple Sele
2d120 63 74 20 50 72 6f 63 65 73 73 69 6e 67 3c 2f 68  ct Processing</h
2d130 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20  3>..<p>The core 
2d140 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
2d150 65 6d 65 6e 74 20 69 73 20 61 20 22 73 69 6d 70  ement is a "simp
2d160 6c 65 20 53 45 4c 45 43 54 22 20 73 68 6f 77 6e  le SELECT" shown
2d170 20 62 79 20 74 68 65 0a 5b 73 65 6c 65 63 74 2d   by the.[select-
2d180 63 6f 72 65 5d 20 61 6e 64 20 5b 73 69 6d 70 6c  core] and [simpl
2d190 65 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 20 73  e-select-stmt] s
2d1a0 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20 62  yntax diagrams b
2d1b0 65 6c 6f 77 2e 20 20 0a 49 6e 20 70 72 61 63 74  elow.  .In pract
2d1c0 69 63 65 2c 20 6d 6f 73 74 20 53 45 4c 45 43 54  ice, most SELECT
2d1d0 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20   statements are 
2d1e0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
2d1f0 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c 74 63 6c 3e  atements...<tcl>
2d200 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
2d210 44 69 61 67 72 61 6d 20 73 69 6d 70 6c 65 2d 73  Diagram simple-s
2d220 65 6c 65 63 74 2d 73 74 6d 74 20 73 65 6c 65 63  elect-stmt selec
2d230 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  t-core.</tcl>..<
2d240 70 3e 47 65 6e 65 72 61 74 69 6e 67 20 74 68 65  p>Generating the
2d250 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 73 69   results of a si
2d260 6d 70 6c 65 20 53 45 4c 45 43 54 0a 73 74 61 74  mple SELECT.stat
2d270 65 6d 65 6e 74 20 69 73 20 70 72 65 73 65 6e 74  ement is present
2d280 65 64 20 61 73 20 61 20 66 6f 75 72 20 73 74 65  ed as a four ste
2d290 70 20 70 72 6f 63 65 73 73 20 69 6e 20 74 68 65  p process in the
2d2a0 20 64 65 73 63 72 69 70 74 69 6f 6e 20 62 65 6c   description bel
2d2b0 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e  ow:..<ol>.  <li>
2d2c0 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61 75 73 65   <p>[FROM clause
2d2d0 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54 68  ] processing: Th
2d2e0 65 20 69 6e 70 75 74 20 64 61 74 61 20 66 6f 72  e input data for
2d2f0 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45   the simple SELE
2d300 43 54 20 69 73 0a 20 20 20 20 20 20 20 64 65 74  CT is.       det
2d310 65 72 6d 69 6e 65 64 2e 20 54 68 65 20 69 6e 70  ermined. The inp
2d320 75 74 20 64 61 74 61 20 69 73 20 65 69 74 68 65  ut data is eithe
2d330 72 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20 73  r implicitly a s
2d340 69 6e 67 6c 65 20 72 6f 77 20 77 69 74 68 20 30  ingle row with 0
2d350 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 20  .       columns 
2d360 28 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  (if there is no 
2d370 46 52 4f 4d 20 63 6c 61 75 73 65 29 20 6f 72 20  FROM clause) or 
2d380 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
2d390 20 74 68 65 20 46 52 4f 4d 0a 20 20 20 20 20 20   the FROM.      
2d3a0 20 63 6c 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20   clause..  <li> 
2d3b0 3c 70 3e 5b 57 48 45 52 45 20 63 6c 61 75 73 65  <p>[WHERE clause
2d3c0 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54 68  ] processing: Th
2d3d0 65 20 69 6e 70 75 74 20 64 61 74 61 20 69 73 20  e input data is 
2d3e0 66 69 6c 74 65 72 65 64 20 75 73 69 6e 67 20 74  filtered using t
2d3f0 68 65 20 57 48 45 52 45 0a 20 20 20 20 20 20 20  he WHERE.       
2d400 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f  clause expressio
2d410 6e 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  n.  .  <li> <p>[
2d420 47 52 4f 55 50 20 42 59 7c 47 52 4f 55 50 20 42  GROUP BY|GROUP B
2d430 59 2c 20 48 41 56 49 4e 47 20 61 6e 64 20 72 65  Y, HAVING and re
2d440 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72  sult-column expr
2d450 65 73 73 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69  ession] processi
2d460 6e 67 3a 20 0a 20 20 20 20 20 20 20 54 68 65 20  ng: .       The 
2d470 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
2d480 77 73 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62  ws is computed b
2d490 79 20 61 67 67 72 65 67 61 74 69 6e 67 20 74 68  y aggregating th
2d4a0 65 20 64 61 74 61 20 61 63 63 6f 72 64 69 6e 67  e data according
2d4b0 20 74 6f 0a 20 20 20 20 20 20 20 61 6e 79 20 47   to.       any G
2d4c0 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 61  ROUP BY clause a
2d4d0 6e 64 20 63 61 6c 63 75 6c 61 74 69 6e 67 20 74  nd calculating t
2d4e0 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 65 78  he result-set ex
2d4f0 70 72 65 73 73 69 6f 6e 73 20 66 6f 72 20 74 68  pressions for th
2d500 65 0a 20 20 20 20 20 20 20 72 6f 77 73 20 6f 66  e.       rows of
2d510 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69 6e   the filtered in
2d520 70 75 74 20 64 61 74 61 73 65 74 2e 20 20 0a 20  put dataset.  . 
2d530 20 3c 6c 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e   <li> <p>[DISTIN
2d540 43 54 7c 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20  CT|DISTINCT/ALL 
2d550 6b 65 79 77 6f 72 64 5d 20 70 72 6f 63 65 73 73  keyword] process
2d560 69 6e 67 3a 20 49 66 20 74 68 65 20 71 75 65 72  ing: If the quer
2d570 79 20 69 73 20 61 20 22 53 45 4c 45 43 54 0a 20  y is a "SELECT. 
2d580 20 20 20 20 20 20 44 49 53 54 49 4e 43 54 22 20        DISTINCT" 
2d590 71 75 65 72 79 2c 20 64 75 70 6c 69 63 61 74 65  query, duplicate
2d5a0 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65   rows are remove
2d5b0 64 20 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f  d from the set o
2d5c0 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c  f result rows..<
2d5d0 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61  /ol>..<p>There a
2d5e0 72 65 20 74 77 6f 20 74 79 70 65 73 20 6f 66 20  re two types of 
2d5f0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
2d600 61 74 65 6d 65 6e 74 20 2d 20 61 67 67 72 65 67  atement - aggreg
2d610 61 74 65 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67  ate and .non-agg
2d620 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2e 20  regate queries. 
2d630 5e 41 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  ^A simple SELECT
2d640 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 6e   statement is an
2d650 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
2d660 20 69 66 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20   if.it contains 
2d670 65 69 74 68 65 72 20 61 20 47 52 4f 55 50 20 42  either a GROUP B
2d680 59 20 63 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20  Y clause or one 
2d690 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
2d6a0 65 20 66 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74  e functions.in t
2d6b0 68 65 20 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e  he result-set. ^
2d6c0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 61 20  Otherwise, if a 
2d6d0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 63 6f  simple SELECT co
2d6e0 6e 74 61 69 6e 73 20 6e 6f 20 61 67 67 72 65 67  ntains no aggreg
2d6f0 61 74 65 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72  ate.functions or
2d700 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
2d710 73 65 2c 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d  se, it is a non-
2d720 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 2e  aggregate query.
2d730 0a 0a 3c 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72  ..<p><b>1. Deter
2d740 6d 69 6e 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75  mination of inpu
2d750 74 20 64 61 74 61 20 28 46 52 4f 4d 20 63 6c 61  t data (FROM cla
2d760 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 29 2e  use processing).
2d770 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  </b>.<tcl>hd_fra
2d780 67 6d 65 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65  gment fromclause
2d790 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b  </tcl>.<tcl>hd_k
2d7a0 65 79 77 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c  eywords {FROM cl
2d7b0 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause}</tcl>..<p>
2d7c0 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 75  The input data u
2d7d0 73 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20  sed by a simple 
2d7e0 53 45 4c 45 43 54 20 71 75 65 72 79 20 69 73 20  SELECT query is 
2d7f0 61 20 73 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69  a set of <i>N</i
2d800 3e 20 72 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e  > rows .each <i>
2d810 4d 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69  M</i> columns wi
2d820 64 65 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65  de...<p>^(If the
2d830 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
2d840 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20 73  omitted from a s
2d850 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
2d860 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  tement, then the
2d870 20 0a 69 6e 70 75 74 20 64 61 74 61 20 69 73 20   .input data is 
2d880 69 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e  implicitly a sin
2d890 67 6c 65 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c  gle row zero col
2d8a0 75 6d 6e 73 20 77 69 64 65 29 5e 20 28 69 2e 65  umns wide)^ (i.e
2d8b0 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64  . <i>N</i>=1 and
2d8c0 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c  .<i>M</i>=0)...<
2d8d0 70 3e 49 66 20 61 20 46 52 4f 4d 20 63 6c 61 75  p>If a FROM clau
2d8e0 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  se is specified,
2d8f0 20 74 68 65 20 64 61 74 61 20 6f 6e 20 77 68 69   the data on whi
2d900 63 68 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  ch a simple SELE
2d910 43 54 20 71 75 65 72 79 0a 6f 70 65 72 61 74 65  CT query.operate
2d920 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65  s comes from the
2d930 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   one or more tab
2d940 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65  les or subquerie
2d950 73 20 28 53 45 4c 45 43 54 20 73 74 61 74 65 6d  s (SELECT statem
2d960 65 6e 74 73 0a 69 6e 20 70 61 72 65 6e 74 68 65  ents.in parenthe
2d970 73 69 73 29 20 73 70 65 63 69 66 69 65 64 20 66  sis) specified f
2d980 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f  ollowing the FRO
2d990 4d 20 6b 65 79 77 6f 72 64 2e 20 5e 41 20 73 75  M keyword. ^A su
2d9a0 62 71 75 65 72 79 20 73 70 65 63 69 66 69 65 64  bquery specified
2d9b0 0a 69 6e 20 74 68 65 20 3c 79 79 74 65 72 6d 3e  .in the <yyterm>
2d9c0 74 61 62 6c 65 2d 6f 72 2d 73 75 62 71 75 65 72  table-or-subquer
2d9d0 79 3c 2f 79 79 74 65 72 6d 3e 20 66 6f 6c 6c 6f  y</yyterm> follo
2d9e0 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 63 6c  wing the FROM cl
2d9f0 61 75 73 65 20 69 6e 20 61 20 0a 73 69 6d 70 6c  ause in a .simpl
2da00 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2da10 6e 74 20 69 73 0a 68 61 6e 64 6c 65 64 20 61 73  nt is.handled as
2da20 20 69 66 20 69 74 20 77 61 73 20 61 20 74 61 62   if it was a tab
2da30 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
2da40 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20  e data returned 
2da50 62 79 20 65 78 65 63 75 74 69 6e 67 20 74 68 65  by executing the
2da60 0a 73 75 62 71 75 65 72 79 20 73 74 61 74 65 6d  .subquery statem
2da70 65 6e 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75 6d  ent. ^Each colum
2da80 6e 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  n of the subquer
2da90 79 20 68 61 73 20 74 68 65 0a 5b 63 6f 6c 6c 61  y has the.[colla
2daa0 74 69 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73  tion|collation s
2dab0 65 71 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61 66  equence] and [af
2dac0 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63  finity] of the c
2dad0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70  orresponding exp
2dae0 72 65 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20 73  ression.in the s
2daf0 75 62 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e  ubquery statemen
2db00 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 72 65  t...<p>^If there
2db10 20 69 73 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c   is only a singl
2db20 65 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  e table or subqu
2db30 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 0a  ery in the FROM.
2db40 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
2db50 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64   input data used
2db60 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
2db70 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20  tatement is the 
2db80 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 0a  contents of the.
2db90 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49 66  named table. ^If
2dba0 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74   there is more t
2dbb0 68 61 6e 20 6f 6e 65 20 74 61 62 6c 65 20 6f 72  han one table or
2dbc0 20 73 75 62 71 75 65 72 79 20 69 6e 20 46 52 4f   subquery in FRO
2dbd0 4d 20 63 6c 61 75 73 65 0a 74 68 65 6e 20 74 68  M clause.then th
2dbe0 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61 6c  e contents of al
2dbf0 6c 20 74 61 62 6c 65 73 20 61 6e 64 2f 6f 72 20  l tables and/or 
2dc00 73 75 62 71 75 65 72 69 65 73 0a 61 72 65 20 6a  subqueries.are j
2dc10 6f 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69 6e  oined into a sin
2dc20 67 6c 65 20 64 61 74 61 73 65 74 20 66 6f 72 20  gle dataset for 
2dc30 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  the simple SELEC
2dc40 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 6f  T statement to o
2dc50 70 65 72 61 74 65 20 6f 6e 2e 0a 45 78 61 63 74  perate on..Exact
2dc60 6c 79 20 68 6f 77 20 74 68 65 20 64 61 74 61 20  ly how the data 
2dc70 69 73 20 63 6f 6d 62 69 6e 65 64 20 64 65 70 65  is combined depe
2dc80 6e 64 73 20 6f 6e 20 74 68 65 20 73 70 65 63 69  nds on the speci
2dc90 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70 65 72 61 74  fic [join-operat
2dca0 6f 72 5d 20 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f  or] and.[join-co
2dcb0 6e 73 74 72 61 69 6e 74 5d 20 75 73 65 64 20 74  nstraint] used t
2dcc0 6f 20 63 6f 6e 6e 65 63 74 20 74 68 65 20 74 61  o connect the ta
2dcd0 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
2dce0 65 73 20 74 6f 67 65 74 68 65 72 2e 0a 0a 3c 70  es together...<p
2dcf0 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69 6e 20 53 51  >All joins in SQ
2dd00 4c 69 74 65 20 61 72 65 20 62 61 73 65 64 20 6f  Lite are based o
2dd10 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  n the cartesian 
2dd20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20 6c  product of the l
2dd30 65 66 74 20 61 6e 64 0a 72 69 67 68 74 2d 68 61  eft and.right-ha
2dd40 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e 54 68  nd datasets. ^Th
2dd50 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
2dd60 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
2dd70 63 74 20 64 61 74 61 73 65 74 20 61 72 65 2c 20  ct dataset are, 
2dd80 69 6e 20 0a 6f 72 64 65 72 2c 20 61 6c 6c 20 74  in .order, all t
2dd90 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
2dda0 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61  e left-hand data
2ddb0 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  set followed by 
2ddc0 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a  all the columns.
2ddd0 6f 66 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  of the right-han
2dde0 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65 72  d dataset. ^Ther
2ddf0 65 20 69 73 20 61 20 72 6f 77 20 69 6e 20 74 68  e is a row in th
2de00 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
2de10 75 63 74 20 64 61 74 61 73 65 74 0a 66 6f 72 6d  uct dataset.form
2de20 65 64 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20  ed by combining 
2de30 65 61 63 68 20 75 6e 69 71 75 65 20 63 6f 6d 62  each unique comb
2de40 69 6e 61 74 69 6f 6e 20 6f 66 20 61 20 72 6f 77  ination of a row
2de50 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 2d 68   from the left-h
2de60 61 6e 64 20 0a 61 6e 64 20 72 69 67 68 74 2d 68  and .and right-h
2de70 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e 28  and datasets. ^(
2de80 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
2de90 69 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  if the left-hand
2dea0 20 64 61 74 61 73 65 74 20 63 6f 6e 73 69 73 74   dataset consist
2deb0 73 20 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73  s of.<i>N<sub><s
2dec0 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
2ded0 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73  ></sub></i> rows
2dee0 20 6f 66 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73   of .<i>M<sub><s
2def0 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
2df00 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75  ></sub></i> colu
2df10 6d 6e 73 2c 20 61 6e 64 20 74 68 65 20 72 69 67  mns, and the rig
2df20 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ht-hand dataset 
2df30 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61  of.<i>N<sub><sma
2df40 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e  ll>right</small>
2df50 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20  </sub></i> rows 
2df60 6f 66 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61  of.<i>M<sub><sma
2df70 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e  ll>right</small>
2df80 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d  </sub></i> colum
2df90 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 63 61 72  ns, then the car
2dfa0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 69  tesian product i
2dfb0 73 20 61 0a 64 61 74 61 73 65 74 20 6f 66 20 0a  s a.dataset of .
2dfc0 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  <i>N<sub><small>
2dfd0 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  left</small></su
2dfe0 62 3e 26 74 69 6d 65 73 3b 4e 3c 73 75 62 3e 3c  b>&times;N<sub><
2dff0 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61  small>right</sma
2e000 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 0a 72 6f  ll></sub></i>.ro
2e010 77 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e  ws, each contain
2e020 69 6e 67 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73  ing .<i>M<sub><s
2e030 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
2e040 3e 3c 2f 73 75 62 3e 2b 4d 3c 73 75 62 3e 3c 73  ></sub>+M<sub><s
2e050 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c  mall>right</smal
2e060 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c  l></sub></i> col
2e070 75 6d 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20  umns.)^..<p>^If 
2e080 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f  the join-operato
2e090 72 20 69 73 20 22 43 52 4f 53 53 20 4a 4f 49 4e  r is "CROSS JOIN
2e0a0 22 2c 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c  ", "INNER JOIN",
2e0b0 20 22 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f 6d   "JOIN" or a com
2e0c0 6d 61 0a 28 22 2c 22 29 20 61 6e 64 20 74 68 65  ma.(",") and the
2e0d0 72 65 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20 55  re is no ON or U
2e0e0 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65  SING clause, the
2e0f0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
2e100 74 68 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d 70  the join is.simp
2e110 6c 79 20 74 68 65 20 63 61 72 74 65 73 69 61 6e  ly the cartesian
2e120 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20   product of the 
2e130 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68  left and right-h
2e140 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 0a 49  and datasets. .I
2e150 66 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20  f join-operator 
2e160 64 6f 65 73 20 68 61 76 65 20 4f 4e 20 6f 72 20  does have ON or 
2e170 55 53 49 4e 47 20 63 6c 61 75 73 65 73 2c 20 74  USING clauses, t
2e180 68 6f 73 65 20 61 72 65 20 68 61 6e 64 6c 65 64  hose are handled
2e190 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a 74 68   according to.th
2e1a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c  e following bull
2e1b0 65 74 20 70 6f 69 6e 74 73 3a 0a 0a 3c 75 6c 3e  et points:..<ul>
2e1c0 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20  .  <li> <p>^(If 
2e1d0 74 68 65 72 65 20 69 73 20 61 6e 20 4f 4e 20 63  there is an ON c
2e1e0 6c 61 75 73 65 20 74 68 65 6e 20 74 68 65 20 4f  lause then the O
2e1f0 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 0a  N expression is.
2e200 20 20 20 20 20 20 20 65 76 61 6c 75 61 74 65 64         evaluated
2e210 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
2e220 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
2e230 72 6f 64 75 63 74 20 61 73 20 61 20 0a 20 20 20  roduct as a .   
2e240 20 20 20 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70      [boolean exp
2e250 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72  ression]. Only r
2e260 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
2e270 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
2e280 6c 75 61 74 65 73 20 74 6f 20 0a 20 20 20 20 20  luates to .     
2e290 20 20 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75    true are inclu
2e2a0 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ded from the dat
2e2b0 61 73 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20  aset.)^..  <li> 
2e2c0 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20  <p>^If there is 
2e2d0 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 0a 20  a USING clause. 
2e2e0 20 20 20 20 20 20 74 68 65 6e 20 65 61 63 68 20        then each 
2e2f0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  of the column na
2e300 6d 65 73 20 73 70 65 63 69 66 69 65 64 20 6d 75  mes specified mu
2e310 73 74 20 65 78 69 73 74 20 69 6e 20 74 68 65 20  st exist in the 
2e320 64 61 74 61 73 65 74 73 20 74 6f 20 0a 20 20 20  datasets to .   
2e330 20 20 20 20 62 6f 74 68 20 74 68 65 20 6c 65 66      both the lef
2e340 74 20 61 6e 64 20 72 69 67 68 74 20 6f 66 20 74  t and right of t
2e350 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  he join-operator
2e360 2e 20 5e 28 46 6f 72 20 65 61 63 68 20 70 61 69  . ^(For each pai
2e370 72 20 6f 66 20 6e 61 6d 65 64 0a 20 20 20 20 20  r of named.     
2e380 20 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 65    columns, the e
2e390 78 70 72 65 73 73 69 6f 6e 20 22 6c 68 73 2e 58  xpression "lhs.X
2e3a0 20 3d 20 72 68 73 2e 58 22 20 69 73 20 65 76 61   = rhs.X" is eva
2e3b0 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  luated for each 
2e3c0 72 6f 77 20 6f 66 0a 20 20 20 20 20 20 20 74 68  row of.       th
2e3d0 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
2e3e0 75 63 74 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61  uct as a [boolea
2e3f0 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f  n expression]. O
2e400 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69  nly rows for whi
2e410 63 68 0a 20 20 20 20 20 20 20 61 6c 6c 20 73 75  ch.       all su
2e420 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65  ch expressions e
2e430 76 61 6c 75 61 74 65 73 20 74 6f 20 74 72 75 65  valuates to true
2e440 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72   are included fr
2e450 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 20 72 65  om the.       re
2e460 73 75 6c 74 20 73 65 74 2e 29 5e 20 5e 57 68 65  sult set.)^ ^Whe
2e470 6e 20 63 6f 6d 70 61 72 69 6e 67 20 76 61 6c 75  n comparing valu
2e480 65 73 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  es as a result o
2e490 66 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65  f a USING clause
2e4a0 2c 20 74 68 65 0a 20 20 20 20 20 20 20 6e 6f 72  , the.       nor
2e4b0 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 68 61  mal rules for ha
2e4c0 6e 64 6c 69 6e 67 20 61 66 66 69 6e 69 74 69 65  ndling affinitie
2e4d0 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  s, collation seq
2e4e0 75 65 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c 0a  uences and NULL.
2e4f0 20 20 20 20 20 20 20 76 61 6c 75 65 73 20 69 6e         values in
2e500 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 61 70 70   comparisons app
2e510 6c 79 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 20  ly. ^The column 
2e520 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
2e530 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20 6c   on the.       l
2e540 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  eft-hand side of
2e550 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74   the join-operat
2e560 6f 72 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  or is considered
2e570 20 74 6f 20 62 65 20 6f 6e 20 74 68 65 20 6c 65   to be on the le
2e580 66 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 73  ft-hand.       s
2e590 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ide of the compa
2e5a0 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28  rison operator (
2e5b0 3d 29 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  =) for the purpo
2e5c0 73 65 73 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ses of collation
2e5d0 20 0a 20 20 20 20 20 20 20 73 65 71 75 65 6e 63   .       sequenc
2e5e0 65 20 61 6e 64 20 61 66 66 69 6e 69 74 79 20 70  e and affinity p
2e5f0 72 65 63 65 64 65 6e 63 65 2e 0a 0a 20 20 20 20  recedence...    
2e600 20 20 20 3c 70 3e 5e 46 6f 72 20 65 61 63 68 20     <p>^For each 
2e610 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  pair of columns 
2e620 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
2e630 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
2e640 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  e column.       
2e650 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68  from the right-h
2e660 61 6e 64 20 64 61 74 61 73 65 74 20 69 73 20 6f  and dataset is o
2e670 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
2e680 6a 6f 69 6e 65 64 20 64 61 74 61 73 65 74 2e 20  joined dataset. 
2e690 5e 54 68 69 73 20 0a 20 20 20 20 20 20 20 69 73  ^This .       is
2e6a0 20 74 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72   the only differ
2e6b0 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 55  ence between a U
2e6c0 53 49 4e 47 20 63 6c 61 75 73 65 20 61 6e 64 20  SING clause and 
2e6d0 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20 4f  its equivalent O
2e6e0 4e 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61  N.       constra
2e6f0 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  int...  <li> <p>
2e700 5e 28 49 66 20 74 68 65 20 4e 41 54 55 52 41 4c  ^(If the NATURAL
2e710 20 6b 65 79 77 6f 72 64 20 69 73 20 69 6e 20 74   keyword is in t
2e720 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  he join-operator
2e730 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 20 20 20   then an.       
2e740 69 6d 70 6c 69 63 69 74 20 55 53 49 4e 47 20 63  implicit USING c
2e750 6c 61 75 73 65 20 69 73 20 61 64 64 65 64 20 74  lause is added t
2e760 6f 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74  o the join-const
2e770 72 61 69 6e 74 73 2e 20 54 68 65 20 69 6d 70 6c  raints. The impl
2e780 69 63 69 74 0a 20 20 20 20 20 20 20 55 53 49 4e  icit.       USIN
2e790 47 20 63 6c 61 75 73 65 20 63 6f 6e 74 61 69 6e  G clause contain
2e7a0 73 20 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f  s each of the co
2e7b0 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20  lumn names that 
2e7c0 61 70 70 65 61 72 20 69 6e 20 62 6f 74 68 0a 20  appear in both. 
2e7d0 20 20 20 20 20 20 74 68 65 20 6c 65 66 74 20 61        the left a
2e7e0 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e  nd right-hand in
2e7f0 70 75 74 20 64 61 74 61 73 65 74 73 2e 29 5e 20  put datasets.)^ 
2e800 5e 49 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64  ^If the left and
2e810 20 72 69 67 68 74 2d 68 61 6e 64 0a 20 20 20 20   right-hand.    
2e820 20 20 20 69 6e 70 75 74 20 64 61 74 61 73 65 74     input dataset
2e830 73 20 66 65 61 74 75 72 65 20 6e 6f 20 63 6f 6d  s feature no com
2e840 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  mon column names
2e850 2c 20 74 68 65 6e 20 74 68 65 20 4e 41 54 55 52  , then the NATUR
2e860 41 4c 20 6b 65 79 77 6f 72 64 0a 20 20 20 20 20  AL keyword.     
2e870 20 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20    has no effect 
2e880 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  on the results o
2e890 66 20 74 68 65 20 6a 6f 69 6e 2e 20 5e 41 20 55  f the join. ^A U
2e8a0 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73  SING or ON claus
2e8b0 65 20 6d 61 79 0a 20 20 20 20 20 20 20 6e 6f 74  e may.       not
2e8c0 20 62 65 20 61 64 64 65 64 20 74 6f 20 61 20 6a   be added to a j
2e8d0 6f 69 6e 20 74 68 61 74 20 73 70 65 63 69 66 69  oin that specifi
2e8e0 65 73 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b  es the NATURAL k
2e8f0 65 79 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20  eyword...  <li> 
2e900 3c 70 3e 5e 28 49 66 20 74 68 65 20 6a 6f 69 6e  <p>^(If the join
2e910 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 22  -operator is a "
2e920 4c 45 46 54 20 4a 4f 49 4e 22 20 6f 72 20 22 4c  LEFT JOIN" or "L
2e930 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 22 2c  EFT OUTER JOIN",
2e940 20 74 68 65 6e 0a 20 20 20 20 20 20 20 61 66 74   then.       aft
2e950 65 72 0a 20 20 20 20 20 20 20 74 68 65 20 4f 4e  er.       the ON
2e960 20 6f 72 20 55 53 49 4e 47 20 66 69 6c 74 65 72   or USING filter
2e970 69 6e 67 20 63 6c 61 75 73 65 73 20 68 61 76 65  ing clauses have
2e980 20 62 65 65 6e 20 61 70 70 6c 69 65 64 2c 20 61   been applied, a
2e990 6e 20 65 78 74 72 61 20 72 6f 77 20 69 73 20 0a  n extra row is .
2e9a0 20 20 20 20 20 20 20 61 64 64 65 64 20 74 6f 20         added to 
2e9b0 74 68 65 20 6f 75 74 70 75 74 20 66 6f 72 20 65  the output for e
2e9c0 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 6f  ach row in the o
2e9d0 72 69 67 69 6e 61 6c 20 6c 65 66 74 2d 68 61 6e  riginal left-han
2e9e0 64 20 69 6e 70 75 74 20 0a 20 20 20 20 20 20 20  d input .       
2e9f0 64 61 74 61 73 65 74 20 74 68 61 74 20 63 6f 72  dataset that cor
2ea00 72 65 73 70 6f 6e 64 73 20 74 6f 20 6e 6f 20 72  responds to no r
2ea10 6f 77 73 20 61 74 20 61 6c 6c 20 69 6e 20 74 68  ows at all in th
2ea20 65 20 63 6f 6d 70 6f 73 69 74 65 0a 20 20 20 20  e composite.    
2ea30 20 20 20 64 61 74 61 73 65 74 20 28 69 66 20 61     dataset (if a
2ea40 6e 79 29 2e 29 5e 20 5e 54 68 65 20 61 64 64 65  ny).)^ ^The adde
2ea50 64 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 20 4e  d rows contain N
2ea60 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  ULL values in th
2ea70 65 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 20 20  e columns.      
2ea80 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
2ea90 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 76 61 6c  ally contain val
2eaa0 75 65 73 20 63 6f 70 69 65 64 20 66 72 6f 6d 20  ues copied from 
2eab0 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 69  the right-hand i
2eac0 6e 70 75 74 0a 20 20 20 20 20 20 20 64 61 74 61  nput.       data
2ead0 73 65 74 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70  set.  .</ul>..<p
2eae0 3e 5e 28 57 68 65 6e 20 6d 6f 72 65 20 74 68 61  >^(When more tha
2eaf0 6e 20 74 77 6f 20 74 61 62 6c 65 73 20 61 72 65  n two tables are
2eb00 20 6a 6f 69 6e 65 64 20 74 6f 67 65 74 68 65 72   joined together
2eb10 20 61 73 20 70 61 72 74 20 6f 66 20 61 20 46 52   as part of a FR
2eb20 4f 4d 20 63 6c 61 75 73 65 2c 0a 74 68 65 20 6a  OM clause,.the j
2eb30 6f 69 6e 20 6f 70 65 72 61 74 69 6f 6e 73 20 61  oin operations a
2eb40 72 65 20 70 72 6f 63 65 73 73 65 64 20 69 6e 20  re processed in 
2eb50 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20  order from left 
2eb60 74 6f 20 72 69 67 68 74 2e 20 49 6e 20 6f 74 68  to right. In oth
2eb70 65 72 20 0a 77 6f 72 64 73 2c 20 74 68 65 20 46  er .words, the F
2eb80 52 4f 4d 20 63 6c 61 75 73 65 20 28 41 20 6a 6f  ROM clause (A jo
2eb90 69 6e 2d 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f  in-op-1 B join-o
2eba0 70 2d 32 20 43 29 20 69 73 20 63 6f 6d 70 75 74  p-2 C) is comput
2ebb0 65 64 20 61 73 20 0a 28 28 41 20 6a 6f 69 6e 2d  ed as .((A join-
2ebc0 6f 70 2d 31 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d  op-1 B) join-op-
2ebd0 32 20 43 29 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  2 C).)^..<tcl>hd
2ebe0 5f 66 72 61 67 6d 65 6e 74 20 63 72 6f 73 73 6a  _fragment crossj
2ebf0 6f 69 6e 20 7b 74 72 65 61 74 73 20 74 68 65 20  oin {treats the 
2ec00 43 52 4f 53 53 20 4a 4f 49 4e 20 6f 70 65 72 61  CROSS JOIN opera
2ec10 74 6f 72 20 73 70 65 63 69 61 6c 6c 79 7d 3c 2f  tor specially}</
2ec20 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 53 69 64 65 20  tcl>.<p><b>Side 
2ec30 6e 6f 74 65 3a 20 53 70 65 63 69 61 6c 20 68 61  note: Special ha
2ec40 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53 20  ndling of CROSS 
2ec50 4a 4f 49 4e 2e 3c 2f 62 3e 0a 5e 54 68 65 72 65  JOIN.</b>.^There
2ec60 20 69 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63   is no differenc
2ec70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 22 49  e between the "I
2ec80 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49  NNER JOIN", "JOI
2ec90 4e 22 20 61 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a  N" and "," join.
2eca0 6f 70 65 72 61 74 6f 72 73 2e 20 54 68 65 79 20  operators. They 
2ecb0 61 72 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 69  are completely i
2ecc0 6e 74 65 72 63 68 61 6e 67 65 61 62 6c 65 20 69  nterchangeable i
2ecd0 6e 20 53 51 4c 69 74 65 2e 0a 5e 28 54 68 65 20  n SQLite..^(The 
2ece0 22 43 52 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f 69  "CROSS JOIN" joi
2ecf0 6e 20 6f 70 65 72 61 74 6f 72 20 70 72 6f 64 75  n operator produ
2ed00 63 65 73 20 74 68 65 20 73 61 6d 65 20 72 65 73  ces the same res
2ed10 75 6c 74 20 61 73 20 74 68 65 20 0a 22 49 4e 4e  ult as the ."INN
2ed20 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
2ed30 20 61 6e 64 20 22 2c 22 20 6f 70 65 72 61 74 6f   and "," operato
2ed40 72 73 29 5e 2c 20 62 75 74 20 69 73 20 0a 5b 43  rs)^, but is .[C
2ed50 52 4f 53 53 20 4a 4f 49 4e 7c 68 61 6e 64 6c 65  ROSS JOIN|handle
2ed60 64 20 64 69 66 66 65 72 65 6e 74 6c 79 20 62 79  d differently by
2ed70 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
2ed80 69 7a 65 72 5d 0a 69 6e 20 74 68 61 74 20 69 74  izer].in that it
2ed90 20 70 72 65 76 65 6e 74 73 20 74 68 65 20 71 75   prevents the qu
2eda0 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 66 72  ery optimizer fr
2edb0 6f 6d 20 72 65 6f 72 64 65 72 69 6e 67 0a 74 68  om reordering.th
2edc0 65 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  e tables in the 
2edd0 6a 6f 69 6e 2e 20 20 41 6e 20 61 70 70 6c 69 63  join.  An applic
2ede0 61 74 69 6f 6e 20 70 72 6f 67 72 61 6d 6d 65 72  ation programmer
2edf0 20 63 61 6e 20 75 73 65 20 74 68 65 20 43 52 4f   can use the CRO
2ee00 53 53 20 4a 4f 49 4e 20 0a 6f 70 65 72 61 74 6f  SS JOIN .operato
2ee10 72 20 74 6f 20 64 69 72 65 63 74 6c 79 20 69 6e  r to directly in
2ee20 66 6c 75 65 6e 63 65 20 74 68 65 20 61 6c 67 6f  fluence the algo
2ee30 72 69 74 68 6d 20 74 68 61 74 20 69 73 20 63 68  rithm that is ch
2ee40 6f 73 65 6e 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  osen to implemen
2ee50 74 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  t.the SELECT sta
2ee60 74 65 6d 65 6e 74 2e 20 20 41 76 6f 69 64 20 75  tement.  Avoid u
2ee70 73 69 6e 67 20 43 52 4f 53 53 20 4a 4f 49 4e 20  sing CROSS JOIN 
2ee80 65 78 63 65 70 74 20 69 6e 20 73 70 65 63 69 66  except in specif
2ee90 69 63 20 73 69 74 75 61 74 69 6f 6e 73 20 0a 77  ic situations .w
2eea0 68 65 72 65 20 6d 61 6e 75 61 6c 20 63 6f 6e 74  here manual cont
2eeb0 72 6f 6c 20 6f 66 20 74 68 65 20 71 75 65 72 79  rol of the query
2eec0 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 64 65   optimizer is de
2eed0 73 69 72 65 64 2e 20 20 41 76 6f 69 64 20 75 73  sired.  Avoid us
2eee0 69 6e 67 0a 43 52 4f 53 53 20 4a 4f 49 4e 20 65  ing.CROSS JOIN e
2eef0 61 72 6c 79 20 69 6e 20 74 68 65 20 64 65 76 65  arly in the deve
2ef00 6c 6f 70 6d 65 6e 74 20 6f 66 20 61 6e 20 61 70  lopment of an ap
2ef10 70 6c 69 63 61 74 69 6f 6e 20 61 73 20 64 6f 69  plication as doi
2ef20 6e 67 20 73 6f 20 69 73 0a 61 20 3c 61 20 68 72  ng so is.a <a hr
2ef30 65 66 3d 22 68 74 74 70 3a 2f 2f 63 32 2e 63 6f  ef="http://c2.co
2ef40 6d 2f 63 67 69 2f 77 69 6b 69 3f 50 72 65 6d 61  m/cgi/wiki?Prema
2ef50 74 75 72 65 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  tureOptimization
2ef60 22 3e 70 72 65 6d 61 74 75 72 65 0a 6f 70 74 69  ">premature.opti
2ef70 6d 69 7a 61 74 69 6f 6e 3c 2f 61 3e 2e 20 20 54  mization</a>.  T
2ef80 68 65 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c  he special handl
2ef90 69 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49  ing of CROSS JOI
2efa0 4e 20 69 73 20 61 6e 20 53 51 4c 69 74 65 2d 73  N is an SQLite-s
2efb0 70 65 63 69 66 69 63 0a 66 65 61 74 75 72 65 20  pecific.feature 
2efc0 61 6e 64 20 69 73 20 6e 6f 74 20 61 20 70 61 72  and is not a par
2efd0 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53 51  t of standard SQ
2efe0 4c 2e 0a 20 20 20 20 20 20 20 0a 0a 3c 74 63 6c  L..       ..<tcl
2eff0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 68 65  >hd_fragment whe
2f000 72 65 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c  reclause</tcl>.<
2f010 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20  tcl>hd_keywords 
2f020 7b 57 48 45 52 45 20 63 6c 61 75 73 65 7d 3c 2f  {WHERE clause}</
2f030 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48  tcl>.<p><b>2. WH
2f040 45 52 45 20 63 6c 61 75 73 65 20 66 69 6c 74 65  ERE clause filte
2f050 72 69 6e 67 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28  ring.</b>..<p>^(
2f060 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  If a WHERE claus
2f070 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  e is specified, 
2f080 74 68 65 20 57 48 45 52 45 20 65 78 70 72 65 73  the WHERE expres
2f090 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
2f0a0 64 20 66 6f 72 20 0a 65 61 63 68 20 72 6f 77 20  d for .each row 
2f0b0 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74  in the input dat
2f0c0 61 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20  a as a [boolean 
2f0d0 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c  expression]. Onl
2f0e0 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  y rows for which
2f0f0 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73   the.WHERE claus
2f100 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
2f110 6c 75 61 74 65 73 20 74 6f 20 74 72 75 65 20 61  luates to true a
2f120 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d  re included from
2f130 20 74 68 65 20 64 61 74 61 73 65 74 20 62 65 66   the dataset bef
2f140 6f 72 65 0a 63 6f 6e 74 69 6e 75 69 6e 67 2e 29  ore.continuing.)
2f150 5e 20 20 52 6f 77 73 20 61 72 65 20 65 78 63 6c  ^  Rows are excl
2f160 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  uded from the re
2f170 73 75 6c 74 20 69 66 20 74 68 65 20 57 48 45 52  sult if the WHER
2f180 45 20 63 6c 61 75 73 65 0a 65 76 61 6c 75 61 74  E clause.evaluat
2f190 65 73 20 74 6f 20 65 69 74 68 65 72 20 66 61 6c  es to either fal
2f1a0 73 65 20 6f 72 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e  se or NULL...<p>
2f1b0 46 6f 72 20 61 20 4a 4f 49 4e 20 6f 72 20 49 4e  For a JOIN or IN
2f1c0 4e 45 52 20 4a 4f 49 4e 20 6f 72 20 43 52 4f 53  NER JOIN or CROS
2f1d0 53 20 4a 4f 49 4e 2c 20 74 68 65 72 65 20 69 73  S JOIN, there is
2f1e0 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62   no difference b
2f1f0 65 74 77 65 65 6e 20 0a 61 20 63 6f 6e 73 74 72  etween .a constr
2f200 61 69 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  aint expression 
2f210 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  in the WHERE cla
2f220 75 73 65 20 61 6e 64 20 6f 6e 65 20 69 6e 20 74  use and one in t
2f230 68 65 20 4f 4e 20 63 6c 61 75 73 65 2e 20 20 48  he ON clause.  H
2f240 6f 77 65 76 65 72 2c 0a 66 6f 72 20 61 20 4c 45  owever,.for a LE
2f250 46 54 20 4a 4f 49 4e 20 6f 72 20 4c 45 46 54 20  FT JOIN or LEFT 
2f260 4f 55 54 45 52 20 4a 4f 49 4e 2c 20 74 68 65 20  OUTER JOIN, the 
2f270 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 76 65  difference is ve
2f280 72 79 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 0a  ry important.  .
2f290 49 6e 20 61 20 4c 45 46 54 20 4a 4f 49 4e 2c 0a  In a LEFT JOIN,.
2f2a0 74 68 65 20 65 78 74 72 61 20 4e 55 4c 4c 20 72  the extra NULL r
2f2b0 6f 77 20 66 6f 72 20 74 68 65 20 72 69 67 68 74  ow for the right
2f2c0 2d 68 61 6e 64 20 74 61 62 6c 65 20 69 73 20 61  -hand table is a
2f2d0 64 64 65 64 20 61 66 74 65 72 20 4f 4e 20 63 6c  dded after ON cl
2f2e0 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 0a  ause processing.
2f2f0 62 75 74 20 62 65 66 6f 72 65 20 57 48 45 52 45  but before WHERE
2f300 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69   clause processi
2f310 6e 67 2e 20 20 41 20 63 6f 6e 73 74 72 61 69 6e  ng.  A constrain
2f320 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 6c  t of the form "l
2f330 65 66 74 2e 78 3d 72 69 67 68 74 2e 79 22 0a 69  eft.x=right.y".i
2f340 6e 20 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20 77  n an ON clause w
2f350 69 6c 6c 20 74 68 65 72 65 66 6f 72 65 20 61 6c  ill therefore al
2f360 6c 6f 77 20 74 68 72 6f 75 67 68 20 74 68 65 20  low through the 
2f370 61 64 64 65 64 20 61 6c 6c 2d 4e 55 4c 4c 20 72  added all-NULL r
2f380 6f 77 73 20 6f 66 20 74 68 65 0a 72 69 67 68 74  ows of the.right
2f390 20 74 61 62 6c 65 2e 20 20 42 75 74 20 69 66 20   table.  But if 
2f3a0 74 68 61 74 20 73 61 6d 65 20 63 6f 6e 73 74 72  that same constr
2f3b0 61 69 6e 74 20 69 73 20 69 6e 20 74 68 65 20 57  aint is in the W
2f3c0 48 45 52 45 20 63 6c 61 75 73 65 20 61 20 4e 55  HERE clause a NU
2f3d0 4c 4c 20 69 6e 0a 22 72 69 67 68 74 2e 79 22 20  LL in."right.y" 
2f3e0 77 69 6c 6c 20 70 72 65 76 65 6e 74 20 74 68 65  will prevent the
2f3f0 20 65 78 70 72 65 73 73 69 6f 6e 20 22 6c 65 66   expression "lef
2f400 74 2e 78 3d 72 69 67 68 74 2e 79 22 20 66 72 6f  t.x=right.y" fro
2f410 6d 20 62 65 69 6e 67 20 74 72 75 65 2c 20 61 6e  m being true, an
2f420 64 0a 74 68 75 73 20 65 78 63 6c 75 64 65 20 74  d.thus exclude t
2f430 68 61 74 20 72 6f 77 20 66 72 6f 6d 20 74 68 65  hat row from the
2f440 20 6f 75 74 70 75 74 2e 0a 0a 3c 70 3e 3c 62 3e   output...<p><b>
2f450 33 2e 20 47 65 6e 65 72 61 74 69 6f 6e 20 6f 66  3. Generation of
2f460 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
2f470 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63  lt rows.</b>.<tc
2f480 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65  l>hd_fragment re
2f490 73 75 6c 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74  sultset</tcl>.<t
2f4a0 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
2f4b0 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65  result-set expre
2f4c0 73 73 69 6f 6e 73 7d 20 7b 47 52 4f 55 50 20 42  ssions} {GROUP B
2f4d0 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63  Y}</tcl>..<p>Onc
2f4e0 65 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61  e the input data
2f4f0 20 66 72 6f 6d 20 74 68 65 20 46 52 4f 4d 20 63   from the FROM c
2f500 6c 61 75 73 65 20 68 61 73 20 62 65 65 6e 20 66  lause has been f
2f510 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 0a 57  iltered by the.W
2f520 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72  HERE clause expr
2f530 65 73 73 69 6f 6e 20 28 69 66 20 61 6e 79 29 2c  ession (if any),
2f540 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
2f550 6c 74 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20  lt rows for the 
2f560 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 61  simple .SELECT a
2f570 72 65 20 63 61 6c 63 75 6c 61 74 65 64 2e 20 45  re calculated. E
2f580 78 61 63 74 6c 79 20 68 6f 77 20 74 68 69 73 20  xactly how this 
2f590 69 73 20 64 6f 6e 65 20 64 65 70 65 6e 64 73 20  is done depends 
2f5a0 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20 73  on whether the s
2f5b0 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 69 73  imple .SELECT is
2f5c0 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 6f 72   an aggregate or
2f5d0 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71   non-aggregate q
2f5e0 75 65 72 79 2c 20 61 6e 64 20 77 68 65 74 68 65  uery, and whethe
2f5f0 72 20 6f 72 20 6e 6f 74 20 61 20 47 52 4f 55 50  r or not a GROUP
2f600 0a 42 59 20 63 6c 61 75 73 65 20 77 61 73 20 73  .BY clause was s
2f610 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 20 54  pecified...<p> T
2f620 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65  he list of expre
2f630 73 73 69 6f 6e 73 20 62 65 74 77 65 65 6e 20 74  ssions between t
2f640 68 65 20 53 45 4c 45 43 54 20 61 6e 64 20 46 52  he SELECT and FR
2f650 4f 4d 20 6b 65 79 77 6f 72 64 73 20 69 73 20 6b  OM keywords is k
2f660 6e 6f 77 6e 20 61 73 0a 74 68 65 20 72 65 73 75  nown as.the resu
2f670 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
2f680 73 74 2e 20 20 5e 49 66 20 61 20 72 65 73 75 6c  st.  ^If a resul
2f690 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
2f6a0 74 68 65 20 73 70 65 63 69 61 6c 20 65 78 70 72  the special expr
2f6b0 65 73 73 69 6f 6e 0a 22 2a 22 20 74 68 65 6e 20  ession."*" then 
2f6c0 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  all columns in t
2f6d0 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61 72  he input data ar
2f6e0 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66 6f  e substituted fo
2f6f0 72 20 74 68 61 74 20 6f 6e 65 20 65 78 70 72 65  r that one expre
2f700 73 73 69 6f 6e 2e 0a 5e 28 49 66 20 74 68 65 20  ssion..^(If the 
2f710 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
2f720 65 20 61 6c 69 61 73 20 6f 66 20 61 20 74 61 62  e alias of a tab
2f730 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
2f740 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
2f750 65 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 22 2e  e.followed by ".
2f760 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75  *" then all colu
2f770 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d  mns from the nam
2f780 65 64 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ed table or subq
2f790 75 65 72 79 20 61 72 65 0a 73 75 62 73 74 69 74  uery are.substit
2f7a0 75 74 65 64 20 66 6f 72 20 74 68 65 20 73 69 6e  uted for the sin
2f7b0 67 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 29  gle expression.)
2f7c0 5e 20 5e 28 49 74 20 69 73 20 61 6e 20 65 72 72  ^ ^(It is an err
2f7d0 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20  or to use a "*" 
2f7e0 6f 72 0a 22 61 6c 69 61 73 2e 2a 22 20 65 78 70  or."alias.*" exp
2f7f0 72 65 73 73 69 6f 6e 20 69 6e 20 61 6e 79 20 63  ression in any c
2f800 6f 6e 74 65 78 74 20 6f 74 68 65 72 20 74 68 61  ontext other tha
2f810 6e 20 61 20 72 65 73 75 6c 74 20 65 78 70 72 65  n a result expre
2f820 73 73 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28  ssion list.)^.^(
2f830 49 74 20 69 73 20 61 6c 73 6f 20 61 6e 20 65 72  It is also an er
2f840 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22  ror to use a "*"
2f850 20 6f 72 20 22 61 6c 69 61 73 2e 2a 22 20 65 78   or "alias.*" ex
2f860 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 20 73 69  pression in a si
2f870 6d 70 6c 65 20 53 45 4c 45 43 54 0a 71 75 65 72  mple SELECT.quer
2f880 79 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  y that does not 
2f890 68 61 76 65 20 61 20 46 52 4f 4d 20 63 6c 61 75  have a FROM clau
2f8a0 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65  se.)^..<p> ^(The
2f8b0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
2f8c0 6e 73 20 69 6e 20 74 68 65 20 72 6f 77 73 20 72  ns in the rows r
2f8d0 65 74 75 72 6e 65 64 20 62 79 20 61 20 73 69 6d  eturned by a sim
2f8e0 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
2f8f0 6d 65 6e 74 0a 69 73 20 65 71 75 61 6c 20 74 6f  ment.is equal to
2f900 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
2f910 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
2f920 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  e result express
2f930 69 6f 6e 20 6c 69 73 74 20 61 66 74 65 72 0a 73  ion list after.s
2f940 75 62 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 2a  ubstitution of *
2f950 20 61 6e 64 20 61 6c 69 61 73 2e 2a 20 65 78 70   and alias.* exp
2f960 72 65 73 73 69 6f 6e 73 2e 29 5e 20 45 61 63 68  ressions.)^ Each
2f970 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 63   result row is c
2f980 61 6c 63 75 6c 61 74 65 64 20 62 79 0a 65 76 61  alculated by.eva
2f990 6c 75 61 74 69 6e 67 20 74 68 65 20 65 78 70 72  luating the expr
2f9a0 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72  essions in the r
2f9b0 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
2f9c0 20 6c 69 73 74 20 77 69 74 68 20 72 65 73 70 65   list with respe
2f9d0 63 74 20 74 6f 20 61 0a 73 69 6e 67 6c 65 20 72  ct to a.single r
2f9e0 6f 77 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61  ow of input data
2f9f0 20 6f 72 2c 20 66 6f 72 20 61 67 67 72 65 67 61   or, for aggrega
2fa00 74 65 20 71 75 65 72 69 65 73 2c 20 77 69 74 68  te queries, with
2fa10 20 72 65 73 70 65 63 74 20 74 6f 20 61 20 67 72   respect to a gr
2fa20 6f 75 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75  oup.of rows...<u
2fa30 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  l>.  <li><p>^If 
2fa40 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
2fa50 6d 65 6e 74 20 69 73 20 3c 62 3e 61 20 6e 6f 6e  ment is <b>a non
2fa60 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
2fa70 3c 2f 62 3e 2c 20 74 68 65 6e 20 0a 20 20 20 20  </b>, then .    
2fa80 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
2fa90 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
2faa0 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 73  pression list is
2fab0 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
2fac0 61 63 68 20 72 6f 77 20 69 6e 0a 20 20 20 20 74  ach row in.    t
2fad0 68 65 20 64 61 74 61 73 65 74 20 66 69 6c 74 65  he dataset filte
2fae0 72 65 64 20 62 79 20 74 68 65 20 57 48 45 52 45  red by the WHERE
2faf0 20 63 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e   clause...  <li>
2fb00 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43  <p>^If the SELEC
2fb10 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c  T statement is <
2fb20 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  b>an aggregate q
2fb30 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 20 47  uery without a G
2fb40 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20  ROUP.    BY</b> 
2fb50 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63  clause, then eac
2fb60 68 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  h aggregate expr
2fb70 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
2fb80 73 75 6c 74 2d 73 65 74 20 69 73 20 0a 20 20 20  sult-set is .   
2fb90 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
2fba0 61 63 72 6f 73 73 20 74 68 65 20 65 6e 74 69 72  across the entir
2fbb0 65 20 64 61 74 61 73 65 74 2e 20 5e 45 61 63 68  e dataset. ^Each
2fbc0 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
2fbd0 78 70 72 65 73 73 69 6f 6e 0a 20 20 20 20 69 6e  xpression.    in
2fbe0 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20   the result-set 
2fbf0 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63  is evaluated onc
2fc00 65 20 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61  e for an arbitra
2fc10 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f  rily selected ro
2fc20 77 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74  w of.    the dat
2fc30 61 73 65 74 2e 20 5e 54 68 65 20 73 61 6d 65 20  aset. ^The same 
2fc40 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65  arbitrarily sele
2fc50 63 74 65 64 20 72 6f 77 20 69 73 20 75 73 65 64  cted row is used
2fc60 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20 6e 6f   for each.    no
2fc70 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
2fc80 65 73 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20  ession. ^Or, if 
2fc90 74 68 65 20 64 61 74 61 73 65 74 20 63 6f 6e 74  the dataset cont
2fca0 61 69 6e 73 20 7a 65 72 6f 20 72 6f 77 73 2c 20  ains zero rows, 
2fcb0 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 6e  then .    each n
2fcc0 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
2fcd0 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
2fce0 61 74 65 64 20 61 67 61 69 6e 73 74 20 61 20 72  ated against a r
2fcf0 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20 20  ow consisting.  
2fd00 20 20 65 6e 74 69 72 65 6c 79 20 6f 66 20 4e 55    entirely of NU
2fd10 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20 3c  LL values...   <
2fd20 70 3e 5e 54 68 65 20 73 69 6e 67 6c 65 20 72 6f  p>^The single ro
2fd30 77 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  w of result-set 
2fd40 64 61 74 61 20 63 72 65 61 74 65 64 20 62 79 20  data created by 
2fd50 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61  evaluating the a
2fd60 67 67 72 65 67 61 74 65 0a 20 20 20 20 61 6e 64  ggregate.    and
2fd70 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
2fd80 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
2fd90 65 20 72 65 73 75 6c 74 2d 73 65 74 20 66 6f 72  e result-set for
2fda0 6d 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ms the result of
2fdb0 20 61 6e 0a 20 20 20 20 61 67 67 72 65 67 61 74   an.    aggregat
2fdc0 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20  e query without 
2fdd0 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
2fde0 65 2e 20 5e 41 6e 20 61 67 67 72 65 67 61 74 65  e. ^An aggregate
2fdf0 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61   query without a
2fe00 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c  .    GROUP BY cl
2fe10 61 75 73 65 20 61 6c 77 61 79 73 20 72 65 74 75  ause always retu
2fe20 72 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20  rns exactly one 
2fe30 72 6f 77 20 6f 66 20 64 61 74 61 2c 20 65 76 65  row of data, eve
2fe40 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 20  n if there are. 
2fe50 20 20 20 7a 65 72 6f 20 72 6f 77 73 20 6f 66 20     zero rows of 
2fe60 69 6e 70 75 74 20 64 61 74 61 2e 0a 0a 20 20 3c  input data...  <
2fe70 6c 69 3e 3c 70 3e 5e 28 49 66 20 74 68 65 20 53  li><p>^(If the S
2fe80 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
2fe90 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61  is <b>an aggrega
2fea0 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20  te query with a 
2feb0 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e  GROUP.    BY</b>
2fec0 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61   clause, then ea
2fed0 63 68 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  ch of the expres
2fee0 73 69 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20  sions specified 
2fef0 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 20  as part of the. 
2ff00 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75     GROUP BY clau
2ff10 73 65 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  se is evaluated 
2ff20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
2ff30 74 68 65 20 64 61 74 61 73 65 74 2e 20 45 61 63  the dataset. Eac
2ff40 68 20 72 6f 77 0a 20 20 20 20 69 73 20 74 68 65  h row.    is the
2ff50 6e 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20  n assigned to a 
2ff60 22 67 72 6f 75 70 22 20 62 61 73 65 64 20 6f 6e  "group" based on
2ff70 20 74 68 65 20 72 65 73 75 6c 74 73 3b 20 72 6f   the results; ro
2ff80 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20  ws for which.   
2ff90 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
2ffa0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 47  evaluating the G
2ffb0 52 4f 55 50 20 42 59 20 65 78 70 72 65 73 73 69  ROUP BY expressi
2ffc0 6f 6e 73 20 61 72 65 20 74 68 65 20 73 61 6d 65  ons are the same
2ffd0 20 67 65 74 0a 20 20 20 20 61 73 73 69 67 6e 65   get.    assigne
2ffe0 64 20 74 6f 20 74 68 65 20 73 61 6d 65 20 67 72  d to the same gr
2fff0 6f 75 70 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20  oup.)^ ^For the 
30000 70 75 72 70 6f 73 65 73 20 6f 66 20 67 72 6f 75  purposes of grou
30010 70 69 6e 67 20 72 6f 77 73 2c 20 4e 55 4c 4c 20  ping rows, NULL 
30020 0a 20 20 20 20 76 61 6c 75 65 73 20 61 72 65 20  .    values are 
30030 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c  considered equal
30040 2e 20 5e 54 68 65 20 75 73 75 61 6c 20 72 75 6c  . ^The usual rul
30050 65 73 20 66 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f  es for [collatio
30060 6e 7c 73 65 6c 65 63 74 69 6e 67 20 61 0a 20 20  n|selecting a.  
30070 20 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75    collation sequ
30080 65 6e 63 65 5d 20 77 69 74 68 20 77 68 69 63 68  ence] with which
30090 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
300a0 20 76 61 6c 75 65 73 20 61 70 70 6c 79 20 77 68   values apply wh
300b0 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 0a 20 20  en evaluating.  
300c0 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e    expressions in
300d0 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
300e0 73 65 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73  se.  ^The expres
300f0 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 47 52 4f  sions in the GRO
30100 55 50 20 42 59 20 63 6c 61 75 73 65 0a 20 20 20  UP BY clause.   
30110 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e   do <em>not</em>
30120 20 68 61 76 65 20 74 6f 20 62 65 20 65 78 70 72   have to be expr
30130 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 70 70  essions that app
30140 65 61 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ear in the resul
30150 74 2e 20 5e 54 68 65 0a 20 20 20 20 65 78 70 72  t. ^The.    expr
30160 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f  essions in a GRO
30170 55 50 20 42 59 20 63 6c 61 75 73 65 20 6d 61 79  UP BY clause may
30180 20 6e 6f 74 20 62 65 20 61 67 67 72 65 67 61 74   not be aggregat
30190 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 0a  e expressions...
301a0 20 20 20 20 3c 70 3e 5e 28 49 66 20 61 20 48 41      <p>^(If a HA
301b0 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73  VING clause is s
301c0 70 65 63 69 66 69 65 64 2c 20 69 74 20 69 73 20  pecified, it is 
301d0 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
301e0 6f 72 20 65 61 63 68 20 67 72 6f 75 70 20 0a 20  or each group . 
301f0 20 20 20 6f 66 20 72 6f 77 73 20 61 73 20 61 20     of rows as a 
30200 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
30210 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 72 65 73  ion]. If the res
30220 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult of evaluatin
30230 67 20 74 68 65 0a 20 20 20 20 48 41 56 49 4e 47  g the.    HAVING
30240 20 63 6c 61 75 73 65 20 69 73 20 66 61 6c 73 65   clause is false
30250 2c 20 74 68 65 20 67 72 6f 75 70 20 69 73 20 64  , the group is d
30260 69 73 63 61 72 64 65 64 2e 29 5e 20 5e 49 66 20  iscarded.)^ ^If 
30270 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  the HAVING claus
30280 65 20 69 73 0a 20 20 20 20 61 6e 20 61 67 67 72  e is.    an aggr
30290 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
302a0 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
302b0 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77  d across all row
302c0 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20  s in the group. 
302d0 5e 49 66 0a 20 20 20 20 61 20 48 41 56 49 4e 47  ^If.    a HAVING
302e0 20 63 6c 61 75 73 65 20 69 73 20 61 20 6e 6f 6e   clause is a non
302f0 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
30300 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61  ssion, it is eva
30310 6c 75 61 74 65 64 20 77 69 74 68 20 72 65 73 70  luated with resp
30320 65 63 74 0a 20 20 20 20 74 6f 20 61 6e 20 61 72  ect.    to an ar
30330 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
30340 65 64 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20  ed row from the 
30350 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 48 41 56  group.  ^The HAV
30360 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ING expression m
30370 61 79 0a 20 20 20 20 72 65 66 65 72 20 74 6f 20  ay.    refer to 
30380 76 61 6c 75 65 73 2c 20 65 76 65 6e 20 61 67 67  values, even agg
30390 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
303a0 2c 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69  , that are not i
303b0 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70  n the result.</p
303c0 3e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20  >..    <p>^Each 
303d0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
303e0 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20  e result-set is 
303f0 74 68 65 6e 20 65 76 61 6c 75 61 74 65 64 20 6f  then evaluated o
30400 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 20 20 20  nce for each.   
30410 20 67 72 6f 75 70 20 6f 66 20 72 6f 77 73 2e 20   group of rows. 
30420 5e 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69  ^If the expressi
30430 6f 6e 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  on is an aggrega
30440 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  te expression, i
30450 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61  t is .    evalua
30460 74 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72  ted across all r
30470 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ows in the group
30480 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74  . ^Otherwise, it
30490 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67   is evaluated ag
304a0 61 69 6e 73 74 0a 20 20 20 20 61 20 73 69 6e 67  ainst.    a sing
304b0 6c 65 20 61 72 62 69 74 72 61 72 69 6c 79 20 63  le arbitrarily c
304c0 68 6f 73 65 6e 20 72 6f 77 20 66 72 6f 6d 20 77  hosen row from w
304d0 69 74 68 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ithin the group.
304e0 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f   ^If there is mo
304f0 72 65 0a 20 20 20 20 74 68 61 6e 20 6f 6e 65 20  re.    than one 
30500 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78  non-aggregate ex
30510 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
30520 72 65 73 75 6c 74 2d 73 65 74 2c 20 74 68 65 6e  result-set, then
30530 20 61 6c 6c 20 73 75 63 68 0a 20 20 20 20 65 78   all such.    ex
30540 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76  pressions are ev
30550 61 6c 75 61 74 65 64 20 66 6f 72 20 74 68 65 20  aluated for the 
30560 73 61 6d 65 20 72 6f 77 2e 0a 0a 20 20 20 20 3c  same row...    <
30570 70 3e 5e 45 61 63 68 20 67 72 6f 75 70 20 6f 66  p>^Each group of
30580 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 20 72   input dataset r
30590 6f 77 73 20 63 6f 6e 74 72 69 62 75 74 65 73 20  ows contributes 
305a0 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 74 6f 20  a single row to 
305b0 74 68 65 20 0a 20 20 20 20 73 65 74 20 6f 66 20  the .    set of 
305c0 72 65 73 75 6c 74 20 72 6f 77 73 2e 20 5e 53 75  result rows. ^Su
305d0 62 6a 65 63 74 20 74 6f 20 66 69 6c 74 65 72 69  bject to filteri
305e0 6e 67 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ng associated wi
305f0 74 68 20 74 68 65 20 44 49 53 54 49 4e 43 54 0a  th the DISTINCT.
30600 20 20 20 20 6b 65 79 77 6f 72 64 2c 20 74 68 65      keyword, the
30610 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
30620 72 65 74 75 72 6e 65 64 20 62 79 20 61 6e 20 61  returned by an a
30630 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
30640 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20  ith a GROUP.    
30650 42 59 20 63 6c 61 75 73 65 20 69 73 20 74 68 65  BY clause is the
30660 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d   same as the num
30670 62 65 72 20 6f 66 20 67 72 6f 75 70 73 20 6f 66  ber of groups of
30680 20 72 6f 77 73 20 70 72 6f 64 75 63 65 64 20 62   rows produced b
30690 79 20 61 70 70 6c 79 69 6e 67 0a 20 20 20 20 74  y applying.    t
306a0 68 65 20 47 52 4f 55 50 20 42 59 20 61 6e 64 20  he GROUP BY and 
306b0 48 41 56 49 4e 47 20 63 6c 61 75 73 65 73 20 74  HAVING clauses t
306c0 6f 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69  o the filtered i
306d0 6e 70 75 74 20 64 61 74 61 73 65 74 2e 0a 3c 2f  nput dataset..</
306e0 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ul>..<tcl>hd_fra
306f0 67 6d 65 6e 74 20 62 61 72 65 61 67 67 20 7b 62  gment bareagg {b
30700 61 72 65 20 61 67 67 72 65 67 61 74 65 20 74 65  are aggregate te
30710 72 6d 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62  rms}</tcl>.<p><b
30720 3e 53 69 64 65 20 6e 6f 74 65 3a 20 42 61 72 65  >Side note: Bare
30730 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20 61   columns in an a
30740 67 67 72 65 67 61 74 65 20 71 75 65 72 69 65 73  ggregate queries
30750 2e 3c 2f 62 3e 0a 54 68 65 20 75 73 75 61 6c 20  .</b>.The usual 
30760 63 61 73 65 20 69 73 20 74 68 61 74 20 61 6c 6c  case is that all
30770 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e   column names in
30780 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75   an aggregate qu
30790 65 72 79 20 61 72 65 20 65 69 74 68 65 72 0a 61  ery are either.a
307a0 72 67 75 6d 65 6e 74 73 20 74 6f 20 5b 61 67 67  rguments to [agg
307b0 66 75 6e 63 7c 61 67 67 72 65 67 61 74 65 20 66  func|aggregate f
307c0 75 6e 63 74 69 6f 6e 73 5d 20 6f 72 20 65 6c 73  unctions] or els
307d0 65 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  e appear in the 
307e0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e  GROUP BY clause.
307f0 0a 41 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  .A result column
30800 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20   which contains 
30810 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 68  a column name th
30820 61 74 20 69 73 20 6e 6f 74 20 77 69 74 68 69 6e  at is not within
30830 20 61 6e 0a 61 67 67 72 65 67 61 74 65 20 66 75   an.aggregate fu
30840 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 61 74 20  nction and that 
30850 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20  does not appear 
30860 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59 20  in the GROUP BY 
30870 63 6c 61 75 73 65 20 28 69 66 0a 6f 6e 65 20 65  clause (if.one e
30880 78 69 73 74 73 29 20 69 73 20 63 61 6c 6c 65 64  xists) is called
30890 20 61 20 22 62 61 72 65 22 20 63 6f 6c 75 6d 6e   a "bare" column
308a0 2e 0a 45 78 61 6d 70 6c 65 3a 0a 3c 62 6c 6f 63  ..Example:.<bloc
308b0 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 53 45 4c  kquote><pre>.SEL
308c0 45 43 54 20 61 2c 20 62 2c 20 73 75 6d 28 63 29  ECT a, b, sum(c)
308d0 20 46 52 4f 4d 20 74 61 62 31 20 47 52 4f 55 50   FROM tab1 GROUP
308e0 20 42 59 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f 62   BY a;.</pre></b
308f0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 70 3e 49 6e  lockquote>.<p>In
30900 20 74 68 65 20 71 75 65 72 79 20 61 62 6f 76 65   the query above
30910 2c 20 74 68 65 20 22 61 22 20 63 6f 6c 75 6d 6e  , the "a" column
30920 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   is part of the 
30930 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 0a  GROUP BY clause.
30940 61 6e 64 20 73 6f 20 65 61 63 68 20 72 6f 77 20  and so each row 
30950 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 63 6f  of the output co
30960 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 66 20 74 68  ntains one of th
30970 65 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75 65  e distinct value
30980 73 20 66 6f 72 0a 22 61 22 2e 20 20 54 68 65 20  s for."a".  The 
30990 22 63 22 20 63 6f 6c 75 6d 6e 20 69 73 20 63 6f  "c" column is co
309a0 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74  ntained within t
309b0 68 65 20 5b 73 75 6d 28 29 5d 20 61 67 67 72 65  he [sum()] aggre
309c0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 61 6e  gate function.an
309d0 64 20 73 6f 20 74 68 61 74 20 6f 75 74 70 75 74  d so that output
309e0 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 73   column is the s
309f0 75 6d 20 6f 66 20 61 6c 6c 20 22 63 22 20 76 61  um of all "c" va
30a00 6c 75 65 73 20 69 6e 20 72 6f 77 73 20 74 68 61  lues in rows tha
30a10 74 0a 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  t.have the same 
30a20 76 61 6c 75 65 20 66 6f 72 20 22 61 22 2e 20 20  value for "a".  
30a30 42 75 74 20 77 68 61 74 20 69 73 20 74 68 65 20  But what is the 
30a40 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 62 61  result of the ba
30a50 72 65 20 0a 63 6f 6c 75 6d 6e 20 22 62 22 3f 20  re .column "b"? 
30a60 54 68 65 20 61 6e 73 77 65 72 20 69 73 20 74 68  The answer is th
30a70 61 74 20 74 68 65 20 22 62 22 20 72 65 73 75 6c  at the "b" resul
30a80 74 20 77 69 6c 6c 20 62 65 20 74 68 65 0a 76 61  t will be the.va
30a90 6c 75 65 20 66 6f 72 20 22 62 22 20 69 6e 20 6f  lue for "b" in o
30aa0 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  ne of the input 
30ab0 72 6f 77 73 20 74 68 61 74 20 66 6f 72 6d 20 74  rows that form t
30ac0 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 54 68  he aggregate..Th
30ad0 65 20 70 72 6f 62 6c 65 6d 20 69 73 20 74 68 61  e problem is tha
30ae0 74 20 79 6f 75 20 75 73 75 61 6c 6c 79 20 64 6f  t you usually do
30af0 20 6e 6f 74 20 6b 6e 6f 77 20 77 68 69 63 68 20   not know which 
30b00 69 6e 70 75 74 20 72 6f 77 20 69 73 20 75 73 65  input row is use
30b10 64 0a 74 6f 20 63 6f 6d 70 75 74 65 20 22 62 22  d.to compute "b"
30b20 2c 20 61 6e 64 20 73 6f 20 69 6e 20 6d 61 6e 79  , and so in many
30b30 20 63 61 73 65 73 20 74 68 65 20 76 61 6c 75 65   cases the value
30b40 20 66 6f 72 20 22 62 22 20 69 73 20 75 6e 64 65   for "b" is unde
30b50 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a 3c 70 3e 0a  fined..</p>.<p>.
30b60 53 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69  Special processi
30b70 6e 67 20 6f 63 63 75 72 73 20 6f 63 63 75 72 73  ng occurs occurs
30b80 20 77 68 65 6e 20 74 68 65 20 61 67 67 72 65 67   when the aggreg
30b90 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ate function is 
30ba0 0a 65 69 74 68 65 72 20 5b 6d 61 78 41 67 67 46  .either [maxAggF
30bb0 75 6e 63 7c 6d 69 6e 28 29 5d 20 6f 72 20 5b 6d  unc|min()] or [m
30bc0 69 6e 41 67 67 46 75 6e 63 7c 6d 61 78 28 29 5d  inAggFunc|max()]
30bd0 2e 20 20 45 78 61 6d 70 6c 65 3a 0a 3c 62 6c 6f  .  Example:.<blo
30be0 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 53 45  ckquote><pre>.SE
30bf0 4c 45 43 54 20 61 2c 20 62 2c 20 6d 61 78 28 63  LECT a, b, max(c
30c00 29 20 46 52 4f 4d 20 74 61 62 31 20 47 52 4f 55  ) FROM tab1 GROU
30c10 50 20 42 59 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f  P BY a;.</pre></
30c20 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 57 68 65 6e  blockquote>.When
30c30 20 74 68 65 20 5b 6d 61 78 41 67 67 46 75 6e 63   the [maxAggFunc
30c40 7c 6d 69 6e 28 29 5d 20 6f 72 20 5b 6d 69 6e 41  |min()] or [minA
30c50 67 67 46 75 6e 63 7c 6d 61 78 28 29 5d 20 61 67  ggFunc|max()] ag
30c60 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
30c70 73 20 0a 61 72 65 20 75 73 65 64 20 69 6e 20 61  s .are used in a
30c80 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n aggregate quer
30c90 79 2c 20 61 6c 6c 20 62 61 72 65 20 63 6f 6c 75  y, all bare colu
30ca0 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
30cb0 74 20 73 65 74 20 0a 74 61 6b 65 20 76 61 6c 75  t set .take valu
30cc0 65 73 20 66 72 6f 6d 20 74 68 65 20 69 6e 70 75  es from the inpu
30cd0 74 0a 72 6f 77 20 77 68 69 63 68 20 61 6c 73 6f  t.row which also
30ce0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 69   contains the mi
30cf0 6e 69 6d 75 6d 20 6f 72 20 6d 61 78 69 6d 75 6d  nimum or maximum
30d00 2e 20 20 53 6f 20 69 6e 20 74 68 65 20 71 75 65  .  So in the que
30d10 72 79 0a 61 62 6f 76 65 2c 20 74 68 65 20 76 61  ry.above, the va
30d20 6c 75 65 20 6f 66 20 74 68 65 20 22 62 22 20 63  lue of the "b" c
30d30 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 6f 75 74  olumn in the out
30d40 70 75 74 20 77 69 6c 6c 20 62 65 20 74 68 65 20  put will be the 
30d50 76 61 6c 75 65 20 6f 66 0a 74 68 65 20 22 62 22  value of.the "b"
30d60 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 69   column in the i
30d70 6e 70 75 74 20 72 6f 77 20 74 68 61 74 20 68 61  nput row that ha
30d80 73 20 74 68 65 20 6c 61 72 67 65 73 74 20 22 63  s the largest "c
30d90 22 20 76 61 6c 75 65 2e 0a 54 68 65 72 65 20 69  " value..There i
30da0 73 20 73 74 69 6c 6c 20 61 6e 20 61 6d 62 69 67  s still an ambig
30db0 75 69 74 79 20 69 66 20 74 77 6f 20 6f 72 20 6d  uity if two or m
30dc0 6f 72 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  ore of the input
30dd0 20 72 6f 77 73 20 68 61 76 65 20 74 68 65 0a 73   rows have the.s
30de0 61 6d 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 20 6d  ame minimum or m
30df0 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f 72 20  aximum value or 
30e00 69 66 20 74 68 65 20 71 75 65 72 79 20 63 6f 6e  if the query con
30e10 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20  tains more than 
30e20 6f 6e 65 0a 6d 69 6e 28 29 20 61 6e 64 2f 6f 72  one.min() and/or
30e30 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
30e40 20 66 75 6e 63 74 69 6f 6e 2e 20 4f 6e 6c 79 20   function. Only 
30e50 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 5b 6d 69  the built-in [mi
30e60 6e 41 67 67 46 75 6e 63 7c 6d 69 6e 28 29 5d 20  nAggFunc|min()] 
30e70 0a 61 6e 64 20 5b 6d 61 78 41 67 67 46 75 6e 63  .and [maxAggFunc
30e80 7c 6d 61 78 28 29 5d 20 66 75 6e 63 74 69 6f 6e  |max()] function
30e90 73 20 77 6f 72 6b 20 74 68 69 73 20 77 61 79 2e  s work this way.
30ea0 0a 3c 2f 70 3e 0a 0a 3c 70 3e 3c 62 3e 34 2e 20  .</p>..<p><b>4. 
30eb0 52 65 6d 6f 76 61 6c 20 6f 66 20 64 75 70 6c 69  Removal of dupli
30ec0 63 61 74 65 20 72 6f 77 73 20 28 44 49 53 54 49  cate rows (DISTI
30ed0 4e 43 54 20 70 72 6f 63 65 73 73 69 6e 67 29 2e  NCT processing).
30ee0 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  </b>.<tcl>hd_fra
30ef0 67 6d 65 6e 74 20 64 69 73 74 69 6e 63 74 3c 2f  gment distinct</
30f00 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79  tcl>.<tcl>hd_key
30f10 77 6f 72 64 73 20 7b 44 49 53 54 49 4e 43 54 7d  words {DISTINCT}
30f20 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f 6e 65 20  </tcl>..<p>^One 
30f30 6f 66 20 74 68 65 20 41 4c 4c 20 6f 72 20 44 49  of the ALL or DI
30f40 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 73 20  STINCT keywords 
30f50 6d 61 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 53  may follow the S
30f60 45 4c 45 43 54 20 6b 65 79 77 6f 72 64 20 69 6e  ELECT keyword in
30f70 20 61 20 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43   a .simple SELEC
30f80 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66  T statement. ^If
30f90 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45   the simple SELE
30fa0 43 54 20 69 73 20 61 20 53 45 4c 45 43 54 20 41  CT is a SELECT A
30fb0 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a 65 6e 74  LL, then the.ent
30fc0 69 72 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c  ire set of resul
30fd0 74 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72  t rows are retur
30fe0 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43  ned by the SELEC
30ff0 54 2e 20 5e 49 66 20 6e 65 69 74 68 65 72 20 41  T. ^If neither A
31000 4c 4c 20 6f 72 0a 44 49 53 54 49 4e 43 54 20 61  LL or.DISTINCT a
31010 72 65 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e  re present, then
31020 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
31030 20 61 73 20 69 66 20 41 4c 4c 20 77 65 72 65 20   as if ALL were 
31040 73 70 65 63 69 66 69 65 64 2e 20 0a 5e 49 66 20  specified. .^If 
31050 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  the simple SELEC
31060 54 20 69 73 20 61 20 53 45 4c 45 43 54 20 44 49  T is a SELECT DI
31070 53 54 49 4e 43 54 2c 20 74 68 65 6e 20 64 75 70  STINCT, then dup
31080 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72 65 20  licate rows are 
31090 72 65 6d 6f 76 65 64 0a 66 72 6f 6d 20 74 68 65  removed.from the
310a0 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
310b0 6f 77 73 20 62 65 66 6f 72 65 20 69 74 20 69 73  ows before it is
310c0 20 72 65 74 75 72 6e 65 64 2e 20 5e 46 6f 72 20   returned. ^For 
310d0 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 0a  the purposes of.
310e0 64 65 74 65 63 74 69 6e 67 20 64 75 70 6c 69 63  detecting duplic
310f0 61 74 65 20 72 6f 77 73 2c 20 74 77 6f 20 4e 55  ate rows, two NU
31100 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  LL values are co
31110 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20 65  nsidered to be e
31120 71 75 61 6c 2e 20 5e 54 68 65 0a 5b 68 6f 77 20  qual. ^The.[how 
31130 63 6f 6c 6c 61 74 69 6f 6e 20 69 73 20 64 65 74  collation is det
31140 65 72 6d 69 6e 65 64 7c 75 73 75 61 6c 20 72 75  ermined|usual ru
31150 6c 65 73 5d 20 61 70 70 6c 79 20 66 6f 72 20 73  les] apply for s
31160 65 6c 65 63 74 69 6e 67 20 61 20 63 6f 6c 6c 61  electing a colla
31170 74 69 6f 6e 0a 73 65 71 75 65 6e 63 65 20 74 6f  tion.sequence to
31180 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61   compare text va
31190 6c 75 65 73 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f  lues...<tcl>.hd_
311a0 66 72 61 67 6d 65 6e 74 20 63 6f 6d 70 6f 75 6e  fragment compoun
311b0 64 20 7b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65  d {compound sele
311c0 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 71 75  ct} {compound qu
311d0 65 72 79 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 53  ery} {compound S
311e0 45 4c 45 43 54 7d 20 7b 63 6f 6d 70 6f 75 6e 64  ELECT} {compound
311f0 20 53 45 4c 45 43 54 73 7d 0a 3c 2f 74 63 6c 3e   SELECTs}.</tcl>
31200 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64 20 53 65  .<h3>Compound Se
31210 6c 65 63 74 20 53 74 61 74 65 6d 65 6e 74 73 3c  lect Statements<
31220 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f 72 20  /h3>..<p>Two or 
31230 6d 6f 72 65 20 5b 73 69 6d 70 6c 65 20 53 45 4c  more [simple SEL
31240 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 20  ECT] statements 
31250 6d 61 79 20 62 65 20 63 6f 6e 6e 65 63 74 65 64  may be connected
31260 20 74 6f 67 65 74 68 65 72 20 74 6f 20 66 6f 72   together to for
31270 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  m.a compound SEL
31280 45 43 54 20 75 73 69 6e 67 20 74 68 65 20 55 4e  ECT using the UN
31290 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20  ION, UNION ALL, 
312a0 49 4e 54 45 52 53 45 43 54 20 6f 72 20 45 58 43  INTERSECT or EXC
312b0 45 50 54 20 6f 70 65 72 61 74 6f 72 2c 0a 61 73  EPT operator,.as
312c0 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20 66 6f   shown by the fo
312d0 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61 6d 3a  llowing diagram:
312e0 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76  ..<tcl>.Recursiv
312f0 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  eBubbleDiagram c
31300 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65 63 74 2d 73  ompound-select-s
31310 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
31320 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  In a compound SE
31330 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f  LECT, all the co
31340 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54  nstituent SELECT
31350 73 20 6d 75 73 74 20 72 65 74 75 72 6e 20 74 68  s must return th
31360 65 20 73 61 6d 65 20 0a 6e 75 6d 62 65 72 20 6f  e same .number o
31370 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73  f result columns
31380 2e 20 5e 41 73 20 74 68 65 20 63 6f 6d 70 6f 6e  . ^As the compon
31390 65 6e 74 73 20 6f 66 20 61 20 63 6f 6d 70 6f 75  ents of a compou
313a0 6e 64 20 53 45 4c 45 43 54 20 6d 75 73 74 0a 62  nd SELECT must.b
313b0 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
313c0 73 74 61 74 65 6d 65 6e 74 73 2c 20 74 68 65 79  statements, they
313d0 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e   may not contain
313e0 20 5b 4f 52 44 45 52 20 42 59 5d 20 6f 72 20 5b   [ORDER BY] or [
313f0 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73 2e 0a  LIMIT] clauses..
31400 5e 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e 64 20  ^[ORDER BY] and 
31410 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73 20  [LIMIT] clauses 
31420 6d 61 79 20 6f 6e 6c 79 20 6f 63 63 75 72 20 61  may only occur a
31430 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
31440 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e 64   entire compound
31450 0a 53 45 4c 45 43 54 2c 20 61 6e 64 20 74 68 65  .SELECT, and the
31460 6e 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 66 69  n only if the fi
31470 6e 61 6c 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  nal element of t
31480 68 65 20 63 6f 6d 70 6f 75 6e 64 20 69 73 20 6e  he compound is n
31490 6f 74 20 61 20 5b 56 41 4c 55 45 53 5d 20 63 6c  ot a [VALUES] cl
314a0 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41 20 63 6f 6d  ause...<p>^A com
314b0 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63 72 65  pound SELECT cre
314c0 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49 4f 4e  ated using UNION
314d0 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20 72 65   ALL operator re
314e0 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20 72 6f  turns all the ro
314f0 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c 45  ws.from the SELE
31500 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74 20 6f  CT to the left o
31510 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c 4c 20  f the UNION ALL 
31520 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20 61 6c  operator, and al
31530 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d 20  l the rows.from 
31540 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20 74 68  the SELECT to th
31550 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e 20 5e  e right of it. ^
31560 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72 61 74  The UNION operat
31570 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d  or works the sam
31580 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e 20 41  e way as.UNION A
31590 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  LL, except that 
315a0 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61  duplicate rows a
315b0 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  re removed from 
315c0 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75 6c 74  the final result
315d0 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54 45 52   set..^The INTER
315e0 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20 72 65  SECT operator re
315f0 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65 72 73  turns the inters
31600 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65  ection of the re
31610 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c 65 66  sults of the lef
31620 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45 4c 45  t and.right SELE
31630 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43 45 50  CTs.  ^The EXCEP
31640 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72  T operator retur
31650 6e 73 20 74 68 65 20 73 75 62 73 65 74 20 6f 66  ns the subset of
31660 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62   rows returned b
31670 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c 45 43  y the.left SELEC
31680 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 61  T that are not a
31690 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62 79 20  lso returned by 
316a0 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 53  the right-hand S
316b0 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63 61 74  ELECT. ^Duplicat
316c0 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76  e.rows are remov
316d0 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75  ed from the resu
316e0 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45 43 54  lts of INTERSECT
316f0 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70 65 72   and EXCEPT oper
31700 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74 68 65  ators before the
31710 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 72  .result set is r
31720 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e 46 6f  eturned...<p>^Fo
31730 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
31740 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 64 75  f determining du
31750 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66 6f 72  plicate rows for
31760 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
31770 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54 20  compound.SELECT 
31780 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c 4c 20  operators, NULL 
31790 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
317a0 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f 20 6f  dered equal to o
317b0 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ther NULL values
317c0 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20 66 72   and.distinct fr
317d0 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  om all non-NULL 
317e0 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63 6f 6c  values. ^The col
317f0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
31800 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
31810 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73  .two text values
31820 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61   is determined a
31830 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  s if the columns
31840 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64   of the left and
31850 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45 4c 45   right-hand.SELE
31860 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 65  CT statements we
31870 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  re the left and 
31880 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61  right-hand opera
31890 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75 61 6c  nds of the equal
318a0 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72 2c 20  s (=).operator, 
318b0 65 78 63 65 70 74 20 74 68 61 74 20 67 72 65 61  except that grea
318c0 74 65 72 20 70 72 65 63 65 64 65 6e 63 65 20 69  ter precedence i
318d0 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 74  s not assigned t
318e0 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 73  o a collation .s
318f0 65 71 75 65 6e 63 65 20 73 70 65 63 69 66 69 65  equence specifie
31900 64 20 77 69 74 68 20 74 68 65 20 70 6f 73 74 66  d with the postf
31910 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  ix COLLATE opera
31920 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e 69 74  tor. ^No affinit
31930 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  y.transformation
31940 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 74 6f  s are applied to
31950 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68 65 6e   any values when
31960 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77 73 20   comparing rows 
31970 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63 6f 6d  as part of a.com
31980 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 0a 0a  pound SELECT. ..
31990 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65 65 20  <p>^(When three 
319a0 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53  or more simple S
319b0 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e 6e 65  ELECTs are conne
319c0 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d 70  cted into a comp
319d0 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74 68 65  ound SELECT,.the
319e0 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65 66  y group from lef
319f0 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e 20 6f  t to right. In o
31a00 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 22  ther words, if "
31a10 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43 22 20  A", "B" and "C" 
31a20 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65 20 53  are all.simple S
31a30 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
31a40 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43 29 20  , (A op B op C) 
31a50 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73 20  is processed as 
31a60 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43 29 2e  ((A op B) op C).
31a70 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  )^..</p>..<tcl>h
31a80 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64 65 72  d_fragment order
31a90 62 79 20 7b 6f 72 64 65 72 20 62 79 7d 20 7b 4f  by {order by} {O
31aa0 52 44 45 52 20 42 59 7d 3c 2f 74 63 6c 3e 0a 3c  RDER BY}</tcl>.<
31ab0 68 33 3e 54 68 65 20 4f 52 44 45 52 20 42 59 20  h3>The ORDER BY 
31ac0 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e  clause</h3>..<p>
31ad0 49 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  If a SELECT stat
31ae0 65 6d 65 6e 74 20 74 68 61 74 20 72 65 74 75 72  ement that retur
31af0 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  ns more than one
31b00 20 72 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61   row does not ha
31b10 76 65 20 61 6e 0a 4f 52 44 45 52 20 42 59 20 63  ve an.ORDER BY c
31b20 6c 61 75 73 65 2c 20 74 68 65 20 6f 72 64 65 72  lause, the order
31b30 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 72 6f   in which the ro
31b40 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20  ws are returned 
31b50 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 4f 72  is undefined..Or
31b60 2c 20 69 66 20 61 20 53 45 4c 45 43 54 20 73 74  , if a SELECT st
31b70 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 68 61 76  atement does hav
31b80 65 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c  e an ORDER BY cl
31b90 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 6c  ause, then the l
31ba0 69 73 74 20 6f 66 0a 65 78 70 72 65 73 73 69 6f  ist of.expressio
31bb0 6e 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  ns attached to t
31bc0 68 65 20 4f 52 44 45 52 20 42 59 20 64 65 74 65  he ORDER BY dete
31bd0 72 6d 69 6e 65 20 74 68 65 20 6f 72 64 65 72 20  rmine the order 
31be0 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a 61 72  in which rows.ar
31bf0 65 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  e returned to th
31c00 65 20 75 73 65 72 2e 0a 0a 3c 70 3e 0a 5e 49 6e  e user...<p>.^In
31c10 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
31c20 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20  ECT] statement, 
31c30 6f 6e 6c 79 20 74 68 65 20 6c 61 73 74 20 6f 72  only the last or
31c40 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d   right-most [sim
31c50 70 6c 65 20 53 45 4c 45 43 54 5d 0a 6d 61 79 20  ple SELECT].may 
31c60 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42 59  have an ORDER BY
31c70 20 63 6c 61 75 73 65 2e 20 5e 54 68 61 74 20 4f   clause. ^That O
31c80 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 77  RDER BY clause w
31c90 69 6c 6c 20 61 70 70 6c 79 20 61 63 72 6f 73 73  ill apply across
31ca0 20 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 20 6f 66   all elements of
31cb0 0a 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 20 5e  .the compound. ^
31cc0 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73  If the right-mos
31cd0 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 5b  t element of a [
31ce0 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d  compound SELECT]
31cf0 20 69 73 20 61 20 5b 56 41 4c 55 45 53 5d 20 63   is a [VALUES] c
31d00 6c 61 75 73 65 2c 0a 74 68 65 6e 20 6e 6f 20 4f  lause,.then no O
31d10 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
31d20 73 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 74 68 61  s allowed on tha
31d30 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 0a 3c  t statement....<
31d40 70 3e 5e 52 6f 77 73 20 61 72 65 20 66 69 72 73  p>^Rows are firs
31d50 74 20 73 6f 72 74 65 64 20 62 61 73 65 64 20 6f  t sorted based o
31d60 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  n the results of
31d70 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20  .evaluating the 
31d80 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73  left-most expres
31d90 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52 44 45  sion in the ORDE
31da0 52 20 42 59 20 6c 69 73 74 2c 20 74 68 65 6e 20  R BY list, then 
31db0 74 69 65 73 20 61 72 65 20 62 72 6f 6b 65 6e 0a  ties are broken.
31dc0 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by evaluating th
31dd0 65 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d 6d 6f  e second left-mo
31de0 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  st expression an
31df0 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f 72 64  d so on. The ord
31e00 65 72 20 69 6e 20 77 68 69 63 68 0a 74 77 6f 20  er in which.two 
31e10 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 61  rows for which a
31e20 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  ll ORDER BY expr
31e30 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65  essions evaluate
31e40 20 74 6f 20 65 71 75 61 6c 20 76 61 6c 75 65 73   to equal values
31e50 20 61 72 65 0a 72 65 74 75 72 6e 65 64 20 69 73   are.returned is
31e60 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45 61 63   undefined. ^Eac
31e70 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  h ORDER BY expre
31e80 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70 74  ssion may be opt
31e90 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64  ionally followed
31ea0 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b  .by one of the k
31eb0 65 79 77 6f 72 64 73 20 41 53 43 20 28 73 6d 61  eywords ASC (sma
31ec0 6c 6c 65 72 20 76 61 6c 75 65 73 20 61 72 65 20  ller values are 
31ed0 72 65 74 75 72 6e 65 64 20 66 69 72 73 74 29 20  returned first) 
31ee0 6f 72 20 44 45 53 43 20 28 6c 61 72 67 65 72 0a  or DESC (larger.
31ef0 76 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72  values are retur
31f00 6e 65 64 20 66 69 72 73 74 29 2e 20 5e 49 66 20  ned first). ^If 
31f10 6e 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44  neither ASC or D
31f20 45 53 43 20 61 72 65 20 73 70 65 63 69 66 69 65  ESC are specifie
31f30 64 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f 72 74  d, rows.are sort
31f40 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  ed in ascending 
31f50 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20  (smaller values 
31f60 66 69 72 73 74 29 20 6f 72 64 65 72 20 62 79 20  first) order by 
31f70 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45 61 63  default...<p>Eac
31f80 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  h ORDER BY expre
31f90 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73 73  ssion is process
31fa0 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  ed as follows:</
31fb0 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ol>.<li><p>
31fc0 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59  ^If the ORDER BY
31fd0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
31fe0 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67 65   constant intege
31ff0 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 65 78 70  r K then the.exp
32000 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69  ression is consi
32010 64 65 72 65 64 20 61 6e 20 61 6c 69 61 73 20 66  dered an alias f
32020 6f 72 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c 75  or the K-th colu
32030 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
32040 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20 61 72   set.(columns ar
32050 65 20 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20  e numbered from 
32060 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 73 74  left to right st
32070 61 72 74 69 6e 67 20 77 69 74 68 20 31 29 2e 0a  arting with 1)..
32080 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20  .<li><p>^If the 
32090 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
320a0 69 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74 69  ion is an identi
320b0 66 69 65 72 20 74 68 61 74 20 63 6f 72 72 65 73  fier that corres
320c0 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61 6c 69  ponds to.the ali
320d0 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68 65  as of one of the
320e0 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 2c   output columns,
320f0 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73   then the expres
32100 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72  sion is consider
32110 65 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  ed.an alias for 
32120 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c  that column...<l
32130 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c  i><p>^Otherwise,
32140 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   if the ORDER BY
32150 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
32160 6e 79 20 6f 74 68 65 72 20 65 78 70 72 65 73 73  ny other express
32170 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76 61 6c  ion, it .is eval
32180 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 72 65  uated and the re
32190 74 75 72 6e 65 64 20 76 61 6c 75 65 20 75 73 65  turned value use
321a0 64 20 74 6f 20 6f 72 64 65 72 20 74 68 65 20 6f  d to order the o
321b0 75 74 70 75 74 20 72 6f 77 73 2e 20 5e 49 66 0a  utput rows. ^If.
321c0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
321d0 6d 65 6e 74 20 69 73 20 61 20 73 69 6d 70 6c 65  ment is a simple
321e0 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 61 6e   SELECT, then an
321f0 20 4f 52 44 45 52 20 42 59 20 6d 61 79 20 63 6f   ORDER BY may co
32200 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62 69 74 72  ntain any.arbitr
32210 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73 2e  ary expressions.
32220 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68   ^However, if th
32230 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 63 6f  e SELECT is a co
32240 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 74  mpound SELECT, t
32250 68 65 6e 0a 4f 52 44 45 52 20 42 59 20 65 78 70  hen.ORDER BY exp
32260 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72  ressions that ar
32270 65 20 6e 6f 74 20 61 6c 69 61 73 65 73 20 74 6f  e not aliases to
32280 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 20   output columns 
32290 6d 75 73 74 20 62 65 20 65 78 61 63 74 6c 79 0a  must be exactly.
322a0 74 68 65 20 73 61 6d 65 20 61 73 20 61 6e 20 65  the same as an e
322b0 78 70 72 65 73 73 69 6f 6e 20 75 73 65 64 20 61  xpression used a
322c0 73 20 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c 75  s an output colu
322d0 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46  mn..</ol>..<p>^F
322e0 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
322f0 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f 77 73 2c  of sorting rows,
32300 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70   values are comp
32310 61 72 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  ared in the same
32320 20 77 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f 6d   way.as for [com
32330 70 61 72 69 73 6f 6e 20 65 78 70 72 65 73 73 69  parison expressi
32340 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61 74  ons]. The collat
32350 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65  ion sequence use
32360 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77 6f  d to compare.two
32370 20 74 65 78 74 20 76 61 6c 75 65 73 20 69 73 20   text values is 
32380 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20 66 6f  determined as fo
32390 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c  llows:..<ol>.  <
323a0 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52  li><p>^If the OR
323b0 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
323c0 6e 20 69 73 20 61 73 73 69 67 6e 65 64 20 61 20  n is assigned a 
323d0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
323e0 63 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20 70  ce using.  the p
323f0 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45 20  ostfix [COLLATE 
32400 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20  operator], then 
32410 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  the specified co
32420 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
32430 20 69 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c 6c   is.  used..  <l
32440 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c  i><p>^Otherwise,
32450 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   if the ORDER BY
32460 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
32470 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e 20 65 78  n alias to an ex
32480 70 72 65 73 73 69 6f 6e 0a 20 20 74 68 61 74 20  pression.  that 
32490 68 61 73 20 62 65 65 6e 20 61 73 73 69 67 6e 65  has been assigne
324a0 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  d a collation se
324b0 71 75 65 6e 63 65 20 75 73 69 6e 67 20 74 68 65  quence using the
324c0 20 70 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f 4c   postfix .  [COL
324d0 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20  LATE operator], 
324e0 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69  then the collati
324f0 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 73 73 69  on sequence assi
32500 67 6e 65 64 20 74 6f 20 74 68 65 20 61 6c 69 61  gned to the alia
32510 73 65 64 0a 20 20 65 78 70 72 65 73 73 69 6f 6e  sed.  expression
32520 20 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e   is used..  <li>
32530 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  <p>^Otherwise, i
32540 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65  f the ORDER BY e
32550 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 63  xpression is a c
32560 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69 61  olumn or an alia
32570 73 20 6f 66 0a 20 20 61 6e 20 65 78 70 72 65 73  s of.  an expres
32580 73 69 6f 6e 20 74 68 61 74 20 69 73 20 61 20 63  sion that is a c
32590 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65 20  olumn, then the 
325a0 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
325b0 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 0a 20  n sequence for. 
325c0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 75   the column is u
325d0 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  sed. .  <li><p>^
325e0 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 5b  Otherwise, the [
325f0 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69 6f  BINARY] collatio
32600 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73  n sequence is us
32610 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e  ed..</ol>..<p>In
32620 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
32630 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20  ECT] statement, 
32640 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70  all ORDER BY exp
32650 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68 61 6e  ressions are han
32660 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65 73 20  dled.as aliases 
32670 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 72  for one of the r
32680 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66  esult columns of
32690 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 0a 5e   the compound..^
326a0 28 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59 20  (If an ORDER BY 
326b0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e 6f  expression is no
326c0 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6c 69  t an integer ali
326d0 61 73 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20  as, then SQLite 
326e0 73 65 61 72 63 68 65 73 0a 74 68 65 20 6c 65 66  searches.the lef
326f0 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 69 6e  t-most SELECT in
32700 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 66 6f   the compound fo
32710 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  r a result colum
32720 6e 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 65  n that matches e
32730 69 74 68 65 72 0a 74 68 65 20 73 65 63 6f 6e 64  ither.the second
32740 20 6f 72 20 74 68 69 72 64 20 72 75 6c 65 73 20   or third rules 
32750 61 62 6f 76 65 2e 20 49 66 20 61 20 6d 61 74 63  above. If a matc
32760 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
32770 73 65 61 72 63 68 20 73 74 6f 70 73 20 61 6e 64  search stops and
32780 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20  .the expression 
32790 69 73 20 68 61 6e 64 6c 65 64 20 61 73 20 61 6e  is handled as an
327a0 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72   alias for the r
327b0 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61  esult column tha
327c0 74 20 69 74 20 68 61 73 20 62 65 65 6e 0a 6d 61  t it has been.ma
327d0 74 63 68 65 64 20 61 67 61 69 6e 73 74 2e 20 4f  tched against. O
327e0 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e 65  therwise, the ne
327f0 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65  xt SELECT to the
32800 20 72 69 67 68 74 20 69 73 20 74 72 69 65 64 2c   right is tried,
32810 20 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e 49   and so on.)^.^I
32820 66 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20 65 78  f no matching ex
32830 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20  pression can be 
32840 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 72 65 73  found in the res
32850 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  ult columns of a
32860 6e 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74 20 53  ny.constituent S
32870 45 4c 45 43 54 2c 20 69 74 20 69 73 20 61 6e 20  ELECT, it is an 
32880 65 72 72 6f 72 2e 20 5e 45 61 63 68 20 74 65 72  error. ^Each ter
32890 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42  m of the ORDER B
328a0 59 20 63 6c 61 75 73 65 20 69 73 0a 70 72 6f 63  Y clause is.proc
328b0 65 73 73 65 64 20 73 65 70 61 72 61 74 65 6c 79  essed separately
328c0 20 61 6e 64 20 6d 61 79 20 62 65 20 6d 61 74 63   and may be matc
328d0 68 65 64 20 61 67 61 69 6e 73 74 20 72 65 73 75  hed against resu
328e0 6c 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20  lt columns from 
328f0 64 69 66 66 65 72 65 6e 74 0a 53 45 4c 45 43 54  different.SELECT
32900 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
32910 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e  he compound.</p>
32920 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
32930 6e 74 20 6c 69 6d 69 74 6f 66 66 73 65 74 20 7b  nt limitoffset {
32940 4c 49 4d 49 54 7d 20 7b 4f 46 46 53 45 54 7d 3c  LIMIT} {OFFSET}<
32950 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49  /tcl>.<h3>The LI
32960 4d 49 54 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a  MIT clause</h3>.
32970 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 63  .<p>^The LIMIT c
32980 6c 61 75 73 65 20 69 73 20 75 73 65 64 20 74 6f  lause is used to
32990 20 70 6c 61 63 65 20 61 6e 20 75 70 70 65 72 20   place an upper 
329a0 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d  bound on the num
329b0 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75  ber of rows.retu
329c0 72 6e 65 64 20 62 79 20 74 68 65 20 65 6e 74 69  rned by the enti
329d0 72 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  re SELECT statem
329e0 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 5b  ent...<p>^In a [
329f0 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d  compound SELECT]
32a00 2c 20 6f 6e 6c 79 20 74 68 65 0a 6c 61 73 74 20  , only the.last 
32a10 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73  or right-most [s
32a20 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 6d 61  imple SELECT] ma
32a30 79 20 63 6f 6e 74 61 69 6e 20 61 20 4c 49 4d 49  y contain a LIMI
32a40 54 20 63 6c 61 75 73 65 2e 20 20 0a 5e 49 6e 20  T clause.  .^In 
32a50 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  a [compound SELE
32a60 43 54 5d 2c 20 0a 74 68 65 20 4c 49 4d 49 54 20  CT], .the LIMIT 
32a70 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20 74  clause applies t
32a80 6f 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d  o the entire com
32a90 70 6f 75 6e 64 2c 20 6e 6f 74 20 6a 75 73 74 20  pound, not just 
32aa0 74 68 65 20 66 69 6e 61 6c 20 53 45 4c 45 43 54  the final SELECT
32ab0 2e 0a 5e 49 66 20 74 68 65 20 72 69 67 68 74 2d  ..^If the right-
32ac0 6d 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c  most [simple SEL
32ad0 45 43 54 5d 20 69 73 20 61 20 5b 56 41 4c 55 45  ECT] is a [VALUE
32ae0 53 20 63 6c 61 75 73 65 5d 20 74 68 65 6e 20 6e  S clause] then n
32af0 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a 69  o LIMIT clause.i
32b00 73 20 61 6c 6c 6f 77 65 64 2e 0a 0a 3c 70 3e 5e  s allowed...<p>^
32b10 41 6e 79 20 73 63 61 6c 61 72 20 65 78 70 72 65  Any scalar expre
32b20 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 75 73 65  ssion may be use
32b30 64 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49 54 20  d in the .LIMIT 
32b40 63 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e 67 20  clause, so long 
32b50 61 73 20 69 74 20 65 76 61 6c 75 61 74 65 73 20  as it evaluates 
32b60 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  to an integer or
32b70 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 63 61   a value that ca
32b80 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20  n be.losslessly 
32b90 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
32ba0 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 74 68 65  integer. ^If the
32bb0 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c   expression eval
32bc0 75 61 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c 20  uates to a NULL 
32bd0 0a 76 61 6c 75 65 20 6f 72 20 61 6e 79 20 6f 74  .value or any ot
32be0 68 65 72 20 76 61 6c 75 65 20 74 68 61 74 20 63  her value that c
32bf0 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73  annot be lossles
32c00 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly converted to
32c10 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 6e 0a   an integer, an.
32c20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
32c30 64 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d 49 54  d. ^If the LIMIT
32c40 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c   expression eval
32c50 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74  uates to a negat
32c60 69 76 65 20 76 61 6c 75 65 2c 0a 74 68 65 6e 20  ive value,.then 
32c70 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70 70 65  there is no uppe
32c80 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e  r bound on the n
32c90 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65  umber of rows re
32ca0 74 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72 77 69  turned. ^Otherwi
32cb0 73 65 2c 20 74 68 65 0a 53 45 4c 45 43 54 20 72  se, the.SELECT r
32cc0 65 74 75 72 6e 73 20 74 68 65 20 66 69 72 73 74  eturns the first
32cd0 20 4e 20 72 6f 77 73 20 6f 66 20 69 74 73 20 72   N rows of its r
32ce0 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79 2c 20  esult set only, 
32cf0 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 76  where N is the v
32d00 61 6c 75 65 0a 74 68 61 74 20 74 68 65 20 4c 49  alue.that the LI
32d10 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65  MIT expression e
32d20 76 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e 4f 72  valuates to. ^Or
32d30 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 20  , if the SELECT 
32d40 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 0a  statement would.
32d50 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e  return less than
32d60 20 4e 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20   N rows without 
32d70 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
32d80 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20  then the entire 
32d90 72 65 73 75 6c 74 20 73 65 74 20 69 73 0a 72 65  result set is.re
32da0 74 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54 68  turned. ..<p>^Th
32db0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 74 74  e expression att
32dc0 61 63 68 65 64 20 74 6f 20 74 68 65 20 6f 70 74  ached to the opt
32dd0 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63 6c 61  ional OFFSET cla
32de0 75 73 65 20 74 68 61 74 20 6d 61 79 20 66 6f 6c  use that may fol
32df0 6c 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c 61 75  low a.LIMIT clau
32e00 73 65 20 6d 75 73 74 20 61 6c 73 6f 20 65 76 61  se must also eva
32e10 6c 75 61 74 65 20 74 6f 20 61 6e 20 69 6e 74 65  luate to an inte
32e20 67 65 72 2c 20 6f 72 20 61 20 76 61 6c 75 65 20  ger, or a value 
32e30 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73  that can be.loss
32e40 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64  lessly converted
32e50 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   to an integer. 
32e60 5e 49 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f  ^If an expressio
32e70 6e 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20  n has an OFFSET 
32e80 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74 68 65  clause,.then the
32e90 20 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72   first M rows ar
32ea0 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  e omitted from t
32eb0 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 72 65  he result set re
32ec0 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45  turned by the SE
32ed0 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20 61  LECT.statement a
32ee0 6e 64 20 74 68 65 20 6e 65 78 74 20 4e 20 72 6f  nd the next N ro
32ef0 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 2c  ws are returned,
32f00 20 77 68 65 72 65 20 4d 20 61 6e 64 20 4e 20 61   where M and N a
32f10 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 68  re the values th
32f20 61 74 0a 74 68 65 20 4f 46 46 53 45 54 20 61 6e  at.the OFFSET an
32f30 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20  d LIMIT clauses 
32f40 65 76 61 6c 75 61 74 65 20 74 6f 2c 20 72 65 73  evaluate to, res
32f50 70 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72 2c 20  pectively. ^Or, 
32f60 69 66 20 74 68 65 20 53 45 4c 45 43 54 0a 77 6f  if the SELECT.wo
32f70 75 6c 64 20 72 65 74 75 72 6e 20 6c 65 73 73 20  uld return less 
32f80 74 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20 69 66  than M+N rows if
32f90 20 69 74 20 64 69 64 20 6e 6f 74 20 68 61 76 65   it did not have
32fa0 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
32fb0 20 74 68 65 6e 20 74 68 65 0a 66 69 72 73 74 20   then the.first 
32fc0 4d 20 72 6f 77 73 20 61 72 65 20 73 6b 69 70 70  M rows are skipp
32fd0 65 64 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69  ed and the remai
32fe0 6e 69 6e 67 20 72 6f 77 73 20 28 69 66 20 61 6e  ning rows (if an
32ff0 79 29 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e  y) are returned.
33000 20 5e 49 66 20 74 68 65 0a 4f 46 46 53 45 54 20   ^If the.OFFSET 
33010 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65 73  clause evaluates
33020 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76   to a negative v
33030 61 6c 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74  alue, the result
33040 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 61  s are the same a
33050 73 20 69 66 20 69 74 0a 68 61 64 20 65 76 61 6c  s if it.had eval
33060 75 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a 0a  uated to zero...
33070 3c 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66 20 61  <p>^Instead of a
33080 20 73 65 70 61 72 61 74 65 20 4f 46 46 53 45 54   separate OFFSET
33090 20 63 6c 61 75 73 65 2c 20 74 68 65 20 4c 49 4d   clause, the LIM
330a0 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20 73 70  IT clause may sp
330b0 65 63 69 66 79 20 74 77 6f 0a 73 63 61 6c 61 72  ecify two.scalar
330c0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 65 70   expressions sep
330d0 61 72 61 74 65 64 20 62 79 20 61 20 63 6f 6d 6d  arated by a comm
330e0 61 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65  a. ^In this case
330f0 2c 20 74 68 65 20 66 69 72 73 74 20 65 78 70 72  , the first expr
33100 65 73 73 69 6f 6e 0a 69 73 20 75 73 65 64 20 61  ession.is used a
33110 73 20 74 68 65 20 4f 46 46 53 45 54 20 65 78 70  s the OFFSET exp
33120 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  ression and the 
33130 73 65 63 6f 6e 64 20 61 73 20 74 68 65 20 4c 49  second as the LI
33140 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  MIT expression..
33150 54 68 69 73 20 69 73 20 63 6f 75 6e 74 65 72 2d  This is counter-
33160 69 6e 74 75 69 74 69 76 65 2c 20 61 73 20 77 68  intuitive, as wh
33170 65 6e 20 75 73 69 6e 67 20 74 68 65 20 4f 46 46  en using the OFF
33180 53 45 54 20 63 6c 61 75 73 65 20 74 68 65 20 73  SET clause the s
33190 65 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74 77 6f  econd of.the two
331a0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20   expressions is 
331b0 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20 74  the OFFSET and t
331c0 68 65 20 66 69 72 73 74 20 74 68 65 20 4c 49 4d  he first the LIM
331d0 49 54 2e 20 0a 54 68 69 73 20 72 65 76 65 72 73  IT. .This revers
331e0 61 6c 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74  al of the offset
331f0 20 61 6e 64 20 6c 69 6d 69 74 20 69 73 20 69 6e   and limit is in
33200 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74 20 6d  tentional.- it m
33210 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69  aximizes compati
33220 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65  bility with othe
33230 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 73  r SQL database s
33240 79 73 74 65 6d 73 2e 0a 48 6f 77 65 76 65 72 2c  ystems..However,
33250 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   to avoid confus
33260 69 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73  ion, programmers
33270 20 61 72 65 20 73 74 72 6f 6e 67 6c 79 20 65 6e   are strongly en
33280 63 6f 75 72 61 67 65 64 20 74 6f 20 75 73 65 0a  couraged to use.
33290 74 68 65 20 66 6f 72 6d 20 6f 66 20 74 68 65 20  the form of the 
332a0 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74 68 61  LIMIT clause tha
332b0 74 20 75 73 65 73 20 74 68 65 20 22 4f 46 46 53  t uses the "OFFS
332c0 45 54 22 20 6b 65 79 77 6f 72 64 20 61 6e 64 20  ET" keyword and 
332d0 61 76 6f 69 64 0a 75 73 69 6e 67 20 61 20 4c 49  avoid.using a LI
332e0 4d 49 54 20 63 6c 61 75 73 65 20 77 69 74 68 20  MIT clause with 
332f0 61 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65  a comma-separate
33300 64 20 6f 66 66 73 65 74 2e 0a 0a 3c 74 63 6c 3e  d offset...<tcl>
33310 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 6c 75  hd_fragment valu
33320 65 73 20 7b 56 41 4c 55 45 53 20 63 6c 61 75 73  es {VALUES claus
33330 65 7d 20 56 41 4c 55 45 53 3c 2f 74 63 6c 3e 0a  e} VALUES</tcl>.
33340 3c 68 33 3e 54 68 65 20 56 41 4c 55 45 53 20 63  <h3>The VALUES c
33350 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  lause</h3>..<p>^
33360 28 54 68 65 20 70 68 72 61 73 65 20 22 56 41 4c  (The phrase "VAL
33370 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74  UES(<i>expr-list
33380 3c 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74 68 65  </i>)" means the
33390 20 73 61 6d 65 20 74 68 69 6e 67 0a 61 73 20 22   same thing.as "
333a0 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c  SELECT <i>expr-l
333b0 69 73 74 3c 2f 69 3e 22 2e 29 5e 20 20 5e 28 54  ist</i>".)^  ^(T
333c0 68 65 20 70 68 72 61 73 65 0a 22 56 41 4c 55 45  he phrase."VALUE
333d0 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 31  S(<i>expr-list-1
333e0 3c 2f 69 3e 29 2c 2e 2e 2e 2c 28 3c 69 3e 65 78  </i>),...,(<i>ex
333f0 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 29 22 20  pr-list-N</i>)" 
33400 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 0a 74  means the same.t
33410 68 69 6e 67 20 61 73 20 22 53 45 4c 45 43 54 20  hing as "SELECT 
33420 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 31 3c 2f  <i>expr-list-1</
33430 69 3e 20 55 4e 49 4f 4e 20 41 4c 4c 20 2e 2e 2e  i> UNION ALL ...
33440 20 55 4e 49 4f 4e 20 41 4c 4c 0a 53 45 4c 45 43   UNION ALL.SELEC
33450 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 4e  T <i>expr-list-N
33460 3c 2f 69 3e 22 2e 29 5e 20 20 42 6f 74 68 20 66  </i>".)^  Both f
33470 6f 72 6d 73 20 61 72 65 20 74 68 65 20 73 61 6d  orms are the sam
33480 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 0a 74  e, except that.t
33490 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 53 45 4c  he number of SEL
334a0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69  ECT statements i
334b0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 69 73 20  n a compound is 
334c0 6c 69 6d 69 74 65 64 20 62 79 0a 5b 53 51 4c 49  limited by.[SQLI
334d0 54 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e  TE_LIMIT_COMPOUN
334e0 44 5f 53 45 4c 45 43 54 5d 20 77 68 65 72 65 61  D_SELECT] wherea
334f0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
33500 72 6f 77 73 20 69 6e 20 61 0a 56 41 4c 55 45 53  rows in a.VALUES
33510 20 63 6c 61 75 73 65 20 68 61 73 20 6e 6f 20 61   clause has no a
33520 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 2e 0a  rbitrary limit..
33530 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 73 6f  .<p>There are so
33540 6d 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  me restrictions 
33550 6f 6e 20 74 68 65 20 75 73 65 20 6f 66 20 61 20  on the use of a 
33560 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 74 68  VALUES clause th
33570 61 74 20 61 72 65 0a 6e 6f 74 20 73 68 6f 77 6e  at are.not shown
33580 20 6f 6e 20 74 68 65 20 73 79 6e 74 61 78 20 64   on the syntax d
33590 69 61 67 72 61 6d 73 3a 0a 0a 3c 75 6c 3e 0a 3c  iagrams:..<ul>.<
335a0 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55 45 53  li><p>.^A VALUES
335b0 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62   clause cannot b
335c0 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4f  e followed by [O
335d0 52 44 45 52 20 42 59 5d 2e 0a 0a 3c 6c 69 3e 3c  RDER BY]...<li><
335e0 70 3e 0a 5e 41 20 56 41 4c 55 45 53 20 63 6c 61  p>.^A VALUES cla
335f0 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f  use cannot be fo
33600 6c 6c 6f 77 65 64 20 62 79 20 5b 4c 49 4d 49 54  llowed by [LIMIT
33610 5d 2e 0a 3c 2f 75 6c 3e 0a 0a 0a 3c 68 33 3e 54  ]..</ul>...<h3>T
33620 68 65 20 57 49 54 48 20 43 6c 61 75 73 65 3c 2f  he WITH Clause</
33630 68 33 3e 0a 0a 3c 70 3e 5e 53 45 4c 45 43 54 20  h3>..<p>^SELECT 
33640 73 74 61 74 65 6d 65 6e 74 73 20 6d 61 79 20 62  statements may b
33650 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 70 72 65  e optionally pre
33660 63 65 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c  ceded by a singl
33670 65 0a 5b 57 49 54 48 20 63 6c 61 75 73 65 5d 20  e.[WITH clause] 
33680 74 68 61 74 20 64 65 66 69 6e 65 73 20 6f 6e 65  that defines one
33690 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6d 6d 6f 6e   or more [common
336a0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
336b0 6e 73 5d 0a 66 6f 72 20 75 73 65 20 77 69 74 68  ns].for use with
336c0 69 6e 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  in the SELECT st
336d0 61 74 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68  atement...<tcl>h
336e0 64 5f 66 72 61 67 6d 65 6e 74 20 74 61 62 66 75  d_fragment tabfu
336f0 6e 63 31 20 7b 74 61 62 6c 65 2d 76 61 6c 75 65  nc1 {table-value
33700 64 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 74  d functions in t
33710 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 7d 3c  he FROM clause}<
33720 2f 74 63 6c 3e 0a 3c 68 33 3e 54 61 62 6c 65 2d  /tcl>.<h3>Table-
33730 76 61 6c 75 65 64 20 46 75 6e 63 74 69 6f 6e 73  valued Functions
33740 20 49 6e 20 54 68 65 20 46 52 4f 4d 20 43 6c 61   In The FROM Cla
33750 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 5b  use</h3>..<p>A [
33760 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20 74  virtual table] t
33770 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 5b 68 69  hat contains [hi
33780 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 5d 20 63 61  dden columns] ca
33790 6e 20 62 65 20 75 73 65 64 20 6c 69 6b 65 0a 61  n be used like.a
337a0 20 5b 74 61 62 6c 65 2d 76 61 6c 75 65 64 20 66   [table-valued f
337b0 75 6e 63 74 69 6f 6e 5d 20 69 6e 20 74 68 65 20  unction] in the 
337c0 46 52 4f 4d 20 63 6c 61 75 73 65 2e 20 20 54 68  FROM clause.  Th
337d0 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  e arguments to t
337e0 68 65 0a 74 61 62 6c 65 2d 76 61 6c 75 65 64 20  he.table-valued 
337f0 66 75 6e 63 74 69 6f 6e 20 62 65 63 6f 6d 65 20  function become 
33800 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20 74  constraints on t
33810 68 65 20 48 49 44 44 45 4e 20 63 6f 6c 75 6d 6e  he HIDDEN column
33820 73 20 6f 66 0a 74 68 65 20 76 69 72 74 75 61 6c  s of.the virtual
33830 20 74 61 62 6c 65 2e 20 20 41 64 64 69 74 69 6f   table.  Additio
33840 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  nal information 
33850 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e 20  can be found in 
33860 74 68 65 0a 5b 74 61 62 6c 65 2d 76 61 6c 75 65  the.[table-value
33870 64 20 66 75 6e 63 74 69 6f 6e 73 7c 76 69 72 74  d functions|virt
33880 75 61 6c 20 74 61 62 6c 65 20 64 6f 63 75 6d 65  ual table docume
33890 6e 74 61 74 69 6f 6e 5d 2e 0a 0a 3c 74 63 6c 3e  ntation]...<tcl>
338a0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
338b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
338c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
338d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
338e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
338f0 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20 75  Section UPDATE u
33900 70 64 61 74 65 20 7b 55 50 44 41 54 45 20 2a 55  pdate {UPDATE *U
33910 50 44 41 54 45 73 7d 0a 0a 52 65 63 75 72 73 69  PDATEs}..Recursi
33920 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
33930 75 70 64 61 74 65 2d 73 74 6d 74 0a 3c 2f 74 63  update-stmt.</tc
33940 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55 50 44 41 54  l>..<p>^An UPDAT
33950 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  E statement is u
33960 73 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 61 20  sed to modify a 
33970 73 75 62 73 65 74 20 6f 66 20 74 68 65 20 76 61  subset of the va
33980 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e 20 0a  lues stored in .
33990 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77  zero or more row
339a0 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
339b0 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69  e table identifi
339c0 65 64 20 62 79 20 74 68 65 20 0a 5b 71 75 61 6c  ed by the .[qual
339d0 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
339e0 5d 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  ] specified as p
339f0 61 72 74 20 6f 66 20 74 68 65 20 55 50 44 41 54  art of the UPDAT
33a00 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70  E statement...<p
33a10 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45 20  >^If the UPDATE 
33a20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e  statement does n
33a30 6f 74 20 68 61 76 65 20 61 20 57 48 45 52 45 20  ot have a WHERE 
33a40 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77 73  clause, all rows
33a50 20 69 6e 20 74 68 65 0a 74 61 62 6c 65 20 61 72   in the.table ar
33a60 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20 74 68  e modified by th
33a70 65 20 55 50 44 41 54 45 2e 20 5e 4f 74 68 65 72  e UPDATE. ^Other
33a80 77 69 73 65 2c 20 74 68 65 20 55 50 44 41 54 45  wise, the UPDATE
33a90 20 61 66 66 65 63 74 73 20 6f 6e 6c 79 20 74 68   affects only th
33aa0 6f 73 65 0a 72 6f 77 73 20 66 6f 72 20 77 68 69  ose.rows for whi
33ab0 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  ch the WHERE cla
33ac0 75 73 65 0a 5b 62 6f 6f 6c 65 61 6e 20 65 78 70  use.[boolean exp
33ad0 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c 65 61 6e 20  ression|boolean 
33ae0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 72  expression is tr
33af0 75 65 5d 2e 20 5e 49 74 20 69 73 20 6e 6f 74 20  ue]. ^It is not 
33b00 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 0a  an error if the.
33b10 57 48 45 52 45 20 63 6c 61 75 73 65 20 64 6f 65  WHERE clause doe
33b20 73 20 6e 6f 74 20 65 76 61 6c 75 61 74 65 20 74  s not evaluate t
33b30 6f 20 74 72 75 65 20 66 6f 72 20 61 6e 79 20 72  o true for any r
33b40 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ow in the table 
33b50 2d 20 74 68 69 73 20 6a 75 73 74 0a 6d 65 61 6e  - this just.mean
33b60 73 20 74 68 61 74 20 74 68 65 20 55 50 44 41 54  s that the UPDAT
33b70 45 20 73 74 61 74 65 6d 65 6e 74 20 61 66 66 65  E statement affe
33b80 63 74 73 20 7a 65 72 6f 20 72 6f 77 73 2e 0a 0a  cts zero rows...
33b90 3c 70 3e 54 68 65 20 6d 6f 64 69 66 69 63 61 74  <p>The modificat
33ba0 69 6f 6e 73 20 6d 61 64 65 20 74 6f 20 65 61 63  ions made to eac
33bb0 68 20 72 6f 77 20 61 66 66 65 63 74 65 64 20 62  h row affected b
33bc0 79 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  y an UPDATE stat
33bd0 65 6d 65 6e 74 20 61 72 65 0a 64 65 74 65 72 6d  ement are.determ
33be0 69 6e 65 64 20 62 79 20 74 68 65 20 6c 69 73 74  ined by the list
33bf0 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74 73 20   of assignments 
33c00 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 53 45  following the SE
33c10 54 20 6b 65 79 77 6f 72 64 2e 20 45 61 63 68 0a  T keyword. Each.
33c20 61 73 73 69 67 6e 6d 65 6e 74 20 73 70 65 63 69  assignment speci
33c30 66 69 65 73 20 61 20 3c 79 79 74 65 72 6d 3e 63  fies a <yyterm>c
33c40 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65  olumn-name</yyte
33c50 72 6d 3e 20 74 6f 20 74 68 65 20 6c 65 66 74 20  rm> to the left 
33c60 6f 66 20 74 68 65 20 0a 65 71 75 61 6c 73 20 73  of the .equals s
33c70 69 67 6e 20 61 6e 64 20 61 20 73 63 61 6c 61 72  ign and a scalar
33c80 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 74   expression to t
33c90 68 65 20 72 69 67 68 74 2e 20 0a 5e 46 6f 72 20  he right. .^For 
33ca0 65 61 63 68 20 61 66 66 65 63 74 65 64 20 72 6f  each affected ro
33cb0 77 2c 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c  w, the named col
33cc0 75 6d 6e 73 0a 61 72 65 20 73 65 74 20 74 6f 20  umns.are set to 
33cd0 74 68 65 20 76 61 6c 75 65 73 20 66 6f 75 6e 64  the values found
33ce0 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74   by evaluating t
33cf0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
33d00 20 73 63 61 6c 61 72 20 0a 65 78 70 72 65 73 73   scalar .express
33d10 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73 69 6e 67  ions. ^If a sing
33d20 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 61  le column-name a
33d30 70 70 65 61 72 73 20 6d 6f 72 65 20 74 68 61 6e  ppears more than
33d40 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 6c 69 73   once in the lis
33d50 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65 6e 74 20  t of.assignment 
33d60 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 61 6c 6c  expressions, all
33d70 20 62 75 74 20 74 68 65 20 72 69 67 68 74 6d 6f   but the rightmo
33d80 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 69 73  st occurrence is
33d90 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c 75 6d   ignored. ^Colum
33da0 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f 74 20 61  ns.that do not a
33db0 70 70 65 61 72 20 69 6e 20 74 68 65 20 6c 69 73  ppear in the lis
33dc0 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74 73  t of assignments
33dd0 20 61 72 65 20 6c 65 66 74 20 75 6e 6d 6f 64 69   are left unmodi
33de0 66 69 65 64 2e 20 5e 54 68 65 20 73 63 61 6c 61  fied. ^The scala
33df0 72 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 61  r.expressions ma
33e00 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d  y refer to colum
33e10 6e 73 20 6f 66 20 74 68 65 20 72 6f 77 20 62 65  ns of the row be
33e20 69 6e 67 20 75 70 64 61 74 65 64 2e 20 5e 49 6e  ing updated. ^In
33e30 20 74 68 69 73 20 63 61 73 65 20 61 6c 6c 0a 73   this case all.s
33e40 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e  calar expression
33e50 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20  s are evaluated 
33e60 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69 67  before any assig
33e70 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65 2e  nments are made.
33e80 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69 6e 67 20 69  ..<p>Beginning i
33e90 6e 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f  n SQLite [versio
33ea0 6e 20 33 2e 31 35 2e 30 5d 20 28 5b 64 61 74 65  n 3.15.0] ([date
33eb0 6f 66 3a 33 2e 31 35 2e 30 5d 29 2c 20 61 6e 20  of:3.15.0]), an 
33ec0 61 73 73 69 67 6e 6d 65 6e 74 20 69 6e 0a 74 68  assignment in.th
33ed0 65 20 53 45 54 20 63 6c 61 75 73 65 20 63 61 6e  e SET clause can
33ee0 20 62 65 20 61 20 0a 5b 63 6f 6c 75 6d 6e 2d 6e   be a .[column-n
33ef0 61 6d 65 2d 6c 69 73 74 7c 70 61 72 65 6e 74 68  ame-list|parenth
33f00 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 63  esized list of c
33f10 6f 6c 75 6d 6e 20 6e 61 6d 65 73 5d 20 6f 6e 20  olumn names] on 
33f20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 61 0a 5b  the left and a.[
33f30 72 6f 77 20 76 61 6c 75 65 5d 20 6f 66 20 74 68  row value] of th
33f40 65 20 73 61 6d 65 20 73 69 7a 65 20 6f 6e 20 74  e same size on t
33f50 68 65 20 72 69 67 68 74 2e 0a 0a 0a 3c 70 3e 5e  he right....<p>^
33f60 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 4f 52  The optional "OR
33f70 20 3c 69 3e 61 63 74 69 6f 6e 3c 2f 69 3e 22 20   <i>action</i>" 
33f80 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 20  conflict clause 
33f90 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68 65  that follows the
33fa0 0a 55 50 44 41 54 45 20 6b 65 79 77 6f 72 64 20  .UPDATE keyword 
33fb0 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20  allows the user 
33fc0 74 6f 20 6e 6f 6d 69 6e 61 74 65 20 61 20 73 70  to nominate a sp
33fd0 65 63 69 66 69 63 0a 63 6f 6e 73 74 72 61 69 6e  ecific.constrain
33fe0 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
33ff0 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
34000 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74 68  to use during th
34010 69 73 20 6f 6e 65 20 55 50 44 41 54 45 20 63 6f  is one UPDATE co
34020 6d 6d 61 6e 64 2e 0a 52 65 66 65 72 20 74 6f 20  mmand..Refer to 
34030 74 68 65 20 73 65 63 74 69 6f 6e 20 65 6e 74 69  the section enti
34040 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  tled [ON CONFLIC
34050 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  T] for additiona
34060 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a  l information...
34070 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73  <h3>Restrictions
34080 20 6f 6e 20 55 50 44 41 54 45 20 53 74 61 74 65   on UPDATE State
34090 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45  ments Within CRE
340a0 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e  ATE TRIGGER</h3>
340b0 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69  ..<p>The followi
340c0 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 73 79  ng additional sy
340d0 6e 74 61 78 20 72 65 73 74 72 69 63 74 69 6f 6e  ntax restriction
340e0 73 20 61 70 70 6c 79 20 74 6f 20 55 50 44 41 54  s apply to UPDAT
340f0 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  E statements tha
34100 74 0a 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74  t.occur within t
34110 68 65 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52  he body of a [CR
34120 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
34130 61 74 65 6d 65 6e 74 2e 20 20 0a 0a 3c 75 6c 3e  atement.  ..<ul>
34140 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c  .  <li><p>^The <
34150 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d  yyterm>table-nam
34160 65 3c 2f 79 79 74 65 72 6d 3e 20 73 70 65 63 69  e</yyterm> speci
34170 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
34180 61 6e 20 55 50 44 41 54 45 20 0a 20 20 20 20 20  an UPDATE .     
34190 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 69   statement withi
341a0 6e 0a 20 20 20 20 20 20 61 20 74 72 69 67 67 65  n.      a trigge
341b0 72 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75  r body must be u
341c0 6e 71 75 61 6c 69 66 69 65 64 2e 20 5e 28 49 6e  nqualified. ^(In
341d0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
341e0 65 0a 20 20 20 20 20 20 3c 69 3e 73 63 68 65 6d  e.      <i>schem
341f0 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f  a-name</i><b>.</
34200 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65  b> prefix on the
34210 20 74 61 62 6c 65 20 6e 61 6d 65 20 6f 66 20 74   table name of t
34220 68 65 20 55 50 44 41 54 45 20 69 73 0a 20 20 20  he UPDATE is.   
34230 20 20 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77     not allowed w
34240 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29  ithin triggers.)
34250 5e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20 74 61  ^ ^Unless the ta
34260 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65  ble to which the
34270 20 74 72 69 67 67 65 72 0a 20 20 20 20 20 20 69   trigger.      i
34280 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e  s attached is in
34290 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
342a0 73 65 2c 20 74 68 65 20 74 61 62 6c 65 20 62 65  se, the table be
342b0 69 6e 67 20 75 70 64 61 74 65 64 20 62 79 20 74  ing updated by t
342c0 68 65 0a 20 20 20 20 20 20 74 72 69 67 67 65 72  he.      trigger
342d0 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 72 65   program must re
342e0 73 69 64 65 20 69 6e 20 74 68 65 20 73 61 6d 65  side in the same
342f0 20 64 61 74 61 62 61 73 65 20 61 73 20 69 74 2e   database as it.
34300 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 0a 20   ^If the table. 
34310 20 20 20 20 20 74 6f 20 77 68 69 63 68 20 74 68       to which th
34320 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74  e trigger is att
34330 61 63 68 65 64 20 69 73 20 69 6e 20 74 68 65 20  ached is in the 
34340 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74  TEMP database, t
34350 68 65 6e 20 74 68 65 0a 20 20 20 20 20 20 75 6e  hen the.      un
34360 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f  qualified name o
34370 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
34380 67 20 75 70 64 61 74 65 64 20 69 73 20 72 65 73  g updated is res
34390 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61 6d  olved in the sam
343a0 65 20 77 61 79 0a 20 20 20 20 20 20 61 73 20 69  e way.      as i
343b0 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c  t is for a top-l
343c0 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20 28  evel statement (
343d0 62 79 20 73 65 61 72 63 68 69 6e 67 20 66 69 72  by searching fir
343e0 73 74 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  st the TEMP data
343f0 62 61 73 65 2c 0a 20 20 20 20 20 20 74 68 65 6e  base,.      then
34400 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
34410 73 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74 68  se, then any oth
34420 65 72 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  er databases in 
34430 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 77  the order they w
34440 65 72 65 0a 20 20 20 20 20 20 61 74 74 61 63 68  ere.      attach
34450 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  ed)...  <li><p>^
34460 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 61  The INDEXED BY a
34470 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63  nd NOT INDEXED c
34480 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61  lauses are not a
34490 6c 6c 6f 77 65 64 20 6f 6e 20 55 50 44 41 54 45  llowed on UPDATE
344a0 0a 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74  .      statement
344b0 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
344c0 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70  s.</p>..  <li><p
344d0 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64 20  >^The LIMIT and 
344e0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73  ORDER BY clauses
344f0 20 66 6f 72 20 55 50 44 41 54 45 20 61 72 65 20   for UPDATE are 
34500 75 6e 73 75 70 70 6f 72 74 65 64 20 77 69 74 68  unsupported with
34510 69 6e 0a 20 20 20 20 20 20 74 72 69 67 67 65 72  in.      trigger
34520 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  s, regardless of
34530 20 74 68 65 20 63 6f 6d 70 69 6c 61 74 69 6f 6e   the compilation
34540 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 74 6f   options used to
34550 20 62 75 69 6c 64 20 53 51 4c 69 74 65 2e 0a 3c   build SQLite..<
34560 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e  /ul>..<h3>Option
34570 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44  al LIMIT and ORD
34580 45 52 20 42 59 20 43 6c 61 75 73 65 73 3c 2f 68  ER BY Clauses</h
34590 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69  3>..<p>^(If SQLi
345a0 74 65 20 69 73 20 62 75 69 6c 74 20 77 69 74 68  te is built with
345b0 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41   the [SQLITE_ENA
345c0 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
345d0 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65  E_LIMIT].compile
345e0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68 65  -time option the
345f0 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20  n the syntax of 
34600 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
34610 6d 65 6e 74 20 69 73 20 65 78 74 65 6e 64 65 64  ment is extended
34620 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c 20 4f  .with optional O
34630 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49  RDER BY and LIMI
34640 54 20 63 6c 61 75 73 65 73 29 5e 20 61 73 20 66  T clauses)^ as f
34650 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63  ollows:</p>..<tc
34660 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  l>BubbleDiagram 
34670 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d 69  update-stmt-limi
34680 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49  ted</tcl>..<p>^I
34690 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  f an UPDATE stat
346a0 65 6d 65 6e 74 20 68 61 73 20 61 20 4c 49 4d 49  ement has a LIMI
346b0 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6d 61  T clause, the ma
346c0 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
346d0 72 6f 77 73 20 74 68 61 74 0a 77 69 6c 6c 20 62  rows that.will b
346e0 65 20 75 70 64 61 74 65 64 20 69 73 20 66 6f 75  e updated is fou
346f0 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67  nd by evaluating
34700 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e   the accompanyin
34710 67 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  g expression and
34720 20 63 61 73 74 69 6e 67 0a 69 74 20 74 6f 20 61   casting.it to a
34730 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  n integer value.
34740 20 5e 41 20 6e 65 67 61 74 69 76 65 20 76 61 6c   ^A negative val
34750 75 65 20 69 73 20 69 6e 74 65 72 70 72 65 74 65  ue is interprete
34760 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22 2e  d as "no limit".
34770 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 4c 49 4d  ..<p>^If the LIM
34780 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  IT expression ev
34790 61 6c 75 61 74 65 73 20 74 6f 20 6e 6f 6e 2d 6e  aluates to non-n
347a0 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 3c 69  egative value <i
347b0 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74 68 65 0a 55  >N</i> and the.U
347c0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
347d0 68 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20  has an ORDER BY 
347e0 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c  clause, then all
347f0 20 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64   rows that would
34800 20 62 65 20 75 70 64 61 74 65 64 20 69 6e 0a 74   be updated in.t
34810 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
34820 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
34830 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64  re sorted accord
34840 69 6e 67 20 74 6f 20 74 68 65 20 4f 52 44 45 52  ing to the ORDER
34850 20 42 59 20 61 6e 64 20 74 68 65 0a 66 69 72 73   BY and the.firs
34860 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75 70 64 61 74  t <i>N</i> updat
34870 65 64 2e 20 5e 28 49 66 20 74 68 65 20 55 50 44  ed. ^(If the UPD
34880 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6c  ATE statement al
34890 73 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54  so has an OFFSET
348a0 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 69 74   clause,.then it
348b0 20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65 76   is similarly ev
348c0 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73 74  aluated and cast
348d0 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76   to an integer v
348e0 61 6c 75 65 2e 20 49 66 20 74 68 65 20 4f 46 46  alue. If the OFF
348f0 53 45 54 0a 65 78 70 72 65 73 73 69 6f 6e 20 65  SET.expression e
34900 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 6f  valuates to a no
34910 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  n-negative value
34920 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74 68 65 6e 20   <i>M</i>, then 
34930 74 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f  the first <i>M</
34940 69 3e 0a 72 6f 77 73 20 61 72 65 20 73 6b 69 70  i>.rows are skip
34950 70 65 64 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c  ped and the foll
34960 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f 69 3e 20 72  owing <i>N</i> r
34970 6f 77 73 20 75 70 64 61 74 65 64 20 69 6e 73 74  ows updated inst
34980 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74  ead.)^..<p>^If t
34990 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
349a0 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52 44 45 52  ent has no ORDER
349b0 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
349c0 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 0a 77   all rows that.w
349d0 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65 64 20  ould be updated 
349e0 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20 6f  in the absence o
349f0 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  f the LIMIT clau
34a00 73 65 20 61 72 65 20 61 73 73 65 6d 62 6c 65 64  se are assembled
34a10 20 69 6e 20 61 6e 0a 61 72 62 69 74 72 61 72 79   in an.arbitrary
34a20 20 6f 72 64 65 72 20 62 65 66 6f 72 65 20 61 70   order before ap
34a30 70 6c 79 69 6e 67 20 74 68 65 20 4c 49 4d 49 54  plying the LIMIT
34a40 20 61 6e 64 20 4f 46 46 53 45 54 20 63 6c 61 75   and OFFSET clau
34a50 73 65 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ses to determine
34a60 20 0a 77 68 69 63 68 20 61 72 65 20 61 63 74 75   .which are actu
34a70 61 6c 6c 79 20 75 70 64 61 74 65 64 2e 0a 0a 3c  ally updated...<
34a80 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59  p>^(The ORDER BY
34a90 20 63 6c 61 75 73 65 20 6f 6e 20 61 6e 20 55 50   clause on an UP
34aa0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
34ab0 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64  s used only to d
34ac0 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72  etermine which.r
34ad0 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20  ows fall within 
34ae0 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f  the LIMIT. The o
34af0 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
34b00 77 73 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20  ws are modified 
34b10 69 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64  is arbitrary.and
34b20 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63   is not influenc
34b30 65 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20  ed by the ORDER 
34b40 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74  BY clause.)^..<t
34b50 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
34b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34ba0 23 23 0a 53 65 63 74 69 6f 6e 20 56 41 43 55 55  ##.Section VACUU
34bb0 4d 20 76 61 63 75 75 6d 20 56 41 43 55 55 4d 0a  M vacuum VACUUM.
34bc0 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
34bd0 44 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d 73  Diagram vacuum-s
34be0 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  tmt.</tcl>..<p>.
34bf0 20 20 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d    The VACUUM com
34c00 6d 61 6e 64 20 72 65 62 75 69 6c 64 73 20 74 68  mand rebuilds th
34c10 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c  e database file,
34c20 20 72 65 70 61 63 6b 69 6e 67 20 69 74 20 69 6e   repacking it in
34c30 74 6f 20 61 20 6d 69 6e 69 6d 61 6c 0a 20 20 61  to a minimal.  a
34c40 6d 6f 75 6e 74 20 6f 66 20 64 69 73 6b 20 73 70  mount of disk sp
34c50 61 63 65 2e 20 54 68 65 72 65 20 61 72 65 20 73  ace. There are s
34c60 65 76 65 72 61 6c 20 0a 20 20 72 65 61 73 6f 6e  everal .  reason
34c70 73 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e  s an application
34c80 20 6d 69 67 68 74 20 64 6f 20 74 68 69 73 3a 0a   might do this:.
34c90 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  .<ul>.  <li> <p>
34ca0 20 5e 55 6e 6c 65 73 73 20 53 51 4c 69 74 65 20   ^Unless SQLite 
34cb0 69 73 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22 61  is running in "a
34cc0 75 74 6f 5f 76 61 63 75 75 6d 3d 46 55 4c 4c 22  uto_vacuum=FULL"
34cd0 20 6d 6f 64 65 2c 20 77 68 65 6e 20 61 20 6c 61   mode, when a la
34ce0 72 67 65 0a 20 20 20 20 20 61 6d 6f 75 6e 74 20  rge.     amount 
34cf0 6f 66 20 64 61 74 61 20 69 73 20 64 65 6c 65 74  of data is delet
34d00 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
34d10 62 61 73 65 20 66 69 6c 65 20 69 74 20 6c 65 61  base file it lea
34d20 76 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74 79  ves behind empty
34d30 0a 20 20 20 20 20 73 70 61 63 65 2c 20 6f 72 20  .     space, or 
34d40 22 66 72 65 65 22 20 64 61 74 61 62 61 73 65 20  "free" database 
34d50 70 61 67 65 73 2e 20 54 68 69 73 20 6d 65 61 6e  pages. This mean
34d60 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
34d70 69 6c 65 20 6d 69 67 68 74 0a 20 20 20 20 20 62  ile might.     b
34d80 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 73 74  e larger than st
34d90 72 69 63 74 6c 79 20 6e 65 63 65 73 73 61 72 79  rictly necessary
34da0 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55  . ^Running VACUU
34db0 4d 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65  M to rebuild the
34dc0 20 0a 20 20 20 20 20 64 61 74 61 62 61 73 65 20   .     database 
34dd0 72 65 63 6c 61 69 6d 73 20 74 68 69 73 20 73 70  reclaims this sp
34de0 61 63 65 20 61 6e 64 20 72 65 64 75 63 65 73 20  ace and reduces 
34df0 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
34e00 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 0a  database file...
34e10 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 46 72 65 71    <li> <p> ^Freq
34e20 75 65 6e 74 20 69 6e 73 65 72 74 73 2c 20 75 70  uent inserts, up
34e30 64 61 74 65 73 2c 20 61 6e 64 20 64 65 6c 65 74  dates, and delet
34e40 65 73 20 63 61 6e 20 63 61 75 73 65 20 74 68 65  es can cause the
34e50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20   database file. 
34e60 20 20 20 20 74 6f 20 62 65 63 6f 6d 65 20 66 72      to become fr
34e70 61 67 6d 65 6e 74 65 64 20 2d 20 77 68 65 72 65  agmented - where
34e80 20 64 61 74 61 20 66 6f 72 20 61 20 73 69 6e 67   data for a sing
34e90 6c 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  le table or inde
34ea0 78 20 69 73 20 73 63 61 74 74 65 72 65 64 20 0a  x is scattered .
34eb0 20 20 20 20 20 61 72 6f 75 6e 64 20 74 68 65 20       around the 
34ec0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e  database file. ^
34ed0 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 65  Running VACUUM e
34ee0 6e 73 75 72 65 73 20 74 68 61 74 20 65 61 63 68  nsures that each
34ef0 20 74 61 62 6c 65 20 61 6e 64 0a 20 20 20 20 20   table and.     
34f00 69 6e 64 65 78 20 69 73 20 6c 61 72 67 65 6c 79  index is largely
34f10 20 73 74 6f 72 65 64 20 63 6f 6e 74 69 67 75 6f   stored contiguo
34f20 75 73 6c 79 20 77 69 74 68 69 6e 20 74 68 65 20  usly within the 
34f30 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e  database file. ^
34f40 49 6e 20 73 6f 6d 65 0a 20 20 20 20 20 63 61 73  In some.     cas
34f50 65 73 2c 20 56 41 43 55 55 4d 20 6d 61 79 20 61  es, VACUUM may a
34f60 6c 73 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e  lso reduce the n
34f70 75 6d 62 65 72 20 6f 66 20 70 61 72 74 69 61 6c  umber of partial
34f80 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20  ly filled pages 
34f90 69 6e 0a 20 20 20 20 20 74 68 65 20 64 61 74 61  in.     the data
34fa0 62 61 73 65 2c 20 72 65 64 75 63 69 6e 67 20 74  base, reducing t
34fb0 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  he size of the d
34fc0 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 75 72  atabase file fur
34fd0 74 68 65 72 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  ther...  <li> <p
34fe0 3e 20 57 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69  > When content i
34ff0 73 20 64 65 6c 65 74 65 64 20 66 72 6f 6d 20 61  s deleted from a
35000 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  n SQLite databas
35010 65 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69  e, the content i
35020 73 20 6e 6f 74 0a 20 20 20 20 20 75 73 75 61 6c  s not.     usual
35030 6c 79 20 65 72 61 73 65 64 20 62 75 74 20 72 61  ly erased but ra
35040 74 68 65 72 20 74 68 65 20 73 70 61 63 65 20 75  ther the space u
35050 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  sed to hold the 
35060 63 6f 6e 74 65 6e 74 20 69 73 20 6d 61 72 6b 65  content is marke
35070 64 20 61 73 0a 20 20 20 20 20 62 65 69 6e 67 20  d as.     being 
35080 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 72 65  available for re
35090 75 73 65 2e 20 20 54 68 69 73 20 63 61 6e 20 61  use.  This can a
350a0 6c 6c 6f 77 20 64 65 6c 65 74 65 64 20 63 6f 6e  llow deleted con
350b0 74 65 6e 74 20 74 6f 20 62 65 20 72 65 63 6f 76  tent to be recov
350c0 65 72 65 64 0a 20 20 20 20 20 62 79 20 61 20 68  ered.     by a h
350d0 61 63 6b 65 72 20 6f 72 20 62 79 20 66 6f 72 65  acker or by fore
350e0 6e 73 69 63 20 61 6e 61 6c 79 73 69 73 2e 20 20  nsic analysis.  
350f0 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 77  Running VACUUM w
35100 69 6c 6c 20 63 6c 65 61 6e 20 74 68 65 20 64 61  ill clean the da
35110 74 61 62 61 73 65 0a 20 20 20 20 20 6f 66 20 61  tabase.     of a
35120 6c 6c 20 74 72 61 63 65 73 20 6f 66 20 64 65 6c  ll traces of del
35130 65 74 65 64 20 63 6f 6e 74 65 6e 74 2c 20 74 68  eted content, th
35140 75 73 20 70 72 65 76 65 6e 74 69 6e 67 20 61 6e  us preventing an
35150 20 61 64 76 65 72 73 61 72 79 20 66 72 6f 6d 20   adversary from 
35160 72 65 63 6f 76 65 72 69 6e 67 0a 20 20 20 20 20  recovering.     
35170 64 65 6c 65 74 65 64 20 63 6f 6e 74 65 6e 74 2e  deleted content.
35180 20 20 55 73 69 6e 67 20 56 41 43 55 55 4d 20 69    Using VACUUM i
35190 6e 20 74 68 69 73 20 77 61 79 20 69 73 20 61 6e  n this way is an
351a0 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20   alternative to 
351b0 73 65 74 74 69 6e 67 0a 20 20 20 20 20 5b 50 52  setting.     [PR
351c0 41 47 4d 41 20 73 65 63 75 72 65 5f 64 65 6c 65  AGMA secure_dele
351d0 74 65 3d 4f 4e 5d 2e 20 0a 0a 20 20 3c 6c 69 3e  te=ON]. ..  <li>
351e0 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c 20   <p> ^Normally, 
351f0 74 68 65 20 64 61 74 61 62 61 73 65 20 5b 70 61  the database [pa
35200 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68 65  ge_size] and whe
35210 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
35220 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 73 75  database.     su
35230 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61 63  pports [auto_vac
35240 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f 6e  uum] must be con
35250 66 69 67 75 72 65 64 20 62 65 66 6f 72 65 20 74  figured before t
35260 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
35270 20 69 73 0a 20 20 20 20 20 61 63 74 75 61 6c 6c   is.     actuall
35280 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f 77 65  y created. ^Howe
35290 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69 6e  ver, when not in
352a0 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f   [write-ahead lo
352b0 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20 20  g] mode, the .  
352c0 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61     [page_size] a
352d0 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75  nd/or [auto_vacu
352e0 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73 20 6f  um] properties o
352f0 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61  f an existing da
35300 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a 20 20  tabase may be.  
35310 20 20 20 63 68 61 6e 67 65 64 20 62 79 20 75 73     changed by us
35320 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73 69  ing the [page_si
35330 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65 5f 73  ze pragma|page_s
35340 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20 20  ize]  and/or .  
35350 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 7c     [auto_vacuum|
35360 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63 75  pragma auto_vacu
35370 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e 64 20  um] pragmas and 
35380 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  then immediately
35390 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20 20 20   VACUUMing.     
353a0 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 5e 57  the database. ^W
353b0 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61 68  hen in [write-ah
353c0 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 6f  ead log] mode, o
353d0 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f 76 61  nly the [auto_va
353e0 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70 70 6f  cuum].     suppo
353f0 72 74 20 70 72 6f 70 65 72 74 79 20 63 61 6e 20  rt property can 
35400 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e 67  be changed using
35410 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a   VACUUM..</ul>..
35420 3c 70 3e 5e 42 79 20 64 65 66 61 75 6c 74 2c 20  <p>^By default, 
35430 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b  VACUUM only work
35440 73 20 6f 6e 6c 79 20 6f 6e 20 74 68 65 20 6d 61  s only on the ma
35450 69 6e 20 64 61 74 61 62 61 73 65 2e 0a 5e 5b 41  in database..^[A
35460 54 54 41 43 48 7c 41 74 74 61 63 68 65 64 20 64  TTACH|Attached d
35470 61 74 61 62 61 73 65 73 5d 20 63 61 6e 20 62 65  atabases] can be
35480 20 76 61 63 75 75 6d 65 64 20 62 79 20 61 70 70   vacuumed by app
35490 65 6e 64 69 6e 67 20 74 68 65 20 61 70 70 72 6f  ending the appro
354a0 70 72 69 61 74 65 0a 3c 79 79 74 65 72 6d 3e 73  priate.<yyterm>s
354b0 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65  chema-name</yyte
354c0 72 6d 3e 20 74 6f 20 74 68 65 20 56 41 43 55 55  rm> to the VACUU
354d0 4d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70  M statement...<p
354e0 3e 3c 62 3e 43 6f 6d 70 61 74 69 62 69 6c 69 74  ><b>Compatibilit
354f0 79 20 57 61 72 6e 69 6e 67 3a 3c 2f 62 3e 20 54  y Warning:</b> T
35500 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 76 61  he ability to va
35510 63 75 75 6d 20 61 74 74 61 63 68 65 64 20 64 61  cuum attached da
35520 74 61 62 61 73 65 73 20 77 61 73 0a 61 64 64 65  tabases was.adde
35530 64 20 69 6e 20 5b 76 65 72 73 69 6f 6e 20 33 2e  d in [version 3.
35540 31 35 2e 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33  15.0] ([dateof:3
35550 2e 31 35 2e 30 5d 29 2e 20 20 50 72 69 6f 72 20  .15.0]).  Prior 
35560 74 6f 20 74 68 61 74 2c 20 61 20 0a 3c 79 79 74  to that, a .<yyt
35570 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  erm>schema-name<
35580 2f 79 79 74 65 72 6d 3e 20 61 64 64 65 64 20 74  /yyterm> added t
35590 6f 20 74 68 65 0a 56 41 43 55 55 4d 20 73 74 61  o the.VACUUM sta
355a0 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 62 65 20  tement would be 
355b0 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64  silently ignored
355c0 20 61 6e 64 20 74 68 65 20 22 6d 61 69 6e 22 20   and the "main" 
355d0 73 63 68 65 6d 61 20 77 6f 75 6c 64 20 62 65 0a  schema would be.
355e0 76 61 63 75 75 6d 65 64 2e 3c 2f 70 3e 0a 0a 3c  vacuumed.</p>..<
355f0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
35600 76 61 63 75 75 6d 69 6e 74 6f 20 7b 56 41 43 55  vacuuminto {VACU
35610 55 4d 20 49 4e 54 4f 7d 3c 2f 74 63 6c 3e 0a 3c  UM INTO}</tcl>.<
35620 68 33 3e 56 41 43 55 55 4d 20 77 69 74 68 20 61  h3>VACUUM with a
35630 6e 20 49 4e 54 4f 20 63 6c 61 75 73 65 3c 2f 68  n INTO clause</h
35640 33 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 49  3>..<p>^If the I
35650 4e 54 4f 20 63 6c 61 75 73 65 20 69 73 20 69 6e  NTO clause is in
35660 63 6c 75 64 65 64 2c 20 74 68 65 6e 20 74 68 65  cluded, then the
35670 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61   original databa
35680 73 65 20 66 69 6c 65 20 69 73 0a 75 6e 63 68 61  se file is.uncha
35690 6e 67 65 64 20 61 6e 64 20 61 20 6e 65 77 20 64  nged and a new d
356a0 61 74 61 62 61 73 65 20 69 73 20 63 72 65 61 74  atabase is creat
356b0 65 64 20 69 6e 20 74 68 65 20 66 69 6c 65 6e 61  ed in the filena
356c0 6d 65 20 67 69 76 65 6e 20 62 79 20 74 68 65 0a  me given by the.
356d0 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
356e0 49 4e 54 4f 20 63 6c 61 75 73 65 2e 20 20 54 68  INTO clause.  Th
356f0 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 77  e new database w
35700 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ill contain the 
35710 73 61 6d 65 0a 6c 6f 67 69 63 61 6c 20 63 6f 6e  same.logical con
35720 74 65 6e 74 20 61 73 20 74 68 65 20 6f 72 69 67  tent as the orig
35730 69 6e 61 6c 20 64 61 74 61 62 61 73 65 2c 20 66  inal database, f
35740 75 6c 6c 79 20 76 61 63 75 75 6d 65 64 2e 0a 0a  ully vacuumed...
35750 3c 70 3e 0a 54 68 65 20 56 41 43 55 55 4d 20 63  <p>.The VACUUM c
35760 6f 6d 6d 61 6e 64 20 77 69 74 68 20 61 6e 20 49  ommand with an I
35770 4e 54 4f 20 63 6c 61 75 73 65 20 69 73 20 61 6e  NTO clause is an
35780 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20   alternative to 
35790 74 68 65 0a 5b 62 61 63 6b 75 70 20 41 50 49 5d  the.[backup API]
357a0 20 66 6f 72 20 67 65 6e 65 72 61 74 69 6e 67 20   for generating 
357b0 62 61 63 6b 75 70 20 63 6f 70 69 65 73 20 6f 66  backup copies of
357c0 20 61 20 6c 69 76 65 20 64 61 74 61 62 61 73 65   a live database
357d0 2e 0a 54 68 65 20 61 64 76 61 6e 74 61 67 65 20  ..The advantage 
357e0 6f 66 20 75 73 69 6e 67 20 56 41 43 55 55 4d 20  of using VACUUM 
357f0 49 4e 54 4f 20 69 73 20 74 68 61 74 20 74 68 65  INTO is that the
35800 20 72 65 73 75 6c 74 69 6e 67 20 62 61 63 6b 75   resulting backu
35810 70 0a 64 61 74 61 62 61 73 65 20 69 73 20 6d 69  p.database is mi
35820 6e 69 6d 61 6c 20 69 6e 20 73 69 7a 65 20 61 6e  nimal in size an
35830 64 20 68 65 6e 63 65 20 74 68 65 20 61 6d 6f 75  d hence the amou
35840 6e 74 20 6f 66 20 66 69 6c 65 73 79 73 74 65 6d  nt of filesystem
35850 0a 49 2f 4f 20 6d 61 79 20 62 65 20 72 65 64 75  .I/O may be redu
35860 63 65 64 2e 20 20 41 6c 73 6f 2c 20 61 6c 6c 20  ced.  Also, all 
35870 64 65 6c 65 74 65 64 20 63 6f 6e 74 65 6e 74 20  deleted content 
35880 69 73 20 70 75 72 67 65 64 20 66 72 6f 6d 20 74  is purged from t
35890 68 65 0a 62 61 63 6b 75 70 2c 20 6c 65 61 76 69  he.backup, leavi
358a0 6e 67 20 62 65 68 69 6e 64 20 6e 6f 20 66 6f 72  ng behind no for
358b0 65 6e 73 69 63 20 74 72 61 63 65 73 2e 20 20 4f  ensic traces.  O
358c0 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64  n the other hand
358d0 2c 0a 74 68 65 20 5b 62 61 63 6b 75 70 20 41 50  ,.the [backup AP
358e0 49 5d 20 75 73 65 73 20 66 65 77 65 72 20 43 50  I] uses fewer CP
358f0 55 20 63 79 63 6c 65 73 20 61 6e 64 20 63 61 6e  U cycles and can
35900 20 62 65 20 65 78 65 63 75 74 65 64 0a 69 6e 63   be executed.inc
35910 72 65 6d 65 6e 74 61 6c 6c 79 2e 0a 0a 3c 70 3e  rementally...<p>
35920 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20 69  .^The filename i
35930 6e 20 74 68 65 20 49 4e 54 4f 20 63 6c 61 75 73  n the INTO claus
35940 65 20 63 61 6e 20 62 65 20 61 6e 20 61 72 62 69  e can be an arbi
35950 74 72 61 72 79 20 53 51 4c 20 65 78 70 72 65 73  trary SQL expres
35960 73 69 6f 6e 0a 74 68 61 74 20 65 76 61 6c 75 61  sion.that evalua
35970 74 65 73 20 74 6f 20 61 20 73 74 72 69 6e 67 2e  tes to a string.
35980 0a 5e 54 68 65 20 66 69 6c 65 20 6e 61 6d 65 64  .^The file named
35990 20 62 79 20 74 68 65 20 49 4e 54 4f 20 63 6c 61   by the INTO cla
359a0 75 73 65 20 6d 75 73 74 20 6e 6f 74 20 70 72 65  use must not pre
359b0 76 69 6f 75 73 6c 79 20 65 78 69 73 74 2c 20 6f  viously exist, o
359c0 72 0a 65 6c 73 65 20 69 74 20 6d 75 73 74 20 62  r.else it must b
359d0 65 20 61 6e 20 65 6d 70 74 79 20 66 69 6c 65 2c  e an empty file,
359e0 20 6f 72 20 74 68 65 20 56 41 43 55 55 4d 20 49   or the VACUUM I
359f0 4e 54 4f 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  NTO command will
35a00 0a 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72  .fail with an er
35a10 72 6f 72 2e 0a 0a 3c 70 3e 0a 54 68 65 20 56 41  ror...<p>.The VA
35a20 43 55 55 4d 20 49 4e 54 4f 20 63 6f 6d 6d 61 6e  CUUM INTO comman
35a30 64 20 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  d is transaction
35a40 61 6c 20 69 6e 20 74 68 65 20 73 65 6e 73 65 20  al in the sense 
35a50 74 68 61 74 0a 74 68 65 20 67 65 6e 65 72 61 74  that.the generat
35a60 65 64 20 6f 75 74 70 75 74 20 64 61 74 61 62 61  ed output databa
35a70 73 65 20 69 73 20 61 20 63 6f 6e 73 69 73 74 65  se is a consiste
35a80 6e 74 20 73 6e 61 70 73 68 6f 74 20 6f 66 20 74  nt snapshot of t
35a90 68 65 0a 6f 72 67 69 6e 69 6e 61 6c 20 64 61 74  he.orgininal dat
35aa0 61 62 61 73 65 2e 20 20 48 6f 77 65 76 65 72 2c  abase.  However,
35ab0 20 69 66 20 74 68 65 20 56 41 43 55 55 4d 20 49   if the VACUUM I
35ac0 4e 54 4f 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 69  NTO command is.i
35ad0 6e 74 65 72 72 75 70 74 65 64 20 62 79 20 61 20  nterrupted by a 
35ae0 75 6e 70 6c 61 6e 6e 65 64 20 73 68 75 74 64 6f  unplanned shutdo
35af0 77 6e 20 6f 72 20 70 6f 77 65 72 20 6c 6f 73 65  wn or power lose
35b00 2c 20 69 6e 20 74 68 61 74 0a 63 61 73 65 20 74  , in that.case t
35b10 68 65 20 67 65 6e 65 72 61 74 65 64 20 6f 75 74  he generated out
35b20 70 75 74 20 64 61 74 61 62 61 73 65 20 6d 69 67  put database mig
35b30 68 74 20 6e 6f 74 20 62 65 20 63 6f 6d 70 6c 65  ht not be comple
35b40 74 65 2e 0a 41 6c 73 6f 2c 20 53 51 4c 69 74 65  te..Also, SQLite
35b50 20 64 6f 65 73 20 6e 6f 74 20 69 6e 76 6f 6b 65   does not invoke
35b60 20 66 73 79 6e 63 28 29 20 6f 72 20 46 6c 75 73   fsync() or Flus
35b70 68 46 69 6c 65 42 75 66 66 65 72 73 28 29 0a 6f  hFileBuffers().o
35b80 6e 20 74 68 65 20 67 65 6e 65 72 61 74 65 64 20  n the generated 
35b90 64 61 74 61 62 61 73 65 20 74 6f 20 65 6e 73 75  database to ensu
35ba0 72 65 20 74 68 61 74 20 69 74 20 68 61 73 20 72  re that it has r
35bb0 65 61 63 68 65 64 0a 6e 6f 6e 2d 76 6f 6c 61 74  eached.non-volat
35bc0 69 6c 65 20 73 74 6f 72 61 67 65 20 62 65 66 6f  ile storage befo
35bd0 72 65 20 63 6f 6d 70 6c 65 74 69 6e 67 2e 0a 0a  re completing...
35be0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
35bf0 74 20 68 6f 77 76 61 63 75 75 6d 77 6f 72 6b 73  t howvacuumworks
35c00 20 7b 68 6f 77 20 76 61 63 75 75 6d 20 77 6f 72   {how vacuum wor
35c10 6b 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 48 6f  ks}</tcl>.<h3>Ho
35c20 77 20 56 41 43 55 55 4d 20 77 6f 72 6b 73 3c 2f  w VACUUM works</
35c30 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43  h3>..<p>^The VAC
35c40 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b  UUM command work
35c50 73 20 62 79 20 63 6f 70 79 69 6e 67 20 74 68 65  s by copying the
35c60 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
35c70 20 64 61 74 61 62 61 73 65 20 69 6e 74 6f 0a 61   database into.a
35c80 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62   temporary datab
35c90 61 73 65 20 66 69 6c 65 20 61 6e 64 20 74 68 65  ase file and the
35ca0 6e 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68  n overwriting th
35cb0 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 74 68 20  e original with 
35cc0 74 68 65 20 0a 63 6f 6e 74 65 6e 74 73 20 6f 66  the .contents of
35cd0 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66   the temporary f
35ce0 69 6c 65 2e 20 5e 57 68 65 6e 20 6f 76 65 72 77  ile. ^When overw
35cf0 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69  riting the origi
35d00 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62 61 63 6b 0a  nal, a rollback.
35d10 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b 77 72 69 74  journal or [writ
35d20 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 57 41 4c  e-ahead log] WAL
35d30 20 66 69 6c 65 20 69 73 20 75 73 65 64 20 6a 75   file is used ju
35d40 73 74 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  st as it would b
35d50 65 20 66 6f 72 20 61 6e 79 0a 6f 74 68 65 72 20  e for any.other 
35d60 64 61 74 61 62 61 73 65 20 74 72 61 6e 73 61 63  database transac
35d70 74 69 6f 6e 2e 20 5e 54 68 69 73 20 6d 65 61 6e  tion. ^This mean
35d80 73 20 74 68 61 74 20 77 68 65 6e 20 56 41 43 55  s that when VACU
35d90 55 4d 69 6e 67 20 61 20 64 61 74 61 62 61 73 65  UMing a database
35da0 2c 20 0a 61 73 20 6d 75 63 68 20 61 73 20 74 77  , .as much as tw
35db0 69 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ice the size of 
35dc0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
35dd0 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 72 65  abase file is re
35de0 71 75 69 72 65 64 20 69 6e 20 66 72 65 65 0a 64  quired in free.d
35df0 69 73 6b 20 73 70 61 63 65 2e 0a 0a 3c 70 3e 5e  isk space...<p>^
35e00 54 68 65 20 56 41 43 55 55 4d 20 49 4e 54 4f 20  The VACUUM INTO 
35e10 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 74 68  command works th
35e20 65 20 73 61 6d 65 20 77 61 79 20 65 78 63 65 70  e same way excep
35e30 74 20 74 68 61 74 20 69 74 20 75 73 65 73 20 74  t that it uses t
35e40 68 65 20 66 69 6c 65 0a 6e 61 6d 65 64 20 6f 6e  he file.named on
35e50 20 74 68 65 20 49 4e 54 4f 20 63 6c 61 75 73 65   the INTO clause
35e60 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 74 68 65   in place of the
35e70 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62   temporary datab
35e80 61 73 65 20 61 6e 64 20 6f 6d 69 74 73 20 74 68  ase and omits th
35e90 65 0a 73 74 65 70 20 6f 66 20 63 6f 70 79 69 6e  e.step of copyin
35ea0 67 20 74 68 65 20 76 61 63 75 75 6d 65 64 20 64  g the vacuumed d
35eb0 61 74 61 62 61 73 65 20 62 61 63 6b 20 6f 76 65  atabase back ove
35ec0 72 20 74 6f 70 20 6f 66 20 74 68 65 20 6f 72 69  r top of the ori
35ed0 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65 2e 0a  ginal database..
35ee0 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20  .<p>^The VACUUM 
35ef0 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e  command may chan
35f00 67 65 20 74 68 65 20 5b 52 4f 57 49 44 20 7c 20  ge the [ROWID | 
35f10 52 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72 69  ROWIDs] of entri
35f20 65 73 20 69 6e 20 61 6e 79 0a 74 61 62 6c 65 73  es in any.tables
35f30 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 68 61 76   that do not hav
35f40 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49  e an explicit [I
35f50 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
35f60 45 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  EY]..</p>..<p>^A
35f70 20 56 41 43 55 55 4d 20 77 69 6c 6c 20 66 61 69   VACUUM will fai
35f80 6c 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  l if there is an
35f90 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
35fa0 6e 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61  n, or if there a
35fb0 72 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65 20 61  re one or.more a
35fc0 63 74 69 76 65 20 53 51 4c 20 73 74 61 74 65 6d  ctive SQL statem
35fd0 65 6e 74 73 20 77 68 65 6e 20 69 74 20 69 73 20  ents when it is 
35fe0 72 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 6e 20 61 6c  run...<p>^(An al
35ff0 74 65 72 6e 61 74 69 76 65 20 74 6f 20 75 73 69  ternative to usi
36000 6e 67 20 74 68 65 20 56 41 43 55 55 4d 20 63 6f  ng the VACUUM co
36010 6d 6d 61 6e 64 20 74 6f 0a 72 65 63 6c 61 69 6d  mmand to.reclaim
36020 20 73 70 61 63 65 20 61 66 74 65 72 20 64 61 74   space after dat
36030 61 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74  a has been delet
36040 65 64 20 69 73 20 61 75 74 6f 2d 76 61 63 75 75  ed is auto-vacuu
36050 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c 65 64 20  m mode, enabled 
36060 75 73 69 6e 67 0a 74 68 65 20 5b 61 75 74 6f 5f  using.the [auto_
36070 76 61 63 75 75 6d 5d 20 70 72 61 67 6d 61 2e 29  vacuum] pragma.)
36080 5e 20 5e 57 68 65 6e 20 5b 61 75 74 6f 5f 76 61  ^ ^When [auto_va
36090 63 75 75 6d 5d 20 69 73 20 65 6e 61 62 6c 65 64  cuum] is enabled
360a0 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a   for a database.
360b0 66 72 65 65 20 70 61 67 65 73 20 6d 61 79 20 62  free pages may b
360c0 65 20 72 65 63 6c 61 69 6d 65 64 20 61 66 74 65  e reclaimed afte
360d0 72 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 2c  r deleting data,
360e0 20 63 61 75 73 69 6e 67 20 74 68 65 20 66 69 6c   causing the fil
360f0 65 20 74 6f 20 73 68 72 69 6e 6b 2c 0a 77 69 74  e to shrink,.wit
36100 68 6f 75 74 20 72 65 62 75 69 6c 64 69 6e 67 20  hout rebuilding 
36110 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
36120 61 73 65 20 75 73 69 6e 67 20 56 41 43 55 55 4d  ase using VACUUM
36130 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 75 73 69  .  ^However, usi
36140 6e 67 0a 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  ng.[auto_vacuum]
36150 20 63 61 6e 20 6c 65 61 64 20 74 6f 20 65 78 74   can lead to ext
36160 72 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ra database file
36170 20 66 72 61 67 6d 65 6e 74 61 74 69 6f 6e 2e 20   fragmentation. 
36180 20 5e 41 6e 64 20 5b 61 75 74 6f 5f 76 61 63 75   ^And [auto_vacu
36190 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20 63 6f 6d  um].does not com
361a0 70 61 63 74 20 70 61 72 74 69 61 6c 6c 79 20 66  pact partially f
361b0 69 6c 6c 65 64 20 70 61 67 65 73 20 6f 66 20 74  illed pages of t
361c0 68 65 20 64 61 74 61 62 61 73 65 20 61 73 20 56  he database as V
361d0 41 43 55 55 4d 20 64 6f 65 73 2e 0a 0a 3c 2f 70  ACUUM does...</p
361e0 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
361f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
36200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
36210 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
36220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
36230 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
36240 20 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 69 6e   {INDEXED BY} in
36250 64 65 78 65 64 62 79 20 7b 7b 49 4e 44 45 58 45  dexedby {{INDEXE
36260 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45 58  D BY} {NOT INDEX
36270 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e  ED}}..</tcl>.<p>
36280 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
36290 70 68 72 61 73 65 20 66 6f 72 63 65 73 20 74 68  phrase forces th
362a0 65 20 5b 53 51 4c 69 74 65 20 71 75 65 72 79 20  e [SQLite query 
362b0 70 6c 61 6e 6e 65 72 5d 20 74 6f 20 75 73 65 20  planner] to use 
362c0 61 0a 70 61 72 74 69 63 75 6c 61 72 20 6e 61 6d  a.particular nam
362d0 65 64 20 69 6e 64 65 78 20 6f 6e 20 61 20 5b 44  ed index on a [D
362e0 45 4c 45 54 45 5d 2c 20 5b 53 45 4c 45 43 54 5d  ELETE], [SELECT]
362f0 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74  , or [UPDATE] st
36300 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20 49 4e 44  atement..The IND
36310 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 69  EXED BY phrase i
36320 73 20 61 6e 20 53 51 4c 69 74 65 20 65 78 74 65  s an SQLite exte
36330 6e 73 69 6f 6e 20 61 6e 64 0a 69 73 20 6e 6f 74  nsion and.is not
36340 20 70 6f 72 74 61 62 6c 65 20 74 6f 20 6f 74 68   portable to oth
36350 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  er SQL database 
36360 65 6e 67 69 6e 65 73 2e 3c 2f 70 3e 0a 0a 3c 74  engines.</p>..<t
36370 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62  cl>.RecursiveBub
36380 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69  bleDiagram quali
36390 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a  fied-table-name.
363a0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
363b0 22 49 4e 44 45 58 45 44 20 42 59 20 3c 79 79 74  "INDEXED BY <yyt
363c0 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f  erm>index-name</
363d0 79 79 74 65 72 6d 3e 22 20 70 68 72 61 73 65 20  yyterm>" phrase 
363e0 73 70 65 63 69 66 69 65 73 20 0a 74 68 61 74 20  specifies .that 
363f0 74 68 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a  the named index.
36400 6d 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 20  must be used in 
36410 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70  order to look up
36420 20 76 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 70   values on the p
36430 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a  receding table..
36440 5e 49 66 20 3c 79 79 74 65 72 6d 3e 69 6e 64 65  ^If <yyterm>inde
36450 78 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  x-name</yyterm> 
36460 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 6f  does not exist o
36470 72 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64  r cannot be used
36480 20 0a 66 6f 72 20 74 68 65 20 71 75 65 72 79 2c   .for the query,
36490 20 74 68 65 6e 20 74 68 65 20 70 72 65 70 61 72   then the prepar
364a0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c  ation of the SQL
364b0 20 73 74 61 74 65 6d 65 6e 74 20 66 61 69 6c 73   statement fails
364c0 2e 0a 5e 28 54 68 65 20 22 4e 4f 54 20 49 4e 44  ..^(The "NOT IND
364d0 45 58 45 44 22 20 63 6c 61 75 73 65 20 73 70 65  EXED" clause spe
364e0 63 69 66 69 65 73 20 74 68 61 74 20 6e 6f 20 69  cifies that no i
364f0 6e 64 65 78 20 73 68 61 6c 6c 20 62 65 20 75 73  ndex shall be us
36500 65 64 20 77 68 65 6e 0a 61 63 63 65 73 73 69 6e  ed when.accessin
36510 67 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20  g the preceding 
36520 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67  table, including
36530 20 69 6d 70 6c 69 65 64 20 69 6e 64 69 63 65 73   implied indices
36540 20 63 72 65 61 74 65 20 62 79 0a 55 4e 49 51 55   create by.UNIQU
36550 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45  E and PRIMARY KE
36560 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20  Y constraints.  
36570 48 6f 77 65 76 65 72 2c 20 74 68 65 20 5b 72 6f  However, the [ro
36580 77 69 64 5d 0a 63 61 6e 20 73 74 69 6c 6c 20 62  wid].can still b
36590 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f 6b 20 75  e used to look u
365a0 70 20 65 6e 74 72 69 65 73 20 65 76 65 6e 20 77  p entries even w
365b0 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45 58 45 44  hen "NOT INDEXED
365c0 22 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 29  " is specified.)
365d0 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d 65 20 53  ^</p>..<p>Some S
365e0 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  QL database engi
365f0 6e 65 73 20 70 72 6f 76 69 64 65 20 6e 6f 6e 2d  nes provide non-
36600 73 74 61 6e 64 61 72 64 20 22 68 69 6e 74 22 20  standard "hint" 
36610 6d 65 63 68 61 6e 69 73 6d 73 20 77 68 69 63 68  mechanisms which
36620 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20  .can be used to 
36630 67 69 76 65 20 74 68 65 20 71 75 65 72 79 20 6f  give the query o
36640 70 74 69 6d 69 7a 65 72 20 63 6c 75 65 73 20 61  ptimizer clues a
36650 62 6f 75 74 20 77 68 61 74 20 69 6e 64 69 63 65  bout what indice
36660 73 20 69 74 20 73 68 6f 75 6c 64 0a 75 73 65 20  s it should.use 
36670 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72  for a particular
36680 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
36690 20 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65   INDEX BY clause
366a0 20 6f 66 20 53 51 4c 69 74 65 20 69 73 20 0a 3c   of SQLite is .<
366b0 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 20 68 69  em>not</em> a hi
366c0 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 20  nting mechanism 
366d0 61 6e 64 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f  and it should no
366e0 74 20 62 65 20 75 73 65 64 20 61 73 20 73 75 63  t be used as suc
366f0 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45 44 20  h..^The INDEXED 
36700 42 59 20 63 6c 61 75 73 65 20 64 6f 65 73 20 6e  BY clause does n
36710 6f 74 20 67 69 76 65 20 74 68 65 20 6f 70 74 69  ot give the opti
36720 6d 69 7a 65 72 20 68 69 6e 74 73 20 61 62 6f 75  mizer hints abou
36730 74 20 77 68 69 63 68 20 69 6e 64 65 78 0a 74 6f  t which index.to
36740 20 75 73 65 3b 20 69 74 20 67 69 76 65 73 20 74   use; it gives t
36750 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 61 20 72  he optimizer a r
36760 65 71 75 69 72 65 6d 65 6e 74 20 6f 66 20 77 68  equirement of wh
36770 69 63 68 20 69 6e 64 65 78 20 74 6f 20 75 73 65  ich index to use
36780 2e 0a 5e 49 66 20 74 68 65 20 71 75 65 72 79 20  ..^If the query 
36790 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 75 6e 61  optimizer is una
367a0 62 6c 65 20 74 6f 20 75 73 65 20 74 68 65 20 69  ble to use the i
367b0 6e 64 65 78 20 73 70 65 63 69 66 69 65 64 20 62  ndex specified b
367c0 79 20 74 68 65 0a 49 4e 44 45 58 20 42 59 20 63  y the.INDEX BY c
367d0 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20  lause, then the 
367e0 71 75 65 72 79 20 77 69 6c 6c 20 66 61 69 6c 20  query will fail 
367f0 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f  with an error.</
36800 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 44 45 58  p>..<p>The INDEX
36810 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ED BY clause is 
36820 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 69 6e 74  <em>not</em> int
36830 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e  ended for use in
36840 20 74 75 6e 69 6e 67 0a 74 68 65 20 70 65 72 66   tuning.the perf
36850 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20 71 75 65  ormance of a que
36860 72 79 2e 20 20 54 68 65 20 69 6e 74 65 6e 74 20  ry.  The intent 
36870 6f 66 20 74 68 65 20 49 4e 44 45 58 45 44 20 42  of the INDEXED B
36880 59 20 63 6c 61 75 73 65 20 69 73 0a 74 6f 20 72  Y clause is.to r
36890 61 69 73 65 20 61 20 72 75 6e 2d 74 69 6d 65 20  aise a run-time 
368a0 65 72 72 6f 72 20 69 66 20 61 20 73 63 68 65 6d  error if a schem
368b0 61 20 63 68 61 6e 67 65 2c 20 73 75 63 68 20 61  a change, such a
368c0 73 20 64 72 6f 70 70 69 6e 67 20 6f 72 0a 63 72  s dropping or.cr
368d0 65 61 74 69 6e 67 20 61 6e 20 69 6e 64 65 78 2c  eating an index,
368e0 20 63 61 75 73 65 73 20 74 68 65 20 71 75 65 72   causes the quer
368f0 79 20 70 6c 61 6e 20 66 6f 72 20 61 20 74 69 6d  y plan for a tim
36900 65 2d 73 65 6e 73 69 74 69 76 65 20 71 75 65 72  e-sensitive quer
36910 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20 20 54 68  y.to change.  Th
36920 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  e INDEXED BY cla
36930 75 73 65 20 69 73 20 64 65 73 69 67 6e 65 64 20  use is designed 
36940 74 6f 20 68 65 6c 70 20 64 65 74 65 63 74 0a 75  to help detect.u
36950 6e 64 65 73 69 72 61 62 6c 65 20 71 75 65 72 79  ndesirable query
36960 20 70 6c 61 6e 20 63 68 61 6e 67 65 73 20 64 75   plan changes du
36970 72 69 6e 67 20 72 65 67 72 65 73 73 69 6f 6e 20  ring regression 
36980 74 65 73 74 69 6e 67 2e 0a 41 70 70 6c 69 63 61  testing..Applica
36990 74 69 6f 6e 20 0a 64 65 76 65 6c 6f 70 65 72 73  tion .developers
369a0 20 61 72 65 20 61 64 6d 6f 6e 69 73 68 65 64 20   are admonished 
369b0 74 6f 20 6f 6d 69 74 20 61 6c 6c 20 75 73 65 20  to omit all use 
369c0 6f 66 20 49 4e 44 45 58 45 44 20 42 59 20 64 75  of INDEXED BY du
369d0 72 69 6e 67 0a 61 70 70 6c 69 63 61 74 69 6f 6e  ring.application
369e0 20 64 65 73 69 67 6e 2c 20 69 6d 70 6c 65 6d 65   design, impleme
369f0 6e 74 61 74 69 6f 6e 2c 20 74 65 73 74 69 6e 67  ntation, testing
36a00 2c 20 61 6e 64 20 74 75 6e 69 6e 67 2e 20 20 49  , and tuning.  I
36a10 66 0a 49 4e 44 45 58 45 44 20 42 59 20 69 73 20  f.INDEXED BY is 
36a20 74 6f 20 62 65 20 75 73 65 64 20 61 74 20 61 6c  to be used at al
36a30 6c 2c 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20  l, it should be 
36a40 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20  inserted at the 
36a50 76 65 72 79 0a 65 6e 64 20 6f 66 20 74 68 65 20  very.end of the 
36a60 64 65 76 65 6c 6f 70 6d 65 6e 74 20 70 72 6f 63  development proc
36a70 65 73 73 20 77 68 65 6e 20 22 6c 6f 63 6b 69 6e  ess when "lockin
36a80 67 20 64 6f 77 6e 22 20 61 20 64 65 73 69 67 6e  g down" a design
36a90 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 65 65 20 41  .</p>..<h3>See A
36aa0 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c 6f 6c 3e 0a  lso:</h3>..<ol>.
36ab0 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 71 75 65 72  <li><p>The [quer
36ac0 79 20 70 6c 61 6e 6e 65 72 20 63 68 65 63 6b 6c  y planner checkl
36ad0 69 73 74 5d 20 64 65 73 63 72 69 62 65 73 20 73  ist] describes s
36ae0 74 65 70 73 20 74 68 61 74 20 61 70 70 6c 69 63  teps that applic
36af0 61 74 69 6f 6e 0a 64 65 76 65 6c 6f 70 65 72 73  ation.developers
36b00 20 73 68 6f 75 6c 64 20 66 6f 6c 6c 6f 77 69 6e   should followin
36b10 67 20 74 6f 20 68 65 6c 70 20 72 65 73 6f 6c 76  g to help resolv
36b20 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
36b30 70 72 6f 62 6c 65 6d 73 2e 0a 4e 6f 74 69 63 65  problems..Notice
36b40 20 74 68 65 20 74 68 61 74 20 74 68 65 20 75 73   the that the us
36b50 65 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59 20  e of INDEXED BY 
36b60 69 73 20 61 20 6c 61 73 74 20 72 65 73 6f 72 74  is a last resort
36b70 2c 20 74 6f 20 62 65 20 75 73 65 64 20 6f 6e 6c  , to be used onl
36b80 79 0a 77 68 65 6e 20 61 6c 6c 20 6f 74 68 65 72  y.when all other
36b90 20 6d 65 61 73 75 72 65 73 20 66 61 69 6c 2e 3c   measures fail.<
36ba0 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5b 75 70 6c  /p>..<li><p>[upl
36bb0 75 73 63 6f 6e 74 72 6f 6c 7c 54 68 65 20 75 6e  uscontrol|The un
36bc0 61 72 79 20 22 2b 22 20 6f 70 65 72 61 74 6f 72  ary "+" operator
36bd0 5d 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  ].can be used to
36be0 20 64 69 73 71 75 61 6c 69 66 79 20 74 65 72 6d   disqualify term
36bf0 73 20 69 6e 20 74 68 65 20 57 48 45 52 45 20 63  s in the WHERE c
36c00 6c 61 75 73 65 20 66 72 6f 6d 20 75 73 65 20 62  lause from use b
36c10 79 20 69 6e 64 69 63 65 73 2e 0a 43 61 72 65 66  y indices..Caref
36c20 75 6c 20 75 73 65 20 6f 66 20 75 6e 61 72 79 20  ul use of unary 
36c30 2b 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20  + can sometimes 
36c40 68 65 6c 70 20 70 72 65 76 65 6e 74 20 74 68 65  help prevent the
36c50 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 66   query planner f
36c60 72 6f 6d 0a 63 68 6f 6f 73 69 6e 67 20 61 20 70  rom.choosing a p
36c70 6f 6f 72 20 69 6e 64 65 78 20 77 69 74 68 6f 75  oor index withou
36c80 74 20 72 65 73 74 72 69 63 74 69 6e 67 20 69 74  t restricting it
36c90 20 74 6f 20 75 73 69 6e 67 20 6f 6e 65 20 73 70   to using one sp
36ca0 65 63 69 66 69 63 20 69 6e 64 65 78 2e 0a 43 61  ecific index..Ca
36cb0 72 65 66 75 6c 20 70 6c 61 63 65 6d 65 6e 74 20  reful placement 
36cc0 6f 66 20 75 6e 61 72 79 20 2b 20 6f 70 65 72 61  of unary + opera
36cd0 74 6f 72 73 20 69 73 20 61 20 62 65 74 74 65 72  tors is a better
36ce0 20 6d 65 74 68 6f 64 20 66 6f 72 20 63 6f 6e 74   method for cont
36cf0 72 6f 6c 6c 69 6e 67 20 0a 77 68 69 63 68 20 69  rolling .which i
36d00 6e 64 69 63 65 73 20 61 72 65 20 75 73 65 64 20  ndices are used 
36d10 62 79 20 61 20 71 75 65 72 79 2e 3c 2f 70 3e 0a  by a query.</p>.
36d20 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 73 71 6c  .<li><p>The [sql
36d30 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73  ite3_stmt_status
36d40 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  ()] C/C++ interf
36d50 61 63 65 20 74 6f 67 65 74 68 65 72 20 77 69 74  ace together wit
36d60 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 53 54  h the.[SQLITE_ST
36d70 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43 41  MTSTATUS_FULLSCA
36d80 4e 5f 53 54 45 50 5d 20 61 6e 64 20 5b 53 51 4c  N_STEP] and [SQL
36d90 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53  ITE_STMTSTATUS_S
36da0 4f 52 54 5d 20 76 65 72 62 73 0a 63 61 6e 20 62  ORT] verbs.can b
36db0 65 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74  e used to detect
36dc0 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 77 68 65   at run-time whe
36dd0 6e 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  n an SQL stateme
36de0 6e 74 20 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67  nt is not.making
36df0 20 65 66 66 65 63 74 69 76 65 20 75 73 65 20 6f   effective use o
36e00 66 20 69 6e 64 69 63 65 73 2e 20 20 4d 61 6e 79  f indices.  Many
36e10 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61   applications ma
36e20 79 20 70 72 65 66 65 72 20 74 6f 0a 75 73 65 20  y prefer to.use 
36e30 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d  the [sqlite3_stm
36e40 74 5f 73 74 61 74 75 73 28 29 5d 20 69 6e 74 65  t_status()] inte
36e50 72 66 61 63 65 20 74 6f 20 64 65 74 65 63 74 20  rface to detect 
36e60 69 6e 64 65 78 20 6d 69 73 75 73 65 0a 72 61 74  index misuse.rat
36e70 68 65 72 20 74 68 61 6e 20 74 68 65 20 49 4e 44  her than the IND
36e80 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 64  EXED BY phrase d
36e90 65 73 63 72 69 62 65 64 20 68 65 72 65 2e 3c 2f  escribed here.</
36ea0 70 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 0a  p>.</ol>..<tcl>.
36eb0 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74  set keyword_list
36ec0 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f   [lsort {.   ABO
36ed0 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a 20 20 20  RT.   ACTION.   
36ee0 41 44 44 0a 20 20 20 41 46 54 45 52 0a 20 20 20  ADD.   AFTER.   
36ef0 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a 20 20 20  ALL.   ALTER.   
36f00 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e 44 0a 20  ANALYZE.   AND. 
36f10 20 20 41 53 0a 20 20 20 41 53 43 0a 20 20 20 41    AS.   ASC.   A
36f20 54 54 41 43 48 0a 20 20 20 41 55 54 4f 49 4e 43  TTACH.   AUTOINC
36f30 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45  REMENT.   BEFORE
36f40 0a 20 20 20 42 45 47 49 4e 0a 20 20 20 42 45 54  .   BEGIN.   BET
36f50 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20 43 41  WEEN.   BY.   CA
36f60 53 43 41 44 45 0a 20 20 20 43 41 53 45 0a 20 20  SCADE.   CASE.  
36f70 20 43 41 53 54 0a 20 20 20 43 48 45 43 4b 0a 20   CAST.   CHECK. 
36f80 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20 43 4f 4c    COLLATE.   COL
36f90 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20  UMN.   COMMIT.  
36fa0 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20 43 4f 4e   CONFLICT.   CON
36fb0 53 54 52 41 49 4e 54 0a 20 20 20 43 52 45 41 54  STRAINT.   CREAT
36fc0 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20 43 55  E.   CROSS.   CU
36fd0 52 52 45 4e 54 0a 20 20 20 43 55 52 52 45 4e 54  RRENT.   CURRENT
36fe0 5f 44 41 54 45 0a 20 20 20 43 55 52 52 45 4e 54  _DATE.   CURRENT
36ff0 5f 54 49 4d 45 0a 20 20 20 43 55 52 52 45 4e 54  _TIME.   CURRENT
37000 5f 54 49 4d 45 53 54 41 4d 50 0a 20 20 20 44 41  _TIMESTAMP.   DA
37010 54 41 42 41 53 45 0a 20 20 20 44 45 46 41 55 4c  TABASE.   DEFAUL
37020 54 0a 20 20 20 44 45 46 45 52 52 45 44 0a 20 20  T.   DEFERRED.  
37030 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 20 44   DEFERRABLE.   D
37040 45 4c 45 54 45 0a 20 20 20 44 45 53 43 0a 20 20  ELETE.   DESC.  
37050 20 44 45 54 41 43 48 0a 20 20 20 44 49 53 54 49   DETACH.   DISTI
37060 4e 43 54 0a 20 20 20 44 4f 0a 20 20 20 44 52 4f  NCT.   DO.   DRO
37070 50 0a 20 20 20 45 4e 44 0a 20 20 20 45 41 43 48  P.   END.   EACH
37080 0a 20 20 20 45 4c 53 45 0a 20 20 20 45 53 43 41  .   ELSE.   ESCA
37090 50 45 0a 20 20 20 45 58 43 45 50 54 0a 20 20 20  PE.   EXCEPT.   
370a0 45 58 43 4c 55 53 49 56 45 0a 20 20 20 45 58 49  EXCLUSIVE.   EXI
370b0 53 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a 20  STS.   EXPLAIN. 
370c0 20 20 46 41 49 4c 0a 20 20 20 46 49 4c 54 45 52    FAIL.   FILTER
370d0 0a 20 20 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20  .   FOLLOWING.  
370e0 20 46 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e 0a   FOR.   FOREIGN.
370f0 20 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a     FROM.   FULL.
37100 20 20 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55 50     GLOB.   GROUP
37110 0a 20 20 20 48 41 56 49 4e 47 0a 20 20 20 49 46  .   HAVING.   IF
37120 0a 20 20 20 49 47 4e 4f 52 45 0a 20 20 20 49 4d  .   IGNORE.   IM
37130 4d 45 44 49 41 54 45 0a 20 20 20 49 4e 0a 20 20  MEDIATE.   IN.  
37140 20 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45   INDEX.   INDEXE
37150 44 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 0a 20  D.   INITIALLY. 
37160 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52    INNER.   INSER
37170 54 0a 20 20 20 49 4e 53 54 45 41 44 0a 20 20 20  T.   INSTEAD.   
37180 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e 54  INTERSECT.   INT
37190 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55 4c  O.   IS.   ISNUL
371a0 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59  L.   JOIN.   KEY
371b0 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45  .   LEFT.   LIKE
371c0 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54  .   LIMIT.   MAT
371d0 43 48 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20 20  CH.   NATURAL.  
371e0 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f   NO.   NOT.   NO
371f0 54 48 49 4e 47 0a 20 20 20 4e 4f 54 4e 55 4c 4c  THING.   NOTNULL
37200 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20  .   NULL.   OF. 
37210 20 20 4f 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20    OFFSET.   ON. 
37220 20 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20 20    OR.   ORDER.  
37230 20 4f 55 54 45 52 0a 20 20 20 4f 56 45 52 0a 20   OUTER.   OVER. 
37240 20 20 50 41 52 54 49 54 49 4f 4e 0a 20 20 20 50    PARTITION.   P
37250 4c 41 4e 0a 20 20 20 50 52 41 47 4d 41 0a 20 20  LAN.   PRAGMA.  
37260 20 50 52 45 43 45 44 49 4e 47 0a 20 20 20 50 52   PRECEDING.   PR
37270 49 4d 41 52 59 0a 20 20 20 51 55 45 52 59 0a 20  IMARY.   QUERY. 
37280 20 20 52 41 49 53 45 0a 20 20 20 52 41 4e 47 45    RAISE.   RANGE
37290 0a 20 20 20 52 45 43 55 52 53 49 56 45 0a 20 20  .   RECURSIVE.  
372a0 20 52 45 46 45 52 45 4e 43 45 53 0a 20 20 20 52   REFERENCES.   R
372b0 45 47 45 58 50 0a 20 20 20 52 45 49 4e 44 45 58  EGEXP.   REINDEX
372c0 0a 20 20 20 52 45 4c 45 41 53 45 0a 20 20 20 52  .   RELEASE.   R
372d0 45 4e 41 4d 45 0a 20 20 20 52 45 50 4c 41 43 45  ENAME.   REPLACE
372e0 0a 20 20 20 52 45 53 54 52 49 43 54 0a 20 20 20  .   RESTRICT.   
372f0 52 49 47 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43  RIGHT.   ROLLBAC
37300 4b 0a 20 20 20 52 4f 57 0a 20 20 20 52 4f 57 53  K.   ROW.   ROWS
37310 0a 20 20 20 53 41 56 45 50 4f 49 4e 54 0a 20 20  .   SAVEPOINT.  
37320 20 53 45 4c 45 43 54 0a 20 20 20 53 45 54 0a 20   SELECT.   SET. 
37330 20 20 54 41 42 4c 45 0a 20 20 20 54 45 4d 50 0a    TABLE.   TEMP.
37340 20 20 20 54 45 4d 50 4f 52 41 52 59 0a 20 20 20     TEMPORARY.   
37350 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52  THEN.   TO.   TR
37360 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54 52 49  ANSACTION.   TRI
37370 47 47 45 52 0a 20 20 20 55 4e 42 4f 55 4e 44 45  GGER.   UNBOUNDE
37380 44 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e  D.   UNION.   UN
37390 49 51 55 45 0a 20 20 20 55 50 44 41 54 45 0a 20  IQUE.   UPDATE. 
373a0 20 20 55 53 49 4e 47 0a 20 20 20 56 41 43 55 55    USING.   VACUU
373b0 4d 0a 20 20 20 56 41 4c 55 45 53 0a 20 20 20 56  M.   VALUES.   V
373c0 49 45 57 0a 20 20 20 56 49 52 54 55 41 4c 0a 20  IEW.   VIRTUAL. 
373d0 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52 45 0a    WHEN.   WHERE.
373e0 20 20 20 57 49 4e 44 4f 57 0a 20 20 20 57 49 54     WINDOW.   WIT
373f0 48 0a 20 20 20 57 49 54 48 4f 55 54 0a 7d 5d 0a  H.   WITHOUT.}].
37400 0a 68 64 5f 70 75 74 73 20 7b 3c 44 49 56 20 63  .hd_puts {<DIV c
37410 6c 61 73 73 3d 22 70 64 66 5f 73 65 63 74 69 6f  lass="pdf_sectio
37420 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51  n">}.Section {SQ
37430 4c 69 74 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b  Lite Keywords} k
37440 65 79 77 6f 72 64 73 20 7b 7b 2a 53 51 4c 20 6b  eywords {{*SQL k
37450 65 79 77 6f 72 64 7d 20 7b 53 51 4c 20 6b 65 79  eyword} {SQL key
37460 77 6f 72 64 73 7d 7d 0a 68 64 5f 70 75 74 73 20  words}}.hd_puts 
37470 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a  {</DIV>}.</tcl>.
37480 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73 74 61 6e  .<p>The SQL stan
37490 64 61 72 64 20 73 70 65 63 69 66 69 65 73 20 61  dard specifies a
374a0 20 6c 61 72 67 65 20 6e 75 6d 62 65 72 20 6f 66   large number of
374b0 20 6b 65 79 77 6f 72 64 73 20 77 68 69 63 68 20   keywords which 
374c0 6d 61 79 20 6e 6f 74 0a 62 65 20 75 73 65 64 20  may not.be used 
374d0 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20  as the names of 
374e0 74 61 62 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c  tables, indices,
374f0 20 63 6f 6c 75 6d 6e 73 2c 20 64 61 74 61 62 61   columns, databa
37500 73 65 73 2c 20 75 73 65 72 2d 64 65 66 69 6e 65  ses, user-define
37510 64 0a 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c  d.functions, col
37520 6c 61 74 69 6f 6e 73 2c 20 76 69 72 74 75 61 6c  lations, virtual
37530 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 73 2c 20   table modules, 
37540 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6e 61 6d  or any other nam
37550 65 64 20 6f 62 6a 65 63 74 2e 0a 54 68 65 20 6c  ed object..The l
37560 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 20  ist of keywords 
37570 69 73 20 73 6f 20 6c 6f 6e 67 20 74 68 61 74 20  is so long that 
37580 66 65 77 20 70 65 6f 70 6c 65 20 63 61 6e 20 72  few people can r
37590 65 6d 65 6d 62 65 72 20 74 68 65 6d 20 61 6c 6c  emember them all
375a0 2e 0a 46 6f 72 20 6d 6f 73 74 20 53 51 4c 20 63  ..For most SQL c
375b0 6f 64 65 2c 20 79 6f 75 72 20 73 61 66 65 73 74  ode, your safest
375c0 20 62 65 74 20 69 73 20 74 6f 20 6e 65 76 65 72   bet is to never
375d0 20 75 73 65 20 61 6e 79 20 45 6e 67 6c 69 73 68   use any English
375e0 20 6c 61 6e 67 75 61 67 65 0a 77 6f 72 64 20 61   language.word a
375f0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
37600 75 73 65 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a  user-defined obj
37610 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20  ect.</p>..<p>If 
37620 79 6f 75 20 77 61 6e 74 20 74 6f 20 75 73 65 20  you want to use 
37630 61 20 6b 65 79 77 6f 72 64 20 61 73 20 61 20 6e  a keyword as a n
37640 61 6d 65 2c 20 79 6f 75 20 6e 65 65 64 20 74 6f  ame, you need to
37650 20 71 75 6f 74 65 20 69 74 2e 20 20 54 68 65 72   quote it.  Ther
37660 65 0a 61 72 65 20 66 6f 75 72 20 77 61 79 73 20  e.are four ways 
37670 6f 66 20 71 75 6f 74 69 6e 67 20 6b 65 79 77 6f  of quoting keywo
37680 72 64 73 20 69 6e 20 53 51 4c 69 74 65 3a 3c 2f  rds in SQLite:</
37690 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75  p>..<p>.<blockqu
376a0 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72  ote>.<table>.<tr
376b0 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
376c0 70 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64 27 3c  p"><b>'keyword'<
376d0 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /b></td><td widt
376e0 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74  h="20"></td>..<t
376f0 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20  d>^A keyword in 
37700 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 73  single quotes is
37710 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61   a string litera
37720 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74  l.</td></tr>..<t
37730 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
37740 6f 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72 64 22  op"><b>"keyword"
37750 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74  </b></td><td></t
37760 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f  d>..<td>^A keywo
37770 72 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f  rd in double-quo
37780 74 65 73 20 69 73 20 61 6e 20 69 64 65 6e 74 69  tes is an identi
37790 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  fier.</td></tr>.
377a0 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
377b0 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 31 3b 6b  ="top"><b>&#91;k
377c0 65 79 77 6f 72 64 26 23 39 33 3b 3c 2f 62 3e 3c  eyword&#93;</b><
377d0 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c  /td><td></td>..<
377e0 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e  td>^A keyword en
377f0 63 6c 6f 73 65 64 20 69 6e 20 73 71 75 61 72 65  closed in square
37800 20 62 72 61 63 6b 65 74 73 20 69 73 20 0a 20 20   brackets is .  
37810 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66        an identif
37820 69 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f  ier.  This is no
37830 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20  t standard SQL. 
37840 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65   This quoting me
37850 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20  chanism.        
37860 69 73 20 75 73 65 64 20 62 79 20 4d 53 20 41 63  is used by MS Ac
37870 63 65 73 73 20 61 6e 64 20 53 51 4c 20 53 65 72  cess and SQL Ser
37880 76 65 72 20 61 6e 64 20 69 73 20 69 6e 63 6c 75  ver and is inclu
37890 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f  ded in SQLite fo
378a0 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74  r.        compat
378b0 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74  ibility.</td></t
378c0 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c  r>..<tr>.<td val
378d0 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39  ign="top"><b>&#9
378e0 36 3b 6b 65 79 77 6f 72 64 26 23 39 36 3b 3c 2f  6;keyword&#96;</
378f0 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e  b></td><td></td>
37900 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64  ..<td>^A keyword
37910 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 67 72 61   enclosed in gra
37920 76 65 20 61 63 63 65 6e 74 73 20 28 41 53 43 49  ve accents (ASCI
37930 49 20 63 6f 64 65 20 39 36 29 20 69 73 20 0a 20  I code 96) is . 
37940 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69         an identi
37950 66 69 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e  fier.  This is n
37960 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e  ot standard SQL.
37970 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d    This quoting m
37980 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20  echanism.       
37990 20 69 73 20 75 73 65 64 20 62 79 20 4d 79 53 51   is used by MySQ
379a0 4c 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65  L and is include
379b0 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a  d in SQLite for.
379c0 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62          compatib
379d0 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e  ility.</td></tr>
379e0 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
379f0 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70  kquote>.</p>..<p
37a00 3e 46 6f 72 20 72 65 73 69 6c 69 65 6e 63 65 20  >For resilience 
37a10 77 68 65 6e 20 63 6f 6e 66 72 6f 6e 74 65 64 20  when confronted 
37a20 77 69 74 68 20 68 69 73 74 6f 72 69 63 61 6c 20  with historical 
37a30 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  SQL statements, 
37a40 53 51 4c 69 74 65 0a 77 69 6c 6c 20 73 6f 6d 65  SQLite.will some
37a50 74 69 6d 65 73 20 62 65 6e 64 20 74 68 65 20 71  times bend the q
37a60 75 6f 74 69 6e 67 20 72 75 6c 65 73 20 61 62 6f  uoting rules