Documentation Source Text

Hex Artifact Content
Login

Artifact d0acbbd99fa0f13d027d362abde67da40d2f0c004ace520d132e9027cbd694e9:


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 0a 6f 72 20 74 6f 20  e a table.or to 
0e70: 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
0e80: 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20   to an existing 
0e90: 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  table..</p>..<p>
0ea0: 20 5e 28 54 68 65 20 52 45 4e 41 4d 45 20 54 4f   ^(The RENAME TO
0eb0: 20 73 79 6e 74 61 78 20 63 68 61 6e 67 65 73 20   syntax changes 
0ec0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 3c 79 79 74  the name of <yyt
0ed0: 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  erm>table-name</
0ee0: 79 79 74 65 72 6d 3e 0a 74 6f 20 3c 79 79 74 65  yyterm>.to <yyte
0ef0: 72 6d 3e 6e 65 77 2d 74 61 62 6c 65 2d 6e 61 6d  rm>new-table-nam
0f00: 65 3c 2f 79 79 74 65 72 6d 3e 2e 29 5e 0a 54 68  e</yyterm>.)^.Th
0f10: 69 73 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e  is command .cann
0f20: 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20 6d 6f  ot be used to mo
0f30: 76 65 20 61 20 74 61 62 6c 65 20 62 65 74 77 65  ve a table betwe
0f40: 65 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  en attached data
0f50: 62 61 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20 72  bases, only to r
0f60: 65 6e 61 6d 65 20 0a 61 20 74 61 62 6c 65 20 77  ename .a table w
0f70: 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64  ithin the same d
0f80: 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70  atabase.</p>..<p
0f90: 3e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20  > ^If the table 
0fa0: 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 68 61  being renamed ha
0fb0: 73 20 74 72 69 67 67 65 72 73 20 6f 72 20 69 6e  s triggers or in
0fc0: 64 69 63 65 73 2c 20 74 68 65 6e 20 74 68 65 73  dices, then thes
0fd0: 65 20 72 65 6d 61 69 6e 0a 61 74 74 61 63 68 65  e remain.attache
0fe0: 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61  d to the table a
0ff0: 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65 6e  fter it has been
1000: 20 72 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77 65   renamed.  ^Howe
1010: 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61 72  ver, if there ar
1020: 65 0a 61 6e 79 20 76 69 65 77 20 64 65 66 69 6e  e.any view defin
1030: 69 74 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74 65  itions, or state
1040: 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64 20 62  ments executed b
1050: 79 20 74 72 69 67 67 65 72 73 20 74 68 61 74 20  y triggers that 
1060: 72 65 66 65 72 20 74 6f 0a 74 68 65 20 74 61 62  refer to.the tab
1070: 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64  le being renamed
1080: 2c 20 74 68 65 73 65 20 61 72 65 20 6e 6f 74 20  , these are not 
1090: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d 6f  automatically mo
10a0: 64 69 66 69 65 64 20 74 6f 20 75 73 65 20 74 68  dified to use th
10b0: 65 20 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d 65  e new.table name
10c0: 2e 20 49 66 20 74 68 69 73 20 69 73 20 72 65 71  . If this is req
10d0: 75 69 72 65 64 2c 20 74 68 65 20 74 72 69 67 67  uired, the trigg
10e0: 65 72 73 20 6f 72 20 76 69 65 77 20 64 65 66 69  ers or view defi
10f0: 6e 69 74 69 6f 6e 73 20 6d 75 73 74 20 62 65 0a  nitions must be.
1100: 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63 72  dropped and recr
1110: 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68 65  eated to use the
1120: 20 6e 65 77 20 74 61 62 6c 65 20 6e 61 6d 65 20   new table name 
1130: 62 79 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c  by hand..</p>..<
1140: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c  blockquote><tabl
1150: 65 20 62 6f 72 64 65 72 3d 22 31 22 20 63 65 6c  e border="1" cel
1160: 6c 70 61 64 64 69 6e 67 3d 22 31 30 22 3e 0a 3c  lpadding="10">.<
1170: 74 72 3e 3c 74 64 3e 0a 3c 65 6d 3e 49 6d 70 6f  tr><td>.<em>Impo
1180: 72 74 61 6e 74 20 4e 6f 74 65 3a 3c 2f 65 6d 3e  rtant Note:</em>
1190: 0a 54 68 65 20 27 41 4c 54 45 52 20 54 41 42 4c  .The 'ALTER TABL
11a0: 45 20 2e 2e 2e 20 52 45 4e 41 4d 45 20 54 4f 20  E ... RENAME TO 
11b0: 2e 2e 2e 27 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  ...' command doe
11c0: 73 20 6e 6f 74 20 75 70 64 61 74 65 20 61 63 74  s not update act
11d0: 69 6f 6e 0a 73 74 61 74 65 6d 65 6e 74 73 20 77  ion.statements w
11e0: 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 6f  ithin triggers o
11f0: 72 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  r SELECT stateme
1200: 6e 74 73 20 77 69 74 68 69 6e 20 76 69 65 77 73  nts within views
1210: 2e 0a 49 66 20 74 68 65 20 74 61 62 6c 65 20 62  ..If the table b
1220: 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 69 73 20  eing renamed is 
1230: 72 65 66 65 72 65 6e 63 65 64 20 66 72 6f 6d 20  referenced from 
1240: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
1250: 6f 72 20 76 69 65 77 73 2c 0a 74 68 65 6e 20 74  or views,.then t
1260: 68 6f 73 65 20 74 72 69 67 67 65 72 73 20 61 6e  hose triggers an
1270: 64 20 76 69 65 77 73 20 6d 75 73 74 20 62 65 20  d views must be 
1280: 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63 72  dropped and recr
1290: 65 61 74 65 64 20 73 65 70 61 72 61 74 65 6c 79  eated separately
12a0: 0a 62 79 20 74 68 65 20 61 70 70 6c 69 63 61 74  .by the applicat
12b0: 69 6f 6e 2e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c  ion..</td></tr><
12c0: 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
12d0: 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 49 66 20 5b 66  uote>..<p>^If [f
12e0: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
12f0: 72 61 69 6e 74 73 5d 20 61 72 65 20 0a 5b 66 6f  raints] are .[fo
1300: 72 65 69 67 6e 5f 6b 65 79 73 20 70 72 61 67 6d  reign_keys pragm
1310: 61 20 7c 20 65 6e 61 62 6c 65 64 5d 20 77 68 65  a | enabled] whe
1320: 6e 20 61 20 74 61 62 6c 65 20 69 73 20 72 65 6e  n a table is ren
1330: 61 6d 65 64 2c 20 74 68 65 6e 20 61 6e 79 0a 5b  amed, then any.[
1340: 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75  foreign-key-clau
1350: 73 65 20 7c 20 52 45 46 45 52 45 4e 43 45 53 20  se | REFERENCES 
1360: 63 6c 61 75 73 65 73 5d 20 69 6e 20 61 6e 79 20  clauses] in any 
1370: 74 61 62 6c 65 20 28 65 69 74 68 65 72 20 74 68  table (either th
1380: 65 0a 74 61 62 6c 65 20 62 65 69 6e 67 20 72 65  e.table being re
1390: 6e 61 6d 65 64 20 6f 72 20 73 6f 6d 65 20 6f 74  named or some ot
13a0: 68 65 72 20 74 61 62 6c 65 29 0a 74 68 61 74 20  her table).that 
13b0: 72 65 66 65 72 20 74 6f 20 74 68 65 20 74 61 62  refer to the tab
13c0: 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64  le being renamed
13d0: 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 74 6f   are modified to
13e0: 20 72 65 66 65 72 20 0a 74 6f 20 74 68 65 20 72   refer .to the r
13f0: 65 6e 61 6d 65 64 20 74 61 62 6c 65 20 62 79 20  enamed table by 
1400: 69 74 73 20 6e 65 77 20 6e 61 6d 65 2e 0a 0a 3c  its new name...<
1410: 70 3e 20 5e 54 68 65 20 41 44 44 20 43 4f 4c 55  p> ^The ADD COLU
1420: 4d 4e 20 73 79 6e 74 61 78 0a 69 73 20 75 73 65  MN syntax.is use
1430: 64 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63  d to add a new c
1440: 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69 73  olumn to an exis
1450: 74 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 54 68 65  ting table..^The
1460: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 69 73 20 61   new column is a
1470: 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64 20 74  lways appended t
1480: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
1490: 20 6c 69 73 74 20 6f 66 20 65 78 69 73 74 69 6e   list of existin
14a0: 67 20 63 6f 6c 75 6d 6e 73 2e 0a 54 68 65 20 5b  g columns..The [
14b0: 63 6f 6c 75 6d 6e 2d 64 65 66 5d 20 72 75 6c 65  column-def] rule
14c0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 68 61   defines the cha
14d0: 72 61 63 74 65 72 69 73 74 69 63 73 20 6f 66 20  racteristics of 
14e0: 74 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 2e 0a  the new column..
14f0: 5e 28 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e  ^(The new column
1500: 20 6d 61 79 20 74 61 6b 65 20 61 6e 79 20 6f 66   may take any of
1510: 20 74 68 65 20 66 6f 72 6d 73 20 70 65 72 6d 69   the forms permi
1520: 73 73 69 62 6c 65 20 69 6e 20 61 20 5b 43 52 45  ssible in a [CRE
1530: 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65  ATE TABLE].state
1540: 6d 65 6e 74 2c 20 77 69 74 68 20 74 68 65 20 66  ment, with the f
1550: 6f 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63  ollowing restric
1560: 74 69 6f 6e 73 3a 29 5e 0a 3c 75 6c 3e 0a 3c 6c  tions:)^.<ul>.<l
1570: 69 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61  i>^The column ma
1580: 79 20 6e 6f 74 20 68 61 76 65 20 61 20 50 52 49  y not have a PRI
1590: 4d 41 52 59 20 4b 45 59 20 6f 72 20 55 4e 49 51  MARY KEY or UNIQ
15a0: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 3c 2f  UE constraint.</
15b0: 6c 69 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c  li>.<li>^The col
15c0: 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65  umn may not have
15d0: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
15e0: 20 6f 66 20 43 55 52 52 45 4e 54 5f 54 49 4d 45   of CURRENT_TIME
15f0: 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20  , CURRENT_DATE, 
1600: 0a 20 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d  .    CURRENT_TIM
1610: 45 53 54 41 4d 50 2c 20 6f 72 20 61 6e 20 65 78  ESTAMP, or an ex
1620: 70 72 65 73 73 69 6f 6e 20 69 6e 20 70 61 72 65  pression in pare
1630: 6e 74 68 65 73 65 73 2e 3c 2f 6c 69 3e 0a 3c 6c  ntheses.</li>.<l
1640: 69 3e 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c  i>^If a NOT NULL
1650: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 73   constraint is s
1660: 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74  pecified, then t
1670: 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 68  he column must h
1680: 61 76 65 20 61 0a 20 20 20 20 64 65 66 61 75 6c  ave a.    defaul
1690: 74 20 76 61 6c 75 65 20 6f 74 68 65 72 20 74 68  t value other th
16a0: 61 6e 20 4e 55 4c 4c 2e 0a 3c 6c 69 3e 5e 49 66  an NULL..<li>^If
16b0: 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f   [foreign key co
16c0: 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65 20 5b  nstraints] are [
16d0: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70 72 61  foreign_keys pra
16e0: 67 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d 20 61  gma | enabled] a
16f0: 6e 64 0a 20 20 20 20 61 20 63 6f 6c 75 6d 6e 20  nd.    a column 
1700: 77 69 74 68 20 61 20 5b 66 6f 72 65 69 67 6e 2d  with a [foreign-
1710: 6b 65 79 2d 63 6c 61 75 73 65 20 7c 20 52 45 46  key-clause | REF
1720: 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 5d 0a  ERENCES clause].
1730: 20 20 20 20 69 73 20 61 64 64 65 64 2c 20 74 68      is added, th
1740: 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 68 61  e column must ha
1750: 76 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  ve a default val
1760: 75 65 20 6f 66 20 4e 55 4c 4c 2e 0a 3c 2f 75 6c  ue of NULL..</ul
1770: 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 61 6c 73 6f  >..<p>^Note also
1780: 20 74 68 61 74 20 77 68 65 6e 20 61 64 64 69 6e   that when addin
1790: 67 20 61 20 5b 43 48 45 43 4b 20 63 6f 6e 73 74  g a [CHECK const
17a0: 72 61 69 6e 74 5d 2c 20 74 68 65 20 43 48 45 43  raint], the CHEC
17b0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 0a 69 73 20  K constraint.is 
17c0: 6e 6f 74 20 74 65 73 74 65 64 20 61 67 61 69 6e  not tested again
17d0: 73 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 72  st preexisting r
17e0: 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ows of the table
17f0: 2e 0a 5e 54 68 69 73 20 63 61 6e 20 72 65 73 75  ..^This can resu
1800: 6c 74 20 69 6e 20 61 20 74 61 62 6c 65 20 74 68  lt in a table th
1810: 61 74 20 63 6f 6e 74 61 69 6e 73 20 64 61 74 61  at contains data
1820: 20 74 68 61 74 0a 69 73 20 69 6e 20 76 69 6f 6c   that.is in viol
1830: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 43 48 45  ation of the CHE
1840: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 20  CK constraint.  
1850: 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  Future versions 
1860: 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68 74 0a  of SQLite might.
1870: 63 68 61 6e 67 65 20 74 6f 20 76 61 6c 69 64 61  change to valida
1880: 74 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  te CHECK constra
1890: 69 6e 74 73 20 61 73 20 74 68 65 79 20 61 72 65  ints as they are
18a0: 20 61 64 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e   added.</p>..<p>
18b0: 20 54 68 65 20 65 78 65 63 75 74 69 6f 6e 20 74   The execution t
18c0: 69 6d 65 20 6f 66 20 74 68 65 20 41 4c 54 45 52  ime of the ALTER
18d0: 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69   TABLE command i
18e0: 73 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 6f 66  s independent of
18f0: 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 64  .the amount of d
1900: 61 74 61 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ata in the table
1910: 2e 20 20 54 68 65 20 41 4c 54 45 52 20 54 41 42  .  The ALTER TAB
1920: 4c 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20  LE command runs 
1930: 61 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20 61 20  as quickly.on a 
1940: 74 61 62 6c 65 20 77 69 74 68 20 31 30 20 6d 69  table with 10 mi
1950: 6c 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20 69 74  llion rows as it
1960: 20 64 6f 65 73 20 6f 6e 20 61 20 74 61 62 6c 65   does on a table
1970: 20 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c 2f 70   with 1 row..</p
1980: 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44 44 20  >..<p>After ADD 
1990: 43 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65 6e 20  COLUMN has been 
19a0: 72 75 6e 20 6f 6e 20 61 20 64 61 74 61 62 61 73  run on a databas
19b0: 65 2c 20 74 68 61 74 20 64 61 74 61 62 61 73 65  e, that database
19c0: 20 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72 65 61   will not.be rea
19d0: 64 61 62 6c 65 20 62 79 20 53 51 4c 69 74 65 20  dable by SQLite 
19e0: 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20 28 5b  version 3.1.3 ([
19f0: 64 61 74 65 6f 66 3a 33 2e 31 2e 33 5d 29 20 61  dateof:3.1.3]) a
1a00: 6e 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70 3e 0a  nd earlier.</p>.
1a10: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
1a20: 74 20 6f 74 68 65 72 61 6c 74 65 72 3c 2f 74 63  t otheralter</tc
1a30: 6c 3e 0a 3c 68 33 3e 4d 61 6b 69 6e 67 20 4f 74  l>.<h3>Making Ot
1a40: 68 65 72 20 4b 69 6e 64 73 20 4f 66 20 54 61 62  her Kinds Of Tab
1a50: 6c 65 20 53 63 68 65 6d 61 20 43 68 61 6e 67 65  le Schema Change
1a60: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 54 68 65 20  s</h3>..<p> The 
1a70: 6f 6e 6c 79 20 73 63 68 65 6d 61 20 61 6c 74 65  only schema alte
1a80: 72 69 6e 67 20 63 6f 6d 6d 61 6e 64 73 20 64 69  ring commands di
1a90: 72 65 63 74 6c 79 20 73 75 70 70 6f 72 74 65 64  rectly supported
1aa0: 20 62 79 20 53 51 4c 69 74 65 20 61 72 65 20 74   by SQLite are t
1ab0: 68 65 0a 22 72 65 6e 61 6d 65 20 74 61 62 6c 65  he."rename table
1ac0: 22 20 61 6e 64 20 22 61 64 64 20 63 6f 6c 75 6d  " and "add colum
1ad0: 6e 22 20 63 6f 6d 6d 61 6e 64 73 20 73 68 6f 77  n" commands show
1ae0: 6e 20 61 62 6f 76 65 2e 20 20 48 6f 77 65 76 65  n above.  Howeve
1af0: 72 2c 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  r, applications.
1b00: 63 61 6e 20 6d 61 6b 65 20 6f 74 68 65 72 20 61  can make other a
1b10: 72 62 69 74 72 61 72 79 20 63 68 61 6e 67 65 73  rbitrary changes
1b20: 20 74 6f 20 74 68 65 20 66 6f 72 6d 61 74 20 6f   to the format o
1b30: 66 20 61 20 74 61 62 6c 65 20 75 73 69 6e 67 20  f a table using 
1b40: 61 20 73 69 6d 70 6c 65 0a 73 65 71 75 65 6e 63  a simple.sequenc
1b50: 65 20 6f 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e  e of operations.
1b60: 0a 54 68 65 20 73 74 65 70 73 20 74 6f 20 6d 61  .The steps to ma
1b70: 6b 65 20 61 72 62 69 74 72 61 72 79 20 63 68 61  ke arbitrary cha
1b80: 6e 67 65 73 20 74 6f 20 74 68 65 20 73 63 68 65  nges to the sche
1b90: 6d 61 20 64 65 73 69 67 6e 20 6f 66 20 73 6f 6d  ma design of som
1ba0: 65 20 74 61 62 6c 65 20 58 0a 61 72 65 20 61 73  e table X.are as
1bb0: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a   follows:..<ol>.
1bc0: 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65 69  <li><p>.If forei
1bd0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
1be0: 74 73 20 61 72 65 20 65 6e 61 62 6c 65 64 2c 0a  ts are enabled,.
1bf0: 64 69 73 61 62 6c 65 20 74 68 65 6d 20 75 73 69  disable them usi
1c00: 6e 67 20 5b 50 52 41 47 4d 41 20 66 6f 72 65 69  ng [PRAGMA forei
1c10: 67 6e 5f 6b 65 79 73 20 7c 20 50 52 41 47 4d 41  gn_keys | PRAGMA
1c20: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3d 4f 46   foreign_keys=OF
1c30: 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 53 74 61  F]...<li><p>.Sta
1c40: 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
1c50: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 52 65 6d 65 6d  ...<li><p>.Remem
1c60: 62 65 72 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  ber the format o
1c70: 66 20 61 6c 6c 20 69 6e 64 65 78 65 73 20 61 6e  f all indexes an
1c80: 64 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63  d triggers assoc
1c90: 69 61 74 65 64 20 77 69 74 68 20 74 61 62 6c 65  iated with table
1ca0: 20 58 2e 0a 54 68 69 73 20 69 6e 66 6f 72 6d 61   X..This informa
1cb0: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 6e 65 65  tion will be nee
1cc0: 64 65 64 20 69 6e 20 73 74 65 70 20 38 20 62 65  ded in step 8 be
1cd0: 6c 6f 77 2e 20 20 4f 6e 65 20 77 61 79 20 74 6f  low.  One way to
1ce0: 20 64 6f 20 74 68 69 73 20 69 73 0a 74 6f 20 72   do this is.to r
1cf0: 75 6e 20 61 20 71 75 65 72 79 20 6c 69 6b 65 20  un a query like 
1d00: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 53  the following:.S
1d10: 45 4c 45 43 54 20 74 79 70 65 2c 20 73 71 6c 20  ELECT type, sql 
1d20: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
1d30: 65 72 20 57 48 45 52 45 20 74 62 6c 5f 6e 61 6d  er WHERE tbl_nam
1d40: 65 3d 27 58 27 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  e='X'...<li><p>.
1d50: 55 73 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c  Use [CREATE TABL
1d60: 45 5d 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  E] to construct 
1d70: 61 20 6e 65 77 20 74 61 62 6c 65 20 22 6e 65 77  a new table "new
1d80: 5f 58 22 20 74 68 61 74 20 69 73 20 69 6e 20 74  _X" that is in t
1d90: 68 65 20 64 65 73 69 72 65 64 0a 72 65 76 69 73  he desired.revis
1da0: 65 64 20 66 6f 72 6d 61 74 20 6f 66 20 74 61 62  ed format of tab
1db0: 6c 65 20 58 2e 20 20 4d 61 6b 65 20 73 75 72 65  le X.  Make sure
1dc0: 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 20 22   that the name "
1dd0: 6e 65 77 5f 58 22 20 64 6f 65 73 20 6e 6f 74 20  new_X" does not 
1de0: 63 6f 6c 6c 69 64 65 0a 77 69 74 68 20 61 6e 79  collide.with any
1df0: 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 20   existing table 
1e00: 6e 61 6d 65 2c 20 6f 66 20 63 6f 75 72 73 65 2e  name, of course.
1e10: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 54 72 61 6e 73 66  ..<li><p>.Transf
1e20: 65 72 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20  er content from 
1e30: 58 20 69 6e 74 6f 20 6e 65 77 5f 58 20 75 73 69  X into new_X usi
1e40: 6e 67 20 61 20 73 74 61 74 65 6d 65 6e 74 0a 6c  ng a statement.l
1e50: 69 6b 65 3a 20 49 4e 53 45 52 54 20 49 4e 54 4f  ike: INSERT INTO
1e60: 20 6e 65 77 5f 58 20 53 45 4c 45 43 54 20 2e 2e   new_X SELECT ..
1e70: 2e 20 46 52 4f 4d 20 58 2e 0a 0a 3c 6c 69 3e 3c  . FROM X...<li><
1e80: 70 3e 0a 44 72 6f 70 20 74 68 65 20 6f 6c 64 20  p>.Drop the old 
1e90: 74 61 62 6c 65 20 58 3a 20 20 5b 44 52 4f 50 20  table X:  [DROP 
1ea0: 54 41 42 4c 45 20 7c 20 44 52 4f 50 20 54 41 42  TABLE | DROP TAB
1eb0: 4c 45 20 58 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  LE X]...<li><p>.
1ec0: 43 68 61 6e 67 65 20 74 68 65 20 6e 61 6d 65 20  Change the name 
1ed0: 6f 66 20 6e 65 77 5f 58 20 74 6f 20 58 20 75 73  of new_X to X us
1ee0: 69 6e 67 3a 20 41 4c 54 45 52 20 54 41 42 4c 45  ing: ALTER TABLE
1ef0: 20 6e 65 77 5f 58 20 52 45 4e 41 4d 45 20 54 4f   new_X RENAME TO
1f00: 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55 73 65   X...<li><p>.Use
1f10: 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20   [CREATE INDEX] 
1f20: 61 6e 64 20 5b 43 52 45 41 54 45 20 54 52 49 47  and [CREATE TRIG
1f30: 47 45 52 5d 20 74 6f 20 72 65 63 6f 6e 73 74 72  GER] to reconstr
1f40: 75 63 74 20 69 6e 64 65 78 65 73 20 61 6e 64 20  uct indexes and 
1f50: 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
1f60: 74 65 64 20 77 69 74 68 20 74 61 62 6c 65 20 58  ted with table X
1f70: 2e 20 20 50 65 72 68 61 70 73 20 75 73 65 20 74  .  Perhaps use t
1f80: 68 65 20 6f 6c 64 20 66 6f 72 6d 61 74 20 6f 66  he old format of
1f90: 20 74 68 65 20 74 72 69 67 67 65 72 73 20 61 6e   the triggers an
1fa0: 64 0a 69 6e 64 65 78 65 73 20 73 61 76 65 64 20  d.indexes saved 
1fb0: 66 72 6f 6d 20 73 74 65 70 20 33 20 61 62 6f 76  from step 3 abov
1fc0: 65 20 61 73 20 61 20 67 75 69 64 65 2c 20 6d 61  e as a guide, ma
1fd0: 6b 69 6e 67 20 63 68 61 6e 67 65 73 20 61 73 20  king changes as 
1fe0: 61 70 70 72 6f 70 72 69 61 74 65 0a 66 6f 72 20  appropriate.for 
1ff0: 74 68 65 20 61 6c 74 65 72 61 74 69 6f 6e 2e 0a  the alteration..
2000: 0a 3c 6c 69 3e 3c 70 3e 49 66 20 61 6e 79 20 76  .<li><p>If any v
2010: 69 65 77 73 20 72 65 66 65 72 20 74 6f 20 74 61  iews refer to ta
2020: 62 6c 65 20 58 20 69 6e 20 61 20 77 61 79 20 74  ble X in a way t
2030: 68 61 74 20 69 73 20 61 66 66 65 63 74 65 64 20  hat is affected 
2040: 62 79 20 74 68 65 0a 73 63 68 65 6d 61 20 63 68  by the.schema ch
2050: 61 6e 67 65 2c 20 74 68 65 6e 20 64 72 6f 70 20  ange, then drop 
2060: 74 68 6f 73 65 20 76 69 65 77 73 20 75 73 69 6e  those views usin
2070: 67 20 5b 44 52 4f 50 20 56 49 45 57 5d 20 61 6e  g [DROP VIEW] an
2080: 64 20 72 65 63 72 65 61 74 65 20 74 68 65 6d 0a  d recreate them.
2090: 77 69 74 68 20 77 68 61 74 65 76 65 72 20 63 68  with whatever ch
20a0: 61 6e 67 65 73 20 61 72 65 20 6e 65 63 65 73 73  anges are necess
20b0: 61 72 79 20 74 6f 20 61 63 63 6f 6d 6d 6f 64 61  ary to accommoda
20c0: 74 65 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  te the schema ch
20d0: 61 6e 67 65 0a 75 73 69 6e 67 20 5b 43 52 45 41  ange.using [CREA
20e0: 54 45 20 56 49 45 57 5d 2e 0a 0a 3c 6c 69 3e 3c  TE VIEW]...<li><
20f0: 70 3e 0a 49 66 20 66 6f 72 65 69 67 6e 20 6b 65  p>.If foreign ke
2100: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65  y constraints we
2110: 72 65 20 6f 72 69 67 69 6e 61 6c 6c 79 20 65 6e  re originally en
2120: 61 62 6c 65 64 0a 74 68 65 6e 20 72 75 6e 20 5b  abled.then run [
2130: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
2140: 65 79 5f 63 68 65 63 6b 5d 20 74 6f 20 76 65 72  ey_check] to ver
2150: 69 66 79 20 74 68 61 74 20 74 68 65 20 73 63 68  ify that the sch
2160: 65 6d 61 0a 63 68 61 6e 67 65 20 64 69 64 20 6e  ema.change did n
2170: 6f 74 20 62 72 65 61 6b 20 61 6e 79 20 66 6f 72  ot break any for
2180: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2190: 69 6e 74 73 2e 0a 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ints....<li><p>.
21a0: 43 6f 6d 6d 69 74 20 74 68 65 20 74 72 61 6e 73  Commit the trans
21b0: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 69  action started i
21c0: 6e 20 73 74 65 70 20 32 2e 0a 0a 3c 6c 69 3e 3c  n step 2...<li><
21d0: 70 3e 0a 49 66 20 66 6f 72 65 69 67 6e 20 6b 65  p>.If foreign ke
21e0: 79 73 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77  ys constraints w
21f0: 65 72 65 20 6f 72 69 67 69 6e 61 6c 6c 79 20 65  ere originally e
2200: 6e 61 62 6c 65 64 2c 20 72 65 65 6e 61 62 6c 65  nabled, reenable
2210: 20 74 68 65 6d 20 6e 6f 77 2e 0a 3c 2f 6f 6c 3e   them now..</ol>
2220: 0a 0a 3c 70 3e 54 68 65 20 70 72 6f 63 65 64 75  ..<p>The procedu
2230: 72 65 20 61 62 6f 76 65 20 69 73 20 63 6f 6d 70  re above is comp
2240: 6c 65 74 65 6c 79 20 67 65 6e 65 72 61 6c 20 61  letely general a
2250: 6e 64 20 77 69 6c 6c 20 77 6f 72 6b 20 65 76 65  nd will work eve
2260: 6e 20 69 66 20 74 68 65 0a 73 63 68 65 6d 61 20  n if the.schema 
2270: 63 68 61 6e 67 65 20 63 61 75 73 65 73 20 74 68  change causes th
2280: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 74  e information st
2290: 6f 72 65 64 20 69 6e 20 74 68 65 20 74 61 62 6c  ored in the tabl
22a0: 65 20 74 6f 20 63 68 61 6e 67 65 2e 0a 53 6f 20  e to change..So 
22b0: 74 68 65 20 66 75 6c 6c 20 70 72 6f 63 65 64 75  the full procedu
22c0: 72 65 20 61 62 6f 76 65 20 69 73 20 61 70 70 72  re above is appr
22d0: 6f 70 72 69 61 74 65 20 66 6f 72 20 64 72 6f 70  opriate for drop
22e0: 70 69 6e 67 20 61 20 63 6f 6c 75 6d 6e 2c 0a 63  ping a column,.c
22f0: 68 61 6e 67 69 6e 67 20 74 68 65 20 6f 72 64 65  hanging the orde
2300: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 61 64  r of columns, ad
2310: 64 69 6e 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67  ding or removing
2320: 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
2330: 61 69 6e 74 0a 6f 72 20 50 52 49 4d 41 52 59 20  aint.or PRIMARY 
2340: 4b 45 59 2c 20 61 64 64 69 6e 67 20 43 48 45 43  KEY, adding CHEC
2350: 4b 20 6f 72 20 46 4f 52 45 49 47 4e 20 4b 45 59  K or FOREIGN KEY
2360: 20 6f 72 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e   or NOT NULL con
2370: 73 74 72 61 69 6e 74 73 2c 0a 6f 72 20 63 68 61  straints,.or cha
2380: 6e 67 69 6e 67 20 74 68 65 20 64 61 74 61 74 79  nging the dataty
2390: 70 65 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 2c  pe for a column,
23a0: 20 66 6f 72 20 65 78 61 6d 70 6c 65 2e 20 20 48   for example.  H
23b0: 6f 77 65 76 65 72 2c 20 61 20 73 69 6d 70 6c 65  owever, a simple
23c0: 72 0a 61 6e 64 20 66 61 73 74 65 72 20 70 72 6f  r.and faster pro
23d0: 63 65 64 75 72 65 20 63 61 6e 20 6f 70 74 69 6f  cedure can optio
23e0: 6e 61 6c 6c 79 20 62 65 20 75 73 65 64 20 66 6f  nally be used fo
23f0: 72 0a 73 6f 6d 65 20 63 68 61 6e 67 65 73 20 74  r.some changes t
2400: 68 61 74 20 64 6f 20 6e 6f 20 61 66 66 65 63 74  hat do no affect
2410: 20 74 68 65 20 6f 6e 2d 64 69 73 6b 20 63 6f 6e   the on-disk con
2420: 74 65 6e 74 20 69 6e 20 61 6e 79 20 77 61 79 2e  tent in any way.
2430: 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73  .The following s
2440: 69 6d 70 6c 65 72 20 70 72 6f 63 65 64 75 72 65  impler procedure
2450: 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65 20   is appropriate 
2460: 66 6f 72 20 72 65 6d 6f 76 69 6e 67 0a 43 48 45  for removing.CHE
2470: 43 4b 20 6f 72 20 46 4f 52 45 49 47 4e 20 4b 45  CK or FOREIGN KE
2480: 59 20 6f 72 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  Y or NOT NULL co
2490: 6e 73 74 72 61 69 6e 74 73 2c 0a 72 65 6e 61 6d  nstraints,.renam
24a0: 69 6e 67 20 63 6f 6c 75 6d 6e 73 2c 20 6f 72 20  ing columns, or 
24b0: 61 64 64 69 6e 67 20 6f 72 20 72 65 6d 6f 76 69  adding or removi
24c0: 6e 67 20 6f 72 20 63 68 61 6e 67 69 6e 67 20 64  ng or changing d
24d0: 65 66 61 75 6c 74 20 76 61 6c 75 65 73 20 6f 6e  efault values on
24e0: 0a 61 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6f 6c 3e  .a column...<ol>
24f0: 0a 3c 6c 49 3e 3c 70 3e 20 53 74 61 72 74 20 61  .<lI><p> Start a
2500: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 0a 3c   transaction...<
2510: 6c 69 3e 3c 70 3e 20 52 75 6e 20 5b 50 52 41 47  li><p> Run [PRAG
2520: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
2530: 6e 5d 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  n] to determine 
2540: 74 68 65 20 63 75 72 72 65 6e 74 20 73 63 68 65  the current sche
2550: 6d 61 0a 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma.version numbe
2560: 72 2e 20 20 54 68 69 73 20 6e 75 6d 62 65 72 20  r.  This number 
2570: 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64 20 66  will be needed f
2580: 6f 72 20 73 74 65 70 20 36 20 62 65 6c 6f 77 2e  or step 6 below.
2590: 0a 0a 3c 6c 69 3e 3c 70 3e 20 41 63 74 69 76 61  ..<li><p> Activa
25a0: 74 65 20 73 63 68 65 6d 61 20 65 64 69 74 69 6e  te schema editin
25b0: 67 20 75 73 69 6e 67 20 0a 5b 50 52 41 47 4d 41  g using .[PRAGMA
25c0: 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
25d0: 20 7c 20 50 52 41 47 4d 41 20 77 72 69 74 61 62   | PRAGMA writab
25e0: 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 5d 2e 0a 0a  le_schema=ON]...
25f0: 3c 6c 69 3e 3c 70 3e 20 52 75 6e 20 61 6e 20 5b  <li><p> Run an [
2600: 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e  UPDATE] statemen
2610: 74 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20  t to change the 
2620: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 61  definition of ta
2630: 62 6c 65 20 58 0a 69 6e 20 74 68 65 20 5b 73 71  ble X.in the [sq
2640: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
2650: 65 5d 3a 20 0a 55 50 44 41 54 45 20 73 71 6c 69  e]: .UPDATE sqli
2660: 74 65 5f 6d 61 73 74 65 72 20 53 45 54 20 73 71  te_master SET sq
2670: 6c 3d 2e 2e 2e 20 57 48 45 52 45 20 74 79 70 65  l=... WHERE type
2680: 3d 27 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d  ='table' AND nam
2690: 65 3d 27 58 27 3b 0a 3c 70 3e 3c 65 6d 3e 43 61  e='X';.<p><em>Ca
26a0: 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4d 61 6b  ution:</em>  Mak
26b0: 69 6e 67 20 61 20 63 68 61 6e 67 65 20 74 6f 20  ing a change to 
26c0: 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
26d0: 72 20 74 61 62 6c 65 20 6c 69 6b 65 20 74 68 69  r table like thi
26e0: 73 20 77 69 6c 6c 0a 72 65 6e 64 65 72 20 74 68  s will.render th
26f0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  e database corru
2700: 70 74 20 61 6e 64 20 75 6e 72 65 61 64 61 62 6c  pt and unreadabl
2710: 65 20 69 66 20 74 68 65 20 63 68 61 6e 67 65 20  e if the change 
2720: 63 6f 6e 74 61 69 6e 73 0a 61 20 73 79 6e 74 61  contains.a synta
2730: 78 20 65 72 72 6f 72 2e 20 20 49 74 20 69 73 20  x error.  It is 
2740: 73 75 67 67 65 73 74 65 64 20 74 68 61 74 20 63  suggested that c
2750: 61 72 65 66 75 6c 20 74 65 73 74 69 6e 67 20 6f  areful testing o
2760: 66 20 74 68 65 20 55 50 44 41 54 45 0a 73 74 61  f the UPDATE.sta
2770: 74 65 6d 65 6e 74 20 62 65 20 64 6f 6e 65 20 6f  tement be done o
2780: 6e 20 61 20 73 65 70 61 72 61 74 65 20 62 6c 61  n a separate bla
2790: 6e 6b 20 64 61 74 61 62 61 73 65 20 70 72 69 6f  nk database prio
27a0: 72 20 74 6f 20 75 73 69 6e 67 20 69 74 20 6f 6e  r to using it on
27b0: 0a 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  .a database cont
27c0: 61 69 6e 69 6e 67 20 69 6d 70 6f 72 74 61 6e 74  aining important
27d0: 20 64 61 74 61 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20   data...<li><p> 
27e0: 49 66 20 74 68 65 20 63 68 61 6e 67 65 20 74 6f  If the change to
27f0: 20 74 61 62 6c 65 20 58 20 61 6c 73 6f 20 61 66   table X also af
2800: 66 65 63 74 73 20 6f 74 68 65 72 20 74 61 62 6c  fects other tabl
2810: 65 73 20 6f 72 20 69 6e 64 65 78 65 73 20 6f 72  es or indexes or
2820: 0a 74 72 69 67 67 65 72 73 20 61 72 65 20 76 69  .triggers are vi
2830: 65 77 73 20 77 69 74 68 69 6e 20 73 63 68 65 6d  ews within schem
2840: 61 2c 20 74 68 65 6e 20 72 75 6e 20 5b 55 50 44  a, then run [UPD
2850: 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20  ATE] statements 
2860: 74 6f 20 6d 6f 64 69 66 79 0a 74 68 6f 73 65 20  to modify.those 
2870: 6f 74 68 65 72 20 74 61 62 6c 65 73 20 69 6e 64  other tables ind
2880: 65 78 65 73 20 61 6e 64 20 76 69 65 77 73 20 74  exes and views t
2890: 6f 6f 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  oo.  For example
28a0: 2c 20 69 66 20 74 68 65 20 6e 61 6d 65 20 6f 66  , if the name of
28b0: 0a 61 20 63 6f 6c 75 6d 6e 20 63 68 61 6e 67 65  .a column change
28c0: 73 2c 20 61 6c 6c 20 46 4f 52 45 49 47 4e 20 4b  s, all FOREIGN K
28d0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  EY constraints, 
28e0: 74 72 69 67 67 65 72 73 2c 20 69 6e 64 65 78 65  triggers, indexe
28f0: 73 2c 20 61 6e 64 0a 76 69 65 77 73 20 74 68 61  s, and.views tha
2900: 74 20 72 65 66 65 72 20 74 6f 20 74 68 61 74 20  t refer to that 
2910: 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 62 65 20 6d  column must be m
2920: 6f 64 69 66 69 65 64 2e 0a 3c 70 3e 3c 65 6d 3e  odified..<p><em>
2930: 43 61 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4f  Caution:</em>  O
2940: 6e 63 65 20 61 67 61 69 6e 2c 20 6d 61 6b 69 6e  nce again, makin
2950: 67 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  g changes to the
2960: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 0a   sqlite_master .
2970: 74 61 62 6c 65 20 6c 69 6b 65 20 74 68 69 73 20  table like this 
2980: 77 69 6c 6c 20 72 65 6e 64 65 72 20 74 68 65 20  will render the 
2990: 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
29a0: 20 61 6e 64 20 75 6e 72 65 61 64 61 62 6c 65 20   and unreadable 
29b0: 69 66 20 74 68 65 20 0a 63 68 61 6e 67 65 20 63  if the .change c
29c0: 6f 6e 74 61 69 6e 73 20 61 6e 20 65 72 72 6f 72  ontains an error
29d0: 2e 20 20 43 61 72 65 66 75 6c 6c 79 20 74 65 73  .  Carefully tes
29e0: 74 20 6f 66 20 74 68 69 73 20 65 6e 74 69 72 65  t of this entire
29f0: 20 70 72 6f 63 65 64 75 72 65 0a 6f 6e 20 61 20   procedure.on a 
2a00: 73 65 70 61 72 61 74 65 20 74 65 73 74 20 64 61  separate test da
2a10: 74 61 62 61 73 65 20 70 72 69 6f 72 20 74 6f 20  tabase prior to 
2a20: 75 73 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64 61  using it on.a da
2a30: 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e  tabase containin
2a40: 67 20 69 6d 70 6f 72 74 61 6e 74 20 64 61 74 61  g important data
2a50: 20 61 6e 64 2f 6f 72 20 6d 61 6b 65 20 62 61 63   and/or make bac
2a60: 6b 75 70 20 63 6f 70 69 65 73 20 6f 66 0a 69 6d  kup copies of.im
2a70: 70 6f 72 74 61 6e 74 20 64 61 74 61 62 61 73 65  portant database
2a80: 73 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69  s prior to runni
2a90: 6e 67 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  ng this procedur
2aa0: 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49 6e 63 72  e...<li><p> Incr
2ab0: 65 6d 65 6e 74 20 74 68 65 20 73 63 68 65 6d 61  ement the schema
2ac0: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
2ad0: 75 73 69 6e 67 0a 5b 50 52 41 47 4d 41 20 73 63  using.[PRAGMA sc
2ae0: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7c 20 50  hema_version | P
2af0: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
2b00: 73 69 6f 6e 3d 58 5d 20 77 68 65 72 65 20 58 20  sion=X] where X 
2b10: 69 73 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61 6e  is one.more than
2b20: 20 74 68 65 20 6f 6c 64 20 73 63 68 65 6d 61 20   the old schema 
2b30: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
2b40: 6f 75 6e 64 20 69 6e 20 73 74 65 70 20 32 20 61  ound in step 2 a
2b50: 62 6f 76 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 44  bove...<li><p> D
2b60: 69 73 61 62 6c 65 20 73 63 68 65 6d 61 20 65 64  isable schema ed
2b70: 69 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50 52  iting using .[PR
2b80: 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63  AGMA writable_sc
2b90: 68 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77 72  hema | PRAGMA wr
2ba0: 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46  itable_schema=OF
2bb0: 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 28 4f 70  F]...<li><p> (Op
2bc0: 74 69 6f 6e 61 6c 29 20 52 75 6e 20 5b 50 52 41  tional) Run [PRA
2bd0: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
2be0: 65 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74  eck] to verify t
2bf0: 68 61 74 20 74 68 65 0a 73 63 68 65 6d 61 20 63  hat the.schema c
2c00: 68 61 6e 67 65 73 20 64 69 64 20 6e 6f 74 20 64  hanges did not d
2c10: 61 6d 61 67 65 20 74 68 65 20 64 61 74 61 62 61  amage the databa
2c20: 73 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 43 6f 6d  se...<li><p> Com
2c30: 6d 69 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  mit the transact
2c40: 69 6f 6e 20 73 74 61 72 74 65 64 20 6f 6e 20 73  ion started on s
2c50: 74 65 70 20 31 20 61 62 6f 76 65 2e 0a 3c 2f 6f  tep 1 above..</o
2c60: 6c 3e 0a 0a 3c 70 3e 49 66 20 73 6f 6d 65 20 66  l>..<p>If some f
2c70: 75 74 75 72 65 20 76 65 72 73 69 6f 6e 20 6f 66  uture version of
2c80: 20 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77   SQLite adds new
2c90: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 61 70   ALTER TABLE cap
2ca0: 61 62 69 6c 69 74 69 65 73 2c 20 0a 74 68 6f 73  abilities, .thos
2cb0: 65 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 77  e capabilities w
2cc0: 69 6c 6c 20 76 65 72 79 20 6c 69 6b 65 6c 79 20  ill very likely 
2cd0: 75 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 74  use one of the t
2ce0: 77 6f 20 70 72 6f 63 65 64 75 72 65 73 0a 6f 75  wo procedures.ou
2cf0: 74 6c 69 6e 65 64 20 61 62 6f 76 65 2e 0a 0a 3c  tlined above...<
2d00: 74 63 6c 3e 0a 23 20 20 4f 6e 65 20 6f 66 20 74  tcl>.#  One of t
2d10: 68 65 20 72 65 61 73 6f 6e 73 20 74 68 61 74 0a  he reasons that.
2d20: 23 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  # SQLite does no
2d30: 74 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70  t currently supp
2d40: 6f 72 74 20 6d 6f 72 65 20 41 4c 54 45 52 20 54  ort more ALTER T
2d50: 41 42 4c 45 20 63 61 70 61 62 69 6c 69 74 69 65  ABLE capabilitie
2d60: 73 20 69 73 20 74 68 61 74 0a 23 20 74 68 65 20  s is that.# the 
2d70: 70 72 6f 63 65 64 75 72 65 20 73 68 6f 77 6e 20  procedure shown 
2d80: 61 62 6f 76 65 20 69 73 20 64 69 66 66 69 63 75  above is difficu
2d90: 6c 74 20 74 6f 20 61 75 74 6f 6d 61 74 65 20 66  lt to automate f
2da0: 6f 72 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  or an arbitrary 
2db0: 73 63 68 65 6d 61 2e 0a 23 20 50 61 72 74 69 63  schema..# Partic
2dc0: 75 6c 61 72 6c 79 20 74 72 6f 75 62 6c 65 73 6f  ularly troubleso
2dd0: 6d 65 20 61 72 65 61 73 20 61 72 65 20 69 64 65  me areas are ide
2de0: 6e 74 69 66 79 69 6e 67 20 61 6c 6c 20 76 69 65  ntifying all vie
2df0: 77 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ws associated wi
2e00: 74 68 0a 23 20 74 61 62 6c 65 20 58 20 69 6e 20  th.# table X in 
2e10: 73 74 65 70 20 31 20 61 6e 64 20 63 72 65 61 74  step 1 and creat
2e20: 69 6e 67 20 6e 65 77 20 76 69 65 77 73 20 61 6e  ing new views an
2e30: 64 20 74 72 69 67 67 65 72 73 20 74 68 61 74 20  d triggers that 
2e40: 61 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 0a 23  are compatible.#
2e50: 20 77 69 74 68 20 74 68 65 20 61 6c 74 65 72 65   with the altere
2e60: 64 20 73 63 68 65 6d 61 20 66 6f 72 20 74 61 62  d schema for tab
2e70: 6c 65 20 58 20 69 6e 20 73 74 65 70 20 36 2e 20  le X in step 6. 
2e80: 20 49 74 20 69 73 20 61 20 74 72 69 63 6b 79 20   It is a tricky 
2e90: 62 75 74 20 73 6f 6c 76 61 62 6c 65 0a 23 20 70  but solvable.# p
2ea0: 72 6f 62 6c 65 6d 20 74 6f 20 63 72 65 61 74 65  roblem to create
2eb0: 20 63 6f 64 65 20 74 68 61 74 20 77 69 6c 6c 20   code that will 
2ec0: 70 65 72 66 6f 72 6d 20 74 68 65 20 73 74 65 70  perform the step
2ed0: 73 20 61 62 6f 76 65 20 0a 23 20 66 6f 72 20 22  s above .# for "
2ee0: 72 65 61 73 6f 6e 61 62 6c 65 22 20 73 63 68 65  reasonable" sche
2ef0: 6d 61 73 20 63 6f 6d 6d 6f 6e 6c 79 20 66 6f 75  mas commonly fou
2f00: 6e 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20  nd in practice. 
2f10: 20 0a 23 20 42 75 74 20 74 68 65 72 65 20 65 78   .# But there ex
2f20: 69 73 74 20 6d 61 6c 65 76 6f 6c 65 6e 74 20 73  ist malevolent s
2f30: 63 68 65 6d 61 73 20 66 6f 72 20 77 68 69 63 68  chemas for which
2f40: 0a 23 20 74 68 65 73 65 20 73 74 65 70 73 20 61  .# these steps a
2f50: 72 65 20 6d 61 64 64 65 6e 69 6e 67 6c 79 20 64  re maddeningly d
2f60: 69 66 66 69 63 75 6c 74 20 74 6f 20 64 6f 20 63  ifficult to do c
2f70: 6f 72 72 65 63 74 6c 79 2e 20 20 52 61 74 68 65  orrectly.  Rathe
2f80: 72 20 74 68 61 6e 20 63 72 65 61 74 65 0a 23 20  r than create.# 
2f90: 41 4c 54 45 52 20 54 41 42 4c 45 20 66 65 61 74  ALTER TABLE feat
2fa0: 75 72 65 73 20 74 68 61 74 20 77 6f 72 6b 20 63  ures that work c
2fb0: 6f 72 72 65 63 74 6c 79 20 39 39 2e 39 25 20 6f  orrectly 99.9% o
2fc0: 66 20 74 68 65 20 74 69 6d 65 20 62 75 74 20 70  f the time but p
2fd0: 6f 73 73 69 62 6c 79 0a 23 20 63 6f 72 72 75 70  ossibly.# corrup
2fe0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 6e 20  t the schema on 
2ff0: 74 68 65 20 6f 74 68 65 72 20 30 2e 31 25 2c 20  the other 0.1%, 
3000: 74 68 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c  the SQLite devel
3010: 6f 70 65 72 73 20 68 61 76 65 20 64 65 63 69 64  opers have decid
3020: 65 64 0a 23 20 74 6f 20 70 75 73 68 20 74 68 65  ed.# to push the
3030: 20 70 72 6f 62 6c 65 6d 20 69 6e 74 6f 20 74 68   problem into th
3040: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f  e application do
3050: 6d 61 69 6e 2c 20 77 68 65 72 65 20 69 74 20 69  main, where it i
3060: 73 20 6d 75 63 68 20 65 61 73 69 65 72 0a 23 20  s much easier.# 
3070: 74 6f 20 73 6f 6c 76 65 2e 0a 3c 2f 74 63 6c 3e  to solve..</tcl>
3080: 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
3090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30d0: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
30e0: 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a  {ANALYZE} analyz
30f0: 65 20 41 4e 41 4c 59 5a 45 0a 0a 52 65 63 75 72  e ANALYZE..Recur
3100: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
3110: 6d 20 61 6e 61 6c 79 7a 65 2d 73 74 6d 74 0a 3c  m analyze-stmt.<
3120: 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20  /tcl>..<p> ^The 
3130: 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20  ANALYZE command 
3140: 67 61 74 68 65 72 73 20 73 74 61 74 69 73 74 69  gathers statisti
3150: 63 73 20 61 62 6f 75 74 20 74 61 62 6c 65 73 20  cs about tables 
3160: 61 6e 64 0a 69 6e 64 69 63 65 73 20 61 6e 64 20  and.indices and 
3170: 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 6c 65  stores the colle
3180: 63 74 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  cted information
3190: 0a 69 6e 20 5b 69 6e 74 65 72 6e 61 6c 20 74 61  .in [internal ta
31a0: 62 6c 65 73 5d 20 6f 66 20 74 68 65 20 64 61 74  bles] of the dat
31b0: 61 62 61 73 65 20 77 68 65 72 65 20 74 68 65 20  abase where the 
31c0: 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
31d0: 63 61 6e 0a 61 63 63 65 73 73 20 74 68 65 20 69  can.access the i
31e0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 75  nformation and u
31f0: 73 65 20 69 74 20 74 6f 20 68 65 6c 70 20 6d 61  se it to help ma
3200: 6b 65 20 62 65 74 74 65 72 20 71 75 65 72 79 20  ke better query 
3210: 70 6c 61 6e 6e 69 6e 67 20 63 68 6f 69 63 65 73  planning choices
3220: 2e 0a 5e 49 66 20 6e 6f 20 61 72 67 75 6d 65 6e  ..^If no argumen
3230: 74 73 20 61 72 65 20 67 69 76 65 6e 2c 20 61 6c  ts are given, al
3240: 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
3250: 61 73 65 73 20 61 72 65 0a 61 6e 61 6c 79 7a 65  ases are.analyze
3260: 64 2e 20 20 5e 49 66 20 61 20 73 63 68 65 6d 61  d.  ^If a schema
3270: 20 6e 61 6d 65 20 69 73 20 67 69 76 65 6e 20 61   name is given a
3280: 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2c 20  s the argument, 
3290: 74 68 65 6e 20 61 6c 6c 20 74 61 62 6c 65 73 0a  then all tables.
32a0: 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20 74  and indices in t
32b0: 68 61 74 20 6f 6e 65 20 64 61 74 61 62 61 73 65  hat one database
32c0: 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20   are analyzed.  
32d0: 0a 5e 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e  .^If the argumen
32e0: 74 20 69 73 20 61 20 74 61 62 6c 65 20 6e 61 6d  t is a table nam
32f0: 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61  e, then only tha
3300: 74 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 0a  t table and the.
3310: 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69 61 74  indices associat
3320: 65 64 20 77 69 74 68 20 74 68 61 74 20 74 61 62  ed with that tab
3330: 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e  le are analyzed.
3340: 20 20 5e 49 66 20 74 68 65 20 61 72 67 75 6d 65    ^If the argume
3350: 6e 74 0a 69 73 20 61 6e 20 69 6e 64 65 78 20 6e  nt.is an index n
3360: 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ame, then only t
3370: 68 61 74 20 6f 6e 65 20 69 6e 64 65 78 20 69 73  hat one index is
3380: 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a   analyzed.</p>..
3390: 3c 70 3e 20 5e 54 68 65 20 64 65 66 61 75 6c 74  <p> ^The default
33a0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
33b0: 73 74 6f 72 65 73 20 61 6c 6c 20 73 74 61 74 69  stores all stati
33c0: 73 74 69 63 73 20 69 6e 20 61 20 73 69 6e 67 6c  stics in a singl
33d0: 65 0a 74 61 62 6c 65 20 6e 61 6d 65 64 20 22 5b  e.table named "[
33e0: 73 71 6c 69 74 65 5f 73 74 61 74 31 5d 22 2e 20  sqlite_stat1]". 
33f0: 20 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20 63   ^If SQLite is c
3400: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65  ompiled with the
3410: 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  .[SQLITE_ENABLE_
3420: 53 54 41 54 33 5d 20 6f 70 74 69 6f 6e 20 61 6e  STAT3] option an
3430: 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 5b 53  d without the [S
3440: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
3450: 54 34 5d 0a 6f 70 74 69 6f 6e 2c 20 74 68 65 6e  T4].option, then
3460: 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69 73 74   additional hist
3470: 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a 63 6f  ogram data is.co
3480: 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f 72  llected and stor
3490: 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73 74  ed in [sqlite_st
34a0: 61 74 33 5d 2e 0a 20 5e 49 66 20 53 51 4c 69 74  at3].. ^If SQLit
34b0: 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69  e is compiled wi
34c0: 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 45  th the.[SQLITE_E
34d0: 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 6f 70 74  NABLE_STAT4] opt
34e0: 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74 69  ion, then additi
34f0: 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20 64  onal histogram d
3500: 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65 64  ata is.collected
3510: 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20 5b   and stored in [
3520: 73 71 6c 69 74 65 5f 73 74 61 74 34 5d 2e 0a 4f  sqlite_stat4]..O
3530: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
3540: 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 6d 61   SQLite would ma
3550: 6b 65 20 75 73 65 20 6f 66 20 74 68 65 20 5b 73  ke use of the [s
3560: 71 6c 69 74 65 5f 73 74 61 74 32 5d 20 74 61 62  qlite_stat2] tab
3570: 6c 65 0a 77 68 65 6e 20 63 6f 6d 70 69 6c 65 64  le.when compiled
3580: 20 77 69 74 68 20 5b 53 51 4c 49 54 45 5f 45 4e   with [SQLITE_EN
3590: 41 42 4c 45 5f 53 54 41 54 32 5d 20 62 75 74 20  ABLE_STAT2] but 
35a0: 61 6c 6c 20 72 65 63 65 6e 74 20 76 65 72 73 69  all recent versi
35b0: 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 69 67  ons of.SQLite ig
35c0: 6e 6f 72 65 20 74 68 65 20 73 71 6c 69 74 65 5f  nore the sqlite_
35d0: 73 74 61 74 32 20 74 61 62 6c 65 2e 0a 46 75 74  stat2 table..Fut
35e0: 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73  ure enhancements
35f0: 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64 64 69   may create.addi
3600: 74 69 6f 6e 61 6c 20 5b 69 6e 74 65 72 6e 61 6c  tional [internal
3610: 20 74 61 62 6c 65 73 5d 20 77 69 74 68 20 74 68   tables] with th
3620: 65 20 73 61 6d 65 20 6e 61 6d 65 20 70 61 74 74  e same name patt
3630: 65 72 6e 20 65 78 63 65 70 74 20 77 69 74 68 0a  ern except with.
3640: 66 69 6e 61 6c 20 64 69 67 69 74 20 6c 61 72 67  final digit larg
3650: 65 72 20 74 68 61 6e 20 22 34 22 2e 0a 41 6c 6c  er than "4"..All
3660: 20 6f 66 20 74 68 65 73 65 20 74 61 62 6c 65 73   of these tables
3670: 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76 65 6c   are collectivel
3680: 79 20 72 65 66 65 72 72 65 64 20 74 6f 20 61 73  y referred to as
3690: 20 22 73 74 61 74 69 73 74 69 63 73 20 74 61 62   "statistics tab
36a0: 6c 65 73 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20  les"..</p>..<p> 
36b0: 5e 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20  ^The content of 
36c0: 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20 74  the statistics t
36d0: 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71 75 65  ables can be que
36e0: 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45 4c 45  ried using [SELE
36f0: 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65 20 63  CT].and can be c
3700: 68 61 6e 67 65 64 20 75 73 69 6e 67 20 74 68 65  hanged using the
3710: 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45   [DELETE], [INSE
3720: 52 54 5d 2c 20 61 6e 64 20 5b 55 50 44 41 54 45  RT], and [UPDATE
3730: 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 5e 28 54 68  ] commands..^(Th
3740: 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 63  e [DROP TABLE] c
3750: 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 6f 6e 20  ommand works on 
3760: 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65  statistics table
3770: 73 0a 61 73 20 6f 66 20 53 51 4c 69 74 65 20 76  s.as of SQLite v
3780: 65 72 73 69 6f 6e 20 33 2e 37 2e 39 2e 29 5e 20  ersion 3.7.9.)^ 
3790: 28 5b 64 61 74 65 6f 66 3a 33 2e 37 2e 39 5d 29  ([dateof:3.7.9])
37a0: 0a 5e 54 68 65 20 5b 41 4c 54 45 52 20 54 41 42  .^The [ALTER TAB
37b0: 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73  LE] command does
37c0: 20 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 73 74 61   not work on sta
37d0: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 2e 0a  tistics tables..
37e0: 41 70 70 72 6f 70 72 69 61 74 65 20 63 61 72 65  Appropriate care
37f0: 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
3800: 77 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74 68  when changing th
3810: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
3820: 20 73 74 61 74 69 73 74 69 63 73 0a 74 61 62 6c   statistics.tabl
3830: 65 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63 6f  es as invalid co
3840: 6e 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65 20  ntent can cause 
3850: 53 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63 74  SQLite to select
3860: 20 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75 65   inefficient.que
3870: 72 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65 72  ry plans.  Gener
3880: 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20 6f  ally speaking, o
3890: 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d 6f  ne should not mo
38a0: 64 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e 74  dify the content
38b0: 20 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74 69   of.the statisti
38c0: 63 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e 79  cs tables by any
38d0: 20 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65 72   mechanism other
38e0: 20 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20 74   than invoking t
38f0: 68 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61  he.ANALYZE comma
3900: 6e 64 2e 20 20 0a 53 65 65 20 22 5b 4d 61 6e 75  nd.  .See "[Manu
3910: 61 6c 20 43 6f 6e 74 72 6f 6c 20 4f 66 20 51 75  al Control Of Qu
3920: 65 72 79 20 50 6c 61 6e 73 20 55 73 69 6e 67 20  ery Plans Using 
3930: 53 51 4c 49 54 45 5f 53 54 41 54 20 54 61 62 6c  SQLITE_STAT Tabl
3940: 65 73 5d 22 20 66 6f 72 0a 66 75 72 74 68 65 72  es]" for.further
3950: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70   information.</p
3960: 3e 0a 0a 3c 70 3e 20 5e 53 74 61 74 69 73 74 69  >..<p> ^Statisti
3970: 63 73 20 67 61 74 68 65 72 65 64 20 62 79 20 41  cs gathered by A
3980: 4e 41 4c 59 5a 45 20 61 72 65 20 6e 6f 74 20 61  NALYZE are not a
3990: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64  utomatically upd
39a0: 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f 6e 74  ated as.the cont
39b0: 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62  ent of the datab
39c0: 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20 49 66  ase changes.  If
39d0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
39e0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 63 68 61  the database.cha
39f0: 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61 6e 74  nges significant
3a00: 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20 64 61  ly, or if the da
3a10: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
3a20: 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65 20  anges, then one 
3a30: 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72 20  should.consider 
3a40: 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20 41 4e  rerunning the AN
3a50: 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  ALYZE command in
3a60: 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65   order to update
3a70: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 2e   the statistics.
3a80: 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 71 75  </p>..<p> The qu
3a90: 65 72 79 20 70 6c 61 6e 6e 65 72 20 6c 6f 61 64  ery planner load
3aa0: 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  s the content of
3ab0: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
3ac0: 74 61 62 6c 65 73 0a 69 6e 74 6f 20 6d 65 6d 6f  tables.into memo
3ad0: 72 79 20 77 68 65 6e 20 74 68 65 20 73 63 68 65  ry when the sche
3ae0: 6d 61 20 69 73 20 72 65 61 64 2e 20 20 5e 48 65  ma is read.  ^He
3af0: 6e 63 65 2c 20 77 68 65 6e 20 61 6e 20 61 70 70  nce, when an app
3b00: 6c 69 63 61 74 69 6f 6e 0a 63 68 61 6e 67 65 73  lication.changes
3b10: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
3b20: 74 61 62 6c 65 73 20 64 69 72 65 63 74 6c 79 2c  tables directly,
3b30: 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f 74   SQLite will not
3b40: 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 6e 6f 74   immediately.not
3b50: 69 63 65 20 74 68 65 20 63 68 61 6e 67 65 73 2e  ice the changes.
3b60: 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e   ^An application
3b70: 0a 63 61 6e 20 66 6f 72 63 65 20 74 68 65 20 71  .can force the q
3b80: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20  uery planner to 
3b90: 72 65 72 65 61 64 20 74 68 65 20 73 74 61 74 69  reread the stati
3ba0: 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79 20  stics tables by 
3bb0: 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c 59  running.<b>ANALY
3bc0: 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ZE sqlite_master
3bd0: 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 74 63 6c  </b>. </p>..<tcl
3be0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 61 75 74  >hd_fragment aut
3bf0: 6f 61 6e 61 6c 79 7a 65 20 7b 61 75 74 6f 6d 61  oanalyze {automa
3c00: 74 69 63 61 6c 6c 79 20 72 75 6e 6e 69 6e 67 20  tically running 
3c10: 41 4e 41 4c 59 5a 45 7d 3c 2f 74 63 6c 3e 0a 3c  ANALYZE}</tcl>.<
3c20: 68 32 3e 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79  h2>Automatically
3c30: 20 52 75 6e 6e 69 6e 67 20 41 4e 41 4c 59 5a 45   Running ANALYZE
3c40: 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 5b 50  </h2>..<p>The [P
3c50: 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 20  RAGMA optimize] 
3c60: 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 61 75 74  command will aut
3c70: 6f 6d 61 74 69 63 61 6c 6c 79 20 72 75 6e 20 41  omatically run A
3c80: 4e 41 4c 59 5a 45 20 6f 6e 20 69 6e 64 69 76 69  NALYZE on indivi
3c90: 64 75 61 6c 0a 74 61 62 6c 65 73 20 6f 6e 20 61  dual.tables on a
3ca0: 6e 20 61 73 2d 6e 65 65 64 65 64 20 62 61 73 69  n as-needed basi
3cb0: 73 2e 20 20 54 68 65 20 72 65 63 6f 6d 6d 65 6e  s.  The recommen
3cc0: 64 65 64 20 70 72 61 63 74 69 63 65 20 69 73 20  ded practice is 
3cd0: 66 6f 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  for applications
3ce0: 0a 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20 5b  .to invoke the [
3cf0: 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d  PRAGMA optimize]
3d00: 20 73 74 61 74 65 6d 65 6e 74 20 6a 75 73 74 20   statement just 
3d10: 62 65 66 6f 72 65 20 63 6c 6f 73 69 6e 67 20 65  before closing e
3d20: 61 63 68 20 64 61 74 61 62 61 73 65 0a 63 6f 6e  ach database.con
3d30: 6e 65 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70  nection.</p>..<p
3d40: 3e 45 61 63 68 20 53 51 4c 69 74 65 20 5b 64 61  >Each SQLite [da
3d50: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
3d60: 6e 5d 20 72 65 63 6f 72 64 73 20 63 61 73 65 73  n] records cases
3d70: 20 77 68 65 6e 20 74 68 65 20 71 75 65 72 79 20   when the query 
3d80: 70 6c 61 6e 6e 65 72 20 77 6f 75 6c 64 0a 62 65  planner would.be
3d90: 6e 65 66 69 74 20 66 72 6f 6d 20 68 61 76 69 6e  nefit from havin
3da0: 67 20 61 63 63 75 72 61 74 65 20 72 65 73 75 6c  g accurate resul
3db0: 74 73 20 6f 66 20 41 4e 41 4c 59 5a 45 20 61 74  ts of ANALYZE at
3dc0: 20 68 61 6e 64 2e 20 20 54 68 65 73 65 20 72 65   hand.  These re
3dd0: 63 6f 72 64 73 0a 61 72 65 20 68 65 6c 64 20 69  cords.are held i
3de0: 6e 20 6d 65 6d 6f 72 79 20 61 6e 64 20 61 63 63  n memory and acc
3df0: 75 6d 75 6c 61 74 65 20 6f 76 65 72 20 74 68 65  umulate over the
3e00: 20 6c 69 66 65 20 6f 66 20 61 20 64 61 74 61 62   life of a datab
3e10: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a  ase connection..
3e20: 54 68 65 20 5b 50 52 41 47 4d 41 20 6f 70 74 69  The [PRAGMA opti
3e30: 6d 69 7a 65 5d 20 63 6f 6d 6d 61 6e 64 20 6c 6f  mize] command lo
3e40: 6f 6b 73 20 61 74 20 74 68 6f 73 65 20 72 65 63  oks at those rec
3e50: 6f 72 64 73 20 61 6e 64 20 72 75 6e 73 20 41 4e  ords and runs AN
3e60: 41 4c 59 5a 45 20 6f 6e 20 6f 6e 6c 79 0a 74 68  ALYZE on only.th
3e70: 6f 73 65 20 74 61 62 6c 65 73 20 66 6f 72 20 77  ose tables for w
3e80: 68 69 63 68 20 6e 65 77 20 6f 72 20 75 70 64 61  hich new or upda
3e90: 74 65 64 20 41 4e 41 4c 59 5a 45 20 64 61 74 61  ted ANALYZE data
3ea0: 20 73 65 65 6d 73 20 6c 69 6b 65 6c 79 20 74 6f   seems likely to
3eb0: 20 62 65 20 75 73 65 66 75 6c 2e 0a 49 6e 20 6d   be useful..In m
3ec0: 6f 73 74 20 63 61 73 65 73 20 5b 50 52 41 47 4d  ost cases [PRAGM
3ed0: 41 20 6f 70 74 69 6d 69 7a 65 5d 20 77 69 6c 6c  A optimize] will
3ee0: 20 6e 6f 74 20 72 75 6e 20 41 4e 41 4c 59 5a 45   not run ANALYZE
3ef0: 2c 20 62 75 74 20 69 74 20 77 69 6c 6c 20 6f 63  , but it will oc
3f00: 63 61 73 69 6f 6e 61 6c 6c 79 0a 64 6f 20 73 6f  casionally.do so
3f10: 20 65 69 74 68 65 72 20 66 6f 72 20 74 61 62 6c   either for tabl
3f20: 65 73 20 74 68 61 74 20 68 61 76 65 20 6e 65 76  es that have nev
3f30: 65 72 20 62 65 66 6f 72 65 20 62 65 65 6e 20 61  er before been a
3f40: 6e 61 6c 79 7a 65 64 2c 20 6f 72 20 66 6f 72 20  nalyzed, or for 
3f50: 74 61 62 6c 65 73 0a 74 68 61 74 20 68 61 76 65  tables.that have
3f60: 20 67 72 6f 77 6e 20 73 69 67 6e 69 66 69 63 61   grown significa
3f70: 6e 74 6c 79 20 73 69 6e 63 65 20 74 68 65 79 20  ntly since they 
3f80: 77 65 72 65 20 6c 61 73 74 20 61 6e 61 6c 79 7a  were last analyz
3f90: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53 69 6e 63  ed.</p>..<p>Sinc
3fa0: 65 20 74 68 65 20 61 63 74 69 6f 6e 73 20 6f 66  e the actions of
3fb0: 20 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a   [PRAGMA optimiz
3fc0: 65 5d 20 61 72 65 20 64 65 74 65 72 6d 69 6e 65  e] are determine
3fd0: 64 20 74 6f 20 73 6f 6d 65 20 65 78 74 65 6e 74  d to some extent
3fe0: 20 62 79 0a 70 72 69 6f 72 20 71 75 65 72 69 65   by.prior querie
3ff0: 73 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e  s that have been
4000: 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 20 74 68   evaluated on th
4010: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
4020: 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 69 74 0a 69  connection, it.i
4030: 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68  s recommended th
4040: 61 74 20 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d  at [PRAGMA optim
4050: 69 7a 65 5d 20 62 65 20 64 65 66 65 72 72 65 64  ize] be deferred
4060: 20 75 6e 74 69 6c 20 74 68 65 20 64 61 74 61 62   until the datab
4070: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 69  ase connection.i
4080: 73 20 63 6c 6f 73 69 6e 67 20 61 6e 64 20 68 61  s closing and ha
4090: 73 20 74 68 75 73 20 68 61 64 20 61 6e 20 6f 70  s thus had an op
40a0: 70 6f 72 74 75 6e 69 74 79 20 74 6f 20 61 63 63  portunity to acc
40b0: 75 6d 75 6c 61 74 65 20 61 73 20 6d 75 73 74 20  umulate as must 
40c0: 75 73 61 67 65 20 69 6e 66 6f 72 6d 61 74 69 6f  usage informatio
40d0: 6e 0a 61 73 20 70 6f 73 73 69 62 6c 65 2e 20 20  n.as possible.  
40e0: 49 74 20 69 73 20 61 6c 73 6f 20 72 65 61 73 6f  It is also reaso
40f0: 6e 61 62 6c 65 20 74 6f 20 73 65 74 20 61 20 74  nable to set a t
4100: 69 6d 65 72 20 74 6f 20 72 75 6e 20 5b 50 52 41  imer to run [PRA
4110: 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 0a 65 76  GMA optimize].ev
4120: 65 72 79 20 66 65 77 20 68 6f 75 72 73 2c 20 6f  ery few hours, o
4130: 72 20 65 76 65 72 79 20 66 65 77 20 64 61 79 73  r every few days
4140: 2c 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 63  , for database c
4150: 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 68 61 74 20  onnections that 
4160: 73 74 61 79 20 6f 70 65 6e 0a 66 6f 72 20 61 20  stay open.for a 
4170: 6c 6f 6e 67 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a  long time.</p>..
4180: 3c 70 3e 41 70 70 6c 69 63 61 74 69 6f 6e 73 20  <p>Applications 
4190: 74 68 61 74 20 64 65 73 69 72 65 20 6d 6f 72 65  that desire more
41a0: 20 63 6f 6e 74 72 6f 6c 20 63 61 6e 20 72 75 6e   control can run
41b0: 20 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a   [PRAGMA optimiz
41c0: 65 28 30 78 30 33 29 5d 20 74 6f 20 0a 6f 62 74  e(0x03)] to .obt
41d0: 61 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 41 4e  ain a list of AN
41e0: 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 73 20 74  ALYZE commands t
41f0: 68 61 74 20 53 51 4c 69 74 65 20 74 68 69 6e 6b  hat SQLite think
4200: 73 20 61 72 65 20 61 70 70 72 6f 70 72 69 61 74  s are appropriat
4210: 65 20 74 6f 20 72 75 6e 2c 0a 62 75 74 20 77 69  e to run,.but wi
4220: 74 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20 72  thout actually r
4230: 75 6e 6e 69 6e 67 20 74 68 6f 73 65 20 63 6f 6d  unning those com
4240: 6d 61 6e 64 73 2e 20 20 49 66 20 74 68 65 20 72  mands.  If the r
4250: 65 74 75 72 6e 65 64 20 73 65 74 20 69 73 20 0a  eturned set is .
4260: 6e 6f 6e 2d 65 6d 70 74 79 2c 20 74 68 65 20 61  non-empty, the a
4270: 70 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e 20 74  pplication can t
4280: 68 65 6e 20 6d 61 6b 65 20 61 20 64 65 63 69 73  hen make a decis
4290: 69 6f 6e 20 61 62 6f 75 74 20 77 68 65 74 68 65  ion about whethe
42a0: 72 20 6f 72 20 6e 6f 74 0a 74 6f 20 72 75 6e 20  r or not.to run 
42b0: 74 68 65 20 73 75 67 67 65 73 74 65 64 20 41 4e  the suggested AN
42c0: 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 73 2c 20  ALYZE commands, 
42d0: 70 65 72 68 61 70 73 20 61 66 74 65 72 20 70 72  perhaps after pr
42e0: 6f 6d 70 74 69 6e 67 20 74 68 65 20 75 73 65 72  ompting the user
42f0: 0a 66 6f 72 20 67 75 69 64 61 6e 63 65 2e 3c 2f  .for guidance.</
4300: 70 3e 0a 0a 3c 70 3e 54 68 65 20 5b 50 52 41 47  p>..<p>The [PRAG
4310: 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 20 63 6f 6d  MA optimize] com
4320: 6d 61 6e 64 20 77 61 73 20 66 69 72 73 74 20 69  mand was first i
4330: 6e 74 72 6f 64 75 63 65 64 20 77 69 74 68 20 0a  ntroduced with .
4340: 53 51 4c 69 74 65 20 33 2e 31 38 2e 30 20 28 5b  SQLite 3.18.0 ([
4350: 64 61 74 65 6f 66 3a 33 2e 31 38 2e 30 5d 29 20  dateof:3.18.0]) 
4360: 61 6e 64 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66  and is a no-op f
4370: 6f 72 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 6c  or all prior rel
4380: 65 61 73 65 73 0a 6f 66 20 53 51 4c 69 74 65 2e  eases.of SQLite.
4390: 3c 2f 70 3e 0a 0a 3c 68 32 3e 41 6e 74 69 63 69  </p>..<h2>Antici
43a0: 70 61 74 65 64 20 46 75 74 75 72 65 20 45 6e 68  pated Future Enh
43b0: 61 6e 63 65 6d 65 6e 74 73 3c 2f 68 32 3e 0a 0a  ancements</h2>..
43c0: 3c 70 3e 41 6c 6c 20 65 78 69 73 74 69 6e 67 20  <p>All existing 
43d0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
43e0: 74 65 20 64 6f 20 61 20 66 75 6c 6c 20 74 61 62  te do a full tab
43f0: 6c 65 20 73 63 61 6e 20 66 6f 72 20 41 4e 41 4c  le scan for ANAL
4400: 59 5a 45 2e 20 20 54 68 69 73 20 63 61 6e 20 62  YZE.  This can b
4410: 65 0a 73 6c 6f 77 20 66 6f 72 20 6d 75 6c 74 69  e.slow for multi
4420: 2d 67 69 67 61 62 79 74 65 20 61 6e 64 20 6c 61  -gigabyte and la
4430: 72 67 65 72 20 64 61 74 61 62 61 73 65 73 2e 20  rger databases. 
4440: 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73   Future versions
4450: 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68 74   of SQLite might
4460: 0a 75 73 65 20 72 61 6e 64 6f 6d 20 73 61 6d 70  .use random samp
4470: 6c 69 6e 67 20 72 61 74 68 65 72 20 74 68 61 6e  ling rather than
4480: 20 61 20 66 75 6c 6c 20 74 61 62 6c 65 20 73 63   a full table sc
4490: 61 6e 20 74 6f 20 6f 62 74 61 69 6e 20 65 73 74  an to obtain est
44a0: 69 6d 61 74 65 73 20 66 6f 72 20 74 68 65 0a 64  imates for the.d
44b0: 61 74 61 62 61 73 65 20 73 68 61 70 65 2c 20 65  atabase shape, e
44c0: 73 70 65 63 69 61 6c 6c 79 20 6f 6e 20 6c 61 72  specially on lar
44d0: 67 65 72 20 74 61 62 6c 65 73 2e 20 20 54 68 65  ger tables.  The
44e0: 20 72 65 73 75 6c 74 73 20 77 6f 75 6c 64 20 61   results would a
44f0: 70 70 72 6f 78 69 6d 61 74 65 2c 20 62 75 74 20  pproximate, but 
4500: 0a 77 69 6c 6c 20 62 65 20 63 6c 6f 73 65 20 65  .will be close e
4510: 6e 6f 75 67 68 20 66 6f 72 20 71 75 65 72 79 20  nough for query 
4520: 70 6c 61 6e 6e 69 6e 67 20 70 75 72 70 6f 73 65  planning purpose
4530: 73 2e 20 20 41 73 20 6f 66 20 32 30 31 37 2d 30  s.  As of 2017-0
4540: 33 2d 32 30 2c 20 74 68 69 73 0a 63 6f 6e 63 65  3-20, this.conce
4550: 70 74 20 68 61 73 20 62 65 65 6e 20 74 65 73 74  pt has been test
4560: 65 64 20 69 6e 20 65 78 70 65 72 69 6d 65 6e 74  ed in experiment
4570: 61 6c 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20  al branches and 
4580: 61 70 70 65 61 72 73 20 74 6f 20 77 6f 72 6b 20  appears to work 
4590: 77 65 6c 6c 2c 20 62 75 74 0a 68 61 73 20 6e 6f  well, but.has no
45a0: 74 20 62 65 65 6e 20 66 6f 6c 64 65 64 20 69 6e  t been folded in
45b0: 74 6f 20 61 6e 20 6f 66 66 69 63 69 61 6c 20 72  to an official r
45c0: 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  elease.</p>..<tc
45d0: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
45e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4620: 23 0a 53 65 63 74 69 6f 6e 20 7b 41 54 54 41 43  #.Section {ATTAC
4630: 48 20 44 41 54 41 42 41 53 45 7d 20 61 74 74 61  H DATABASE} atta
4640: 63 68 20 7b 61 74 74 61 63 68 65 64 20 2a 41 54  ch {attached *AT
4650: 54 41 43 48 7d 0a 0a 52 65 63 75 72 73 69 76 65  TACH}..Recursive
4660: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61 74  BubbleDiagram at
4670: 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  tach-stmt.</tcl>
4680: 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 54 54 41 43  ..<p> ^The ATTAC
4690: 48 20 44 41 54 41 42 41 53 45 20 73 74 61 74 65  H DATABASE state
46a0: 6d 65 6e 74 20 61 64 64 73 20 61 6e 6f 74 68 65  ment adds anothe
46b0: 72 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c 65  r database .file
46c0: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
46d0: 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63  [database connec
46e0: 74 69 6f 6e 5d 2e 20 0a 44 61 74 61 62 61 73 65  tion]. .Database
46f0: 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 72 65   files that were
4700: 20 70 72 65 76 69 6f 75 73 6c 79 20 61 74 74 61   previously atta
4710: 63 68 65 64 20 63 61 6e 20 62 65 20 72 65 6d 6f  ched can be remo
4720: 76 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b 44  ved using.the [D
4730: 45 54 41 43 48 20 44 41 54 41 42 41 53 45 5d 20  ETACH DATABASE] 
4740: 63 6f 6d 6d 61 6e 64 2e 0a 0a 3c 70 3e 5e 54 68  command...<p>^Th
4750: 65 20 66 69 6c 65 6e 61 6d 65 20 66 6f 72 20 74  e filename for t
4760: 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 62  he database to b
4770: 65 20 61 74 74 61 63 68 65 64 20 69 73 20 74 68  e attached is th
4780: 65 20 76 61 6c 75 65 20 6f 66 0a 74 68 65 20 65  e value of.the e
4790: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 6f  xpression that o
47a0: 63 63 75 72 73 20 62 65 66 6f 72 65 20 74 68 65  ccurs before the
47b0: 20 41 53 20 6b 65 79 77 6f 72 64 2e 0a 5e 54 68   AS keyword..^Th
47c0: 65 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68  e filename of th
47d0: 65 20 64 61 74 61 62 61 73 65 20 66 6f 6c 6c 6f  e database follo
47e0: 77 73 20 74 68 65 20 73 61 6d 65 20 73 65 6d 61  ws the same sema
47f0: 6e 74 69 63 73 20 61 73 20 74 68 65 0a 66 69 6c  ntics as the.fil
4800: 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74  ename argument t
4810: 6f 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28  o [sqlite3_open(
4820: 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f  )] and [sqlite3_
4830: 6f 70 65 6e 5f 76 32 28 29 5d 3b 20 74 68 65 0a  open_v2()]; the.
4840: 73 70 65 63 69 61 6c 20 6e 61 6d 65 20 22 5b 3a  special name "[:
4850: 6d 65 6d 6f 72 79 3a 5d 22 20 72 65 73 75 6c 74  memory:]" result
4860: 73 20 69 6e 20 61 6e 20 5b 69 6e 2d 6d 65 6d 6f  s in an [in-memo
4870: 72 79 20 64 61 74 61 62 61 73 65 5d 20 61 6e 64  ry database] and
4880: 20 61 6e 0a 65 6d 70 74 79 20 73 74 72 69 6e 67   an.empty string
4890: 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 6e 65   results in a ne
48a0: 77 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61  w temporary data
48b0: 62 61 73 65 2e 0a 5e 54 68 65 20 66 69 6c 65 6e  base..^The filen
48c0: 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 63 61 6e  ame argument can
48d0: 20 62 65 20 61 20 5b 55 52 49 20 66 69 6c 65 6e   be a [URI filen
48e0: 61 6d 65 5d 20 69 66 20 55 52 49 20 66 69 6c 65  ame] if URI file
48f0: 6e 61 6d 65 20 70 72 6f 63 65 73 73 69 6e 67 0a  name processing.
4900: 69 73 20 65 6e 61 62 6c 65 20 6f 6e 20 74 68 65  is enable on the
4910: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
4920: 74 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61 75  tion.  The defau
4930: 6c 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 66  lt behavior is f
4940: 6f 72 0a 55 52 49 20 66 69 6c 65 6e 61 6d 65 73  or.URI filenames
4950: 20 74 6f 20 62 65 20 64 69 73 61 62 6c 65 64 2c   to be disabled,
4960: 20 68 6f 77 65 76 65 72 20 74 68 61 74 20 6d 69   however that mi
4970: 67 68 74 20 63 68 61 6e 67 65 20 69 6e 20 61 20  ght change in a 
4980: 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 0a 6f  future release.o
4990: 66 20 53 51 4c 69 74 65 2c 20 73 6f 20 61 70 70  f SQLite, so app
49a0: 6c 69 63 61 74 69 6f 6e 20 64 65 76 65 6c 6f 70  lication develop
49b0: 65 72 73 20 61 72 65 20 61 64 76 69 73 65 64 20  ers are advised 
49c0: 74 6f 20 70 6c 61 6e 20 61 63 63 6f 72 64 69 6e  to plan accordin
49d0: 67 6c 79 2e 0a 0a 3c 70 3e 54 68 65 20 6e 61 6d  gly...<p>The nam
49e0: 65 20 74 68 61 74 20 6f 63 63 75 72 73 20 61 66  e that occurs af
49f0: 74 65 72 20 74 68 65 20 41 53 20 6b 65 79 77 6f  ter the AS keywo
4a00: 72 64 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  rd is the name o
4a10: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 75  f the database.u
4a20: 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62  sed internally b
4a30: 79 20 53 51 4c 69 74 65 2e 0a 5e 54 68 65 20 73  y SQLite..^The s
4a40: 63 68 65 6d 61 2d 6e 61 6d 65 73 20 27 6d 61 69  chema-names 'mai
4a50: 6e 27 20 61 6e 64 20 0a 27 74 65 6d 70 27 20 72  n' and .'temp' r
4a60: 65 66 65 72 20 74 6f 20 74 68 65 20 6d 61 69 6e  efer to the main
4a70: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 68   database and th
4a80: 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  e database used 
4a90: 66 6f 72 20 0a 74 65 6d 70 6f 72 61 72 79 20 74  for .temporary t
4aa0: 61 62 6c 65 73 2e 20 20 5e 54 68 65 20 6d 61 69  ables.  ^The mai
4ab0: 6e 20 61 6e 64 20 74 65 6d 70 20 64 61 74 61 62  n and temp datab
4ac0: 61 73 65 73 20 63 61 6e 6e 6f 74 20 62 65 20 61  ases cannot be a
4ad0: 74 74 61 63 68 65 64 20 6f 72 0a 64 65 74 61 63  ttached or.detac
4ae0: 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28  hed.</p>..<p> ^(
4af0: 54 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74 74  Tables in an att
4b00: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 63  ached database c
4b10: 61 6e 20 62 65 20 72 65 66 65 72 72 65 64 20 74  an be referred t
4b20: 6f 20 75 73 69 6e 67 20 74 68 65 20 73 79 6e 74  o using the synt
4b30: 61 78 20 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61  ax .<i>schema-na
4b40: 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  me.table-name</i
4b50: 3e 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 6e 61  >.)^  ^If the na
4b60: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
4b70: 69 73 20 75 6e 69 71 75 65 0a 61 63 72 6f 73 73  is unique.across
4b80: 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
4b90: 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20  tabases and the 
4ba0: 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61  main and temp da
4bb0: 74 61 62 61 73 65 73 2c 20 74 68 65 6e 20 74 68  tabases, then th
4bc0: 65 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  e.<i>schema-name
4bd0: 3c 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20 6e  </i> prefix is n
4be0: 6f 74 20 72 65 71 75 69 72 65 64 2e 20 20 5e 49  ot required.  ^I
4bf0: 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 74 61  f two or more ta
4c00: 62 6c 65 73 20 69 6e 0a 64 69 66 66 65 72 65 6e  bles in.differen
4c10: 74 20 64 61 74 61 62 61 73 65 73 20 68 61 76 65  t databases have
4c20: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
4c30: 6e 64 20 74 68 65 20 0a 3c 69 3e 73 63 68 65 6d  nd the .<i>schem
4c40: 61 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69  a-name</i> prefi
4c50: 78 20 69 73 20 6e 6f 74 20 75 73 65 64 20 6f 6e  x is not used on
4c60: 20 61 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e   a table referen
4c70: 63 65 2c 20 74 68 65 6e 20 74 68 65 0a 74 61 62  ce, then the.tab
4c80: 6c 65 20 63 68 6f 73 65 6e 20 69 73 20 74 68 65  le chosen is the
4c90: 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61   one in the data
4ca0: 62 61 73 65 20 74 68 61 74 20 77 61 73 20 6c 65  base that was le
4cb0: 61 73 74 20 72 65 63 65 6e 74 6c 79 20 61 74 74  ast recently att
4cc0: 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a  ached.</p>..<p>.
4cd0: 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e  ^Transactions in
4ce0: 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65  volving multiple
4cf0: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
4d00: 73 65 73 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a  ses are atomic,.
4d10: 61 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68  assuming that th
4d20: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
4d30: 69 73 20 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79  is not "[:memory
4d40: 3a 5d 22 20 61 6e 64 20 74 68 65 20 0a 5b 6a 6f  :]" and the .[jo
4d50: 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e  urnal_mode] is n
4d60: 6f 74 20 5b 57 41 4c 5d 2e 20 20 5e 28 49 66 20  ot [WAL].  ^(If 
4d70: 74 68 65 20 6d 61 69 6e 0a 64 61 74 61 62 61 73  the main.databas
4d80: 65 20 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20  e is ":memory:" 
4d90: 6f 72 20 69 66 20 74 68 65 20 6a 6f 75 72 6e 61  or if the journa
4da0: 6c 5f 6d 6f 64 65 20 69 73 20 57 41 4c 2c 20 74  l_mode is WAL, t
4db0: 68 65 6e 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e  hen .transaction
4dc0: 73 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65  s continue to be
4dd0: 20 61 74 6f 6d 69 63 20 77 69 74 68 69 6e 20 65   atomic within e
4de0: 61 63 68 20 69 6e 64 69 76 69 64 75 61 6c 0a 64  ach individual.d
4df0: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 42 75  atabase file. Bu
4e00: 74 20 69 66 20 74 68 65 20 68 6f 73 74 20 63 6f  t if the host co
4e10: 6d 70 75 74 65 72 20 63 72 61 73 68 65 73 20 69  mputer crashes i
4e20: 6e 20 74 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20  n the middle.of 
4e30: 61 20 5b 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65  a [COMMIT] where
4e40: 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74   two or more dat
4e50: 61 62 61 73 65 20 66 69 6c 65 73 20 61 72 65 20  abase files are 
4e60: 75 70 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66  updated,.some of
4e70: 20 74 68 6f 73 65 20 66 69 6c 65 73 20 6d 69 67   those files mig
4e80: 68 74 20 67 65 74 20 74 68 65 20 63 68 61 6e 67  ht get the chang
4e90: 65 73 20 77 68 65 72 65 20 6f 74 68 65 72 73 0a  es where others.
4ea0: 6d 69 67 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70  might not.)^.</p
4eb0: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 72 65 20 69 73  >..<p> ^There is
4ec0: 20 61 20 6c 69 6d 69 74 2c 20 73 65 74 20 75 73   a limit, set us
4ed0: 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d  ing [sqlite3_lim
4ee0: 69 74 28 29 5d 20 61 6e 64 20 0a 5b 53 51 4c 49  it()] and .[SQLI
4ef0: 54 45 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48 45  TE_LIMIT_ATTACHE
4f00: 44 5d 2c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  D], to the numbe
4f10: 72 20 6f 66 20 64 61 74 61 62 61 73 65 73 20 74  r of databases t
4f20: 68 61 74 20 63 61 6e 20 62 65 0a 73 69 6d 75 6c  hat can be.simul
4f30: 74 61 6e 65 6f 75 73 6c 79 20 61 74 74 61 63 68  taneously attach
4f40: 65 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 64  ed to a single d
4f50: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
4f60: 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  on.</p>..<tcl>.#
4f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4fb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
4fc0: 65 63 74 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52  ection {BEGIN TR
4fd0: 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73  ANSACTION} trans
4fe0: 61 63 74 69 6f 6e 20 7b 2a 42 45 47 49 4e 20 43  action {*BEGIN C
4ff0: 4f 4d 4d 49 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a  OMMIT ROLLBACK}.
5000: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
5010: 44 69 61 67 72 61 6d 20 62 65 67 69 6e 2d 73 74  Diagram begin-st
5020: 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  mt.RecursiveBubb
5030: 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 69 74  leDiagram commit
5040: 2d 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42  -stmt.RecursiveB
5050: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c  ubbleDiagram rol
5060: 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c  lback-stmt.</tcl
5070: 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67  >..<p>.^No chang
5080: 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  es can be made t
5090: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65  o the database e
50a0: 78 63 65 70 74 20 77 69 74 68 69 6e 20 61 20 74  xcept within a t
50b0: 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79  ransaction..^Any
50c0: 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63 68   command that ch
50d0: 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 62 61  anges the databa
50e0: 73 65 20 28 62 61 73 69 63 61 6c 6c 79 2c 20 61  se (basically, a
50f0: 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f  ny SQL command.o
5100: 74 68 65 72 20 74 68 61 6e 20 5b 53 45 4c 45 43  ther than [SELEC
5110: 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  T]) will automat
5120: 69 63 61 6c 6c 79 20 73 74 61 72 74 20 61 20 74  ically start a t
5130: 72 61 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e  ransaction if.on
5140: 65 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79  e is not already
5150: 20 69 6e 20 65 66 66 65 63 74 2e 20 20 5e 41 75   in effect.  ^Au
5160: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72  tomatically star
5170: 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ted transactions
5180: 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 77  .are committed w
5190: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 71 75 65  hen the last que
51a0: 72 79 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70  ry finishes..</p
51b0: 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74  >..<p>.^Transact
51c0: 69 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61 72  ions can be star
51d0: 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69  ted manually usi
51e0: 6e 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d  ng the BEGIN.com
51f0: 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68 20 74 72  mand.  ^(Such tr
5200: 61 6e 73 61 63 74 69 6f 6e 73 20 75 73 75 61 6c  ansactions usual
5210: 6c 79 20 70 65 72 73 69 73 74 20 75 6e 74 69 6c  ly persist until
5220: 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54   the next.COMMIT
5230: 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d   or ROLLBACK com
5240: 6d 61 6e 64 2e 20 20 42 75 74 20 61 20 74 72 61  mand.  But a tra
5250: 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c  nsaction will al
5260: 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20  so .ROLLBACK if 
5270: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
5280: 63 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e 20  closed or if an 
5290: 65 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64  error occurs.and
52a0: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
52b0: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
52c0: 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73  n algorithm is s
52d0: 70 65 63 69 66 69 65 64 2e 29 5e 0a 53 65 65 20  pecified.)^.See 
52e0: 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  the documentatio
52f0: 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e  n on the [ON CON
5300: 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f  FLICT].clause fo
5310: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
5320: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
5330: 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66  he ROLLBACK.conf
5340: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
5350: 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a  algorithm..</p>.
5360: 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41  .<p>.^END TRANSA
5370: 43 54 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61  CTION is an alia
5380: 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f  s for COMMIT..</
5390: 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61  p>..<p> ^(Transa
53a0: 63 74 69 6f 6e 73 20 63 72 65 61 74 65 64 20 75  ctions created u
53b0: 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d  sing BEGIN...COM
53c0: 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e  MIT do not nest.
53d0: 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20 74  )^.^For nested t
53e0: 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73 65  ransactions, use
53f0: 20 74 68 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d   the [SAVEPOINT]
5400: 20 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20 63   and [RELEASE] c
5410: 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f  ommands..The "TO
5420: 20 53 41 56 45 50 4f 49 4e 54 20 3c 79 79 74 65   SAVEPOINT <yyte
5430: 72 6d 3e 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  rm>name</yyterm>
5440: 22 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  " clause of the 
5450: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
5460: 20 73 68 6f 77 6e 0a 69 6e 20 74 68 65 20 73 79   shown.in the sy
5470: 6e 74 61 78 20 64 69 61 67 72 61 6d 20 61 62 6f  ntax diagram abo
5480: 76 65 20 69 73 20 6f 6e 6c 79 20 61 70 70 6c 69  ve is only appli
5490: 63 61 62 6c 65 20 74 6f 20 5b 53 41 56 45 50 4f  cable to [SAVEPO
54a0: 49 4e 54 5d 0a 74 72 61 6e 73 61 63 74 69 6f 6e  INT].transaction
54b0: 73 2e 20 20 5e 41 6e 20 61 74 74 65 6d 70 74 20  s.  ^An attempt 
54c0: 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20 42 45  to invoke the BE
54d0: 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68  GIN command with
54e0: 69 6e 0a 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in.a transaction
54f0: 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
5500: 61 6e 20 65 72 72 6f 72 2c 20 72 65 67 61 72 64  an error, regard
5510: 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 0a  less of whether.
5520: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
5530: 77 61 73 20 73 74 61 72 74 65 64 20 62 79 20 5b  was started by [
5540: 53 41 56 45 50 4f 49 4e 54 5d 20 6f 72 20 61 20  SAVEPOINT] or a 
5550: 70 72 69 6f 72 20 42 45 47 49 4e 2e 0a 5e 54 68  prior BEGIN..^Th
5560: 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64  e COMMIT command
5570: 20 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41 43   and the ROLLBAC
5580: 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75  K command withou
5590: 74 20 74 68 65 20 54 4f 20 63 6c 61 75 73 65 0a  t the TO clause.
55a0: 77 6f 72 6b 20 74 68 65 20 73 61 6d 65 20 6f 6e  work the same on
55b0: 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 74 72 61   [SAVEPOINT] tra
55c0: 6e 73 61 63 74 69 6f 6e 73 20 61 73 20 74 68 65  nsactions as the
55d0: 79 20 64 6f 20 77 69 74 68 20 74 72 61 6e 73 61  y do with transa
55e0: 63 74 69 6f 6e 73 0a 73 74 61 72 74 65 64 20 62  ctions.started b
55f0: 79 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c 74  y BEGIN.</p>..<t
5600: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69  cl>hd_fragment i
5610: 6d 6d 65 64 69 61 74 65 20 7b 42 45 47 49 4e 20  mmediate {BEGIN 
5620: 49 4d 4d 45 44 49 41 54 45 7d 20 7b 42 45 47 49  IMMEDIATE} {BEGI
5630: 4e 20 45 58 43 4c 55 53 49 56 45 7d 3c 2f 74 63  N EXCLUSIVE}</tc
5640: 6c 3e 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74  l>.<p>.^Transact
5650: 69 6f 6e 73 20 63 61 6e 20 62 65 20 64 65 66 65  ions can be defe
5660: 72 72 65 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c  rred, immediate,
5670: 20 6f 72 20 65 78 63 6c 75 73 69 76 65 2e 20 20   or exclusive.  
5680: 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 74 72  .^The default tr
5690: 61 6e 73 61 63 74 69 6f 6e 20 62 65 68 61 76 69  ansaction behavi
56a0: 6f 72 20 69 73 20 64 65 66 65 72 72 65 64 2e 0a  or is deferred..
56b0: 5e 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73 20  ^Deferred means 
56c0: 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61 72  that no locks ar
56d0: 65 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74 68  e acquired.on th
56e0: 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c  e database until
56f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
5700: 20 66 69 72 73 74 20 61 63 63 65 73 73 65 64 2e   first accessed.
5710: 20 20 5e 54 68 75 73 20 77 69 74 68 20 61 0a 64    ^Thus with a.d
5720: 65 66 65 72 72 65 64 20 74 72 61 6e 73 61 63 74  eferred transact
5730: 69 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20 73  ion, the BEGIN s
5740: 74 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66 20  tatement itself 
5750: 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20  does nothing to 
5760: 74 68 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e 20  the.filesystem. 
5770: 20 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20   ^Locks.are not 
5780: 61 63 71 75 69 72 65 64 20 75 6e 74 69 6c 20 74  acquired until t
5790: 68 65 20 66 69 72 73 74 20 72 65 61 64 20 6f 72  he first read or
57a0: 20 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e   write operation
57b0: 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 72 65  .  ^The first re
57c0: 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67 61  ad.operation aga
57d0: 69 6e 73 74 20 61 20 64 61 74 61 62 61 73 65 20  inst a database 
57e0: 63 72 65 61 74 65 73 20 61 20 5b 53 48 41 52 45  creates a [SHARE
57f0: 44 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20  D] lock and the 
5800: 66 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65 72  first.write oper
5810: 61 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61 20  ation creates a 
5820: 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 2e  [RESERVED] lock.
5830: 20 20 20 5e 42 65 63 61 75 73 65 20 74 68 65 20     ^Because the 
5840: 61 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a 6c  acquisition of.l
5850: 6f 63 6b 73 20 69 73 20 64 65 66 65 72 72 65 64  ocks is deferred
5860: 20 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65 20   until they are 
5870: 6e 65 65 64 65 64 2c 20 69 74 20 69 73 20 70 6f  needed, it is po
5880: 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74  ssible that anot
5890: 68 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70 72  her.thread or pr
58a0: 6f 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65 61  ocess could crea
58b0: 74 65 20 61 20 73 65 70 61 72 61 74 65 20 74 72  te a separate tr
58c0: 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 72  ansaction and wr
58d0: 69 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61 62  ite to.the datab
58e0: 61 73 65 20 61 66 74 65 72 20 74 68 65 20 42 45  ase after the BE
58f0: 47 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72 65  GIN on the curre
5900: 6e 74 20 74 68 72 65 61 64 20 68 61 73 20 65 78  nt thread has ex
5910: 65 63 75 74 65 64 2e 0a 5e 49 66 20 74 68 65 20  ecuted..^If the 
5920: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 69  transaction is i
5930: 6d 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20 5b  mmediate, then [
5940: 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73 0a  RESERVED] locks.
5950: 61 72 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20  are acquired on 
5960: 61 6c 6c 20 64 61 74 61 62 61 73 65 73 20 61 73  all databases as
5970: 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 42 45 47   soon as the BEG
5980: 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78  IN command is.ex
5990: 65 63 75 74 65 64 2c 20 77 69 74 68 6f 75 74 20  ecuted, without 
59a0: 77 61 69 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  waiting for the.
59b0: 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 20 75  database to be u
59c0: 73 65 64 2e 20 20 5e 41 66 74 65 72 20 61 20 42  sed.  ^After a B
59d0: 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c 20  EGIN IMMEDIATE, 
59e0: 0a 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61 62  .no other [datab
59f0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20  ase connection] 
5a00: 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20  will be able to 
5a10: 77 72 69 74 65 20 74 6f 20 74 68 65 20 64 61 74  write to the dat
5a20: 61 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42 45  abase or.do a BE
5a30: 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f 72  GIN IMMEDIATE or
5a40: 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45   BEGIN EXCLUSIVE
5a50: 2e 20 20 5e 4f 74 68 65 72 20 70 72 6f 63 65 73  .  ^Other proces
5a60: 73 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65  ses can continue
5a70: 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d 20 74 68  .to read from th
5a80: 65 20 64 61 74 61 62 61 73 65 2c 20 68 6f 77 65  e database, howe
5a90: 76 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75 73  ver.  ^An exclus
5aa0: 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ive transaction 
5ab0: 63 61 75 73 65 73 0a 5b 45 58 43 4c 55 53 49 56  causes.[EXCLUSIV
5ac0: 45 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61  E] locks to be a
5ad0: 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64  cquired on all d
5ae0: 61 74 61 62 61 73 65 73 2e 20 20 5e 41 66 74 65  atabases.  ^Afte
5af0: 72 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55 53  r a BEGIN.EXCLUS
5b00: 49 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b 64  IVE, no other [d
5b10: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5b20: 6f 6e 5d 20 65 78 63 65 70 74 20 66 6f 72 20 5b  on] except for [
5b30: 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65 64  read_uncommitted
5b40: 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77 69  ].connections wi
5b50: 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65  ll be able to re
5b60: 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ad the database 
5b70: 61 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f 6e  and no other con
5b80: 6e 65 63 74 69 6f 6e 20 77 69 74 68 6f 75 74 0a  nection without.
5b90: 65 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62  exception will b
5ba0: 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65 20  e able to write 
5bb0: 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74  the database unt
5bc0: 69 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  il the transacti
5bd0: 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a  on is.complete..
5be0: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69  </p>..<p>.^(An i
5bf0: 6d 70 6c 69 63 69 74 20 74 72 61 6e 73 61 63 74  mplicit transact
5c00: 69 6f 6e 20 28 61 20 74 72 61 6e 73 61 63 74 69  ion (a transacti
5c10: 6f 6e 20 74 68 61 74 20 69 73 20 73 74 61 72 74  on that is start
5c20: 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
5c30: 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61 63 74  ,.not a transact
5c40: 69 6f 6e 20 73 74 61 72 74 65 64 20 62 79 20 42  ion started by B
5c50: 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74 74  EGIN) is committ
5c60: 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
5c70: 20 77 68 65 6e 0a 74 68 65 20 6c 61 73 74 20 61   when.the last a
5c80: 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 20  ctive statement 
5c90: 66 69 6e 69 73 68 65 73 2e 20 20 41 20 73 74 61  finishes.  A sta
5ca0: 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73 20  tement finishes 
5cb0: 77 68 65 6e 20 69 74 73 0a 70 72 65 70 61 72 65  when its.prepare
5cc0: 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 5b  d statement is [
5cd0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 20  sqlite3_reset() 
5ce0: 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71 6c  | reset] or.[sql
5cf0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20  ite3_finalize() 
5d00: 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20 41  | finalized].  A
5d10: 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33 5f  n open [sqlite3_
5d20: 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a 69  blob] used for.i
5d30: 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20  ncremental BLOB 
5d40: 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20 61 6e  I/O counts as an
5d50: 20 75 6e 66 69 6e 69 73 68 65 64 20 73 74 61 74   unfinished stat
5d60: 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71 6c  ement.  The [sql
5d70: 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73  ite3_blob].finis
5d80: 68 65 73 20 77 68 65 6e 20 69 74 20 69 73 20 5b  hes when it is [
5d90: 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f  sqlite3_blob_clo
5da0: 73 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e 29  se() | closed].)
5db0: 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65  ^.</p>..<p>.^The
5dc0: 20 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49 54   explicit COMMIT
5dd0: 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69 6d   command runs im
5de0: 6d 65 64 69 61 74 65 6c 79 2c 20 65 76 65 6e 20  mediately, even 
5df0: 69 66 20 74 68 65 72 65 20 61 72 65 0a 70 65 6e  if there are.pen
5e00: 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73 74  ding [SELECT] st
5e10: 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77 65  atements.  ^Howe
5e20: 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61 72  ver, if there ar
5e30: 65 20 70 65 6e 64 69 6e 67 0a 77 72 69 74 65 20  e pending.write 
5e40: 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74 68 65 20  operations, the 
5e50: 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a 77  COMMIT command.w
5e60: 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e  ill fail with an
5e70: 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c   error code [SQL
5e80: 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a  ITE_BUSY]..</p>.
5e90: 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70 74  .<p>.^An attempt
5ea0: 20 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d 4d   to execute COMM
5eb0: 49 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72 65  IT might also re
5ec0: 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c 49  sult in an [SQLI
5ed0: 54 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e 20  TE_BUSY] return 
5ee0: 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74 68  code.if an anoth
5ef0: 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f  er thread or pro
5f00: 63 65 73 73 20 68 61 73 20 61 20 5b 73 68 61 72  cess has a [shar
5f10: 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20  ed lock] on the 
5f20: 64 61 74 61 62 61 73 65 0a 74 68 61 74 20 70 72  database.that pr
5f30: 65 76 65 6e 74 65 64 20 74 68 65 20 64 61 74 61  evented the data
5f40: 62 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67 20  base from being 
5f50: 75 70 64 61 74 65 64 2e 20 20 5e 57 68 65 6e 20  updated.  ^When 
5f60: 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e 20  COMMIT fails in 
5f70: 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74 72  this.way, the tr
5f80: 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e  ansaction remain
5f90: 73 20 61 63 74 69 76 65 20 61 6e 64 20 74 68 65  s active and the
5fa0: 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20 72   COMMIT can be r
5fb0: 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66 74  etried later.aft
5fc0: 65 72 20 74 68 65 20 72 65 61 64 65 72 20 68 61  er the reader ha
5fd0: 73 20 68 61 64 20 61 20 63 68 61 6e 63 65 20 74  s had a chance t
5fe0: 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c  o clear..</p>..<
5ff0: 70 3e 0a 49 6e 20 76 65 72 79 20 6f 6c 64 20 76  p>.In very old v
6000: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
6010: 65 20 28 62 65 66 6f 72 65 20 76 65 72 73 69 6f  e (before versio
6020: 6e 20 33 2e 37 2e 31 31 20 2d 20 5b 64 61 74 65  n 3.7.11 - [date
6030: 6f 66 3a 33 2e 37 2e 31 31 5d 29 0a 74 68 65 20  of:3.7.11]).the 
6040: 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 66 61  ROLLBACK will fa
6050: 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  il with an error
6060: 20 63 6f 64 65 20 0a 5b 53 51 4c 49 54 45 5f 42   code .[SQLITE_B
6070: 55 53 59 5d 20 69 66 20 74 68 65 72 65 20 61 72  USY] if there ar
6080: 65 20 61 6e 79 20 70 65 6e 64 69 6e 67 20 71 75  e any pending qu
6090: 65 72 69 65 73 2e 20 20 5e 49 6e 20 6d 6f 72 65  eries.  ^In more
60a0: 20 72 65 63 65 6e 74 0a 76 65 72 73 69 6f 6e 73   recent.versions
60b0: 20 6f 66 20 53 51 4c 69 74 65 2c 20 74 68 65 20   of SQLite, the 
60c0: 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 70 72  ROLLBACK will pr
60d0: 6f 63 65 65 64 20 61 6e 64 20 70 65 6e 64 69 6e  oceed and pendin
60e0: 67 20 73 74 61 74 65 6d 65 6e 74 73 0a 77 69 6c  g statements.wil
60f0: 6c 20 6f 66 74 65 6e 20 62 65 20 61 62 6f 72 74  l often be abort
6100: 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68 65 6d  ed, causing them
6110: 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 5b 53   to return an [S
6120: 51 4c 49 54 45 5f 41 42 4f 52 54 5d 20 6f 72 0a  QLITE_ABORT] or.
6130: 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f  [SQLITE_ABORT_RO
6140: 4c 4c 42 41 43 4b 5d 20 65 72 72 6f 72 2e 0a 5e  LLBACK] error..^
6150: 49 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  In SQLite versio
6160: 6e 20 33 2e 38 2e 38 20 28 5b 64 61 74 65 6f 66  n 3.8.8 ([dateof
6170: 3a 33 2e 38 2e 38 5d 29 20 61 6e 64 20 6c 61 74  :3.8.8]) and lat
6180: 65 72 2c 0a 61 20 70 65 6e 64 69 6e 67 20 72 65  er,.a pending re
6190: 61 64 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65  ad will continue
61a0: 20 66 75 6e 63 74 69 6f 6e 69 6e 67 0a 61 66 74   functioning.aft
61b0: 65 72 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  er the ROLLBACK 
61c0: 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 20 52  as long as the R
61d0: 4f 4c 4c 42 41 43 4b 20 64 6f 65 73 20 6e 6f 74  OLLBACK does not
61e0: 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74 61   modify the data
61f0: 62 61 73 65 0a 73 63 68 65 6d 61 2e 0a 3c 2f 70  base.schema..</p
6200: 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41 47 4d  >..<p>.If [PRAGM
6210: 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20  A journal_mode] 
6220: 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20 28 74  is set to OFF (t
6230: 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20 74 68  hus disabling th
6240: 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
6250: 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20 74 68  al.file) then th
6260: 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74 68  e behavior of th
6270: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
6280: 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  nd is undefined.
6290: 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 70 6f  .</p>..<h3>Respo
62a0: 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20 57 69  nse To Errors Wi
62b0: 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63 74 69  thin A Transacti
62c0: 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28 49  on</h3>..<p> ^(I
62d0: 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64 73 20  f certain kinds 
62e0: 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75 72 20  of errors occur 
62f0: 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
6300: 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e 73 61  tion, the.transa
6310: 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d 61 79  ction may or may
6320: 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64 20 62   not be rolled b
6330: 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ack automaticall
6340: 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73 20 74  y.  The.errors t
6350: 68 61 74 20 63 61 6e 20 63 61 75 73 65 20 61 6e  hat can cause an
6360: 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 6c 6c 62   automatic rollb
6370: 61 63 6b 20 69 6e 63 6c 75 64 65 3a 3c 2f 70 3e  ack include:</p>
6380: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51 4c  ..<ul>.<li> [SQL
6390: 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61 74 61 62  ITE_FULL]: datab
63a0: 61 73 65 20 6f 72 20 64 69 73 6b 20 66 75 6c 6c  ase or disk full
63b0: 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4f  .<li> [SQLITE_IO
63c0: 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f 4f 20 65  ERR]: disk I/O e
63d0: 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54  rror.<li> [SQLIT
63e0: 45 5f 42 55 53 59 5d 3a 20 64 61 74 61 62 61 73  E_BUSY]: databas
63f0: 65 20 69 6e 20 75 73 65 20 62 79 20 61 6e 6f 74  e in use by anot
6400: 68 65 72 20 70 72 6f 63 65 73 73 0a 3c 6c 69 3e  her process.<li>
6410: 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d 3a   [SQLITE_NOMEM]:
6420: 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79 0a 3c   out or memory.<
6430: 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f 72  /ul>)^..<p>.^For
6440: 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 65 72   all of these er
6450: 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61 74 74  rors, SQLite att
6460: 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20 6a 75  empts to undo ju
6470: 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61 74 65  st the one state
6480: 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f 72 6b  ment.it was work
6490: 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61 76 65  ing on and leave
64a0: 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 70 72   changes from pr
64b0: 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ior statements w
64c0: 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65 20 74  ithin the.same t
64d0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 61 63  ransaction intac
64e0: 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 77  t and continue w
64f0: 69 74 68 20 74 68 65 20 74 72 61 6e 73 61 63 74  ith the transact
6500: 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20  ion.  ^However, 
6510: 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68  .depending on th
6520: 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
6530: 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20  g evaluated and 
6540: 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77 68 69  the point at whi
6550: 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f 63 63  ch the.error occ
6560: 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20 62 65  urs, it might be
6570: 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20 53   necessary for S
6580: 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62 61 63  QLite to rollbac
6590: 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74 68 65  k and.cancel the
65a0: 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74   entire transact
65b0: 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70 6c 69 63  ion.  ^An applic
65c0: 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c 20 77  ation can tell w
65d0: 68 69 63 68 0a 63 6f 75 72 73 65 20 6f 66 20 61  hich.course of a
65e0: 63 74 69 6f 6e 20 53 51 4c 69 74 65 20 74 6f 6f  ction SQLite too
65f0: 6b 20 62 79 20 75 73 69 6e 67 20 74 68 65 0a 5b  k by using the.[
6600: 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
6610: 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61 6e 67  commit()] C-lang
6620: 75 61 67 65 20 69 6e 74 65 72 66 61 63 65 2e 3c  uage interface.<
6630: 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20 72 65  /p>..<p>It is re
6640: 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74 20 61  commended that a
6650: 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 65 73 70  pplications resp
6660: 6f 6e 64 20 74 6f 20 74 68 65 20 65 72 72 6f 72  ond to the error
6670: 73 0a 6c 69 73 74 65 64 20 61 62 6f 76 65 20 62  s.listed above b
6680: 79 20 65 78 70 6c 69 63 69 74 6c 79 20 69 73 73  y explicitly iss
6690: 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43 4b 20  uing a ROLLBACK 
66a0: 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66 20 74 68  command.  ^If th
66b0: 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 68  e .transaction h
66c0: 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
66d0: 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f  rolled back auto
66e0: 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20 74 68 65  matically.by the
66f0: 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65 2c   error response,
6700: 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41   then the ROLLBA
6710: 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20  CK command will 
6720: 66 61 69 6c 20 77 69 74 68 20 61 6e 0a 65 72 72  fail with an.err
6730: 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61 72 6d 20  or, but no harm 
6740: 69 73 20 63 61 75 73 65 64 20 62 79 20 74 68 69  is caused by thi
6750: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75 72  s.</p>..<p>Futur
6760: 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  e versions of SQ
6770: 4c 69 74 65 20 6d 61 79 20 65 78 74 65 6e 64 20  Lite may extend 
6780: 74 68 65 20 6c 69 73 74 20 6f 66 20 65 72 72 6f  the list of erro
6790: 72 73 20 77 68 69 63 68 0a 6d 69 67 68 74 20 63  rs which.might c
67a0: 61 75 73 65 20 61 75 74 6f 6d 61 74 69 63 20 74  ause automatic t
67b0: 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62  ransaction rollb
67c0: 61 63 6b 2e 20 20 46 75 74 75 72 65 20 76 65 72  ack.  Future ver
67d0: 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20  sions of.SQLite 
67e0: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 68 65  might change the
67f0: 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65 2e   error response.
6800: 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c    In particular,
6810: 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65 20 74   we may.choose t
6820: 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65 20 69  o simplify the i
6830: 6e 74 65 72 66 61 63 65 20 69 6e 20 66 75 74 75  nterface in futu
6840: 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  re versions of S
6850: 51 4c 69 74 65 20 62 79 0a 63 61 75 73 69 6e 67  QLite by.causing
6860: 20 74 68 65 20 65 72 72 6f 72 73 20 61 62 6f 76   the errors abov
6870: 65 20 74 6f 20 66 6f 72 63 65 20 61 6e 20 75 6e  e to force an un
6880: 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f 6c 6c  conditional roll
6890: 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  back.</p>..<tcl>
68a0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
68b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68f0: 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56 45 50 4f  .Section {SAVEPO
6900: 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20 7b  INT} savepoint {
6910: 53 41 56 45 50 4f 49 4e 54 20 52 45 4c 45 41 53  SAVEPOINT RELEAS
6920: 45 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  E}..RecursiveBub
6930: 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65 70  bleDiagram savep
6940: 6f 69 6e 74 2d 73 74 6d 74 0a 52 65 63 75 72 73  oint-stmt.Recurs
6950: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
6960: 20 72 65 6c 65 61 73 65 2d 73 74 6d 74 0a 52 65   release-stmt.Re
6970: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
6980: 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73 74  gram rollback-st
6990: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e  mt.</tcl>..<p> ^
69a0: 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 61  SAVEPOINTs are a
69b0: 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65 61 74   method of creat
69c0: 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ing transactions
69d0: 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42 45  , similar to.[BE
69e0: 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49 54  GIN] and [COMMIT
69f0: 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ], except that t
6a00: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61 6e 64  he SAVEPOINT and
6a10: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
6a20: 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e 64 20  s.are named and 
6a30: 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e 3c 2f  may be nested.</
6a40: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41 56  p>..<p> ^The SAV
6a50: 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 73  EPOINT command s
6a60: 74 61 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e  tarts a new tran
6a70: 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61 20 6e  saction with a n
6a80: 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73 61  ame..^The transa
6a90: 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65 64  ction names need
6aa0: 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65 2e 0a   not be unique..
6ab0: 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20 63 61  ^(A SAVEPOINT ca
6ac0: 6e 20 62 65 20 73 74 61 72 74 65 64 20 65 69 74  n be started eit
6ad0: 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20 6f 75  her within or ou
6ae0: 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45 47 49  tside of.a [BEGI
6af0: 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e  N]...[COMMIT].)^
6b00: 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56 45 50    ^(When a SAVEP
6b10: 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75 74 65  OINT is the oute
6b20: 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74  r-most savepoint
6b30: 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74 20 77  .and it is not w
6b40: 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d 2e  ithin a [BEGIN].
6b50: 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e 20  ..[COMMIT] then 
6b60: 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20  the behavior is 
6b70: 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45 47 49  the.same as BEGI
6b80: 4e 20 44 45 46 45 52 52 45 44 20 54 52 41 4e 53  N DEFERRED TRANS
6b90: 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c  ACTION.)^</p>..<
6ba0: 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20  p>^The ROLLBACK 
6bb0: 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65 72  TO command rever
6bc0: 74 73 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  ts the state of 
6bd0: 74 68 65 20 64 61 74 61 62 61 73 65 20 62 61 63  the database bac
6be0: 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77 61 73  k to what.it was
6bf0: 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20   just after the 
6c00: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 53 41  corresponding SA
6c10: 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65 20  VEPOINT.  ^Note 
6c20: 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68 61 74  that unlike that
6c30: 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b  .plain [ROLLBACK
6c40: 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68 6f  ] command (witho
6c50: 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77 6f 72  ut the TO keywor
6c60: 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  d) the ROLLBACK 
6c70: 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20  TO command.does 
6c80: 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65 20 74  not cancel the t
6c90: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49 6e  ransaction.  ^In
6ca0: 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65 6c 6c  stead of cancell
6cb0: 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61 63 74  ing the transact
6cc0: 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41 43  ion,.the ROLLBAC
6cd0: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 73  K TO command res
6ce0: 74 61 72 74 73 20 74 68 65 20 74 72 61 6e 73 61  tarts the transa
6cf0: 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74 20 74  ction again at t
6d00: 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41  he beginning..^A
6d10: 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 53  ll intervening S
6d20: 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 63 61  AVEPOINTs are ca
6d30: 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76 65 72 2e  nceled, however.
6d40: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45  </p>..<p>^The RE
6d50: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69 73  LEASE command is
6d60: 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54 5d   like a [COMMIT]
6d70: 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54   for a SAVEPOINT
6d80: 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63  ..^The RELEASE c
6d90: 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61 6c  ommand causes al
6da0: 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63  l savepoints bac
6db0: 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69  k to and includi
6dc0: 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72 65 63  ng the .most rec
6dd0: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 77 69  ent savepoint wi
6de0: 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61  th a matching na
6df0: 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64  me to be removed
6e00: 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e 73   from the .trans
6e10: 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20 5e  action stack.  ^
6e20: 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66 20 61  The RELEASE of a
6e30: 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74  n inner transact
6e40: 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61 75  ion.does not cau
6e50: 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74  se any changes t
6e60: 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f 20  o be written to 
6e70: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
6e80: 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72 65 6d  e; it merely.rem
6e90: 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74 73 20  oves savepoints 
6ea0: 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 61 63  from the transac
6eb0: 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63 68 20  tion stack such 
6ec0: 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c 6f  that it is.no lo
6ed0: 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20 74 6f  nger possible to
6ee0: 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68 6f   ROLLBACK TO tho
6ef0: 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a 5e  se savepoints..^
6f00: 49 66 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d  If a RELEASE com
6f10: 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68  mand releases th
6f20: 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65  e outermost save
6f30: 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20 74  point, so.that t
6f40: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
6f50: 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d 70  tack becomes emp
6f60: 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41 53 45  ty, then RELEASE
6f70: 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20   is the same.as 
6f80: 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b  [COMMIT]..^The [
6f90: 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20  COMMIT] command 
6fa0: 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f 20 72  may be used to r
6fb0: 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76 65 70  elease all savep
6fc0: 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69 74  oints and.commit
6fd0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
6fe0: 20 65 76 65 6e 20 69 66 20 74 68 65 20 74 72 61   even if the tra
6ff0: 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f 72 69  nsaction was ori
7000: 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65 64 0a  ginally started.
7010: 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54 20 63  by a SAVEPOINT c
7020: 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64 20 6f  ommand instead o
7030: 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d  f a [BEGIN] comm
7040: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  and.</p>..<p>^If
7050: 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e   the savepoint-n
7060: 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41 53 45  ame in a RELEASE
7070: 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f   command does no
7080: 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61 76 65  t match any.save
7090: 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20  point currently 
70a0: 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  in the transacti
70b0: 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 6e  on stack, then n
70c0: 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65  o savepoints are
70d0: 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65 20 64  .released, the d
70e0: 61 74 61 62 61 73 65 20 69 73 20 75 6e 63 68 61  atabase is uncha
70f0: 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20 52 45  nged, and the RE
7100: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65  LEASE command re
7110: 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e 3c  turns.an error.<
7120: 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68  /p>..<p>^Note th
7130: 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e  at an inner tran
7140: 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 63 6f  saction might co
7150: 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68 65 20  mmit (using the 
7160: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 29  RELEASE command)
7170: 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65 72 20  .but then later 
7180: 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20 75 6e  have its work un
7190: 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42 41  done by a ROLLBA
71a0: 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74  CK in an outer t
71b0: 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20 70  ransaction..^A p
71c0: 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20  ower failure or 
71d0: 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20 6f 72  program crash or
71e0: 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c 20 63   OS crash will c
71f0: 61 75 73 65 20 74 68 65 20 6f 75 74 65 72 2d 6d  ause the outer-m
7200: 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  ost.transaction 
7210: 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64  to rollback, und
7220: 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65 73  oing all changes
7230: 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72   that have occur
7240: 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61 74 20  red within.that 
7250: 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f  outer transactio
7260: 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65 73 20  n, even changes 
7270: 74 68 61 74 20 68 61 76 65 20 73 75 70 70 6f 73  that have suppos
7280: 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d 69  edly been "commi
7290: 74 74 65 64 22 0a 62 79 20 74 68 65 20 52 45 4c  tted".by the REL
72a0: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e  EASE command.  ^
72b0: 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 61  Content is not a
72c0: 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74 65  ctually committe
72d0: 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a 75  d on the disk .u
72e0: 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72 6d 6f  ntil the outermo
72f0: 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63  st transaction c
7300: 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ommits.</p>..<p>
7310: 54 68 65 72 65 20 61 72 65 20 73 65 76 65 72 61  There are severa
7320: 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e 6b 69  l ways of thinki
7330: 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52 45 4c  ng about the REL
7340: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70  EASE command:</p
7350: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a  >..<ul>.<li><p>.
7360: 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69 65 77  Some people view
7370: 20 52 45 4c 45 41 53 45 20 61 73 20 74 68 65 20   RELEASE as the 
7380: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 43 4f  equivalent of CO
7390: 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56 45 50  MMIT for a SAVEP
73a0: 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20 61 6e  OINT..This is an
73b0: 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f 69 6e   acceptable poin
73c0: 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c 6f 6e  t of view as lon
73d0: 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62 65  g as one remembe
73e0: 72 73 20 74 68 61 74 20 74 68 65 0a 63 68 61 6e  rs that the.chan
73f0: 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20 62 79  ges committed by
7400: 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61   an inner transa
7410: 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74 65  ction might late
7420: 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79 20 61  r be undone by a
7430: 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e 20  .rollback in an 
7440: 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f  outer transactio
7450: 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69  n.</p></li>..<li
7460: 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69 65  ><p>.Another vie
7470: 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69 73 20  w of RELEASE is 
7480: 74 68 61 74 20 69 74 20 6d 65 72 67 65 73 20 61  that it merges a
7490: 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69   named transacti
74a0: 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61 72 65  on into its.pare
74b0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  nt transaction, 
74c0: 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65  so that the name
74d0: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  d transaction an
74e0: 64 20 69 74 73 20 70 61 72 65 6e 74 20 62 65 63  d its parent bec
74f0: 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74 72 61  ome.the same tra
7500: 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74 65 72  nsaction.  After
7510: 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20 6e 61   RELEASE, the na
7520: 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  med transaction 
7530: 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 0a 77  and its parent.w
7540: 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72 6f  ill commit or ro
7550: 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65 72 2c  llback together,
7560: 20 77 68 61 74 65 76 65 72 20 74 68 65 69 72 20   whatever their 
7570: 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f 70  fate may be..</p
7580: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
7590: 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74 68 69  One can also thi
75a0: 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 73  nk of savepoints
75b0: 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20 74   as."marks" in t
75c0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74  he transaction t
75d0: 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68 69  imeline.  In thi
75e0: 73 20 76 69 65 77 2c 20 74 68 65 20 53 41 56 45  s view, the SAVE
75f0: 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63 72  POINT command.cr
7600: 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61 72 6b  eates a new mark
7610: 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54  , the ROLLBACK T
7620: 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e 64  O command rewind
7630: 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 62  s the timeline b
7640: 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20 6a  ack.to a point j
7650: 75 73 74 20 61 66 74 65 72 20 74 68 65 20 6e 61  ust after the na
7660: 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74 68  med mark, and th
7670: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
7680: 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73 20 66  d.erases marks f
7690: 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e 65  rom the timeline
76a0: 20 77 69 74 68 6f 75 74 20 61 63 74 75 61 6c 6c   without actuall
76b0: 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68 61  y making any.cha
76c0: 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61  nges to the data
76d0: 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a  base..</p></li>.
76e0: 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61  </ul>....<h3>Tra
76f0: 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e 67  nsaction Nesting
7700: 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e   Rules</h3>..<p>
7710: 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e 73 61  ^The last transa
7720: 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 77 69  ction started wi
7730: 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73 74 0a  ll be the first.
7740: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d  transaction comm
7750: 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64 20  itted or rolled 
7760: 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  back.</p>..<p>^T
7770: 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61  he [BEGIN] comma
7780: 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66  nd only works if
7790: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
77a0: 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74 79 2c   stack is empty,
77b0: 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f 72   or.in other wor
77c0: 64 73 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ds if there are 
77d0: 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61 6e 73  no pending trans
77e0: 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74 68  actions.  ^If th
77f0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73 74  e transaction.st
7800: 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ack is not empty
7810: 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47 49 4e   when the [BEGIN
7820: 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76  ] command is inv
7830: 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63  oked, then the c
7840: 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69 74  ommand.fails wit
7850: 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a  h an error.</p>.
7860: 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49 54  .<p>^The [COMMIT
7870: 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74  ] command commit
7880: 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e  s all outstandin
7890: 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61  g transactions a
78a0: 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20 74 72  nd leaves.the tr
78b0: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
78c0: 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  empty.</p>..<p>^
78d0: 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  The RELEASE comm
78e0: 61 6e 64 20 73 74 61 72 74 73 20 77 69 74 68 20  and starts with 
78f0: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
7900: 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65 0a  addition to the.
7910: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
7920: 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73 20 73  k and releases s
7930: 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 77 61  avepoints backwa
7940: 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e 74  rds .in time unt
7950: 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73 20 61  il it releases a
7960: 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20   savepoint with 
7970: 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70  a matching savep
7980: 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f  oint-name..^Prio
7990: 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20 65 76  r savepoints, ev
79a0: 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69  en savepoints wi
79b0: 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65  th matching save
79c0: 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72 65  point-names, are
79d0: 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66 20  .unchanged..^If 
79e0: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
79f0: 61 6e 64 20 63 61 75 73 65 73 20 74 68 65 0a 74  and causes the.t
7a00: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
7a10: 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74 79   to become empty
7a20: 20 28 69 66 20 74 68 65 20 52 45 4c 45 41 53 45   (if the RELEASE
7a30: 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65   command release
7a40: 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74 20  s the.outermost 
7a50: 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f 6d  transaction from
7a60: 20 74 68 65 20 73 74 61 63 6b 29 20 74 68 65 6e   the stack) then
7a70: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
7a80: 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c   commits.</p>..<
7a90: 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43 4b  p>^The [ROLLBACK
7aa0: 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75  ] command withou
7ab0: 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f  t a TO clause ro
7ac0: 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20 74 72  lls backs all tr
7ad0: 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20 6c  ansactions.and l
7ae0: 65 61 76 65 73 20 74 68 65 20 74 72 61 6e 73 61  eaves the transa
7af0: 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74  ction stack empt
7b00: 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  y.</p>..<p>^The 
7b10: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
7b20: 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61 75 73   with a TO claus
7b30: 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72 61  e rolls back tra
7b40: 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67 0a  nsactions going.
7b50: 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74 69 6d  backwards in tim
7b60: 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20 6d 6f  e back to the mo
7b70: 73 74 20 72 65 63 65 6e 74 20 53 41 56 45 50 4f  st recent SAVEPO
7b80: 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74 63 68  INT with a match
7b90: 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 53  ing name..^The S
7ba0: 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20 74 68  AVEPOINT with th
7bb0: 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20  e matching name 
7bc0: 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20 74  remains on the t
7bd0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
7be0: 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61 62 61  ,.but all databa
7bf0: 73 65 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  se changes that 
7c00: 6f 63 63 75 72 72 65 64 20 61 66 74 65 72 20 74  occurred after t
7c10: 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20 77 61  hat SAVEPOINT wa
7c20: 73 20 63 72 65 61 74 65 64 0a 61 72 65 20 72 6f  s created.are ro
7c30: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20  lled back.  ^If 
7c40: 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61  the savepoint-na
7c50: 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43 4b  me in a ROLLBACK
7c60: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73   TO command does
7c70: 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20 53   not.match any S
7c80: 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65 20  AVEPOINT on the 
7c90: 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68 65 20  stack, then the 
7ca0: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
7cb0: 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 0a 65   fails with an.e
7cc0: 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65 73 20  rror and leaves 
7cd0: 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
7ce0: 20 64 61 74 61 62 61 73 65 20 75 6e 63 68 61 6e   database unchan
7cf0: 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ged.</p>..<tcl>.
7d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7d30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
7d50: 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20  Section comment 
7d60: 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74  comment {comment
7d70: 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 52 65 63   *comments}..Rec
7d80: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
7d90: 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e 74  ram comment-synt
7da0: 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 43  ax.</tcl>..<p>^C
7db0: 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74 20  omments are not 
7dc0: 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62 75  SQL commands, bu
7dd0: 74 20 63 61 6e 20 6f 63 63 75 72 20 77 69 74 68  t can occur with
7de0: 69 6e 20 74 68 65 20 74 65 78 74 20 6f 66 0a 53  in the text of.S
7df0: 51 4c 20 71 75 65 72 69 65 73 20 70 61 73 73 65  QL queries passe
7e00: 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 70 72  d to [sqlite3_pr
7e10: 65 70 61 72 65 5f 76 32 28 29 5d 20 61 6e 64 20  epare_v2()] and 
7e20: 72 65 6c 61 74 65 64 20 69 6e 74 65 72 66 61 63  related interfac
7e30: 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61 72  es..^Comments ar
7e40: 65 20 74 72 65 61 74 65 64 20 61 73 20 77 68 69  e treated as whi
7e50: 74 65 73 70 61 63 65 20 62 79 20 74 68 65 20 70  tespace by the p
7e60: 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74 73  arser..^Comments
7e70: 20 63 61 6e 20 62 65 67 69 6e 20 61 6e 79 77 68   can begin anywh
7e80: 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20 0a  ere whitespace .
7e90: 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69 6e  can be found, in
7ea0: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
7eb0: 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20  xpressions that 
7ec0: 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69  span multiple li
7ed0: 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53  nes..</p>..<p>^S
7ee0: 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69  QL comments begi
7ef0: 6e 20 77 69 74 68 20 74 77 6f 20 63 6f 6e 73 65  n with two conse
7f00: 63 75 74 69 76 65 20 22 2d 22 20 63 68 61 72 61  cutive "-" chara
7f10: 63 74 65 72 73 20 28 41 53 43 49 49 20 30 78 32  cters (ASCII 0x2
7f20: 64 29 0a 61 6e 64 20 65 78 74 65 6e 64 20 75 70  d).and extend up
7f30: 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e   to and includin
7f40: 67 20 74 68 65 20 6e 65 78 74 20 6e 65 77 6c 69  g the next newli
7f50: 6e 65 20 63 68 61 72 61 63 74 65 72 20 28 41 53  ne character (AS
7f60: 43 49 49 20 30 78 30 61 29 0a 6f 72 20 75 6e 74  CII 0x0a).or unt
7f70: 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e  il the end of in
7f80: 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20 63  put, whichever c
7f90: 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f 70 3e 0a  omes first.</p>.
7fa0: 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20 63 6f 6d  .<p>^C-style com
7fb0: 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69 74 68  ments begin.with
7fc0: 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e 64   "/*" and extend
7fd0: 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75   up to and inclu
7fe0: 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 22 2a  ding the next "*
7ff0: 2f 22 20 63 68 61 72 61 63 74 65 72 20 70 61 69  /" character pai
8000: 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65  r.or until the e
8010: 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69  nd of input, whi
8020: 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72  chever comes fir
8030: 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20 63 6f  st.  ^C-style co
8040: 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e 20  mments.can span 
8050: 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e 20  multiple lines. 
8060: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e  </p>..<p>^Commen
8070: 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 61 6e  ts can appear an
8080: 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61 63  ywhere whitespac
8090: 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e 63  e can occur,.inc
80a0: 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78  luding inside ex
80b0: 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69 6e  pressions and in
80c0: 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 6f   the middle of o
80d0: 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d 65  ther SQL stateme
80e0: 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 64  nts..^Comments d
80f0: 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70 3e  o not nest..</p>
8100: 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
8110: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8150: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
8160: 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20 63  {CREATE INDEX} c
8170: 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52 45  reateindex {{CRE
8180: 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 52 65 63  ATE INDEX}}..Rec
8190: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
81a0: 72 61 6d 20 63 72 65 61 74 65 2d 69 6e 64 65 78  ram create-index
81b0: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
81c0: 3e 5e 54 68 65 20 43 52 45 41 54 45 20 49 4e 44  >^The CREATE IND
81d0: 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69  EX command consi
81e0: 73 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77 6f  sts of the keywo
81f0: 72 64 73 20 22 43 52 45 41 54 45 20 49 4e 44 45  rds "CREATE INDE
8200: 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74  X" followed.by t
8210: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e  he name of the n
8220: 65 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b 65  ew index, the ke
8230: 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65 20  yword "ON", the 
8240: 6e 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69 6f  name of a previo
8250: 75 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61 62  usly.created tab
8260: 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65  le that is to be
8270: 20 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61 20   indexed, and a 
8280: 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69  parenthesized li
8290: 73 74 20 6f 66 20 74 61 62 6c 65 20 63 6f 6c 75  st of table colu
82a0: 6d 6e 0a 6e 61 6d 65 73 20 61 6e 64 2f 6f 72 20  mn.names and/or 
82b0: 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
82c0: 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 74 68   are used for th
82d0: 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 49 66 20  e index key..If 
82e0: 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 57 48 45  the optional WHE
82f0: 52 45 20 63 6c 61 75 73 65 20 69 73 20 69 6e 63  RE clause is inc
8300: 6c 75 64 65 64 2c 20 74 68 65 6e 20 74 68 65 20  luded, then the 
8310: 69 6e 64 65 78 20 69 73 20 61 20 22 5b 70 61 72  index is a "[par
8320: 74 69 61 6c 20 69 6e 64 65 78 5d 22 2e 0a 3c 2f  tial index]"..</
8330: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
8340: 6d 65 6e 74 20 7b 64 65 73 63 69 64 78 7d 20 7b  ment {descidx} {
8350: 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 69 63  descending indic
8360: 65 73 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67 20  es} {descending 
8370: 69 6e 64 65 78 7d 20 5c 0a 20 20 20 20 7b 64 65  index} \.    {de
8380: 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 65 73  scending indexes
8390: 7d 20 7b 44 45 53 43 7d 3c 2f 74 63 6c 3e 0a 3c  } {DESC}</tcl>.<
83a0: 70 3e 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6e  p>^Each column n
83b0: 61 6d 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f  ame or expressio
83c0: 6e 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65  n can be followe
83d0: 64 20 62 79 20 6f 6e 65 0a 6f 66 20 74 68 65 20  d by one.of the 
83e0: 22 41 53 43 22 20 6f 72 20 22 44 45 53 43 22 20  "ASC" or "DESC" 
83f0: 6b 65 79 77 6f 72 64 73 20 74 6f 20 69 6e 64 69  keywords to indi
8400: 63 61 74 65 20 73 6f 72 74 20 6f 72 64 65 72 2e  cate sort order.
8410: 0a 5e 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72  .^The sort order
8420: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
8430: 62 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65 6e  be ignored depen
8440: 64 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74 61  ding.on the data
8450: 62 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61 74  base file format
8460: 2c 20 61 6e 64 20 69 6e 20 70 61 72 74 69 63 75  , and in particu
8470: 6c 61 72 20 74 68 65 20 5b 73 63 68 65 6d 61 20  lar the [schema 
8480: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 2e 0a  format number]..
8490: 5e 54 68 65 20 22 6c 65 67 61 63 79 22 20 73 63  ^The "legacy" sc
84a0: 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 31 29 20  hema format (1) 
84b0: 69 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f  ignores index.so
84c0: 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20  rt order.  ^The 
84d0: 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78  descending index
84e0: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28   schema format (
84f0: 34 29 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73  4) takes index s
8500: 6f 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61  ort order.into a
8510: 63 63 6f 75 6e 74 2e 20 20 4f 6e 6c 79 20 76 65  ccount.  Only ve
8520: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
8530: 20 33 2e 33 2e 30 20 28 5b 64 61 74 65 6f 66 3a   3.3.0 ([dateof:
8540: 33 2e 33 2e 30 5d 29 0a 61 6e 64 20 6c 61 74 65  3.3.0]).and late
8550: 72 20 61 72 65 20 61 62 6c 65 20 74 6f 20 75 6e  r are able to un
8560: 64 65 72 73 74 61 6e 64 0a 74 68 65 20 64 65 73  derstand.the des
8570: 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 66 6f  cending index fo
8580: 72 6d 61 74 2e 20 46 6f 72 20 63 6f 6d 70 61 74  rmat. For compat
8590: 69 62 69 6c 69 74 79 2c 20 76 65 72 73 69 6f 6e  ibility, version
85a0: 20 6f 66 20 53 51 4c 69 74 65 20 62 65 74 77 65   of SQLite betwe
85b0: 65 6e 20 33 2e 33 2e 30 0a 61 6e 64 20 33 2e 37  en 3.3.0.and 3.7
85c0: 2e 39 20 75 73 65 20 74 68 65 20 6c 65 67 61 63  .9 use the legac
85d0: 79 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  y schema format 
85e0: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68 65  by default.  The
85f0: 20 6e 65 77 65 72 20 73 63 68 65 6d 61 20 66 6f   newer schema fo
8600: 72 6d 61 74 20 69 73 0a 75 73 65 64 20 62 79 20  rmat is.used by 
8610: 64 65 66 61 75 6c 74 20 69 6e 20 76 65 72 73 69  default in versi
8620: 6f 6e 20 33 2e 37 2e 31 30 20 28 5b 64 61 74 65  on 3.7.10 ([date
8630: 6f 66 3a 33 2e 37 2e 31 30 5d 29 20 61 6e 64 20  of:3.7.10]) and 
8640: 6c 61 74 65 72 2e 0a 5e 54 68 65 20 5b 6c 65 67  later..^The [leg
8650: 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20  acy_file_format 
8660: 70 72 61 67 6d 61 5d 20 63 61 6e 20 62 65 20 75  pragma] can be u
8670: 73 65 64 20 74 6f 20 63 68 61 6e 67 65 20 73 65  sed to change se
8680: 74 20 74 68 65 20 73 70 65 63 69 66 69 63 0a 62  t the specific.b
8690: 65 68 61 76 69 6f 72 20 66 6f 72 20 61 6e 79 20  ehavior for any 
86a0: 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74  version of SQLit
86b0: 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  e.</p>..<tcl>hd_
86c0: 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 69 64 78  fragment collidx
86d0: 20 7b 43 4f 4c 4c 41 54 45 7d 3c 2f 74 63 6c 3e   {COLLATE}</tcl>
86e0: 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45  .<p>^The COLLATE
86f0: 20 63 6c 61 75 73 65 20 6f 70 74 69 6f 6e 61 6c   clause optional
8700: 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63  ly following eac
8710: 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 6f 72  h column name.or
8720: 20 65 78 70 72 65 73 73 69 6f 6e 20 64 65 66 69   expression defi
8730: 6e 65 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67 20  nes a.collating 
8740: 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 66 6f  sequence used fo
8750: 72 20 74 65 78 74 20 65 6e 74 72 69 65 73 20 69  r text entries i
8760: 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e  n that column..^
8770: 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  The default coll
8780: 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20 69  ating.sequence i
8790: 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  s the collating 
87a0: 73 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65 64  sequence defined
87b0: 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e   for that column
87c0: 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20   in the.[CREATE 
87d0: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
87e0: 2e 20 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f 6c  .  ^Or if no col
87f0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
8800: 69 73 20 6f 74 68 65 72 77 69 73 65 20 64 65 66  is otherwise def
8810: 69 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d  ined,.the built-
8820: 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74  in BINARY collat
8830: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
8840: 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  used.</p>..<tcl>
8850: 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 64 65  hd_fragment inde
8860: 78 65 78 70 72 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  xexpr</tcl>.<p>^
8870: 45 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61  Expressions in a
8880: 6e 20 69 6e 64 65 78 20 6d 61 79 20 6e 6f 74 20  n index may not 
8890: 72 65 66 65 72 65 6e 63 65 20 6f 74 68 65 72 20  reference other 
88a0: 74 61 62 6c 65 73 0a 61 6e 64 20 6d 61 79 20 6e  tables.and may n
88b0: 6f 74 20 75 73 65 20 73 75 62 71 75 65 72 69 65  ot use subquerie
88c0: 73 20 6e 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  s nor functions 
88d0: 77 68 6f 73 65 20 72 65 73 75 6c 74 20 6d 69 67  whose result mig
88e0: 68 74 0a 63 68 61 6e 67 65 20 28 65 78 3a 20 5b  ht.change (ex: [
88f0: 72 61 6e 64 6f 6d 28 29 5d 20 6f 72 20 5b 73 71  random()] or [sq
8900: 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 5d 29  lite_version()])
8910: 2e 0a 5e 45 78 70 72 65 73 73 69 6f 6e 73 20 69  ..^Expressions i
8920: 6e 20 61 6e 20 69 6e 64 65 78 20 6d 61 79 20 6f  n an index may o
8930: 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c  nly refer to col
8940: 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
8950: 65 0a 74 68 61 74 20 69 73 20 62 65 69 6e 67 20  e.that is being 
8960: 69 6e 64 65 78 65 64 2e 0a 49 6e 64 65 78 65 73  indexed..Indexes
8970: 20 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 77   on expression w
8980: 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 77 69 74  ill not work wit
8990: 68 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  h versions of SQ
89a0: 4c 69 74 65 20 70 72 69 6f 72 0a 74 6f 20 5b 76  Lite prior.to [v
89b0: 65 72 73 69 6f 6e 20 33 2e 39 2e 30 5d 20 28 5b  ersion 3.9.0] ([
89c0: 64 61 74 65 6f 66 3a 33 2e 39 2e 30 5d 29 2e 0a  dateof:3.9.0])..
89d0: 53 65 65 20 74 68 65 20 5b 49 6e 64 65 78 65 73  See the [Indexes
89e0: 20 4f 6e 20 45 78 70 72 65 73 73 69 6f 6e 73 5d   On Expressions]
89f0: 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61 64   document for ad
8a00: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
8a10: 74 69 6f 6e 0a 61 62 6f 75 74 20 75 73 69 6e 67  tion.about using
8a20: 20 67 65 6e 65 72 61 6c 20 65 78 70 72 65 73 73   general express
8a30: 69 6f 6e 73 20 69 6e 20 43 52 45 41 54 45 20 49  ions in CREATE I
8a40: 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 73 2e  NDEX statements.
8a50: 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e  ..<p>There are n
8a60: 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69  o arbitrary limi
8a70: 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72  ts on the number
8a80: 20 6f 66 20 69 6e 64 69 63 65 73 20 74 68 61 74   of indices that
8a90: 20 63 61 6e 20 62 65 0a 61 74 74 61 63 68 65 64   can be.attached
8aa0: 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62   to a single tab
8ab0: 6c 65 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62 65  le.  ^(The numbe
8ac0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
8ad0: 61 6e 20 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d  an index is .lim
8ae0: 69 74 65 64 20 74 6f 20 74 68 65 20 76 61 6c 75  ited to the valu
8af0: 65 20 73 65 74 20 62 79 0a 5b 73 71 6c 69 74 65  e set by.[sqlite
8b00: 33 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54 45  3_limit]([SQLITE
8b10: 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e  _LIMIT_COLUMN],.
8b20: 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ..).)^</p>..<tcl
8b30: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69  >hd_fragment uni
8b40: 71 75 65 69 64 78 20 7b 75 6e 69 71 75 65 20 69  queidx {unique i
8b50: 6e 64 65 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  ndex}</tcl>.<p>^
8b60: 49 66 20 74 68 65 20 55 4e 49 51 55 45 20 6b 65  If the UNIQUE ke
8b70: 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 65  yword appears be
8b80: 74 77 65 65 6e 20 43 52 45 41 54 45 20 61 6e 64  tween CREATE and
8b90: 20 49 4e 44 45 58 20 74 68 65 6e 20 64 75 70 6c   INDEX then dupl
8ba0: 69 63 61 74 65 0a 69 6e 64 65 78 20 65 6e 74 72  icate.index entr
8bb0: 69 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f  ies are not allo
8bc0: 77 65 64 2e 20 20 5e 41 6e 79 20 61 74 74 65 6d  wed.  ^Any attem
8bd0: 70 74 20 74 6f 20 69 6e 73 65 72 74 20 61 20 64  pt to insert a d
8be0: 75 70 6c 69 63 61 74 65 20 65 6e 74 72 79 0a 77  uplicate entry.w
8bf0: 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  ill result in an
8c00: 20 65 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74 68   error.  ^For th
8c10: 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 75 6e  e purposes of un
8c20: 69 71 75 65 20 69 6e 64 69 63 65 73 2c 20 61 6c  ique indices, al
8c30: 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72  l NULL values.ar
8c40: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 66  e considered dif
8c50: 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c 20  ferent from all 
8c60: 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65  other NULL value
8c70: 73 20 61 6e 64 20 61 72 65 20 74 68 75 73 20 75  s and are thus u
8c80: 6e 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20 6f  nique..This is o
8c90: 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70 6f  ne of the two po
8ca0: 73 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65 74  ssible interpret
8cb0: 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53 51  ations of the SQ
8cc0: 4c 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28 74  L-92 standard.(t
8cd0: 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20 74  he language in t
8ce0: 68 65 20 73 74 61 6e 64 61 72 64 20 69 73 20 61  he standard is a
8cf0: 6d 62 69 67 75 6f 75 73 29 20 61 6e 64 20 69 73  mbiguous) and is
8d00: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 61 74   the interpretat
8d10: 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ion.followed by 
8d20: 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79 53 51  PostgreSQL, MySQ
8d30: 4c 2c 20 46 69 72 65 62 69 72 64 2c 20 61 6e 64  L, Firebird, and
8d40: 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72 6d   Oracle.  Inform
8d50: 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66 74  ix and.Microsoft
8d60: 20 53 51 4c 20 53 65 72 76 65 72 20 66 6f 6c 6c   SQL Server foll
8d70: 6f 77 20 74 68 65 20 6f 74 68 65 72 20 69 6e 74  ow the other int
8d80: 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
8d90: 68 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e  he standard.</p>
8da0: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74  ..<p>^If the opt
8db0: 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49  ional IF NOT EXI
8dc0: 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72  STS clause is pr
8dd0: 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65  esent and anothe
8de0: 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74 68 65  r index.with the
8df0: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61   same name alrea
8e00: 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20  dy exists, then 
8e10: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63  this command bec
8e20: 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70  omes a no-op.</p
8e30: 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20 61  >..<p>^Indexes a
8e40: 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68 20  re removed with 
8e50: 74 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d  the [DROP INDEX]
8e60: 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a   command.</p>...
8e70: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
8e80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8e90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8ea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8eb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8ec0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52  ####.Section {CR
8ed0: 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72 65  EATE TABLE} {cre
8ee0: 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45 41  atetable} {{CREA
8ef0: 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75  TE TABLE}}..Recu
8f00: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
8f10: 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d  am create-table-
8f20: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
8f30: 54 68 65 20 22 43 52 45 41 54 45 20 54 41 42 4c  The "CREATE TABL
8f40: 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73  E" command is us
8f50: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  ed to create a n
8f60: 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e 20 53  ew table in an S
8f70: 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73 65 2e  QLite .database.
8f80: 20 41 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   A CREATE TABLE 
8f90: 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66 69 65  command specifie
8fa0: 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  s the following 
8fb0: 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 74 68  attributes of th
8fc0: 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a 3c 75  e.new table:..<u
8fd0: 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68 65 20  l>.  <li><p>The 
8fe0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20  name of the new 
8ff0: 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  table...  <li><p
9000: 3e 20 54 68 65 20 64 61 74 61 62 61 73 65 20 69  > The database i
9010: 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65 77 20  n which the new 
9020: 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
9030: 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62 65 20  . Tables may be 
9040: 0a 20 20 20 20 20 20 63 72 65 61 74 65 64 20 69  .      created i
9050: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
9060: 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61  ase, the temp da
9070: 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20 61 6e  tabase, or in an
9080: 79 20 61 74 74 61 63 68 65 64 0a 20 20 20 20 20  y attached.     
9090: 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20 3c 6c   database...  <l
90a0: 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65 20 6f  i><p> The name o
90b0: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  f each column in
90c0: 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c   the table...  <
90d0: 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63 6c 61  li><p> The decla
90e0: 72 65 64 20 74 79 70 65 20 6f 66 20 65 61 63 68  red type of each
90f0: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74   column in the t
9100: 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  able...  <li><p>
9110: 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   A default value
9120: 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20 66   or expression f
9130: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
9140: 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20  n the table...  
9150: 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c  <li><p> A defaul
9160: 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
9170: 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69 74 68  ence to use with
9180: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a 20   each column... 
9190: 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e 61   <li><p> Optiona
91a0: 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59 20 4b  lly, a PRIMARY K
91b0: 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  EY for the table
91c0: 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20 63 6f  . Both single co
91d0: 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20 20 20  lumn and.       
91e0: 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c 74 69  composite (multi
91f0: 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72 69 6d  ple column) prim
9200: 61 72 79 20 6b 65 79 73 20 61 72 65 20 73 75 70  ary keys are sup
9210: 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e 3c  ported...  <li><
9220: 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51 4c 20  p> A set of SQL 
9230: 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20  constraints for 
9240: 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51 4c 69  each table. SQLi
9250: 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e 49 51  te supports UNIQ
9260: 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20 20 4e  UE, NOT.       N
9270: 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64 20 46  ULL, CHECK and F
9280: 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74  OREIGN KEY const
9290: 72 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e 3c  raints...  <li><
92a0: 70 3e 20 57 68 65 74 68 65 72 20 74 68 65 20 74  p> Whether the t
92b0: 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48 4f  able is a [WITHO
92c0: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e  UT ROWID] table.
92d0: 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72 79  .</ul>..<p>Every
92e0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
92f0: 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 73 70 65  atement must spe
9300: 63 69 66 79 20 61 20 6e 61 6d 65 20 66 6f 72 20  cify a name for 
9310: 74 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a 20  the new table.. 
9320: 20 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73 20 74   ^(Table names t
9330: 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22  hat begin with "
9340: 73 71 6c 69 74 65 5f 22 20 61 72 65 20 72 65 73  sqlite_" are res
9350: 65 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72 6e  erved for intern
9360: 61 6c 20 75 73 65 2e 20 49 74 0a 20 20 69 73 20  al use. It.  is 
9370: 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65  an error to atte
9380: 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61 20  mpt to create a 
9390: 74 61 62 6c 65 20 77 69 74 68 20 61 20 6e 61 6d  table with a nam
93a0: 65 20 74 68 61 74 20 73 74 61 72 74 73 20 77 69  e that starts wi
93b0: 74 68 0a 20 20 22 73 71 6c 69 74 65 5f 22 2e 29  th.  "sqlite_".)
93c0: 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 3c 79 79  ^..<p> ^If a <yy
93d0: 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
93e0: 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 73 70 65  </yyterm> is spe
93f0: 63 69 66 69 65 64 2c 20 69 74 20 6d 75 73 74 20  cified, it must 
9400: 62 65 20 65 69 74 68 65 72 20 22 6d 61 69 6e 22  be either "main"
9410: 2c 20 0a 20 20 22 74 65 6d 70 22 2c 20 6f 72 20  , .  "temp", or 
9420: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 5b  the name of an [
9430: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7c  ATTACH DATABASE|
9440: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
9450: 65 5d 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73  e]. ^In this cas
9460: 65 0a 20 20 74 68 65 20 6e 65 77 20 74 61 62 6c  e.  the new tabl
9470: 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  e is created in 
9480: 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61  the named databa
9490: 73 65 2e 20 5e 49 66 20 74 68 65 20 22 54 45 4d  se. ^If the "TEM
94a0: 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59  P" or "TEMPORARY
94b0: 22 0a 20 20 6b 65 79 77 6f 72 64 20 6f 63 63 75  ".  keyword occu
94c0: 72 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 22  rs between the "
94d0: 43 52 45 41 54 45 22 20 61 6e 64 20 22 54 41 42  CREATE" and "TAB
94e0: 4c 45 22 20 74 68 65 6e 20 74 68 65 20 6e 65 77  LE" then the new
94f0: 20 74 61 62 6c 65 20 69 73 0a 20 20 63 72 65 61   table is.  crea
9500: 74 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70 20  ted in the temp 
9510: 64 61 74 61 62 61 73 65 2e 20 5e 49 74 20 69 73  database. ^It is
9520: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70 65   an error to spe
9530: 63 69 66 79 20 62 6f 74 68 20 61 20 0a 20 20 3c  cify both a .  <
9540: 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61  yyterm>schema-na
9550: 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20  me</yyterm> and 
9560: 74 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50  the TEMP or TEMP
9570: 4f 52 41 52 59 20 6b 65 79 77 6f 72 64 2c 20 75  ORARY keyword, u
9580: 6e 6c 65 73 73 20 74 68 65 0a 20 20 3c 79 79 74  nless the.  <yyt
9590: 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  erm>schema-name<
95a0: 2f 79 79 74 65 72 6d 3e 20 69 73 20 22 74 65 6d  /yyterm> is "tem
95b0: 70 22 2e 20 0a 20 20 5e 49 66 20 6e 6f 20 73 63  p". .  ^If no sc
95c0: 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70 65  hema name is spe
95d0: 63 69 66 69 65 64 20 61 6e 64 20 74 68 65 0a 20  cified and the. 
95e0: 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69 73   TEMP keyword is
95f0: 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 74 68 65   not present the
9600: 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63  n the table is c
9610: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61  reated in the ma
9620: 69 6e 0a 20 20 64 61 74 61 62 61 73 65 2e 0a 0a  in.  database...
9630: 3c 70 3e 0a 20 20 5e 49 74 20 69 73 20 75 73 75  <p>.  ^It is usu
9640: 61 6c 6c 79 20 61 6e 20 65 72 72 6f 72 20 74 6f  ally an error to
9650: 20 61 74 74 65 6d 70 74 20 74 6f 20 63 72 65 61   attempt to crea
9660: 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
9670: 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 68 61  n a database tha
9680: 74 0a 20 20 61 6c 72 65 61 64 79 20 63 6f 6e 74  t.  already cont
9690: 61 69 6e 73 20 61 20 74 61 62 6c 65 2c 20 69 6e  ains a table, in
96a0: 64 65 78 20 6f 72 20 76 69 65 77 20 6f 66 20 74  dex or view of t
96b0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e 20 5e 48  he same name. ^H
96c0: 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 0a 20  owever, if the. 
96d0: 20 22 49 46 20 4e 4f 54 20 45 58 49 53 54 53 22   "IF NOT EXISTS"
96e0: 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
96f0: 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
9700: 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
9710: 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 0a 20   statement and. 
9720: 20 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77   a table or view
9730: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d   of the same nam
9740: 65 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  e already exists
9750: 2c 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  , the CREATE TAB
9760: 4c 45 20 63 6f 6d 6d 61 6e 64 0a 20 20 73 69 6d  LE command.  sim
9770: 70 6c 79 20 68 61 73 20 6e 6f 20 65 66 66 65 63  ply has no effec
9780: 74 20 28 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  t (and no error 
9790: 6d 65 73 73 61 67 65 20 69 73 20 72 65 74 75 72  message is retur
97a0: 6e 65 64 29 2e 20 5e 41 6e 20 65 72 72 6f 72 20  ned). ^An error 
97b0: 69 73 20 73 74 69 6c 6c 0a 20 20 72 65 74 75 72  is still.  retur
97c0: 6e 65 64 20 69 66 20 74 68 65 20 74 61 62 6c 65  ned if the table
97d0: 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74   cannot be creat
97e0: 65 64 20 62 65 63 61 75 73 65 20 6f 66 20 61 6e  ed because of an
97f0: 20 65 78 69 73 74 69 6e 67 20 69 6e 64 65 78 2c   existing index,
9800: 20 65 76 65 6e 20 0a 20 20 69 66 20 74 68 65 20   even .  if the 
9810: 22 49 46 20 4e 4f 54 20 45 58 49 53 54 53 22 20  "IF NOT EXISTS" 
9820: 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
9830: 69 65 64 2e 0a 0a 3c 70 3e 5e 49 74 20 69 73 20  ied...<p>^It is 
9840: 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 74 6f 20  not an error to 
9850: 63 72 65 61 74 65 20 61 20 74 61 62 6c 65 20 74  create a table t
9860: 68 61 74 20 68 61 73 20 74 68 65 20 73 61 6d 65  hat has the same
9870: 20 6e 61 6d 65 20 61 73 20 61 6e 20 0a 20 20 65   name as an .  e
9880: 78 69 73 74 69 6e 67 20 5b 43 52 45 41 54 45 20  xisting [CREATE 
9890: 54 52 49 47 47 45 52 7c 74 72 69 67 67 65 72 5d  TRIGGER|trigger]
98a0: 2e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 61 72  ...<p>^Tables ar
98b0: 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20  e removed using 
98c0: 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d  the [DROP TABLE]
98d0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 3c 2f 70   statement.  </p
98e0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
98f0: 65 6e 74 20 63 72 65 61 74 65 74 61 62 61 73 20  ent createtabas 
9900: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53  {CREATE TABLE AS
9910: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 52 45 41  }</tcl>.<h3>CREA
9920: 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53 20  TE TABLE ... AS 
9930: 53 45 4c 45 43 54 20 53 74 61 74 65 6d 65 6e 74  SELECT Statement
9940: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 22  s</h3>..<p>^(A "
9950: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
9960: 20 41 53 20 53 45 4c 45 43 54 22 20 73 74 61 74   AS SELECT" stat
9970: 65 6d 65 6e 74 20 63 72 65 61 74 65 73 20 61 6e  ement creates an
9980: 64 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64 61  d populates a da
9990: 74 61 62 61 73 65 0a 74 61 62 6c 65 20 62 61 73  tabase.table bas
99a0: 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74  ed on the result
99b0: 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  s of a SELECT st
99c0: 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65  atement.)^ ^(The
99d0: 20 74 61 62 6c 65 20 68 61 73 20 74 68 65 20 73   table has the s
99e0: 61 6d 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63 6f  ame.number of co
99f0: 6c 75 6d 6e 73 20 61 73 20 74 68 65 20 72 6f 77  lumns as the row
9a00: 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  s returned by th
9a10: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
9a20: 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66 0a  nt. The name of.
9a30: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 74  each column is t
9a40: 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e  he same as the n
9a50: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ame of the corre
9a60: 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 20  sponding column 
9a70: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 73 65  in the result.se
9a80: 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20  t of the SELECT 
9a90: 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54  statement.)^ ^(T
9aa0: 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65  he declared type
9ab0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
9ac0: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62 79  is determined.by
9ad0: 20 74 68 65 20 5b 65 78 70 72 65 73 73 69 6f 6e   the [expression
9ae0: 20 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68   affinity] of th
9af0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
9b00: 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
9b10: 65 20 72 65 73 75 6c 74 20 73 65 74 0a 6f 66 20  e result set.of 
9b20: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
9b30: 6d 65 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73  ment, as follows
9b40: 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  :.</p>..<center>
9b50: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e  <table border=1>
9b60: 0a 20 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72 65  .  <tr><th>Expre
9b70: 73 73 69 6f 6e 20 41 66 66 69 6e 69 74 79 20 20  ssion Affinity  
9b80: 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63 6c   <th>Column Decl
9b90: 61 72 65 64 20 54 79 70 65 0a 20 20 3c 74 72 3e  ared Type.  <tr>
9ba0: 3c 74 64 3e 54 45 58 54 20 20 20 20 20 20 20 20  <td>TEXT        
9bb0: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 54            <td>"T
9bc0: 45 58 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e  EXT".  <tr><td>N
9bd0: 55 4d 45 52 49 43 20 20 20 20 20 20 20 20 20 20  UMERIC          
9be0: 20 20 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a 20       <td>"NUM". 
9bf0: 20 3c 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45 52   <tr><td>INTEGER
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c                 <
9c10: 74 64 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e 3c  td>"INT".  <tr><
9c20: 74 64 3e 52 45 41 4c 20 20 20 20 20 20 20 20 20  td>REAL         
9c30: 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 52 45           <td>"RE
9c40: 41 4c 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 42 4c  AL".  <tr><td>BL
9c50: 4f 42 20 28 61 2e 6b 2e 61 20 22 4e 4f 4e 45 22  OB (a.k.a "NONE"
9c60: 29 20 20 20 3c 74 64 3e 22 22 20 28 65 6d 70 74  )   <td>"" (empt
9c70: 79 20 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62 6c  y string).</tabl
9c80: 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c  e></center>)^..<
9c90: 70 3e 5e 28 41 20 74 61 62 6c 65 20 63 72 65 61  p>^(A table crea
9ca0: 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45  ted using CREATE
9cb0: 20 54 41 42 4c 45 20 41 53 20 68 61 73 20 6e 6f   TABLE AS has no
9cc0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64   PRIMARY KEY and
9cd0: 20 6e 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20   no.constraints 
9ce0: 6f 66 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68 65  of any kind. The
9cf0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
9d00: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73  f each column is
9d10: 20 4e 55 4c 4c 2e 20 54 68 65 20 64 65 66 61 75   NULL. The defau
9d20: 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt.collation seq
9d30: 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 63  uence for each c
9d40: 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77  olumn of the new
9d50: 20 74 61 62 6c 65 20 69 73 20 42 49 4e 41 52 59   table is BINARY
9d60: 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20  .)^..<p>^Tables 
9d70: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  created using CR
9d80: 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 61 72  EATE TABLE AS ar
9d90: 65 20 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70 75  e initially popu
9da0: 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 0a 72  lated with the.r
9db0: 6f 77 73 20 6f 66 20 64 61 74 61 20 72 65 74 75  ows of data retu
9dc0: 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45  rned by the SELE
9dd0: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 52  CT statement. ^R
9de0: 6f 77 73 20 61 72 65 20 61 73 73 69 67 6e 65 64  ows are assigned
9df0: 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61 73   contiguously.as
9e00: 63 65 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d 20  cending [rowid] 
9e10: 76 61 6c 75 65 73 2c 20 73 74 61 72 74 69 6e 67  values, starting
9e20: 20 77 69 74 68 20 31 2c 20 69 6e 20 74 68 65 20   with 1, in the 
9e30: 5b 6f 72 64 65 72 20 62 79 7c 6f 72 64 65 72 5d  [order by|order]
9e40: 20 74 68 61 74 20 74 68 65 79 0a 61 72 65 20 72   that they.are r
9e50: 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
9e60: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
9e70: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
9e80: 6e 74 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66 7d  nt {tablecoldef}
9e90: 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   {column definit
9ea0: 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66  ion} {column def
9eb0: 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a  initions}</tcl>.
9ec0: 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69 6e  <h3>Column Defin
9ed0: 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  itions</h3>..<p>
9ee0: 55 6e 6c 65 73 73 20 69 74 20 69 73 20 61 20 43  Unless it is a C
9ef0: 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20  REATE TABLE ... 
9f00: 41 53 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  AS SELECT statem
9f10: 65 6e 74 2c 20 61 20 43 52 45 41 54 45 20 54 41  ent, a CREATE TA
9f20: 42 4c 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e 65  BLE includes.one
9f30: 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d 6e   or more [column
9f40: 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66 69  -def|column defi
9f50: 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f 6e  nitions], option
9f60: 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ally followed by
9f70: 20 61 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62 6c   a list of.[tabl
9f80: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61 62  e-constraint|tab
9f90: 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e  le constraints].
9fa0: 20 20 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65    Each column de
9fb0: 66 69 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73 74  finition consist
9fc0: 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f 66  s of the.name of
9fd0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70 74   the column, opt
9fe0: 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64  ionally followed
9ff0: 20 62 79 20 74 68 65 20 64 65 63 6c 61 72 65 64   by the declared
a000: 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c   type of the col
a010: 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f 72  umn,.then one or
a020: 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 5b   more optional [
a030: 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e  column-constrain
a040: 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61  t|column constra
a050: 69 6e 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64 20  ints]. Included 
a060: 69 6e 0a 74 68 65 20 64 65 66 69 6e 69 74 69 6f  in.the definitio
a070: 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f 6e  n of "column con
a080: 73 74 72 61 69 6e 74 73 22 20 66 6f 72 20 74 68  straints" for th
a090: 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68  e purposes of th
a0a0: 65 20 70 72 65 76 69 6f 75 73 0a 73 74 61 74 65  e previous.state
a0b0: 6d 65 6e 74 20 61 72 65 20 74 68 65 20 43 4f 4c  ment are the COL
a0c0: 4c 41 54 45 20 61 6e 64 20 44 45 46 41 55 4c 54  LATE and DEFAULT
a0d0: 20 63 6c 61 75 73 65 73 2c 20 65 76 65 6e 20 74   clauses, even t
a0e0: 68 6f 75 67 68 20 74 68 65 73 65 20 61 72 65 20  hough these are 
a0f0: 6e 6f 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73 74  not really.const
a100: 72 61 69 6e 74 73 20 69 6e 20 74 68 65 20 73 65  raints in the se
a110: 6e 73 65 20 74 68 61 74 20 74 68 65 79 20 64 6f  nse that they do
a120: 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20 74 68   not restrict th
a130: 65 20 64 61 74 61 20 74 68 61 74 20 74 68 65 20  e data that the 
a140: 74 61 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61 69  table may.contai
a150: 6e 2e 20 54 68 65 20 6f 74 68 65 72 20 63 6f 6e  n. The other con
a160: 73 74 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20 4e  straints - NOT N
a170: 55 4c 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49 51  ULL, CHECK, UNIQ
a180: 55 45 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20  UE, PRIMARY KEY 
a190: 61 6e 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59 20  and.FOREIGN KEY 
a1a0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 69 6d  constraints - im
a1b0: 70 6f 73 65 20 72 65 73 74 72 69 63 74 69 6f 6e  pose restriction
a1c0: 73 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 73 20  s on the tables 
a1d0: 64 61 74 61 2c 20 61 6e 64 20 61 72 65 20 61 72  data, and are ar
a1e0: 65 0a 64 65 73 63 72 69 62 65 64 20 75 6e 64 65  e.described unde
a1f0: 72 20 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c 53  r [constraints|S
a200: 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61 69  QL Data Constrai
a210: 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70 3e  nts] below...<p>
a220: 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51 4c  ^Unlike most SQL
a230: 20 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c 69   databases, SQLi
a240: 74 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 74  te does not rest
a250: 72 69 63 74 20 74 68 65 20 74 79 70 65 20 6f 66  rict the type of
a260: 20 64 61 74 61 20 74 68 61 74 0a 6d 61 79 20 62   data that.may b
a270: 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  e inserted into 
a280: 61 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20 6f  a column based o
a290: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64 65  n the columns de
a2a0: 63 6c 61 72 65 64 20 74 79 70 65 2e 20 49 6e 73  clared type. Ins
a2b0: 74 65 61 64 2c 0a 53 51 4c 69 74 65 20 75 73 65  tead,.SQLite use
a2c0: 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69 6e  s [dynamic typin
a2d0: 67 5d 2e 20 5e 54 68 65 20 64 65 63 6c 61 72 65  g]. ^The declare
a2e0: 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c 75  d type of a colu
a2f0: 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 64 65  mn is used to.de
a300: 74 65 72 6d 69 6e 65 20 74 68 65 20 5b 61 66 66  termine the [aff
a310: 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f  inity] of the co
a320: 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 74 63 6c  lumn only...<tcl
a330: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 66 6c  >hd_fragment dfl
a340: 74 76 61 6c 20 7b 64 65 66 61 75 6c 74 20 63 6f  tval {default co
a350: 6c 75 6d 6e 20 76 61 6c 75 65 7d 20 7b 64 65 66  lumn value} {def
a360: 61 75 6c 74 20 76 61 6c 75 65 7d 3c 2f 74 63 6c  ault value}</tcl
a370: 3e 0a 3c 70 3e 54 68 65 20 44 45 46 41 55 4c 54  >.<p>The DEFAULT
a380: 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
a390: 73 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  s a default valu
a3a0: 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65  e to use for the
a3b0: 20 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76 61   column if no.va
a3c0: 6c 75 65 20 69 73 20 65 78 70 6c 69 63 69 74 6c  lue is explicitl
a3d0: 79 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  y provided by th
a3e0: 65 20 75 73 65 72 20 77 68 65 6e 20 64 6f 69 6e  e user when doin
a3f0: 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20 5e  g an [INSERT]. ^
a400: 49 66 20 74 68 65 72 65 0a 69 73 20 6e 6f 20 65  If there.is no e
a410: 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20  xplicit DEFAULT 
a420: 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
a430: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
a440: 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  nition, then the
a450: 20 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20   .default value 
a460: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  of the column is
a470: 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70 6c   NULL. ^(An expl
a480: 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61  icit DEFAULT cla
a490: 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 0a  use may specify.
a4a0: 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  that the default
a4b0: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
a4c0: 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e  a string constan
a4d0: 74 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61  t, a blob consta
a4e0: 6e 74 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75 6d  nt, a.signed-num
a4f0: 62 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e 73  ber, or any cons
a500: 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  tant expression 
a510: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65  enclosed in pare
a520: 6e 74 68 65 73 65 73 2e 20 41 0a 64 65 66 61 75  ntheses. A.defau
a530: 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73  lt value may als
a540: 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  o be one of the 
a550: 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64  special case-ind
a560: 65 70 65 6e 64 65 6e 74 20 6b 65 79 77 6f 72 64  ependent keyword
a570: 73 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20  s.CURRENT_TIME, 
a580: 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20  CURRENT_DATE or 
a590: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
a5a0: 50 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75  P.)^ ^For the pu
a5b0: 72 70 6f 73 65 73 20 6f 66 20 74 68 65 0a 44 45  rposes of the.DE
a5c0: 46 41 55 4c 54 20 63 6c 61 75 73 65 2c 20 61 6e  FAULT clause, an
a5d0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63   expression is c
a5e0: 6f 6e 73 69 64 65 72 65 64 20 63 6f 6e 73 74 61  onsidered consta
a5f0: 6e 74 20 69 66 20 69 74 20 64 6f 65 73 0a 63 6f  nt if it does.co
a600: 6e 74 61 69 6e 73 20 6e 6f 20 73 75 62 2d 71 75  ntains no sub-qu
a610: 65 72 69 65 73 2c 20 63 6f 6c 75 6d 6e 20 6f 72  eries, column or
a620: 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65   table reference
a630: 73 2c 20 5b 62 6f 75 6e 64 20 70 61 72 61 6d 65  s, [bound parame
a640: 74 65 72 73 5d 2c 0a 6f 72 20 73 74 72 69 6e 67  ters],.or string
a650: 20 6c 69 74 65 72 61 6c 73 20 65 6e 63 6c 6f 73   literals enclos
a660: 65 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f  ed in double-quo
a670: 74 65 73 20 69 6e 73 74 65 61 64 20 6f 66 20 73  tes instead of s
a680: 69 6e 67 6c 65 2d 71 75 6f 74 65 73 2e 0a 0a 3c  ingle-quotes...<
a690: 70 3e 5e 28 45 61 63 68 20 74 69 6d 65 20 61 20  p>^(Each time a 
a6a0: 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20  row is inserted 
a6b0: 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  into the table b
a6c0: 79 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  y an INSERT stat
a6d0: 65 6d 65 6e 74 20 74 68 61 74 20 0a 64 6f 65 73  ement that .does
a6e0: 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 65 78 70   not provide exp
a6f0: 6c 69 63 69 74 20 76 61 6c 75 65 73 20 66 6f 72  licit values for
a700: 20 61 6c 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d   all table colum
a710: 6e 73 20 74 68 65 20 76 61 6c 75 65 73 20 73 74  ns the values st
a720: 6f 72 65 64 20 69 6e 0a 74 68 65 20 6e 65 77 20  ored in.the new 
a730: 72 6f 77 20 61 72 65 20 64 65 74 65 72 6d 69 6e  row are determin
a740: 65 64 20 62 79 20 74 68 65 69 72 20 64 65 66 61  ed by their defa
a750: 75 6c 74 20 76 61 6c 75 65 73 29 5e 2c 20 61 73  ult values)^, as
a760: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a   follows:..<ul>.
a770: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
a780: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
a790: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  f the column is 
a7a0: 61 20 63 6f 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c  a constant NULL,
a7b0: 20 74 65 78 74 2c 20 62 6c 6f 62 20 6f 72 0a 20   text, blob or. 
a7c0: 20 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72     signed-number
a7d0: 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61   value, then tha
a7e0: 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  t value is used 
a7f0: 64 69 72 65 63 74 6c 79 20 69 6e 20 74 68 65 20  directly in the 
a800: 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e  new row...  <li>
a810: 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75  <p>^If the defau
a820: 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f  lt value of a co
a830: 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65  lumn is an expre
a840: 73 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68  ssion in parenth
a850: 65 73 65 73 2c 20 74 68 65 6e 0a 20 20 20 20 74  eses, then.    t
a860: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
a870: 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
a880: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73  for each row ins
a890: 65 72 74 65 64 20 61 6e 64 20 74 68 65 20 72 65  erted and the re
a8a0: 73 75 6c 74 73 0a 20 20 20 20 75 73 65 64 20 69  sults.    used i
a8b0: 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a  n the new row...
a8c0: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
a8d0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
a8e0: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 43 55  f a column is CU
a8f0: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52  RRENT_TIME, CURR
a900: 45 4e 54 5f 44 41 54 45 20 6f 72 0a 20 20 20 20  ENT_DATE or.    
a910: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
a920: 50 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  P, then the valu
a930: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65  e used in the ne
a940: 77 20 72 6f 77 20 69 73 20 61 20 74 65 78 74 0a  w row is a text.
a950: 20 20 20 20 72 65 70 72 65 73 65 6e 74 61 74 69      representati
a960: 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  on of the curren
a970: 74 20 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f  t UTC date and/o
a980: 72 20 74 69 6d 65 2e 20 5e 46 6f 72 20 43 55 52  r time. ^For CUR
a990: 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65 0a 20  RENT_TIME, the. 
a9a0: 20 20 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65     format of the
a9b0: 20 76 61 6c 75 65 20 69 73 20 22 48 48 3a 4d 4d   value is "HH:MM
a9c0: 3a 53 53 22 2e 20 5e 46 6f 72 20 43 55 52 52 45  :SS". ^For CURRE
a9d0: 4e 54 5f 44 41 54 45 2c 20 22 59 59 59 59 2d 4d  NT_DATE, "YYYY-M
a9e0: 4d 2d 44 44 22 2e 20 5e 54 68 65 0a 20 20 20 20  M-DD". ^The.    
a9f0: 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45  format for CURRE
aa00: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20  NT_TIMESTAMP is 
aa10: 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  "YYYY-MM-DD HH:M
aa20: 4d 3a 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  M:SS"..</ul>..<p
aa30: 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  >^The COLLATE cl
aa40: 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74  ause specifies t
aa50: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 5b 63 6f  he name of a [co
aa60: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
aa70: 5d 20 74 6f 20 75 73 65 20 61 73 0a 74 68 65 20  ] to use as.the 
aa80: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
aa90: 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74  n sequence for t
aaa0: 68 65 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e  he column. ^If n
aab0: 6f 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  o COLLATE clause
aac0: 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
aad0: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
aae0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
aaf0: 20 5b 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e   [BINARY]...<p>^
ab00: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
ab10: 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65  lumns in a table
ab20: 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74   is limited by t
ab30: 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43  he [SQLITE_MAX_C
ab40: 4f 4c 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74  OLUMN].compile-t
ab50: 69 6d 65 20 70 61 72 61 6d 65 74 65 72 2e 20 5e  ime parameter. ^
ab60: 41 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  A single row of 
ab70: 61 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73  a table cannot s
ab80: 74 6f 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b  tore more than.[
ab90: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
aba0: 48 5d 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  H] bytes of data
abb0: 2e 20 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65  . ^Both of these
abc0: 20 6c 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c   limits can be l
abd0: 6f 77 65 72 65 64 20 61 74 0a 72 75 6e 74 69 6d  owered at.runtim
abe0: 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  e using the [sql
abf0: 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f  ite3_limit()] C/
ac00: 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f  C++ interface.</
ac10: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
ac20: 6d 65 6e 74 20 7b 63 6f 6e 73 74 72 61 69 6e 74  ment {constraint
ac30: 73 7d 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d  s} {constraints}
ac40: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44  </tcl>.<h3>SQL D
ac50: 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74 73 3c  ata Constraints<
ac60: 2f 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /h3>..<tcl>hd_fr
ac70: 61 67 6d 65 6e 74 20 70 72 69 6d 6b 65 79 63 6f  agment primkeyco
ac80: 6e 73 74 20 7b 50 52 49 4d 41 52 59 20 4b 45 59  nst {PRIMARY KEY
ac90: 7d 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 20 63  } {PRIMARY KEY c
aca0: 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e  onstraint}</tcl>
acb0: 0a 3c 70 3e 5e 45 61 63 68 20 74 61 62 6c 65 20  .<p>^Each table 
acc0: 69 6e 20 53 51 4c 69 74 65 20 6d 61 79 20 68 61  in SQLite may ha
acd0: 76 65 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c  ve at most one <
ace0: 62 3e 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62  b>PRIMARY KEY</b
acf0: 3e 2e 20 5e 49 66 20 74 68 65 0a 20 20 6b 65 79  >. ^If the.  key
ad00: 77 6f 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45  words PRIMARY KE
ad10: 59 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61  Y are added to a
ad20: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
ad30: 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69  on, then the pri
ad40: 6d 61 72 79 20 6b 65 79 0a 20 20 66 6f 72 20 74  mary key.  for t
ad50: 68 65 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74  he table consist
ad60: 73 20 6f 66 20 74 68 61 74 20 73 69 6e 67 6c 65  s of that single
ad70: 20 63 6f 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66   column. ^Or, if
ad80: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63   a PRIMARY KEY c
ad90: 6c 61 75 73 65 20 0a 20 20 69 73 20 73 70 65 63  lause .  is spec
ada0: 69 66 69 65 64 20 61 73 20 61 20 5b 74 61 62 6c  ified as a [tabl
adb0: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74  e-constraint], t
adc0: 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20  hen the primary 
add0: 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65  key of the table
ade0: 0a 20 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  .  consists of t
adf0: 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d  he list of colum
ae00: 6e 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ns specified as 
ae10: 70 61 72 74 20 6f 66 20 74 68 65 20 50 52 49 4d  part of the PRIM
ae20: 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a  ARY KEY clause..
ae30: 20 20 5e 54 68 65 20 50 52 49 4d 41 52 59 20 4b    ^The PRIMARY K
ae40: 45 59 20 63 6c 61 75 73 65 20 6d 75 73 74 20 63  EY clause must c
ae50: 6f 6e 74 61 69 6e 20 6f 6e 6c 79 20 63 6f 6c 75  ontain only colu
ae60: 6d 6e 20 6e 61 6d 65 73 20 26 6d 64 61 73 68 3b  mn names &mdash;
ae70: 20 74 68 65 20 75 73 65 20 6f 66 20 0a 20 20 65   the use of .  e
ae80: 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 6e  xpressions in an
ae90: 20 5b 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e   [indexed-column
aea0: 5d 20 6f 66 20 61 20 50 52 49 4d 41 52 59 20 4b  ] of a PRIMARY K
aeb0: 45 59 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72  EY is not suppor
aec0: 74 65 64 2e 0a 20 20 5e 41 6e 20 65 72 72 6f 72  ted..  ^An error
aed0: 20 69 73 20 72 61 69 73 65 64 20 69 66 20 6d 6f   is raised if mo
aee0: 72 65 20 74 68 61 6e 20 6f 6e 65 20 50 52 49 4d  re than one PRIM
aef0: 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20 61  ARY KEY clause a
af00: 70 70 65 61 72 73 20 69 6e 20 61 0a 20 20 43 52  ppears in a.  CR
af10: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
af20: 6d 65 6e 74 2e 20 20 5e 54 68 65 20 50 52 49 4d  ment.  ^The PRIM
af30: 41 52 59 20 4b 45 59 20 69 73 20 6f 70 74 69 6f  ARY KEY is optio
af40: 6e 61 6c 20 66 6f 72 20 6f 72 64 69 6e 61 72 79  nal for ordinary
af50: 20 74 61 62 6c 65 73 0a 20 20 62 75 74 20 69 73   tables.  but is
af60: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 5b 57   required for [W
af70: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
af80: 62 6c 65 73 2e 0a 0a 3c 70 3e 49 66 20 61 20 74  bles...<p>If a t
af90: 61 62 6c 65 20 68 61 73 20 61 20 73 69 6e 67 6c  able has a singl
afa0: 65 20 63 6f 6c 75 6d 6e 20 70 72 69 6d 61 72 79  e column primary
afb0: 20 6b 65 79 20 61 6e 64 20 74 68 65 20 64 65 63   key and the dec
afc0: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74 68  lared type of th
afd0: 61 74 0a 20 20 63 6f 6c 75 6d 6e 20 69 73 20 22  at.  column is "
afe0: 49 4e 54 45 47 45 52 22 20 61 6e 64 20 74 68 65  INTEGER" and the
aff0: 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 61 20   table is not a 
b000: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
b010: 74 61 62 6c 65 2c 0a 20 20 74 68 65 6e 20 74 68  table,.  then th
b020: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77  e column is know
b030: 6e 20 61 73 20 61 6e 20 5b 49 4e 54 45 47 45 52  n as an [INTEGER
b040: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 20   PRIMARY KEY].. 
b050: 20 53 65 65 20 5b 72 6f 77 69 64 7c 62 65 6c 6f   See [rowid|belo
b060: 77 5d 20 66 6f 72 20 61 20 64 65 73 63 72 69 70  w] for a descrip
b070: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 70 65 63  tion of the spec
b080: 69 61 6c 20 70 72 6f 70 65 72 74 69 65 73 20 61  ial properties a
b090: 6e 64 20 62 65 68 61 76 69 6f 72 73 0a 20 20 61  nd behaviors.  a
b0a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
b0b0: 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  n [INTEGER PRIMA
b0c0: 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70 3e 5e 45 61  RY KEY]...<p>^Ea
b0d0: 63 68 20 72 6f 77 20 69 6e 20 61 20 74 61 62 6c  ch row in a tabl
b0e0: 65 20 77 69 74 68 20 61 20 70 72 69 6d 61 72 79  e with a primary
b0f0: 20 6b 65 79 20 6d 75 73 74 20 68 61 76 65 20 61   key must have a
b100: 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74   unique combinat
b110: 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75 65 73 20  ion.  of values 
b120: 69 6e 20 69 74 73 20 70 72 69 6d 61 72 79 20 6b  in its primary k
b130: 65 79 20 63 6f 6c 75 6d 6e 73 2e 20 5e 46 6f 72  ey columns. ^For
b140: 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
b150: 20 64 65 74 65 72 6d 69 6e 69 6e 67 0a 20 20 74   determining.  t
b160: 68 65 20 75 6e 69 71 75 65 6e 65 73 73 20 6f 66  he uniqueness of
b170: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c   primary key val
b180: 75 65 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ues, NULL values
b190: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
b1a0: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 0a 20 20  distinct from.  
b1b0: 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  all other values
b1c0: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65  , including othe
b1d0: 72 20 4e 55 4c 4c 73 2e 20 5e 49 66 20 61 6e 20  r NULLs. ^If an 
b1e0: 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50 44  [INSERT] or [UPD
b1f0: 41 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74  ATE].  statement
b200: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 6f 64   attempts to mod
b210: 69 66 79 20 74 68 65 20 74 61 62 6c 65 20 63 6f  ify the table co
b220: 6e 74 65 6e 74 20 73 6f 20 74 68 61 74 20 74 77  ntent so that tw
b230: 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 0a 20  o or more rows. 
b240: 20 68 61 76 65 20 69 64 65 6e 74 69 63 61 6c 20   have identical 
b250: 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75  primary key valu
b260: 65 73 2c 20 74 68 61 74 20 69 73 20 61 20 63 6f  es, that is a co
b270: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
b280: 6f 6e 2e 0a 0a 3c 70 3e 20 41 63 63 6f 72 64 69  on...<p> Accordi
b290: 6e 67 20 74 6f 20 74 68 65 20 53 51 4c 20 73 74  ng to the SQL st
b2a0: 61 6e 64 61 72 64 2c 20 50 52 49 4d 41 52 59 20  andard, PRIMARY 
b2b0: 4b 45 59 20 73 68 6f 75 6c 64 20 61 6c 77 61 79  KEY should alway
b2c0: 73 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c  s imply NOT NULL
b2d0: 2e 0a 20 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c  ..  Unfortunatel
b2e0: 79 2c 20 64 75 65 20 74 6f 20 61 20 62 75 67 20  y, due to a bug 
b2f0: 69 6e 20 73 6f 6d 65 20 65 61 72 6c 79 20 76 65  in some early ve
b300: 72 73 69 6f 6e 73 2c 20 74 68 69 73 20 69 73 20  rsions, this is 
b310: 6e 6f 74 20 74 68 65 0a 20 20 63 61 73 65 20 69  not the.  case i
b320: 6e 20 53 51 4c 69 74 65 2e 20 5e 55 6e 6c 65 73  n SQLite. ^Unles
b330: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  s the column is 
b340: 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  an [INTEGER PRIM
b350: 41 52 59 20 4b 45 59 5d 20 6f 72 0a 20 20 74 68  ARY KEY] or.  th
b360: 65 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49  e table is a [WI
b370: 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
b380: 6c 65 20 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  le or the column
b390: 20 69 73 20 64 65 63 6c 61 72 65 64 20 4e 4f 54   is declared NOT
b3a0: 20 4e 55 4c 4c 2c 0a 20 20 53 51 4c 69 74 65 20   NULL,.  SQLite 
b3b0: 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75  allows NULL valu
b3c0: 65 73 20 69 6e 20 61 20 50 52 49 4d 41 52 59 20  es in a PRIMARY 
b3d0: 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20 20 53 51 4c  KEY column.  SQL
b3e0: 69 74 65 20 63 6f 75 6c 64 20 62 65 20 66 69 78  ite could be fix
b3f0: 65 64 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20  ed to.  conform 
b400: 74 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 2c  to the standard,
b410: 20 62 75 74 20 64 6f 69 6e 67 20 73 6f 20 6d 69   but doing so mi
b420: 67 68 74 20 62 72 65 61 6b 20 6c 65 67 61 63 79  ght break legacy
b430: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20   applications.. 
b440: 20 48 65 6e 63 65 2c 20 69 74 20 68 61 73 20 62   Hence, it has b
b450: 65 65 6e 20 64 65 63 69 64 65 64 20 74 6f 20 6d  een decided to m
b460: 65 72 65 6c 79 20 64 6f 63 75 6d 65 6e 74 20 74  erely document t
b470: 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c  he fact that SQL
b480: 69 74 65 0a 20 20 61 6c 6c 6f 77 69 6e 67 20 4e  ite.  allowing N
b490: 55 4c 4c 73 20 69 6e 20 6d 6f 73 74 20 50 52 49  ULLs in most PRI
b4a0: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73  MARY KEY columns
b4b0: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
b4c0: 65 6e 74 20 75 6e 69 71 75 65 63 6f 6e 73 74 20  ent uniqueconst 
b4d0: 7b 55 4e 49 51 55 45 7d 20 7b 75 6e 69 71 75 65  {UNIQUE} {unique
b4e0: 20 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 55 4e   constraint} {UN
b4f0: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 7d  IQUE constraint}
b500: 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e  </tcl>.<p>^A <b>
b510: 55 4e 49 51 55 45 3c 2f 62 3e 20 63 6f 6e 73 74  UNIQUE</b> const
b520: 72 61 69 6e 74 20 69 73 20 73 69 6d 69 6c 61 72  raint is similar
b530: 20 74 6f 20 61 20 50 52 49 4d 41 52 59 20 4b 45   to a PRIMARY KE
b540: 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65 78  Y constraint, ex
b550: 63 65 70 74 0a 20 20 74 68 61 74 20 61 20 73 69  cept.  that a si
b560: 6e 67 6c 65 20 74 61 62 6c 65 20 6d 61 79 20 68  ngle table may h
b570: 61 76 65 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f  ave any number o
b580: 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  f UNIQUE constra
b590: 69 6e 74 73 2e 20 5e 46 6f 72 20 65 61 63 68 0a  ints. ^For each.
b5a0: 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61    UNIQUE constra
b5b0: 69 6e 74 20 6f 6e 20 74 68 65 20 74 61 62 6c 65  int on the table
b5c0: 2c 20 65 61 63 68 20 72 6f 77 20 6d 75 73 74 20  , each row must 
b5d0: 63 6f 6e 74 61 69 6e 20 61 20 75 6e 69 71 75 65  contain a unique
b5e0: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f   combination.  o
b5f0: 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  f values in the 
b600: 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69  columns identifi
b610: 65 64 20 62 79 20 74 68 65 20 55 4e 49 51 55 45  ed by the UNIQUE
b620: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 20 20   constraint. .  
b630: 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
b640: 73 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73  s of UNIQUE cons
b650: 74 72 61 69 6e 74 73 2c 20 4e 55 4c 4c 20 76 61  traints, NULL va
b660: 6c 75 65 73 0a 20 20 61 72 65 20 63 6f 6e 73 69  lues.  are consi
b670: 64 65 72 65 64 20 64 69 73 74 69 6e 63 74 20 66  dered distinct f
b680: 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76 61  rom all other va
b690: 6c 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20  lues, including 
b6a0: 6f 74 68 65 72 20 4e 55 4c 4c 73 2e 0a 20 20 5e  other NULLs..  ^
b6b0: 41 73 20 77 69 74 68 20 50 52 49 4d 41 52 59 20  As with PRIMARY 
b6c0: 4b 45 59 73 2c 20 61 20 55 4e 49 51 55 45 20 5b  KEYs, a UNIQUE [
b6d0: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
b6e0: 5d 20 63 6c 61 75 73 65 20 6d 75 73 74 20 63 6f  ] clause must co
b6f0: 6e 74 61 69 6e 0a 20 20 6f 6e 6c 79 20 63 6f 6c  ntain.  only col
b700: 75 6d 6e 20 6e 61 6d 65 73 20 26 6d 64 61 73 68  umn names &mdash
b710: 3b 20 74 68 65 20 75 73 65 20 6f 66 20 0a 20 20  ; the use of .  
b720: 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61  expressions in a
b730: 6e 20 5b 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d  n [indexed-colum
b740: 6e 5d 20 6f 66 20 61 20 55 4e 49 51 55 45 20 5b  n] of a UNIQUE [
b750: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
b760: 5d 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f  ].  is not suppo
b770: 72 74 65 64 2e 0a 20 20 0a 0a 3c 70 3e 5e 49 6e  rted..  ..<p>^In
b780: 20 6d 6f 73 74 20 63 61 73 65 73 2c 20 55 4e 49   most cases, UNI
b790: 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20  QUE and PRIMARY 
b7a0: 4b 45 59 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74  KEY.  constraint
b7b0: 73 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65  s are implemente
b7c0: 64 20 62 79 20 63 72 65 61 74 69 6e 67 20 61 20  d by creating a 
b7d0: 75 6e 69 71 75 65 20 69 6e 64 65 78 20 69 6e 20  unique index in 
b7e0: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
b7f0: 28 54 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20  (The exceptions 
b800: 61 72 65 20 5b 49 4e 54 45 47 45 52 20 50 52 49  are [INTEGER PRI
b810: 4d 41 52 59 20 4b 45 59 5d 20 61 6e 64 20 50 52  MARY KEY] and PR
b820: 49 4d 41 52 59 20 4b 45 59 73 20 6f 6e 20 0a 20  IMARY KEYs on . 
b830: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
b840: 20 74 61 62 6c 65 73 2e 29 0a 20 20 48 65 6e 63   tables.).  Henc
b850: 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  e, the following
b860: 20 73 63 68 65 6d 61 73 20 61 72 65 20 6c 6f 67   schemas are log
b870: 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e  ically equivalen
b880: 74 3a 0a 0a 20 20 3c 6f 6c 3e 0a 20 20 3c 6c 69  t:..  <ol>.  <li
b890: 3e 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45  ><p>CREATE TABLE
b8a0: 20 74 31 28 61 2c 20 62 20 55 4e 49 51 55 45 29   t1(a, b UNIQUE)
b8b0: 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54  ;.  <li><p>CREAT
b8c0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 20  E TABLE t1(a, b 
b8d0: 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20  PRIMARY KEY);.  
b8e0: 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41  <li><p>CREATE TA
b8f0: 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 3c 62 72  BLE t1(a, b);<br
b900: 3e 0a 20 20 20 20 20 20 20 20 20 43 52 45 41 54  >.         CREAT
b910: 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20 74  E UNIQUE INDEX t
b920: 31 62 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20 3c  1b ON t1(b);.  <
b930: 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /ol>..<tcl>hd_fr
b940: 61 67 6d 65 6e 74 20 7b 63 6b 63 6f 6e 73 74 7d  agment {ckconst}
b950: 20 7b 43 48 45 43 4b 7d 20 7b 43 48 45 43 4b 20   {CHECK} {CHECK 
b960: 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 43 48 45  constraint} {CHE
b970: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c  CK constraints}<
b980: 2f 74 63 6c 3e 0a 3c 70 3e 5e 28 41 20 3c 62 3e  /tcl>.<p>^(A <b>
b990: 43 48 45 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72  CHECK</b> constr
b9a0: 61 69 6e 74 20 6d 61 79 20 62 65 20 61 74 74 61  aint may be atta
b9b0: 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  ched to a column
b9c0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 0a 20   definition or. 
b9d0: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20   specified as a 
b9e0: 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  table constraint
b9f0: 2e 20 49 6e 20 70 72 61 63 74 69 63 65 20 69 74  . In practice it
ba00: 20 6d 61 6b 65 73 20 6e 6f 20 64 69 66 66 65 72   makes no differ
ba10: 65 6e 63 65 2e 29 5e 20 5e 28 45 61 63 68 0a 20  ence.)^ ^(Each. 
ba20: 20 74 69 6d 65 20 61 20 6e 65 77 20 72 6f 77 20   time a new row 
ba30: 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
ba40: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 61 6e   the table or an
ba50: 20 65 78 69 73 74 69 6e 67 20 72 6f 77 20 69 73   existing row is
ba60: 20 75 70 64 61 74 65 64 2c 0a 20 20 74 68 65 20   updated,.  the 
ba70: 65 78 70 72 65 73 73 69 6f 6e 20 61 73 73 6f 63  expression assoc
ba80: 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20  iated with each 
ba90: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
baa0: 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e   is evaluated an
bab0: 64 0a 20 20 63 61 73 74 20 74 6f 20 61 20 4e 55  d.  cast to a NU
bac0: 4d 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74  MERIC value in t
bad0: 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61  he same way as a
bae0: 20 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f   [CAST expressio
baf0: 6e 5d 2e 20 49 66 20 74 68 65 20 0a 20 20 72 65  n]. If the .  re
bb00: 73 75 6c 74 20 69 73 20 7a 65 72 6f 20 28 69 6e  sult is zero (in
bb10: 74 65 67 65 72 20 76 61 6c 75 65 20 30 20 6f 72  teger value 0 or
bb20: 20 72 65 61 6c 20 76 61 6c 75 65 20 30 2e 30 29   real value 0.0)
bb30: 2c 20 74 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  , then a constra
bb40: 69 6e 74 0a 20 20 76 69 6f 6c 61 74 69 6f 6e 20  int.  violation 
bb50: 68 61 73 20 6f 63 63 75 72 72 65 64 2e 29 5e 20  has occurred.)^ 
bb60: 5e 49 66 20 74 68 65 20 43 48 45 43 4b 20 65 78  ^If the CHECK ex
bb70: 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
bb80: 65 73 20 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20  es to NULL, or. 
bb90: 20 61 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a   any other non-z
bba0: 65 72 6f 20 76 61 6c 75 65 2c 20 69 74 20 69 73  ero value, it is
bbb0: 20 6e 6f 74 20 61 20 63 6f 6e 73 74 72 61 69 6e   not a constrain
bbc0: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 5e  t violation..  ^
bbd0: 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  The expression o
bbe0: 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  f a CHECK constr
bbf0: 61 69 6e 74 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  aint may not con
bc00: 74 61 69 6e 20 61 20 73 75 62 71 75 65 72 79 2e  tain a subquery.
bc10: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
bc20: 6e 74 20 7b 6e 6f 74 6e 75 6c 6c 63 6f 6e 73 74  nt {notnullconst
bc30: 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 7d 20 7b 4e 4f  } {NOT NULL} {NO
bc40: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
bc50: 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c  t}</tcl>.<p>^A <
bc60: 62 3e 4e 4f 54 20 4e 55 4c 4c 3c 2f 62 3e 20 63  b>NOT NULL</b> c
bc70: 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 6f 6e  onstraint may on
bc80: 6c 79 20 62 65 20 61 74 74 61 63 68 65 64 20 74  ly be attached t
bc90: 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  o a column defin
bca0: 69 74 69 6f 6e 2c 0a 20 20 6e 6f 74 20 73 70 65  ition,.  not spe
bcb0: 63 69 66 69 65 64 20 61 73 20 61 20 74 61 62 6c  cified as a tabl
bcc0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 20 4e  e constraint.  N
bcd0: 6f 74 20 73 75 72 70 72 69 73 69 6e 67 6c 79 2c  ot surprisingly,
bce0: 20 5e 28 61 20 4e 4f 54 20 4e 55 4c 4c 0a 20 20   ^(a NOT NULL.  
bcf0: 63 6f 6e 73 74 72 61 69 6e 74 20 64 69 63 74 61  constraint dicta
bd00: 74 65 73 20 74 68 61 74 20 74 68 65 20 61 73 73  tes that the ass
bd10: 6f 63 69 61 74 65 64 20 63 6f 6c 75 6d 6e 20 6d  ociated column m
bd20: 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ay not contain a
bd30: 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 0a 20 20 41   NULL value..  A
bd40: 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73 65 74  ttempting to set
bd50: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
bd60: 65 20 74 6f 20 4e 55 4c 4c 20 77 68 65 6e 20 69  e to NULL when i
bd70: 6e 73 65 72 74 69 6e 67 20 61 20 6e 65 77 20 72  nserting a new r
bd80: 6f 77 20 6f 72 0a 20 20 75 70 64 61 74 69 6e 67  ow or.  updating
bd90: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6f 6e 65   an existing one
bda0: 20 63 61 75 73 65 73 20 61 20 63 6f 6e 73 74 72   causes a constr
bdb0: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 29  aint violation.)
bdc0: 5e 0a 0a 3c 70 3e 45 78 61 63 74 6c 79 20 68 6f  ^..<p>Exactly ho
bdd0: 77 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  w a constraint v
bde0: 69 6f 6c 61 74 69 6f 6e 20 69 73 20 64 65 61 6c  iolation is deal
bdf0: 74 20 77 69 74 68 20 69 73 20 64 65 74 65 72 6d  t with is determ
be00: 69 6e 65 64 20 62 79 20 74 68 65 0a 20 20 5b 63  ined by the.  [c
be10: 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7c 63  onflict clause|c
be20: 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
be30: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
be40: 67 6f 72 69 74 68 6d 5d 2e 20 45 61 63 68 20 0a  gorithm]. Each .
be50: 20 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55    PRIMARY KEY, U
be60: 4e 49 51 55 45 2c 20 4e 4f 54 20 4e 55 4c 4c 20  NIQUE, NOT NULL 
be70: 61 6e 64 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  and CHECK constr
be80: 61 69 6e 74 20 68 61 73 20 61 20 64 65 66 61 75  aint has a defau
be90: 6c 74 20 63 6f 6e 66 6c 69 63 74 0a 20 20 72 65  lt conflict.  re
bea0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
beb0: 68 6d 2e 20 5e 50 52 49 4d 41 52 59 20 4b 45 59  hm. ^PRIMARY KEY
bec0: 2c 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  , UNIQUE and NOT
bed0: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
bee0: 73 20 6d 61 79 20 62 65 0a 20 20 65 78 70 6c 69  s may be.  expli
bef0: 63 69 74 6c 79 20 61 73 73 69 67 6e 65 64 20 61  citly assigned a
bf00: 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63   default conflic
bf10: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
bf20: 6f 72 69 74 68 6d 20 62 79 20 69 6e 63 6c 75 64  orithm by includ
bf30: 69 6e 67 0a 20 20 61 20 5b 63 6f 6e 66 6c 69 63  ing.  a [conflic
bf40: 74 2d 63 6c 61 75 73 65 5d 20 69 6e 20 74 68 65  t-clause] in the
bf50: 69 72 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20  ir definitions. 
bf60: 5e 4f 72 2c 20 69 66 20 61 20 63 6f 6e 73 74 72  ^Or, if a constr
bf70: 61 69 6e 74 20 64 65 66 69 6e 69 74 69 6f 6e 0a  aint definition.
bf80: 20 20 64 6f 65 73 20 6e 6f 74 20 69 6e 63 6c 75    does not inclu
bf90: 64 65 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63  de a [conflict-c
bfa0: 6c 61 75 73 65 5d 20 6f 72 20 69 74 20 69 73 20  lause] or it is 
bfb0: 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
bfc0: 6e 74 2c 20 74 68 65 20 64 65 66 61 75 6c 74 0a  nt, the default.
bfd0: 20 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c    conflict resol
bfe0: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
bff0: 69 73 20 41 42 4f 52 54 2e 20 5e 44 69 66 66 65  is ABORT. ^Diffe
c000: 72 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  rent constraints
c010: 20 77 69 74 68 69 6e 20 74 68 65 0a 20 20 73 61   within the.  sa
c020: 6d 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61 76  me table may hav
c030: 65 20 64 69 66 66 65 72 65 6e 74 20 64 65 66 61  e different defa
c040: 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
c050: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
c060: 6d 73 2e 20 53 65 65 0a 20 20 74 68 65 20 73 65  ms. See.  the se
c070: 63 74 69 6f 6e 20 74 69 74 6c 65 64 20 5b 4f 4e  ction titled [ON
c080: 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61   CONFLICT] for a
c090: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
c0a0: 61 74 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ation...<tcl>hd_
c0b0: 66 72 61 67 6d 65 6e 74 20 72 6f 77 69 64 20 7b  fragment rowid {
c0c0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
c0d0: 4b 45 59 7d 20 52 4f 57 49 44 20 72 6f 77 69 64  KEY} ROWID rowid
c0e0: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52 4f 57 49 44  </tcl>.<h3>ROWID
c0f0: 73 20 61 6e 64 20 74 68 65 20 49 4e 54 45 47 45  s and the INTEGE
c100: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 68  R PRIMARY KEY</h
c110: 33 3e 0a 0a 3c 70 3e 5e 45 78 63 65 70 74 20 66  3>..<p>^Except f
c120: 6f 72 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49  or [WITHOUT ROWI
c130: 44 5d 20 74 61 62 6c 65 73 2c 20 61 6c 6c 20 72  D] tables, all r
c140: 6f 77 73 20 77 69 74 68 69 6e 20 53 51 4c 69 74  ows within SQLit
c150: 65 20 74 61 62 6c 65 73 0a 68 61 76 65 20 61 20  e tables.have a 
c160: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
c170: 74 65 67 65 72 20 6b 65 79 20 74 68 61 74 20 75  teger key that u
c180: 6e 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66 69  niquely identifi
c190: 65 73 20 74 68 65 20 72 6f 77 20 77 69 74 68 69  es the row withi
c1a0: 6e 20 69 74 73 20 74 61 62 6c 65 2e 0a 54 68 69  n its table..Thi
c1b0: 73 20 69 6e 74 65 67 65 72 20 69 73 20 75 73 75  s integer is usu
c1c0: 61 6c 6c 79 0a 63 61 6c 6c 65 64 20 74 68 65 20  ally.called the 
c1d0: 22 72 6f 77 69 64 22 2e 20 5e 54 68 65 20 72 6f  "rowid". ^The ro
c1e0: 77 69 64 20 76 61 6c 75 65 20 63 61 6e 20 62 65  wid value can be
c1f0: 20 61 63 63 65 73 73 65 64 20 75 73 69 6e 67 20   accessed using 
c200: 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63 69  one of the speci
c210: 61 6c 0a 63 61 73 65 2d 69 6e 64 65 70 65 6e 64  al.case-independ
c220: 65 6e 74 20 6e 61 6d 65 73 20 22 72 6f 77 69 64  ent names "rowid
c230: 22 2c 20 22 6f 69 64 22 2c 20 6f 72 20 22 5f 72  ", "oid", or "_r
c240: 6f 77 69 64 5f 22 20 69 6e 20 70 6c 61 63 65 20  owid_" in place 
c250: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
c260: 2e 0a 5e 49 66 20 61 20 74 61 62 6c 65 20 63 6f  ..^If a table co
c270: 6e 74 61 69 6e 73 20 61 20 75 73 65 72 20 64 65  ntains a user de
c280: 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d  fined column nam
c290: 65 64 20 22 72 6f 77 69 64 22 2c 20 22 6f 69 64  ed "rowid", "oid
c2a0: 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 2c 0a  " or "_rowid_",.
c2b0: 74 68 65 6e 20 74 68 61 74 20 6e 61 6d 65 20 61  then that name a
c2c0: 6c 77 61 79 73 20 72 65 66 65 72 73 20 74 68 65  lways refers the
c2d0: 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c   explicitly decl
c2e0: 61 72 65 64 20 63 6f 6c 75 6d 6e 20 61 6e 64 20  ared column and 
c2f0: 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 0a 74  cannot be used.t
c300: 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20 69  o retrieve the i
c310: 6e 74 65 67 65 72 20 72 6f 77 69 64 20 76 61 6c  nteger rowid val
c320: 75 65 2e 0a 0a 3c 70 3e 54 68 65 20 72 6f 77 69  ue...<p>The rowi
c330: 64 20 28 61 6e 64 20 22 6f 69 64 22 20 61 6e 64  d (and "oid" and
c340: 20 22 5f 72 6f 77 69 64 5f 22 29 20 69 73 20 6f   "_rowid_") is o
c350: 6d 69 74 74 65 64 20 69 6e 20 5b 57 49 54 48 4f  mitted in [WITHO
c360: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73  UT ROWID] tables
c370: 2e 0a 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  ..WITHOUT ROWID 
c380: 74 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  tables are only 
c390: 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 53 51 4c  available in SQL
c3a0: 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 38  ite [version 3.8
c3b0: 2e 32 5d 0a 28 5b 64 61 74 65 6f 66 3a 33 2e 38  .2].([dateof:3.8
c3c0: 2e 32 5d 29 20 61 6e 64 20 6c 61 74 65 72 2e 0a  .2]) and later..
c3d0: 41 20 74 61 62 6c 65 20 74 68 61 74 20 6c 61 63  A table that lac
c3e0: 6b 73 20 74 68 65 20 57 49 54 48 4f 55 54 20 52  ks the WITHOUT R
c3f0: 4f 57 49 44 20 63 6c 61 75 73 65 20 69 73 20 63  OWID clause is c
c400: 61 6c 6c 65 64 20 61 20 22 72 6f 77 69 64 20 74  alled a "rowid t
c410: 61 62 6c 65 22 2e 0a 0a 3c 70 3e 54 68 65 20 64  able"...<p>The d
c420: 61 74 61 20 66 6f 72 20 72 6f 77 69 64 20 74 61  ata for rowid ta
c430: 62 6c 65 73 20 69 73 20 73 74 6f 72 65 64 20 61  bles is stored a
c440: 73 20 61 20 42 2d 54 72 65 65 20 73 74 72 75 63  s a B-Tree struc
c450: 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a  ture containing.
c460: 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  one entry for ea
c470: 63 68 20 74 61 62 6c 65 20 72 6f 77 2c 20 75 73  ch table row, us
c480: 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 76 61  ing the rowid va
c490: 6c 75 65 20 61 73 20 74 68 65 20 6b 65 79 2e 20  lue as the key. 
c4a0: 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 0a  This means that.
c4b0: 72 65 74 72 69 65 76 69 6e 67 20 6f 72 20 73 6f  retrieving or so
c4c0: 72 74 69 6e 67 20 72 65 63 6f 72 64 73 20 62 79  rting records by
c4d0: 20 72 6f 77 69 64 20 69 73 20 66 61 73 74 2e 20   rowid is fast. 
c4e0: 53 65 61 72 63 68 69 6e 67 20 66 6f 72 20 61 20  Searching for a 
c4f0: 72 65 63 6f 72 64 20 77 69 74 68 20 61 0a 73 70  record with a.sp
c500: 65 63 69 66 69 63 20 72 6f 77 69 64 2c 20 6f 72  ecific rowid, or
c510: 20 66 6f 72 20 61 6c 6c 20 72 65 63 6f 72 64 73   for all records
c520: 20 77 69 74 68 20 72 6f 77 69 64 73 20 77 69 74   with rowids wit
c530: 68 69 6e 20 61 20 73 70 65 63 69 66 69 65 64 20  hin a specified 
c540: 72 61 6e 67 65 20 69 73 0a 61 72 6f 75 6e 64 20  range is.around 
c550: 74 77 69 63 65 20 61 73 20 66 61 73 74 20 61 73  twice as fast as
c560: 20 61 20 73 69 6d 69 6c 61 72 20 73 65 61 72 63   a similar searc
c570: 68 20 6d 61 64 65 20 62 79 20 73 70 65 63 69 66  h made by specif
c580: 79 69 6e 67 20 61 6e 79 20 6f 74 68 65 72 20 50  ying any other P
c590: 52 49 4d 41 52 59 0a 4b 45 59 20 6f 72 20 69 6e  RIMARY.KEY or in
c5a0: 64 65 78 65 64 20 76 61 6c 75 65 2e 0a 0a 3c 70  dexed value...<p
c5b0: 3e 20 5e 57 69 74 68 20 6f 6e 65 20 65 78 63 65  > ^With one exce
c5c0: 70 74 69 6f 6e 20 6e 6f 74 65 64 20 62 65 6c 6f  ption noted belo
c5d0: 77 2c 20 69 66 20 61 20 72 6f 77 69 64 20 74 61  w, if a rowid ta
c5e0: 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72  ble has a primar
c5f0: 79 20 6b 65 79 20 74 68 61 74 20 63 6f 6e 73 69  y key that consi
c600: 73 74 73 0a 6f 66 20 61 20 73 69 6e 67 6c 65 20  sts.of a single 
c610: 63 6f 6c 75 6d 6e 20 61 6e 64 20 74 68 65 20 64  column and the d
c620: 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20  eclared type of 
c630: 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20 22  that column is "
c640: 49 4e 54 45 47 45 52 22 20 69 6e 20 61 6e 79 20  INTEGER" in any 
c650: 6d 69 78 74 75 72 65 20 6f 66 0a 75 70 70 65 72  mixture of.upper
c660: 20 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 2c   and lower case,
c670: 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e   then the column
c680: 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61   becomes an alia
c690: 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e  s for the rowid.
c6a0: 20 53 75 63 68 20 61 0a 63 6f 6c 75 6d 6e 20 69   Such a.column i
c6b0: 73 20 75 73 75 61 6c 6c 79 20 72 65 66 65 72 72  s usually referr
c6c0: 65 64 20 74 6f 20 61 73 20 61 6e 20 22 69 6e 74  ed to as an "int
c6d0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
c6e0: 22 2e 20 41 20 50 52 49 4d 41 52 59 20 4b 45 59  ". A PRIMARY KEY
c6f0: 20 63 6f 6c 75 6d 6e 0a 6f 6e 6c 79 20 62 65 63   column.only bec
c700: 6f 6d 65 73 20 61 6e 20 69 6e 74 65 67 65 72 20  omes an integer 
c710: 70 72 69 6d 61 72 79 20 6b 65 79 20 69 66 20 74  primary key if t
c720: 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65  he declared type
c730: 20 6e 61 6d 65 20 69 73 20 65 78 61 63 74 6c 79   name is exactly
c740: 0a 22 49 4e 54 45 47 45 52 22 2e 20 20 5e 4f 74  ."INTEGER".  ^Ot
c750: 68 65 72 20 69 6e 74 65 67 65 72 20 74 79 70 65  her integer type
c760: 20 6e 61 6d 65 73 20 6c 69 6b 65 20 22 49 4e 54   names like "INT
c770: 22 20 6f 72 20 22 42 49 47 49 4e 54 22 20 6f 72  " or "BIGINT" or
c780: 20 22 53 48 4f 52 54 20 49 4e 54 45 47 45 52 22   "SHORT INTEGER"
c790: 0a 6f 72 20 22 55 4e 53 49 47 4e 45 44 20 49 4e  .or "UNSIGNED IN
c7a0: 54 45 47 45 52 22 20 63 61 75 73 65 73 20 74 68  TEGER" causes th
c7b0: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f  e primary key co
c7c0: 6c 75 6d 6e 20 74 6f 20 62 65 68 61 76 65 20 61  lumn to behave a
c7d0: 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 0a 74 61  s an ordinary.ta
c7e0: 62 6c 65 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20  ble column with 
c7f0: 69 6e 74 65 67 65 72 20 5b 61 66 66 69 6e 69 74  integer [affinit
c800: 79 5d 20 61 6e 64 20 61 20 75 6e 69 71 75 65 20  y] and a unique 
c810: 69 6e 64 65 78 2c 20 6e 6f 74 20 61 73 20 61 6e  index, not as an
c820: 20 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72   alias for.the r
c830: 6f 77 69 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 65  owid...<p> The e
c840: 78 63 65 70 74 69 6f 6e 20 6d 65 6e 74 69 6f 6e  xception mention
c850: 65 64 20 61 62 6f 76 65 20 69 73 20 74 68 61 74  ed above is that
c860: 20 5e 69 66 20 74 68 65 20 64 65 63 6c 61 72 61   ^if the declara
c870: 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  tion of a column
c880: 20 77 69 74 68 0a 64 65 63 6c 61 72 65 64 20 74   with.declared t
c890: 79 70 65 20 22 49 4e 54 45 47 45 52 22 20 69 6e  ype "INTEGER" in
c8a0: 63 6c 75 64 65 73 20 61 6e 20 22 50 52 49 4d 41  cludes an "PRIMA
c8b0: 52 59 20 4b 45 59 20 44 45 53 43 22 20 63 6c 61  RY KEY DESC" cla
c8c0: 75 73 65 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  use, it does not
c8d0: 0a 62 65 63 6f 6d 65 20 61 6e 20 61 6c 69 61 73  .become an alias
c8e0: 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61   for the rowid a
c8f0: 6e 64 20 69 73 20 6e 6f 74 20 63 6c 61 73 73 69  nd is not classi
c900: 66 69 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67  fied as an integ
c910: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a  er primary key..
c920: 54 68 69 73 20 71 75 69 72 6b 20 69 73 20 6e 6f  This quirk is no
c930: 74 20 62 79 20 64 65 73 69 67 6e 2e 20 49 74 20  t by design. It 
c940: 69 73 20 64 75 65 20 74 6f 20 61 20 62 75 67 20  is due to a bug 
c950: 69 6e 20 65 61 72 6c 79 20 76 65 72 73 69 6f 6e  in early version
c960: 73 20 6f 66 20 53 51 4c 69 74 65 2e 0a 42 75 74  s of SQLite..But
c970: 20 66 69 78 69 6e 67 20 74 68 65 20 62 75 67 20   fixing the bug 
c980: 63 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 20  could result in 
c990: 62 61 63 6b 77 61 72 64 73 20 69 6e 63 6f 6d 70  backwards incomp
c9a0: 61 74 69 62 69 6c 69 74 69 65 73 2e 0a 48 65 6e  atibilities..Hen
c9b0: 63 65 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  ce, the original
c9c0: 20 62 65 68 61 76 69 6f 72 20 68 61 73 20 62 65   behavior has be
c9d0: 65 6e 20 72 65 74 61 69 6e 65 64 20 28 61 6e 64  en retained (and
c9e0: 20 64 6f 63 75 6d 65 6e 74 65 64 29 20 62 65 63   documented) bec
c9f0: 61 75 73 65 20 6f 64 64 0a 62 65 68 61 76 69 6f  ause odd.behavio
ca00: 72 20 69 6e 20 61 20 63 6f 72 6e 65 72 20 63 61  r in a corner ca
ca10: 73 65 20 69 73 20 66 61 72 20 62 65 74 74 65 72  se is far better
ca20: 20 74 68 61 6e 20 61 20 63 6f 6d 70 61 74 69 62   than a compatib
ca30: 69 6c 69 74 79 20 62 72 65 61 6b 2e 20 20 54 68  ility break.  Th
ca40: 69 73 20 6d 65 61 6e 73 0a 74 68 61 74 20 5e 28  is means.that ^(
ca50: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  the following th
ca60: 72 65 65 20 74 61 62 6c 65 20 64 65 63 6c 61 72  ree table declar
ca70: 61 74 69 6f 6e 73 20 61 6c 6c 20 63 61 75 73 65  ations all cause
ca80: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78 22 20   the column "x" 
ca90: 74 6f 20 62 65 20 61 6e 0a 61 6c 69 61 73 20 66  to be an.alias f
caa0: 6f 72 20 74 68 65 20 72 6f 77 69 64 20 28 61 6e  or the rowid (an
cab0: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
cac0: 20 6b 65 79 29 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69   key):..<ul>.<li
cad0: 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c  ><tt>CREATE TABL
cae0: 45 20 74 28 78 20 49 4e 54 45 47 45 52 20 50 52  E t(x INTEGER PR
caf0: 49 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20 79  IMARY KEY ASC, y
cb00: 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c  , z);</tt>.<li><
cb10: 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20  tt>CREATE TABLE 
cb20: 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 20  t(x INTEGER, y, 
cb30: 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78  z, PRIMARY KEY(x
cb40: 20 41 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 6c 69   ASC));</tt>.<li
cb50: 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c  ><tt>CREATE TABL
cb60: 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79  E t(x INTEGER, y
cb70: 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  , z, PRIMARY KEY
cb80: 28 78 20 44 45 53 43 29 29 3b 3c 2f 74 74 3e 0a  (x DESC));</tt>.
cb90: 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 42 75 74 20  </ul>)^..<p>But 
cba0: 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  ^(the following 
cbb0: 64 65 63 6c 61 72 61 74 69 6f 6e 20 64 6f 65 73  declaration does
cbc0: 20 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20 22   not result in "
cbd0: 78 22 20 62 65 69 6e 67 20 61 6e 20 61 6c 69 61  x" being an alia
cbe0: 73 20 66 6f 72 0a 74 68 65 20 72 6f 77 69 64 3a  s for.the rowid:
cbf0: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52  .<ul>.<li><tt>CR
cc00: 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49  EATE TABLE t(x I
cc10: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
cc20: 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b 3c  EY DESC, y, z);<
cc30: 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70  /tt>.</ul>)^..<p
cc40: 3e 5e 52 6f 77 69 64 20 76 61 6c 75 65 73 20 6d  >^Rowid values m
cc50: 61 79 20 62 65 20 6d 6f 64 69 66 69 65 64 20 75  ay be modified u
cc60: 73 69 6e 67 20 61 6e 20 55 50 44 41 54 45 20 73  sing an UPDATE s
cc70: 74 61 74 65 6d 65 6e 74 20 69 6e 20 74 68 65 20  tatement in the 
cc80: 73 61 6d 65 0a 77 61 79 20 61 73 20 61 6e 79 20  same.way as any 
cc90: 6f 74 68 65 72 20 63 6f 6c 75 6d 6e 20 76 61 6c  other column val
cca0: 75 65 20 63 61 6e 2c 20 65 69 74 68 65 72 20 75  ue can, either u
ccb0: 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20  sing one of the 
ccc0: 62 75 69 6c 74 2d 69 6e 20 61 6c 69 61 73 65 73  built-in aliases
ccd0: 0a 28 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22  .("rowid", "oid"
cce0: 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 29 20 6f   or "_rowid_") o
ccf0: 72 20 62 79 20 75 73 69 6e 67 20 61 6e 20 61 6c  r by using an al
cd00: 69 61 73 20 63 72 65 61 74 65 64 20 62 79 20 61  ias created by a
cd10: 6e 20 69 6e 74 65 67 65 72 0a 70 72 69 6d 61 72  n integer.primar
cd20: 79 20 6b 65 79 2e 20 5e 53 69 6d 69 6c 61 72 6c  y key. ^Similarl
cd30: 79 2c 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  y, an INSERT sta
cd40: 74 65 6d 65 6e 74 20 6d 61 79 20 70 72 6f 76 69  tement may provi
cd50: 64 65 20 61 20 76 61 6c 75 65 20 74 6f 20 75 73  de a value to us
cd60: 65 20 61 73 20 74 68 65 0a 72 6f 77 69 64 20 66  e as the.rowid f
cd70: 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73 65  or each row inse
cd80: 72 74 65 64 2e 20 5e 28 55 6e 6c 69 6b 65 20 6e  rted. ^(Unlike n
cd90: 6f 72 6d 61 6c 20 53 51 4c 69 74 65 20 63 6f 6c  ormal SQLite col
cda0: 75 6d 6e 73 2c 20 61 6e 20 69 6e 74 65 67 65 72  umns, an integer
cdb0: 20 70 72 69 6d 61 72 79 0a 6b 65 79 20 6f 72 20   primary.key or 
cdc0: 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 6d 75 73  rowid column mus
cdd0: 74 20 63 6f 6e 74 61 69 6e 20 69 6e 74 65 67 65  t contain intege
cde0: 72 20 76 61 6c 75 65 73 2e 20 49 6e 74 65 67 65  r values. Intege
cdf0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72  r primary key or
ce00: 20 72 6f 77 69 64 0a 63 6f 6c 75 6d 6e 73 20 61   rowid.columns a
ce10: 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20 68  re not able to h
ce20: 6f 6c 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  old floating poi
ce30: 6e 74 20 76 61 6c 75 65 73 2c 20 73 74 72 69 6e  nt values, strin
ce40: 67 73 2c 20 42 4c 4f 42 73 2c 20 6f 72 20 4e 55  gs, BLOBs, or NU
ce50: 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61  LLs.)^..<p>^If a
ce60: 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
ce70: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 73  nt attempts to s
ce80: 65 74 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72  et an integer pr
ce90: 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77  imary key or row
cea0: 69 64 20 63 6f 6c 75 6d 6e 0a 74 6f 20 61 20 4e  id column.to a N
ceb0: 55 4c 4c 20 6f 72 20 62 6c 6f 62 20 76 61 6c 75  ULL or blob valu
cec0: 65 2c 20 6f 72 20 74 6f 20 61 20 73 74 72 69 6e  e, or to a strin
ced0: 67 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20  g or real value 
cee0: 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c  that cannot be l
cef0: 6f 73 73 6c 65 73 73 6c 79 0a 63 6f 6e 76 65 72  osslessly.conver
cf00: 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ted to an intege
cf10: 72 2c 20 61 20 22 64 61 74 61 74 79 70 65 20 6d  r, a "datatype m
cf20: 69 73 6d 61 74 63 68 22 20 65 72 72 6f 72 20 6f  ismatch" error o
cf30: 63 63 75 72 73 20 61 6e 64 20 74 68 65 20 73 74  ccurs and the st
cf40: 61 74 65 6d 65 6e 74 0a 69 73 20 61 62 6f 72 74  atement.is abort
cf50: 65 64 2e 20 5e 49 66 20 61 6e 20 49 4e 53 45 52  ed. ^If an INSER
cf60: 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65  T statement atte
cf70: 6d 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20 61  mpts to insert a
cf80: 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f 72 20   blob value, or 
cf90: 61 20 73 74 72 69 6e 67 0a 6f 72 20 72 65 61 6c  a string.or real
cfa0: 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e   value that cann
cfb0: 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79  ot be losslessly
cfc0: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
cfd0: 20 69 6e 74 65 67 65 72 20 69 6e 74 6f 20 61 6e   integer into an
cfe0: 0a 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79  .integer primary
cff0: 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f   key or rowid co
d000: 6c 75 6d 6e 2c 20 61 20 22 64 61 74 61 74 79 70  lumn, a "datatyp
d010: 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72 6f  e mismatch" erro
d020: 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68 65  r occurs and the
d030: 0a 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 62  .statement is ab
d040: 6f 72 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 61  orted...<p>^If a
d050: 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
d060: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69  nt attempts to i
d070: 6e 73 65 72 74 20 61 20 4e 55 4c 4c 20 76 61 6c  nsert a NULL val
d080: 75 65 20 69 6e 74 6f 20 61 20 72 6f 77 69 64 20  ue into a rowid 
d090: 6f 72 0a 69 6e 74 65 67 65 72 20 70 72 69 6d 61  or.integer prima
d0a0: 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 2c 20 74  ry key column, t
d0b0: 68 65 20 73 79 73 74 65 6d 20 63 68 6f 6f 73 65  he system choose
d0c0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  s an integer val
d0d0: 75 65 20 74 6f 20 75 73 65 20 61 73 20 74 68 65  ue to use as the
d0e0: 0a 72 6f 77 69 64 20 61 75 74 6f 6d 61 74 69 63  .rowid automatic
d0f0: 61 6c 6c 79 2e 20 41 20 64 65 74 61 69 6c 65 64  ally. A detailed
d100: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20   description of 
d110: 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f 6e 65  how this is done
d120: 20 69 73 20 70 72 6f 76 69 64 65 64 0a 3c 61 20   is provided.<a 
d130: 68 72 65 66 3d 22 61 75 74 6f 69 6e 63 2e 68 74  href="autoinc.ht
d140: 6d 6c 22 3e 73 65 70 61 72 61 74 65 6c 79 3c 2f  ml">separately</
d150: 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68  a>.</p>..<p>^(Th
d160: 65 20 5b 70 61 72 65 6e 74 20 6b 65 79 5d 20 6f  e [parent key] o
d170: 66 20 61 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  f a [foreign key
d180: 20 63 6f 6e 73 74 72 61 69 6e 74 5d 20 69 73 20   constraint] is 
d190: 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 75  not allowed to.u
d1a0: 73 65 20 74 68 65 20 72 6f 77 69 64 2e 20 20 54  se the rowid.  T
d1b0: 68 65 20 70 61 72 65 6e 74 20 6b 65 79 20 6d 75  he parent key mu
d1c0: 73 74 20 75 73 65 64 20 6e 61 6d 65 64 20 63 6f  st used named co
d1d0: 6c 75 6d 6e 73 20 6f 6e 6c 79 2e 29 5e 3c 2f 70  lumns only.)^</p
d1e0: 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
d1f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d230: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
d240: 7b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 7d  {CREATE TRIGGER}
d250: 20 63 72 65 61 74 65 74 72 69 67 67 65 72 20 7b   createtrigger {
d260: 7b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 7d  {CREATE TRIGGER}
d270: 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
d280: 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65  leDiagram create
d290: 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 0a 3c 2f  -trigger-stmt.</
d2a0: 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52  tcl>..<p>^The CR
d2b0: 45 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61  EATE TRIGGER sta
d2c0: 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74  tement is used t
d2d0: 6f 20 61 64 64 20 74 72 69 67 67 65 72 73 20 74  o add triggers t
d2e0: 6f 20 74 68 65 20 0a 64 61 74 61 62 61 73 65 20  o the .database 
d2f0: 73 63 68 65 6d 61 2e 20 5e 54 72 69 67 67 65 72  schema. ^Trigger
d300: 73 20 61 72 65 20 64 61 74 61 62 61 73 65 20 6f  s are database o
d310: 70 65 72 61 74 69 6f 6e 73 20 0a 74 68 61 74 20  perations .that 
d320: 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  are automaticall
d330: 79 20 70 65 72 66 6f 72 6d 65 64 20 77 68 65 6e  y performed when
d340: 20 61 20 73 70 65 63 69 66 69 65 64 20 64 61 74   a specified dat
d350: 61 62 61 73 65 20 65 76 65 6e 74 0a 6f 63 63 75  abase event.occu
d360: 72 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  rs.  </p>..<p>^A
d370: 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20   trigger may be 
d380: 73 70 65 63 69 66 69 65 64 20 74 6f 20 66 69 72  specified to fir
d390: 65 20 77 68 65 6e 65 76 65 72 20 61 20 5b 44 45  e whenever a [DE
d3a0: 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c  LETE], [INSERT],
d3b0: 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 66 20  .or [UPDATE] of 
d3c0: 61 0a 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a.particular dat
d3d0: 61 62 61 73 65 20 74 61 62 6c 65 20 6f 63 63 75  abase table occu
d3e0: 72 73 2c 20 6f 72 20 77 68 65 6e 65 76 65 72 20  rs, or whenever 
d3f0: 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 63 63 75  an [UPDATE] occu
d400: 72 73 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20  rs on.on one or 
d410: 6d 6f 72 65 20 73 70 65 63 69 66 69 65 64 20 63  more specified c
d420: 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c  olumns of a tabl
d430: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74  e.</p>..<p>^At t
d440: 68 69 73 20 74 69 6d 65 20 53 51 4c 69 74 65 20  his time SQLite 
d450: 73 75 70 70 6f 72 74 73 20 6f 6e 6c 79 20 46 4f  supports only FO
d460: 52 20 45 41 43 48 20 52 4f 57 20 74 72 69 67 67  R EACH ROW trigg
d470: 65 72 73 2c 20 6e 6f 74 20 46 4f 52 20 45 41 43  ers, not FOR EAC
d480: 48 0a 53 54 41 54 45 4d 45 4e 54 20 74 72 69 67  H.STATEMENT trig
d490: 67 65 72 73 2e 20 5e 48 65 6e 63 65 20 65 78 70  gers. ^Hence exp
d4a0: 6c 69 63 69 74 6c 79 20 73 70 65 63 69 66 79 69  licitly specifyi
d4b0: 6e 67 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20  ng FOR EACH ROW 
d4c0: 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f  is optional..^FO
d4d0: 52 20 45 41 43 48 20 52 4f 57 20 69 6d 70 6c 69  R EACH ROW impli
d4e0: 65 73 20 74 68 61 74 20 74 68 65 20 53 51 4c 20  es that the SQL 
d4f0: 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
d500: 66 69 65 64 20 69 6e 20 74 68 65 20 74 72 69 67  fied in the trig
d510: 67 65 72 0a 6d 61 79 20 62 65 20 65 78 65 63 75  ger.may be execu
d520: 74 65 64 20 28 64 65 70 65 6e 64 69 6e 67 20 6f  ted (depending o
d530: 6e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73  n the WHEN claus
d540: 65 29 20 66 6f 72 20 65 61 63 68 20 64 61 74 61  e) for each data
d550: 62 61 73 65 20 72 6f 77 20 62 65 69 6e 67 0a 69  base row being.i
d560: 6e 73 65 72 74 65 64 2c 20 75 70 64 61 74 65 64  nserted, updated
d570: 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74   or deleted by t
d580: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75  he statement cau
d590: 73 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  sing the trigger
d5a0: 20 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c   to fire.</p>..<
d5b0: 70 3e 5e 28 42 6f 74 68 20 74 68 65 20 57 48 45  p>^(Both the WHE
d5c0: 4e 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65  N clause and the
d5d0: 20 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73   trigger actions
d5e0: 20 6d 61 79 20 61 63 63 65 73 73 20 65 6c 65 6d   may access elem
d5f0: 65 6e 74 73 20 6f 66 20 0a 74 68 65 20 72 6f 77  ents of .the row
d600: 20 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2c   being inserted,
d610: 20 64 65 6c 65 74 65 64 20 6f 72 20 75 70 64 61   deleted or upda
d620: 74 65 64 20 75 73 69 6e 67 20 72 65 66 65 72 65  ted using refere
d630: 6e 63 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  nces of the form
d640: 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e   ."NEW.<i>column
d650: 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22  -name</i>" and "
d660: 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61  OLD.<i>column-na
d670: 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c  me</i>", where.<
d680: 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69  i>column-name</i
d690: 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  > is the name of
d6a0: 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74   a column from t
d6b0: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  he table that th
d6c0: 65 20 74 72 69 67 67 65 72 0a 69 73 20 61 73 73  e trigger.is ass
d6d0: 6f 63 69 61 74 65 64 20 77 69 74 68 2e 29 5e 20  ociated with.)^ 
d6e0: 5e 28 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72 65  ^(OLD and NEW re
d6f0: 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c  ferences may onl
d700: 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 72 69  y be used in tri
d710: 67 67 65 72 73 20 6f 6e 0a 65 76 65 6e 74 73 20  ggers on.events 
d720: 66 6f 72 20 77 68 69 63 68 20 74 68 65 79 20 61  for which they a
d730: 72 65 20 72 65 6c 65 76 61 6e 74 2c 20 61 73 20  re relevant, as 
d740: 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74  follows:</p>..<t
d750: 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
d760: 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74  llpadding=10>.<t
d770: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
d780: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
d790: 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49  " width=120><i>I
d7a0: 4e 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c  NSERT</i></td>.<
d7b0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
d7c0: 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 61  NEW references a
d7d0: 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f  re valid</td>.</
d7e0: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  tr>.<tr>.<td val
d7f0: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
d800: 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32  "right" width=12
d810: 30 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c  0><i>UPDATE</i><
d820: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
d830: 22 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c  "top">NEW and OL
d840: 44 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65  D references are
d850: 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72   valid</td>.</tr
d860: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
d870: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
d880: 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e  ight" width=120>
d890: 3c 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74  <i>DELETE</i></t
d8a0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
d8b0: 6f 70 22 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63  op">OLD referenc
d8c0: 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64  es are valid</td
d8d0: 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e  >.</tr>.</table>
d8e0: 0a 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20  .</p>)^..<p>^If 
d8f0: 61 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73  a WHEN clause is
d900: 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53   supplied, the S
d910: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
d920: 65 63 69 66 69 65 64 0a 61 72 65 20 6f 6e 6c 79  ecified.are only
d930: 20 65 78 65 63 75 74 65 64 20 69 66 20 74 68 65   executed if the
d940: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20   WHEN clause is 
d950: 74 72 75 65 2e 0a 5e 49 66 20 6e 6f 20 57 48 45  true..^If no WHE
d960: 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70  N clause is supp
d970: 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74  lied, the SQL st
d980: 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 65 78 65  atements.are exe
d990: 63 75 74 65 64 20 65 76 65 72 79 20 74 69 6d 65  cuted every time
d9a0: 20 74 68 65 20 74 72 69 67 67 65 72 20 66 69 72   the trigger fir
d9b0: 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  es.</p>..<p>^The
d9c0: 20 42 45 46 4f 52 45 20 6f 72 20 41 46 54 45 52   BEFORE or AFTER
d9d0: 20 6b 65 79 77 6f 72 64 20 64 65 74 65 72 6d 69   keyword determi
d9e0: 6e 65 73 20 77 68 65 6e 20 74 68 65 20 74 72 69  nes when the tri
d9f0: 67 67 65 72 20 61 63 74 69 6f 6e 73 0a 77 69 6c  gger actions.wil
da00: 6c 20 62 65 20 65 78 65 63 75 74 65 64 20 72 65  l be executed re
da10: 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e  lative to the in
da20: 73 65 72 74 69 6f 6e 2c 20 6d 6f 64 69 66 69 63  sertion, modific
da30: 61 74 69 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c  ation or removal
da40: 20 6f 66 20 74 68 65 0a 61 73 73 6f 63 69 61 74   of the.associat
da50: 65 64 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ed row.</p>..<p>
da60: 5e 41 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  ^An [ON CONFLICT
da70: 5d 20 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20  ] clause may be 
da80: 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
da90: 74 20 6f 66 20 61 6e 20 5b 55 50 44 41 54 45 5d  t of an [UPDATE]
daa0: 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 61 63 74   or [INSERT].act
dab0: 69 6f 6e 20 77 69 74 68 69 6e 20 74 68 65 20 62  ion within the b
dac0: 6f 64 79 20 6f 66 20 74 68 65 20 74 72 69 67 67  ody of the trigg
dad0: 65 72 2e 0a 5e 48 6f 77 65 76 65 72 20 69 66 20  er..^However if 
dae0: 61 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  an [ON CONFLICT]
daf0: 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
db00: 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
db10: 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63  .the statement c
db20: 61 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67  ausing the trigg
db30: 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68 65 6e  er to fire, then
db40: 20 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64 6c 69   conflict handli
db50: 6e 67 0a 70 6f 6c 69 63 79 20 6f 66 20 74 68 65  ng.policy of the
db60: 20 6f 75 74 65 72 20 73 74 61 74 65 6d 65 6e 74   outer statement
db70: 20 69 73 20 75 73 65 64 20 69 6e 73 74 65 61 64   is used instead
db80: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67  .</p>..<p>^Trigg
db90: 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  ers are automati
dba0: 63 61 6c 6c 79 20 5b 44 52 4f 50 20 54 52 49 47  cally [DROP TRIG
dbb0: 47 45 52 20 7c 20 64 72 6f 70 70 65 64 5d 0a 77  GER | dropped].w
dbc0: 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68  hen the table th
dbd0: 61 74 20 74 68 65 79 20 61 72 65 20 0a 61 73 73  at they are .ass
dbe0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 28 74 68  ociated with (th
dbf0: 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  e <i>table-name<
dc00: 2f 69 3e 20 74 61 62 6c 65 29 20 69 73 20 0a 5b  /i> table) is .[
dc10: 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f  DROP TABLE | dro
dc20: 70 70 65 64 5d 2e 20 20 5e 48 6f 77 65 76 65 72  pped].  ^However
dc30: 20 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20   if the trigger 
dc40: 61 63 74 69 6f 6e 73 20 72 65 66 65 72 65 6e 63  actions referenc
dc50: 65 0a 6f 74 68 65 72 20 74 61 62 6c 65 73 2c 20  e.other tables, 
dc60: 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20 6e  the trigger is n
dc70: 6f 74 20 64 72 6f 70 70 65 64 20 6f 72 20 6d 6f  ot dropped or mo
dc80: 64 69 66 69 65 64 20 69 66 20 74 68 6f 73 65 20  dified if those 
dc90: 6f 74 68 65 72 0a 74 61 62 6c 65 73 20 61 72 65  other.tables are
dca0: 20 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64   [DROP TABLE | d
dcb0: 72 6f 70 70 65 64 5d 20 6f 72 20 5b 41 4c 54 45  ropped] or [ALTE
dcc0: 52 20 54 41 42 4c 45 20 7c 20 6d 6f 64 69 66 69  R TABLE | modifi
dcd0: 65 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72  ed].</p>..<p>^Tr
dce0: 69 67 67 65 72 73 20 61 72 65 20 72 65 6d 6f 76  iggers are remov
dcf0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 52  ed using the [DR
dd00: 4f 50 20 54 52 49 47 47 45 52 5d 20 73 74 61 74  OP TRIGGER] stat
dd10: 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  ement.</p>..<h3>
dd20: 53 79 6e 74 61 78 20 52 65 73 74 72 69 63 74 69  Syntax Restricti
dd30: 6f 6e 73 20 4f 6e 20 55 50 44 41 54 45 2c 20 44  ons On UPDATE, D
dd40: 45 4c 45 54 45 2c 20 61 6e 64 20 49 4e 53 45 52  ELETE, and INSER
dd50: 54 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74  T Statements Wit
dd60: 68 69 6e 0a 20 20 20 20 54 72 69 67 67 65 72 73  hin.    Triggers
dd70: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b  </h3>..<p>^The [
dd80: 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45  UPDATE], [DELETE
dd90: 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 0a  ], and [INSERT].
dda0: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
ddb0: 6e 20 74 72 69 67 67 65 72 73 20 64 6f 20 6e 6f  n triggers do no
ddc0: 74 20 73 75 70 70 6f 72 74 0a 74 68 65 20 66 75  t support.the fu
ddd0: 6c 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 5b 55  ll syntax for [U
dde0: 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d  PDATE], [DELETE]
ddf0: 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 20 73  , and [INSERT] s
de00: 74 61 74 65 6d 65 6e 74 73 2e 20 20 54 68 65 20  tatements.  The 
de10: 66 6f 6c 6c 6f 77 69 6e 67 0a 72 65 73 74 72 69  following.restri
de20: 63 74 69 6f 6e 73 20 61 70 70 6c 79 3a 3c 2f 70  ctions apply:</p
de30: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a  >..<ul>.<li><p>.
de40: 20 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f 66 20    ^(The name of 
de50: 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
de60: 6d 6f 64 69 66 69 65 64 20 69 6e 20 61 6e 20 5b  modified in an [
de70: 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45  UPDATE], [DELETE
de80: 5d 2c 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 20  ], or [INSERT]. 
de90: 20 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20   statement must 
dea0: 62 65 20 61 6e 20 75 6e 71 75 61 6c 69 66 69 65  be an unqualifie
deb0: 64 20 74 61 62 6c 65 20 6e 61 6d 65 2e 20 20 49  d table name.  I
dec0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 6f  n other words, o
ded0: 6e 65 20 6d 75 73 74 0a 20 20 75 73 65 20 6a 75  ne must.  use ju
dee0: 73 74 20 22 3c 69 3e 74 61 62 6c 65 6e 61 6d 65  st "<i>tablename
def0: 3c 2f 69 3e 22 20 6e 6f 74 20 22 3c 69 3e 64 61  </i>" not "<i>da
df00: 74 61 62 61 73 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f  tabase</i><b>.</
df10: 62 3e 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f  b><i>tablename</
df20: 69 3e 22 0a 20 20 77 68 65 6e 20 73 70 65 63 69  i>".  when speci
df30: 66 79 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2e  fying the table.
df40: 29 5e 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  )^ </p></li>..<l
df50: 69 3e 3c 70 3e 0a 20 5e 46 6f 72 20 6e 6f 6e 2d  i><p>. ^For non-
df60: 54 45 4d 50 20 74 72 69 67 67 65 72 73 2c 0a 20  TEMP triggers,. 
df70: 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
df80: 20 6d 6f 64 69 66 69 65 64 20 6f 72 20 71 75 65   modified or que
df90: 72 69 65 64 20 6d 75 73 74 20 65 78 69 73 74 20  ried must exist 
dfa0: 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61  in the.  same da
dfb0: 74 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61  tabase as the ta
dfc0: 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
dfd0: 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
dfe0: 20 69 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20   is attached..  
dff0: 5e 28 54 45 4d 50 20 74 72 69 67 67 65 72 73 20  ^(TEMP triggers 
e000: 61 72 65 20 6e 6f 74 20 73 75 62 6a 65 63 74 20  are not subject 
e010: 74 6f 20 74 68 65 20 73 61 6d 65 2d 64 61 74 61  to the same-data
e020: 62 61 73 65 20 72 75 6c 65 2e 20 20 41 20 54 45  base rule.  A TE
e030: 4d 50 0a 20 20 74 72 69 67 67 65 72 20 69 73 20  MP.  trigger is 
e040: 61 6c 6c 6f 77 65 64 20 74 6f 20 71 75 65 72 79  allowed to query
e050: 20 6f 72 20 6d 6f 64 69 66 79 20 61 6e 79 20 74   or modify any t
e060: 61 62 6c 65 20 69 6e 20 61 6e 79 20 5b 41 54 54  able in any [ATT
e070: 41 43 48 5d 2d 65 64 20 64 61 74 61 62 61 73 65  ACH]-ed database
e080: 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  .)^.  </p></li>.
e090: 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20  .<li><p>.  ^The 
e0a0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 69 3e  "INSERT INTO <i>
e0b0: 74 61 62 6c 65 3c 2f 69 3e 20 44 45 46 41 55 4c  table</i> DEFAUL
e0c0: 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f  T VALUES" form o
e0d0: 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 73  f the [INSERT] s
e0e0: 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 6e 6f  tatement.  is no
e0f0: 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20 20 3c  t supported..  <
e100: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
e110: 3e 0a 20 20 5e 54 68 65 20 49 4e 44 45 58 45 44  >.  ^The INDEXED
e120: 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45   BY and NOT INDE
e130: 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20  XED clauses are 
e140: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 66 6f  not supported fo
e150: 72 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 0a 20  r [UPDATE] and. 
e160: 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d   [DELETE] statem
e170: 65 6e 74 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  ents..  </p></li
e180: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54  >..<li><p>.  ^(T
e190: 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  he ORDER BY and 
e1a0: 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20 6f 6e  LIMIT clauses on
e1b0: 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44   [UPDATE] and [D
e1c0: 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  ELETE] statement
e1d0: 73 20 61 72 65 20 6e 6f 74 0a 20 20 73 75 70 70  s are not.  supp
e1e0: 6f 72 74 65 64 2e 20 20 4f 52 44 45 52 20 42 59  orted.  ORDER BY
e1f0: 20 61 6e 64 20 4c 49 4d 49 54 20 61 72 65 20 6e   and LIMIT are n
e200: 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 73 75 70 70  ot normally supp
e210: 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54  orted for [UPDAT
e220: 45 5d 20 6f 72 0a 20 20 5b 44 45 4c 45 54 45 5d  E] or.  [DELETE]
e230: 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74 20   in any context 
e240: 62 75 74 20 63 61 6e 20 62 65 20 65 6e 61 62 6c  but can be enabl
e250: 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c  ed for top-level
e260: 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20 75 73   statements.  us
e270: 69 6e 67 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  ing the [SQLITE_
e280: 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
e290: 4c 45 54 45 5f 4c 49 4d 49 54 5d 20 63 6f 6d 70  LETE_LIMIT] comp
e2a0: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e  ile-time option.
e2b0: 20 20 48 6f 77 65 76 65 72 2c 0a 20 20 74 68 61    However,.  tha
e2c0: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  t compile-time o
e2d0: 70 74 69 6f 6e 20 6f 6e 6c 79 20 61 70 70 6c 69  ption only appli
e2e0: 65 73 20 74 6f 20 74 6f 70 2d 6c 65 76 65 6c 20  es to top-level 
e2f0: 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45  [UPDATE] and [DE
e300: 4c 45 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e  LETE].  statemen
e310: 74 73 2c 20 6e 6f 74 20 5b 55 50 44 41 54 45 5d  ts, not [UPDATE]
e320: 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74   and [DELETE] st
e330: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
e340: 74 72 69 67 67 65 72 73 2e 29 5e 0a 20 20 3c 2f  triggers.)^.  </
e350: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
e360: 0a 20 20 5e 5b 63 6f 6d 6d 6f 6e 2d 74 61 62 6c  .  ^[common-tabl
e370: 65 2d 65 78 70 72 65 73 73 69 6f 6e 7c 43 6f 6d  e-expression|Com
e380: 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
e390: 73 69 6f 6e 5d 20 61 72 65 20 6e 6f 74 20 73 75  sion] are not su
e3a0: 70 70 6f 72 74 65 64 20 66 6f 72 0a 20 20 73 74  pported for.  st
e3b0: 61 74 65 6d 65 6e 74 73 20 69 6e 73 69 64 65 20  atements inside 
e3c0: 6f 66 20 74 72 69 67 67 65 72 73 2e 0a 20 20 3c  of triggers..  <
e3d0: 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a  /p></li>.</ul>..
e3e0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
e3f0: 20 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72 69 67   instead_of_trig
e400: 67 65 72 20 7b 49 4e 53 54 45 41 44 20 4f 46 7d  ger {INSTEAD OF}
e410: 20 7b 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69   {INSTEAD OF tri
e420: 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  gger}</tcl>.<h3>
e430: 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67  INSTEAD OF trigg
e440: 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 72  ers</h3>..<p>^Tr
e450: 69 67 67 65 72 73 20 6d 61 79 20 62 65 20 63 72  iggers may be cr
e460: 65 61 74 65 64 20 6f 6e 20 5b 76 69 65 77 73 5d  eated on [views]
e470: 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 6f 72 64  , as well as ord
e480: 69 6e 61 72 79 20 74 61 62 6c 65 73 2c 20 62 79  inary tables, by
e490: 0a 73 70 65 63 69 66 79 69 6e 67 20 49 4e 53 54  .specifying INST
e4a0: 45 41 44 20 4f 46 20 69 6e 20 74 68 65 20 43 52  EAD OF in the CR
e4b0: 45 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61  EATE TRIGGER sta
e4c0: 74 65 6d 65 6e 74 2e 20 0a 5e 49 66 20 6f 6e 65  tement. .^If one
e4d0: 20 6f 72 20 6d 6f 72 65 20 4f 4e 20 49 4e 53 45   or more ON INSE
e4e0: 52 54 2c 20 4f 4e 20 44 45 4c 45 54 45 0a 6f 72  RT, ON DELETE.or
e4f0: 20 4f 4e 20 55 50 44 41 54 45 20 74 72 69 67 67   ON UPDATE trigg
e500: 65 72 73 20 61 72 65 20 64 65 66 69 6e 65 64 20  ers are defined 
e510: 6f 6e 20 61 20 76 69 65 77 2c 20 74 68 65 6e 20  on a view, then 
e520: 69 74 20 69 73 20 6e 6f 74 20 61 6e 0a 65 72 72  it is not an.err
e530: 6f 72 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e  or to execute an
e540: 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20   INSERT, DELETE 
e550: 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
e560: 65 6e 74 20 6f 6e 20 74 68 65 20 76 69 65 77 2c  ent on the view,
e570: 20 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20   .respectively. 
e580: 20 5e 49 6e 73 74 65 61 64 2c 0a 65 78 65 63 75   ^Instead,.execu
e590: 74 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20  ting an INSERT, 
e5a0: 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
e5b0: 20 6f 6e 20 74 68 65 20 76 69 65 77 20 63 61 75   on the view cau
e5c0: 73 65 73 20 74 68 65 20 61 73 73 6f 63 69 61 74  ses the associat
e5d0: 65 64 0a 74 72 69 67 67 65 72 73 20 74 6f 20 66  ed.triggers to f
e5e0: 69 72 65 2e 20 5e 54 68 65 20 72 65 61 6c 20 74  ire. ^The real t
e5f0: 61 62 6c 65 73 20 75 6e 64 65 72 6c 79 69 6e 67  ables underlying
e600: 20 74 68 65 20 76 69 65 77 20 61 72 65 20 6e 6f   the view are no
e610: 74 20 6d 6f 64 69 66 69 65 64 0a 28 65 78 63 65  t modified.(exce
e620: 70 74 20 70 6f 73 73 69 62 6c 79 20 65 78 70 6c  pt possibly expl
e630: 69 63 69 74 6c 79 2c 20 62 79 20 61 20 74 72 69  icitly, by a tri
e640: 67 67 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f  gger program).</
e650: 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61  p>..<p>^Note tha
e660: 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  t the [sqlite3_c
e670: 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 20 5b 73  hanges()] and [s
e680: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
e690: 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63  nges()] interfac
e6a0: 65 73 0a 64 6f 20 6e 6f 74 20 63 6f 75 6e 74 20  es.do not count 
e6b0: 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67  INSTEAD OF trigg
e6c0: 65 72 20 66 69 72 69 6e 67 73 2c 20 62 75 74 20  er firings, but 
e6d0: 74 68 65 0a 5b 63 6f 75 6e 74 5f 63 68 61 6e 67  the.[count_chang
e6e0: 65 73 20 70 72 61 67 6d 61 5d 20 64 6f 65 73 20  es pragma] does 
e6f0: 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46  count INSTEAD OF
e700: 20 74 72 69 67 67 65 72 20 66 69 72 69 6e 67 2e   trigger firing.
e710: 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 6f 6d 65 20 45  </p>..<h3>Some E
e720: 78 61 6d 70 6c 65 20 54 72 69 67 67 65 72 73 3c  xample Triggers<
e730: 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 73 73 75 6d  /h3>..<p>^(Assum
e740: 69 6e 67 20 74 68 61 74 20 63 75 73 74 6f 6d 65  ing that custome
e750: 72 20 72 65 63 6f 72 64 73 20 61 72 65 20 73 74  r records are st
e760: 6f 72 65 64 20 69 6e 20 74 68 65 20 22 63 75 73  ored in the "cus
e770: 74 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c 20 61  tomers" table, a
e780: 6e 64 0a 74 68 61 74 20 6f 72 64 65 72 20 72 65  nd.that order re
e790: 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65 64  cords are stored
e7a0: 20 69 6e 20 74 68 65 20 22 6f 72 64 65 72 73 22   in the "orders"
e7b0: 20 74 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c 6c   table, the foll
e7c0: 6f 77 69 6e 67 0a 55 50 44 41 54 45 20 74 72 69  owing.UPDATE tri
e7d0: 67 67 65 72 0a 65 6e 73 75 72 65 73 20 74 68 61  gger.ensures tha
e7e0: 74 20 61 6c 6c 20 61 73 73 6f 63 69 61 74 65 64  t all associated
e7f0: 20 6f 72 64 65 72 73 20 61 72 65 20 72 65 64 69   orders are redi
e800: 72 65 63 74 65 64 20 77 68 65 6e 20 61 20 63 75  rected when a cu
e810: 73 74 6f 6d 65 72 20 63 68 61 6e 67 65 73 0a 68  stomer changes.h
e820: 69 73 20 6f 72 20 68 65 72 20 61 64 64 72 65 73  is or her addres
e830: 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61  s:</p>..<tcl>Exa
e840: 6d 70 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 52  mple {.CREATE TR
e850: 49 47 47 45 52 20 75 70 64 61 74 65 5f 63 75 73  IGGER update_cus
e860: 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 55 50  tomer_address UP
e870: 44 41 54 45 20 4f 46 20 61 64 64 72 65 73 73 20  DATE OF address 
e880: 4f 4e 20 63 75 73 74 6f 6d 65 72 73 20 0a 20 20  ON customers .  
e890: 42 45 47 49 4e 0a 20 20 20 20 55 50 44 41 54 45  BEGIN.    UPDATE
e8a0: 20 6f 72 64 65 72 73 20 53 45 54 20 61 64 64 72   orders SET addr
e8b0: 65 73 73 20 3d 20 6e 65 77 2e 61 64 64 72 65 73  ess = new.addres
e8c0: 73 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72  s WHERE customer
e8d0: 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65  _name = old.name
e8e0: 3b 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e  ;.  END;.}</tcl>
e8f0: 0a 0a 3c 70 3e 57 69 74 68 20 74 68 69 73 20 74  ..<p>With this t
e900: 72 69 67 67 65 72 20 69 6e 73 74 61 6c 6c 65 64  rigger installed
e910: 2c 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20  , executing the 
e920: 73 74 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a  statement:</p>..
e930: 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55  <tcl>Example {.U
e940: 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72 73 20  PDATE customers 
e950: 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 27 31  SET address = '1
e960: 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45   Main St.' WHERE
e970: 20 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f   name = 'Jack Jo
e980: 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c  nes';.}</tcl>..<
e990: 70 3e 63 61 75 73 65 73 20 74 68 65 20 66 6f 6c  p>causes the fol
e9a0: 6c 6f 77 69 6e 67 20 74 6f 20 62 65 20 61 75 74  lowing to be aut
e9b0: 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78 65 63 75  omatically execu
e9c0: 74 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45  ted:</p>..<tcl>E
e9d0: 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20  xample {.UPDATE 
e9e0: 6f 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65  orders SET addre
e9f0: 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e  ss = '1 Main St.
ea00: 27 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72  ' WHERE customer
ea10: 5f 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f  _name = 'Jack Jo
ea20: 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 29 5e 0a  nes';.}</tcl>)^.
ea30: 0a 3c 70 3e 46 6f 72 20 61 6e 20 65 78 61 6d 70  .<p>For an examp
ea40: 6c 65 20 6f 66 20 61 6e 20 49 4e 53 54 45 41 44  le of an INSTEAD
ea50: 20 4f 46 20 74 72 69 67 67 65 72 2c 20 63 6f 6e   OF trigger, con
ea60: 73 69 64 65 72 20 74 68 65 20 66 6f 6c 6c 6f 77  sider the follow
ea70: 69 6e 67 20 73 63 68 65 6d 61 3a 0a 0a 3c 74 63  ing schema:..<tc
ea80: 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41  l>Example {.CREA
ea90: 54 45 20 54 41 42 4c 45 20 63 75 73 74 6f 6d 65  TE TABLE custome
eaa0: 72 28 0a 20 20 63 75 73 74 5f 69 64 20 49 4e 54  r(.  cust_id INT
eab0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
eac0: 2c 0a 20 20 63 75 73 74 5f 6e 61 6d 65 20 54 45  ,.  cust_name TE
ead0: 58 54 2c 0a 20 20 63 75 73 74 5f 61 64 64 72 20  XT,.  cust_addr 
eae0: 54 45 58 54 0a 29 3b 0a 43 52 45 41 54 45 20 56  TEXT.);.CREATE V
eaf0: 49 45 57 20 63 75 73 74 6f 6d 65 72 5f 61 64 64  IEW customer_add
eb00: 72 65 73 73 20 41 53 0a 20 20 20 53 45 4c 45 43  ress AS.   SELEC
eb10: 54 20 63 75 73 74 5f 69 64 2c 20 63 75 73 74 5f  T cust_id, cust_
eb20: 61 64 64 72 20 46 52 4f 4d 20 63 75 73 74 6f 6d  addr FROM custom
eb30: 65 72 3b 0a 43 52 45 41 54 45 20 54 52 49 47 47  er;.CREATE TRIGG
eb40: 45 52 20 63 75 73 74 5f 61 64 64 72 5f 63 68 6e  ER cust_addr_chn
eb50: 67 0a 49 4e 53 54 45 41 44 20 4f 46 20 55 50 44  g.INSTEAD OF UPD
eb60: 41 54 45 20 4f 46 20 63 75 73 74 5f 61 64 64 72  ATE OF cust_addr
eb70: 20 4f 4e 20 63 75 73 74 6f 6d 65 72 5f 61 64 64   ON customer_add
eb80: 72 65 73 73 0a 42 45 47 49 4e 0a 20 20 55 50 44  ress.BEGIN.  UPD
eb90: 41 54 45 20 63 75 73 74 6f 6d 65 72 20 53 45 54  ATE customer SET
eba0: 20 63 75 73 74 5f 61 64 64 72 3d 4e 45 57 2e 63   cust_addr=NEW.c
ebb0: 75 73 74 5f 61 64 64 72 0a 20 20 20 57 48 45 52  ust_addr.   WHER
ebc0: 45 20 63 75 73 74 5f 69 64 3d 4e 45 57 2e 63 75  E cust_id=NEW.cu
ebd0: 73 74 5f 69 64 3b 0a 45 4e 44 3b 0a 7d 3c 2f 74  st_id;.END;.}</t
ebe0: 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68 65  cl>..<p>With the
ebf0: 20 73 63 68 65 6d 61 20 61 62 6f 76 65 2c 20 61   schema above, a
ec00: 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 74 68   statement of th
ec10: 65 20 66 6f 72 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63  e form:</p>..<tc
ec20: 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41  l>Example {.UPDA
ec30: 54 45 20 63 75 73 74 6f 6d 65 72 5f 61 64 64 72  TE customer_addr
ec40: 65 73 73 20 53 45 54 20 63 75 73 74 5f 61 64 64  ess SET cust_add
ec50: 72 3d 24 6e 65 77 5f 61 64 64 72 65 73 73 20 57  r=$new_address W
ec60: 48 45 52 45 20 63 75 73 74 5f 69 64 3d 24 63 75  HERE cust_id=$cu
ec70: 73 74 5f 69 64 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a  st_id;.}</tcl>..
ec80: 3c 70 3e 43 61 75 73 65 73 20 74 68 65 20 63 75  <p>Causes the cu
ec90: 73 74 6f 6d 65 72 2e 63 75 73 74 5f 61 64 64 72  stomer.cust_addr
eca0: 20 66 69 65 6c 64 20 74 6f 20 62 65 20 75 70 64   field to be upd
ecb0: 61 74 65 64 20 66 6f 72 20 61 20 73 70 65 63 69  ated for a speci
ecc0: 66 69 63 0a 63 75 73 74 6f 6d 65 72 20 65 6e 74  fic.customer ent
ecd0: 72 79 20 74 68 61 74 20 68 61 73 20 63 75 73 74  ry that has cust
ece0: 6f 6d 65 72 2e 63 75 73 74 5f 69 64 20 65 71 75  omer.cust_id equ
ecf0: 61 6c 20 74 6f 20 74 68 65 20 24 63 75 73 74 5f  al to the $cust_
ed00: 69 64 20 70 61 72 61 6d 65 74 65 72 2e 0a 4e 6f  id parameter..No
ed10: 74 65 20 68 6f 77 20 74 68 65 20 76 61 6c 75 65  te how the value
ed20: 73 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68  s assigned to th
ed30: 65 20 76 69 65 77 20 61 72 65 20 6d 61 64 65 20  e view are made 
ed40: 61 76 61 69 6c 61 62 6c 65 20 61 73 20 66 69 65  available as fie
ed50: 6c 64 0a 69 6e 20 74 68 65 20 73 70 65 63 69 61  ld.in the specia
ed60: 6c 20 22 4e 45 57 22 20 74 61 62 6c 65 20 77 69  l "NEW" table wi
ed70: 74 68 69 6e 20 74 68 65 20 74 72 69 67 67 65 72  thin the trigger
ed80: 20 62 6f 64 79 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   body.</p>..<tcl
ed90: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 64  >hd_fragment und
eda0: 65 66 5f 62 65 66 6f 72 65 20 7b 75 6e 64 65 66  ef_before {undef
edb0: 69 6e 65 64 20 42 45 46 4f 52 45 20 74 72 69 67  ined BEFORE trig
edc0: 67 65 72 20 62 65 68 61 76 69 6f 72 7d 3c 2f 74  ger behavior}</t
edd0: 63 6c 3e 0a 3c 68 33 3e 43 61 75 74 69 6f 6e 73  cl>.<h3>Cautions
ede0: 20 4f 6e 20 54 68 65 20 55 73 65 20 4f 66 20 42   On The Use Of B
edf0: 45 46 4f 52 45 20 74 72 69 67 67 65 72 73 3c 2f  EFORE triggers</
ee00: 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 42 45 46  h3>..<p>If a BEF
ee10: 4f 52 45 20 55 50 44 41 54 45 20 6f 72 20 42 45  ORE UPDATE or BE
ee20: 46 4f 52 45 20 44 45 4c 45 54 45 20 74 72 69 67  FORE DELETE trig
ee30: 67 65 72 20 6d 6f 64 69 66 69 65 73 20 6f 72 20  ger modifies or 
ee40: 64 65 6c 65 74 65 73 20 61 20 72 6f 77 0a 74 68  deletes a row.th
ee50: 61 74 20 77 61 73 20 74 6f 20 68 61 76 65 20 62  at was to have b
ee60: 65 65 6e 20 75 70 64 61 74 65 64 20 6f 72 20 64  een updated or d
ee70: 65 6c 65 74 65 64 2c 20 74 68 65 6e 20 74 68 65  eleted, then the
ee80: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73   result of the s
ee90: 75 62 73 65 71 75 65 6e 74 0a 75 70 64 61 74 65  ubsequent.update
eea0: 20 6f 72 20 64 65 6c 65 74 65 20 6f 70 65 72 61   or delete opera
eeb0: 74 69 6f 6e 20 69 73 20 75 6e 64 65 66 69 6e 65  tion is undefine
eec0: 64 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c  d.  Furthermore,
eed0: 20 69 66 20 61 20 42 45 46 4f 52 45 20 74 72 69   if a BEFORE tri
eee0: 67 67 65 72 0a 6d 6f 64 69 66 69 65 73 20 6f 72  gger.modifies or
eef0: 20 64 65 6c 65 74 65 73 20 61 20 72 6f 77 2c 20   deletes a row, 
ef00: 74 68 65 6e 20 69 74 20 69 73 20 75 6e 64 65 66  then it is undef
ef10: 69 6e 65 64 20 77 68 65 74 68 65 72 20 6f 72 20  ined whether or 
ef20: 6e 6f 74 20 41 46 54 45 52 20 74 72 69 67 67 65  not AFTER trigge
ef30: 72 73 0a 74 68 61 74 20 77 6f 75 6c 64 20 68 61  rs.that would ha
ef40: 76 65 20 6f 74 68 65 72 77 69 73 65 20 72 75 6e  ve otherwise run
ef50: 20 6f 6e 20 74 68 6f 73 65 20 72 6f 77 73 20 77   on those rows w
ef60: 69 6c 6c 20 69 6e 20 66 61 63 74 20 72 75 6e 2e  ill in fact run.
ef70: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61  .</p>..<p>The va
ef80: 6c 75 65 20 6f 66 20 4e 45 57 2e 72 6f 77 69 64  lue of NEW.rowid
ef90: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69 6e   is undefined in
efa0: 20 61 20 42 45 46 4f 52 45 20 49 4e 53 45 52 54   a BEFORE INSERT
efb0: 20 74 72 69 67 67 65 72 20 69 6e 20 77 68 69 63   trigger in whic
efc0: 68 0a 74 68 65 20 72 6f 77 69 64 20 69 73 20 6e  h.the rowid is n
efd0: 6f 74 20 65 78 70 6c 69 63 69 74 6c 79 20 73 65  ot explicitly se
efe0: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e  t to an integer.
eff0: 3c 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61 75 73 65  </p>..<p>Because
f000: 20 6f 66 20 74 68 65 20 62 65 68 61 76 69 6f 72   of the behavior
f010: 73 20 64 65 73 63 72 69 62 65 64 20 61 62 6f 76  s described abov
f020: 65 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 61  e, programmers a
f030: 72 65 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f  re encouraged to
f040: 0a 70 72 65 66 65 72 20 41 46 54 45 52 20 74 72  .prefer AFTER tr
f050: 69 67 67 65 72 73 20 6f 76 65 72 20 42 45 46 4f  iggers over BEFO
f060: 52 45 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e  RE triggers.</p>
f070: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
f080: 6e 74 20 72 61 69 73 65 20 7b 52 41 49 53 45 20  nt raise {RAISE 
f090: 66 75 6e 63 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  function}</tcl>.
f0a0: 3c 68 33 3e 54 68 65 20 52 41 49 53 45 28 29 20  <h3>The RAISE() 
f0b0: 66 75 6e 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c  function</h3>..<
f0c0: 70 3e 5e 28 41 20 73 70 65 63 69 61 6c 20 53 51  p>^(A special SQ
f0d0: 4c 20 66 75 6e 63 74 69 6f 6e 20 52 41 49 53 45  L function RAISE
f0e0: 28 29 20 6d 61 79 20 62 65 20 75 73 65 64 20 77  () may be used w
f0f0: 69 74 68 69 6e 20 61 20 74 72 69 67 67 65 72 2d  ithin a trigger-
f100: 70 72 6f 67 72 61 6d 2c 29 5e 0a 77 69 74 68 20  program,)^.with 
f110: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  the following sy
f120: 6e 74 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63 6c 3e  ntax</p> ..<tcl>
f130: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 61  BubbleDiagram ra
f140: 69 73 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f 74 63  ise-function</tc
f150: 6c 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6f 6e  l>..<p>^(When on
f160: 65 20 6f 66 20 52 41 49 53 45 28 52 4f 4c 4c 42  e of RAISE(ROLLB
f170: 41 43 4b 2c 2e 2e 2e 29 2c 20 52 41 49 53 45 28  ACK,...), RAISE(
f180: 41 42 4f 52 54 2c 2e 2e 2e 29 20 6f 72 20 52 41  ABORT,...) or RA
f190: 49 53 45 28 46 41 49 4c 2c 2e 2e 2e 29 0a 69 73  ISE(FAIL,...).is
f1a0: 20 63 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74   called during t
f1b0: 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 0a 65  rigger-program.e
f1c0: 78 65 63 75 74 69 6f 6e 2c 20 74 68 65 20 73 70  xecution, the sp
f1d0: 65 63 69 66 69 65 64 20 5b 4f 4e 20 43 4f 4e 46  ecified [ON CONF
f1e0: 4c 49 43 54 5d 20 70 72 6f 63 65 73 73 69 6e 67  LICT] processing
f1f0: 20 69 73 20 70 65 72 66 6f 72 6d 65 64 0a 74 68   is performed.th
f200: 65 20 63 75 72 72 65 6e 74 20 71 75 65 72 79 20  e current query 
f210: 74 65 72 6d 69 6e 61 74 65 73 2e 29 5e 0a 41 6e  terminates.)^.An
f220: 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 5b   error code of [
f230: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
f240: 54 5d 20 69 73 20 72 65 74 75 72 6e 65 64 20 74  T] is returned t
f250: 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f  o the applicatio
f260: 6e 2c 0a 61 6c 6f 6e 67 20 77 69 74 68 20 74 68  n,.along with th
f270: 65 20 73 70 65 63 69 66 69 65 64 20 65 72 72 6f  e specified erro
f280: 72 20 6d 65 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a  r message.</p>..
f290: 3c 70 3e 5e 57 68 65 6e 20 52 41 49 53 45 28 49  <p>^When RAISE(I
f2a0: 47 4e 4f 52 45 29 20 69 73 20 63 61 6c 6c 65 64  GNORE) is called
f2b0: 2c 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  , the remainder 
f2c0: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  of the current t
f2d0: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 0a  rigger program,.
f2e0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68  the statement th
f2f0: 61 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72  at caused the tr
f300: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 74 6f  igger program to
f310: 20 65 78 65 63 75 74 65 20 61 6e 64 20 61 6e 79   execute and any
f320: 20 73 75 62 73 65 71 75 65 6e 74 0a 74 72 69 67   subsequent.trig
f330: 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 68 61  ger programs tha
f340: 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65  t would have bee
f350: 6e 20 65 78 65 63 75 74 65 64 20 61 72 65 20 61  n executed are a
f360: 62 61 6e 64 6f 6e 65 64 2e 20 5e 4e 6f 20 64 61  bandoned. ^No da
f370: 74 61 62 61 73 65 0a 63 68 61 6e 67 65 73 20 61  tabase.changes a
f380: 72 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  re rolled back. 
f390: 20 5e 49 66 20 74 68 65 20 73 74 61 74 65 6d 65   ^If the stateme
f3a0: 6e 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74  nt that caused t
f3b0: 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
f3c0: 61 6d 0a 74 6f 20 65 78 65 63 75 74 65 20 69 73  am.to execute is
f3d0: 20 69 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20   itself part of 
f3e0: 61 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  a trigger progra
f3f0: 6d 2c 20 74 68 65 6e 20 74 68 61 74 20 74 72 69  m, then that tri
f400: 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 72 65 73  gger program.res
f410: 75 6d 65 73 20 65 78 65 63 75 74 69 6f 6e 20 61  umes execution a
f420: 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
f430: 6f 66 20 74 68 65 20 6e 65 78 74 20 73 74 65 70  of the next step
f440: 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ..</p>..<tcl>hd_
f450: 66 72 61 67 6d 65 6e 74 20 74 65 6d 70 74 72 69  fragment temptri
f460: 67 20 7b 54 45 4d 50 20 74 72 69 67 67 65 72 73  g {TEMP triggers
f470: 20 6f 6e 20 6e 6f 6e 2d 54 45 4d 50 20 74 61 62   on non-TEMP tab
f480: 6c 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  les}</tcl>.<h3>T
f490: 45 4d 50 20 54 72 69 67 67 65 72 73 20 6f 6e 20  EMP Triggers on 
f4a0: 4e 6f 6e 2d 54 45 4d 50 20 54 61 62 6c 65 73 3c  Non-TEMP Tables<
f4b0: 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 72 69  /h3>..<p>^(A tri
f4c0: 67 67 65 72 20 6e 6f 72 6d 61 6c 6c 79 20 65 78  gger normally ex
f4d0: 69 73 74 73 20 69 6e 20 74 68 65 20 73 61 6d 65  ists in the same
f4e0: 20 64 61 74 61 62 61 73 65 20 61 73 20 74 68 65   database as the
f4f0: 20 74 61 62 6c 65 20 6e 61 6d 65 64 0a 61 66 74   table named.aft
f500: 65 72 20 74 68 65 20 22 4f 4e 22 20 6b 65 79 77  er the "ON" keyw
f510: 6f 72 64 20 69 6e 20 74 68 65 20 43 52 45 41 54  ord in the CREAT
f520: 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d  E TRIGGER statem
f530: 65 6e 74 2e 20 20 45 78 63 65 70 74 2c 20 69 74  ent.  Except, it
f540: 20 69 73 0a 70 6f 73 73 69 62 6c 65 20 74 6f 20   is.possible to 
f550: 63 72 65 61 74 65 20 61 20 54 45 4d 50 20 54 52  create a TEMP TR
f560: 49 47 47 45 52 20 6f 6e 20 61 20 74 61 62 6c 65  IGGER on a table
f570: 20 69 6e 20 61 6e 6f 74 68 65 72 20 64 61 74 61   in another data
f580: 62 61 73 65 2e 29 5e 20 20 0a 53 75 63 68 20 61  base.)^  .Such a
f590: 20 74 72 69 67 67 65 72 20 77 69 6c 6c 20 6f 6e   trigger will on
f5a0: 6c 79 20 66 69 72 65 20 77 68 65 6e 20 63 68 61  ly fire when cha
f5b0: 6e 67 65 73 0a 61 72 65 20 6d 61 64 65 20 74 6f  nges.are made to
f5c0: 20 74 68 65 20 74 61 72 67 65 74 20 74 61 62 6c   the target tabl
f5d0: 65 20 62 79 20 74 68 65 20 61 70 70 6c 69 63 61  e by the applica
f5e0: 74 69 6f 6e 20 74 68 61 74 20 64 65 66 69 6e 65  tion that define
f5f0: 64 20 74 68 65 20 74 72 69 67 67 65 72 2e 0a 4f  d the trigger..O
f600: 74 68 65 72 20 61 70 70 6c 69 63 61 74 69 6f 6e  ther application
f610: 73 20 74 68 61 74 20 6d 6f 64 69 66 79 20 74 68  s that modify th
f620: 65 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20  e database will 
f630: 6e 6f 74 20 62 65 20 61 62 6c 65 20 74 6f 20 73  not be able to s
f640: 65 65 20 74 68 65 0a 54 45 4d 50 20 74 72 69 67  ee the.TEMP trig
f650: 67 65 72 20 61 6e 64 20 68 65 6e 63 65 20 63 61  ger and hence ca
f660: 6e 6e 6f 74 20 72 75 6e 20 74 68 65 20 74 72 69  nnot run the tri
f670: 67 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68  gger.</p>..<p>Wh
f680: 65 6e 20 64 65 66 69 6e 69 6e 67 20 61 20 54 45  en defining a TE
f690: 4d 50 20 74 72 69 67 67 65 72 20 6f 6e 20 61 20  MP trigger on a 
f6a0: 6e 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65 2c 20  non-TEMP table, 
f6b0: 69 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  it is important 
f6c0: 74 6f 0a 73 70 65 63 69 66 79 20 74 68 65 20 64  to.specify the d
f6d0: 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
f6e0: 74 68 65 20 6e 6f 6e 2d 54 45 4d 50 20 74 61 62  the non-TEMP tab
f6f0: 6c 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  le.  For example
f700: 2c 0a 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ,.in the followi
f710: 6e 67 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 74  ng statement, it
f720: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
f730: 20 73 61 79 20 22 6d 61 69 6e 2e 74 61 62 31 22   say "main.tab1"
f740: 20 69 6e 73 74 65 61 64 0a 6f 66 20 6a 75 73 74   instead.of just
f750: 20 22 74 61 62 31 22 3a 3c 2f 70 3e 0a 0a 3c 62   "tab1":</p>..<b
f760: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
f770: 43 52 45 41 54 45 20 54 45 4d 50 20 54 52 49 47  CREATE TEMP TRIG
f780: 47 45 52 20 65 78 31 20 41 46 54 45 52 20 49 4e  GER ex1 AFTER IN
f790: 53 45 52 54 20 4f 4e 20 3c 62 3e 6d 61 69 6e 2e  SERT ON <b>main.
f7a0: 3c 2f 62 3e 74 61 62 31 20 42 45 47 49 4e 20 2e  </b>tab1 BEGIN .
f7b0: 2e 2e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  ...</pre></block
f7c0: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 46 61 69 6c 75  quote>..<p>Failu
f7d0: 72 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68  re to specify th
f7e0: 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 6f 6e  e schema name on
f7f0: 20 74 68 65 20 74 61 72 67 65 74 20 74 61 62 6c   the target tabl
f800: 65 20 63 6f 75 6c 64 20 72 65 73 75 6c 74 0a 69  e could result.i
f810: 6e 20 74 68 65 20 54 45 4d 50 20 74 72 69 67 67  n the TEMP trigg
f820: 65 72 20 62 65 69 6e 67 20 72 65 61 74 74 61 63  er being reattac
f830: 68 65 64 20 74 6f 20 61 20 74 61 62 6c 65 20 77  hed to a table w
f840: 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ith the same nam
f850: 65 20 69 6e 0a 61 6e 6f 74 68 65 72 20 64 61 74  e in.another dat
f860: 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20 61  abase whenever a
f870: 6e 79 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  ny schema change
f880: 20 6f 63 63 75 72 73 2e 3c 2f 70 3e 0a 0a 3c 74   occurs.</p>..<t
f890: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
f8a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f8b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f8c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f8d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f8e0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45  ###.Section {CRE
f8f0: 41 54 45 20 56 49 45 57 7d 20 7b 63 72 65 61 74  ATE VIEW} {creat
f900: 65 76 69 65 77 7d 20 7b 7b 43 52 45 41 54 45 20  eview} {{CREATE 
f910: 56 49 45 57 7d 20 76 69 65 77 20 56 49 45 57 20  VIEW} view VIEW 
f920: 2a 76 69 65 77 73 7d 0a 0a 52 65 63 75 72 73 69  *views}..Recursi
f930: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
f940: 63 72 65 61 74 65 2d 76 69 65 77 2d 73 74 6d 74  create-view-stmt
f950: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
f960: 20 43 52 45 41 54 45 20 56 49 45 57 20 63 6f 6d   CREATE VIEW com
f970: 6d 61 6e 64 20 61 73 73 69 67 6e 73 20 61 20 6e  mand assigns a n
f980: 61 6d 65 20 74 6f 20 61 20 70 72 65 2d 70 61 63  ame to a pre-pac
f990: 6b 61 67 65 64 20 0a 5b 53 45 4c 45 43 54 5d 20  kaged .[SELECT] 
f9a0: 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f 6e 63  statement. .^Onc
f9b0: 65 20 74 68 65 20 76 69 65 77 20 69 73 20 63 72  e the view is cr
f9c0: 65 61 74 65 64 2c 20 69 74 20 63 61 6e 20 62 65  eated, it can be
f9d0: 20 75 73 65 64 20 69 6e 20 74 68 65 20 46 52 4f   used in the FRO
f9e0: 4d 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e 6f 74  M clause.of anot
f9f0: 68 65 72 20 5b 53 45 4c 45 43 54 5d 20 69 6e 20  her [SELECT] in 
fa00: 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65  place of a table
fa10: 20 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   name..</p>..<p>
fa20: 5e 49 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f  ^If the "TEMP" o
fa30: 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20 6b 65  r "TEMPORARY" ke
fa40: 79 77 6f 72 64 20 6f 63 63 75 72 73 20 69 6e 20  yword occurs in 
fa50: 62 65 74 77 65 65 6e 20 22 43 52 45 41 54 45 22  between "CREATE"
fa60: 0a 61 6e 64 20 22 56 49 45 57 22 20 74 68 65 6e  .and "VIEW" then
fa70: 20 74 68 65 20 76 69 65 77 20 74 68 61 74 20 69   the view that i
fa80: 73 20 63 72 65 61 74 65 64 20 69 73 20 6f 6e 6c  s created is onl
fa90: 79 20 76 69 73 69 62 6c 65 20 74 6f 20 74 68 65  y visible to the
faa0: 0a 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  .[database conne
fab0: 63 74 69 6f 6e 5d 20 74 68 61 74 20 63 72 65 61  ction] that crea
fac0: 74 65 64 20 69 74 20 61 6e 64 20 69 73 20 61 75  ted it and is au
fad0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65  tomatically dele
fae0: 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61 74  ted when.the dat
faf0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
fb00: 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 70 3e 0a   is closed.</p>.
fb10: 0a 3c 70 3e 20 5e 49 66 20 61 20 3c 79 79 74 65  .<p> ^If a <yyte
fb20: 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f  rm>schema-name</
fb30: 79 79 74 65 72 6d 3e 20 69 73 20 73 70 65 63 69  yyterm> is speci
fb40: 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76  fied, then the v
fb50: 69 65 77 20 0a 69 73 20 63 72 65 61 74 65 64 20  iew .is created 
fb60: 69 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64  in the specified
fb70: 20 64 61 74 61 62 61 73 65 2e 0a 5e 49 74 20 69   database..^It i
fb80: 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70  s an error to sp
fb90: 65 63 69 66 79 20 62 6f 74 68 20 61 20 3c 79 79  ecify both a <yy
fba0: 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
fbb0: 3c 2f 79 79 74 65 72 6d 3e 0a 61 6e 64 20 74 68  </yyterm>.and th
fbc0: 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 6f  e TEMP keyword o
fbd0: 6e 20 61 20 56 49 45 57 2c 20 75 6e 6c 65 73 73  n a VIEW, unless
fbe0: 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 73 63 68   the <yyterm>sch
fbf0: 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ema-name</yyterm
fc00: 3e 20 0a 69 73 20 22 74 65 6d 70 22 2e 0a 5e 49  > .is "temp"..^I
fc10: 66 20 6e 6f 20 73 63 68 65 6d 61 20 6e 61 6d 65  f no schema name
fc20: 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 61   is specified, a
fc30: 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77  nd the TEMP keyw
fc40: 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65  ord is not prese
fc50: 6e 74 2c 0a 74 68 65 20 56 49 45 57 20 69 73 20  nt,.the VIEW is 
fc60: 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d  created in the m
fc70: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70  ain database.</p
fc80: 3e 0a 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f  >..<p>^You canno
fc90: 74 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53  t [DELETE], [INS
fca0: 45 52 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45  ERT], or [UPDATE
fcb0: 5d 20 61 20 76 69 65 77 2e 20 20 5e 56 69 65 77  ] a view.  ^View
fcc0: 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20  s are read-only 
fcd0: 0a 69 6e 20 53 51 4c 69 74 65 2e 20 20 5e 48 6f  .in SQLite.  ^Ho
fce0: 77 65 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63  wever, in many c
fcf0: 61 73 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65  ases you can use
fd00: 20 61 6e 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20   an.[INSTEAD OF 
fd10: 74 72 69 67 67 65 72 5d 20 6f 6e 20 74 68 65 20  trigger] on the 
fd20: 76 69 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69  view to accompli
fd30: 73 68 20 0a 74 68 65 20 73 61 6d 65 20 74 68 69  sh .the same thi
fd40: 6e 67 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20  ng.  ^Views are 
fd50: 72 65 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68  removed .with th
fd60: 65 20 5b 44 52 4f 50 20 56 49 45 57 5d 20 63 6f  e [DROP VIEW] co
fd70: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  mmand.</p>..<p>^
fd80: 49 66 20 61 20 3c 79 79 74 65 72 6d 3e 63 6f 6c  If a <yyterm>col
fd90: 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  umn-name</yyterm
fda0: 3e 20 6c 69 73 74 20 66 6f 6c 6c 6f 77 73 20 0a  > list follows .
fdb0: 74 68 65 20 3c 79 79 74 65 72 6d 3e 76 69 65 77  the <yyterm>view
fdc0: 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 2c 20  -name</yyterm>, 
fdd0: 74 68 65 6e 20 74 68 61 74 20 6c 69 73 74 20 64  then that list d
fde0: 65 74 65 72 6d 69 6e 65 73 0a 74 68 65 20 6e 61  etermines.the na
fdf0: 6d 65 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  mes of the colum
fe00: 6e 73 20 66 6f 72 20 74 68 65 20 76 69 65 77 2e  ns for the view.
fe10: 20 20 5e 49 66 20 74 68 65 20 3c 79 79 74 65 72    ^If the <yyter
fe20: 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79  m>column-name</y
fe30: 79 74 65 72 6d 3e 0a 6c 69 73 74 20 69 73 20 6f  yterm>.list is o
fe40: 6d 69 74 74 65 64 2c 20 74 68 65 6e 20 74 68 65  mitted, then the
fe50: 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 63 6f   names of the co
fe60: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 76 69 65  lumns in the vie
fe70: 77 20 61 72 65 20 64 65 72 69 76 65 64 0a 66 72  w are derived.fr
fe80: 6f 6d 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20  om the names of 
fe90: 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 63  the result-set c
fea0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 5b 73  olumns in the [s
feb0: 65 6c 65 63 74 2d 73 74 6d 74 5d 2e 0a 4e 6f 74  elect-stmt]..Not
fec0: 65 20 74 68 61 74 20 74 68 65 20 3c 79 79 74 65  e that the <yyte
fed0: 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f  rm>column-name</
fee0: 79 79 74 65 72 6d 3e 20 6c 69 73 74 20 73 79 6e  yyterm> list syn
fef0: 74 61 78 20 69 73 20 6f 6e 6c 79 0a 73 75 70 70  tax is only.supp
ff00: 6f 72 74 65 64 20 69 6e 20 53 51 4c 69 74 65 20  orted in SQLite 
ff10: 76 65 72 73 69 6f 6e 73 20 33 2e 39 2e 30 20 28  versions 3.9.0 (
ff20: 5b 64 61 74 65 6f 66 3a 33 2e 39 2e 30 5d 29 20  [dateof:3.9.0]) 
ff30: 61 6e 64 20 6c 61 74 65 72 2e 0a 0a 3c 74 63 6c  and later...<tcl
ff40: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
ff50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ff60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ff70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ff80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ff90: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
ffa0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
ffb0: 7b 63 72 65 61 74 65 76 74 61 62 7d 20 7b 7b 43  {createvtab} {{C
ffc0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
ffd0: 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65  BLE}}..Recursive
ffe0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72  BubbleDiagram cr
fff0: 65 61 74 65 2d 76 69 72 74 75 61 6c 2d 74 61 62  eate-virtual-tab
10000 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  le-stmt.</tcl>..
10010 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61  <p>A [virtual ta
10020 62 6c 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72  ble] is an inter
10030 66 61 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72  face to an exter
10040 6e 61 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63  nal storage or c
10050 6f 6d 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e  omputation.engin
10060 65 20 74 68 61 74 20 61 70 70 65 61 72 73 20 74  e that appears t
10070 6f 20 62 65 20 61 20 74 61 62 6c 65 20 62 75 74  o be a table but
10080 20 64 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c   does not actual
10090 6c 79 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61  ly store informa
100a0 74 69 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61  tion.in the data
100b0 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
100c0 3c 70 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79  <p>In general, y
100d0 6f 75 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69  ou can do anythi
100e0 6e 67 20 77 69 74 68 20 61 20 5b 76 69 72 74 75  ng with a [virtu
100f0 61 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63  al table] that c
10100 61 6e 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20  an be done.with 
10110 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  an ordinary tabl
10120 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 5e  e, except that ^
10130 79 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74  you cannot creat
10140 65 20 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69  e indices or tri
10150 67 67 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75  ggers on a.virtu
10160 61 6c 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65  al table.  ^Some
10170 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
10180 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d  mplementations m
10190 69 67 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69  ight impose addi
101a0 74 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69  tional.restricti
101b0 6f 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ons.  For exampl
101c0 65 2c 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20  e, many virtual 
101d0 74 61 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d  tables are read-
101e0 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  only.</p>..<p>Th
101f0 65 20 3c 79 79 74 65 72 6d 3e 6d 6f 64 75 6c 65  e <yyterm>module
10200 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69  -name</yyterm> i
10210 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e  s the name of an
10220 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69 6d 70   object that imp
10230 6c 65 6d 65 6e 74 73 0a 74 68 65 20 76 69 72 74  lements.the virt
10240 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 54 68 65  ual table.  ^The
10250 20 3c 79 79 74 65 72 6d 3e 6d 6f 64 75 6c 65 2d   <yyterm>module-
10260 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6d 75  name</yyterm> mu
10270 73 74 20 62 65 20 72 65 67 69 73 74 65 72 65 64  st be registered
10280 20 77 69 74 68 0a 74 68 65 20 53 51 4c 69 74 65   with.the SQLite
10290 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
102a0 74 69 6f 6e 20 75 73 69 6e 67 0a 5b 73 71 6c 69  tion using.[sqli
102b0 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
102c0 65 28 29 5d 20 6f 72 20 5b 73 71 6c 69 74 65 33  e()] or [sqlite3
102d0 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76  _create_module_v
102e0 32 28 29 5d 0a 70 72 69 6f 72 20 74 6f 20 69 73  2()].prior to is
102f0 73 75 69 6e 67 20 74 68 65 20 43 52 45 41 54 45  suing the CREATE
10300 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73   VIRTUAL TABLE s
10310 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d  tatement..^The m
10320 6f 64 75 6c 65 20 74 61 6b 65 73 20 7a 65 72 6f  odule takes zero
10330 20 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73   or more comma-s
10340 65 70 61 72 61 74 65 64 20 61 72 67 75 6d 65 6e  eparated argumen
10350 74 73 2e 0a 5e 54 68 65 20 61 72 67 75 6d 65 6e  ts..^The argumen
10360 74 73 20 63 61 6e 20 62 65 20 6a 75 73 74 20 61  ts can be just a
10370 62 6f 75 74 20 61 6e 79 20 74 65 78 74 20 61 73  bout any text as
10380 20 6c 6f 6e 67 20 61 73 20 69 74 20 68 61 73 20   long as it has 
10390 62 61 6c 61 6e 63 65 64 0a 70 61 72 65 6e 74 68  balanced.parenth
103a0 65 73 65 73 2e 20 20 54 68 65 20 61 72 67 75 6d  eses.  The argum
103b0 65 6e 74 20 73 79 6e 74 61 78 20 69 73 20 73 75  ent syntax is su
103c0 66 66 69 63 69 65 6e 74 6c 79 20 67 65 6e 65 72  fficiently gener
103d0 61 6c 20 74 68 61 74 20 74 68 65 0a 61 72 67 75  al that the.argu
103e0 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6d 61 64  ments can be mad
103f0 65 20 74 6f 20 61 70 70 65 61 72 20 61 73 20 5b  e to appear as [
10400 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
10410 6e 73 5d 20 69 6e 20 61 20 74 72 61 64 69 74 69  ns] in a traditi
10420 6f 6e 61 6c 0a 5b 43 52 45 41 54 45 20 54 41 42  onal.[CREATE TAB
10430 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
10440 0a 5e 53 51 4c 69 74 65 20 70 61 73 73 65 73 20  .^SQLite passes 
10450 74 68 65 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d  the module argum
10460 65 6e 74 73 20 64 69 72 65 63 74 6c 79 0a 74 6f  ents directly.to
10470 20 74 68 65 20 5b 78 43 72 65 61 74 65 5d 20 61   the [xCreate] a
10480 6e 64 20 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d 65  nd [xConnect] me
10490 74 68 6f 64 73 20 6f 66 20 74 68 65 20 6d 6f 64  thods of the mod
104a0 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
104b0 6f 6e 0a 77 69 74 68 6f 75 74 20 61 6e 79 20 69  on.without any i
104c0 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 2e 20 20  nterpretation.  
104d0 49 74 20 69 73 20 74 68 65 20 72 65 73 70 6f 6e  It is the respon
104e0 73 69 62 69 6c 69 74 79 0a 6f 66 20 74 68 65 20  sibility.of the 
104f0 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
10500 61 74 69 6f 6e 20 74 6f 20 70 61 72 73 65 20 61  ation to parse a
10510 6e 64 20 69 6e 74 65 72 70 72 65 74 20 69 74 73  nd interpret its
10520 20 6f 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e 3c   own arguments.<
10530 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 76 69 72 74 75  /p>..<p>^A virtu
10540 61 6c 20 74 61 62 6c 65 20 69 73 20 64 65 73 74  al table is dest
10550 72 6f 79 65 64 20 75 73 69 6e 67 20 74 68 65 20  royed using the 
10560 6f 72 64 69 6e 61 72 79 0a 5b 44 52 4f 50 20 54  ordinary.[DROP T
10570 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  ABLE] statement.
10580 20 20 54 68 65 72 65 20 69 73 20 6e 6f 0a 44 52    There is no.DR
10590 4f 50 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  OP VIRTUAL TABLE
105a0 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a   statement.</p>.
105b0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
105c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
105d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
105e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
105f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10600 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 44 45  #####.Section DE
10610 4c 45 54 45 20 64 65 6c 65 74 65 20 7b 44 45 4c  LETE delete {DEL
10620 45 54 45 20 2a 44 45 4c 45 54 45 73 7d 0a 0a 52  ETE *DELETEs}..R
10630 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
10640 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d  agram delete-stm
10650 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  t.</tcl>..<p>The
10660 20 44 45 4c 45 54 45 20 63 6f 6d 6d 61 6e 64 20   DELETE command 
10670 72 65 6d 6f 76 65 73 20 72 65 63 6f 72 64 73 20  removes records 
10680 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 69  from the table i
10690 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65  dentified by the
106a0 0a 20 20 20 5b 71 75 61 6c 69 66 69 65 64 2d 74  .   [qualified-t
106b0 61 62 6c 65 2d 6e 61 6d 65 5d 2e 0a 0a 3c 70 3e  able-name]...<p>
106c0 5e 49 66 20 74 68 65 20 57 48 45 52 45 20 63 6c  ^If the WHERE cl
106d0 61 75 73 65 20 69 73 20 6e 6f 74 20 70 72 65 73  ause is not pres
106e0 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f 72 64 73  ent, all records
106f0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 61 72   in the table ar
10700 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e 49  e deleted..   ^I
10710 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  f a WHERE clause
10720 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68   is supplied, th
10730 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72 6f  en only those ro
10740 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
10750 0a 20 20 20 57 48 45 52 45 20 63 6c 61 75 73 65  .   WHERE clause
10760 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
10770 73 69 6f 6e 5d 20 69 73 20 74 72 75 65 20 61 72  sion] is true ar
10780 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e 52  e deleted..   ^R
10790 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
107a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
107b0 66 61 6c 73 65 20 6f 72 20 4e 55 4c 4c 20 61 72  false or NULL ar
107c0 65 20 72 65 74 61 69 6e 65 64 2e 0a 0a 3c 68 33  e retained...<h3
107d0 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e  >Restrictions on
107e0 20 44 45 4c 45 54 45 20 53 74 61 74 65 6d 65 6e   DELETE Statemen
107f0 74 73 20 57 69 74 68 69 6e 20 43 52 45 41 54 45  ts Within CREATE
10800 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c   TRIGGER</h3>..<
10810 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  p>The following 
10820 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70  restrictions app
10830 6c 79 20 74 6f 20 44 45 4c 45 54 45 20 73 74 61  ly to DELETE sta
10840 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63 63  tements that occ
10850 75 72 20 77 69 74 68 69 6e 20 74 68 65 0a 20 20  ur within the.  
10860 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41   body of a [CREA
10870 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74  TE TRIGGER] stat
10880 65 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c  ement:..<ul>.  <
10890 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 79 79 74 65  li><p>^The <yyte
108a0 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79  rm>table-name</y
108b0 79 74 65 72 6d 3e 20 73 70 65 63 69 66 69 65 64  yterm> specified
108c0 20 61 73 20 70 61 72 74 20 6f 66 20 61 20 0a 20   as part of a . 
108d0 20 20 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d     DELETE statem
108e0 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20 20 61  ent within.    a
108f0 20 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75   trigger body mu
10900 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65  st be unqualifie
10910 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65 72 20 77  d.  ^(In other w
10920 6f 72 64 73 2c 20 74 68 65 0a 20 20 20 20 3c 69  ords, the.    <i
10930 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e  >schema-name</i>
10940 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20  <b>.</b> prefix 
10950 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  on the table nam
10960 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  e is not allowed
10970 20 0a 20 20 20 20 77 69 74 68 69 6e 20 74 72 69   .    within tri
10980 67 67 65 72 73 2e 29 5e 20 5e 49 66 20 74 68 65  ggers.)^ ^If the
10990 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20   table to which 
109a0 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61  the trigger is a
109b0 74 74 61 63 68 65 64 20 69 73 0a 20 20 20 20 6e  ttached is.    n
109c0 6f 74 20 69 6e 20 74 68 65 20 74 65 6d 70 20 64  ot in the temp d
109d0 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 44 45  atabase, then DE
109e0 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20  LETE statements 
109f0 77 69 74 68 69 6e 20 74 68 65 20 74 72 69 67 67  within the trigg
10a00 65 72 0a 20 20 20 20 62 6f 64 79 20 6d 75 73 74  er.    body must
10a10 20 6f 70 65 72 61 74 65 20 6f 6e 20 74 61 62 6c   operate on tabl
10a20 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  es within the sa
10a30 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20 69  me database as i
10a40 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  t. ^If the table
10a50 0a 20 20 20 20 74 6f 20 77 68 69 63 68 20 74 68  .    to which th
10a60 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74  e trigger is att
10a70 61 63 68 65 64 20 69 73 20 69 6e 20 74 68 65 20  ached is in the 
10a80 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74  TEMP database, t
10a90 68 65 6e 20 74 68 65 0a 20 20 20 20 75 6e 71 75  hen the.    unqu
10aa0 61 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f 66 20  alified name of 
10ab0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
10ac0 64 65 6c 65 74 65 64 20 69 73 20 72 65 73 6f 6c  deleted is resol
10ad0 76 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ved in the same 
10ae0 77 61 79 20 61 73 0a 20 20 20 20 69 74 20 69 73  way as.    it is
10af0 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c   for a top-level
10b00 20 73 74 61 74 65 6d 65 6e 74 20 28 62 79 20 73   statement (by s
10b10 65 61 72 63 68 69 6e 67 20 66 69 72 73 74 20 74  earching first t
10b20 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
10b30 2c 20 74 68 65 6e 0a 20 20 20 20 74 68 65 20 6d  , then.    the m
10b40 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68  ain database, th
10b50 65 6e 20 61 6e 79 20 6f 74 68 65 72 20 64 61 74  en any other dat
10b60 61 62 61 73 65 73 20 69 6e 20 74 68 65 20 6f 72  abases in the or
10b70 64 65 72 20 74 68 65 79 20 77 65 72 65 0a 20 20  der they were.  
10b80 20 20 61 74 74 61 63 68 65 64 29 2e 0a 20 20 20    attached)..   
10b90 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20   .  <li><p>^The 
10ba0 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e  INDEXED BY and N
10bb0 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73  OT INDEXED claus
10bc0 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77  es are not allow
10bd0 65 64 20 6f 6e 20 44 45 4c 45 54 45 0a 20 20 20  ed on DELETE.   
10be0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
10bf0 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e  in triggers.</p>
10c00 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20  ..  <li><p>^The 
10c10 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20  LIMIT and ORDER 
10c20 42 59 20 63 6c 61 75 73 65 73 20 28 64 65 73 63  BY clauses (desc
10c30 72 69 62 65 64 20 62 65 6c 6f 77 29 20 61 72 65  ribed below) are
10c40 20 75 6e 73 75 70 70 6f 72 74 65 64 20 66 6f 72   unsupported for
10c50 0a 20 20 20 20 44 45 4c 45 54 45 20 73 74 61 74  .    DELETE stat
10c60 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
10c70 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 3c 2f 75 6c  iggers.</p>.</ul
10c80 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20  >..<h3>Optional 
10c90 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20  LIMIT and ORDER 
10ca0 42 59 20 63 6c 61 75 73 65 73 3c 2f 68 33 3e 0a  BY clauses</h3>.
10cb0 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74 65 20  .<p>^(If SQLite 
10cc0 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  is compiled with
10cd0 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41   the [SQLITE_ENA
10ce0 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
10cf0 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65  E_LIMIT].compile
10d00 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68  -time option, th
10d10 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66  en the syntax of
10d20 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
10d30 65 6d 65 6e 74 20 69 73 0a 65 78 74 65 6e 64 65  ement is.extende
10d40 64 20 62 79 20 74 68 65 20 61 64 64 69 74 69 6f  d by the additio
10d50 6e 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20 4f 52  n of optional OR
10d60 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54  DER BY and LIMIT
10d70 20 63 6c 61 75 73 65 73 3a 29 5e 3c 2f 70 3e 0a   clauses:)^</p>.
10d80 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
10d90 72 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 2d  ram delete-stmt-
10da0 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c  limited</tcl>..<
10db0 70 3e 5e 49 66 20 61 20 44 45 4c 45 54 45 20 73  p>^If a DELETE s
10dc0 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20 4c  tatement has a L
10dd0 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
10de0 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
10df0 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69 6c  of rows that.wil
10e00 6c 20 62 65 20 64 65 6c 65 74 65 64 20 69 73 20  l be deleted is 
10e10 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74  found by evaluat
10e20 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61 6e  ing the accompan
10e30 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20  ying expression 
10e40 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20 74  and casting.it t
10e50 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  o an integer val
10e60 75 65 2e 20 5e 49 66 20 74 68 65 20 72 65 73 75  ue. ^If the resu
10e70 6c 74 20 6f 66 20 74 68 65 20 65 76 61 6c 75 61  lt of the evalua
10e80 74 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 63  ting the LIMIT c
10e90 6c 61 75 73 65 0a 63 61 6e 6e 6f 74 20 62 65 20  lause.cannot be 
10ea0 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65  losslessly conve
10eb0 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
10ec0 65 72 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  er value, it is 
10ed0 61 6e 20 65 72 72 6f 72 2e 20 5e 41 20 0a 6e 65  an error. ^A .ne
10ee0 67 61 74 69 76 65 20 4c 49 4d 49 54 20 76 61 6c  gative LIMIT val
10ef0 75 65 20 69 73 20 69 6e 74 65 72 70 72 65 74 65  ue is interprete
10f00 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22 2e  d as "no limit".
10f10 20 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54 45   ^(If the DELETE
10f20 20 73 74 61 74 65 6d 65 6e 74 20 0a 61 6c 73 6f   statement .also
10f30 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20 63   has an OFFSET c
10f40 6c 61 75 73 65 2c 20 74 68 65 6e 20 69 74 20 69  lause, then it i
10f50 73 20 73 69 6d 69 6c 61 72 6c 79 20 65 76 61 6c  s similarly eval
10f60 75 61 74 65 64 20 61 6e 64 20 63 61 73 74 20 74  uated and cast t
10f70 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 76 61 6c  o an.integer val
10f80 75 65 2e 20 41 67 61 69 6e 2c 20 69 74 20 69 73  ue. Again, it is
10f90 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
10fa0 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65   value cannot be
10fb0 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f 6e 76   losslessly.conv
10fc0 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
10fd0 67 65 72 2e 29 5e 20 5e 49 66 20 74 68 65 72 65  ger.)^ ^If there
10fe0 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 20 63 6c   is no OFFSET cl
10ff0 61 75 73 65 2c 20 6f 72 20 74 68 65 20 63 61 6c  ause, or the cal
11000 63 75 6c 61 74 65 64 0a 69 6e 74 65 67 65 72 20  culated.integer 
11010 76 61 6c 75 65 20 69 73 20 6e 65 67 61 74 69 76  value is negativ
11020 65 2c 20 74 68 65 20 65 66 66 65 63 74 69 76 65  e, the effective
11030 20 4f 46 46 53 45 54 20 76 61 6c 75 65 20 69 73   OFFSET value is
11040 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 28 49 66 20   zero...<p>^(If 
11050 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
11060 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44 45  ment has an ORDE
11070 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  R BY clause, the
11080 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 20  n all rows that 
11090 77 6f 75 6c 64 20 0a 62 65 20 64 65 6c 65 74 65  would .be delete
110a0 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65  d in the absence
110b0 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c   of the LIMIT cl
110c0 61 75 73 65 20 61 72 65 20 73 6f 72 74 65 64 20  ause are sorted 
110d0 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
110e0 20 0a 4f 52 44 45 52 20 42 59 2e 20 54 68 65 20   .ORDER BY. The 
110f0 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e 20 72  first <i>M</i> r
11100 6f 77 73 2c 20 77 68 65 72 65 20 3c 69 3e 4d 3c  ows, where <i>M<
11110 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c 75 65  /i> is the value
11120 20 66 6f 75 6e 64 20 62 79 0a 65 76 61 6c 75 61   found by.evalua
11130 74 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20  ting the OFFSET 
11140 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f  clause expressio
11150 6e 2c 20 61 72 65 20 73 6b 69 70 70 65 64 2c 20  n, are skipped, 
11160 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  and the followin
11170 67 20 0a 3c 69 3e 4e 3c 2f 69 3e 2c 20 77 68 65  g .<i>N</i>, whe
11180 72 65 20 3c 69 3e 4e 3c 2f 69 3e 20 69 73 20 74  re <i>N</i> is t
11190 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
111a0 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
111b0 2c 20 61 72 65 20 64 65 6c 65 74 65 64 2e 29 5e  , are deleted.)^
111c0 0a 5e 49 66 20 74 68 65 72 65 20 61 72 65 20 6c  .^If there are l
111d0 65 73 73 20 74 68 61 6e 20 3c 69 3e 4e 3c 2f 69  ess than <i>N</i
111e0 3e 20 72 6f 77 73 20 72 65 6d 61 69 6e 69 6e 67  > rows remaining
111f0 20 61 66 74 65 72 20 74 61 6b 69 6e 67 20 74 68   after taking th
11200 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 0a  e OFFSET clause.
11210 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2c 20 6f 72  into account, or
11220 20 69 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c   if the LIMIT cl
11230 61 75 73 65 20 65 76 61 6c 75 61 74 65 64 20 74  ause evaluated t
11240 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c  o a negative val
11250 75 65 2c 20 74 68 65 6e 20 61 6c 6c 0a 72 65 6d  ue, then all.rem
11260 61 69 6e 69 6e 67 20 72 6f 77 73 20 61 72 65 20  aining rows are 
11270 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66  deleted...<p>^If
11280 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
11290 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52 44  ement has no ORD
112a0 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68  ER BY clause, th
112b0 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74  en all rows that
112c0 0a 77 6f 75 6c 64 20 62 65 20 64 65 6c 65 74 65  .would be delete
112d0 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65  d in the absence
112e0 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c   of the LIMIT cl
112f0 61 75 73 65 20 61 72 65 20 61 73 73 65 6d 62 6c  ause are assembl
11300 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74 72 61  ed in an.arbitra
11310 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72 65 20  ry order before 
11320 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c 49 4d  applying the LIM
11330 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 63 6c  IT and OFFSET cl
11340 61 75 73 65 73 20 74 6f 20 64 65 74 65 72 6d 69  auses to determi
11350 6e 65 20 0a 74 68 65 20 73 75 62 73 65 74 20 74  ne .the subset t
11360 68 61 74 20 61 72 65 20 61 63 74 75 61 6c 6c 79  hat are actually
11370 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e 28   deleted...<p>^(
11380 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
11390 75 73 65 20 6f 6e 20 61 20 44 45 4c 45 54 45 20  use on a DELETE 
113a0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
113b0 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d  d only to determ
113c0 69 6e 65 20 77 68 69 63 68 0a 72 6f 77 73 20 66  ine which.rows f
113d0 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20 4c  all within the L
113e0 49 4d 49 54 2e 20 54 68 65 20 6f 72 64 65 72 20  IMIT. The order 
113f0 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72  in which rows ar
11400 65 20 64 65 6c 65 74 65 64 20 69 73 20 61 72 62  e deleted is arb
11410 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f  itrary.and is no
11420 74 20 69 6e 66 6c 75 65 6e 63 65 64 20 62 79 20  t influenced by 
11430 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
11440 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f  use.)^..<tcl>hd_
11450 66 72 61 67 6d 65 6e 74 20 74 72 75 6e 63 61 74  fragment truncat
11460 65 6f 70 74 20 7b 74 72 75 6e 63 61 74 65 20 6f  eopt {truncate o
11470 70 74 69 6d 69 7a 61 74 69 6f 6e 7d 3c 2f 74 63  ptimization}</tc
11480 6c 3e 0a 3c 68 33 3e 54 68 65 20 54 72 75 6e 63  l>.<h3>The Trunc
11490 61 74 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate Optimization
114a0 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20  </h3>..<p>^When 
114b0 74 68 65 20 57 48 45 52 45 20 69 73 20 6f 6d 69  the WHERE is omi
114c0 74 74 65 64 20 66 72 6f 6d 20 61 20 44 45 4c 45  tted from a DELE
114d0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  TE statement and
114e0 20 74 68 65 20 74 61 62 6c 65 0a 62 65 69 6e 67   the table.being
114f0 20 64 65 6c 65 74 65 64 20 68 61 73 20 6e 6f 20   deleted has no 
11500 74 72 69 67 67 65 72 73 2c 0a 53 51 4c 69 74 65  triggers,.SQLite
11510 20 75 73 65 73 20 61 6e 20 6f 70 74 69 6d 69 7a   uses an optimiz
11520 61 74 69 6f 6e 20 74 6f 20 65 72 61 73 65 20 74  ation to erase t
11530 68 65 20 65 6e 74 69 72 65 20 74 61 62 6c 65 20  he entire table 
11540 63 6f 6e 74 65 6e 74 0a 77 69 74 68 6f 75 74 20  content.without 
11550 68 61 76 69 6e 67 20 74 6f 20 76 69 73 69 74 20  having to visit 
11560 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20  each row of the 
11570 74 61 62 6c 65 20 69 6e 64 69 76 69 64 75 61 6c  table individual
11580 6c 79 2e 0a 54 68 69 73 20 22 74 72 75 6e 63 61  ly..This "trunca
11590 74 65 22 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  te" optimization
115a0 20 6d 61 6b 65 73 20 74 68 65 20 64 65 6c 65 74   makes the delet
115b0 65 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74 65  e run much faste
115c0 72 2e 0a 50 72 69 6f 72 20 74 6f 20 53 51 4c 69  r..Prior to SQLi
115d0 74 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e  te [version 3.6.
115e0 35 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 36 2e  5] ([dateof:3.6.
115f0 35 5d 29 2c 20 74 68 65 20 74 72 75 6e 63 61 74  5]), the truncat
11600 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 61  e optimization.a
11610 6c 73 6f 20 6d 65 61 6e 74 20 74 68 61 74 20 74  lso meant that t
11620 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e  he [sqlite3_chan
11630 67 65 73 28 29 5d 20 61 6e 64 0a 5b 73 71 6c 69  ges()] and.[sqli
11640 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65  te3_total_change
11650 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73 0a  s()] interfaces.
11660 61 6e 64 20 74 68 65 20 5b 63 6f 75 6e 74 5f 63  and the [count_c
11670 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d 0a 77  hanges pragma].w
11680 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  ill not actually
11690 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
116a0 65 72 20 6f 66 20 64 65 6c 65 74 65 64 20 72 6f  er of deleted ro
116b0 77 73 2e 20 20 0a 54 68 61 74 20 70 72 6f 62 6c  ws.  .That probl
116c0 65 6d 20 68 61 73 20 62 65 65 6e 20 66 69 78 65  em has been fixe
116d0 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69 6f 6e  d as of [version
116e0 20 33 2e 36 2e 35 5d 20 28 5b 64 61 74 65 6f 66   3.6.5] ([dateof
116f0 3a 33 2e 36 2e 35 5d 29 2e 0a 0a 3c 70 3e 5e 54  :3.6.5])...<p>^T
11700 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69  he truncate opti
11710 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  mization can be 
11720 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61  permanently disa
11730 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71 75 65  bled for all que
11740 72 69 65 73 0a 62 79 20 72 65 63 6f 6d 70 69 6c  ries.by recompil
11750 69 6e 67 0a 53 51 4c 69 74 65 20 77 69 74 68 20  ing.SQLite with 
11760 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d 49 54  the [SQLITE_OMIT
11770 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54 49 4d 49  _TRUNCATE_OPTIMI
11780 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c 65 2d  ZATION] compile-
11790 74 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f 70 3e  time switch.</p>
117a0 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e 63 61 74  ..<p>The truncat
117b0 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63  e optimization c
117c0 61 6e 20 61 6c 73 6f 20 62 65 20 64 69 73 61 62  an also be disab
117d0 6c 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 75  led at runtime u
117e0 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74 65  sing.the [sqlite
117f0 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72  3_set_authorizer
11800 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 20 20  ()] interface.  
11810 5e 49 66 20 61 6e 20 61 75 74 68 6f 72 69 7a 65  ^If an authorize
11820 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65 74 75 72  r callback.retur
11830 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47 4e 4f 52  ns [SQLITE_IGNOR
11840 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51 4c 49 54  E] for an [SQLIT
11850 45 5f 44 45 4c 45 54 45 5d 20 61 63 74 69 6f 6e  E_DELETE] action
11860 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74 68 65 20   code, then.the 
11870 44 45 4c 45 54 45 20 6f 70 65 72 61 74 69 6f 6e  DELETE operation
11880 20 77 69 6c 6c 20 70 72 6f 63 65 65 64 20 62 75   will proceed bu
11890 74 20 74 68 65 20 74 72 75 6e 63 61 74 65 20 6f  t the truncate o
118a0 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77 69 6c 6c  ptimization will
118b0 0a 62 65 20 62 79 70 61 73 73 65 64 20 61 6e 64  .be bypassed and
118c0 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20 64 65   rows will be de
118d0 6c 65 74 65 64 20 6f 6e 65 20 62 79 20 6f 6e 65  leted one by one
118e0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
118f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11930 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
11940 74 69 6f 6e 20 7b 44 45 54 41 43 48 20 44 41 54  tion {DETACH DAT
11950 41 42 41 53 45 7d 20 64 65 74 61 63 68 20 2a 44  ABASE} detach *D
11960 45 54 41 43 48 0a 0a 52 65 63 75 72 73 69 76 65  ETACH..Recursive
11970 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65  BubbleDiagram de
11980 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  tach-stmt.</tcl>
11990 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65  ..<p>^This state
119a0 6d 65 6e 74 20 64 65 74 61 63 68 65 73 20 61 6e  ment detaches an
119b0 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 61 74 61   additional data
119c0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
119d0 70 72 65 76 69 6f 75 73 6c 79 20 0a 61 74 74 61  previously .atta
119e0 63 68 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  ched using the [
119f0 41 54 54 41 43 48 5d 20 73 74 61 74 65 6d 65 6e  ATTACH] statemen
11a00 74 2e 20 20 0a 5e 57 68 65 6e 20 6e 6f 74 20 69  t.  .^When not i
11a10 6e 20 5b 73 68 61 72 65 64 20 63 61 63 68 65 20  n [shared cache 
11a20 6d 6f 64 65 5d 2c 20 0a 69 74 20 69 73 20 70 6f  mode], .it is po
11a30 73 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20 74  ssible to have t
11a40 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
11a50 20 66 69 6c 65 20 61 74 74 61 63 68 65 64 20 6d   file attached m
11a60 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 75 73  ultiple times us
11a70 69 6e 67 20 0a 64 69 66 66 65 72 65 6e 74 20 6e  ing .different n
11a80 61 6d 65 73 2c 20 61 6e 64 20 64 65 74 61 63 68  ames, and detach
11a90 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69  ing one connecti
11aa0 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20 77 69 6c  on to a file wil
11ab0 6c 20 6c 65 61 76 65 20 74 68 65 20 0a 6f 74 68  l leave the .oth
11ac0 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70 3e 0a  ers intact.</p>.
11ad0 5e 49 6e 20 5b 73 68 61 72 65 64 20 63 61 63 68  ^In [shared cach
11ae0 65 20 6d 6f 64 65 5d 2c 20 61 74 74 65 6d 70 74  e mode], attempt
11af0 69 6e 67 20 74 6f 20 61 74 74 61 63 68 20 74 68  ing to attach th
11b00 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
11b10 66 69 6c 65 20 6d 6f 72 65 0a 74 68 61 6e 20 6f  file more.than o
11b20 6e 63 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61  nce results in a
11b30 6e 20 65 72 72 6f 72 2e 0a 0a 0a 3c 74 63 6c 3e  n error....<tcl>
11b40 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
11b50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
11b90 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e  Section {DROP IN
11ba0 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b  DEX} dropindex {
11bb0 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 52  {DROP INDEX}}..R
11bc0 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
11bd0 61 67 72 61 6d 20 64 72 6f 70 2d 69 6e 64 65 78  agram drop-index
11be0 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
11bf0 3e 5e 54 68 65 20 44 52 4f 50 20 49 4e 44 45 58  >^The DROP INDEX
11c00 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76   statement remov
11c10 65 73 20 61 6e 20 69 6e 64 65 78 20 61 64 64 65  es an index adde
11c20 64 0a 77 69 74 68 20 74 68 65 20 5b 43 52 45 41  d.with the [CREA
11c30 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d  TE INDEX] statem
11c40 65 6e 74 2e 20 20 54 68 65 20 69 6e 64 65 78 20  ent.  The index 
11c50 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65  is completely re
11c60 6d 6f 76 65 64 20 66 72 6f 6d 0a 74 68 65 20 64  moved from.the d
11c70 69 73 6b 2e 20 20 54 68 65 20 6f 6e 6c 79 20 77  isk.  The only w
11c80 61 79 20 74 6f 20 72 65 63 6f 76 65 72 20 74 68  ay to recover th
11c90 65 20 69 6e 64 65 78 20 69 73 20 74 6f 20 72 65  e index is to re
11ca0 65 6e 74 65 72 20 74 68 65 0a 61 70 70 72 6f 70  enter the.approp
11cb0 72 69 61 74 65 20 5b 43 52 45 41 54 45 20 49 4e  riate [CREATE IN
11cc0 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70  DEX] command.</p
11cd0 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
11ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d20 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
11d30 7b 44 52 4f 50 20 54 41 42 4c 45 7d 20 64 72 6f  {DROP TABLE} dro
11d40 70 74 61 62 6c 65 20 7b 7b 44 52 4f 50 20 54 41  ptable {{DROP TA
11d50 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65  BLE}}..Recursive
11d60 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
11d70 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 0a 3c 2f  op-table-stmt.</
11d80 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52  tcl>..<p>^The DR
11d90 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  OP TABLE stateme
11da0 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 61 62  nt removes a tab
11db0 6c 65 20 61 64 64 65 64 20 77 69 74 68 20 74 68  le added with th
11dc0 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e.[CREATE TABLE]
11dd0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
11de0 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64 20   name specified 
11df0 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e 61 6d  is the.table nam
11e00 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70 65 64  e.  ^The dropped
11e10 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70 6c 65   table is comple
11e20 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f  tely removed fro
11e30 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a  m the database .
11e40 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20 64  schema and the d
11e50 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65 20 74  isk file.  The t
11e60 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62 65 20  able can not be 
11e70 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e 41 6c  recovered.  .^Al
11e80 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20 74 72  l indices and tr
11e90 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61 74 65  iggers.associate
11ea0 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
11eb0 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65 74 65   are also delete
11ec0 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  d.</p>..<p>^The 
11ed0 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58 49 53  optional IF EXIS
11ee0 54 53 20 63 6c 61 75 73 65 20 73 75 70 70 72 65  TS clause suppre
11ef0 73 73 65 73 20 74 68 65 20 65 72 72 6f 72 20 74  sses the error t
11f00 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c  hat would normal
11f10 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74 68 65  ly.result if the
11f20 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20   table does not 
11f30 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  exist.</p>..<p>^
11f40 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20  If [foreign key 
11f50 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65  constraints] are
11f60 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52 4f 50   enabled, a DROP
11f70 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 70   TABLE command p
11f80 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70 6c 69  erforms an.impli
11f90 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20 44 45  cit [DELETE | DE
11fa0 4c 45 54 45 20 46 52 4f 4d 5d 20 63 6f 6d 6d 61  LETE FROM] comma
11fb0 6e 64 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69  nd before removi
11fc0 6e 67 20 74 68 65 0a 74 61 62 6c 65 20 66 72 6f  ng the.table fro
11fd0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  m the database s
11fe0 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67  chema. ^Any trig
11ff0 67 65 72 73 20 61 74 74 61 63 68 65 64 20 74 6f  gers attached to
12000 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 0a 64   the table are.d
12010 72 6f 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20  ropped from the 
12020 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
12030 62 65 66 6f 72 65 20 74 68 65 20 69 6d 70 6c 69  before the impli
12040 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 0a  cit DELETE FROM.
12050 69 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20  is executed, so 
12060 74 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75 73  this cannot caus
12070 65 20 61 6e 79 20 74 72 69 67 67 65 72 73 20 74  e any triggers t
12080 6f 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74 72  o fire. By contr
12090 61 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63 69  ast, ^an.implici
120a0 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 64 6f  t DELETE FROM do
120b0 65 73 20 63 61 75 73 65 20 61 6e 79 20 63 6f 6e  es cause any con
120c0 66 69 67 75 72 65 64 0a 5b 66 6f 72 65 69 67 6e  figured.[foreign
120d0 20 6b 65 79 20 61 63 74 69 6f 6e 73 5d 20 74 6f   key actions] to
120e0 20 74 61 6b 65 20 70 6c 61 63 65 2e 20 0a 5e 49   take place. .^I
120f0 66 20 74 68 65 20 69 6d 70 6c 69 63 69 74 20 44  f the implicit D
12100 45 4c 45 54 45 20 46 52 4f 4d 20 65 78 65 63 75  ELETE FROM execu
12110 74 65 64 0a 61 73 20 70 61 72 74 20 6f 66 20 61  ted.as part of a
12120 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d   DROP TABLE comm
12130 61 6e 64 20 76 69 6f 6c 61 74 65 73 20 61 6e 79  and violates any
12140 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69   immediate forei
12150 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
12160 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20 69 73 20  ts,.an error is 
12170 72 65 74 75 72 6e 65 64 20 61 6e 64 20 74 68 65  returned and the
12180 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 64 72   table is not dr
12190 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74 68 65 20  opped. ^If .the 
121a0 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20  implicit DELETE 
121b0 46 52 4f 4d 20 63 61 75 73 65 73 20 61 6e 79 20  FROM causes any 
121c0 0a 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67  .deferred foreig
121d0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
121e0 73 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64  s to be violated
121f0 2c 20 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74  , and the violat
12200 69 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74  ions still.exist
12210 20 77 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61   when the transa
12220 63 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74  ction is committ
12230 65 64 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20  ed, an error is 
12240 72 65 74 75 72 6e 65 64 20 61 74 20 74 68 65 20  returned at the 
12250 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a  time.of commit..
12260 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
12270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
122a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
122b0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
122c0 52 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f  ROP TRIGGER} dro
122d0 70 74 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20  ptrigger {{DROP 
122e0 54 52 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72  TRIGGER}}..Recur
122f0 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
12300 6d 20 64 72 6f 70 2d 74 72 69 67 67 65 72 2d 73  m drop-trigger-s
12310 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
12320 54 68 65 20 44 52 4f 50 20 54 52 49 47 47 45 52  The DROP TRIGGER
12330 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76   statement remov
12340 65 73 20 61 20 74 72 69 67 67 65 72 20 63 72 65  es a trigger cre
12350 61 74 65 64 20 62 79 20 74 68 65 20 0a 5b 43 52  ated by the .[CR
12360 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
12370 61 74 65 6d 65 6e 74 2e 20 5e 4f 6e 63 65 20 72  atement. ^Once r
12380 65 6d 6f 76 65 64 2c 20 74 68 65 20 74 72 69 67  emoved, the trig
12390 67 65 72 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ger definition i
123a0 73 20 6e 6f 0a 6c 6f 6e 67 65 72 20 70 72 65 73  s no.longer pres
123b0 65 6e 74 20 69 6e 20 74 68 65 20 73 71 6c 69 74  ent in the sqlit
123c0 65 5f 6d 61 73 74 65 72 20 28 6f 72 20 73 71 6c  e_master (or sql
123d0 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29  ite_temp_master)
123e0 20 74 61 62 6c 65 20 61 6e 64 20 69 73 0a 6e 6f   table and is.no
123f0 74 20 66 69 72 65 64 20 62 79 20 61 6e 79 20 73  t fired by any s
12400 75 62 73 65 71 75 65 6e 74 20 49 4e 53 45 52 54  ubsequent INSERT
12410 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45  , UPDATE or DELE
12420 54 45 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a  TE statements...
12430 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 72  <p>^Note that tr
12440 69 67 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d  iggers are autom
12450 61 74 69 63 61 6c 6c 79 20 64 72 6f 70 70 65 64  atically dropped
12460 20 77 68 65 6e 20 74 68 65 20 61 73 73 6f 63 69   when the associ
12470 61 74 65 64 20 74 61 62 6c 65 20 69 73 0a 64 72  ated table is.dr
12480 6f 70 70 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23  opped...<tcl>.##
12490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
124a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
124b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
124c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
124d0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
124e0 74 69 6f 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d  tion {DROP VIEW}
124f0 20 64 72 6f 70 76 69 65 77 20 7b 7b 44 52 4f 50   dropview {{DROP
12500 20 56 49 45 57 7d 7d 0a 0a 52 65 63 75 72 73 69   VIEW}}..Recursi
12510 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
12520 64 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 0a 3c  drop-view-stmt.<
12530 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
12540 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65  ROP VIEW stateme
12550 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65  nt removes a vie
12560 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65  w created by the
12570 20 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20 0a   [CREATE VIEW] .
12580 20 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54 68    statement. ^Th
12590 65 20 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f  e view definitio
125a0 6e 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f  n is removed fro
125b0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  m the database s
125c0 63 68 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e 6f  chema, but .  no
125d0 20 61 63 74 75 61 6c 20 64 61 74 61 20 69 6e 20   actual data in 
125e0 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 62  the underlying b
125f0 61 73 65 20 74 61 62 6c 65 73 20 69 73 20 6d 6f  ase tables is mo
12600 64 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68  dified...<p>^(Th
12610 65 20 76 69 65 77 20 74 6f 20 64 72 6f 70 20 69  e view to drop i
12620 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  s identified by 
12630 74 68 65 20 76 69 65 77 2d 6e 61 6d 65 20 61 6e  the view-name an
12640 64 20 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 73 63  d optional .  sc
12650 68 65 6d 61 2d 6e 61 6d 65 20 73 70 65 63 69 66  hema-name specif
12660 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  ied as part of t
12670 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61  he DROP VIEW sta
12680 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 0a 20 20  tement. This .  
12690 72 65 66 65 72 65 6e 63 65 20 69 73 20 72 65 73  reference is res
126a0 6f 6c 76 65 64 20 75 73 69 6e 67 20 74 68 65 20  olved using the 
126b0 73 74 61 6e 64 61 72 64 20 70 72 6f 63 65 64 75  standard procedu
126c0 72 65 20 66 6f 72 20 5b 6f 62 6a 65 63 74 20 72  re for [object r
126d0 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e 0a 0a 3c  esolution].)^..<
126e0 70 3e 0a 20 20 5e 49 66 20 74 68 65 20 73 70 65  p>.  ^If the spe
126f0 63 69 66 69 65 64 20 76 69 65 77 20 63 61 6e 6e  cified view cann
12700 6f 74 20 62 65 20 66 6f 75 6e 64 20 61 6e 64 20  ot be found and 
12710 74 68 65 20 49 46 20 45 58 49 53 54 53 20 63 6c  the IF EXISTS cl
12720 61 75 73 65 20 69 73 20 6e 6f 74 20 0a 20 20 70  ause is not .  p
12730 72 65 73 65 6e 74 2c 20 69 74 20 69 73 20 61 6e  resent, it is an
12740 20 65 72 72 6f 72 2e 20 5e 49 66 20 74 68 65 20   error. ^If the 
12750 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20 63  specified view c
12760 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61  annot be found a
12770 6e 64 20 61 6e 20 49 46 0a 20 20 45 58 49 53 54  nd an IF.  EXIST
12780 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  S clause is pres
12790 65 6e 74 20 69 6e 20 74 68 65 20 44 52 4f 50 20  ent in the DROP 
127a0 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74 2c 20  VIEW statement, 
127b0 74 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d 65  then the stateme
127c0 6e 74 0a 20 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  nt.  is a no-op.
127d0 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
127e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
127f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12820 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
12830 7b 44 61 74 61 62 61 73 65 20 4f 62 6a 65 63 74  {Database Object
12840 20 4e 61 6d 65 20 52 65 73 6f 6c 75 74 69 6f 6e   Name Resolution
12850 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b 6f 62 6a  } {naming} {{obj
12860 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 7d 7d  ect resolution}}
12870 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20 49  .</tcl>..<p>.  I
12880 6e 20 53 51 4c 69 74 65 2c 20 61 20 64 61 74 61  n SQLite, a data
12890 62 61 73 65 20 6f 62 6a 65 63 74 20 28 61 20 74  base object (a t
128a0 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 74 72 69  able, index, tri
128b0 67 67 65 72 20 6f 72 20 76 69 65 77 29 20 69 73  gger or view) is
128c0 20 69 64 65 6e 74 69 66 69 65 64 0a 20 20 62 79   identified.  by
128d0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
128e0 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65 20   object and the 
128f0 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
12900 62 61 73 65 20 74 68 61 74 20 69 74 20 72 65 73  base that it res
12910 69 64 65 73 20 69 6e 2e 20 0a 20 20 44 61 74 61  ides in. .  Data
12920 62 61 73 65 20 6f 62 6a 65 63 74 73 20 6d 61 79  base objects may
12930 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20 6d   reside in the m
12940 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68  ain database, th
12950 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 2c  e temp database,
12960 20 6f 72 20 69 6e 0a 20 20 61 6e 20 5b 41 54 54   or in.  an [ATT
12970 41 43 48 7c 61 74 74 61 63 68 65 64 20 64 61 74  ACH|attached dat
12980 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a 20 20 54  abase]...<p>.  T
12990 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65  he syntax of the
129a0 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 2c 20 5b   [DROP TABLE], [
129b0 44 52 4f 50 20 49 4e 44 45 58 5d 2c 20 5b 44 52  DROP INDEX], [DR
129c0 4f 50 20 56 49 45 57 5d 2c 20 5b 44 52 4f 50 20  OP VIEW], [DROP 
129d0 54 52 49 47 47 45 52 5d 2c 0a 20 20 5b 52 45 49  TRIGGER],.  [REI
129e0 4e 44 45 58 5d 2c 20 5b 41 4c 54 45 52 20 54 41  NDEX], [ALTER TA
129f0 42 4c 45 5d 20 61 6e 64 20 6d 61 6e 79 20 6f 74  BLE] and many ot
12a00 68 65 72 20 63 6f 6d 6d 61 6e 64 73 20 61 6c 6c  her commands all
12a10 20 70 65 72 6d 69 74 20 74 68 65 20 75 73 65 72   permit the user
12a20 20 74 6f 0a 20 20 73 70 65 63 69 66 79 20 61 20   to.  specify a 
12a30 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 20  database object 
12a40 65 69 74 68 65 72 20 62 79 20 69 74 73 20 6e 61  either by its na
12a50 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72 20 62 79 20  me alone, or by 
12a60 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  a combination of
12a70 0a 20 20 69 74 73 20 6e 61 6d 65 20 61 6e 64 20  .  its name and 
12a80 74 68 65 20 6e 61 6d 65 20 6f 66 20 69 74 73 20  the name of its 
12a90 64 61 74 61 62 61 73 65 2e 20 5e 28 49 66 20 6e  database. ^(If n
12aa0 6f 20 64 61 74 61 62 61 73 65 20 69 73 20 73 70  o database is sp
12ab0 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 0a  ecified as part.
12ac0 20 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20    of the object 
12ad0 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65 6e 20  reference, then 
12ae0 53 51 4c 69 74 65 20 73 65 61 72 63 68 65 73 20  SQLite searches 
12af0 74 68 65 20 6d 61 69 6e 2c 20 74 65 6d 70 20 61  the main, temp a
12b00 6e 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64 0a  nd all attached.
12b10 20 20 64 61 74 61 62 61 73 65 73 20 66 6f 72 20    databases for 
12b20 61 6e 20 6f 62 6a 65 63 74 20 77 69 74 68 20 61  an object with a
12b30 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e 20   matching name. 
12b40 54 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  The temp databas
12b50 65 20 69 73 20 73 65 61 72 63 68 65 64 0a 20 20  e is searched.  
12b60 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77 65 64 20  first, followed 
12b70 62 79 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  by the main data
12b80 62 61 73 65 2c 20 66 6f 6c 6c 6f 77 65 64 20 61  base, followed a
12b90 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
12ba0 62 61 73 65 73 20 69 6e 20 74 68 65 0a 20 20 6f  bases in the.  o
12bb0 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20 77  rder that they w
12bc0 65 72 65 20 61 74 74 61 63 68 65 64 2e 20 54 68  ere attached. Th
12bd0 65 20 72 65 66 65 72 65 6e 63 65 20 72 65 73 6f  e reference reso
12be0 6c 76 65 73 20 74 6f 20 74 68 65 20 66 69 72 73  lves to the firs
12bf0 74 20 6d 61 74 63 68 0a 20 20 66 6f 75 6e 64 2e  t match.  found.
12c00 29 5e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a  )^ For example:.
12c10 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20 20 20 2f  .<pre>^(.      /
12c20 2a 20 41 64 64 20 61 20 74 61 62 6c 65 20 6e 61  * Add a table na
12c30 6d 65 64 20 27 74 31 27 20 74 6f 20 74 68 65 20  med 't1' to the 
12c40 74 65 6d 70 2c 20 6d 61 69 6e 20 61 6e 64 20 61  temp, main and a
12c50 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
12c60 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 41 54 54  ase */.      ATT
12c70 41 43 48 20 27 66 69 6c 65 2e 64 62 27 20 41 53  ACH 'file.db' AS
12c80 20 61 75 78 3b 0a 20 20 20 20 20 20 43 52 45 41   aux;.      CREA
12c90 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79  TE TABLE t1(x, y
12ca0 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  );.      CREATE 
12cb0 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 78 2c  TEMP TABLE t1(x,
12cc0 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54   y);.      CREAT
12cd0 45 20 54 41 42 4c 45 20 61 75 78 2e 74 31 28 78  E TABLE aux.t1(x
12ce0 2c 20 79 29 3b 0a 0a 20 20 20 20 20 20 44 52 4f  , y);..      DRO
12cf0 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20  P TABLE t1;     
12d00 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c      /* Drop tabl
12d10 65 20 69 6e 20 74 65 6d 70 20 64 61 74 61 62 61  e in temp databa
12d20 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50  se */.      DROP
12d30 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20   TABLE t1;      
12d40 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65     /* Drop table
12d50 20 69 6e 20 6d 61 69 6e 20 64 61 74 61 62 61 73   in main databas
12d60 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50 20  e */.      DROP 
12d70 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20 20  TABLE t1;       
12d80 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65 20    /* Drop table 
12d90 69 6e 20 61 75 78 20 64 61 74 61 62 61 73 65 20  in aux database 
12da0 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c 70 3e  */.)^</pre>..<p>
12db0 0a 20 20 5e 49 66 20 61 20 73 63 68 65 6d 61 20  .  ^If a schema 
12dc0 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65  name is specifie
12dd0 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
12de0 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65  object reference
12df0 2c 20 69 74 20 6d 75 73 74 20 62 65 0a 20 20 65  , it must be.  e
12e00 69 74 68 65 72 20 22 6d 61 69 6e 22 2c 20 6f 72  ither "main", or
12e10 20 22 74 65 6d 70 22 20 6f 72 20 74 68 65 20 73   "temp" or the s
12e20 63 68 65 6d 61 2d 6e 61 6d 65 20 6f 66 20 61 6e  chema-name of an
12e30 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
12e40 73 65 2e 0a 20 20 5e 4c 69 6b 65 20 6f 74 68 65  se..  ^Like othe
12e50 72 20 53 51 4c 20 69 64 65 6e 74 69 66 69 65 72  r SQL identifier
12e60 73 2c 20 73 63 68 65 6d 61 20 6e 61 6d 65 73 20  s, schema names 
12e70 61 72 65 20 63 61 73 65 2d 69 6e 73 65 6e 73 69  are case-insensi
12e80 74 69 76 65 2e 0a 20 20 5e 49 66 20 61 20 73 63  tive..  ^If a sc
12e90 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70 65  hema name is spe
12ea0 63 69 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c  cified, then onl
12eb0 79 20 74 68 61 74 20 6f 6e 65 20 73 63 68 65 6d  y that one schem
12ec0 61 20 69 73 20 73 65 61 72 63 68 65 64 20 66 6f  a is searched fo
12ed0 72 0a 20 20 74 68 65 20 6e 61 6d 65 64 20 6f 62  r.  the named ob
12ee0 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20 4d 6f 73  ject...<p>.  Mos
12ef0 74 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e  t object referen
12f00 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 72 65 73  ces may only res
12f10 6f 6c 76 65 20 74 6f 20 61 20 73 70 65 63 69 66  olve to a specif
12f20 69 63 20 74 79 70 65 20 6f 66 20 6f 62 6a 65 63  ic type of objec
12f30 74 20 28 66 6f 72 0a 20 20 65 78 61 6d 70 6c 65  t (for.  example
12f40 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 68 61   a reference tha
12f50 74 20 69 73 20 70 61 72 74 20 6f 66 20 61 20 44  t is part of a D
12f60 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ROP TABLE statem
12f70 65 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 72 65 73  ent may only res
12f80 6f 6c 76 65 0a 20 20 74 6f 20 61 20 74 61 62 6c  olve.  to a tabl
12f90 65 20 6f 62 6a 65 63 74 2c 20 6e 6f 74 20 61 6e  e object, not an
12fa0 20 69 6e 64 65 78 2c 20 74 72 69 67 67 65 72 20   index, trigger 
12fb0 6f 72 20 76 69 65 77 29 2e 20 48 6f 77 65 76 65  or view). Howeve
12fc0 72 20 69 6e 20 73 6f 6d 65 20 63 6f 6e 74 65 78  r in some contex
12fd0 74 73 20 0a 20 20 28 65 2e 67 2e 20 5b 52 45 49  ts .  (e.g. [REI
12fe0 4e 44 45 58 5d 29 20 61 6e 20 6f 62 6a 65 63 74  NDEX]) an object
12ff0 20 72 65 66 65 72 65 6e 63 65 20 6d 61 79 20 62   reference may b
13000 65 20 72 65 73 6f 6c 76 65 20 74 6f 20 6d 6f 72  e resolve to mor
13010 65 20 74 68 61 6e 20 6f 6e 65 20 74 79 70 65 0a  e than one type.
13020 20 20 6f 66 20 6f 62 6a 65 63 74 2e 20 5e 57 68    of object. ^Wh
13030 65 6e 20 73 65 61 72 63 68 69 6e 67 20 64 61 74  en searching dat
13040 61 62 61 73 65 20 73 63 68 65 6d 61 73 20 66 6f  abase schemas fo
13050 72 20 61 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74  r a named object
13060 2c 20 6f 62 6a 65 63 74 73 20 6f 66 0a 20 20 74  , objects of.  t
13070 79 70 65 73 20 74 68 61 74 20 63 61 6e 6e 6f 74  ypes that cannot
13080 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20   be used in the 
13090 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20 72  context of the r
130a0 65 66 65 72 65 6e 63 65 20 61 72 65 20 61 6c 77  eference are alw
130b0 61 79 73 20 0a 20 20 69 67 6e 6f 72 65 64 2e 0a  ays .  ignored..
130c0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
130d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
130e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
130f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13110 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45 58  #####.Section EX
13120 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45 58  PLAIN explain EX
13130 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69 61  PLAIN..BubbleDia
13140 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c 2f  gram sql-stmt.</
13150 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51 4c  tcl>..<p>^An SQL
13160 20 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20 62   statement can b
13170 65 20 70 72 65 63 65 64 65 64 20 62 79 20 74 68  e preceded by th
13180 65 20 6b 65 79 77 6f 72 64 20 22 45 58 50 4c 41  e keyword "EXPLA
13190 49 4e 22 20 6f 72 0a 62 79 20 74 68 65 20 70 68  IN" or.by the ph
131a0 72 61 73 65 20 22 45 58 50 4c 41 49 4e 20 51 55  rase "EXPLAIN QU
131b0 45 52 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69 74  ERY PLAN".  ^Eit
131c0 68 65 72 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e  her modification
131d0 20 63 61 75 73 65 73 20 74 68 65 0a 53 51 4c 20   causes the.SQL 
131e0 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 62 65 68  statement to beh
131f0 61 76 65 20 61 73 20 61 20 71 75 65 72 79 20 61  ave as a query a
13200 6e 64 20 74 6f 20 72 65 74 75 72 6e 20 69 6e 66  nd to return inf
13210 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a 68  ormation about.h
13220 6f 77 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ow the SQL state
13230 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ment would have 
13240 6f 70 65 72 61 74 65 64 20 69 66 20 74 68 65 20  operated if the 
13250 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20  EXPLAIN keyword 
13260 6f 72 0a 70 68 72 61 73 65 20 68 61 64 20 62 65  or.phrase had be
13270 65 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e 0a  en omitted.</p>.
13280 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74 20 66  .<p>The output f
13290 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61 6e 64 20  rom EXPLAIN and 
132a0 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
132b0 41 4e 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  AN is intended f
132c0 6f 72 0a 69 6e 74 65 72 61 63 74 69 76 65 20 61  or.interactive a
132d0 6e 61 6c 79 73 69 73 20 61 6e 64 20 74 72 6f 75  nalysis and trou
132e0 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c 79  bleshooting only
132f0 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20 6f  .  The details o
13300 66 20 74 68 65 20 0a 6f 75 74 70 75 74 20 66 6f  f the .output fo
13310 72 6d 61 74 20 61 72 65 20 73 75 62 6a 65 63 74  rmat are subject
13320 20 74 6f 20 63 68 61 6e 67 65 20 66 72 6f 6d 20   to change from 
13330 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f 66 20 53  one release of S
13340 51 4c 69 74 65 20 74 6f 20 74 68 65 20 6e 65 78  QLite to the nex
13350 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73 20  t..Applications 
13360 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73 65 20 45  should not use E
13370 58 50 4c 41 49 4e 20 6f 72 20 45 58 50 4c 41 49  XPLAIN or EXPLAI
13380 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 69 6e  N QUERY PLAN sin
13390 63 65 0a 74 68 65 69 72 20 65 78 61 63 74 20 62  ce.their exact b
133a0 65 68 61 76 69 6f 72 20 69 73 20 76 61 72 69 61  ehavior is varia
133b0 62 6c 65 20 61 6e 64 20 6f 6e 6c 79 20 70 61 72  ble and only par
133c0 74 69 61 6c 6c 79 20 64 6f 63 75 6d 65 6e 74 65  tially documente
133d0 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  d.</p>..<p>^When
133e0 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79   the EXPLAIN key
133f0 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 79 20  word appears by 
13400 69 74 73 65 6c 66 20 69 74 20 63 61 75 73 65 73  itself it causes
13410 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 74   the statement.t
13420 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71 75  o behave as a qu
13430 65 72 79 20 74 68 61 74 20 72 65 74 75 72 6e 73  ery that returns
13440 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66   the sequence of
13450 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61 63 68 69   .[virtual machi
13460 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 5d  ne instructions]
13470 20 69 74 20 77 6f 75 6c 64 20 68 61 76 65 20 75   it would have u
13480 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 74  sed to execute t
13490 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64 0a 74  he command had.t
134a0 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  he EXPLAIN keywo
134b0 72 64 20 6e 6f 74 20 62 65 65 6e 20 70 72 65 73  rd not been pres
134c0 65 6e 74 2e 20 5e 57 68 65 6e 20 74 68 65 20 45  ent. ^When the E
134d0 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
134e0 4e 20 70 68 72 61 73 65 0a 61 70 70 65 61 72 73  N phrase.appears
134f0 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
13500 72 65 74 75 72 6e 73 20 68 69 67 68 2d 6c 65 76  returns high-lev
13510 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 72  el information r
13520 65 67 61 72 64 69 6e 67 20 74 68 65 20 71 75 65  egarding the que
13530 72 79 0a 70 6c 61 6e 20 74 68 61 74 20 77 6f 75  ry.plan that wou
13540 6c 64 20 68 61 76 65 20 62 65 65 6e 20 75 73 65  ld have been use
13550 64 2e 0a 0a 54 68 65 20 45 58 50 4c 41 49 4e 20  d...The EXPLAIN 
13560 51 55 45 52 59 20 50 4c 41 4e 20 63 6f 6d 6d 61  QUERY PLAN comma
13570 6e 64 20 69 73 20 64 65 73 63 72 69 62 65 64 20  nd is described 
13580 69 6e 20 0a 5b 65 78 70 6c 61 69 6e 20 71 75 65  in .[explain que
13590 72 79 20 70 6c 61 6e 7c 6d 6f 72 65 20 64 65 74  ry plan|more det
135a0 61 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c 74 63 6c  ail here]...<tcl
135b0 3e 0a 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 23 23 23 23 23 23  ################
13600 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73 73  .Section express
13610 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78 70 72 65  ion expr {*expre
13620 73 73 69 6f 6e 20 7b 65 78 70 72 65 73 73 69 6f  ssion {expressio
13630 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 52 65 63 75  n syntax}}..Recu
13640 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
13650 61 6d 20 65 78 70 72 0a 3c 2f 74 63 6c 3e 0a 0a  am expr.</tcl>..
13660 3c 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e 20  <p>This section 
13670 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  is different fro
13680 6d 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20 4d  m the others.  M
13690 6f 73 74 20 6f 74 68 65 72 20 73 65 63 74 69 6f  ost other sectio
136a0 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d  ns of.this docum
136b0 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74 20  ent talks about 
136c0 61 20 70 61 72 74 69 63 75 6c 61 72 20 53 51 4c  a particular SQL
136d0 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20   command.  This 
136e0 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74  section does.not
136f0 20 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73 74   talk about a st
13700 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64  andalone command
13710 20 62 75 74 20 61 62 6f 75 74 20 22 65 78 70 72   but about "expr
13720 65 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20 61  essions" which a
13730 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74  re .subcomponent
13740 73 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72 20  s of most other 
13750 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c  commands.</p>..<
13760 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
13770 62 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61 72  binaryops {binar
13780 79 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74 63  y operators}</tc
13790 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72 73  l>.<h3>Operators
137a0 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69 74  </h3>.<p>^(SQLit
137b0 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68  e understands th
137c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e 61  e following bina
137d0 72 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69 6e  ry operators, in
137e0 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67 68   order from.high
137f0 65 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70 72  est to lowest pr
13800 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c  ecedence:</p>..<
13810 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
13820 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32  .<font color="#2
13830 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a 2a  c2cf0"><big>||.*
13840 20 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20 20      /    %.+    
13850 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67 74  -.&lt;&lt;   &gt
13860 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20 20  ;&gt;   &amp;   
13870 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b 3d   |.&lt;    &lt;=
13880 20 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b 3d     &gt;    &gt;=
13890 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20 20  .=    ==   !=   
138a0 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69 67  &lt;&gt;   </big
138b0 3e 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20 49  >IS   IS NOT   I
138c0 4e 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42 20  N   LIKE   GLOB 
138d0 20 20 4d 41 54 43 48 20 20 20 52 45 47 45 58 50    MATCH   REGEXP
138e0 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e 74  .AND   .OR</font
138f0 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  >.</pre></blockq
13900 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53 75  uote>)^..<p>^(Su
13910 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70 72  pported unary pr
13920 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20 61  efix operators a
13930 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a 3c  re these:</p>..<
13940 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
13950 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32  .<font color="#2
13960 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20 20  c2cf0"><big>-   
13970 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c 2f   +    ~    NOT</
13980 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72  big></font>.</pr
13990 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  e></blockquote>)
139a0 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ^..<tcl>hd_fragm
139b0 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b 43  ent collateop {C
139c0 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 7d  OLLATE operator}
139d0 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 43  </tcl>.<p>^The C
139e0 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
139f0 69 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74 66  is a unary postf
13a00 69 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61 74  ix.operator that
13a10 20 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c 6c   assigns a [coll
13a20 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d 20  ating sequence] 
13a30 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  to an expression
13a40 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f  ..^The COLLATE o
13a50 70 65 72 61 74 6f 72 20 68 61 73 20 61 20 68 69  perator has a hi
13a60 67 68 65 72 20 70 72 65 63 65 64 65 6e 63 65 20  gher precedence 
13a70 28 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67 68  (binds more tigh
13a80 74 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 62 69  tly) than any.bi
13a90 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20 61 6e  nary operator an
13aa0 64 20 61 6e 79 20 75 6e 61 72 79 20 70 72 65 66  d any unary pref
13ab0 69 78 20 6f 70 65 72 61 74 6f 72 20 65 78 63 65  ix operator exce
13ac0 70 74 20 22 7e 22 2e 0a 28 43 4f 4c 4c 41 54 45  pt "~"..(COLLATE
13ad0 20 61 6e 64 20 22 7e 22 20 61 72 65 20 61 73 73   and "~" are ass
13ae0 6f 63 69 61 74 69 76 65 20 73 6f 20 74 68 65 69  ociative so thei
13af0 72 20 62 69 6e 64 69 6e 67 20 6f 72 64 65 72 20  r binding order 
13b00 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 2e  does not matter.
13b10 29 0a 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6e 67  ).^The collating
13b20 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79   sequence set by
13b30 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65   the COLLATE ope
13b40 72 61 74 6f 72 20 6f 76 65 72 72 69 64 65 73 20  rator overrides 
13b50 74 68 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the.collating se
13b60 71 75 65 6e 63 65 20 64 65 74 65 72 6d 69 6e 65  quence determine
13b70 64 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54 45  d by the COLLATE
13b80 20 63 6c 61 75 73 65 20 69 6e 20 61 20 74 61 62   clause in a tab
13b90 6c 65 0a 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  le.[column defin
13ba0 69 74 69 6f 6e 5d 2e 0a 53 65 65 20 74 68 65 20  ition]..See the 
13bb0 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  [collating seque
13bc0 6e 63 65 7c 20 64 65 74 61 69 6c 65 64 20 64 69  nce| detailed di
13bd0 73 63 75 73 73 69 6f 6e 20 6f 6e 20 63 6f 6c 6c  scussion on coll
13be0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 5d  ating sequences]
13bf0 0a 69 6e 20 74 68 65 20 5b 64 61 74 61 74 79 70  .in the [datatyp
13c00 65 20 7c 20 44 61 74 61 74 79 70 65 20 49 6e 20  e | Datatype In 
13c10 53 51 4c 69 74 65 33 5d 20 64 6f 63 75 6d 65 6e  SQLite3] documen
13c20 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  t for additional
13c30 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 3c 2f   information..</
13c40 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73  p>..<tcl>hd_puts
13c50 20 22 0a 3c 70 3e 5e 54 68 65 20 75 6e 61 72 79   ".<p>^The unary
13c60 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61   operator [Opera
13c70 74 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f  tor +] is a no-o
13c80 70 2e 20 20 5e 49 74 20 63 61 6e 20 62 65 20 61  p.  ^It can be a
13c90 70 70 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e 67  pplied.to string
13ca0 73 2c 20 6e 75 6d 62 65 72 73 2c 20 62 6c 6f 62  s, numbers, blob
13cb0 73 20 6f 72 20 4e 55 4c 4c 20 61 6e 64 20 69 74  s or NULL and it
13cc0 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20   always returns 
13cd0 61 20 72 65 73 75 6c 74 0a 77 69 74 68 20 74 68  a result.with th
13ce0 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20  e same value as 
13cf0 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e  the operand.</p>
13d00 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65  "</tcl>..<p>Note
13d10 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65 20   that there are 
13d20 74 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20 6f  two variations o
13d30 66 20 74 68 65 20 65 71 75 61 6c 73 20 61 6e 64  f the equals and
13d40 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65 72   not equals.oper
13d50 61 74 6f 72 73 2e 20 20 5e 45 71 75 61 6c 73 20  ators.  ^Equals 
13d60 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 0a 3c  can be either..<
13d70 74 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b 4f  tcl>.hd_puts "[O
13d80 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b 4f  perator =] or [O
13d90 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54 68  perator ==]..^Th
13da0 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70 65  e non-equals ope
13db0 72 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69 74  rator can be eit
13dc0 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21 3d  her.[Operator !=
13dd0 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 7b  ] or [Operator {
13de0 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68 65  &lt;&gt;}]..^The
13df0 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f   [Operator ||] o
13e00 70 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e  perator is \"con
13e10 63 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74 20  catenate\" - it 
13e20 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a 74  joins together.t
13e30 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20 6f  he two strings o
13e40 66 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a  f its operands..
13e50 5e 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f  ^The operator [O
13e60 70 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70 75  perator %] outpu
13e70 74 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ts the integer v
13e80 61 6c 75 65 20 6f 66 20 69 74 73 20 6c 65 66 74  alue of its left
13e90 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f   .operand modulo
13ea0 20 69 74 73 20 72 69 67 68 74 20 6f 70 65 72 61   its right opera
13eb0 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
13ec0 72 64 73 2c 20 74 68 65 0a 6f 70 65 72 61 74 6f  rds, the.operato
13ed0 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20 77  r [Operator %] w
13ee0 6f 72 6b 73 20 69 6e 20 53 51 4c 69 74 65 20 74  orks in SQLite t
13ef0 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 64 6f  he same as it do
13f00 65 73 0a 69 6e 20 41 4e 53 49 2d 43 2e 3c 2f 70  es.in ANSI-C.</p
13f10 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c  >..<p>^The resul
13f20 74 20 6f 66 20 61 6e 79 20 62 69 6e 61 72 79 20  t of any binary 
13f30 6f 70 65 72 61 74 6f 72 20 69 73 20 65 69 74 68  operator is eith
13f40 65 72 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c  er a numeric val
13f50 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c 20 65 78 63  ue or .NULL, exc
13f60 65 70 74 20 66 6f 72 20 74 68 65 20 5b 4f 70 65  ept for the [Ope
13f70 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74  rator ||] concat
13f80 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72  enation operator
13f90 20 77 68 69 63 68 20 61 6c 77 61 79 73 20 0a 65   which always .e
13fa0 76 61 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68  valuates to eith
13fb0 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 74 65 78  er NULL or a tex
13fc0 74 20 76 61 6c 75 65 2e 3c 2f 70 3e 22 0a 0a 68  t value.</p>"..h
13fd0 64 5f 66 72 61 67 6d 65 6e 74 20 7b 69 73 69 73  d_fragment {isis
13fe0 6e 6f 74 7d 20 7b 49 53 20 6f 70 65 72 61 74 6f  not} {IS operato
13ff0 72 7d 20 7b 49 53 20 4e 4f 54 20 6f 70 65 72 61  r} {IS NOT opera
14000 74 6f 72 7d 0a 0a 68 64 5f 70 75 74 73 20 22 3c  tor}..hd_puts "<
14010 70 3e 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72  p>^The [Operator
14020 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74   IS] and [Operat
14030 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 6f 70 65  or {IS NOT}] ope
14040 72 61 74 6f 72 73 20 77 6f 72 6b 0a 6c 69 6b 65  rators work.like
14050 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 61 6e   [Operator =] an
14060 64 20 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20  d [Operator !=] 
14070 65 78 63 65 70 74 20 77 68 65 6e 20 6f 6e 65 20  except when one 
14080 6f 72 20 62 6f 74 68 20 6f 66 20 74 68 65 0a 6f  or both of the.o
14090 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
140a0 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c  . ^In this case,
140b0 20 69 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   if both operand
140c0 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 68 65 6e  s are NULL, then
140d0 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74 6f 72   the.IS operator
140e0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31 20   evaluates to 1 
140f0 28 74 72 75 65 29 20 61 6e 64 20 74 68 65 20 49  (true) and the I
14100 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 65  S NOT operator e
14110 76 61 6c 75 61 74 65 73 0a 74 6f 20 30 20 28 66  valuates.to 0 (f
14120 61 6c 73 65 29 2e 20 5e 49 66 20 6f 6e 65 20 6f  alse). ^If one o
14130 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 61  perand is NULL a
14140 6e 64 20 74 68 65 20 6f 74 68 65 72 20 69 73 20  nd the other is 
14150 6e 6f 74 2c 20 74 68 65 6e 20 74 68 65 0a 49 53  not, then the.IS
14160 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
14170 74 65 73 20 74 6f 20 30 20 28 66 61 6c 73 65 29  tes to 0 (false)
14180 20 61 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20   and the IS NOT 
14190 6f 70 65 72 61 74 6f 72 20 69 73 20 31 20 28 74  operator is 1 (t
141a0 72 75 65 29 2e 0a 5e 49 74 20 69 73 20 6e 6f 74  rue)..^It is not
141b0 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 61 6e   possible for an
141c0 20 49 53 20 6f 72 20 49 53 20 4e 4f 54 20 65 78   IS or IS NOT ex
141d0 70 72 65 73 73 69 6f 6e 20 74 6f 20 65 76 61 6c  pression to eval
141e0 75 61 74 65 20 74 6f 20 4e 55 4c 4c 2e 0a 5e 4f  uate to NULL..^O
141f0 70 65 72 61 74 6f 72 73 20 5b 4f 70 65 72 61 74  perators [Operat
14200 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72  or IS] and [Oper
14210 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 68  ator {IS NOT}] h
14220 61 76 65 20 74 68 65 20 73 61 6d 65 20 0a 70 72  ave the same .pr
14230 65 63 65 64 65 6e 63 65 20 61 73 20 5b 4f 70 65  ecedence as [Ope
14240 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c 74 63 6c  rator =]."..<tcl
14250 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 74  >hd_fragment lit
14260 76 61 6c 75 65 20 7b 6c 69 74 65 72 61 6c 20 76  value {literal v
14270 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  alue}</tcl>.<h3>
14280 4c 69 74 65 72 61 6c 20 56 61 6c 75 65 73 20 28  Literal Values (
14290 43 6f 6e 73 74 61 6e 74 73 29 3c 2f 68 33 3e 0a  Constants)</h3>.
142a0 3c 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20 76 61  <p>.A literal va
142b0 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  lue represents a
142c0 20 63 6f 6e 73 74 61 6e 74 2e 0a 5e 4c 69 74 65   constant..^Lite
142d0 72 61 6c 20 76 61 6c 75 65 73 20 6d 61 79 20 62  ral values may b
142e0 65 20 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f 61  e integers, floa
142f0 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
14300 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c 4f  rs, strings,.BLO
14310 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 0a 3c 70  Bs, or NULLs..<p
14320 3e 0a 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72  >.The syntax for
14330 20 69 6e 74 65 67 65 72 20 61 6e 64 20 66 6c 6f   integer and flo
14340 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65  ating point lite
14350 72 61 6c 73 20 28 63 6f 6c 6c 65 63 74 69 76 65  rals (collective
14360 6c 79 0a 22 6e 75 6d 65 72 69 63 20 6c 69 74 65  ly."numeric lite
14370 72 61 6c 73 22 29 20 69 73 20 73 68 6f 77 6e 20  rals") is shown 
14380 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  by the following
14390 20 64 69 61 67 72 61 6d 3a 3c 2f 70 3e 0a 0a 3c   diagram:</p>..<
143a0 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61  tcl>BubbleDiagra
143b0 6d 20 6e 75 6d 65 72 69 63 2d 6c 69 74 65 72 61  m numeric-litera
143c0 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28 49  l</tcl>..<p>.^(I
143d0 66 20 61 20 6e 75 6d 65 72 69 63 20 6c 69 74 65  f a numeric lite
143e0 72 61 6c 20 68 61 73 20 61 20 64 65 63 69 6d 61  ral has a decima
143f0 6c 20 70 6f 69 6e 74 20 6f 72 20 61 6e 20 65 78  l point or an ex
14400 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61  ponentiation.cla
14410 75 73 65 20 6f 72 20 69 66 20 69 74 73 20 6d 61  use or if its ma
14420 67 6e 69 74 75 64 65 20 69 73 20 6c 65 73 73 20  gnitude is less 
14430 74 68 61 6e 20 2d 39 32 32 33 33 37 32 30 33 36  than -9223372036
14440 38 35 34 37 37 35 38 30 38 20 6f 72 0a 67 72 65  854775808 or.gre
14450 61 74 65 72 20 74 68 61 6e 20 39 32 32 33 33 37  ater than 922337
14460 32 30 33 36 38 35 34 37 37 35 38 30 37 2c 20 74  2036854775807, t
14470 68 65 6e 20 69 74 20 69 73 20 61 20 66 6c 6f 61  hen it is a floa
14480 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72  ting point liter
14490 61 6c 2e 0a 4f 74 68 65 72 77 69 73 65 20 69 73  al..Otherwise is
144a0 20 69 74 20 69 73 20 61 6e 20 20 69 6e 74 65 67   it is an  integ
144b0 65 72 20 6c 69 74 65 72 61 6c 2e 29 5e 0a 5e 54  er literal.)^.^T
144c0 68 65 20 22 45 22 20 63 68 61 72 61 63 74 65 72  he "E" character
144d0 20 74 68 61 74 20 62 65 67 69 6e 73 20 74 68 65   that begins the
144e0 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a   exponentiation.
144f0 63 6c 61 75 73 65 20 6f 66 20 61 20 66 6c 6f 61  clause of a floa
14500 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72  ting point liter
14510 61 6c 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  al can be either
14520 20 75 70 70 65 72 20 6f 72 20 6c 6f 77 65 72 20   upper or lower 
14530 63 61 73 65 2e 0a 5e 28 54 68 65 20 22 2e 22 20  case..^(The "." 
14540 63 68 61 72 61 63 74 65 72 20 69 73 20 61 6c 77  character is alw
14550 61 79 73 20 75 73 65 64 20 0a 61 73 20 74 68 65  ays used .as the
14560 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65   decimal point e
14570 76 65 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c  ven if the local
14580 65 20 73 65 74 74 69 6e 67 20 73 70 65 63 69 66  e setting specif
14590 69 65 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73  ies "," for.this
145a0 20 72 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20   role - the use 
145b0 6f 66 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64  of "," for the d
145c0 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75  ecimal point wou
145d0 6c 64 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e  ld result in.syn
145e0 74 61 63 74 69 63 20 61 6d 62 69 67 75 69 74 79  tactic ambiguity
145f0 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  .)^..<tcl>hd_fra
14600 67 6d 65 6e 74 20 68 65 78 69 6e 74 20 7b 68 65  gment hexint {he
14610 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
14620 72 20 6c 69 74 65 72 61 6c 73 7d 20 7b 68 65 78  r literals} {hex
14630 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
14640 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 48 65 78  s}</tcl>.<p>^Hex
14650 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
14660 20 6c 69 74 65 72 61 6c 73 20 66 6f 6c 6c 6f 77   literals follow
14670 20 74 68 65 20 43 2d 6c 61 6e 67 75 61 67 65 20   the C-language 
14680 6e 6f 74 61 74 69 6f 6e 20 6f 66 0a 22 30 78 22  notation of."0x"
14690 20 6f 72 20 22 30 58 22 20 66 6f 6c 6c 6f 77 65   or "0X" followe
146a0 64 20 62 79 20 68 65 78 61 64 65 63 69 6d 61 6c  d by hexadecimal
146b0 20 64 69 67 69 74 73 2e 0a 5e 46 6f 72 20 65 78   digits..^For ex
146c0 61 6d 70 6c 65 2c 20 30 78 31 32 33 34 20 6d 65  ample, 0x1234 me
146d0 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  ans the same as 
146e0 34 36 36 30 0a 61 6e 64 20 30 78 38 30 30 30 30  4660.and 0x80000
146f0 30 30 30 30 30 30 30 30 30 30 30 20 6d 65 61 6e  00000000000 mean
14700 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 2d 39  s the same as -9
14710 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
14720 30 38 2e 0a 20 5e 28 48 65 78 61 64 65 63 69 6d  08.. ^(Hexadecim
14730 61 6c 20 69 6e 74 65 67 65 72 20 6c 69 74 65 72  al integer liter
14740 61 6c 73 20 61 72 65 20 69 6e 74 65 72 70 72 65  als are interpre
14750 74 65 64 20 61 73 20 36 34 2d 62 69 74 0a 74 77  ted as 64-bit.tw
14760 6f 27 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  o's-complement i
14770 6e 74 65 67 65 72 73 20 61 6e 64 20 61 72 65 20  ntegers and are 
14780 74 68 75 73 20 6c 69 6d 69 74 65 64 0a 74 6f 20  thus limited.to 
14790 73 69 78 74 65 65 6e 20 73 69 67 6e 69 66 69 63  sixteen signific
147a0 61 6e 74 20 64 69 67 69 74 73 20 6f 66 20 70 72  ant digits of pr
147b0 65 63 69 73 69 6f 6e 2e 29 5e 0a 53 75 70 70 6f  ecision.)^.Suppo
147c0 72 74 20 66 6f 72 20 68 65 78 61 64 65 63 69 6d  rt for hexadecim
147d0 61 6c 20 69 6e 74 65 67 65 72 73 20 77 61 73 20  al integers was 
147e0 61 64 64 65 64 20 74 6f 20 53 51 4c 69 74 65 0a  added to SQLite.
147f0 76 65 72 73 69 6f 6e 20 33 2e 38 2e 36 20 28 5b  version 3.8.6 ([
14800 64 61 74 65 6f 66 3a 33 2e 38 2e 36 5d 29 2e 0a  dateof:3.8.6])..
14810 5e 46 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63  ^For backwards c
14820 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c 20 74 68  ompatibility, th
14830 65 20 22 30 78 22 20 68 65 78 61 64 65 63 69 6d  e "0x" hexadecim
14840 61 6c 20 69 6e 74 65 67 65 72 0a 6e 6f 74 61 74  al integer.notat
14850 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 6e 64 65  ion is only unde
14860 72 73 74 6f 6f 64 20 62 79 20 74 68 65 20 53 51  rstood by the SQ
14870 4c 20 6c 61 6e 67 75 61 67 65 20 70 61 72 73 65  L language parse
14880 72 2c 20 6e 6f 74 20 62 79 20 74 68 65 0a 74 79  r, not by the.ty
14890 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 72  pe conversions r
148a0 6f 75 74 69 6e 65 73 2e 0a 5e 28 53 74 72 69 6e  outines..^(Strin
148b0 67 20 76 61 72 69 61 62 6c 65 73 20 74 68 61 74  g variables that
148c0 0a 63 6f 6e 74 61 69 6e 20 74 65 78 74 20 66 6f  .contain text fo
148d0 72 6d 61 74 74 65 64 20 6c 69 6b 65 20 68 65 78  rmatted like hex
148e0 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
148f0 73 20 61 72 65 20 6e 6f 74 0a 69 6e 74 65 72 70  s are not.interp
14900 72 65 74 65 64 20 61 73 20 68 65 78 61 64 65 63  reted as hexadec
14910 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 77 68  imal integers wh
14920 65 6e 20 63 6f 65 72 63 69 6e 67 20 74 68 65 20  en coercing the 
14930 73 74 72 69 6e 67 20 76 61 6c 75 65 0a 69 6e 74  string value.int
14940 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 64 75 65  o an integer due
14950 20 74 6f 20 61 20 5b 43 41 53 54 20 65 78 70 72   to a [CAST expr
14960 65 73 73 69 6f 6e 5d 20 6f 72 20 66 6f 72 20 61  ession] or for a
14970 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74   [column affinit
14980 79 5d 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f  y].transformatio
14990 6e 20 6f 72 20 70 72 69 6f 72 20 74 6f 20 70 65  n or prior to pe
149a0 72 66 6f 72 6d 69 6e 67 20 61 20 6e 75 6d 65 72  rforming a numer
149b0 69 63 20 6f 70 65 72 61 74 69 6f 6e 20 6f 72 20  ic operation or 
149c0 66 6f 72 0a 61 6e 79 20 6f 74 68 65 72 20 72 75  for.any other ru
149d0 6e 2d 74 69 6d 65 20 63 6f 6e 76 65 72 73 69 6f  n-time conversio
149e0 6e 73 2e 29 5e 20 20 5e 28 57 68 65 6e 20 63 6f  ns.)^  ^(When co
149f0 65 72 63 69 6e 67 20 61 0a 73 74 72 69 6e 67 20  ercing a.string 
14a00 76 61 6c 75 65 20 69 6e 20 74 68 65 20 66 6f 72  value in the for
14a10 6d 61 74 20 6f 66 20 61 20 68 65 78 61 64 65 63  mat of a hexadec
14a20 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 69 6e 74  imal integer int
14a30 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 76 61 6c  o an integer.val
14a40 75 65 2c 20 74 68 65 20 63 6f 6e 76 65 72 73 69  ue, the conversi
14a50 6f 6e 20 70 72 6f 63 65 73 73 20 73 74 6f 70 73  on process stops
14a60 20 77 68 65 6e 20 74 68 65 20 27 78 27 20 63 68   when the 'x' ch
14a70 61 72 61 63 74 65 72 20 69 73 20 73 65 65 6e 0a  aracter is seen.
14a80 73 6f 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67  so the resulting
14a90 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
14aa0 73 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e 29 5e  s always zero.)^
14ab0 0a 5e 28 53 51 4c 69 74 65 20 6f 6e 6c 79 20 75  .^(SQLite only u
14ac0 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65 20 68  nderstands the h
14ad0 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67  exadecimal integ
14ae0 65 72 20 6e 6f 74 61 74 69 6f 6e 20 77 68 65 6e  er notation when
14af0 20 69 74 0a 61 70 70 65 61 72 73 20 69 6e 20 74   it.appears in t
14b00 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
14b10 20 74 65 78 74 2c 20 6e 6f 74 20 77 68 65 6e 20   text, not when 
14b20 69 74 20 61 70 70 65 61 72 73 20 61 73 0a 70 61  it appears as.pa
14b30 72 74 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  rt of the conten
14b40 74 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  t of the databas
14b50 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 41 20 73 74 72  e.)^..<p> ^A str
14b60 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69 73 20  ing constant is 
14b70 66 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73  formed by enclos
14b80 69 6e 67 20 74 68 65 0a 73 74 72 69 6e 67 20 69  ing the.string i
14b90 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20  n single quotes 
14ba0 28 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20  (').  ^A single 
14bb0 71 75 6f 74 65 20 77 69 74 68 69 6e 20 74 68 65  quote within the
14bc0 20 73 74 72 69 6e 67 20 63 61 6e 0a 62 65 20 65   string can.be e
14bd0 6e 63 6f 64 65 64 20 62 79 20 70 75 74 74 69 6e  ncoded by puttin
14be0 67 20 74 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f  g two single quo
14bf0 74 65 73 20 69 6e 20 61 20 72 6f 77 20 2d 20 61  tes in a row - a
14c00 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73  s in Pascal..C-s
14c10 74 79 6c 65 20 65 73 63 61 70 65 73 20 75 73 69  tyle escapes usi
14c20 6e 67 20 74 68 65 20 62 61 63 6b 73 6c 61 73 68  ng the backslash
14c30 20 63 68 61 72 61 63 74 65 72 20 61 72 65 20 6e   character are n
14c40 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62 65 63  ot supported bec
14c50 61 75 73 65 0a 74 68 65 79 20 61 72 65 20 6e 6f  ause.they are no
14c60 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a  t standard SQL..
14c70 0a 3c 70 3e 20 5e 42 4c 4f 42 20 6c 69 74 65 72  .<p> ^BLOB liter
14c80 61 6c 73 20 61 72 65 20 73 74 72 69 6e 67 20 6c  als are string l
14c90 69 74 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69  iterals containi
14ca0 6e 67 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64  ng hexadecimal d
14cb0 61 74 61 20 61 6e 64 0a 70 72 65 63 65 64 65 64  ata and.preceded
14cc0 20 62 79 20 61 20 73 69 6e 67 6c 65 20 22 78 22   by a single "x"
14cd0 20 6f 72 20 22 58 22 20 63 68 61 72 61 63 74 65   or "X" characte
14ce0 72 2e 20 20 5e 28 45 78 61 6d 70 6c 65 3a 20 58  r.  ^(Example: X
14cf0 27 35 33 35 31 34 43 36 39 37 34 36 35 27 29 5e  '53514C697465')^
14d00 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61 6c  ..<p>.^A literal
14d10 20 76 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f 20   value can also 
14d20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e 55  be the token "NU
14d30 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  LL"..</p>..<tcl>
14d40 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 70  hd_fragment varp
14d50 61 72 61 6d 20 70 61 72 61 6d 65 74 65 72 20 70  aram parameter p
14d60 61 72 61 6d 65 74 65 72 73 20 7b 62 6f 75 6e 64  arameters {bound
14d70 20 70 61 72 61 6d 65 74 65 72 7d 20 7b 62 6f 75   parameter} {bou
14d80 6e 64 20 70 61 72 61 6d 65 74 65 72 73 7d 3c 2f  nd parameters}</
14d90 74 63 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d 65 74  tcl>.<h3>Paramet
14da0 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20 22  ers</h3>.<p>.A "
14db0 76 61 72 69 61 62 6c 65 22 20 6f 72 20 22 70 61  variable" or "pa
14dc0 72 61 6d 65 74 65 72 22 20 74 6f 6b 65 6e 0a 73  rameter" token.s
14dd0 70 65 63 69 66 69 65 73 20 61 20 70 6c 61 63 65  pecifies a place
14de0 68 6f 6c 64 65 72 20 69 6e 20 74 68 65 20 65 78  holder in the ex
14df0 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 61 20 0a  pression for a .
14e00 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 66 69  value that is fi
14e10 6c 6c 65 64 20 69 6e 20 61 74 20 72 75 6e 74 69  lled in at runti
14e20 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71  me using the.[sq
14e30 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28  lite3_bind_blob(
14e40 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  ) | sqlite3_bind
14e50 28 29 5d 20 66 61 6d 69 6c 79 20 6f 66 20 43 2f  ()] family of C/
14e60 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 73 2e 0a  C++ interfaces..
14e70 50 61 72 61 6d 65 74 65 72 73 20 63 61 6e 20 74  Parameters can t
14e80 61 6b 65 20 73 65 76 65 72 61 6c 20 66 6f 72 6d  ake several form
14e90 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  s:.</p>..<blockq
14ea0 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74  uote>.<table>.<t
14eb0 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  r>.<td align="ri
14ec0 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ght" valign="top
14ed0 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e  "><b>?</b><i>NNN
14ee0 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </i></td><td wid
14ef0 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
14f00 64 3e 5e 28 41 20 71 75 65 73 74 69 6f 6e 20 6d  d>^(A question m
14f10 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ark followed by 
14f20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e 3c  a number <i>NNN<
14f30 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73 70 6f 74  /i> holds a spot
14f40 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74 68 20   for the.NNN-th 
14f50 70 61 72 61 6d 65 74 65 72 2e 20 20 4e 4e 4e 20  parameter.  NNN 
14f60 6d 75 73 74 20 62 65 20 62 65 74 77 65 65 6e 20  must be between 
14f70 31 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 4d 41  1 and [SQLITE_MA
14f80 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
14f90 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72  R].)^.</td>.</tr
14fa0 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
14fb0 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d  ="right" valign=
14fc0 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f  "top"><b>?</b></
14fd0 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
14fe0 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 71  "></td>.<td>^A q
14ff0 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68 61  uestion mark tha
15000 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65  t is not followe
15010 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 63 72  d by a number cr
15020 65 61 74 65 73 20 61 20 70 61 72 61 6d 65 74 65  eates a paramete
15030 72 0a 77 69 74 68 20 61 20 6e 75 6d 62 65 72 20  r.with a number 
15040 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68 61 6e  one greater than
15050 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 61 72   the largest par
15060 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61 6c  ameter number al
15070 72 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e 0a  ready assigned..
15080 5e 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20 74  ^If this means t
15090 68 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d  he parameter num
150a0 62 65 72 20 69 73 20 67 72 65 61 74 65 72 20 74  ber is greater t
150b0 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  han.[SQLITE_MAX_
150c0 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d  VARIABLE_NUMBER]
150d0 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  , it is an error
150e0 2e 0a 54 68 69 73 20 70 61 72 61 6d 65 74 65 72  ..This parameter
150f0 20 66 6f 72 6d 61 74 20 69 73 20 70 72 6f 76 69   format is provi
15100 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74 69 62  ded for compatib
15110 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65 72  ility with other
15120 20 64 61 74 61 62 61 73 65 0a 65 6e 67 69 6e 65   database.engine
15130 73 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20  s.  But because 
15140 69 74 20 69 73 20 65 61 73 79 20 74 6f 20 6d 69  it is easy to mi
15150 73 63 6f 75 6e 74 20 74 68 65 20 71 75 65 73 74  scount the quest
15160 69 6f 6e 20 6d 61 72 6b 73 2c 20 74 68 65 0a 75  ion marks, the.u
15170 73 65 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d  se of this param
15180 65 74 65 72 20 66 6f 72 6d 61 74 20 69 73 20 64  eter format is d
15190 69 73 63 6f 75 72 61 67 65 64 2e 20 20 50 72 6f  iscouraged.  Pro
151a0 67 72 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63  grammers are enc
151b0 6f 75 72 61 67 65 64 0a 74 6f 20 75 73 65 20 6f  ouraged.to use o
151c0 6e 65 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c  ne of the symbol
151d0 69 63 20 66 6f 72 6d 61 74 73 20 62 65 6c 6f 77  ic formats below
151e0 20 6f 72 20 74 68 65 20 3f 4e 4e 4e 20 66 6f 72   or the ?NNN for
151f0 6d 61 74 20 61 62 6f 76 65 20 69 6e 73 74 65 61  mat above instea
15200 64 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  d..</td>.</tr>.<
15210 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
15220 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
15230 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e 41 41  p"><b>:</b><i>AA
15240 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77  AA</i></td><td w
15250 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
15260 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66 6f 6c  <td>^A colon fol
15270 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e  lowed by an iden
15280 74 69 66 69 65 72 20 6e 61 6d 65 20 68 6f 6c 64  tifier name hold
15290 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 0a  s a spot for a .
152a0 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  [sqlite3_bind_pa
152b0 72 61 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e 61 6d  rameter_name|nam
152c0 65 64 20 70 61 72 61 6d 65 74 65 72 5d 20 77 69  ed parameter] wi
152d0 74 68 20 74 68 65 20 6e 61 6d 65 20 3a 41 41 41  th the name :AAA
152e0 41 2e 20 20 0a 5e 28 4e 61 6d 65 64 20 70 61 72  A.  .^(Named par
152f0 61 6d 65 74 65 72 73 20 61 72 65 20 61 6c 73 6f  ameters are also
15300 20 6e 75 6d 62 65 72 65 64 2e 20 54 68 65 20 6e   numbered. The n
15310 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64 20 69  umber assigned i
15320 73 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68  s one greater th
15330 61 6e 0a 74 68 65 20 6c 61 72 67 65 73 74 20 70  an.the largest p
15340 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
15350 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65 64  already assigned
15360 2e 29 5e 20 5e 49 66 20 74 68 69 73 20 6d 65 61  .)^ ^If this mea
15370 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  ns the parameter
15380 0a 77 6f 75 6c 64 20 62 65 20 61 73 73 69 67 6e  .would be assign
15390 65 64 20 61 20 6e 75 6d 62 65 72 20 67 72 65 61  ed a number grea
153a0 74 65 72 20 74 68 61 6e 20 5b 53 51 4c 49 54 45  ter than [SQLITE
153b0 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
153c0 4d 42 45 52 5d 2c 20 69 74 20 69 73 0a 61 6e 20  MBER], it is.an 
153d0 65 72 72 6f 72 2e 20 54 6f 20 61 76 6f 69 64 20  error. To avoid 
153e0 63 6f 6e 66 75 73 69 6f 6e 2c 20 69 74 20 69 73  confusion, it is
153f0 20 62 65 73 74 20 74 6f 20 61 76 6f 69 64 20 6d   best to avoid m
15400 69 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e 64 20  ixing named and 
15410 6e 75 6d 62 65 72 65 64 0a 70 61 72 61 6d 65 74  numbered.paramet
15420 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  ers.</td>.</tr>.
15430 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
15440 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
15450 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69 3e 41  op"><b>@</b><i>A
15460 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  AAA</i></td><td 
15470 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
15480 0a 3c 74 64 3e 5e 41 6e 20 22 61 74 22 20 73 69  .<td>^An "at" si
15490 67 6e 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79  gn works exactly
154a0 20 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c 20 65   like a colon, e
154b0 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6e  xcept that the n
154c0 61 6d 65 20 6f 66 0a 74 68 65 20 70 61 72 61 6d  ame of.the param
154d0 65 74 65 72 20 63 72 65 61 74 65 64 20 69 73 20  eter created is 
154e0 40 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  @AAAA.</td>.</tr
154f0 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
15500 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d  ="right" valign=
15510 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69  "top"><b>$</b><i
15520 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74  >AAAA</i></td><t
15530 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
15540 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c 61 72  d>.<td>^A dollar
15550 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64 20 62  -sign followed b
15560 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  y an identifier 
15570 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64 73 20  name also holds 
15580 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e 61 6d  a spot for a nam
15590 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77 69 74  ed.parameter wit
155a0 68 20 74 68 65 20 6e 61 6d 65 20 24 41 41 41 41  h the name $AAAA
155b0 2e 20 20 5e 28 54 68 65 20 69 64 65 6e 74 69 66  .  ^(The identif
155c0 69 65 72 20 6e 61 6d 65 20 69 6e 20 74 68 69 73  ier name in this
155d0 20 63 61 73 65 20 63 61 6e 20 69 6e 63 6c 75 64   case can includ
155e0 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 63  e.one or more oc
155f0 63 75 72 72 65 6e 63 65 73 20 6f 66 20 22 3a 3a  currences of "::
15600 22 20 61 6e 64 20 61 20 73 75 66 66 69 78 20 65  " and a suffix e
15610 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e 2e 2e  nclosed in "(...
15620 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e  )" containing.an
15630 79 20 74 65 78 74 20 61 74 20 61 6c 6c 2e 29 5e  y text at all.)^
15640 20 20 54 68 69 73 20 73 79 6e 74 61 78 20 69 73    This syntax is
15650 20 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 20 76   the form of a v
15660 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  ariable name in 
15670 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e  the.[http://www.
15680 74 63 6c 2d 6c 61 6e 67 2e 6f 72 67 2f 20 7c 20  tcl-lang.org/ | 
15690 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20  Tcl programming 
156a0 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54 68 65 20  language].  The 
156b0 70 72 65 73 65 6e 63 65 0a 6f 66 20 74 68 69 73  presence.of this
156c0 20 73 79 6e 74 61 78 20 72 65 73 75 6c 74 73 20   syntax results 
156d0 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68  from the fact th
156e0 61 74 20 53 51 4c 69 74 65 20 69 73 20 72 65 61  at SQLite is rea
156f0 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78 74 65  lly a .[Tcl exte
15700 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68 61 73 20  nsion] that has 
15710 65 73 63 61 70 65 64 20 69 6e 74 6f 20 74 68 65  escaped into the
15720 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72   wild.</td>.</tr
15730 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  >.</table>.</blo
15740 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61  ckquote>..<p>^Pa
15750 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 61 72  rameters that ar
15760 65 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 76  e not assigned v
15770 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73 71 6c  alues using.[sql
15780 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29  ite3_bind_blob()
15790 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28   | sqlite3_bind(
157a0 29 5d 20 61 72 65 20 74 72 65 61 74 65 64 0a 61  )] are treated.a
157b0 73 20 4e 55 4c 4c 2e 20 20 54 68 65 20 5b 73 71  s NULL.  The [sq
157c0 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
157d0 65 74 65 72 5f 69 6e 64 65 78 28 29 5d 20 69 6e  eter_index()] in
157e0 74 65 72 66 61 63 65 20 63 61 6e 20 62 65 20 75  terface can be u
157f0 73 65 64 0a 74 6f 20 74 72 61 6e 73 6c 61 74 65  sed.to translate
15800 20 61 20 73 79 6d 62 6f 6c 69 63 20 70 61 72 61   a symbolic para
15810 6d 65 74 65 72 20 6e 61 6d 65 20 69 6e 74 6f 20  meter name into 
15820 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20 6e  its equivalent n
15830 75 6d 65 72 69 63 20 69 6e 64 65 78 2e 3c 2f 70  umeric index.</p
15840 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d  >..<p>^The maxim
15850 75 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d  um parameter num
15860 62 65 72 20 69 73 20 73 65 74 20 61 74 20 63 6f  ber is set at co
15870 6d 70 69 6c 65 2d 74 69 6d 65 20 62 79 0a 74 68  mpile-time by.th
15880 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  e [SQLITE_MAX_VA
15890 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d  RIABLE_NUMBER] m
158a0 61 63 72 6f 2e 20 20 5e 28 41 6e 20 69 6e 64 69  acro.  ^(An indi
158b0 76 69 64 75 61 6c 20 5b 64 61 74 61 62 61 73 65  vidual [database
158c0 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 44 20 63   connection].D c
158d0 61 6e 20 72 65 64 75 63 65 20 69 74 73 20 6d 61  an reduce its ma
158e0 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20  ximum parameter 
158f0 6e 75 6d 62 65 72 20 62 65 6c 6f 77 20 74 68 65  number below the
15900 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61   compile-time ma
15910 78 69 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65 20  ximum.using the 
15920 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28  [sqlite3_limit](
15930 44 2c 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  D, [SQLITE_LIMIT
15940 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
15950 5d 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  ],...) interface
15960 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  .)^.</p>..<tcl>h
15970 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20  d_fragment like 
15980 4c 49 4b 45 20 45 53 43 41 50 45 3c 2f 74 63 6c  LIKE ESCAPE</tcl
15990 3e 0a 3c 68 33 3e 54 68 65 20 4c 49 4b 45 2c 20  >.<h3>The LIKE, 
159a0 47 4c 4f 42 2c 20 52 45 47 45 58 50 2c 20 61 6e  GLOB, REGEXP, an
159b0 64 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72  d MATCH operator
159c0 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c  s</h3>.<p>^The L
159d0 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65  IKE operator doe
159e0 73 20 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63  s a pattern matc
159f0 68 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  hing comparison.
15a00 20 5e 54 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f   ^The operand.to
15a10 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68   the right of th
15a20 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
15a30 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 61 74  contains the pat
15a40 74 65 72 6e 20 61 6e 64 20 74 68 65 20 6c 65 66  tern and the lef
15a50 74 20 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20 63  t hand.operand c
15a60 6f 6e 74 61 69 6e 73 20 74 68 65 20 73 74 72 69  ontains the stri
15a70 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69  ng to match agai
15a80 6e 73 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e  nst the pattern.
15a90 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22  ..<tcl>hd_puts "
15aa0 5e 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f  ^A percent symbo
15ab0 6c 20 28 5c 22 25 5c 22 29 20 69 6e 20 74 68 65  l (\"%\") in the
15ac0 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61   LIKE pattern ma
15ad0 74 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e  tches any.sequen
15ae0 63 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f  ce of zero or mo
15af0 72 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  re characters in
15b00 20 74 68 65 20 73 74 72 69 6e 67 2e 20 20 5e 41   the string.  ^A
15b10 6e 20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c 22  n underscore.(\"
15b20 5f 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45  _\") in the LIKE
15b30 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73   pattern matches
15b40 20 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72   any single char
15b50 61 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72  acter in the.str
15b60 69 6e 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68 65  ing.  ^(Any othe
15b70 72 20 63 68 61 72 61 63 74 65 72 20 6d 61 74 63  r character matc
15b80 68 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69 74  hes itself or it
15b90 73 20 6c 6f 77 65 72 2f 75 70 70 65 72 20 63 61  s lower/upper ca
15ba0 73 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 28 69  se.equivalent (i
15bb0 2e 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73 69  .e. case-insensi
15bc0 74 69 76 65 20 6d 61 74 63 68 69 6e 67 29 2e 29  tive matching).)
15bd0 5e 0a 0a 3c 75 3e 49 6d 70 6f 72 74 61 6e 74 20  ^..<u>Important 
15be0 4e 6f 74 65 3a 3c 2f 75 3e 20 5e 53 51 4c 69 74  Note:</u> ^SQLit
15bf0 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61 6e  e only.understan
15c00 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20 63  ds upper/lower c
15c10 61 73 65 20 66 6f 72 20 41 53 43 49 49 20 63 68  ase for ASCII ch
15c20 61 72 61 63 74 65 72 73 20 62 79 20 64 65 66 61  aracters by defa
15c30 75 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45 20  ult.  ^The.LIKE 
15c40 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61 73 65  operator is case
15c50 20 73 65 6e 73 69 74 69 76 65 20 62 79 20 64 65   sensitive by de
15c60 66 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f 64  fault for unicod
15c70 65 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61  e characters tha
15c80 74 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68 65  t are.beyond the
15c90 20 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20 46   ASCII range.  F
15ca0 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68 65  or example,.^the
15cb0 20 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27   expression <b>'
15cc0 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73  a'&nbsp;LIKE&nbs
15cd0 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55  p;'A'</b>.is TRU
15ce0 45 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69 67  E but <b>'&aelig
15cf0 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73  ;'&nbsp;LIKE&nbs
15d00 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20  p;'&AElig;'</b> 
15d10 69 73 20 46 41 4c 53 45 2e 22 3c 2f 74 63 6c 3e  is FALSE."</tcl>
15d20 0a 54 68 65 20 49 43 55 20 65 78 74 65 6e 73 69  .The ICU extensi
15d30 6f 6e 20 74 6f 20 53 51 4c 69 74 65 20 69 6e 63  on to SQLite inc
15d40 6c 75 64 65 73 20 61 6e 20 65 6e 68 61 6e 63 65  ludes an enhance
15d50 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  d version of the
15d60 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 74  .LIKE operator t
15d70 68 61 74 20 64 6f 65 73 20 63 61 73 65 20 66 6f  hat does case fo
15d80 6c 64 69 6e 67 20 61 63 72 6f 73 73 20 61 6c 6c  lding across all
15d90 20 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63 74   unicode charact
15da0 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ers.</p>..<p>^If
15db0 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53   the optional ES
15dc0 43 41 50 45 20 63 6c 61 75 73 65 20 69 73 20 70  CAPE clause is p
15dd0 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  resent, then the
15de0 20 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c   expression.foll
15df0 6f 77 69 6e 67 20 74 68 65 20 45 53 43 41 50 45  owing the ESCAPE
15e00 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 65 76   keyword must ev
15e10 61 6c 75 61 74 65 20 74 6f 20 61 20 73 74 72 69  aluate to a stri
15e20 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66  ng consisting of
15e30 0a 61 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63  .a single charac
15e40 74 65 72 2e 20 5e 54 68 69 73 20 63 68 61 72 61  ter. ^This chara
15e50 63 74 65 72 20 6d 61 79 20 62 65 20 75 73 65 64  cter may be used
15e60 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74   in the LIKE pat
15e70 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64 65 20  tern.to include 
15e80 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20  literal percent 
15e90 6f 72 20 75 6e 64 65 72 73 63 6f 72 65 20 63 68  or underscore ch
15ea0 61 72 61 63 74 65 72 73 2e 20 5e 54 68 65 20 65  aracters. ^The e
15eb0 73 63 61 70 65 0a 63 68 61 72 61 63 74 65 72 20  scape.character 
15ec0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 70 65  followed by a pe
15ed0 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 25 29  rcent symbol (%)
15ee0 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 28 5f 29  , underscore (_)
15ef0 2c 20 6f 72 20 61 20 73 65 63 6f 6e 64 0a 69 6e  , or a second.in
15f00 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 65 73  stance of the es
15f10 63 61 70 65 20 63 68 61 72 61 63 74 65 72 20 69  cape character i
15f20 74 73 65 6c 66 20 6d 61 74 63 68 65 73 20 61 0a  tself matches a.
15f30 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20  literal percent 
15f40 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63 6f  symbol, undersco
15f50 72 65 2c 20 6f 72 20 61 20 73 69 6e 67 6c 65 20  re, or a single 
15f60 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65 72  escape character
15f70 2c 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a  ,.respectively..
15f80 0a 3c 70 3e 5e 54 68 65 20 69 6e 66 69 78 20 4c  .<p>^The infix L
15f90 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20  IKE operator is 
15fa0 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63  implemented by c
15fb0 61 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70 6c 69  alling the.appli
15fc0 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53  cation-defined S
15fd0 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b 6c 69  QL functions [li
15fe0 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58  ke(<i>Y</i>,<i>X
15ff0 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28  </i>)] or.[like(
16000 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69  <i>Y</i>,<i>X</i
16010 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e  >,<i>Z</i>)]</a>
16020 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c  .</p>..<p>^The L
16030 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63 61 6e  IKE operator can
16040 20 62 65 20 6d 61 64 65 20 63 61 73 65 20 73 65   be made case se
16050 6e 73 69 74 69 76 65 20 75 73 69 6e 67 20 74 68  nsitive using th
16060 65 0a 5b 63 61 73 65 5f 73 65 6e 73 69 74 69 76  e.[case_sensitiv
16070 65 5f 6c 69 6b 65 20 70 72 61 67 6d 61 5d 2e 3c  e_like pragma].<
16080 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
16090 67 6d 65 6e 74 20 67 6c 6f 62 20 47 4c 4f 42 3c  gment glob GLOB<
160a0 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 47 4c  /tcl>.<p>^The GL
160b0 4f 42 20 6f 70 65 72 61 74 6f 72 20 69 73 20 73  OB operator is s
160c0 69 6d 69 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62  imilar to LIKE b
160d0 75 74 20 75 73 65 73 20 74 68 65 20 55 6e 69 78  ut uses the Unix
160e0 0a 66 69 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73  .file globbing s
160f0 79 6e 74 61 78 20 66 6f 72 20 69 74 73 20 77 69  yntax for its wi
16100 6c 64 63 61 72 64 73 2e 20 20 5e 41 6c 73 6f 2c  ldcards.  ^Also,
16110 20 47 4c 4f 42 20 69 73 20 63 61 73 65 0a 73 65   GLOB is case.se
16120 6e 73 69 74 69 76 65 2c 20 75 6e 6c 69 6b 65 20  nsitive, unlike 
16130 4c 49 4b 45 2e 20 20 5e 42 6f 74 68 20 47 4c 4f  LIKE.  ^Both GLO
16140 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61 79 20 62  B and LIKE may b
16150 65 20 70 72 65 63 65 64 65 64 20 62 79 0a 74 68  e preceded by.th
16160 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f  e NOT keyword to
16170 20 69 6e 76 65 72 74 20 74 68 65 20 73 65 6e 73   invert the sens
16180 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e 20 20  e of the test.  
16190 5e 54 68 65 20 69 6e 66 69 78 20 47 4c 4f 42 20  ^The infix GLOB 
161a0 0a 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70  .operator is imp
161b0 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c  lemented by call
161c0 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ing the function
161d0 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e 2c  .[glob(<i>Y</i>,
161e0 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64 20 63  <i>X</i>)] and c
161f0 61 6e 20 62 65 20 6d 6f 64 69 66 69 65 64 20 62  an be modified b
16200 79 20 6f 76 65 72 72 69 64 69 6e 67 0a 74 68 61  y overriding.tha
16210 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a  t function.</p>.
16220 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
16230 74 20 72 65 67 65 78 70 20 52 45 47 45 58 50 3c  t regexp REGEXP<
16240 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 52 45  /tcl>.<p>^The RE
16250 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 69 73  GEXP operator is
16260 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61   a special synta
16270 78 20 66 6f 72 20 74 68 65 20 72 65 67 65 78 70  x for the regexp
16280 28 29 0a 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  ().user function
16290 2e 20 20 5e 4e 6f 20 72 65 67 65 78 70 28 29 20  .  ^No regexp() 
162a0 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 69 73  user function is
162b0 20 64 65 66 69 6e 65 64 20 62 79 20 64 65 66 61   defined by defa
162c0 75 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65 20 6f  ult.and so use o
162d0 66 20 74 68 65 20 52 45 47 45 58 50 20 6f 70 65  f the REGEXP ope
162e0 72 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d 61  rator will norma
162f0 6c 6c 79 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  lly result in an
16300 0a 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 20  .error message. 
16310 20 5e 49 66 20 61 6e 20 5b 61 70 70 6c 69 63 61   ^If an [applica
16320 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c  tion-defined SQL
16330 20 66 75 6e 63 74 69 6f 6e 5d 20 6e 61 6d 65 64   function] named
16340 20 22 72 65 67 65 78 70 22 0a 69 73 20 61 64 64   "regexp".is add
16350 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 2c 20  ed at run-time, 
16360 74 68 65 6e 20 74 68 65 20 22 3c 69 3e 58 3c 2f  then the "<i>X</
16370 69 3e 20 52 45 47 45 58 50 20 3c 69 3e 59 3c 2f  i> REGEXP <i>Y</
16380 69 3e 22 20 6f 70 65 72 61 74 6f 72 20 77 69 6c  i>" operator wil
16390 6c 0a 62 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64  l.be implemented
163a0 20 61 73 20 61 20 63 61 6c 6c 20 74 6f 20 22 72   as a call to "r
163b0 65 67 65 78 70 28 3c 69 3e 59 3c 2f 69 3e 2c 3c  egexp(<i>Y</i>,<
163c0 69 3e 58 3c 2f 69 3e 29 22 2e 3c 2f 70 3e 0a 0a  i>X</i>)".</p>..
163d0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
163e0 20 6d 61 74 63 68 20 4d 41 54 43 48 3c 2f 74 63   match MATCH</tc
163f0 6c 3e 0a 3c 70 3e 5e 54 68 65 20 4d 41 54 43 48  l>.<p>^The MATCH
16400 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73   operator is a s
16410 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f  pecial syntax fo
16420 72 20 74 68 65 20 6d 61 74 63 68 28 29 0a 61 70  r the match().ap
16430 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
16440 64 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 54 68  d function.  ^Th
16450 65 20 64 65 66 61 75 6c 74 20 6d 61 74 63 68 28  e default match(
16460 29 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  ) function imple
16470 6d 65 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65 73  mentation.raises
16480 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 61 6e   an exception an
16490 64 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20  d is not really 
164a0 75 73 65 66 75 6c 20 66 6f 72 20 61 6e 79 74 68  useful for anyth
164b0 69 6e 67 2e 0a 5e 42 75 74 20 65 78 74 65 6e 73  ing..^But extens
164c0 69 6f 6e 73 20 63 61 6e 20 6f 76 65 72 72 69 64  ions can overrid
164d0 65 20 74 68 65 20 6d 61 74 63 68 28 29 20 66 75  e the match() fu
164e0 6e 63 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65  nction with more
164f0 0a 68 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e 3c  .helpful logic.<
16500 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
16510 67 6d 65 6e 74 20 62 65 74 77 65 65 6e 20 42 45  gment between BE
16520 54 57 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  TWEEN</tcl>.<h3>
16530 54 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72  The BETWEEN oper
16540 61 74 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 54  ator</h3>.<p>^(T
16550 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61  he BETWEEN opera
16560 74 6f 72 20 69 73 20 6c 6f 67 69 63 61 6c 6c 79  tor is logically
16570 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 61   equivalent to a
16580 20 70 61 69 72 20 6f 66 20 63 6f 6d 70 61 72 69   pair of compari
16590 73 6f 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e 20  sons.."<i>x</i> 
165a0 3c 62 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20 3c  <b>BETWEEN</b> <
165b0 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f  i>y</i> <b>AND</
165c0 62 3e 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73 20  b> <i>z</i>" is 
165d0 0a 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 0a  .equivalent to .
165e0 22 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74 3b  "<i>x</i><b>&gt;
165f0 3d 3c 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c 62  =</b><i>y</i> <b
16600 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f 69  >AND</b> <i>x</i
16610 3e 3c 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e  ><b>&lt;=</b><i>
16620 7a 3c 2f 69 3e 22 20 65 78 63 65 70 74 0a 74 68  z</i>" except.th
16630 61 74 20 77 69 74 68 20 42 45 54 57 45 45 4e 2c  at with BETWEEN,
16640 20 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78   the <i>x</i> ex
16650 70 72 65 73 73 69 6f 6e 20 69 73 20 6f 6e 6c 79  pression is only
16660 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 2e   evaluated once.
16670 29 5e 0a 5e 54 68 65 20 70 72 65 63 65 64 65 6e  )^.^The preceden
16680 63 65 20 6f 66 20 74 68 65 20 42 45 54 57 45 45  ce of the BETWEE
16690 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 74 68  N operator is th
166a0 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 70 72  e same as the pr
166b0 65 63 65 64 65 6e 63 65 0a 61 73 20 6f 70 65 72  ecedence.as oper
166c0 61 74 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20  ators <b>==</b> 
166d0 61 6e 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e  and <b>!=</b> an
166e0 64 20 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e  d <b>LIKE</b> an
166f0 64 20 67 72 6f 75 70 73 20 6c 65 66 74 20 74 6f  d groups left to
16700 20 72 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68 64   right...<tcl>hd
16710 5f 66 72 61 67 6d 65 6e 74 20 63 61 73 65 20 7b  _fragment case {
16720 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 7d  CASE expression}
16730 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 43  </tcl>.<h3>The C
16740 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3c 2f  ASE expression</
16750 68 33 3e 0a 3c 70 3e 41 20 43 41 53 45 20 65 78  h3>.<p>A CASE ex
16760 70 72 65 73 73 69 6f 6e 20 73 65 72 76 65 73 20  pression serves 
16770 61 20 72 6f 6c 65 20 73 69 6d 69 6c 61 72 20 74  a role similar t
16780 6f 20 49 46 2d 54 48 45 4e 2d 45 4c 53 45 20 69  o IF-THEN-ELSE i
16790 6e 20 6f 74 68 65 72 0a 70 72 6f 67 72 61 6d 6d  n other.programm
167a0 69 6e 67 20 6c 61 6e 67 75 61 67 65 73 2e 20 20  ing languages.  
167b0 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61  ..<p>The optiona
167c0 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  l expression tha
167d0 74 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77  t occurs in betw
167e0 65 65 6e 20 74 68 65 20 43 41 53 45 20 6b 65 79  een the CASE key
167f0 77 6f 72 64 20 61 6e 64 20 74 68 65 0a 66 69 72  word and the.fir
16800 73 74 20 57 48 45 4e 20 6b 65 79 77 6f 72 64 20  st WHEN keyword 
16810 69 73 20 63 61 6c 6c 65 64 20 74 68 65 20 22 62  is called the "b
16820 61 73 65 22 20 65 78 70 72 65 73 73 69 6f 6e 2e  ase" expression.
16830 20 5e 54 68 65 72 65 20 61 72 65 20 74 77 6f 20   ^There are two 
16840 62 61 73 69 63 20 66 6f 72 6d 73 0a 6f 66 20 74  basic forms.of t
16850 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  he CASE expressi
16860 6f 6e 3a 20 74 68 6f 73 65 20 77 69 74 68 20 61  on: those with a
16870 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
16880 20 61 6e 64 20 74 68 6f 73 65 20 77 69 74 68 6f   and those witho
16890 75 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41  ut...<p>^In a CA
168a0 53 45 20 77 69 74 68 6f 75 74 20 61 20 62 61 73  SE without a bas
168b0 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 65 61  e expression, ea
168c0 63 68 20 57 48 45 4e 20 65 78 70 72 65 73 73 69  ch WHEN expressi
168d0 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 0a  on is evaluated.
168e0 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 74  and the result t
168f0 72 65 61 74 65 64 20 61 73 20 61 20 62 6f 6f 6c  reated as a bool
16900 65 61 6e 2c 20 73 74 61 72 74 69 6e 67 20 77 69  ean, starting wi
16910 74 68 20 74 68 65 20 6c 65 66 74 6d 6f 73 74 20  th the leftmost 
16920 61 6e 64 20 63 6f 6e 74 69 6e 75 69 6e 67 0a 74  and continuing.t
16930 6f 20 74 68 65 20 72 69 67 68 74 2e 20 5e 54 68  o the right. ^Th
16940 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
16950 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
16960 69 73 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f  is the evaluatio
16970 6e 20 6f 66 20 74 68 65 20 54 48 45 4e 0a 65 78  n of the THEN.ex
16980 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f  pression that co
16990 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
169a0 20 66 69 72 73 74 20 57 48 45 4e 20 65 78 70 72   first WHEN expr
169b0 65 73 73 69 6f 6e 20 74 68 61 74 20 65 76 61 6c  ession that eval
169c0 75 61 74 65 73 20 74 6f 0a 74 72 75 65 2e 20 5e  uates to.true. ^
169d0 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74  Or, if none of t
169e0 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73 69  he WHEN expressi
169f0 6f 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20  ons evaluate to 
16a00 74 72 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74  true, the result
16a10 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74   of.evaluating t
16a20 68 65 20 45 4c 53 45 20 65 78 70 72 65 73 73 69  he ELSE expressi
16a30 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20  on, if any. ^If 
16a40 74 68 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45  there is no ELSE
16a50 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a   expression and.
16a60 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e  none of the WHEN
16a70 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65   expressions are
16a80 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20   true, then the 
16a90 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69  overall result i
16aa0 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41 20 4e  s NULL...<p>^A N
16ab0 55 4c 4c 20 72 65 73 75 6c 74 20 69 73 20 63 6f  ULL result is co
16ac0 6e 73 69 64 65 72 65 64 20 75 6e 74 72 75 65 20  nsidered untrue 
16ad0 77 68 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 20  when evaluating 
16ae0 57 48 45 4e 20 74 65 72 6d 73 2e 0a 0a 3c 70 3e  WHEN terms...<p>
16af0 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68 20  ^In a CASE with 
16b00 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  a base expressio
16b10 6e 2c 20 74 68 65 20 62 61 73 65 20 65 78 70 72  n, the base expr
16b20 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
16b30 74 65 64 20 6a 75 73 74 0a 6f 6e 63 65 20 61 6e  ted just.once an
16b40 64 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  d the result is 
16b50 63 6f 6d 70 61 72 65 64 20 61 67 61 69 6e 73 74  compared against
16b60 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20   the evaluation 
16b70 6f 66 20 65 61 63 68 20 57 48 45 4e 20 0a 65 78  of each WHEN .ex
16b80 70 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20 6c 65  pression from le
16b90 66 74 20 74 6f 20 72 69 67 68 74 2e 20 5e 54 68  ft to right. ^Th
16ba0 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
16bb0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
16bc0 69 73 20 74 68 65 20 0a 65 76 61 6c 75 61 74 69  is the .evaluati
16bd0 6f 6e 20 6f 66 20 74 68 65 20 54 48 45 4e 20 65  on of the THEN e
16be0 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63  xpression that c
16bf0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
16c00 65 20 66 69 72 73 74 20 57 48 45 4e 0a 65 78 70  e first WHEN.exp
16c10 72 65 73 73 69 6f 6e 20 66 6f 72 20 77 68 69 63  ression for whic
16c20 68 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  h the comparison
16c30 20 69 73 20 74 72 75 65 2e 20 5e 4f 72 2c 20 69   is true. ^Or, i
16c40 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48  f none of the WH
16c50 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 65  EN.expressions e
16c60 76 61 6c 75 61 74 65 20 74 6f 20 61 20 76 61 6c  valuate to a val
16c70 75 65 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  ue equal to the 
16c80 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  base expression,
16c90 20 74 68 65 20 72 65 73 75 6c 74 0a 6f 66 20 65   the result.of e
16ca0 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c  valuating the EL
16cb0 53 45 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  SE expression, i
16cc0 66 20 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65  f any. ^If there
16cd0 20 69 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72   is no ELSE expr
16ce0 65 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20  ession and.none 
16cf0 6f 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72  of the WHEN expr
16d00 65 73 73 69 6f 6e 73 20 70 72 6f 64 75 63 65 20  essions produce 
16d10 61 20 72 65 73 75 6c 74 20 65 71 75 61 6c 20 74  a result equal t
16d20 6f 20 74 68 65 20 62 61 73 65 20 65 78 70 72 65  o the base expre
16d30 73 73 69 6f 6e 2c 0a 74 68 65 20 6f 76 65 72 61  ssion,.the overa
16d40 6c 6c 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  ll result is NUL
16d50 4c 2e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 63 6f 6d  L...<p>^When com
16d60 70 61 72 69 6e 67 20 61 20 62 61 73 65 20 65 78  paring a base ex
16d70 70 72 65 73 73 69 6f 6e 20 61 67 61 69 6e 73 74  pression against
16d80 20 61 20 57 48 45 4e 20 65 78 70 72 65 73 73 69   a WHEN expressi
16d90 6f 6e 2c 20 74 68 65 20 73 61 6d 65 0a 63 6f 6c  on, the same.col
16da0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c  lating sequence,
16db0 20 61 66 66 69 6e 69 74 79 2c 20 61 6e 64 20 4e   affinity, and N
16dc0 55 4c 4c 2d 68 61 6e 64 6c 69 6e 67 20 72 75 6c  ULL-handling rul
16dd0 65 73 20 61 70 70 6c 79 20 61 73 20 69 66 20 74  es apply as if t
16de0 68 65 0a 62 61 73 65 20 65 78 70 72 65 73 73 69  he.base expressi
16df0 6f 6e 20 61 6e 64 20 57 48 45 4e 20 65 78 70 72  on and WHEN expr
16e00 65 73 73 69 6f 6e 20 61 72 65 20 72 65 73 70 65  ession are respe
16e10 63 74 69 76 65 6c 79 20 74 68 65 20 6c 65 66 74  ctively the left
16e20 2d 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64  - and.right-hand
16e30 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 61 6e 20   operands of an 
16e40 3c 62 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f 62  <big><b>=</b></b
16e50 69 67 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70  ig> operator.</p
16e60 3e 20 5e 49 66 20 74 68 65 20 62 61 73 65 20 0a  > ^If the base .
16e70 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55  expression is NU
16e80 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
16e90 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 69  lt of the CASE i
16ea0 73 20 61 6c 77 61 79 73 20 74 68 65 20 72 65 73  s always the res
16eb0 75 6c 74 20 0a 6f 66 20 65 76 61 6c 75 61 74 69  ult .of evaluati
16ec0 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72  ng the ELSE expr
16ed0 65 73 73 69 6f 6e 20 69 66 20 69 74 20 65 78 69  ession if it exi
16ee0 73 74 73 2c 20 6f 72 20 4e 55 4c 4c 20 69 66 20  sts, or NULL if 
16ef0 69 74 20 64 6f 65 73 20 6e 6f 74 2e 0a 0a 3c 70  it does not...<p
16f00 3e 5e 42 6f 74 68 20 66 6f 72 6d 73 20 6f 66 20  >^Both forms of 
16f10 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73  the CASE express
16f20 69 6f 6e 20 75 73 65 20 6c 61 7a 79 2c 20 6f 72  ion use lazy, or
16f30 20 73 68 6f 72 74 2d 63 69 72 63 75 69 74 2c 20   short-circuit, 
16f40 0a 65 76 61 6c 75 61 74 69 6f 6e 2e 0a 0a 3c 70  .evaluation...<p
16f50 3e 5e 28 54 68 65 20 6f 6e 6c 79 20 64 69 66 66  >^(The only diff
16f60 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74  erence between t
16f70 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f  he following two
16f80 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
16f90 73 20 69 73 20 74 68 61 74 20 0a 74 68 65 20 3c  s is that .the <
16fa0 69 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69  i>x</i> expressi
16fb0 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  on is evaluated 
16fc0 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20  exactly once in 
16fd0 74 68 65 20 66 69 72 73 74 20 65 78 61 6d 70 6c  the first exampl
16fe0 65 20 62 75 74 20 0a 6d 69 67 68 74 20 62 65 20  e but .might be 
16ff0 65 76 61 6c 75 61 74 65 64 20 6d 75 6c 74 69 70  evaluated multip
17000 6c 65 20 74 69 6d 65 73 20 69 6e 20 74 68 65 20  le times in the 
17010 73 65 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e 3c 70 72  second:..<ul><pr
17020 65 3e 0a 3c 6c 69 3e 43 41 53 45 20 78 20 57 48  e>.<li>CASE x WH
17030 45 4e 20 77 31 20 54 48 45 4e 20 72 31 20 57 48  EN w1 THEN r1 WH
17040 45 4e 20 77 32 20 54 48 45 4e 20 72 32 20 45 4c  EN w2 THEN r2 EL
17050 53 45 20 72 33 20 45 4e 44 0a 3c 6c 69 3e 43 41  SE r3 END.<li>CA
17060 53 45 20 57 48 45 4e 20 78 3d 77 31 20 54 48 45  SE WHEN x=w1 THE
17070 4e 20 72 31 20 57 48 45 4e 20 78 3d 77 32 20 54  N r1 WHEN x=w2 T
17080 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45  HEN r2 ELSE r3 E
17090 4e 44 0a 3c 2f 70 72 65 3e 3c 2f 75 6c 3e 29 5e  ND.</pre></ul>)^
170a0 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
170b0 65 6e 74 20 69 6e 5f 6f 70 20 7b 49 4e 20 6f 70  ent in_op {IN op
170c0 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 49 4e 20  erator} {NOT IN 
170d0 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a  operator}</tcl>.
170e0 3c 68 33 3e 54 68 65 20 49 4e 20 61 6e 64 20 4e  <h3>The IN and N
170f0 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 3c  OT IN operators<
17100 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 20  /h3>.<p>^The IN 
17110 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61  and NOT IN opera
17120 74 6f 72 73 20 74 61 6b 65 20 61 6e 20 65 78 70  tors take an exp
17130 72 65 73 73 69 6f 6e 20 6f 6e 20 74 68 65 0a 6c  ression on the.l
17140 65 66 74 20 61 6e 64 20 61 20 6c 69 73 74 20 6f  eft and a list o
17150 66 20 76 61 6c 75 65 73 20 6f 72 20 61 20 73 75  f values or a su
17160 62 71 75 65 72 79 20 6f 6e 20 74 68 65 20 72 69  bquery on the ri
17170 67 68 74 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72  ght..^When the r
17180 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20  ight operand of 
17190 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20  an IN or NOT IN 
171a0 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 75  operator is a su
171b0 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62 71  bquery, the.subq
171c0 75 65 72 79 20 6d 75 73 74 20 68 61 76 65 20 74  uery must have t
171d0 68 65 20 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f  he same number o
171e0 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65  f columns as the
171f0 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69  re are columns i
17200 6e 0a 74 68 65 20 5b 72 6f 77 20 76 61 6c 75 65  n.the [row value
17210 5d 20 6f 66 20 74 68 65 20 6c 65 66 74 20 6f 70  ] of the left op
17220 65 72 61 6e 64 2e 20 20 5e 54 68 65 20 73 75 62  erand.  ^The sub
17230 71 75 65 72 79 20 6f 6e 20 74 68 65 0a 72 69 67  query on the.rig
17240 68 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e  ht of an IN or N
17250 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 6d  OT IN operator m
17260 75 73 74 20 62 65 20 61 20 73 63 61 6c 61 72 20  ust be a scalar 
17270 73 75 62 71 75 65 72 79 20 69 66 20 74 68 65 20  subquery if the 
17280 6c 65 66 74 0a 65 78 70 72 65 73 73 69 6f 6e 20  left.expression 
17290 69 73 20 6e 6f 74 20 61 20 5b 72 6f 77 20 76 61  is not a [row va
172a0 6c 75 65 5d 20 65 78 70 72 65 73 73 69 6f 6e 2e  lue] expression.
172b0 0a 5e 49 66 20 74 68 65 20 72 69 67 68 74 20 6f  .^If the right o
172c0 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 20  perand of an IN 
172d0 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  or NOT IN operat
172e0 6f 72 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  or is a list of 
172f0 76 61 6c 75 65 73 2c 0a 65 61 63 68 20 6f 66 20  values,.each of 
17300 74 68 6f 73 65 20 76 61 6c 75 65 73 20 6d 75 73  those values mus
17310 74 20 62 65 20 73 63 61 6c 61 72 73 20 61 6e 64  t be scalars and
17320 20 74 68 65 20 6c 65 66 74 20 65 78 70 72 65 73   the left expres
17330 73 69 6f 6e 20 6d 75 73 74 20 61 6c 73 6f 0a 62  sion must also.b
17340 65 20 61 20 73 63 61 6c 61 72 2e 0a 5e 54 68 65  e a scalar..^The
17350 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65   right-hand side
17360 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54   of an IN or NOT
17370 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 63 61 6e   IN operator can
17380 20 62 65 20 61 0a 74 61 62 6c 65 20 3c 69 3e 6e   be a.table <i>n
17390 61 6d 65 3c 2f 69 3e 20 6f 72 20 5b 74 61 62 6c  ame</i> or [tabl
173a0 65 2d 76 61 6c 75 65 64 20 66 75 6e 63 74 69 6f  e-valued functio
173b0 6e 5d 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 20 69  n] <i>name</i> i
173c0 6e 20 77 68 69 63 68 20 0a 63 61 73 65 20 74 68  n which .case th
173d0 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64  e right-hand sid
173e0 65 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20  e is understood 
173f0 74 6f 20 62 65 20 73 75 62 71 75 65 72 79 20 6f  to be subquery o
17400 66 0a 74 68 65 20 66 6f 72 6d 20 22 28 53 45 4c  f.the form "(SEL
17410 45 43 54 20 2a 20 46 52 4f 4d 20 3c 69 3e 6e 61  ECT * FROM <i>na
17420 6d 65 3c 2f 69 3e 29 22 2e 0a 5e 57 68 65 6e 20  me</i>)"..^When 
17430 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e  the right operan
17440 64 20 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65  d is an empty se
17450 74 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  t, the result of
17460 20 49 4e 20 69 73 20 66 61 6c 73 65 20 61 6e 64   IN is false and
17470 20 74 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e   the.result of N
17480 4f 54 20 49 4e 20 69 73 20 74 72 75 65 2c 20 72  OT IN is true, r
17490 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
174a0 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 61 6e   left operand an
174b0 64 20 65 76 65 6e 20 69 66 20 74 68 65 0a 6c 65  d even if the.le
174c0 66 74 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  ft operand is NU
174d0 4c 4c 2e 0a 3c 70 3e 5e 28 54 68 65 20 72 65 73  LL..<p>^(The res
174e0 75 6c 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20  ult of an IN or 
174f0 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  NOT IN operator 
17500 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
17510 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 6d   the following.m
17520 61 74 72 69 78 3a 0a 0a 3c 63 65 6e 74 65 72 3e  atrix:..<center>
17530 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  .<table border=1
17540 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 4c 65 66 74 20  >.<tr>.<th>Left 
17550 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20 4e  operand <br>is N
17560 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70  ULL.<th>Right op
17570 65 72 61 6e 64 20 3c 62 72 3e 63 6f 6e 74 61 69  erand <br>contai
17580 6e 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68  ns NULL.<th>Righ
17590 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73  t operand <br>is
175a0 20 61 6e 20 65 6d 70 74 79 20 73 65 74 0a 3c 74   an empty set.<t
175b0 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64 20 66  h>Left operand f
175c0 6f 75 6e 64 20 3c 62 72 3e 77 69 74 68 69 6e 20  ound <br>within 
175d0 72 69 67 68 74 20 6f 70 65 72 61 6e 64 0a 3c 74  right operand.<t
175e0 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e  h>Result of <br>
175f0 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 68 3e  IN operator.<th>
17600 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 4e 4f  Result of <br>NO
17610 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74  T IN operator.<t
17620 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
17630 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
17640 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
17650 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
17660 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
17670 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
17680 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61  lign="center">fa
17690 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  lse.<td align="c
176a0 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e  enter">true.<tr>
176b0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
176c0 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74  er">does not mat
176d0 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ter.<td align="c
176e0 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
176f0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73  ign="center">yes
17700 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
17710 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
17720 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a  ="center">false.
17730 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
17740 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64  r">true.<tr>.<td
17750 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
17760 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
17770 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d  nter">does not m
17780 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d  atter.<td align=
17790 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
177a0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79  align="center">y
177b0 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  es.<td align="ce
177c0 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 64 20 61  nter">true.<td a
177d0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61  lign="center">fa
177e0 6c 73 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  lse.<tr>.<td ali
177f0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
17800 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
17810 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d  ">yes.<td align=
17820 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
17830 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
17840 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
17850 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c  ter">NULL.<td al
17860 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c  ign="center">NUL
17870 4c 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  L.<tr>.<td align
17880 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74  ="center">yes.<t
17890 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
178a0 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72  >does not matter
178b0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
178c0 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
178d0 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e  ="center">does n
178e0 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c  ot matter.<td al
178f0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c  ign="center">NUL
17900 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  L.<td align="cen
17910 74 65 72 22 3e 4e 55 4c 4c 0a 3c 2f 74 61 62 6c  ter">NULL.</tabl
17920 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  e>.</center>)^..
17930 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 53 51  <p>^Note that SQ
17940 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65 20  Lite allows the 
17950 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69  parenthesized li
17960 73 74 20 6f 66 20 73 63 61 6c 61 72 20 76 61 6c  st of scalar val
17970 75 65 73 20 6f 6e 0a 74 68 65 20 72 69 67 68 74  ues on.the right
17980 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61 6e  -hand side of an
17990 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70   IN or NOT IN op
179a0 65 72 61 74 6f 72 20 74 6f 20 62 65 20 61 6e 20  erator to be an 
179b0 65 6d 70 74 79 20 6c 69 73 74 20 62 75 74 0a 6d  empty list but.m
179c0 6f 73 74 20 6f 74 68 65 72 20 53 51 4c 20 64 61  ost other SQL da
179d0 74 61 62 61 73 65 20 64 61 74 61 62 61 73 65 20  tabase database 
179e0 65 6e 67 69 6e 65 73 20 61 6e 64 20 74 68 65 20  engines and the 
179f0 53 51 4c 39 32 20 73 74 61 6e 64 61 72 64 20 72  SQL92 standard r
17a00 65 71 75 69 72 65 0a 74 68 65 20 6c 69 73 74 20  equire.the list 
17a10 74 6f 20 63 6f 6e 74 61 69 6e 20 61 74 20 6c 65  to contain at le
17a20 61 73 74 20 6f 6e 65 20 65 6c 65 6d 65 6e 74 2e  ast one element.
17a30 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 61 62 6c 65 20  </p>..<h3>Table 
17a40 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68 33  Column Names</h3
17a50 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20  >..<p>^A column 
17a60 6e 61 6d 65 20 63 61 6e 20 62 65 20 61 6e 79 20  name can be any 
17a70 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 64 65 66  of the names def
17a80 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 43 52 45  ined in the [CRE
17a90 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65  ATE TABLE].state
17aa0 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74  ment or one of t
17ab0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65  he following spe
17ac0 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
17ad0 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22  : "<b>ROWID</b>"
17ae0 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20  ,."<b>OID</b>", 
17af0 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f  or "<b>_ROWID_</
17b00 62 3e 22 2e 0a 5e 54 68 65 20 74 68 72 65 65 20  b>"..^The three 
17b10 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69  special identifi
17b20 65 72 73 20 64 65 73 63 72 69 62 65 20 74 68 65  ers describe the
17b30 0a 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20  .unique integer 
17b40 6b 65 79 20 28 74 68 65 20 5b 72 6f 77 69 64 5d  key (the [rowid]
17b50 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  ) associated wit
17b60 68 20 65 76 65 72 79 20 0a 72 6f 77 20 6f 66 20  h every .row of 
17b70 65 76 65 72 79 20 74 61 62 6c 65 20 61 6e 64 20  every table and 
17b80 73 6f 20 61 72 65 20 6e 6f 74 20 61 76 61 69 6c  so are not avail
17b90 61 62 6c 65 20 6f 6e 20 5b 57 49 54 48 4f 55 54  able on [WITHOUT
17ba0 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a   ROWID] tables..
17bb0 5e 54 68 65 20 73 70 65 63 69 61 6c 20 69 64 65  ^The special ide
17bc0 6e 74 69 66 69 65 72 73 20 6f 6e 6c 79 20 72 65  ntifiers only re
17bd0 66 65 72 20 74 6f 20 74 68 65 20 72 6f 77 20 6b  fer to the row k
17be0 65 79 20 69 66 20 74 68 65 20 5b 43 52 45 41 54  ey if the [CREAT
17bf0 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65  E TABLE].stateme
17c00 6e 74 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69  nt does not defi
17c10 6e 65 20 61 20 72 65 61 6c 20 63 6f 6c 75 6d 6e  ne a real column
17c20 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e   with the same n
17c30 61 6d 65 2e 0a 5e 54 68 65 20 72 6f 77 69 64 20  ame..^The rowid 
17c40 63 61 6e 20 62 65 20 75 73 65 64 20 61 6e 79 77  can be used anyw
17c50 68 65 72 65 20 61 20 72 65 67 75 6c 61 72 0a 63  here a regular.c
17c60 6f 6c 75 6d 6e 20 63 61 6e 20 62 65 20 75 73 65  olumn can be use
17c70 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  d.</p>..<tcl>hd_
17c80 66 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b  fragment in_op {
17c90 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d  EXISTS operator}
17ca0 20 7b 4e 4f 54 20 45 58 49 53 54 53 20 6f 70 65   {NOT EXISTS ope
17cb0 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  rator}</tcl>.<h3
17cc0 3e 54 68 65 20 45 58 49 53 54 53 20 6f 70 65 72  >The EXISTS oper
17cd0 61 74 6f 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  ator</h3>..<p>^T
17ce0 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  he EXISTS operat
17cf0 6f 72 20 61 6c 77 61 79 73 20 65 76 61 6c 75 61  or always evalua
17d00 74 65 73 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68  tes to one of th
17d10 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  e integer values
17d20 20 30 20 0a 61 6e 64 20 31 2e 20 5e 49 66 20 65   0 .and 1. ^If e
17d30 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c  xecuting the SEL
17d40 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 73 70  ECT statement sp
17d50 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 72  ecified as the r
17d60 69 67 68 74 2d 68 61 6e 64 20 0a 6f 70 65 72 61  ight-hand .opera
17d70 6e 64 20 6f 66 20 74 68 65 20 45 58 49 53 54 53  nd of the EXISTS
17d80 20 6f 70 65 72 61 74 6f 72 20 77 6f 75 6c 64 20   operator would 
17d90 72 65 74 75 72 6e 20 6f 6e 65 20 6f 72 20 6d 6f  return one or mo
17da0 72 65 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68  re rows, then th
17db0 65 0a 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e.EXISTS operato
17dc0 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31  r evaluates to 1
17dd0 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20  . ^If executing 
17de0 74 68 65 20 53 45 4c 45 43 54 20 77 6f 75 6c 64  the SELECT would
17df0 20 72 65 74 75 72 6e 0a 6e 6f 20 72 6f 77 73 20   return.no rows 
17e00 61 74 20 61 6c 6c 2c 20 74 68 65 6e 20 74 68 65  at all, then the
17e10 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
17e20 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 30 2e   evaluates to 0.
17e30 20 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65   ..<p>^The numbe
17e40 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
17e50 65 61 63 68 20 72 6f 77 20 72 65 74 75 72 6e 65  each row returne
17e60 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20  d by the SELECT 
17e70 73 74 61 74 65 6d 65 6e 74 0a 28 69 66 20 61 6e  statement.(if an
17e80 79 29 20 61 6e 64 20 74 68 65 20 73 70 65 63 69  y) and the speci
17e90 66 69 63 20 76 61 6c 75 65 73 20 72 65 74 75 72  fic values retur
17ea0 6e 65 64 20 68 61 76 65 20 6e 6f 20 65 66 66 65  ned have no effe
17eb0 63 74 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74  ct on the result
17ec0 73 0a 6f 66 20 74 68 65 20 45 58 49 53 54 53 20  s.of the EXISTS 
17ed0 6f 70 65 72 61 74 6f 72 2e 20 5e 49 6e 20 70 61  operator. ^In pa
17ee0 72 74 69 63 75 6c 61 72 2c 20 72 6f 77 73 20 63  rticular, rows c
17ef0 6f 6e 74 61 69 6e 69 6e 67 20 4e 55 4c 4c 20 76  ontaining NULL v
17f00 61 6c 75 65 73 20 61 72 65 0a 6e 6f 74 20 68 61  alues are.not ha
17f10 6e 64 6c 65 64 20 61 6e 79 20 64 69 66 66 65 72  ndled any differ
17f20 65 6e 74 6c 79 20 66 72 6f 6d 20 72 6f 77 73 20  ently from rows 
17f30 77 69 74 68 6f 75 74 20 4e 55 4c 4c 20 76 61 6c  without NULL val
17f40 75 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ues...<tcl>hd_fr
17f50 61 67 6d 65 6e 74 20 73 75 62 71 20 7b 53 75 62  agment subq {Sub
17f60 71 75 65 72 69 65 73 7d 3c 2f 74 63 6c 3e 0a 3c  queries}</tcl>.<
17f70 68 33 3e 53 75 62 71 75 65 72 79 20 45 78 70 72  h3>Subquery Expr
17f80 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  essions</h3>..<p
17f90 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61  >^A [SELECT] sta
17fa0 74 65 6d 65 6e 74 20 65 6e 63 6c 6f 73 65 64 20  tement enclosed 
17fb0 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 20 69  in parentheses i
17fc0 73 20 61 20 73 75 62 71 75 65 72 79 2e 0a 5e 41  s a subquery..^A
17fd0 6c 6c 20 74 79 70 65 73 20 6f 66 20 53 45 4c 45  ll types of SELE
17fe0 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 6e  CT statement, in
17ff0 63 6c 75 64 69 6e 67 0a 61 67 67 72 65 67 61 74  cluding.aggregat
18000 65 20 61 6e 64 20 63 6f 6d 70 6f 75 6e 64 20 53  e and compound S
18010 45 4c 45 43 54 20 71 75 65 72 69 65 73 20 28 71  ELECT queries (q
18020 75 65 72 69 65 73 20 77 69 74 68 20 6b 65 79 77  ueries with keyw
18030 6f 72 64 73 20 6c 69 6b 65 0a 55 4e 49 4f 4e 20  ords like.UNION 
18040 6f 72 20 45 58 43 45 50 54 29 20 61 72 65 20 61  or EXCEPT) are a
18050 6c 6c 6f 77 65 64 20 61 73 20 73 63 61 6c 61 72  llowed as scalar
18060 20 73 75 62 71 75 65 72 69 65 73 2e 0a 5e 54 68   subqueries..^Th
18070 65 20 76 61 6c 75 65 20 6f 66 20 61 20 73 75 62  e value of a sub
18080 71 75 65 72 79 20 65 78 70 72 65 73 73 69 6f 6e  query expression
18090 20 69 73 20 74 68 65 20 66 69 72 73 74 20 72 6f   is the first ro
180a0 77 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 0a  w of the result.
180b0 66 72 6f 6d 20 74 68 65 20 65 6e 63 6c 6f 73 65  from the enclose
180c0 64 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65  d [SELECT] state
180d0 6d 65 6e 74 2e 0a 5e 49 6e 20 6f 74 68 65 72 20  ment..^In other 
180e0 77 6f 72 64 73 2c 20 61 6e 20 69 6d 70 6c 69 65  words, an implie
180f0 64 20 22 4c 49 4d 49 54 20 31 22 20 69 73 20 61  d "LIMIT 1" is a
18100 64 64 65 64 20 74 6f 20 74 68 65 20 73 75 62 71  dded to the subq
18110 75 65 72 79 2c 20 6f 76 65 72 72 69 64 69 6e 67  uery, overriding
18120 0a 61 6e 20 65 78 70 6c 69 63 69 74 6c 79 20 63  .an explicitly c
18130 6f 64 65 64 20 4c 49 4d 49 54 2e 0a 5e 54 68 65  oded LIMIT..^The
18140 20 76 61 6c 75 65 20 6f 66 20 61 20 73 75 62 71   value of a subq
18150 75 65 72 79 20 65 78 70 72 65 73 73 69 6f 6e 20  uery expression 
18160 69 73 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 65  is NULL if the e
18170 6e 63 6c 6f 73 65 64 0a 5b 53 45 4c 45 43 54 5d  nclosed.[SELECT]
18180 20 73 74 61 74 65 6d 65 6e 74 20 72 65 74 75 72   statement retur
18190 6e 73 20 6e 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e  ns no rows...<p>
181a0 41 20 73 75 62 71 75 65 72 79 20 74 68 61 74 20  A subquery that 
181b0 72 65 74 75 72 6e 73 20 61 20 73 69 6e 67 6c 65  returns a single
181c0 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 73 63 61   column is a sca
181d0 6c 61 72 20 73 75 62 71 75 65 72 79 20 61 6e 64  lar subquery and
181e0 20 63 61 6e 0a 62 65 20 75 73 65 64 20 6d 6f 73   can.be used mos
181f0 74 20 61 6e 79 77 68 65 72 65 2e 0a 5e 41 20 73  t anywhere..^A s
18200 75 62 71 75 65 72 79 20 74 68 61 74 20 72 65 74  ubquery that ret
18210 75 72 6e 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65  urns two or more
18220 20 63 6f 6c 75 6d 6e 73 20 69 73 20 61 20 5b 72   columns is a [r
18230 6f 77 20 76 61 6c 75 65 5d 0a 73 75 62 71 75 65  ow value].subque
18240 72 79 20 61 6e 64 20 63 61 6e 20 6f 6e 6c 79 20  ry and can only 
18250 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 6f  be used as the o
18260 70 65 72 61 6e 64 20 6f 66 20 61 20 63 6f 6d 70  perand of a comp
18270 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e  arison operator.
18280 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
18290 6e 74 20 63 6f 73 75 62 20 7b 63 6f 72 72 65 6c  nt cosub {correl
182a0 61 74 65 64 20 73 75 62 71 75 65 72 69 65 73 7d  ated subqueries}
182b0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 72 72 65  </tcl>.<h3>Corre
182c0 6c 61 74 65 64 20 53 75 62 71 75 65 72 69 65 73  lated Subqueries
182d0 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45  </h3>..<p>^A [SE
182e0 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20  LECT] statement 
182f0 75 73 65 64 20 61 73 20 65 69 74 68 65 72 20 61  used as either a
18300 20 73 63 61 6c 61 72 20 73 75 62 71 75 65 72 79   scalar subquery
18310 20 6f 72 20 61 73 20 74 68 65 20 0a 72 69 67 68   or as the .righ
18320 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f  t-hand operand o
18330 66 20 61 6e 20 49 4e 2c 20 4e 4f 54 20 49 4e 20  f an IN, NOT IN 
18340 6f 72 20 45 58 49 53 54 53 20 65 78 70 72 65 73  or EXISTS expres
18350 73 69 6f 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e  sion may contain
18360 20 0a 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20   .references to 
18370 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6f  columns in the o
18380 75 74 65 72 20 71 75 65 72 79 2e 20 53 75 63 68  uter query. Such
18390 20 61 20 73 75 62 71 75 65 72 79 20 69 73 20 6b   a subquery is k
183a0 6e 6f 77 6e 20 61 73 0a 61 20 63 6f 72 72 65 6c  nown as.a correl
183b0 61 74 65 64 20 73 75 62 71 75 65 72 79 2e 20 5e  ated subquery. ^
183c0 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62  A correlated sub
183d0 71 75 65 72 79 20 69 73 20 72 65 65 76 61 6c 75  query is reevalu
183e0 61 74 65 64 20 65 61 63 68 20 74 69 6d 65 0a 69  ated each time.i
183f0 74 73 20 72 65 73 75 6c 74 20 69 73 20 72 65 71  ts result is req
18400 75 69 72 65 64 2e 20 5e 41 6e 20 75 6e 63 6f 72  uired. ^An uncor
18410 72 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79  related subquery
18420 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e   is evaluated on
18430 6c 79 20 6f 6e 63 65 0a 61 6e 64 20 74 68 65 20  ly once.and the 
18440 72 65 73 75 6c 74 20 72 65 75 73 65 64 20 61 73  result reused as
18450 20 6e 65 63 65 73 73 61 72 79 2e 0a 0a 3c 74 63   necessary...<tc
18460 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61  l>hd_fragment ca
18470 73 74 65 78 70 72 20 7b 43 41 53 54 20 65 78 70  stexpr {CAST exp
18480 72 65 73 73 69 6f 6e 7d 20 7b 43 41 53 54 7d 20  ression} {CAST} 
18490 7b 63 61 73 74 7d 20 7b 43 41 53 54 20 6f 70 65  {cast} {CAST ope
184a0 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  rator}</tcl>.<h3
184b0 3e 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  >CAST expression
184c0 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 43 41 53  s</h3>..<p>A CAS
184d0 54 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  T expression of 
184e0 74 68 65 20 66 6f 72 6d 20 22 43 41 53 54 28 3c  the form "CAST(<
184f0 69 3e 65 78 70 72 3c 2f 69 3e 20 41 53 20 3c 69  i>expr</i> AS <i
18500 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 69 3e 29 22  >type-name</i>)"
18510 0a 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 76  .is used to conv
18520 65 72 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ert the value of
18530 20 3c 69 3e 65 78 70 72 3c 2f 69 3e 20 74 6f 20   <i>expr</i> to 
18540 0a 61 20 64 69 66 66 65 72 65 6e 74 20 5b 73 74  .a different [st
18550 6f 72 61 67 65 20 63 6c 61 73 73 5d 20 73 70 65  orage class] spe
18560 63 69 66 69 65 64 20 62 79 20 3c 79 79 74 65 72  cified by <yyter
18570 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74  m>type-name</yyt
18580 65 72 6d 3e 2e 0a 5e 41 20 43 41 53 54 20 63 6f  erm>..^A CAST co
18590 6e 76 65 72 73 69 6f 6e 20 69 73 20 73 69 6d 69  nversion is simi
185a0 6c 61 72 20 74 6f 20 74 68 65 20 63 6f 6e 76 65  lar to the conve
185b0 72 73 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73  rsion that takes
185c0 0a 70 6c 61 63 65 20 77 68 65 6e 20 61 20 5b 63  .place when a [c
185d0 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20  olumn affinity] 
185e0 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 61 20  is applied to a 
185f0 76 61 6c 75 65 20 65 78 63 65 70 74 20 74 68 61  value except tha
18600 74 20 77 69 74 68 0a 74 68 65 20 43 41 53 54 20  t with.the CAST 
18610 6f 70 65 72 61 74 6f 72 20 74 68 65 20 63 6f 6e  operator the con
18620 76 65 72 73 69 6f 6e 20 61 6c 77 61 79 73 20 74  version always t
18630 61 6b 65 73 20 70 6c 61 63 65 20 65 76 65 6e 20  akes place even 
18640 69 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f  if the conversio
18650 6e 0a 6c 6f 73 73 79 20 61 6e 64 20 69 72 72 65  n.lossy and irre
18660 76 65 72 73 69 62 6c 65 2c 20 77 68 65 72 65 61  versible, wherea
18670 73 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  s column affinit
18680 79 20 6f 6e 6c 79 20 63 68 61 6e 67 65 73 20 74  y only changes t
18690 68 65 20 64 61 74 61 20 74 79 70 65 0a 6f 66 20  he data type.of 
186a0 61 20 76 61 6c 75 65 20 69 66 20 74 68 65 20 63  a value if the c
186b0 68 61 6e 67 65 20 69 73 20 6c 6f 73 73 6c 65 73  hange is lossles
186c0 73 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c 65  s and reversible
186d0 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 76 61  ...<p>^If the va
186e0 6c 75 65 20 6f 66 20 3c 69 3e 65 78 70 72 3c 2f  lue of <i>expr</
186f0 69 3e 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e  i> is NULL, then
18700 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
18710 68 65 20 43 41 53 54 0a 65 78 70 72 65 73 73 69  he CAST.expressi
18720 6f 6e 20 69 73 20 61 6c 73 6f 20 4e 55 4c 4c 2e  on is also NULL.
18730 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65   ^Otherwise, the
18740 20 73 74 6f 72 61 67 65 20 63 6c 61 73 73 20 6f   storage class o
18750 66 20 74 68 65 20 72 65 73 75 6c 74 0a 69 73 20  f the result.is 
18760 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 70  determined by ap
18770 70 6c 79 69 6e 67 20 74 68 65 20 5b 72 75 6c 65  plying the [rule
18780 73 20 66 6f 72 20 64 65 74 65 72 6d 69 6e 69 6e  s for determinin
18790 67 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  g column affinit
187a0 79 5d 20 74 6f 0a 74 68 65 20 3c 79 79 74 65 72  y] to.the <yyter
187b0 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74  m>type-name</yyt
187c0 65 72 6d 3e 2e 0a 0a 3c 74 61 62 6c 65 20 62 6f  erm>...<table bo
187d0 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20 3c  rder=1>.<tr>.  <
187e0 74 68 3e 20 41 66 66 69 6e 69 74 79 20 6f 66 20  th> Affinity of 
187f0 3c 79 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d  <yyterm>type-nam
18800 65 3c 2f 79 79 74 65 72 6d 3e 0a 20 20 3c 74 68  e</yyterm>.  <th
18810 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50 72 6f  > Conversion Pro
18820 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20 20 3c  cessing.<tr>.  <
18830 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74 64 3e  td> NONE .  <td>
18840 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61 6c 75   ^Casting a valu
18850 65 20 74 6f 20 61 20 3c 79 79 74 65 72 6d 3e 74  e to a <yyterm>t
18860 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ype-name</yyterm
18870 3e 20 77 69 74 68 20 6e 6f 20 61 66 66 69 6e 69  > with no affini
18880 74 79 20 0a 20 20 63 61 75 73 65 73 20 74 68 65  ty .  causes the
18890 20 76 61 6c 75 65 20 74 6f 0a 20 20 62 65 20 63   value to.  be c
188a0 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20  onverted into a 
188b0 42 4c 4f 42 2e 20 20 5e 43 61 73 74 69 6e 67 20  BLOB.  ^Casting 
188c0 74 6f 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73  to a BLOB consis
188d0 74 73 20 6f 66 20 66 69 72 73 74 20 63 61 73 74  ts of first cast
188e0 69 6e 67 0a 20 20 74 68 65 20 76 61 6c 75 65 20  ing.  the value 
188f0 74 6f 20 54 45 58 54 20 69 6e 20 74 68 65 20 5b  to TEXT in the [
18900 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 20 74 68 65  encoding] of the
18910 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
18920 74 69 6f 6e 2c 20 74 68 65 6e 0a 20 20 69 6e 74  tion, then.  int
18930 65 72 70 72 65 74 69 6e 67 20 74 68 65 20 72 65  erpreting the re
18940 73 75 6c 74 69 6e 67 20 62 79 74 65 20 73 65 71  sulting byte seq
18950 75 65 6e 63 65 20 61 73 20 61 20 42 4c 4f 42 20  uence as a BLOB 
18960 69 6e 73 74 65 61 64 20 6f 66 20 61 73 20 54 45  instead of as TE
18970 58 54 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  XT...<tr>.  <td>
18980 20 54 45 58 54 0a 20 20 3c 74 64 3e 20 5e 54 6f   TEXT.  <td> ^To
18990 20 63 61 73 74 20 61 20 42 4c 4f 42 20 76 61 6c   cast a BLOB val
189a0 75 65 20 74 6f 20 54 45 58 54 2c 20 74 68 65 20  ue to TEXT, the 
189b0 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65  sequence of byte
189c0 73 20 74 68 61 74 20 6d 61 6b 65 20 75 70 20 74  s that make up t
189d0 68 65 0a 20 20 42 4c 4f 42 20 69 73 20 69 6e 74  he.  BLOB is int
189e0 65 72 70 72 65 74 65 64 20 61 73 20 74 65 78 74  erpreted as text
189f0 20 65 6e 63 6f 64 65 64 20 75 73 69 6e 67 20 74   encoded using t
18a00 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f  he database enco
18a10 64 69 6e 67 2e 0a 20 20 3c 70 3e 0a 20 20 20 5e  ding..  <p>.   ^
18a20 43 61 73 74 69 6e 67 20 61 6e 20 49 4e 54 45 47  Casting an INTEG
18a30 45 52 20 6f 72 20 52 45 41 4c 20 76 61 6c 75 65  ER or REAL value
18a40 20 69 6e 74 6f 20 54 45 58 54 20 72 65 6e 64 65   into TEXT rende
18a50 72 73 20 74 68 65 20 76 61 6c 75 65 20 61 73 20  rs the value as 
18a60 69 66 20 76 69 61 20 0a 20 20 20 20 5b 73 71 6c  if via .    [sql
18a70 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 29 5d  ite3_snprintf()]
18a80 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
18a90 20 72 65 73 75 6c 74 69 6e 67 20 54 45 58 54 20   resulting TEXT 
18aa0 75 73 65 73 20 74 68 65 20 5b 65 6e 63 6f 64 69  uses the [encodi
18ab0 6e 67 5d 20 6f 66 0a 20 20 20 20 74 68 65 20 64  ng] of.    the d
18ac0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
18ad0 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  on...<tr>.  <td>
18ae0 20 52 45 41 4c 0a 20 20 3c 74 64 3e 20 5e 57 68   REAL.  <td> ^Wh
18af0 65 6e 20 63 61 73 74 69 6e 67 20 61 20 42 4c 4f  en casting a BLO
18b00 42 20 76 61 6c 75 65 20 74 6f 20 61 20 52 45 41  B value to a REA
18b10 4c 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  L, the value is 
18b20 66 69 72 73 74 20 63 6f 6e 76 65 72 74 65 64 20  first converted 
18b30 74 6f 0a 20 20 20 20 20 20 20 20 54 45 58 54 2e  to.        TEXT.
18b40 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e  .       <p>^When
18b50 20 63 61 73 74 69 6e 67 20 61 20 54 45 58 54 20   casting a TEXT 
18b60 76 61 6c 75 65 20 74 6f 20 52 45 41 4c 2c 20 74  value to REAL, t
18b70 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73 69  he longest possi
18b80 62 6c 65 20 70 72 65 66 69 78 20 6f 66 0a 20 20  ble prefix of.  
18b90 20 20 20 20 20 20 74 68 65 20 76 61 6c 75 65 20        the value 
18ba0 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65  that can be inte
18bb0 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65 61  rpreted as a rea
18bc0 6c 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72  l number is extr
18bd0 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20  acted from.     
18be0 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c 75     the TEXT valu
18bf0 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e  e and the remain
18c00 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e  der ignored. ^An
18c10 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73  y leading spaces
18c20 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20   in the.        
18c30 54 45 58 54 20 76 61 6c 75 65 20 61 72 65 20 69  TEXT value are i
18c40 67 6e 6f 72 65 64 20 77 68 65 6e 20 63 6f 6e 76  gnored when conv
18c50 65 72 67 69 6e 67 20 66 72 6f 6d 20 54 45 58 54  erging from TEXT
18c60 20 74 6f 20 52 45 41 4c 2e 20 5e 28 49 66 20 74   to REAL. ^(If t
18c70 68 65 72 65 20 69 73 0a 20 20 20 20 20 20 20 20  here is.        
18c80 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74 20 63  no prefix that c
18c90 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74 65  an be interprete
18ca0 64 20 61 73 20 61 20 72 65 61 6c 20 6e 75 6d 62  d as a real numb
18cb0 65 72 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f  er, the result o
18cc0 66 20 74 68 65 0a 20 20 20 20 20 20 20 20 63 6f  f the.        co
18cd0 6e 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 30 2e  nversion is 0.0.
18ce0 29 5e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20  )^..<tr>.  <td> 
18cf0 49 4e 54 45 47 45 52 0a 20 20 3c 74 64 3e 20 5e  INTEGER.  <td> ^
18d00 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 42  When casting a B
18d10 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 49 4e 54  LOB value to INT
18d20 45 47 45 52 2c 20 74 68 65 20 76 61 6c 75 65 20  EGER, the value 
18d30 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72 74  is first convert
18d40 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54 45  ed to.        TE
18d50 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57  XT..       <p>^W
18d60 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54 45  hen casting a TE
18d70 58 54 20 76 61 6c 75 65 20 74 6f 20 49 4e 54 45  XT value to INTE
18d80 47 45 52 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74  GER, the longest
18d90 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78   possible prefix
18da0 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65 20   of.        the 
18db0 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
18dc0 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
18dd0 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62   an integer numb
18de0 65 72 20 69 73 20 65 78 74 72 61 63 74 65 64 20  er is extracted 
18df0 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 74 68 65  from.        the
18e00 20 54 45 58 54 20 76 61 6c 75 65 20 61 6e 64 20   TEXT value and 
18e10 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 69 67  the remainder ig
18e20 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61 64  nored. ^Any lead
18e30 69 6e 67 20 73 70 61 63 65 73 20 69 6e 20 74 68  ing spaces in th
18e40 65 0a 20 20 20 20 20 20 20 20 54 45 58 54 20 76  e.        TEXT v
18e50 61 6c 75 65 20 77 68 65 6e 20 63 6f 6e 76 65 72  alue when conver
18e60 74 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20 74  ting from TEXT t
18e70 6f 20 49 4e 54 45 47 45 52 20 61 72 65 20 69 67  o INTEGER are ig
18e80 6e 6f 72 65 64 2e 20 5e 49 66 20 74 68 65 72 65  nored. ^If there
18e90 0a 20 20 20 20 20 20 20 20 69 73 20 6e 6f 20 70  .        is no p
18ea0 72 65 66 69 78 20 74 68 61 74 20 63 61 6e 20 62  refix that can b
18eb0 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
18ec0 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62   an integer numb
18ed0 65 72 2c 20 74 68 65 20 72 65 73 75 6c 74 0a 20  er, the result. 
18ee0 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
18ef0 6e 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 20 20  nversion is 0.  
18f00 5e 49 66 20 74 68 65 20 70 72 65 66 69 78 20 69  ^If the prefix i
18f10 6e 74 65 67 65 72 20 69 73 20 67 72 65 61 74 65  nteger is greate
18f20 72 20 74 68 61 6e 0a 20 20 20 20 20 20 20 20 2b  r than.        +
18f30 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
18f40 38 30 37 20 74 68 65 6e 20 74 68 65 20 72 65 73  807 then the res
18f50 75 6c 74 20 6f 66 20 74 68 65 20 63 61 73 74 20  ult of the cast 
18f60 69 73 20 65 78 61 63 74 6c 79 0a 20 20 20 20 20  is exactly.     
18f70 20 20 20 2b 39 32 32 33 33 37 32 30 33 36 38 35     +922337203685
18f80 34 37 37 35 38 30 37 2e 20 20 5e 53 69 6d 69 6c  4775807.  ^Simil
18f90 61 72 6c 79 2c 20 69 66 20 74 68 65 20 70 72 65  arly, if the pre
18fa0 66 69 78 20 69 6e 74 65 67 65 72 20 69 73 0a 20  fix integer is. 
18fb0 20 20 20 20 20 20 20 6c 65 73 73 20 74 68 61 6e         less than
18fc0 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
18fd0 37 35 38 30 38 20 74 68 65 6e 20 74 68 65 20 72  75808 then the r
18fe0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 61 73  esult of the cas
18ff0 74 20 69 73 0a 20 20 20 20 20 20 20 20 65 78 61  t is.        exa
19000 63 74 6c 79 20 2d 39 32 32 33 33 37 32 30 33 36  ctly -9223372036
19010 38 35 34 37 37 35 38 30 38 2e 0a 0a 20 20 20 20  854775808...    
19020 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73      <p>^When cas
19030 74 69 6e 67 20 74 6f 20 49 4e 54 45 47 45 52 2c  ting to INTEGER,
19040 20 69 66 20 74 68 65 20 74 65 78 74 20 6c 6f 6f   if the text loo
19050 6b 73 20 6c 69 6b 65 20 61 20 66 6c 6f 61 74 69  ks like a floati
19060 6e 67 20 70 6f 69 6e 74 0a 20 20 20 20 20 20 20  ng point.       
19070 20 76 61 6c 75 65 20 77 69 74 68 20 61 6e 20 65   value with an e
19080 78 70 6f 6e 65 6e 74 2c 20 74 68 65 20 65 78 70  xponent, the exp
19090 6f 6e 65 6e 74 20 77 69 6c 6c 20 62 65 20 69 67  onent will be ig
190a0 6e 6f 72 65 64 20 62 65 63 61 75 73 65 20 69 74  nored because it
190b0 20 69 73 0a 20 20 20 20 20 20 20 20 6e 6f 20 70   is.        no p
190c0 61 72 74 20 6f 66 20 74 68 65 20 69 6e 74 65 67  art of the integ
190d0 65 72 20 70 72 65 66 69 78 2e 20 20 5e 46 6f 72  er prefix.  ^For
190e0 20 65 78 61 6d 70 6c 65 2c 0a 20 20 20 20 20 20   example,.      
190f0 20 20 22 28 43 41 53 54 20 27 31 32 33 65 2b 35    "(CAST '123e+5
19100 27 20 41 53 20 49 4e 54 45 47 45 52 29 22 20 72  ' AS INTEGER)" r
19110 65 73 75 6c 74 73 20 69 6e 20 31 32 33 2c 20 6e  esults in 123, n
19120 6f 74 20 69 6e 20 31 32 33 30 30 30 30 30 2e 0a  ot in 12300000..
19130 0a 20 20 20 20 20 20 20 20 3c 70 3e 20 5e 28 54  .        <p> ^(T
19140 68 65 20 43 41 53 54 20 6f 70 65 72 61 74 6f 72  he CAST operator
19150 20 75 6e 64 65 72 73 74 61 6e 64 73 20 64 65 63   understands dec
19160 69 6d 61 6c 0a 20 20 20 20 20 20 20 20 69 6e 74  imal.        int
19170 65 67 65 72 73 20 6f 6e 6c 79 20 26 6d 64 61 73  egers only &mdas
19180 68 3b 20 63 6f 6e 76 65 72 73 69 6f 6e 20 6f 66  h; conversion of
19190 20 5b 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e   [hexadecimal in
191a0 74 65 67 65 72 73 5d 20 73 74 6f 70 73 20 0a 20  tegers] stops . 
191b0 20 20 20 20 20 20 20 61 74 20 74 68 65 20 22 78         at the "x
191c0 22 20 69 6e 20 74 68 65 20 22 30 78 22 20 70 72  " in the "0x" pr
191d0 65 66 69 78 20 6f 66 20 74 68 65 20 68 65 78 61  efix of the hexa
191e0 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20  decimal integer 
191f0 73 74 72 69 6e 67 20 0a 20 20 20 20 20 20 20 20  string .        
19200 61 6e 64 20 74 68 75 73 20 72 65 73 75 6c 74 20  and thus result 
19210 6f 66 20 74 68 65 20 43 41 53 54 20 69 73 20 61  of the CAST is a
19220 6c 77 61 79 73 20 7a 65 72 6f 2e 29 5e 0a 0a 20  lways zero.)^.. 
19230 20 20 20 20 20 3c 70 3e 5e 41 20 63 61 73 74 20       <p>^A cast 
19240 6f 66 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20  of a REAL value 
19250 69 6e 74 6f 20 61 6e 20 49 4e 54 45 47 45 52 20  into an INTEGER 
19260 72 65 73 75 6c 74 73 20 69 6e 20 74 68 65 20 69  results in the i
19270 6e 74 65 67 65 72 0a 20 20 20 20 20 20 62 65 74  nteger.      bet
19280 77 65 65 6e 20 74 68 65 20 52 45 41 4c 20 76 61  ween the REAL va
19290 6c 75 65 20 61 6e 64 20 7a 65 72 6f 20 74 68 61  lue and zero tha
192a0 74 20 69 73 20 63 6c 6f 73 65 73 74 20 74 6f 20  t is closest to 
192b0 74 68 65 20 52 45 41 4c 20 76 61 6c 75 65 2e 0a  the REAL value..
192c0 20 20 20 20 20 20 5e 49 66 20 61 20 52 45 41 4c        ^If a REAL
192d0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
192e0 20 74 68 65 20 67 72 65 61 74 65 73 74 20 70 6f   the greatest po
192f0 73 73 69 62 6c 65 20 73 69 67 6e 65 64 0a 20 20  ssible signed.  
19300 20 20 20 20 69 6e 74 65 67 65 72 20 28 2b 39 32      integer (+92
19310 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
19320 37 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  7) then the resu
19330 6c 74 20 69 73 20 74 68 65 20 67 72 65 61 74 65  lt is the greate
19340 73 74 20 70 6f 73 73 69 62 6c 65 0a 20 20 20 20  st possible.    
19350 20 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72    signed integer
19360 20 61 6e 64 20 69 66 20 74 68 65 20 52 45 41 4c   and if the REAL
19370 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
19380 65 20 6c 65 61 73 74 20 70 6f 73 73 69 62 6c 65  e least possible
19390 20 73 69 67 6e 65 64 0a 20 20 20 20 20 20 69 6e   signed.      in
193a0 74 65 67 65 72 20 28 2d 39 32 32 33 33 37 32 30  teger (-92233720
193b0 33 36 38 35 34 37 37 35 38 30 38 29 20 74 68 65  36854775808) the
193c0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
193d0 74 68 65 20 6c 65 61 73 74 20 70 6f 73 73 69 62  the least possib
193e0 6c 65 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20  le.      signed 
193f0 69 6e 74 65 67 65 72 2e 0a 0a 20 20 20 20 20 20  integer...      
19400 3c 70 3e 50 72 69 6f 72 20 74 6f 20 53 51 4c 69  <p>Prior to SQLi
19410 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 38 2e 32  te version 3.8.2
19420 20 28 5b 64 61 74 65 6f 66 3a 33 2e 38 2e 32 5d   ([dateof:3.8.2]
19430 29 2c 0a 20 20 20 20 20 20 63 61 73 74 69 6e 67  ),.      casting
19440 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20 67 72   a REAL value gr
19450 65 61 74 65 72 20 74 68 61 6e 0a 20 20 20 20 20  eater than.     
19460 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37   +92233720368547
19470 37 35 38 30 37 2e 30 20 69 6e 74 6f 20 61 6e 20  75807.0 into an 
19480 69 6e 74 65 67 65 72 20 72 65 73 75 6c 74 65 64  integer resulted
19490 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 6e 65 67   in the most neg
194a0 61 74 69 76 65 0a 20 20 20 20 20 20 69 6e 74 65  ative.      inte
194b0 67 65 72 2c 20 2d 39 32 32 33 33 37 32 30 33 36  ger, -9223372036
194c0 38 35 34 37 37 35 38 30 38 2e 20 20 54 68 69 73  854775808.  This
194d0 20 62 65 68 61 76 69 6f 72 20 77 61 73 20 6d 65   behavior was me
194e0 61 6e 74 20 74 6f 20 65 6d 75 6c 61 74 65 20 74  ant to emulate t
194f0 68 65 0a 20 20 20 20 20 20 62 65 68 61 76 69 6f  he.      behavio
19500 72 20 6f 66 20 78 38 36 2f 78 36 34 20 68 61 72  r of x86/x64 har
19510 64 77 61 72 65 20 77 68 65 6e 20 64 6f 69 6e 67  dware when doing
19520 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   the equivalent 
19530 63 61 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74  cast...<tr>.  <t
19540 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64  d> NUMERIC.  <td
19550 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58  > ^Casting a TEX
19560 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20  T or BLOB value 
19570 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72  into NUMERIC fir
19580 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64  st does a forced
19590 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  .   conversion i
195a0 6e 74 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65  nto REAL but the
195b0 6e 20 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72  n further conver
195c0 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  ts the result in
195d0 74 6f 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20  to INTEGER if.  
195e0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65   and only if the
195f0 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d   conversion from
19600 20 52 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52   REAL to INTEGER
19610 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64   is lossless and
19620 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20   reversible..   
19630 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
19640 20 63 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69   context in SQLi
19650 74 65 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d  te where the NUM
19660 45 52 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52  ERIC and INTEGER
19670 20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20   [affinities].  
19680 20 62 65 68 61 76 65 20 64 69 66 66 65 72 65 6e   behave differen
19690 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73  tly..   <p> ^Cas
196a0 74 69 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49  ting a REAL or I
196b0 4e 54 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20  NTEGER value to 
196c0 4e 55 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d  NUMERIC is a no-
196d0 6f 70 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65  op, even if a re
196e0 61 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c  al.   value coul
196f0 64 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  d be losslessly 
19700 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
19710 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a  integer...</tr>.
19720 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e  .</table>..<p>^N
19730 6f 74 65 20 74 68 61 74 20 74 68 65 20 72 65 73  ote that the res
19740 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67  ult from casting
19750 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61   any non-BLOB va
19760 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42  lue into a .BLOB
19770 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
19780 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79  from casting any
19790 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f   BLOB value into
197a0 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75   a non-BLOB valu
197b0 65 0a 6d 61 79 20 62 65 20 64 69 66 66 65 72 65  e.may be differe
197c0 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  nt depending on 
197d0 77 68 65 74 68 65 72 20 74 68 65 20 64 61 74 61  whether the data
197e0 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20  base [encoding] 
197f0 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36  is UTF-8,.UTF-16
19800 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e  be, or UTF-16le.
19810 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
19820 65 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20  ent booleanexpr 
19830 7b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  {boolean express
19840 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42  ion}</tcl>.<h3>B
19850 6f 6f 6c 65 61 6e 20 45 78 70 72 65 73 73 69 6f  oolean Expressio
19860 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ns</h3>..<p>The 
19870 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61  SQL language fea
19880 74 75 72 65 73 20 73 65 76 65 72 61 6c 20 63 6f  tures several co
19890 6e 74 65 78 74 73 20 77 68 65 72 65 20 61 6e 20  ntexts where an 
198a0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 0a 65  expression is .e
198b0 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
198c0 20 72 65 73 75 6c 74 20 63 6f 6e 76 65 72 74 65   result converte
198d0 64 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28  d to a boolean (
198e0 74 72 75 65 20 6f 72 20 66 61 6c 73 65 29 20 76  true or false) v
198f0 61 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74  alue. These.cont
19900 65 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c  exts are:..  <ul
19910 3e 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57  >.    <li> the W
19920 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61  HERE clause of a
19930 20 53 45 4c 45 43 54 2c 20 55 50 44 41 54 45 20   SELECT, UPDATE 
19940 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  or DELETE statem
19950 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68  ent,.    <li> th
19960 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  e ON or USING cl
19970 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69  ause of a join i
19980 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
19990 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74  ment,.    <li> t
199a0 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
199b0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
199c0 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e  tement,.    <li>
199d0 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
199e0 20 6f 66 20 61 6e 20 53 51 4c 20 74 72 69 67 67   of an SQL trigg
199f0 65 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e  er, and.    <li>
19a00 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
19a10 20 6f 72 20 63 6c 61 75 73 65 73 20 6f 66 20 73   or clauses of s
19a20 6f 6d 65 20 43 41 53 45 20 65 78 70 72 65 73 73  ome CASE express
19a30 69 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c  ions..  </ul>..<
19a40 70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20 74  p>^(To convert t
19a50 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 6e  he results of an
19a60 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 20   SQL expression 
19a70 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  to a boolean val
19a80 75 65 2c 20 53 51 4c 69 74 65 0a 66 69 72 73 74  ue, SQLite.first
19a90 20 63 61 73 74 73 20 74 68 65 20 72 65 73 75 6c   casts the resul
19aa0 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76  t to a NUMERIC v
19ab0 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65  alue in the same
19ac0 20 77 61 79 20 61 73 20 61 20 0a 5b 43 41 53 54   way as a .[CAST
19ad0 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20   expression]. A 
19ae0 6e 75 6d 65 72 69 63 20 7a 65 72 6f 20 76 61 6c  numeric zero val
19af0 75 65 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75  ue (integer valu
19b00 65 20 30 20 6f 72 20 72 65 61 6c 20 0a 76 61 6c  e 0 or real .val
19b10 75 65 20 30 2e 30 29 20 69 73 20 63 6f 6e 73 69  ue 0.0) is consi
19b20 64 65 72 65 64 20 74 6f 20 62 65 20 66 61 6c 73  dered to be fals
19b30 65 2e 20 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  e.  A NULL value
19b40 20 69 73 20 73 74 69 6c 6c 20 4e 55 4c 4c 2e 0a   is still NULL..
19b50 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  All other values
19b60 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
19b70 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28 46 6f  true.)^..<p>^(Fo
19b80 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 76  r example, the v
19b90 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e 30 2c  alues NULL, 0.0,
19ba0 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20 61 6e   0, 'english' an
19bb0 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20 63 6f  d '0' are all co
19bc0 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65 20 66  nsidered.to be f
19bd0 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75 65 73  alse.)^ ^(Values
19be0 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20 2d 30   1, 1.0, 0.1, -0
19bf0 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69 73 68  .1 and '1english
19c00 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  ' are considered
19c10 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29 5e 0a   to .be true.)^.
19c20 0a 3c 70 3e 42 65 67 69 6e 6e 69 6e 67 20 77 69  .<p>Beginning wi
19c30 74 68 20 53 51 4c 69 74 65 20 33 2e 32 33 2e 30  th SQLite 3.23.0
19c40 20 28 5b 64 61 74 65 6f 66 3a 33 2e 32 33 2e 30   ([dateof:3.23.0
19c50 5d 29 2c 20 53 51 4c 69 74 65 20 72 65 63 6f 67  ]), SQLite recog
19c60 6e 69 7a 65 73 20 74 68 65 0a 69 64 65 6e 74 69  nizes the.identi
19c70 66 69 65 72 73 20 22 54 52 55 45 22 20 61 6e 64  fiers "TRUE" and
19c80 20 22 46 41 4c 53 45 22 20 61 73 20 62 6f 6f 6c   "FALSE" as bool
19c90 65 61 6e 20 6c 69 74 65 72 61 6c 73 2c 20 69 66  ean literals, if
19ca0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 6f   and only if tho
19cb0 73 65 0a 69 64 65 6e 74 69 66 69 65 72 73 20 61  se.identifiers a
19cc0 72 65 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 75  re not already u
19cd0 73 65 64 20 66 6f 72 20 73 6f 6d 65 20 6f 74 68  sed for some oth
19ce0 65 72 20 6d 65 61 6e 69 6e 67 2e 20 20 49 66 20  er meaning.  If 
19cf0 74 68 65 72 65 20 61 6c 72 65 61 64 79 0a 65 78  there already.ex
19d00 69 73 74 73 20 63 6f 6c 75 6d 6e 73 20 6f 72 20  ists columns or 
19d10 74 61 62 6c 65 73 20 6f 72 20 6f 74 68 65 72 20  tables or other 
19d20 6f 62 6a 65 63 74 73 20 6e 61 6d 65 64 20 54 52  objects named TR
19d30 55 45 20 6f 72 20 46 41 4c 53 45 2c 20 74 68 65  UE or FALSE, the
19d40 6e 20 66 6f 72 0a 74 68 65 20 73 61 6b 65 20 6f  n for.the sake o
19d50 66 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70  f backwards comp
19d60 61 74 69 62 69 6c 69 74 79 2c 20 74 68 65 20 54  atibility, the T
19d70 52 55 45 20 61 6e 64 20 46 41 4c 53 45 20 69 64  RUE and FALSE id
19d80 65 6e 74 69 66 69 65 72 73 20 72 65 66 65 72 0a  entifiers refer.
19d90 74 6f 20 74 68 6f 73 65 20 6f 74 68 65 72 20 6f  to those other o
19da0 62 6a 65 63 74 73 2c 20 6e 6f 74 20 74 6f 20 74  bjects, not to t
19db0 68 65 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  he boolean value
19dc0 73 2e 0a 0a 3c 70 3e 54 68 65 20 62 6f 6f 6c 65  s...<p>The boole
19dd0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 73 20 54  an identifiers T
19de0 52 55 45 20 61 6e 64 20 46 41 4c 53 45 20 61 72  RUE and FALSE ar
19df0 65 20 75 73 75 61 6c 6c 79 20 6a 75 73 74 20 61  e usually just a
19e00 6c 69 61 73 65 73 20 66 6f 72 0a 74 68 65 20 69  liases for.the i
19e10 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 31 20  nteger values 1 
19e20 61 6e 64 20 30 2c 20 72 65 73 70 65 63 74 69 76  and 0, respectiv
19e30 65 6c 79 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ely.  However, i
19e40 66 20 54 52 55 45 20 6f 72 20 46 41 4c 53 45 0a  f TRUE or FALSE.
19e50 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 72 69 67  occur on the rig
19e60 68 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20  ht-hand side of 
19e70 61 6e 20 49 53 20 6f 70 65 72 61 74 6f 72 2c 20  an IS operator, 
19e80 74 68 65 6e 20 74 68 65 79 20 66 6f 72 6d 20 6e  then they form n
19e90 65 77 0a 75 6e 61 72 79 20 70 6f 73 74 66 69 78  ew.unary postfix
19ea0 20 6f 70 65 72 61 74 6f 72 73 20 22 49 53 20 54   operators "IS T
19eb0 52 55 45 22 20 61 6e 64 20 22 49 53 20 46 41 4c  RUE" and "IS FAL
19ec0 53 45 22 20 77 68 69 63 68 20 74 65 73 74 20 74  SE" which test t
19ed0 68 65 20 62 6f 6f 6c 65 61 6e 0a 76 61 6c 75 65  he boolean.value
19ee0 20 6f 66 20 74 68 65 20 6f 70 65 72 61 6e 64 20   of the operand 
19ef0 6f 6e 20 74 68 65 20 6c 65 66 74 2e 0a 0a 3c 68  on the left...<h
19f00 33 3e 46 75 6e 63 74 69 6f 6e 73 3c 2f 68 33 3e  3>Functions</h3>
19f10 0a 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70 6f  .<p>SQLite suppo
19f20 72 74 73 20 6d 61 6e 79 20 5b 63 6f 72 65 66 75  rts many [corefu
19f30 6e 63 7c 73 69 6d 70 6c 65 5d 20 61 6e 64 20 5b  nc|simple] and [
19f40 61 67 67 66 75 6e 63 7c 61 67 67 72 65 67 61 74  aggfunc|aggregat
19f50 65 5d 0a 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73  e].SQL functions
19f60 2e 20 20 46 6f 72 20 70 72 65 73 65 6e 74 61 74  .  For presentat
19f70 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69  ion purposes, si
19f80 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  mple functions a
19f90 72 65 20 66 75 72 74 68 65 72 0a 73 75 62 64 69  re further.subdi
19fa0 76 69 64 65 64 20 69 6e 74 6f 20 5b 63 6f 72 65  vided into [core
19fb0 66 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63  func | core func
19fc0 74 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65  tions] and [date
19fd0 66 75 6e 63 7c 64 61 74 65 2d 74 69 6d 65 20 66  func|date-time f
19fe0 75 6e 63 74 69 6f 6e 73 5d 2e 0a 41 70 70 6c 69  unctions]..Appli
19ff0 63 61 74 69 6f 6e 73 20 63 61 6e 20 61 64 64 20  cations can add 
1a000 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 2c 20 77  new functions, w
1a010 72 69 74 74 65 6e 20 69 6e 20 43 2f 43 2b 2b 2c  ritten in C/C++,
1a020 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69   using the.[sqli
1a030 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
1a040 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ion()] interface
1a050 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 74 20 69  ..</p>..<p>^It i
1a060 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61  s possible to ha
1a070 76 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  ve an aggregate 
1a080 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68  function with th
1a090 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61  e same name as a
1a0a0 0a 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e  .simple function
1a0b0 2c 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65  , as long as the
1a0c0 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
1a0d0 65 6e 74 73 20 66 6f 72 20 74 68 65 20 74 77 6f  ents for the two
1a0e0 20 66 6f 72 6d 73 20 6f 66 20 74 68 65 0a 66 75   forms of the.fu
1a0f0 6e 63 74 69 6f 6e 20 61 72 65 20 64 69 66 66 65  nction are diffe
1a100 72 65 6e 74 2e 20 20 5e 46 6f 72 20 65 78 61 6d  rent.  ^For exam
1a110 70 6c 65 2c 20 74 68 65 20 5b 61 67 67 5f 6d 61  ple, the [agg_ma
1a120 78 7c 6d 61 78 28 29 5d 20 66 75 6e 63 74 69 6f  x|max()] functio
1a130 6e 20 77 69 74 68 20 61 0a 73 69 6e 67 6c 65 20  n with a.single 
1a140 61 72 67 75 6d 65 6e 74 20 69 73 20 61 6e 20 61  argument is an a
1a150 67 67 72 65 67 61 74 65 20 61 6e 64 20 74 68 65  ggregate and the
1a160 20 5b 6d 61 78 28 29 5d 20 66 75 6e 63 74 69 6f   [max()] functio
1a170 6e 20 77 69 74 68 20 74 77 6f 20 6f 72 20 6d 6f  n with two or mo
1a180 72 65 0a 61 72 67 75 6d 65 6e 74 73 20 69 73 20  re.arguments is 
1a190 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  a simple functio
1a1a0 6e 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  n...<tcl>.######
1a1b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a1c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a1d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a1e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a1f0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1a200 20 7b 43 6f 72 65 20 46 75 6e 63 74 69 6f 6e 73   {Core Functions
1a210 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a 63 6f 72  } corefunc {*cor
1a220 65 66 75 6e 63 7d 0a 75 6e 73 65 74 20 2d 6e 6f  efunc}.unset -no
1a230 63 6f 6d 70 6c 61 69 6e 20 63 6f 72 65 66 75 6e  complain corefun
1a240 63 73 65 74 0a 70 72 6f 63 20 66 75 6e 63 64 65  cset.proc funcde
1a250 66 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72  f {syntax keywor
1a260 64 73 20 64 65 73 63 7d 20 7b 0a 20 20 67 6c 6f  ds desc} {.  glo
1a270 62 61 6c 20 63 6f 72 65 66 75 6e 63 73 65 74 0a  bal corefuncset.
1a280 20 20 72 65 67 65 78 70 20 7b 5e 5b 61 2d 7a 5f    regexp {^[a-z_
1a290 5d 2b 7d 20 24 73 79 6e 74 61 78 20 62 61 73 65  ]+} $syntax base
1a2a0 73 79 6e 74 61 78 0a 20 20 73 65 74 20 63 6f 72  syntax.  set cor
1a2b0 65 66 75 6e 63 73 65 74 28 24 62 61 73 65 73 79  efuncset($basesy
1a2c0 6e 74 61 78 29 20 5b 6c 69 73 74 20 24 73 79 6e  ntax) [list $syn
1a2d0 74 61 78 20 24 6b 65 79 77 6f 72 64 73 20 24 64  tax $keywords $d
1a2e0 65 73 63 5d 0a 7d 0a 66 75 6e 63 64 65 66 20 7b  esc].}.funcdef {
1a2f0 61 62 73 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  abs(X)} {} {.  ^
1a300 54 68 65 20 61 62 73 28 58 29 20 66 75 6e 63 74  The abs(X) funct
1a310 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1a320 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f  absolute value o
1a330 66 20 74 68 65 20 6e 75 6d 65 72 69 63 0a 20 20  f the numeric.  
1a340 61 72 67 75 6d 65 6e 74 20 58 2e 20 20 5e 41 62  argument X.  ^Ab
1a350 73 28 58 29 20 72 65 74 75 72 6e 73 20 4e 55 4c  s(X) returns NUL
1a360 4c 20 69 66 20 58 20 69 73 20 4e 55 4c 4c 2e 20  L if X is NULL. 
1a370 0a 20 20 5e 28 41 62 73 28 58 29 20 72 65 74 75  .  ^(Abs(X) retu
1a380 72 6e 73 20 30 2e 30 20 69 66 20 58 20 69 73 20  rns 0.0 if X is 
1a390 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
1a3a0 0a 20 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62  .  that cannot b
1a3b0 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  e converted to a
1a3c0 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 2e 29   numeric value.)
1a3d0 5e 20 20 5e 49 66 20 58 20 69 73 20 74 68 65 20  ^  ^If X is the 
1a3e0 0a 20 20 69 6e 74 65 67 65 72 20 2d 39 32 32 33  .  integer -9223
1a3f0 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38 20  372036854775808 
1a400 74 68 65 6e 20 61 62 73 28 58 29 20 74 68 72 6f  then abs(X) thro
1a410 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76  ws an integer ov
1a420 65 72 66 6c 6f 77 0a 20 20 65 72 72 6f 72 20 73  erflow.  error s
1a430 69 6e 63 65 20 74 68 65 72 65 20 69 73 20 6e 6f  ince there is no
1a440 20 65 71 75 69 76 61 6c 65 6e 74 20 70 6f 73 69   equivalent posi
1a450 74 69 76 65 20 36 34 2d 62 69 74 20 74 77 6f 20  tive 64-bit two 
1a460 63 6f 6d 70 6c 65 6d 65 6e 74 20 76 61 6c 75 65  complement value
1a470 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 68  ..}..funcdef {ch
1a480 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20  anges()} {} {.  
1a490 5e 54 68 65 20 63 68 61 6e 67 65 73 28 29 20 66  ^The changes() f
1a4a0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1a4b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61  the number of da
1a4c0 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74  tabase rows that
1a4d0 20 77 65 72 65 20 63 68 61 6e 67 65 64 0a 20 20   were changed.  
1a4e0 6f 72 20 69 6e 73 65 72 74 65 64 20 6f 72 20 64  or inserted or d
1a4f0 65 6c 65 74 65 64 20 62 79 20 74 68 65 20 6d 6f  eleted by the mo
1a500 73 74 20 72 65 63 65 6e 74 6c 79 20 63 6f 6d 70  st recently comp
1a510 6c 65 74 65 64 20 49 4e 53 45 52 54 2c 20 44 45  leted INSERT, DE
1a520 4c 45 54 45 2c 0a 20 20 6f 72 20 55 50 44 41 54  LETE,.  or UPDAT
1a530 45 20 73 74 61 74 65 6d 65 6e 74 2c 20 65 78 63  E statement, exc
1a540 6c 75 73 69 76 65 20 6f 66 20 73 74 61 74 65 6d  lusive of statem
1a550 65 6e 74 73 20 69 6e 20 6c 6f 77 65 72 2d 6c 65  ents in lower-le
1a560 76 65 6c 20 74 72 69 67 67 65 72 73 2e 0a 20 20  vel triggers..  
1a570 5e 54 68 65 20 63 68 61 6e 67 65 73 28 29 20 53  ^The changes() S
1a580 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  QL function is a
1a590 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
1a5a0 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61  the [sqlite3_cha
1a5b0 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20  nges()].  C/C++ 
1a5c0 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 68 65 6e  function and hen
1a5d0 63 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73  ce follows the s
1a5e0 61 6d 65 20 72 75 6c 65 73 20 66 6f 72 20 63 6f  ame rules for co
1a5f0 75 6e 74 69 6e 67 20 63 68 61 6e 67 65 73 2e 0a  unting changes..
1a600 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 68 61 72  }..funcdef {char
1a610 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58 4e 29 7d 20  (X1,X2,...,XN)} 
1a620 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20 63 68 61  {} {.  ^(The cha
1a630 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58 4e 29 20  r(X1,X2,...,XN) 
1a640 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1a650 20 61 20 73 74 72 69 6e 67 20 63 6f 6d 70 6f 73   a string compos
1a660 65 64 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  ed of characters
1a670 20 68 61 76 69 6e 67 20 74 68 65 0a 20 20 20 75   having the.   u
1a680 6e 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e  nicode code poin
1a690 74 20 76 61 6c 75 65 73 20 6f 66 20 69 6e 74 65  t values of inte
1a6a0 67 65 72 73 20 58 31 20 74 68 72 6f 75 67 68 20  gers X1 through 
1a6b0 58 4e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  XN, respectively
1a6c0 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .)^.}..funcdef {
1a6d0 63 6f 61 6c 65 73 63 65 28 58 2c 59 2c 2e 2e 2e  coalesce(X,Y,...
1a6e0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63  )} {} {.  ^The c
1a6f0 6f 61 6c 65 73 63 65 28 29 20 66 75 6e 63 74 69  oalesce() functi
1a700 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70  on returns a cop
1a710 79 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e  y of its first n
1a720 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74  on-NULL argument
1a730 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 61  , or.  NULL if a
1a740 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  ll arguments are
1a750 20 4e 55 4c 4c 2e 20 20 5e 43 6f 61 6c 65 73 63   NULL.  ^Coalesc
1a760 65 28 29 20 6d 75 73 74 20 68 61 76 65 20 61 74  e() must have at
1a770 20 6c 65 61 73 74 20 0a 20 20 32 20 61 72 67 75   least .  2 argu
1a780 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ments..}..funcde
1a790 66 20 7b 67 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d  f {glob(X,Y)} {}
1a7a0 20 7b 0a 20 20 5e 54 68 65 20 67 6c 6f 62 28 58   {.  ^The glob(X
1a7b0 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ,Y) function is 
1a7c0 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 74 68  equivalent to th
1a7d0 65 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20 22  e.  expression "
1a7e0 3c 62 3e 59 20 47 4c 4f 42 20 58 3c 2f 62 3e 22  <b>Y GLOB X</b>"
1a7f0 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ..  Note that th
1a800 65 20 58 20 61 6e 64 20 59 20 61 72 67 75 6d 65  e X and Y argume
1a810 6e 74 73 20 61 72 65 20 72 65 76 65 72 73 65 64  nts are reversed
1a820 20 69 6e 20 74 68 65 20 67 6c 6f 62 28 29 20 66   in the glob() f
1a830 75 6e 63 74 69 6f 6e 0a 20 20 72 65 6c 61 74 69  unction.  relati
1a840 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20  ve to the infix 
1a850 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 2e  [GLOB] operator.
1a860 0a 20 20 5e 49 66 20 74 68 65 20 5b 73 71 6c 69  .  ^If the [sqli
1a870 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
1a880 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ion()] interface
1a890 20 69 73 20 75 73 65 64 20 74 6f 0a 20 20 6f 76   is used to.  ov
1a8a0 65 72 72 69 64 65 20 74 68 65 20 67 6c 6f 62 28  erride the glob(
1a8b0 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 77 69  X,Y) function wi
1a8c0 74 68 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  th an alternativ
1a8d0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
1a8e0 20 74 68 65 6e 0a 20 20 74 68 65 20 5b 47 4c 4f   then.  the [GLO
1a8f0 42 5d 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c  B] operator will
1a900 20 69 6e 76 6f 6b 65 20 74 68 65 20 61 6c 74 65   invoke the alte
1a910 72 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e  rnative implemen
1a920 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64  tation..}..funcd
1a930 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c 59 29 7d  ef {ifnull(X,Y)}
1a940 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 66 6e   {} {.  ^The ifn
1a950 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ull() function r
1a960 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66  eturns a copy of
1a970 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   its first non-N
1a980 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72  ULL argument, or
1a990 0a 20 20 4e 55 4c 4c 20 69 66 20 62 6f 74 68 20  .  NULL if both 
1a9a0 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55  arguments are NU
1a9b0 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28 29 20 6d  LL.  ^Ifnull() m
1a9c0 75 73 74 20 68 61 76 65 20 65 78 61 63 74 6c 79  ust have exactly
1a9d0 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20 20   2 arguments..  
1a9e0 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66 75  ^The ifnull() fu
1a9f0 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61  nction is equiva
1aa00 6c 65 6e 74 20 74 6f 20 5b 63 6f 61 6c 65 73 63  lent to [coalesc
1aa10 65 28 29 5d 20 77 69 74 68 20 74 77 6f 20 61 72  e()] with two ar
1aa20 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63  guments..}..func
1aa30 64 65 66 20 7b 69 6e 73 74 72 28 58 2c 59 29 7d  def {instr(X,Y)}
1aa40 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 6e 73   {} {.  ^The ins
1aa50 74 72 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  tr(X,Y) function
1aa60 20 66 69 6e 64 73 20 74 68 65 20 66 69 72 73 74   finds the first
1aa70 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 73   occurrence of s
1aa80 74 72 69 6e 67 20 59 20 77 69 74 68 69 6e 20 0a  tring Y within .
1aa90 20 20 73 74 72 69 6e 67 20 58 20 61 6e 64 20 72    string X and r
1aaa0 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
1aab0 72 20 6f 66 20 70 72 69 6f 72 20 63 68 61 72 61  r of prior chara
1aac0 63 74 65 72 73 20 70 6c 75 73 20 31 2c 20 6f 72  cters plus 1, or
1aad0 20 30 20 69 66 0a 20 20 59 20 69 73 20 6e 6f 77   0 if.  Y is now
1aae0 68 65 72 65 20 66 6f 75 6e 64 20 77 69 74 68 69  here found withi
1aaf0 6e 20 58 2e 0a 20 20 5e 4f 72 2c 20 69 66 20 58  n X..  ^Or, if X
1ab00 20 61 6e 64 20 59 20 61 72 65 20 62 6f 74 68 20   and Y are both 
1ab10 42 4c 4f 42 73 2c 20 74 68 65 6e 20 69 6e 73 74  BLOBs, then inst
1ab20 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20 6f  r(X,Y) returns o
1ab30 6e 65 0a 20 20 6d 6f 72 65 20 74 68 61 6e 20 74  ne.  more than t
1ab40 68 65 20 6e 75 6d 62 65 72 20 62 79 74 65 73 20  he number bytes 
1ab50 70 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69 72  prior to the fir
1ab60 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66  st occurrence of
1ab70 20 59 2c 20 6f 72 20 30 20 69 66 0a 20 20 59 20   Y, or 0 if.  Y 
1ab80 64 6f 65 73 20 6e 6f 74 20 6f 63 63 75 72 20 61  does not occur a
1ab90 6e 79 77 68 65 72 65 20 77 69 74 68 69 6e 20 58  nywhere within X
1aba0 2e 0a 20 20 5e 49 66 20 62 6f 74 68 20 61 72 67  ..  ^If both arg
1abb0 75 6d 65 6e 74 73 20 58 20 61 6e 64 20 59 20 74  uments X and Y t
1abc0 6f 20 69 6e 73 74 72 28 58 2c 59 29 20 61 72 65  o instr(X,Y) are
1abd0 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 6e 64 20 61 72   non-NULL and ar
1abe0 65 20 6e 6f 74 20 42 4c 4f 42 73 0a 20 20 74 68  e not BLOBs.  th
1abf0 65 6e 20 62 6f 74 68 20 61 72 65 20 69 6e 74 65  en both are inte
1ac00 72 70 72 65 74 65 64 20 61 73 20 73 74 72 69 6e  rpreted as strin
1ac10 67 73 2e 0a 20 20 5e 49 66 20 65 69 74 68 65 72  gs..  ^If either
1ac20 20 58 20 6f 72 20 59 20 61 72 65 20 4e 55 4c 4c   X or Y are NULL
1ac30 20 69 6e 20 69 6e 73 74 72 28 58 2c 59 29 20 74   in instr(X,Y) t
1ac40 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
1ac50 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75 6e 63 64  s NULL..}..funcd
1ac60 65 66 20 7b 68 65 78 28 58 29 7d 20 7b 7d 20 7b  ef {hex(X)} {} {
1ac70 0a 20 20 5e 54 68 65 20 68 65 78 28 29 20 66 75  .  ^The hex() fu
1ac80 6e 63 74 69 6f 6e 20 69 6e 74 65 72 70 72 65 74  nction interpret
1ac90 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20 61  s its argument a
1aca0 73 20 61 20 42 4c 4f 42 20 61 6e 64 20 72 65 74  s a BLOB and ret
1acb0 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20  urns.  a string 
1acc0 77 68 69 63 68 20 69 73 20 74 68 65 20 75 70 70  which is the upp
1acd0 65 72 2d 63 61 73 65 20 68 65 78 61 64 65 63 69  er-case hexadeci
1ace0 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67 20 6f 66  mal rendering of
1acf0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
1ad00 20 20 74 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a 0a    that blob..}..
1ad10 66 75 6e 63 64 65 66 20 7b 6c 61 73 74 5f 69 6e  funcdef {last_in
1ad20 73 65 72 74 5f 72 6f 77 69 64 28 29 7d 20 7b 7d  sert_rowid()} {}
1ad30 20 7b 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69   {.  ^The last_i
1ad40 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75  nsert_rowid() fu
1ad50 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
1ad60 68 65 20 5b 52 4f 57 49 44 5d 0a 20 20 6f 66 20  he [ROWID].  of 
1ad70 74 68 65 20 6c 61 73 74 20 72 6f 77 20 69 6e 73  the last row ins
1ad80 65 72 74 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ert from the dat
1ad90 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1ada0 20 77 68 69 63 68 20 69 6e 76 6f 6b 65 64 20 74   which invoked t
1adb0 68 65 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  he.  function.. 
1adc0 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72   ^The last_inser
1add0 74 5f 72 6f 77 69 64 28 29 20 53 51 4c 20 66 75  t_rowid() SQL fu
1ade0 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70  nction is a wrap
1adf0 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20  per around the. 
1ae00 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69   [sqlite3_last_i
1ae10 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 5d 20 43  nsert_rowid()] C
1ae20 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 66  /C++ interface f
1ae30 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63  unction..}..func
1ae40 64 65 66 20 7b 6c 65 6e 67 74 68 28 58 29 7d 20  def {length(X)} 
1ae50 7b 7d 20 7b 0a 20 20 5e 46 6f 72 20 61 20 73 74  {} {.  ^For a st
1ae60 72 69 6e 67 20 76 61 6c 75 65 20 58 2c 20 74 68  ring value X, th
1ae70 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63  e length(X) func
1ae80 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1ae90 20 6e 75 6d 62 65 72 20 6f 66 20 0a 20 20 63 68   number of .  ch
1aea0 61 72 61 63 74 65 72 73 20 28 6e 6f 74 20 62 79  aracters (not by
1aeb0 74 65 73 29 20 69 6e 20 58 20 70 72 69 6f 72 20  tes) in X prior 
1aec0 74 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55 4c  to the first NUL
1aed0 20 63 68 61 72 61 63 74 65 72 2e 0a 20 20 53 69   character..  Si
1aee0 6e 63 65 20 53 51 4c 69 74 65 20 73 74 72 69 6e  nce SQLite strin
1aef0 67 73 20 64 6f 20 6e 6f 74 20 6e 6f 72 6d 61 6c  gs do not normal
1af00 6c 79 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 20 63  ly contain NUL c
1af10 68 61 72 61 63 74 65 72 73 2c 20 74 68 65 20 6c  haracters, the l
1af20 65 6e 67 74 68 28 58 29 0a 20 20 66 75 6e 63 74  ength(X).  funct
1af30 69 6f 6e 20 77 69 6c 6c 20 75 73 75 61 6c 6c 79  ion will usually
1af40 20 72 65 74 75 72 6e 20 74 68 65 20 74 6f 74 61   return the tota
1af50 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  l number of char
1af60 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 73 74  acters in the st
1af70 72 69 6e 67 20 58 2e 0a 20 20 5e 46 6f 72 20 61  ring X..  ^For a
1af80 20 62 6c 6f 62 20 76 61 6c 75 65 20 58 2c 20 6c   blob value X, l
1af90 65 6e 67 74 68 28 58 29 20 72 65 74 75 72 6e 73  ength(X) returns
1afa0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
1afb0 79 74 65 73 20 69 6e 20 74 68 65 20 62 6c 6f 62  ytes in the blob
1afc0 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 4e 55 4c  ..  ^If X is NUL
1afd0 4c 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29  L then length(X)
1afe0 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e 49 66 20   is NULL..  ^If 
1aff0 58 20 69 73 20 6e 75 6d 65 72 69 63 20 74 68 65  X is numeric the
1b000 6e 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75  n length(X) retu
1b010 72 6e 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f  rns the length o
1b020 66 20 61 20 73 74 72 69 6e 67 0a 20 20 72 65 70  f a string.  rep
1b030 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 58  resentation of X
1b040 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69  ..}..funcdef {li
1b050 6b 65 28 58 2c 59 29 20 6c 69 6b 65 28 58 2c 59  ke(X,Y) like(X,Y
1b060 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Z)} {} {.  ^The
1b070 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e   like() function
1b080 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
1b090 65 6d 65 6e 74 20 74 68 65 0a 20 20 22 3c 62 3e  ement the.  "<b>
1b0a0 59 20 4c 49 4b 45 20 58 20 26 23 39 31 3b 45 53  Y LIKE X &#91;ES
1b0b0 43 41 50 45 20 5a 26 23 39 33 3b 3c 2f 62 3e 22  CAPE Z&#93;</b>"
1b0c0 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 0a 20 20   expression. .  
1b0d0 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c  ^If the optional
1b0e0 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69   ESCAPE clause i
1b0f0 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20  s present, then 
1b100 74 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e  the.  like() fun
1b110 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f 6b 65 64  ction is invoked
1b120 20 77 69 74 68 20 74 68 72 65 65 20 61 72 67 75   with three argu
1b130 6d 65 6e 74 73 2e 20 20 5e 4f 74 68 65 72 77 69  ments.  ^Otherwi
1b140 73 65 2c 20 69 74 20 69 73 0a 20 20 69 6e 76 6f  se, it is.  invo
1b150 6b 65 64 20 77 69 74 68 20 74 77 6f 20 61 72 67  ked with two arg
1b160 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20 4e 6f 74  uments only. Not
1b170 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e 64  e that the X and
1b180 20 59 20 70 61 72 61 6d 65 74 65 72 73 20 61 72   Y parameters ar
1b190 65 0a 20 20 72 65 76 65 72 73 65 64 20 69 6e 20  e.  reversed in 
1b1a0 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  the like() funct
1b1b0 69 6f 6e 20 72 65 6c 61 74 69 76 65 20 74 6f 20  ion relative to 
1b1c0 74 68 65 20 69 6e 66 69 78 20 5b 4c 49 4b 45 5d  the infix [LIKE]
1b1d0 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e 54 68   operator..  ^Th
1b1e0 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
1b1f0 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e  e_function()] in
1b200 74 65 72 66 61 63 65 20 63 61 6e 20 62 65 20 75  terface can be u
1b210 73 65 64 20 74 6f 20 6f 76 65 72 72 69 64 65 20  sed to override 
1b220 74 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e  the.  like() fun
1b230 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 72 65 62  ction and thereb
1b240 79 20 63 68 61 6e 67 65 20 74 68 65 20 6f 70 65  y change the ope
1b250 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20  ration of the.  
1b260 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e  [LIKE] operator.
1b270 20 20 57 68 65 6e 20 6f 76 65 72 72 69 64 69 6e    When overridin
1b280 67 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e  g the like() fun
1b290 63 74 69 6f 6e 2c 20 69 74 20 6d 61 79 20 62 65  ction, it may be
1b2a0 20 69 6d 70 6f 72 74 61 6e 74 0a 20 20 74 6f 20   important.  to 
1b2b0 6f 76 65 72 72 69 64 65 20 62 6f 74 68 20 74 68  override both th
1b2c0 65 20 74 77 6f 20 61 6e 64 20 74 68 72 65 65 20  e two and three 
1b2d0 61 72 67 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e  argument version
1b2e0 73 20 6f 66 20 74 68 65 20 6c 69 6b 65 28 29 20  s of the like() 
1b2f0 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 20 4f 74 68  .  function. Oth
1b300 65 72 77 69 73 65 2c 20 64 69 66 66 65 72 65 6e  erwise, differen
1b310 74 20 63 6f 64 65 20 6d 61 79 20 62 65 20 63 61  t code may be ca
1b320 6c 6c 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  lled to implemen
1b330 74 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f  t the.  [LIKE] o
1b340 70 65 72 61 74 6f 72 20 64 65 70 65 6e 64 69 6e  perator dependin
1b350 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20  g on whether or 
1b360 6e 6f 74 20 61 6e 20 45 53 43 41 50 45 20 63 6c  not an ESCAPE cl
1b370 61 75 73 65 20 77 61 73 20 0a 20 20 73 70 65 63  ause was .  spec
1b380 69 66 69 65 64 2e 0a 7d 0a 0a 0a 66 75 6e 63 64  ified..}...funcd
1b390 65 66 20 7b 6c 69 6b 65 6c 69 68 6f 6f 64 28 58  ef {likelihood(X
1b3a0 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
1b3b0 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29   likelihood(X,Y)
1b3c0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1b3d0 73 20 61 72 67 75 6d 65 6e 74 20 58 20 75 6e 63  s argument X unc
1b3e0 68 61 6e 67 65 64 2e 0a 20 20 5e 28 54 68 65 20  hanged..  ^(The 
1b3f0 76 61 6c 75 65 20 59 20 69 6e 20 6c 69 6b 65 6c  value Y in likel
1b400 69 68 6f 6f 64 28 58 2c 59 29 20 6d 75 73 74 20  ihood(X,Y) must 
1b410 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  be a floating po
1b420 69 6e 74 20 63 6f 6e 73 74 61 6e 74 0a 20 20 62  int constant.  b
1b430 65 74 77 65 65 6e 20 30 2e 30 20 61 6e 64 20 31  etween 0.0 and 1
1b440 2e 30 2c 20 69 6e 63 6c 75 73 69 76 65 2e 29 5e  .0, inclusive.)^
1b450 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f  .  ^The likeliho
1b460 6f 64 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69  od(X) function i
1b470 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74  s a no-op that t
1b480 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1b490 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77  r.  optimizes aw
1b4a0 61 79 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f  ay so that it co
1b4b0 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79  nsumes no CPU cy
1b4c0 63 6c 65 73 20 64 75 72 69 6e 67 20 72 75 6e 2d  cles during run-
1b4d0 74 69 6d 65 0a 20 20 28 74 68 61 74 20 69 73 2c  time.  (that is,
1b4e0 20 64 75 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f   during calls to
1b4f0 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29   [sqlite3_step()
1b500 5d 29 2e 0a 20 20 5e 54 68 65 20 70 75 72 70 6f  ])..  ^The purpo
1b510 73 65 20 6f 66 20 74 68 65 20 6c 69 6b 65 6c 69  se of the likeli
1b520 68 6f 6f 64 28 58 2c 59 29 20 66 75 6e 63 74 69  hood(X,Y) functi
1b530 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65  on is to provide
1b540 20 61 20 68 69 6e 74 0a 20 20 74 6f 20 74 68 65   a hint.  to the
1b550 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74   query planner t
1b560 68 61 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  hat the argument
1b570 20 58 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20   X is a boolean 
1b580 74 68 61 74 20 69 73 0a 20 20 74 72 75 65 20 77  that is.  true w
1b590 69 74 68 20 61 20 70 72 6f 62 61 62 69 6c 69 74  ith a probabilit
1b5a0 79 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65  y of approximate
1b5b0 6c 79 20 59 2e 0a 20 20 5e 28 54 68 65 20 5b 75  ly Y..  ^(The [u
1b5c0 6e 6c 69 6b 65 6c 79 28 58 29 5d 20 66 75 6e 63  nlikely(X)] func
1b5d0 74 69 6f 6e 20 69 73 20 73 68 6f 72 74 2d 68 61  tion is short-ha
1b5e0 6e 64 20 66 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f  nd for likelihoo
1b5f0 64 28 58 2c 30 2e 30 36 32 35 29 2e 29 5e 0a 20  d(X,0.0625).)^. 
1b600 20 5e 28 54 68 65 20 5b 6c 69 6b 65 6c 79 28 58   ^(The [likely(X
1b610 29 5d 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73  )] function is s
1b620 68 6f 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69  hort-hand for li
1b630 6b 65 6c 69 68 6f 6f 64 28 58 2c 30 2e 39 33 37  kelihood(X,0.937
1b640 35 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66  5).)^.}..funcdef
1b650 20 7b 6c 69 6b 65 6c 79 28 58 29 7d 20 7b 7d 20   {likely(X)} {} 
1b660 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 79 28  {.  ^The likely(
1b670 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1b680 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74  rns the argument
1b690 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20   X unchanged..  
1b6a0 5e 54 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66  ^The likely(X) f
1b6b0 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d  unction is a no-
1b6c0 6f 70 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  op that the code
1b6d0 20 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74   generator.  opt
1b6e0 69 6d 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74  imizes away so t
1b6f0 68 61 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20  hat it consumes 
1b700 6e 6f 20 43 50 55 20 63 79 63 6c 65 73 20 61 74  no CPU cycles at
1b710 0a 20 20 72 75 6e 2d 74 69 6d 65 20 28 74 68 61  .  run-time (tha
1b720 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c  t is, during cal
1b730 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73  ls to [sqlite3_s
1b740 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20  tep()])..  ^The 
1b750 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20 6c  purpose of the l
1b760 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f  ikely(X) functio
1b770 6e 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20  n is to provide 
1b780 61 20 68 69 6e 74 0a 20 20 74 6f 20 74 68 65 20  a hint.  to the 
1b790 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 68  query planner th
1b7a0 61 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  at the argument 
1b7b0 58 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76  X is a boolean v
1b7c0 61 6c 75 65 0a 20 20 74 68 61 74 20 69 73 20 75  alue.  that is u
1b7d0 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 5e 28 54  sually true. ^(T
1b7e0 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e  he likely(X) fun
1b7f0 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c  ction is equival
1b800 65 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69  ent.  to [likeli
1b810 68 6f 6f 64 5d 28 58 2c 30 2e 39 33 37 35 29 2e  hood](X,0.9375).
1b820 29 5e 20 53 65 65 20 61 6c 73 6f 3a 20 5b 75 6e  )^ See also: [un
1b830 6c 69 6b 65 6c 79 28 58 29 5d 2e 0a 7d 0a 0a 66  likely(X)]..}..f
1b840 75 6e 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74  uncdef {load_ext
1b850 65 6e 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65  ension(X) load_e
1b860 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b  xtension(X,Y)} {
1b870 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f  } {.  ^The load_
1b880 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66  extension(X,Y) f
1b890 75 6e 63 74 69 6f 6e 20 6c 6f 61 64 73 20 5b 53  unction loads [S
1b8a0 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 73  QLite extensions
1b8b0 5d 20 6f 75 74 20 6f 66 20 74 68 65 20 73 68 61  ] out of the sha
1b8c0 72 65 64 0a 20 20 6c 69 62 72 61 72 79 20 66 69  red.  library fi
1b8d0 6c 65 20 6e 61 6d 65 64 20 58 20 75 73 69 6e 67  le named X using
1b8e0 20 74 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74   the entry point
1b8f0 20 59 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74   Y.  ^The result
1b900 20 6f 66 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69   of load_extensi
1b910 6f 6e 28 29 0a 20 20 69 73 20 61 6c 77 61 79 73  on().  is always
1b920 20 61 20 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20   a NULL.  ^If Y 
1b930 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20  is omitted then 
1b940 74 68 65 20 64 65 66 61 75 6c 74 20 65 6e 74 72  the default entr
1b950 79 20 70 6f 69 6e 74 20 6e 61 6d 65 20 69 73 20  y point name is 
1b960 75 73 65 64 2e 0a 20 20 5e 54 68 65 20 6c 6f 61  used..  ^The loa
1b970 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75  d_extension() fu
1b980 6e 63 74 69 6f 6e 20 72 61 69 73 65 73 20 61 6e  nction raises an
1b990 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68   exception if th
1b9a0 65 20 65 78 74 65 6e 73 69 6f 6e 20 66 61 69 6c  e extension fail
1b9b0 73 20 74 6f 0a 20 20 6c 6f 61 64 20 6f 72 20 69  s to.  load or i
1b9c0 6e 69 74 69 61 6c 69 7a 65 20 63 6f 72 72 65 63  nitialize correc
1b9d0 74 6c 79 2e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20  tly...  <p>^The 
1b9e0 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
1b9f0 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 66   function will f
1ba00 61 69 6c 20 69 66 20 74 68 65 20 65 78 74 65 6e  ail if the exten
1ba10 73 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f  sion attempts to
1ba20 20 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65   .  modify or de
1ba30 6c 65 74 65 20 61 6e 20 53 51 4c 20 66 75 6e 63  lete an SQL func
1ba40 74 69 6f 6e 20 6f 72 20 63 6f 6c 6c 61 74 69 6e  tion or collatin
1ba50 67 20 73 65 71 75 65 6e 63 65 2e 20 20 5e 54 68  g sequence.  ^Th
1ba60 65 0a 20 20 65 78 74 65 6e 73 69 6f 6e 20 63 61  e.  extension ca
1ba70 6e 20 61 64 64 20 6e 65 77 20 66 75 6e 63 74 69  n add new functi
1ba80 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67  ons or collating
1ba90 20 73 65 71 75 65 6e 63 65 73 2c 20 62 75 74 20   sequences, but 
1baa0 63 61 6e 6e 6f 74 0a 20 20 6d 6f 64 69 66 79 20  cannot.  modify 
1bab0 6f 72 20 64 65 6c 65 74 65 20 65 78 69 73 74 69  or delete existi
1bac0 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  ng functions or 
1bad0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
1bae0 63 65 73 20 62 65 63 61 75 73 65 0a 20 20 74 68  ces because.  th
1baf0 6f 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e  ose functions an
1bb00 64 2f 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  d/or collating s
1bb10 65 71 75 65 6e 63 65 73 20 6d 69 67 68 74 20 62  equences might b
1bb20 65 20 75 73 65 64 20 65 6c 73 65 77 68 65 72 65  e used elsewhere
1bb30 0a 20 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  .  in the curren
1bb40 74 6c 79 20 72 75 6e 6e 69 6e 67 20 53 51 4c 20  tly running SQL 
1bb50 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 6f 20 6c  statement.  To l
1bb60 6f 61 64 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e  oad an extension
1bb70 20 74 68 61 74 0a 20 20 63 68 61 6e 67 65 73 20   that.  changes 
1bb80 6f 72 20 64 65 6c 65 74 65 73 20 66 75 6e 63 74  or deletes funct
1bb90 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e  ions or collatin
1bba0 67 20 73 65 71 75 65 6e 63 65 73 2c 20 75 73 65  g sequences, use
1bbb0 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f   the.  [sqlite3_
1bbc0 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
1bbd0 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20 41 50 49  ] C-language API
1bbe0 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 46 6f 72 20  .</p>..  <p>For 
1bbf0 73 65 63 75 72 69 74 79 20 72 65 61 73 6f 6e 73  security reasons
1bc00 2c 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64  , extension load
1bc10 65 64 20 69 73 20 74 75 72 6e 65 64 20 6f 66 66  ed is turned off
1bc20 20 62 79 20 64 65 66 61 75 6c 74 20 61 6e 64 20   by default and 
1bc30 6d 75 73 74 0a 20 20 62 65 20 65 6e 61 62 6c 65  must.  be enable
1bc40 64 20 62 79 20 61 20 70 72 69 6f 72 20 63 61 6c  d by a prior cal
1bc50 6c 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 65 6e  l to [sqlite3_en
1bc60 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  able_load_extens
1bc70 69 6f 6e 28 29 5d 2e 3c 2f 70 3e 0a 7d 0a 0a 66  ion()].</p>.}..f
1bc80 75 6e 63 64 65 66 20 7b 6c 6f 77 65 72 28 58 29  uncdef {lower(X)
1bc90 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f  } {} {.  ^The lo
1bca0 77 65 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  wer(X) function 
1bcb0 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f  returns a copy o
1bcc0 66 20 73 74 72 69 6e 67 20 58 20 77 69 74 68 20  f string X with 
1bcd0 61 6c 6c 20 41 53 43 49 49 20 63 68 61 72 61 63  all ASCII charac
1bce0 74 65 72 73 0a 20 20 63 6f 6e 76 65 72 74 65 64  ters.  converted
1bcf0 20 74 6f 20 6c 6f 77 65 72 20 63 61 73 65 2e 20   to lower case. 
1bd00 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 62 75   ^The default bu
1bd10 69 6c 74 2d 69 6e 20 6c 6f 77 65 72 28 29 20 66  ilt-in lower() f
1bd20 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 0a 20 20  unction works.  
1bd30 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
1bd40 74 65 72 73 20 6f 6e 6c 79 2e 20 20 54 6f 20 64  ters only.  To d
1bd50 6f 20 63 61 73 65 20 63 6f 6e 76 65 72 73 69 6f  o case conversio
1bd60 6e 73 20 6f 6e 20 6e 6f 6e 2d 41 53 43 49 49 0a  ns on non-ASCII.
1bd70 20 20 63 68 61 72 61 63 74 65 72 73 2c 20 6c 6f    characters, lo
1bd80 61 64 20 74 68 65 20 49 43 55 20 65 78 74 65 6e  ad the ICU exten
1bd90 73 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  sion..}..funcdef
1bda0 20 7b 6c 74 72 69 6d 28 58 29 20 6c 74 72 69 6d   {ltrim(X) ltrim
1bdb0 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
1bdc0 68 65 20 6c 74 72 69 6d 28 58 2c 59 29 20 66 75  he ltrim(X,Y) fu
1bdd0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1bde0 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62   string formed b
1bdf0 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61  y removing any a
1be00 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74  nd all.  charact
1be10 65 72 73 20 74 68 61 74 20 61 70 70 65 61 72 20  ers that appear 
1be20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65 20 6c 65  in Y from the le
1be30 66 74 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20  ft side of X..  
1be40 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65  ^If the Y argume
1be50 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 6c  nt is omitted, l
1be60 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20  trim(X) removes 
1be70 73 70 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20  spaces from the 
1be80 6c 65 66 74 20 73 69 64 65 0a 20 20 6f 66 20 58  left side.  of X
1be90 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61  ..}..funcdef {ma
1bea0 78 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 61  x(X,Y,...)} {*ma
1beb0 78 43 6f 72 65 46 75 6e 63 20 2a 6d 61 78 20 7b  xCoreFunc *max {
1bec0 6d 61 78 28 29 20 53 51 4c 20 66 75 6e 63 74 69  max() SQL functi
1bed0 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75  on}} {.  ^The mu
1bee0 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78  lti-argument max
1bef0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1bf00 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74  rns the argument
1bf10 20 77 69 74 68 20 74 68 65 20 0a 20 20 6d 61 78   with the .  max
1bf20 69 6d 75 6d 20 76 61 6c 75 65 2c 20 6f 72 20 72  imum value, or r
1bf30 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 61 6e  eturn NULL if an
1bf40 79 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55  y argument is NU
1bf50 4c 4c 2e 20 0a 20 20 5e 54 68 65 20 6d 75 6c 74  LL. .  ^The mult
1bf60 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29  i-argument max()
1bf70 20 66 75 6e 63 74 69 6f 6e 20 73 65 61 72 63 68   function search
1bf80 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73  es its arguments
1bf90 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
1bfa0 67 68 74 0a 20 20 66 6f 72 20 61 6e 20 61 72 67  ght.  for an arg
1bfb0 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e  ument that defin
1bfc0 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  es a collating f
1bfd0 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73  unction and uses
1bfe0 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a   that collating.
1bff0 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61    function for a
1c000 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72  ll string compar
1c010 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65  isons.  ^If none
1c020 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
1c030 73 20 74 6f 20 6d 61 78 28 29 0a 20 20 64 65 66  s to max().  def
1c040 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ine a collating 
1c050 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  function, then t
1c060 68 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74  he BINARY collat
1c070 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ing function is 
1c080 75 73 65 64 2e 0a 20 20 5e 28 4e 6f 74 65 20 74  used..  ^(Note t
1c090 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e  hat <b>max()</b>
1c0a0 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e   is a simple fun
1c0b0 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20  ction when.  it 
1c0c0 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 72  has 2 or more ar
1c0d0 67 75 6d 65 6e 74 73 20 62 75 74 20 6f 70 65 72  guments but oper
1c0e0 61 74 65 73 20 61 73 20 61 6e 0a 20 20 5b 6d 61  ates as an.  [ma
1c0f0 78 41 67 67 46 75 6e 63 20 7c 20 61 67 67 72 65  xAggFunc | aggre
1c100 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69  gate function] i
1c110 66 20 67 69 76 65 6e 20 6f 6e 6c 79 20 61 20 73  f given only a s
1c120 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 29  ingle argument.)
1c130 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69  ^.}..funcdef {mi
1c140 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69  n(X,Y,...)} {*mi
1c150 6e 43 6f 72 65 46 75 6e 63 20 2a 6d 69 6e 20 7b  nCoreFunc *min {
1c160 6d 69 6e 28 29 20 53 51 4c 20 66 75 6e 63 74 69  min() SQL functi
1c170 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75  on}} {.  ^The mu
1c180 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e  lti-argument min
1c190 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1c1a0 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74  rns the argument
1c1b0 20 77 69 74 68 20 74 68 65 0a 20 20 6d 69 6e 69   with the.  mini
1c1c0 6d 75 6d 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68  mum value..  ^Th
1c1d0 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74  e multi-argument
1c1e0 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20   min() function 
1c1f0 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67  searches its arg
1c200 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74  uments from left
1c210 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20   to right.  for 
1c220 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74  an argument that
1c230 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61   defines a colla
1c240 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e  ting function an
1c250 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c  d uses that coll
1c260 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e  ating.  function
1c270 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20   for all string 
1c280 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49  comparisons.  ^I
1c290 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72  f none of the ar
1c2a0 67 75 6d 65 6e 74 73 20 74 6f 20 6d 69 6e 28 29  guments to min()
1c2b0 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c  .  define a coll
1c2c0 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20  ating function, 
1c2d0 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20  then the BINARY 
1c2e0 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
1c2f0 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 28  on is used..  ^(
1c300 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e  Note that <b>min
1c310 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70  ()</b> is a simp
1c320 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e  le function when
1c330 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d  .  it has 2 or m
1c340 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75  ore arguments bu
1c350 74 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e  t operates as an
1c360 20 0a 20 20 5b 6d 69 6e 41 67 67 46 75 6e 63 20   .  [minAggFunc 
1c370 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  | aggregate func
1c380 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20  tion] if given. 
1c390 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61   only a single a
1c3a0 72 67 75 6d 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75  rgument.)^.}..fu
1c3b0 6e 63 64 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c  ncdef {nullif(X,
1c3c0 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1c3d0 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63  nullif(X,Y) func
1c3e0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 69 74 73  tion returns its
1c3f0 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
1c400 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  if the arguments
1c410 20 61 72 65 0a 20 20 64 69 66 66 65 72 65 6e 74   are.  different
1c420 20 61 6e 64 20 4e 55 4c 4c 20 69 66 20 74 68 65   and NULL if the
1c430 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
1c440 68 65 20 73 61 6d 65 2e 20 20 5e 54 68 65 20 6e  he same.  ^The n
1c450 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74  ullif(X,Y) funct
1c460 69 6f 6e 0a 20 20 73 65 61 72 63 68 65 73 20 69  ion.  searches i
1c470 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f  ts arguments fro
1c480 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20  m left to right 
1c490 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20  for an argument 
1c4a0 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 0a 20  that defines a. 
1c4b0 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
1c4c0 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61  ion and uses tha
1c4d0 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  t collating func
1c4e0 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
1c4f0 69 6e 67 0a 20 20 63 6f 6d 70 61 72 69 73 6f 6e  ing.  comparison
1c500 73 2e 20 20 5e 49 66 20 6e 65 69 74 68 65 72 20  s.  ^If neither 
1c510 61 72 67 75 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c  argument to null
1c520 69 66 28 29 20 64 65 66 69 6e 65 73 20 61 20 63  if() defines a c
1c530 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1c540 6e 0a 20 20 74 68 65 6e 20 74 68 65 20 42 49 4e  n.  then the BIN
1c550 41 52 59 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a  ARY is used..}..
1c560 66 75 6e 63 64 65 66 20 7b 70 72 69 6e 74 66 28  funcdef {printf(
1c570 46 4f 52 4d 41 54 2c 2e 2e 2e 29 7d 20 7b 7d 20  FORMAT,...)} {} 
1c580 7b 0a 20 20 5e 28 54 68 65 20 70 72 69 6e 74 66  {.  ^(The printf
1c590 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 20 53 51 4c  (FORMAT,...) SQL
1c5a0 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 20   function works 
1c5b0 6c 69 6b 65 20 74 68 65 20 5b 73 71 6c 69 74 65  like the [sqlite
1c5c0 33 5f 6d 70 72 69 6e 74 66 28 29 5d 20 43 2d 6c  3_mprintf()] C-l
1c5d0 61 6e 67 75 61 67 65 0a 20 20 66 75 6e 63 74 69  anguage.  functi
1c5e0 6f 6e 20 61 6e 64 20 74 68 65 20 70 72 69 6e 74  on and the print
1c5f0 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 66 72 6f  f() function fro
1c600 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43  m the standard C
1c610 20 6c 69 62 72 61 72 79 2e 29 5e 0a 20 20 54 68   library.)^.  Th
1c620 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
1c630 20 69 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72   is a format str
1c640 69 6e 67 20 74 68 61 74 20 73 70 65 63 69 66 69  ing that specifi
1c650 65 73 20 68 6f 77 20 74 6f 20 63 6f 6e 73 74 72  es how to constr
1c660 75 63 74 20 74 68 65 20 6f 75 74 70 75 74 0a 20  uct the output. 
1c670 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 76 61   string using va
1c680 6c 75 65 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  lues taken from 
1c690 73 75 62 73 65 71 75 65 6e 74 20 61 72 67 75 6d  subsequent argum
1c6a0 65 6e 74 73 2e 20 20 5e 49 66 20 74 68 65 20 46  ents.  ^If the F
1c6b0 4f 52 4d 41 54 20 61 72 67 75 6d 65 6e 74 20 69  ORMAT argument i
1c6c0 73 0a 20 20 6d 69 73 73 69 6e 67 20 6f 72 20 4e  s.  missing or N
1c6d0 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
1c6e0 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 20 5e 54  ult is NULL.  ^T
1c6f0 68 65 20 25 6e 20 66 6f 72 6d 61 74 20 69 73 20  he %n format is 
1c700 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64  silently ignored
1c710 20 61 6e 64 0a 20 20 64 6f 65 73 20 6e 6f 74 20   and.  does not 
1c720 63 6f 6e 73 75 6d 65 20 61 6e 20 61 72 67 75 6d  consume an argum
1c730 65 6e 74 2e 20 20 5e 54 68 65 20 25 70 20 66 6f  ent.  ^The %p fo
1c740 72 6d 61 74 20 69 73 20 61 6e 20 61 6c 69 61 73  rmat is an alias
1c750 20 66 6f 72 20 25 58 2e 20 20 5e 54 68 65 20 25   for %X.  ^The %
1c760 7a 20 66 6f 72 6d 61 74 0a 20 20 69 73 20 69 6e  z format.  is in
1c770 74 65 72 63 68 61 6e 67 65 61 62 6c 65 20 77 69  terchangeable wi
1c780 74 68 20 25 73 2e 20 20 5e 28 49 66 20 74 68 65  th %s.  ^(If the
1c790 72 65 20 61 72 65 20 74 6f 6f 20 66 65 77 20 61  re are too few a
1c7a0 72 67 75 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  rguments in the 
1c7b0 61 72 67 75 6d 65 6e 74 20 6c 69 73 74 2c 0a 20  argument list,. 
1c7c0 20 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e   missing argumen
1c7d0 74 73 20 61 72 65 20 61 73 73 75 6d 65 64 20 74  ts are assumed t
1c7e0 6f 20 68 61 76 65 20 61 20 4e 55 4c 4c 20 76 61  o have a NULL va
1c7f0 6c 75 65 2c 20 77 68 69 63 68 20 69 73 20 74 72  lue, which is tr
1c800 61 6e 73 6c 61 74 65 64 20 69 6e 74 6f 0a 20 20  anslated into.  
1c810 30 20 6f 72 20 30 2e 30 20 66 6f 72 20 6e 75 6d  0 or 0.0 for num
1c820 65 72 69 63 20 66 6f 72 6d 61 74 73 20 6f 72 20  eric formats or 
1c830 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20  an empty string 
1c840 66 6f 72 20 25 73 2e 29 5e 20 20 53 65 65 20 74  for %s.)^  See t
1c850 68 65 0a 20 20 5b 62 75 69 6c 74 2d 69 6e 20 70  he.  [built-in p
1c860 72 69 6e 74 66 28 29 5d 20 64 6f 63 75 6d 65 6e  rintf()] documen
1c870 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74  tation for addit
1c880 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
1c890 6e 2e 0a 7d 0a 20 20 0a 0a 66 75 6e 63 64 65 66  n..}.  ..funcdef
1c8a0 20 7b 71 75 6f 74 65 28 58 29 7d 20 7b 7d 20 7b   {quote(X)} {} {
1c8b0 0a 20 20 5e 54 68 65 20 71 75 6f 74 65 28 58 29  .  ^The quote(X)
1c8c0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1c8d0 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e  s the text of an
1c8e0 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 77 68 69   SQL literal whi
1c8f0 63 68 0a 20 20 69 73 20 74 68 65 20 76 61 6c 75  ch.  is the valu
1c900 65 20 6f 66 20 69 74 73 20 61 72 67 75 6d 65 6e  e of its argumen
1c910 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 69  t suitable for i
1c920 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e  nclusion into an
1c930 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a   SQL statement..
1c940 20 20 5e 53 74 72 69 6e 67 73 20 61 72 65 20 73    ^Strings are s
1c950 75 72 72 6f 75 6e 64 65 64 20 62 79 20 73 69 6e  urrounded by sin
1c960 67 6c 65 2d 71 75 6f 74 65 73 20 77 69 74 68 20  gle-quotes with 
1c970 65 73 63 61 70 65 73 20 6f 6e 20 69 6e 74 65 72  escapes on inter
1c980 69 6f 72 20 71 75 6f 74 65 73 0a 20 20 61 73 20  ior quotes.  as 
1c990 6e 65 65 64 65 64 2e 20 20 5e 42 4c 4f 42 73 20  needed.  ^BLOBs 
1c9a0 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 68  are encoded as h
1c9b0 65 78 61 64 65 63 69 6d 61 6c 20 6c 69 74 65 72  exadecimal liter
1c9c0 61 6c 73 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20  als..  ^Strings 
1c9d0 77 69 74 68 20 65 6d 62 65 64 64 65 64 20 4e 55  with embedded NU
1c9e0 4c 20 63 68 61 72 61 63 74 65 72 73 20 63 61 6e  L characters can
1c9f0 6e 6f 74 20 62 65 20 72 65 70 72 65 73 65 6e 74  not be represent
1ca00 65 64 20 61 73 20 73 74 72 69 6e 67 0a 20 20 6c  ed as string.  l
1ca10 69 74 65 72 61 6c 73 20 69 6e 20 53 51 4c 20 61  iterals in SQL a
1ca20 6e 64 20 68 65 6e 63 65 20 74 68 65 20 72 65 74  nd hence the ret
1ca30 75 72 6e 65 64 20 73 74 72 69 6e 67 20 6c 69 74  urned string lit
1ca40 65 72 61 6c 20 69 73 20 74 72 75 6e 63 61 74 65  eral is truncate
1ca50 64 20 70 72 69 6f 72 0a 20 20 74 6f 20 74 68 65  d prior.  to the
1ca60 20 66 69 72 73 74 20 4e 55 4c 2e 0a 7d 0a 0a 66   first NUL..}..f
1ca70 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 28 29  uncdef {random()
1ca80 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61  } {} {.  ^The ra
1ca90 6e 64 6f 6d 28 29 20 66 75 6e 63 74 69 6f 6e 20  ndom() function 
1caa0 72 65 74 75 72 6e 73 20 61 20 70 73 65 75 64 6f  returns a pseudo
1cab0 2d 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 0a  -random integer.
1cac0 20 20 62 65 74 77 65 65 6e 20 2d 39 32 32 33 33    between -92233
1cad0 37 32 30 33 36 38 35 34 37 37 35 38 30 38 20 61  72036854775808 a
1cae0 6e 64 20 2b 39 32 32 33 33 37 32 30 33 36 38 35  nd +922337203685
1caf0 34 37 37 35 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63  4775807..}..func
1cb00 64 65 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28  def {randomblob(
1cb10 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  N)} {} {.  ^The 
1cb20 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 20 66 75  randomblob(N) fu
1cb30 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 20 61 6e  nction return an
1cb40 20 4e 2d 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e   N-byte blob con
1cb50 74 61 69 6e 69 6e 67 20 70 73 65 75 64 6f 2d 72  taining pseudo-r
1cb60 61 6e 64 6f 6d 0a 20 20 62 79 74 65 73 2e 20 5e  andom.  bytes. ^
1cb70 49 66 20 4e 20 69 73 20 6c 65 73 73 20 74 68 61  If N is less tha
1cb80 6e 20 31 20 74 68 65 6e 20 61 20 31 2d 62 79 74  n 1 then a 1-byt
1cb90 65 20 72 61 6e 64 6f 6d 20 62 6c 6f 62 20 69 73  e random blob is
1cba0 20 72 65 74 75 72 6e 65 64 2e 0a 0a 20 20 3c 70   returned...  <p
1cbb0 3e 48 69 6e 74 3a 20 20 61 70 70 6c 69 63 61 74  >Hint:  applicat
1cbc0 69 6f 6e 73 20 63 61 6e 20 67 65 6e 65 72 61 74  ions can generat
1cbd0 65 20 67 6c 6f 62 61 6c 6c 79 20 75 6e 69 71 75  e globally uniqu
1cbe0 65 20 69 64 65 6e 74 69 66 69 65 72 73 0a 20 20  e identifiers.  
1cbf0 75 73 69 6e 67 20 74 68 69 73 20 66 75 6e 63 74  using this funct
1cc00 69 6f 6e 20 74 6f 67 65 74 68 65 72 20 77 69 74  ion together wit
1cc10 68 20 5b 68 65 78 28 29 5d 20 61 6e 64 2f 6f 72  h [hex()] and/or
1cc20 0a 20 20 5b 6c 6f 77 65 72 28 29 5d 20 6c 69 6b  .  [lower()] lik
1cc30 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20 3c  e this:</p>..  <
1cc40 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 68 65  blockquote>.  he
1cc50 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29  x(randomblob(16)
1cc60 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f 77  )<br></br>.  low
1cc70 65 72 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f  er(hex(randomblo
1cc80 62 28 31 36 29 29 29 0a 20 20 3c 2f 62 6c 6f 63  b(16))).  </bloc
1cc90 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63 64  kquote>.}..funcd
1cca0 65 66 20 7b 72 65 70 6c 61 63 65 28 58 2c 59 2c  ef {replace(X,Y,
1ccb0 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Z)} {} {.  ^The 
1ccc0 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29 20 66  replace(X,Y,Z) f
1ccd0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1cce0 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20  a string formed 
1ccf0 62 79 20 73 75 62 73 74 69 74 75 74 69 6e 67 0a  by substituting.
1cd00 20 20 73 74 72 69 6e 67 20 5a 20 66 6f 72 20 65    string Z for e
1cd10 76 65 72 79 20 6f 63 63 75 72 72 65 6e 63 65 20  very occurrence 
1cd20 6f 66 20 73 74 72 69 6e 67 20 59 20 69 6e 20 73  of string Y in s
1cd30 74 72 69 6e 67 20 58 2e 20 20 5e 54 68 65 20 5b  tring X.  ^The [
1cd40 42 49 4e 41 52 59 5d 0a 20 20 63 6f 6c 6c 61 74  BINARY].  collat
1cd50 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
1cd60 75 73 65 64 20 66 6f 72 20 63 6f 6d 70 61 72 69  used for compari
1cd70 73 6f 6e 73 2e 20 20 5e 49 66 20 59 20 69 73 20  sons.  ^If Y is 
1cd80 61 6e 20 65 6d 70 74 79 0a 20 20 73 74 72 69 6e  an empty.  strin
1cd90 67 20 74 68 65 6e 20 72 65 74 75 72 6e 20 58 20  g then return X 
1cda0 75 6e 63 68 61 6e 67 65 64 2e 20 20 5e 49 66 20  unchanged.  ^If 
1cdb0 5a 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c  Z is not initial
1cdc0 6c 79 0a 20 20 61 20 73 74 72 69 6e 67 2c 20 69  ly.  a string, i
1cdd0 74 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 55  t is cast to a U
1cde0 54 46 2d 38 20 73 74 72 69 6e 67 20 70 72 69 6f  TF-8 string prio
1cdf0 72 20 74 6f 20 70 72 6f 63 65 73 73 69 6e 67 2e  r to processing.
1ce00 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 6f 75  .}..funcdef {rou
1ce10 6e 64 28 58 29 20 72 6f 75 6e 64 28 58 2c 59 29  nd(X) round(X,Y)
1ce20 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 6f  } {} {.  ^The ro
1ce30 75 6e 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  und(X,Y) functio
1ce40 6e 20 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61  n returns a floa
1ce50 74 69 6e 67 2d 70 6f 69 6e 74 0a 20 20 76 61 6c  ting-point.  val
1ce60 75 65 20 58 20 72 6f 75 6e 64 65 64 20 74 6f 20  ue X rounded to 
1ce70 59 20 64 69 67 69 74 73 20 74 6f 20 74 68 65 20  Y digits to the 
1ce80 72 69 67 68 74 20 6f 66 20 74 68 65 20 64 65 63  right of the dec
1ce90 69 6d 61 6c 20 70 6f 69 6e 74 2e 0a 20 20 5e 49  imal point..  ^I
1cea0 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74  f the Y argument
1ceb0 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 69 74 20   is omitted, it 
1cec0 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65  is assumed to be
1ced0 20 30 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b   0..}..funcdef {
1cee0 72 74 72 69 6d 28 58 29 20 72 74 72 69 6d 28 58  rtrim(X) rtrim(X
1cef0 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
1cf00 20 72 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63   rtrim(X,Y) func
1cf10 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
1cf20 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20  tring formed by 
1cf30 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64  removing any and
1cf40 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72   all.  character
1cf50 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
1cf60 20 59 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68   Y from the righ
1cf70 74 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e  t side of X..  ^
1cf80 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e  If the Y argumen
1cf90 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 72 74  t is omitted, rt
1cfa0 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73  rim(X) removes s
1cfb0 70 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20 72  paces from the r
1cfc0 69 67 68 74 0a 20 20 73 69 64 65 20 6f 66 20 58  ight.  side of X
1cfd0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 6f  ..}..funcdef {so
1cfe0 75 6e 64 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20  undex(X)} {} {. 
1cff0 20 5e 54 68 65 20 73 6f 75 6e 64 65 78 28 58 29   ^The soundex(X)
1d000 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1d010 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
1d020 69 73 20 74 68 65 20 73 6f 75 6e 64 65 78 20 65  is the soundex e
1d030 6e 63 6f 64 69 6e 67 20 0a 20 20 6f 66 20 74 68  ncoding .  of th
1d040 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 54  e string X..  ^T
1d050 68 65 20 73 74 72 69 6e 67 20 22 3f 30 30 30 22  he string "?000"
1d060 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20   is returned if 
1d070 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  the argument is 
1d080 4e 55 4c 4c 20 6f 72 20 63 6f 6e 74 61 69 6e 73  NULL or contains
1d090 0a 20 20 6e 6f 20 41 53 43 49 49 20 61 6c 70 68  .  no ASCII alph
1d0a0 61 62 65 74 69 63 20 63 68 61 72 61 63 74 65 72  abetic character
1d0b0 73 2e 0a 20 20 5e 28 54 68 69 73 20 66 75 6e 63  s..  ^(This func
1d0c0 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74 65 64 20  tion is omitted 
1d0d0 66 72 6f 6d 20 53 51 4c 69 74 65 20 62 79 20 64  from SQLite by d
1d0e0 65 66 61 75 6c 74 2e 0a 20 20 49 74 20 69 73 20  efault..  It is 
1d0f0 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69  only available i
1d100 66 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 53 4f  f the [SQLITE_SO
1d110 55 4e 44 45 58 5d 20 63 6f 6d 70 69 6c 65 2d 74  UNDEX] compile-t
1d120 69 6d 65 20 6f 70 74 69 6f 6e 0a 20 20 69 73 20  ime option.  is 
1d130 75 73 65 64 20 77 68 65 6e 20 53 51 4c 69 74 65  used when SQLite
1d140 20 69 73 20 62 75 69 6c 74 2e 29 5e 0a 7d 0a 0a   is built.)^.}..
1d150 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f  funcdef {sqlite_
1d160 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
1d170 74 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  t(N)} {} {.  ^Th
1d180 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65  e sqlite_compile
1d190 6f 70 74 69 6f 6e 5f 67 65 74 28 29 20 53 51 4c  option_get() SQL
1d1a0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
1d1b0 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
1d1c0 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d  e.  [sqlite3_com
1d1d0 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29  pileoption_get()
1d1e0 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e  ] C/C++ function
1d1f0 2e 0a 20 20 5e 54 68 69 73 20 72 6f 75 74 69 6e  ..  ^This routin
1d200 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 4e 2d  e returns the N-
1d210 74 68 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  th compile-time 
1d220 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 62  option used to b
1d230 75 69 6c 64 20 53 51 4c 69 74 65 0a 20 20 6f 72  uild SQLite.  or
1d240 20 4e 55 4c 4c 20 69 66 20 4e 20 69 73 20 6f 75   NULL if N is ou
1d250 74 20 6f 66 20 72 61 6e 67 65 2e 20 20 53 65 65  t of range.  See
1d260 20 61 6c 73 6f 20 74 68 65 20 5b 63 6f 6d 70 69   also the [compi
1d270 6c 65 5f 6f 70 74 69 6f 6e 73 20 70 72 61 67 6d  le_options pragm
1d280 61 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  a]..}..funcdef {
1d290 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
1d2a0 74 69 6f 6e 5f 75 73 65 64 28 58 29 7d 20 7b 7d  tion_used(X)} {}
1d2b0 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65   {.  ^The sqlite
1d2c0 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75  _compileoption_u
1d2d0 73 65 64 28 29 20 53 51 4c 20 66 75 6e 63 74 69  sed() SQL functi
1d2e0 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20  on is a wrapper 
1d2f0 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71  around the.  [sq
1d300 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74  lite3_compileopt
1d310 69 6f 6e 5f 75 73 65 64 28 29 5d 20 43 2f 43 2b  ion_used()] C/C+
1d320 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 57  + function..  ^W
1d330 68 65 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74  hen the argument
1d340 20 58 20 74 6f 20 73 71 6c 69 74 65 5f 63 6f 6d   X to sqlite_com
1d350 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
1d360 58 29 20 69 73 20 61 20 73 74 72 69 6e 67 20 77  X) is a string w
1d370 68 69 63 68 0a 20 20 69 73 20 74 68 65 20 6e 61  hich.  is the na
1d380 6d 65 20 6f 66 20 61 20 63 6f 6d 70 69 6c 65 2d  me of a compile-
1d390 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 69  time option, thi
1d3a0 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  s routine return
1d3b0 73 20 74 72 75 65 20 28 31 29 20 6f 72 0a 20 20  s true (1) or.  
1d3c0 66 61 6c 73 65 20 28 30 29 20 64 65 70 65 6e 64  false (0) depend
1d3d0 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f  ing on whether o
1d3e0 72 20 6e 6f 74 20 74 68 61 74 20 6f 70 74 69 6f  r not that optio
1d3f0 6e 20 77 61 73 20 75 73 65 64 20 64 75 72 69 6e  n was used durin
1d400 67 20 74 68 65 0a 20 20 62 75 69 6c 64 2e 0a 7d  g the.  build..}
1d410 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74  ..funcdef {sqlit
1d420 65 5f 6f 66 66 73 65 74 28 58 29 7d 20 7b 7d 20  e_offset(X)} {} 
1d430 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  {.  ^The sqlite_
1d440 6f 66 66 73 65 74 28 58 29 20 66 75 6e 63 74 69  offset(X) functi
1d450 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 62  on returns the b
1d460 79 74 65 20 6f 66 66 73 65 74 20 69 6e 20 74 68  yte offset in th
1d470 65 20 64 61 74 61 62 61 73 65 0a 20 20 66 69 6c  e database.  fil
1d480 65 20 66 6f 72 20 74 68 65 20 62 65 67 69 6e 6e  e for the beginn
1d490 69 6e 67 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ing of the recor
1d4a0 64 20 66 72 6f 6d 20 77 68 69 63 68 20 76 61 6c  d from which val
1d4b0 75 65 20 77 6f 75 6c 64 20 62 65 20 72 65 61 64  ue would be read
1d4c0 2e 0a 20 20 49 66 20 58 20 69 73 20 6e 6f 74 20  ..  If X is not 
1d4d0 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 6e 20 6f  a column in an o
1d4e0 72 64 69 6e 61 72 79 20 74 61 62 6c 65 2c 20 74  rdinary table, t
1d4f0 68 65 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65  hen sqlite_offse
1d500 74 28 58 29 20 72 65 74 75 72 6e 73 0a 20 20 4e  t(X) returns.  N
1d510 55 4c 4c 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ULL.  The value 
1d520 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
1d530 74 65 5f 6f 66 66 73 65 74 28 58 29 20 6d 69 67  te_offset(X) mig
1d540 68 74 20 72 65 66 65 72 65 6e 63 65 20 65 69 74  ht reference eit
1d550 68 65 72 20 74 68 65 0a 20 20 6f 72 69 67 69 6e  her the.  origin
1d560 61 6c 20 74 61 62 6c 65 20 6f 72 20 61 6e 20 69  al table or an i
1d570 6e 64 65 78 2c 20 64 65 70 65 6e 64 69 6e 67 20  ndex, depending 
1d580 6f 6e 20 74 68 65 20 71 75 65 72 79 2e 20 20 49  on the query.  I
1d590 66 20 74 68 65 20 76 61 6c 75 65 20 58 20 77 6f  f the value X wo
1d5a0 75 6c 64 0a 20 20 6e 6f 72 6d 61 6c 6c 79 20 62  uld.  normally b
1d5b0 65 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d  e extracted from
1d5c0 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 20 73   an index, the s
1d5d0 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29 20  qlite_offset(X) 
1d5e0 72 65 74 75 72 6e 73 20 74 68 65 0a 20 20 6f 66  returns the.  of
1d5f0 66 73 65 74 20 74 6f 20 74 68 65 20 63 6f 72 72  fset to the corr
1d600 65 73 70 6f 6e 64 69 6e 67 20 69 6e 64 65 78 20  esponding index 
1d610 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 20  record.  If the 
1d620 76 61 6c 75 65 20 58 20 77 6f 75 6c 64 20 62 65  value X would be
1d630 0a 20 20 65 78 74 72 61 63 74 65 64 20 66 72 6f  .  extracted fro
1d640 6d 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 74  m the original t
1d650 61 62 6c 65 2c 20 74 68 65 6e 20 73 71 6c 69 74  able, then sqlit
1d660 65 5f 6f 66 66 73 65 74 28 58 29 20 72 65 74 75  e_offset(X) retu
1d670 72 6e 73 20 74 68 65 20 6f 66 66 73 65 74 0a 20  rns the offset. 
1d680 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 72 65   to the table re
1d690 63 6f 72 64 2e 0a 0a 20 20 3c 70 3e 54 68 65 20  cord...  <p>The 
1d6a0 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29  sqlite_offset(X)
1d6b0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
1d6c0 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20   only available 
1d6d0 69 66 20 53 51 4c 69 74 65 20 69 73 20 62 75 69  if SQLite is bui
1d6e0 6c 74 0a 20 20 75 73 69 6e 67 20 74 68 65 20 5b  lt.  using the [
1d6f0 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
1d700 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43 5d  OFFSET_SQL_FUNC]
1d710 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
1d720 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  tion..}..funcdef
1d730 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f   {sqlite_source_
1d740 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  id()} {} {.  ^Th
1d750 65 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f  e sqlite_source_
1d760 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  id() function re
1d770 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74  turns a string t
1d780 68 61 74 20 69 64 65 6e 74 69 66 69 65 73 20 74  hat identifies t
1d790 68 65 0a 20 20 73 70 65 63 69 66 69 63 20 76 65  he.  specific ve
1d7a0 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75  rsion of the sou
1d7b0 72 63 65 20 63 6f 64 65 20 74 68 61 74 20 77 61  rce code that wa
1d7c0 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20  s used to build 
1d7d0 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62  the SQLite.  lib
1d7e0 72 61 72 79 2e 20 20 5e 54 68 65 20 73 74 72 69  rary.  ^The stri
1d7f0 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ng returned by s
1d800 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28  qlite_source_id(
1d810 29 20 69 73 0a 20 20 74 68 65 20 64 61 74 65 20  ) is.  the date 
1d820 61 6e 64 20 74 69 6d 65 20 74 68 61 74 20 74 68  and time that th
1d830 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 77 61  e source code wa
1d840 73 20 63 68 65 63 6b 65 64 20 69 6e 20 66 6f 6c  s checked in fol
1d850 6c 6f 77 65 64 20 62 79 0a 20 20 74 68 65 20 53  lowed by.  the S
1d860 48 41 31 20 68 61 73 68 20 66 6f 72 20 74 68 61  HA1 hash for tha
1d870 74 20 63 68 65 63 6b 2d 69 6e 2e 20 20 5e 54 68  t check-in.  ^Th
1d880 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 0a 20  is function is. 
1d890 20 61 6e 20 53 51 4c 20 77 72 61 70 70 65 72 20   an SQL wrapper 
1d8a0 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69  around the [sqli
1d8b0 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 5d 20  te3_sourceid()] 
1d8c0 43 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a  C interface..}..
1d8d0 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f  funcdef {sqlite_
1d8e0 76 65 72 73 69 6f 6e 28 29 7d 20 7b 7d 20 7b 0a  version()} {} {.
1d8f0 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 76 65    ^The sqlite_ve
1d900 72 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e  rsion() function
1d910 20 72 65 74 75 72 6e 73 20 74 68 65 20 76 65 72   returns the ver
1d920 73 69 6f 6e 20 73 74 72 69 6e 67 20 66 6f 72 20  sion string for 
1d930 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62  the SQLite.  lib
1d940 72 61 72 79 20 74 68 61 74 20 69 73 20 72 75 6e  rary that is run
1d950 6e 69 6e 67 2e 20 20 5e 54 68 69 73 20 66 75 6e  ning.  ^This fun
1d960 63 74 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 0a  ction is an SQL.
1d970 20 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64    wrapper around
1d980 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69   the [sqlite3_li
1d990 62 76 65 72 73 69 6f 6e 28 29 5d 20 43 2d 69 6e  bversion()] C-in
1d9a0 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63  terface..}..func
1d9b0 64 65 66 20 7b 73 75 62 73 74 72 28 58 2c 59 2c  def {substr(X,Y,
1d9c0 5a 29 20 73 75 62 73 74 72 28 58 2c 59 29 7d 20  Z) substr(X,Y)} 
1d9d0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75 62 73  {} {.  ^The subs
1d9e0 74 72 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69  tr(X,Y,Z) functi
1d9f0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 75 62  on returns a sub
1da00 73 74 72 69 6e 67 20 6f 66 20 69 6e 70 75 74 20  string of input 
1da10 73 74 72 69 6e 67 20 58 20 74 68 61 74 20 62 65  string X that be
1da20 67 69 6e 73 0a 20 20 77 69 74 68 20 74 68 65 20  gins.  with the 
1da30 59 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 61  Y-th character a
1da40 6e 64 20 77 68 69 63 68 20 69 73 20 5a 20 63 68  nd which is Z ch
1da50 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 0a 20  aracters long.. 
1da60 20 5e 49 66 20 5a 20 69 73 20 6f 6d 69 74 74 65   ^If Z is omitte
1da70 64 20 74 68 65 6e 20 73 75 62 73 74 72 28 58 2c  d then substr(X,
1da80 59 29 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 63  Y) returns all c
1da90 68 61 72 61 63 74 65 72 73 20 74 68 72 6f 75 67  haracters throug
1daa0 68 20 74 68 65 20 65 6e 64 0a 20 20 6f 66 20 74  h the end.  of t
1dab0 68 65 20 73 74 72 69 6e 67 20 58 20 62 65 67 69  he string X begi
1dac0 6e 6e 69 6e 67 20 77 69 74 68 20 74 68 65 20 59  nning with the Y
1dad0 2d 74 68 2e 0a 20 20 5e 54 68 65 20 6c 65 66 74  -th..  ^The left
1dae0 2d 6d 6f 73 74 20 63 68 61 72 61 63 74 65 72 20  -most character 
1daf0 6f 66 20 58 20 69 73 20 6e 75 6d 62 65 72 20 31  of X is number 1
1db00 2e 20 20 5e 49 66 20 59 20 69 73 20 6e 65 67 61  .  ^If Y is nega
1db10 74 69 76 65 0a 20 20 74 68 65 6e 20 74 68 65 20  tive.  then the 
1db20 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20  first character 
1db30 6f 66 20 74 68 65 20 73 75 62 73 74 72 69 6e 67  of the substring
1db40 20 69 73 20 66 6f 75 6e 64 20 62 79 20 63 6f 75   is found by cou
1db50 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68 65 0a 20  nting from the. 
1db60 20 72 69 67 68 74 20 72 61 74 68 65 72 20 74 68   right rather th
1db70 61 6e 20 74 68 65 20 6c 65 66 74 2e 20 20 5e 49  an the left.  ^I
1db80 66 20 5a 20 69 73 20 6e 65 67 61 74 69 76 65 20  f Z is negative 
1db90 74 68 65 6e 0a 20 20 74 68 65 20 61 62 73 28 5a  then.  the abs(Z
1dba0 29 20 63 68 61 72 61 63 74 65 72 73 20 70 72 65  ) characters pre
1dbb0 63 65 64 69 6e 67 20 74 68 65 20 59 2d 74 68 20  ceding the Y-th 
1dbc0 63 68 61 72 61 63 74 65 72 20 61 72 65 20 72 65  character are re
1dbd0 74 75 72 6e 65 64 2e 0a 20 20 5e 49 66 20 58 20  turned..  ^If X 
1dbe0 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 65 6e  is a string then
1dbf0 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 64 69   characters indi
1dc00 63 65 73 20 72 65 66 65 72 20 74 6f 20 61 63 74  ces refer to act
1dc10 75 61 6c 20 55 54 46 2d 38 20 0a 20 20 63 68 61  ual UTF-8 .  cha
1dc20 72 61 63 74 65 72 73 2e 20 20 5e 49 66 20 58 20  racters.  ^If X 
1dc30 69 73 20 61 20 42 4c 4f 42 20 74 68 65 6e 20 74  is a BLOB then t
1dc40 68 65 20 69 6e 64 69 63 65 73 20 72 65 66 65 72  he indices refer
1dc50 20 74 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a 66 75   to bytes..}..fu
1dc60 6e 63 64 65 66 20 7b 74 6f 74 61 6c 5f 63 68 61  ncdef {total_cha
1dc70 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e  nges()} {} {.  ^
1dc80 54 68 65 20 74 6f 74 61 6c 5f 63 68 61 6e 67 65  The total_change
1dc90 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  s() function ret
1dca0 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
1dcb0 6f 66 20 72 6f 77 20 63 68 61 6e 67 65 73 0a 20  of row changes. 
1dcc0 20 63 61 75 73 65 64 20 62 79 20 49 4e 53 45 52   caused by INSER
1dcd0 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
1dce0 45 54 45 0a 20 20 73 74 61 74 65 6d 65 6e 74 73  ETE.  statements
1dcf0 20 73 69 6e 63 65 20 74 68 65 20 63 75 72 72 65   since the curre
1dd00 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  nt database conn
1dd10 65 63 74 69 6f 6e 20 77 61 73 20 6f 70 65 6e 65  ection was opene
1dd20 64 2e 0a 20 20 5e 54 68 69 73 20 66 75 6e 63 74  d..  ^This funct
1dd30 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72  ion is a wrapper
1dd40 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c   around the [sql
1dd50 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
1dd60 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 69 6e  es()].  C/C++ in
1dd70 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63  terface..}..func
1dd80 64 65 66 20 7b 74 72 69 6d 28 58 29 20 74 72 69  def {trim(X) tri
1dd90 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  m(X,Y)} {} {.  ^
1dda0 54 68 65 20 74 72 69 6d 28 58 2c 59 29 20 66 75  The trim(X,Y) fu
1ddb0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1ddc0 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62   string formed b
1ddd0 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61  y removing any a
1dde0 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74  nd all.  charact
1ddf0 65 72 73 20 74 68 61 74 20 61 70 70 65 61 72 20  ers that appear 
1de00 69 6e 20 59 20 66 72 6f 6d 20 62 6f 74 68 20 65  in Y from both e
1de10 6e 64 73 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20  nds of X..  ^If 
1de20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69  the Y argument i
1de30 73 20 6f 6d 69 74 74 65 64 2c 20 74 72 69 6d 28  s omitted, trim(
1de40 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65  X) removes space
1de50 73 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73  s from both ends
1de60 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
1de70 66 20 7b 74 79 70 65 6f 66 28 58 29 7d 20 7b 7d  f {typeof(X)} {}
1de80 20 7b 0a 20 20 5e 54 68 65 20 74 79 70 65 6f 66   {.  ^The typeof
1de90 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
1dea0 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68  urns a string th
1deb0 61 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  at indicates the
1dec0 20 5b 64 61 74 61 74 79 70 65 5d 20 6f 66 0a 20   [datatype] of. 
1ded0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
1dee0 58 3a 20 22 6e 75 6c 6c 22 2c 20 22 69 6e 74 65  X: "null", "inte
1def0 67 65 72 22 2c 20 22 72 65 61 6c 22 2c 20 22 74  ger", "real", "t
1df00 65 78 74 22 2c 20 6f 72 20 22 62 6c 6f 62 22 2e  ext", or "blob".
1df10 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e 6c  .}..funcdef {unl
1df20 69 6b 65 6c 79 28 58 29 7d 20 7b 7d 20 7b 0a 20  ikely(X)} {} {. 
1df30 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58   ^The unlikely(X
1df40 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1df50 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  ns the argument 
1df60 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e  X unchanged..  ^
1df70 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20  The unlikely(X) 
1df80 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f  function is a no
1df90 2d 6f 70 20 74 68 61 74 20 74 68 65 20 63 6f 64  -op that the cod
1dfa0 65 20 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70  e generator.  op
1dfb0 74 69 6d 69 7a 65 73 20 61 77 61 79 20 73 6f 20  timizes away so 
1dfc0 74 68 61 74 20 69 74 20 63 6f 6e 73 75 6d 65 73  that it consumes
1dfd0 20 6e 6f 20 43 50 55 20 63 79 63 6c 65 73 20 61   no CPU cycles a
1dfe0 74 0a 20 20 72 75 6e 2d 74 69 6d 65 20 28 74 68  t.  run-time (th
1dff0 61 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61  at is, during ca
1e000 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f  lls to [sqlite3_
1e010 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65  step()])..  ^The
1e020 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20   purpose of the 
1e030 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63  unlikely(X) func
1e040 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76 69  tion is to provi
1e050 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f 20 74  de a hint.  to t
1e060 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
1e070 20 74 68 61 74 20 74 68 65 20 61 72 67 75 6d 65   that the argume
1e080 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c 65 61  nt X is a boolea
1e090 6e 20 76 61 6c 75 65 0a 20 20 74 68 61 74 20 69  n value.  that i
1e0a0 73 20 75 73 75 61 6c 6c 79 20 6e 6f 74 20 74 72  s usually not tr
1e0b0 75 65 2e 20 5e 28 54 68 65 20 75 6e 6c 69 6b 65  ue. ^(The unlike
1e0c0 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69  ly(X) function i
1e0d0 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 74  s equivalent.  t
1e0e0 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f 64 5d 28 58  o [likelihood](X
1e0f0 2c 20 30 2e 30 36 32 35 29 2e 29 5e 0a 7d 0a 0a  , 0.0625).)^.}..
1e100 66 75 6e 63 64 65 66 20 7b 75 6e 69 63 6f 64 65  funcdef {unicode
1e110 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
1e120 20 75 6e 69 63 6f 64 65 28 58 29 20 66 75 6e 63   unicode(X) func
1e130 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1e140 20 6e 75 6d 65 72 69 63 20 75 6e 69 63 6f 64 65   numeric unicode
1e150 20 63 6f 64 65 20 70 6f 69 6e 74 20 63 6f 72 72   code point corr
1e160 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0a 20 20 74  esponding to.  t
1e170 68 65 20 66 69 72 73 74 20 63 68 61 72 61 63 74  he first charact
1e180 65 72 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  er of the string
1e190 20 58 2e 20 20 49 66 20 74 68 65 20 61 72 67 75   X.  If the argu
1e1a0 6d 65 6e 74 20 74 6f 20 75 6e 69 63 6f 64 65 28  ment to unicode(
1e1b0 58 29 20 69 73 20 6e 6f 74 20 61 20 73 74 72 69  X) is not a stri
1e1c0 6e 67 0a 20 20 74 68 65 6e 20 74 68 65 20 72 65  ng.  then the re
1e1d0 73 75 6c 74 20 69 73 20 75 6e 64 65 66 69 6e 65  sult is undefine
1e1e0 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75  d..}..funcdef {u
1e1f0 70 70 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  pper(X)} {} {.  
1e200 5e 54 68 65 20 75 70 70 65 72 28 58 29 20 66 75  ^The upper(X) fu
1e210 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1e220 20 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20 73   copy of input s
1e230 74 72 69 6e 67 20 58 20 69 6e 20 77 68 69 63 68  tring X in which
1e240 20 61 6c 6c 20 0a 20 20 6c 6f 77 65 72 2d 63 61   all .  lower-ca
1e250 73 65 20 41 53 43 49 49 20 63 68 61 72 61 63 74  se ASCII charact
1e260 65 72 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65  ers are converte
1e270 64 20 74 6f 20 74 68 65 69 72 20 75 70 70 65 72  d to their upper
1e280 2d 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74  -case equivalent
1e290 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 7a 65  ..}..funcdef {ze
1e2a0 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a  roblob(N)} {} {.
1e2b0 20 20 5e 54 68 65 20 7a 65 72 6f 62 6c 6f 62 28    ^The zeroblob(
1e2c0 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  N) function retu
1e2d0 72 6e 73 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69  rns a BLOB consi
1e2e0 73 74 69 6e 67 20 6f 66 20 4e 20 62 79 74 65 73  sting of N bytes
1e2f0 20 6f 66 20 30 78 30 30 2e 0a 20 20 53 51 4c 69   of 0x00..  SQLi
1e300 74 65 20 6d 61 6e 61 67 65 73 20 74 68 65 73 65  te manages these
1e310 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65 72 79 20   zeroblobs very 
1e320 65 66 66 69 63 69 65 6e 74 6c 79 2e 20 20 5a 65  efficiently.  Ze
1e330 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62 65 20 75  roblobs can be u
1e340 73 65 64 20 74 6f 0a 20 20 72 65 73 65 72 76 65  sed to.  reserve
1e350 20 73 70 61 63 65 20 66 6f 72 20 61 20 42 4c 4f   space for a BLO
1e360 42 20 74 68 61 74 20 69 73 20 6c 61 74 65 72 20  B that is later 
1e370 77 72 69 74 74 65 6e 20 75 73 69 6e 67 20 0a 20  written using . 
1e380 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 6f   [sqlite3_blob_o
1e390 70 65 6e 28 29 20 7c 20 69 6e 63 72 65 6d 65 6e  pen() | incremen
1e3a0 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e 0a 20  tal BLOB I/O].. 
1e3b0 20 5e 54 68 69 73 20 53 51 4c 20 66 75 6e 63 74   ^This SQL funct
1e3c0 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  ion is implement
1e3d0 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71  ed using the [sq
1e3e0 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72  lite3_result_zer
1e3f0 6f 62 6c 6f 62 28 29 5d 0a 20 20 72 6f 75 74 69  oblob()].  routi
1e400 6e 65 20 66 72 6f 6d 20 74 68 65 20 43 2f 43 2b  ne from the C/C+
1e410 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 3c  + interface..}.<
1e420 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f  /tcl>..<p>The co
1e430 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f  re functions sho
1e440 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61  wn below are ava
1e450 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c  ilable by defaul
1e460 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63 20 7c 20  t. .[datefunc | 
1e470 44 61 74 65 20 26 61 6d 70 3b 20 54 69 6d 65 20  Date &amp; Time 
1e480 66 75 6e 63 74 69 6f 6e 73 5d 2c 0a 5b 61 67 67  functions],.[agg
1e490 66 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65  func | aggregate
1e4a0 20 66 75 6e 63 74 69 6f 6e 73 5d 2c 20 61 6e 64   functions], and
1e4b0 0a 5b 6a 73 6f 6e 31 20 7c 20 4a 53 4f 4e 20 66  .[json1 | JSON f
1e4c0 75 6e 63 74 69 6f 6e 73 5d 20 61 72 65 20 64 6f  unctions] are do
1e4d0 63 75 6d 65 6e 74 65 64 20 73 65 70 61 72 61 74  cumented separat
1e4e0 65 6c 79 2e 20 20 41 6e 0a 61 70 70 6c 69 63 61  ely.  An.applica
1e4f0 74 69 6f 6e 20 6d 61 79 20 64 65 66 69 6e 65 20  tion may define 
1e500 61 64 64 69 74 69 6f 6e 61 6c 0a 66 75 6e 63 74  additional.funct
1e510 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20  ions written in 
1e520 43 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74  C and added to t
1e530 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  he database engi
1e540 6e 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71  ne using.the [sq
1e550 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
1e560 63 74 69 6f 6e 28 29 5d 20 41 50 49 2e 3c 2f 70  ction()] API.</p
1e570 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74 20 6c 78 20  >..<tcl>.set lx 
1e580 7b 7d 0a 66 6f 72 65 61 63 68 20 62 61 73 65 73  {}.foreach bases
1e590 79 6e 74 61 78 20 5b 61 72 72 61 79 20 6e 61 6d  yntax [array nam
1e5a0 65 73 20 63 6f 72 65 66 75 6e 63 73 65 74 5d 20  es corefuncset] 
1e5b0 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 73 79 6e  {.  foreach {syn
1e5c0 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73  tax keywords des
1e5d0 63 7d 20 24 63 6f 72 65 66 75 6e 63 73 65 74 28  c} $corefuncset(
1e5e0 24 62 61 73 65 73 79 6e 74 61 78 29 20 62 72 65  $basesyntax) bre
1e5f0 61 6b 0a 20 20 72 65 67 65 78 70 20 7b 5e 5b 61  ak.  regexp {^[a
1e600 2d 7a 5f 5d 2b 7d 20 24 62 61 73 65 73 79 6e 74  -z_]+} $basesynt
1e610 61 78 20 66 72 61 67 6d 65 6e 74 0a 20 20 66 6f  ax fragment.  fo
1e620 72 65 61 63 68 20 63 6f 72 65 73 79 6e 74 61 78  reach coresyntax
1e630 20 24 73 79 6e 74 61 78 20 7b 0a 20 20 20 20 6c   $syntax {.    l
1e640 61 70 70 65 6e 64 20 6c 78 20 5b 6c 69 73 74 20  append lx [list 
1e650 24 66 72 61 67 6d 65 6e 74 20 24 63 6f 72 65 73  $fragment $cores
1e660 79 6e 74 61 78 20 30 5d 0a 20 20 7d 0a 7d 0a 68  yntax 0].  }.}.h
1e670 64 5f 6c 69 73 74 5f 6f 66 5f 6c 69 6e 6b 73 20  d_list_of_links 
1e680 7b 7d 20 32 32 35 20 5b 6c 73 6f 72 74 20 2d 69  {} 225 [lsort -i
1e690 6e 64 65 78 20 31 20 24 6c 78 5d 0a 0a 68 64 5f  ndex 1 $lx]..hd_
1e6a0 70 75 74 73 6e 6c 20 22 3c 68 72 20 63 6c 61 73  putsnl "<hr clas
1e6b0 73 3d 27 78 68 72 27 3e 22 0a 68 64 5f 70 75 74  s='xhr'>".hd_put
1e6c0 73 6e 6c 20 22 3c 64 6c 3e 22 0a 66 6f 72 65 61  snl "<dl>".forea
1e6d0 63 68 20 62 61 73 65 73 79 6e 74 61 78 20 5b 6c  ch basesyntax [l
1e6e0 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61 6d 65  sort [array name
1e6f0 73 20 63 6f 72 65 66 75 6e 63 73 65 74 5d 5d 20  s corefuncset]] 
1e700 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 73 79 6e  {.  foreach {syn
1e710 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73  tax keywords des
1e720 63 7d 20 24 63 6f 72 65 66 75 6e 63 73 65 74 28  c} $corefuncset(
1e730 24 62 61 73 65 73 79 6e 74 61 78 29 20 62 72 65  $basesyntax) bre
1e740 61 6b 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ak.  regsub -all
1e750 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74   {\s+} [string t
1e760 72 69 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62  rim $syntax] {<b
1e770 72 20 2f 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72  r />} syntax.  r
1e780 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b  egsub -all {\(([
1e790 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61  ^*)]+)\)} $synta
1e7a0 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20  x {(<i>\1</i>)} 
1e7b0 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
1e7c0 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78  -all {,} $syntax
1e7d0 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74   {</i>,<i>} synt
1e7e0 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
1e7f0 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d   {<i>\.\.\.</i>}
1e800 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73   $syntax {...} s
1e810 79 6e 74 61 78 0a 20 20 72 65 67 65 78 70 20 7b  yntax.  regexp {
1e820 5e 5b 61 2d 7a 5d 2b 7d 20 24 62 61 73 65 73 79  ^[a-z]+} $basesy
1e830 6e 74 61 78 20 66 72 61 67 6d 65 6e 74 0a 20 20  ntax fragment.  
1e840 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65  if {[llength $ke
1e850 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20  ywords]==0} {.  
1e860 20 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d    regexp {[a-z_]
1e870 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a  +} $syntax name.
1e880 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20      hd_fragment 
1e890 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22 24 7b  $name *$name "${
1e8a0 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66 75 6e 63  name}() SQL func
1e8b0 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b  tion".  } else {
1e8c0 0a 20 20 20 20 73 65 74 20 66 72 61 67 6e 61 6d  .    set fragnam
1e8d0 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79 77 6f  e [lindex $keywo
1e8e0 72 64 73 20 30 5d 0a 20 20 20 20 72 65 67 73 75  rds 0].    regsu
1e8f0 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20  b -all {[^a-z]} 
1e900 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66 72 61  $fragname {} fra
1e910 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61  gname.    hd_fra
1e920 67 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d 65 0a  gment $fragname.
1e930 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77      eval hd_keyw
1e940 6f 72 64 73 20 5b 73 74 72 69 6e 67 20 6d 61 70  ords [string map
1e950 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79 77 6f   {\n { }} $keywo
1e960 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f 70 75  rds].  }.  hd_pu
1e970 74 73 20 22 3c 64 74 3e 3c 70 3e 3c 62 3e 24 73  ts "<dt><p><b>$s
1e980 79 6e 74 61 78 3c 2f 62 3e 3c 2f 64 74 3e 22 0a  yntax</b></dt>".
1e990 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 22 3c 64    hd_resolve "<d
1e9a0 64 3e 3c 70 3e 24 64 65 73 63 3c 2f 64 64 3e 5c  d><p>$desc</dd>\
1e9b0 6e 22 0a 7d 0a 68 64 5f 70 75 74 73 6e 6c 20 22  n".}.hd_putsnl "
1e9c0 3c 2f 64 6c 3e 22 0a 0a 23 23 23 23 23 23 23 23  </dl>"..########
1e9d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e9e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e9f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ea00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ea10 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
1ea20 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20 46 75  Date And Time Fu
1ea30 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e  nctions} datefun
1ea40 63 20 7b 2a 64 61 74 65 66 75 6e 63 20 7b 64 61  c {*datefunc {da
1ea50 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
1ea60 74 69 6f 6e 73 7d 7d 0a 68 64 5f 6b 65 79 77 6f  tions}}.hd_keywo
1ea70 72 64 73 20 7b 64 61 74 65 28 29 20 53 51 4c 20  rds {date() SQL 
1ea80 66 75 6e 63 74 69 6f 6e 7d 20 7b 74 69 6d 65 28  function} {time(
1ea90 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a  ) SQL function}.
1eaa0 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74  hd_keywords {dat
1eab0 65 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63  etime() SQL func
1eac0 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61 6e 64 61 79  tion} {julianday
1ead0 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
1eae0 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 73 74  .hd_keywords {st
1eaf0 72 66 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e  rftime() SQL fun
1eb00 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  ction}.</tcl>..<
1eb10 70 3e 0a 53 51 4c 69 74 65 20 73 75 70 70 6f 72  p>.SQLite suppor
1eb20 74 73 20 66 69 76 65 20 64 61 74 65 20 61 6e 64  ts five date and
1eb30 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
1eb40 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e  as follows:.</p>
1eb50 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  ..<p>.<ol>.<li> 
1eb60 5e 28 3c 62 3e 64 61 74 65 28 3c 2f 62 3e 3c 69  ^(<b>date(</b><i
1eb70 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64  >timestring, mod
1eb80 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
1eb90 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
1eba0 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28  )^ </li>.<li> ^(
1ebb0 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74  <b>time(</b><i>t
1ebc0 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66  imestring, modif
1ebd0 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e  ier, modifier, .
1ebe0 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e  ..</i><b>)</b>)^
1ebf0 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62   </li>.<li> ^(<b
1ec00 3e 64 61 74 65 74 69 6d 65 28 3c 2f 62 3e 3c 69  >datetime(</b><i
1ec10 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64  >timestring, mod
1ec20 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
1ec30 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
1ec40 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28  )^ </li>.<li> ^(
1ec50 3c 62 3e 6a 75 6c 69 61 6e 64 61 79 28 3c 2f 62  <b>julianday(</b
1ec60 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20  ><i>timestring, 
1ec70 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
1ec80 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
1ec90 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  /b>)^ </li>.<li>
1eca0 20 5e 28 3c 62 3e 73 74 72 66 74 69 6d 65 28 3c   ^(<b>strftime(<
1ecb0 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c 20 74 69  /b><i>format, ti
1ecc0 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69  mestring, modifi
1ecd0 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e  er, modifier, ..
1ece0 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20  .</i><b>)</b>)^ 
1ecf0 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  </li>.</ol>..<p>
1ed00 0a 5e 41 6c 6c 20 66 69 76 65 20 64 61 74 65 20  .^All five date 
1ed10 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1ed20 6e 73 20 74 61 6b 65 20 61 20 74 69 6d 65 20 73  ns take a time s
1ed30 74 72 69 6e 67 20 61 73 20 61 6e 20 61 72 67 75  tring as an argu
1ed40 6d 65 6e 74 2e 20 0a 5e 54 68 65 20 74 69 6d 65  ment. .^The time
1ed50 20 73 74 72 69 6e 67 20 69 73 20 66 6f 6c 6c 6f   string is follo
1ed60 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d  wed by zero or m
1ed70 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 2e 20 0a  ore modifiers. .
1ed80 5e 54 68 65 20 73 74 72 66 74 69 6d 65 28 29 20  ^The strftime() 
1ed90 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20 74 61  function also ta
1eda0 6b 65 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72  kes a format str
1edb0 69 6e 67 20 61 73 20 69 74 73 20 66 69 72 73 74  ing as its first
1edc0 20 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a   argument..</p>.
1edd0 0a 3c 70 3e 0a 54 68 65 20 64 61 74 65 20 61 6e  .<p>.The date an
1ede0 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
1edf0 20 75 73 65 20 61 20 73 75 62 73 65 74 20 6f 66   use a subset of
1ee00 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
1ee10 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 49  pedia.org/wiki/I
1ee20 53 4f 5f 38 36 30 31 20 7c 20 49 53 30 2d 38 36  SO_8601 | IS0-86
1ee30 30 31 5d 20 64 61 74 65 20 61 6e 64 20 74 69 6d  01] date and tim
1ee40 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e 54 68 65 20  e.formats..^The 
1ee50 64 61 74 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  date() function 
1ee60 72 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 65  returns the date
1ee70 20 69 6e 20 74 68 69 73 20 66 6f 72 6d 61 74 3a   in this format:
1ee80 20 59 59 59 59 2d 4d 4d 2d 44 44 2e 20 0a 5e 54   YYYY-MM-DD. .^T
1ee90 68 65 20 74 69 6d 65 28 29 20 66 75 6e 63 74 69  he time() functi
1eea0 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 74  on returns the t
1eeb0 69 6d 65 20 61 73 20 48 48 3a 4d 4d 3a 53 53 2e  ime as HH:MM:SS.
1eec0 20 0a 5e 54 68 65 20 64 61 74 65 74 69 6d 65 28   .^The datetime(
1eed0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1eee0 6e 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48  ns "YYYY-MM-DD H
1eef0 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e 28 54 68 65  H:MM:SS". .^(The
1ef00 20 6a 75 6c 69 61 6e 64 61 79 28 29 20 66 75 6e   julianday() fun
1ef10 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1ef20 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  e .[http://en.wi
1ef30 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
1ef40 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75  /Julian_day | Ju
1ef50 6c 69 61 6e 20 64 61 79 5d 20 2d 20 74 68 65 0a  lian day] - the.
1ef60 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73  number of days s
1ef70 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20 47 72 65  ince noon in Gre
1ef80 65 6e 77 69 63 68 20 6f 6e 20 4e 6f 76 65 6d 62  enwich on Novemb
1ef90 65 72 20 32 34 2c 20 34 37 31 34 20 42 2e 43 2e  er 24, 4714 B.C.
1efa0 20 0a 28 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69   .([http://en.wi
1efb0 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
1efc0 2f 50 72 6f 6c 65 70 74 69 63 5f 47 72 65 67 6f  /Proleptic_Grego
1efd0 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20  rian_calendar | 
1efe0 50 72 6f 6c 65 70 74 69 63 20 47 72 65 67 6f 72  Proleptic Gregor
1eff0 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d 29 2e 29  ian calendar]).)
1f000 5e 0a 5e 54 68 65 20 73 74 72 66 74 69 6d 65 28  ^.^The strftime(
1f010 29 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  ) routine return
1f020 73 20 74 68 65 20 64 61 74 65 20 66 6f 72 6d 61  s the date forma
1f030 74 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  tted according t
1f040 6f 20 0a 74 68 65 20 66 6f 72 6d 61 74 20 73 74  o .the format st
1f050 72 69 6e 67 20 73 70 65 63 69 66 69 65 64 20 61  ring specified a
1f060 73 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  s the first argu
1f070 6d 65 6e 74 2e 0a 5e 54 68 65 20 66 6f 72 6d 61  ment..^The forma
1f080 74 20 73 74 72 69 6e 67 20 73 75 70 70 6f 72 74  t string support
1f090 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d 6d 6f  s the most commo
1f0a0 6e 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 20  n substitutions 
1f0b0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 0a 5b 68  found in the .[h
1f0c0 74 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e  ttp://opengroup.
1f0d0 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75 62 73 2f 30  org/onlinepubs/0
1f0e0 30 37 39 30 38 37 39 39 2f 78 73 68 2f 73 74 72  07908799/xsh/str
1f0f0 66 74 69 6d 65 2e 68 74 6d 6c 20 7c 20 73 74 72  ftime.html | str
1f100 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e  ftime() function
1f110 5d 0a 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64  ].from the stand
1f120 61 72 64 20 43 20 6c 69 62 72 61 72 79 20 70 6c  ard C library pl
1f130 75 73 20 74 77 6f 20 6e 65 77 20 73 75 62 73 74  us two new subst
1f140 69 74 75 74 69 6f 6e 73 2c 20 25 66 20 61 6e 64  itutions, %f and
1f150 20 25 4a 2e 0a 5e 28 54 68 65 20 66 6f 6c 6c 6f   %J..^(The follo
1f160 77 69 6e 67 20 69 73 20 61 20 63 6f 6d 70 6c 65  wing is a comple
1f170 74 65 20 6c 69 73 74 20 6f 66 20 76 61 6c 69 64  te list of valid
1f180 20 73 74 72 66 74 69 6d 65 28 29 20 73 75 62 73   strftime() subs
1f190 74 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a  titutions:.</p>.
1f1a0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
1f1b0 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20  able border="0" 
1f1c0 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20  cellpadding="0" 
1f1d0 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e  cellspacing="0">
1f1e0 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64 20 77 69 64  .<tr><td><td wid
1f1f0 74 68 3d 22 31 30 22 3e 3c 74 64 3e 3c 2f 74 72  th="10"><td></tr
1f200 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25 64 20 3c  >..<tr><td> %d <
1f210 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 6d  td><td> day of m
1f220 6f 6e 74 68 3a 20 30 30 0a 3c 74 72 3e 3c 74 64  onth: 00.<tr><td
1f230 3e 20 25 66 20 3c 74 64 3e 3c 74 64 3e 20 66 72  > %f <td><td> fr
1f240 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73  actional seconds
1f250 3a 20 53 53 2e 53 53 53 0a 3c 74 72 3e 3c 74 64  : SS.SSS.<tr><td
1f260 3e 20 25 48 20 3c 74 64 3e 3c 74 64 3e 20 68 6f  > %H <td><td> ho
1f270 75 72 3a 20 30 30 2d 32 34 20 0a 3c 74 72 3e 3c  ur: 00-24 .<tr><
1f280 74 64 3e 20 25 6a 20 3c 74 64 3e 3c 74 64 3e 20  td> %j <td><td> 
1f290 64 61 79 20 6f 66 20 79 65 61 72 3a 20 30 30 31  day of year: 001
1f2a0 2d 33 36 36 0a 3c 74 72 3e 3c 74 64 3e 20 25 4a  -366.<tr><td> %J
1f2b0 20 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c 69 61 6e   <td><td> Julian
1f2c0 20 64 61 79 20 6e 75 6d 62 65 72 0a 3c 74 72 3e   day number.<tr>
1f2d0 3c 74 64 3e 20 25 6d 20 3c 74 64 3e 3c 74 64 3e  <td> %m <td><td>
1f2e0 20 6d 6f 6e 74 68 3a 20 30 31 2d 31 32 0a 3c 74   month: 01-12.<t
1f2f0 72 3e 3c 74 64 3e 20 25 4d 20 3c 74 64 3e 3c 74  r><td> %M <td><t
1f300 64 3e 20 6d 69 6e 75 74 65 3a 20 30 30 2d 35 39  d> minute: 00-59
1f310 0a 3c 74 72 3e 3c 74 64 3e 20 25 73 20 3c 74 64  .<tr><td> %s <td
1f320 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 20 73 69  ><td> seconds si
1f330 6e 63 65 20 31 39 37 30 2d 30 31 2d 30 31 0a 3c  nce 1970-01-01.<
1f340 74 72 3e 3c 74 64 3e 20 25 53 20 3c 74 64 3e 3c  tr><td> %S <td><
1f350 74 64 3e 20 73 65 63 6f 6e 64 73 3a 20 30 30 2d  td> seconds: 00-
1f360 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 77 20 3c  59.<tr><td> %w <
1f370 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 77  td><td> day of w
1f380 65 65 6b 20 30 2d 36 20 77 69 74 68 20 53 75 6e  eek 0-6 with Sun
1f390 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74 64 3e 20  day==0.<tr><td> 
1f3a0 25 57 20 3c 74 64 3e 3c 74 64 3e 20 77 65 65 6b  %W <td><td> week
1f3b0 20 6f 66 20 79 65 61 72 3a 20 30 30 2d 35 33 0a   of year: 00-53.
1f3c0 3c 74 72 3e 3c 74 64 3e 20 25 59 20 3c 74 64 3e  <tr><td> %Y <td>
1f3d0 3c 74 64 3e 20 79 65 61 72 3a 20 30 30 30 30 2d  <td> year: 0000-
1f3e0 39 39 39 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 25  9999.<tr><td> %%
1f3f0 20 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c 2f 74 61   <td><td> %.</ta
1f400 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  ble>.</blockquot
1f410 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28 4e 6f 74 69  e>)^..<p>.^(Noti
1f420 63 65 20 74 68 61 74 20 61 6c 6c 20 6f 74 68 65  ce that all othe
1f430 72 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  r date and time 
1f440 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20 62 65  functions can be
1f450 20 65 78 70 72 65 73 73 65 64 0a 69 6e 20 74 65   expressed.in te
1f460 72 6d 73 20 6f 66 20 73 74 72 66 74 69 6d 65 28  rms of strftime(
1f470 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ):.</p>..<blockq
1f480 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  uote>.<table bor
1f490 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64  der="0" cellpadd
1f4a0 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63  ing="0" cellspac
1f4b0 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64  ing="0">.<tr><td
1f4c0 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e 3c 2f 62 3e  ><b>Function</b>
1f4d0 3c 74 64 20 77 69 64 74 68 3d 22 33 30 22 3e 3c  <td width="30"><
1f4e0 74 64 3e 3c 62 3e 45 71 75 69 76 61 6c 65 6e 74  td><b>Equivalent
1f4f0 20 73 74 72 66 74 69 6d 65 28 29 3c 2f 62 3e 0a   strftime()</b>.
1f500 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 28  <tr><td>   date(
1f510 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c 74  ...)      <td><t
1f520 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59  d>  strftime('%Y
1f530 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e 29 0a 3c 74  -%m-%d', ...).<t
1f540 72 3e 3c 74 64 3e 20 20 20 74 69 6d 65 28 2e 2e  r><td>   time(..
1f550 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e  .)      <td><td>
1f560 20 20 73 74 72 66 74 69 6d 65 28 27 25 48 3a 25    strftime('%H:%
1f570 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e  M:%S', ...).<tr>
1f580 3c 74 64 3e 20 20 20 64 61 74 65 74 69 6d 65 28  <td>   datetime(
1f590 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74 64 3e 20 20  ...)  <td><td>  
1f5a0 73 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d  strftime('%Y-%m-
1f5b0 25 64 20 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e  %d %H:%M:%S', ..
1f5c0 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 6a 75  .).<tr><td>   ju
1f5d0 6c 69 61 6e 64 61 79 28 2e 2e 2e 29 20 3c 74 64  lianday(...) <td
1f5e0 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
1f5f0 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c 2f 74 61 62  '%J', ...).</tab
1f600 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
1f610 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65 20 6f 6e 6c  >)^..<p>.The onl
1f620 79 20 72 65 61 73 6f 6e 73 20 66 6f 72 20 70 72  y reasons for pr
1f630 6f 76 69 64 69 6e 67 20 66 75 6e 63 74 69 6f 6e  oviding function
1f640 73 20 6f 74 68 65 72 20 74 68 61 6e 20 73 74 72  s other than str
1f650 66 74 69 6d 65 28 29 20 69 73 0a 66 6f 72 20 63  ftime() is.for c
1f660 6f 6e 76 65 6e 69 65 6e 63 65 20 61 6e 64 20 66  onvenience and f
1f670 6f 72 20 65 66 66 69 63 69 65 6e 63 79 2e 0a 3c  or efficiency..<
1f680 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65 20 53 74  /p>..<h3>Time St
1f690 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  rings</h3>..<p>^
1f6a0 28 41 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63  (A time string c
1f6b0 61 6e 20 62 65 20 69 6e 20 61 6e 79 20 6f 66 20  an be in any of 
1f6c0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f  the following fo
1f6d0 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  rmats:</p>..<ol>
1f6e0 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
1f6f0 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  -DD</i>.<li> <i>
1f700 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
1f710 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
1f720 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
1f730 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
1f740 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
1f750 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  .SSS</i>.<li> <i
1f760 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c  >YYYY-MM-DD</i><
1f770 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3c  b>T</b><i>HH:MM<
1f780 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
1f790 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f  -MM-DD</i><b>T</
1f7a0 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69  b><i>HH:MM:SS</i
1f7b0 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d  >.<li> <i>YYYY-M
1f7c0 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e  M-DD</i><b>T</b>
1f7d0 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c  <i>HH:MM:SS.SSS<
1f7e0 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d  /i>.<li> <i>HH:M
1f7f0 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48  M</i>.<li> <i>HH
1f800 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  :MM:SS</i>.<li> 
1f810 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c  <i>HH:MM:SS.SSS<
1f820 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e 6f 77 3c  /i>.<li> <b>now<
1f830 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44 44 44 44  /b>.<li> <i>DDDD
1f840 44 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e  DDDDDD</i>.</ol>
1f850 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20 66 6f 72 6d  )^..<p>.^In form
1f860 61 74 73 20 35 20 74 68 72 6f 75 67 68 20 37 2c  ats 5 through 7,
1f870 20 74 68 65 20 22 54 22 20 69 73 20 61 20 6c 69   the "T" is a li
1f880 74 65 72 61 6c 20 63 68 61 72 61 63 74 65 72 20  teral character 
1f890 73 65 70 61 72 61 74 69 6e 67 20 0a 74 68 65 20  separating .the 
1f8a0 64 61 74 65 20 61 6e 64 20 74 68 65 20 74 69 6d  date and the tim
1f8b0 65 2c 20 61 73 20 72 65 71 75 69 72 65 64 20 62  e, as required b
1f8c0 79 20 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 77  y .[http://www.w
1f8d0 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f 54 45 2d 64  3c.org/TR/NOTE-d
1f8e0 61 74 65 74 69 6d 65 20 7c 20 49 53 4f 2d 38 36  atetime | ISO-86
1f8f0 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61 74 73 20 38  01]. .^Formats 8
1f900 20 74 68 72 6f 75 67 68 20 31 30 20 74 68 61 74   through 10 that
1f910 20 73 70 65 63 69 66 79 20 6f 6e 6c 79 20 61 20   specify only a 
1f920 74 69 6d 65 20 61 73 73 75 6d 65 20 61 20 64 61  time assume a da
1f930 74 65 20 6f 66 20 0a 32 30 30 30 2d 30 31 2d 30  te of .2000-01-0
1f940 31 2e 20 46 6f 72 6d 61 74 20 31 31 2c 20 74 68  1. Format 11, th
1f950 65 20 73 74 72 69 6e 67 20 27 6e 6f 77 27 2c 20  e string 'now', 
1f960 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  is converted int
1f970 6f 20 74 68 65 20 0a 63 75 72 72 65 6e 74 20 64  o the .current d
1f980 61 74 65 20 61 6e 64 20 74 69 6d 65 20 61 73 20  ate and time as 
1f990 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68  obtained from th
1f9a0 65 20 78 43 75 72 72 65 6e 74 54 69 6d 65 20 6d  e xCurrentTime m
1f9b0 65 74 68 6f 64 0a 6f 66 20 74 68 65 20 5b 73 71  ethod.of the [sq
1f9c0 6c 69 74 65 33 5f 76 66 73 5d 20 6f 62 6a 65 63  lite3_vfs] objec
1f9d0 74 20 69 6e 20 75 73 65 2e 0a 5e 54 68 65 20 27  t in use..^The '
1f9e0 6e 6f 77 27 20 61 72 67 75 6d 65 6e 74 20 74 6f  now' argument to
1f9f0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
1fa00 75 6e 63 74 69 6f 6e 73 20 61 6c 77 61 79 73 20  unctions always 
1fa10 72 65 74 75 72 6e 73 20 65 78 61 63 74 6c 79 20  returns exactly 
1fa20 74 68 65 0a 73 61 6d 65 20 76 61 6c 75 65 20 66  the.same value f
1fa30 6f 72 20 6d 75 6c 74 69 70 6c 65 20 69 6e 76 6f  or multiple invo
1fa40 63 61 74 69 6f 6e 73 20 77 69 74 68 69 6e 20 74  cations within t
1fa50 68 65 20 73 61 6d 65 20 5b 73 71 6c 69 74 65 33  he same [sqlite3
1fa60 5f 73 74 65 70 28 29 5d 20 63 61 6c 6c 2e 0a 5e  _step()] call..^
1fa70 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
1fa80 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f  edia.org/wiki/Co
1fa90 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69 76 65 72  ordinated_Univer
1faa0 73 61 6c 5f 54 69 6d 65 20 7c 20 55 6e 69 76 65  sal_Time | Unive
1fab0 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64  rsal Coordinated
1fac0 20 54 69 6d 65 20 28 55 54 43 29 5d 20 69 73 20   Time (UTC)] is 
1fad0 75 73 65 64 2e 20 0a 5e 46 6f 72 6d 61 74 20 31  used. .^Format 1
1fae0 32 20 69 73 20 74 68 65 20 0a 5b 68 74 74 70 3a  2 is the .[http:
1faf0 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1fb00 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64  rg/wiki/Julian_d
1fb10 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 20  ay | Julian day 
1fb20 6e 75 6d 62 65 72 5d 0a 65 78 70 72 65 73 73 65  number].expresse
1fb30 64 20 61 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  d as a floating 
1fb40 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 3c 2f 70  point value..</p
1fb50 3e 0a 0a 3c 70 3e 0a 46 6f 72 6d 61 74 73 20 32  >..<p>.Formats 2
1fb60 20 74 68 72 6f 75 67 68 20 31 30 20 6d 61 79 20   through 10 may 
1fb70 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  be optionally fo
1fb80 6c 6c 6f 77 65 64 20 62 79 20 61 20 74 69 6d 65  llowed by a time
1fb90 7a 6f 6e 65 20 69 6e 64 69 63 61 74 6f 72 20 6f  zone indicator o
1fba0 66 20 74 68 65 20 66 6f 72 6d 0a 22 3c 69 3e 26  f the form."<i>&
1fbb0 23 39 31 3b 2b 2d 26 23 39 33 3b 48 48 3a 4d 4d  #91;+-&#93;HH:MM
1fbc0 3c 2f 69 3e 22 20 6f 72 20 6a 75 73 74 20 22 3c  </i>" or just "<
1fbd0 69 3e 5a 3c 2f 69 3e 22 2e 20 20 54 68 65 20 64  i>Z</i>".  The d
1fbe0 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
1fbf0 63 74 69 6f 6e 73 20 75 73 65 20 55 54 43 20 6f  ctions use UTC o
1fc00 72 20 22 7a 75 6c 75 22 0a 74 69 6d 65 20 69 6e  r "zulu".time in
1fc10 74 65 72 6e 61 6c 6c 79 2c 20 61 6e 64 20 73 6f  ternally, and so
1fc20 20 74 68 65 20 22 5a 22 20 73 75 66 66 69 78 20   the "Z" suffix 
1fc30 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 41 6e 79  is a no-op.  Any
1fc40 20 6e 6f 6e 2d 7a 65 72 6f 20 22 48 48 3a 4d 4d   non-zero "HH:MM
1fc50 22 20 73 75 66 66 69 78 20 69 73 0a 73 75 62 74  " suffix is.subt
1fc60 72 61 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20  racted from the 
1fc70 69 6e 64 69 63 61 74 65 64 20 64 61 74 65 20 61  indicated date a
1fc80 6e 64 20 74 69 6d 65 20 69 6e 20 6f 72 64 65 72  nd time in order
1fc90 20 74 6f 20 63 6f 6d 70 75 74 65 20 7a 75 6c 75   to compute zulu
1fca0 20 74 69 6d 65 2e 0a 46 6f 72 20 65 78 61 6d 70   time..For examp
1fcb0 6c 65 2c 20 61 6c 6c 20 6f 66 20 74 68 65 20 66  le, all of the f
1fcc0 6f 6c 6c 6f 77 69 6e 67 20 74 69 6d 65 20 73 74  ollowing time st
1fcd0 72 69 6e 67 73 20 61 72 65 20 65 71 75 69 76 61  rings are equiva
1fce0 6c 65 6e 74 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  lent:.</p>..<blo
1fcf0 63 6b 71 75 6f 74 65 3e 0a 32 30 31 33 2d 31 30  ckquote>.2013-10
1fd00 2d 30 37 20 30 38 3a 32 33 3a 31 39 2e 31 32 30  -07 08:23:19.120
1fd10 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30 37 54  <br>.2013-10-07T
1fd20 30 38 3a 32 33 3a 31 39 2e 31 32 30 5a 3c 62 72  08:23:19.120Z<br
1fd30 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20 30 34 3a  >.2013-10-07 04:
1fd40 32 33 3a 31 39 2e 31 32 30 2d 30 34 3a 30 30 3c  23:19.120-04:00<
1fd50 62 72 3e 0a 32 34 35 36 35 37 32 2e 38 34 39 35  br>.2456572.8495
1fd60 32 36 38 35 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  2685.</blockquot
1fd70 65 3e 0a 0a 3c 70 3e 0a 5e 28 49 6e 20 66 6f 72  e>..<p>.^(In for
1fd80 6d 61 74 73 20 34 2c 20 37 2c 20 61 6e 64 20 31  mats 4, 7, and 1
1fd90 30 2c 20 74 68 65 20 66 72 61 63 74 69 6f 6e 61  0, the fractiona
1fda0 6c 20 73 65 63 6f 6e 64 73 20 76 61 6c 75 65 20  l seconds value 
1fdb0 53 53 2e 53 53 53 20 63 61 6e 20 68 61 76 65 0a  SS.SSS can have.
1fdc0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 64 69 67 69  one or more digi
1fdd0 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ts following the
1fde0 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 20   decimal point. 
1fdf0 20 45 78 61 63 74 6c 79 20 74 68 72 65 65 20 64   Exactly three d
1fe00 69 67 69 74 73 20 61 72 65 0a 73 68 6f 77 6e 20  igits are.shown 
1fe10 69 6e 20 74 68 65 20 65 78 61 6d 70 6c 65 73 20  in the examples 
1fe20 62 65 63 61 75 73 65 20 6f 6e 6c 79 20 74 68 65  because only the
1fe30 20 66 69 72 73 74 20 74 68 72 65 65 20 64 69 67   first three dig
1fe40 69 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63  its are signific
1fe50 61 6e 74 0a 74 6f 20 74 68 65 20 72 65 73 75 6c  ant.to the resul
1fe60 74 2c 20 62 75 74 20 74 68 65 20 69 6e 70 75 74  t, but the input
1fe70 20 73 74 72 69 6e 67 20 63 61 6e 20 68 61 76 65   string can have
1fe80 20 66 65 77 65 72 20 6f 72 20 6d 6f 72 65 20 74   fewer or more t
1fe90 68 61 6e 20 74 68 72 65 65 20 64 69 67 69 74 73  han three digits
1fea0 0a 61 6e 64 20 74 68 65 20 64 61 74 65 2f 74 69  .and the date/ti
1feb0 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c  me functions wil
1fec0 6c 20 73 74 69 6c 6c 20 6f 70 65 72 61 74 65 20  l still operate 
1fed0 63 6f 72 72 65 63 74 6c 79 2e 29 5e 0a 53 69 6d  correctly.)^.Sim
1fee0 69 6c 61 72 6c 79 2c 20 66 6f 72 6d 61 74 20 31  ilarly, format 1
1fef0 32 20 69 73 20 73 68 6f 77 6e 20 77 69 74 68 20  2 is shown with 
1ff00 31 30 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64  10 significant d
1ff10 69 67 69 74 73 2c 20 62 75 74 20 74 68 65 20 64  igits, but the d
1ff20 61 74 65 2f 74 69 6d 65 0a 66 75 6e 63 74 69 6f  ate/time.functio
1ff30 6e 73 20 77 69 6c 6c 20 72 65 61 6c 6c 79 20 61  ns will really a
1ff40 63 63 65 70 74 20 61 73 20 6d 61 6e 79 20 6f 72  ccept as many or
1ff50 20 61 73 20 66 65 77 20 64 69 67 69 74 73 20 61   as few digits a
1ff60 73 20 61 72 65 20 6e 65 63 65 73 73 61 72 79 20  s are necessary 
1ff70 74 6f 0a 72 65 70 72 65 73 65 6e 74 20 74 68 65  to.represent the
1ff80 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62   Julian day numb
1ff90 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f  er..</p>..<h3>Mo
1ffa0 64 69 66 69 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70  difiers</h3>..<p
1ffb0 3e 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e  >^The time strin
1ffc0 67 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65  g can be followe
1ffd0 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  d by zero or mor
1ffe0 65 20 6d 6f 64 69 66 69 65 72 73 20 74 68 61 74  e modifiers that
1fff0 20 0a 61 6c 74 65 72 20 64 61 74 65 20 61 6e 64   .alter date and
20000 2f 6f 72 20 74 69 6d 65 2e 20 5e 45 61 63 68 20  /or time. ^Each 
20010 6d 6f 64 69 66 69 65 72 0a 69 73 20 61 20 74 72  modifier.is a tr
20020 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61  ansformation tha
20030 74 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20  t is applied to 
20040 74 68 65 20 74 69 6d 65 20 76 61 6c 75 65 20 74  the time value t
20050 6f 20 69 74 73 20 6c 65 66 74 2e 0a 5e 4d 6f 64  o its left..^Mod
20060 69 66 69 65 72 73 20 61 72 65 20 61 70 70 6c 69  ifiers are appli
20070 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ed from left to 
20080 72 69 67 68 74 3b 20 6f 72 64 65 72 20 69 73 20  right; order is 
20090 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e 28 54 68 65  important..^(The
200a0 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f 64 69 66   available modif
200b0 69 65 72 73 20 61 72 65 20 61 73 20 66 6f 6c 6c  iers are as foll
200c0 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  ows.</p>..<ol>.<
200d0 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a 3c 6c 69  li> NNN days.<li
200e0 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c 6c 69 3e  > NNN hours.<li>
200f0 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a 3c 6c 69   NNN minutes.<li
20100 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65 63 6f 6e  > NNN.NNNN secon
20110 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e 74  ds.<li> NNN mont
20120 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79 65 61 72  hs.<li> NNN year
20130 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20  s.<li> start of 
20140 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74 61 72 74  month.<li> start
20150 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e 20 73 74   of year.<li> st
20160 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c 69 3e 20  art of day.<li> 
20170 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69 3e 20 75  weekday N.<li> u
20180 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e 20 6c 6f  nixepoch.<li> lo
20190 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20 75 74 63  caltime.<li> utc
201a0 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54   .</ol>)^..<p>^T
201b0 68 65 20 66 69 72 73 74 20 73 69 78 20 6d 6f 64  he first six mod
201c0 69 66 69 65 72 73 20 28 31 20 74 68 72 6f 75 67  ifiers (1 throug
201d0 68 20 36 29 20 0a 73 69 6d 70 6c 79 20 61 64 64  h 6) .simply add
201e0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 61   the specified a
201f0 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f  mount of time to
20200 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69   the date and ti
20210 6d 65 20 0a 73 70 65 63 69 66 69 65 64 20 62 79  me .specified by
20220 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74   the preceding t
20230 69 6d 65 73 74 72 69 6e 67 20 61 6e 64 20 6d 6f  imestring and mo
20240 64 69 66 69 65 72 73 2e 0a 5e 54 68 65 20 27 73  difiers..^The 's
20250 27 20 63 68 61 72 61 63 74 65 72 20 61 74 20 74  ' character at t
20260 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6d 6f  he end of the mo
20270 64 69 66 69 65 72 20 6e 61 6d 65 73 20 69 73 20  difier names is 
20280 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 4e 6f 74 65 20  optional..^Note 
20290 74 68 61 74 20 22 26 70 6c 75 73 6d 6e 3b 4e 4e  that "&plusmn;NN
202a0 4e 20 6d 6f 6e 74 68 73 22 20 77 6f 72 6b 73 20  N months" works 
202b0 62 79 20 72 65 6e 64 65 72 69 6e 67 20 74 68 65  by rendering the
202c0 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65 20 69   original date i
202d0 6e 74 6f 0a 74 68 65 20 59 59 59 59 2d 4d 4d 2d  nto.the YYYY-MM-
202e0 44 44 20 66 6f 72 6d 61 74 2c 20 61 64 64 69 6e  DD format, addin
202f0 67 20 74 68 65 20 26 70 6c 75 73 6d 6e 3b 4e 4e  g the &plusmn;NN
20300 4e 20 74 6f 20 74 68 65 20 4d 4d 20 6d 6f 6e 74  N to the MM mont
20310 68 20 76 61 6c 75 65 2c 20 74 68 65 6e 0a 6e 6f  h value, then.no
20320 72 6d 61 6c 69 7a 69 6e 67 20 74 68 65 20 72 65  rmalizing the re
20330 73 75 6c 74 2e 20 20 5e 54 68 75 73 2c 20 66 6f  sult.  ^Thus, fo
20340 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 64  r example, the d
20350 61 74 61 20 32 30 30 31 2d 30 33 2d 33 31 20 6d  ata 2001-03-31 m
20360 6f 64 69 66 69 65 64 0a 62 79 20 27 2b 31 20 6d  odified.by '+1 m
20370 6f 6e 74 68 27 20 69 6e 69 74 69 61 6c 6c 79 20  onth' initially 
20380 79 69 65 6c 64 73 20 32 30 30 31 2d 30 34 2d 33  yields 2001-04-3
20390 31 2c 20 62 75 74 20 41 70 72 69 6c 20 6f 6e 6c  1, but April onl
203a0 79 20 68 61 73 20 33 30 20 64 61 79 73 0a 73 6f  y has 30 days.so
203b0 20 74 68 65 20 64 61 74 65 20 69 73 20 6e 6f 72   the date is nor
203c0 6d 61 6c 69 7a 65 64 20 74 6f 20 32 30 30 31 2d  malized to 2001-
203d0 30 35 2d 30 31 2e 20 20 5e 41 20 73 69 6d 69 6c  05-01.  ^A simil
203e0 61 72 20 65 66 66 65 63 74 20 6f 63 63 75 72 73  ar effect occurs
203f0 20 77 68 65 6e 0a 74 68 65 20 6f 72 69 67 69 6e   when.the origin
20400 61 6c 20 64 61 74 65 20 69 73 20 46 65 62 72 75  al date is Febru
20410 61 72 79 20 32 39 20 6f 66 20 61 20 6c 65 61 70  ary 29 of a leap
20420 79 65 61 72 20 61 6e 64 20 74 68 65 20 6d 6f 64  year and the mod
20430 69 66 69 65 72 20 69 73 0a 26 70 6c 75 73 6d 6e  ifier is.&plusmn
20440 3b 4e 20 79 65 61 72 73 20 77 68 65 72 65 20 4e  ;N years where N
20450 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c 74 69 70   is not a multip
20460 6c 65 20 6f 66 20 66 6f 75 72 2e 3c 2f 70 3e 0a  le of four.</p>.
20470 0a 3c 70 3e 5e 54 68 65 20 22 73 74 61 72 74 20  .<p>^The "start 
20480 6f 66 22 20 6d 6f 64 69 66 69 65 72 73 20 28 37  of" modifiers (7
20490 20 74 68 72 6f 75 67 68 20 39 29 20 73 68 69 66   through 9) shif
204a0 74 20 74 68 65 20 64 61 74 65 20 62 61 63 6b 77  t the date backw
204b0 61 72 64 73 20 0a 74 6f 20 74 68 65 20 62 65 67  ards .to the beg
204c0 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 63 75  inning of the cu
204d0 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20 79 65 61  rrent month, yea
204e0 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e 0a 0a 3c  r or day.</p>..<
204f0 70 3e 5e 54 68 65 20 22 77 65 65 6b 64 61 79 22  p>^The "weekday"
20500 20 6d 6f 64 69 66 69 65 72 20 61 64 76 61 6e 63   modifier advanc
20510 65 73 20 74 68 65 20 64 61 74 65 20 66 6f 72 77  es the date forw
20520 61 72 64 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ard to the next 
20530 64 61 74 65 20 0a 77 68 65 72 65 20 74 68 65 20  date .where the 
20540 77 65 65 6b 64 61 79 20 6e 75 6d 62 65 72 20 69  weekday number i
20550 73 20 4e 2e 20 53 75 6e 64 61 79 20 69 73 20 30  s N. Sunday is 0
20560 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31 2c 20 61  , Monday is 1, a
20570 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c 2f 70 3e  nd so forth.</p>
20580 0a 0a 3c 70 3e 5e 54 68 65 20 22 75 6e 69 78 65  ..<p>^The "unixe
20590 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 28  poch" modifier (
205a0 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69  11) only works i
205b0 66 20 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  f it immediately
205c0 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74 69 6d 65   follows .a time
205d0 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 44 44  string in the DD
205e0 44 44 44 44 44 44 44 44 20 66 6f 72 6d 61 74 2e  DDDDDDDD format.
205f0 20 0a 5e 54 68 69 73 20 6d 6f 64 69 66 69 65 72   .^This modifier
20600 20 63 61 75 73 65 73 20 74 68 65 20 44 44 44 44   causes the DDDD
20610 44 44 44 44 44 44 20 74 6f 20 62 65 20 69 6e 74  DDDDDD to be int
20620 65 72 70 72 65 74 65 64 20 6e 6f 74 20 0a 61 73  erpreted not .as
20630 20 61 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75   a Julian day nu
20640 6d 62 65 72 20 61 73 20 69 74 20 6e 6f 72 6d 61  mber as it norma
20650 6c 6c 79 20 77 6f 75 6c 64 20 62 65 2c 20 62 75  lly would be, bu
20660 74 20 61 73 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  t as.[http://en.
20670 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
20680 6b 69 2f 55 6e 69 78 5f 74 69 6d 65 20 7c 20 55  ki/Unix_time | U
20690 6e 69 78 20 54 69 6d 65 5d 20 2d 20 74 68 65 20  nix Time] - the 
206a0 0a 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e  .number of secon
206b0 64 73 20 73 69 6e 63 65 20 31 39 37 30 2e 20 20  ds since 1970.  
206c0 49 66 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63  If the "unixepoc
206d0 68 22 20 6d 6f 64 69 66 69 65 72 20 64 6f 65 73  h" modifier does
206e0 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61 20 74 69   not.follow a ti
206f0 6d 65 73 74 72 69 6e 67 20 6f 66 20 74 68 65 20  mestring of the 
20700 66 6f 72 6d 20 44 44 44 44 44 44 44 44 44 44 20  form DDDDDDDDDD 
20710 77 68 69 63 68 20 65 78 70 72 65 73 73 65 73 20  which expresses 
20720 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 73 65  the number.of se
20730 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30  conds since 1970
20740 20 6f 72 20 69 66 20 6f 74 68 65 72 20 6d 6f 64   or if other mod
20750 69 66 69 65 72 73 0a 73 65 70 61 72 61 74 65 20  ifiers.separate 
20760 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20  the "unixepoch" 
20770 6d 6f 64 69 66 69 65 72 20 66 72 6f 6d 20 70 72  modifier from pr
20780 69 6f 72 20 44 44 44 44 44 44 44 44 44 44 20 74  ior DDDDDDDDDD t
20790 68 65 6e 20 74 68 65 0a 62 65 68 61 76 69 6f 72  hen the.behavior
207a0 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 46   is undefined..F
207b0 6f 72 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  or SQLite versio
207c0 6e 73 20 62 65 66 6f 72 65 20 33 2e 31 36 2e 30  ns before 3.16.0
207d0 20 28 5b 64 61 74 65 6f 66 3a 33 2e 31 36 2e 30   ([dateof:3.16.0
207e0 5d 29 2c 20 0a 74 68 65 20 22 75 6e 69 78 65 70  ]), .the "unixep
207f0 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 6f 6e  och" modifier on
20800 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64 61 74  ly works for.dat
20810 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d  es between 0000-
20820 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20 61  01-01 00:00:00 a
20830 6e 64 20 35 33 35 32 2d 31 31 2d 30 31 20 31 30  nd 5352-11-01 10
20840 3a 35 32 3a 34 37 20 28 75 6e 69 78 20 74 69 6d  :52:47 (unix tim
20850 65 73 0a 6f 66 20 2d 36 32 31 36 37 32 31 39 32  es.of -621672192
20860 30 30 20 74 68 72 6f 75 67 68 20 31 30 36 37 35  00 through 10675
20870 31 39 39 31 31 36 37 29 2e 3c 2f 70 3e 0a 0a 3c  1991167).</p>..<
20880 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
20890 6c 6f 63 61 6c 74 69 6d 65 20 7b 6c 6f 63 61 6c  localtime {local
208a0 74 69 6d 65 20 6d 6f 64 69 66 69 65 72 7d 20 7b  time modifier} {
208b0 27 75 74 63 27 20 6d 6f 64 69 66 69 65 72 7d 3c  'utc' modifier}<
208c0 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 22 6c  /tcl>.<p>^The "l
208d0 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69  ocaltime" modifi
208e0 65 72 20 28 31 32 29 20 61 73 73 75 6d 65 73 20  er (12) assumes 
208f0 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20  the time string 
20900 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20 69  to its left is i
20910 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72  n.Universal Coor
20920 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54  dinated Time (UT
20930 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74  C) and adjusts t
20940 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67 20 73  he time.string s
20950 6f 20 74 68 61 74 20 69 74 20 64 69 73 70 6c 61  o that it displa
20960 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49  ys localtime.  I
20970 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f  f "localtime".fo
20980 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74 68 61  llows a time tha
20990 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20 74 68  t is not UTC, th
209a0 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  en the behavior 
209b0 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e 28  is undefined..^(
209c0 54 68 65 20 22 75 74 63 22 20 6d 6f 64 69 66 69  The "utc" modifi
209d0 65 72 20 69 73 20 74 68 65 20 6f 70 70 6f 73 69  er is the opposi
209e0 74 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65  te of "localtime
209f0 22 2e 20 20 0a 22 75 74 63 22 20 61 73 73 75 6d  ".  ."utc" assum
20a00 65 73 20 74 68 61 74 20 74 68 65 20 73 74 72 69  es that the stri
20a10 6e 67 0a 74 6f 20 69 74 73 20 6c 65 66 74 20 69  ng.to its left i
20a20 73 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74  s in the local t
20a30 69 6d 65 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75  imezone and adju
20a40 73 74 73 20 74 68 61 74 20 73 74 72 69 6e 67 20  sts that string 
20a50 74 6f 20 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a  to be in UTC.)^.
20a60 49 66 20 74 68 65 20 70 72 69 6f 72 20 73 74 72  If the prior str
20a70 69 6e 67 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f  ing is not in lo
20a80 63 61 6c 74 69 6d 65 2c 20 74 68 65 6e 20 74 68  caltime, then th
20a90 65 20 72 65 73 75 6c 74 20 6f 66 20 22 75 74 63  e result of "utc
20aa0 22 20 69 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c  " is.undefined.<
20ab0 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65  /p>..<h3>Example
20ac0 73 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d  s</h3>..^(<p>Com
20ad0 70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  pute the current
20ae0 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63   date.<p>..<bloc
20af0 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61  kquote>SELECT da
20b00 74 65 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63  te('now');</bloc
20b10 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
20b20 43 6f 6d 70 75 74 65 20 74 68 65 20 6c 61 73 74  Compute the last
20b30 20 64 61 79 20 6f 66 20 74 68 65 20 63 75 72 72   day of the curr
20b40 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a  ent month.</p>..
20b50 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45  <blockquote>SELE
20b60 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73  CT date('now','s
20b70 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27  tart of month','
20b80 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61  +1 month','-1 da
20b90 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  y');.</blockquot
20ba0 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  e>)^..^(<p>Compu
20bb0 74 65 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  te the date and 
20bc0 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69  time given a uni
20bd0 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32  x timestamp 1092
20be0 39 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c  941466.</p>..<bl
20bf0 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53 45  ockquote>.    SE
20c00 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31 30  LECT datetime(10
20c10 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65  92941466, 'unixe
20c20 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  poch');.</blockq
20c30 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
20c40 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61  mpute the date a
20c50 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20  nd time given a 
20c60 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31  unix timestamp 1
20c70 30 39 32 39 34 31 34 36 36 2c 20 61 6e 64 20 0a  092941466, and .
20c80 63 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72 20 79  compensate for y
20c90 6f 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f  our local timezo
20ca0 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ne.</p>..<blockq
20cb0 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64  uote>.  SELECT d
20cc0 61 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34  atetime(10929414
20cd0 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 2c  66, 'unixepoch',
20ce0 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c   'localtime');.<
20cf0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
20d00 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
20d10 20 63 75 72 72 65 6e 74 20 75 6e 69 78 20 74 69   current unix ti
20d20 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62  mestamp.</p>..<b
20d30 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
20d40 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73  ECT strftime('%s
20d50 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63  ','now');.</bloc
20d60 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
20d70 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62  Compute the numb
20d80 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65  er of days since
20d90 20 74 68 65 20 73 69 67 6e 69 6e 67 20 6f 66 20   the signing of 
20da0 74 68 65 20 55 53 20 44 65 63 6c 61 72 61 74 69  the US Declarati
20db0 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e  on.of Independen
20dc0 63 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ce.</p>..<blockq
20dd0 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a  uote>.  SELECT j
20de0 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20  ulianday('now') 
20df0 2d 20 6a 75 6c 69 61 6e 64 61 79 28 27 31 37 37  - julianday('177
20e00 36 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f  6-07-04');.</blo
20e10 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
20e20 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d  >Compute the num
20e30 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73  ber of seconds s
20e40 69 6e 63 65 20 61 20 70 61 72 74 69 63 75 6c 61  ince a particula
20e50 72 20 6d 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34  r moment in 2004
20e60 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
20e70 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72  te>.  SELECT str
20e80 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27  ftime('%s','now'
20e90 29 20 2d 20 73 74 72 66 74 69 6d 65 28 27 25 73  ) - strftime('%s
20ea0 27 2c 27 32 30 30 34 2d 30 31 2d 30 31 20 30 32  ','2004-01-01 02
20eb0 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63  :34:56');.</bloc
20ec0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
20ed0 0a 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74  .Compute the dat
20ee0 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 54  e of the first T
20ef0 75 65 73 64 61 79 20 69 6e 20 4f 63 74 6f 62 65  uesday in Octobe
20f00 72 0a 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  r.for the curren
20f10 74 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62  t year..</p>..<b
20f20 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
20f30 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27  ECT date('now','
20f40 73 74 61 72 74 20 6f 66 20 79 65 61 72 27 2c 27  start of year','
20f50 2b 39 20 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b  +9 months','week
20f60 64 61 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  day 2');.</block
20f70 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
20f80 6f 6d 70 75 74 65 20 74 68 65 20 74 69 6d 65 20  ompute the time 
20f90 73 69 6e 63 65 20 74 68 65 20 75 6e 69 78 20 65  since the unix e
20fa0 70 6f 63 68 20 69 6e 20 73 65 63 6f 6e 64 73 20  poch in seconds 
20fb0 0a 28 6c 69 6b 65 20 73 74 72 66 74 69 6d 65 28  .(like strftime(
20fc0 27 25 73 27 2c 27 6e 6f 77 27 29 20 65 78 63 65  '%s','now') exce
20fd0 70 74 20 69 6e 63 6c 75 64 65 73 20 66 72 61 63  pt includes frac
20fe0 74 69 6f 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70  tional part):</p
20ff0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
21000 20 20 53 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e    SELECT (julian
21010 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 32 34 34  day('now') - 244
21020 30 35 38 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b  0587.5)*86400.0;
21030 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
21040 0a 0a 3c 68 33 3e 43 61 76 65 61 74 73 20 41 6e  ..<h3>Caveats An
21050 64 20 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  d Bugs</h3>..<p>
21060 54 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20  The computation 
21070 6f 66 20 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65  of local time de
21080 70 65 6e 64 73 20 68 65 61 76 69 6c 79 20 6f 6e  pends heavily on
21090 20 74 68 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f   the whim .of po
210a0 6c 69 74 69 63 69 61 6e 73 20 61 6e 64 20 69 73  liticians and is
210b0 20 74 68 75 73 20 64 69 66 66 69 63 75 6c 74 20   thus difficult 
210c0 74 6f 20 67 65 74 20 63 6f 72 72 65 63 74 20 66  to get correct f
210d0 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e  or .all locales.
210e0 20 5e 49 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d   ^In this implem
210f0 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 73 74  entation, the st
21100 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
21110 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c   .function local
21120 74 69 6d 65 5f 72 28 29 20 69 73 20 75 73 65 64  time_r() is used
21130 20 74 6f 20 61 73 73 69 73 74 20 69 6e 20 74 68   to assist in th
21140 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66  e calculation of
21150 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e   .local time.  ^
21160 28 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f  (The .localtime_
21170 72 28 29 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e  r() C function n
21180 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72  ormally only wor
21190 6b 73 20 66 6f 72 20 79 65 61 72 73 0a 62 65 74  ks for years.bet
211a0 77 65 65 6e 20 31 39 37 30 20 61 6e 64 20 32 30  ween 1970 and 20
211b0 33 37 2e 20 46 6f 72 20 64 61 74 65 73 20 6f 75  37. For dates ou
211c0 74 73 69 64 65 20 74 68 69 73 20 72 61 6e 67 65  tside this range
211d0 2c 20 53 51 4c 69 74 65 20 0a 61 74 74 65 6d 70  , SQLite .attemp
211e0 74 73 20 74 6f 20 6d 61 70 20 74 68 65 20 79 65  ts to map the ye
211f0 61 72 20 69 6e 74 6f 20 61 6e 20 65 71 75 69 76  ar into an equiv
21200 61 6c 65 6e 74 20 79 65 61 72 20 77 69 74 68 69  alent year withi
21210 6e 20 0a 74 68 69 73 20 72 61 6e 67 65 2c 20 64  n .this range, d
21220 6f 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f  o the calculatio
21230 6e 2c 20 74 68 65 6e 20 6d 61 70 20 74 68 65 20  n, then map the 
21240 79 65 61 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e  year back.)^</p>
21250 0a 0a 0a 3c 70 3e 5e 28 54 68 65 73 65 20 66 75  ...<p>^(These fu
21260 6e 63 74 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72  nctions only wor
21270 6b 20 66 6f 72 20 64 61 74 65 73 20 62 65 74 77  k for dates betw
21280 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30  een 0000-01-01 0
21290 30 3a 30 30 3a 30 30 0a 61 6e 64 20 39 39 39 39  0:00:00.and 9999
212a0 2d 31 32 2d 33 31 20 32 33 3a 35 39 3a 35 39 20  -12-31 23:59:59 
212b0 28 6a 75 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d  (julidan day num
212c0 62 65 72 73 20 31 37 32 31 30 35 39 2e 35 20 74  bers 1721059.5 t
212d0 68 72 6f 75 67 68 20 35 33 37 33 34 38 34 2e 35  hrough 5373484.5
212e0 29 2e 29 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f  ).)^.For dates o
212f0 75 74 73 69 64 65 20 74 68 61 74 20 72 61 6e 67  utside that rang
21300 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  e, the results o
21310 66 20 74 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e  f these.function
21320 73 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e  s are undefined.
21330 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73  </p>..<p>Non-Vis
21340 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66  ta Windows platf
21350 6f 72 6d 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72  orms only suppor
21360 74 20 6f 6e 65 20 73 65 74 20 6f 66 20 44 53 54  t one set of DST
21370 20 72 75 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f   rules. .Vista o
21380 6e 6c 79 20 73 75 70 70 6f 72 74 73 20 74 77 6f  nly supports two
21390 2e 20 54 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20  . Therefore, on 
213a0 74 68 65 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c  these platforms,
213b0 20 0a 68 69 73 74 6f 72 69 63 61 6c 20 44 53 54   .historical DST
213c0 20 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69   calculations wi
213d0 6c 6c 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e  ll be incorrect.
213e0 20 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69   .For example, i
213f0 6e 20 74 68 65 20 55 53 2c 20 69 6e 20 32 30 30  n the US, in 200
21400 37 20 74 68 65 20 44 53 54 20 72 75 6c 65 73 20  7 the DST rules 
21410 63 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69  changed. .Non-Vi
21420 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74  sta Windows plat
21430 66 6f 72 6d 73 20 61 70 70 6c 79 20 74 68 65 20  forms apply the 
21440 6e 65 77 20 32 30 30 37 20 44 53 54 20 72 75 6c  new 2007 DST rul
21450 65 73 20 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69  es .to all previ
21460 6f 75 73 20 79 65 61 72 73 20 61 73 20 77 65 6c  ous years as wel
21470 6c 2e 20 56 69 73 74 61 20 64 6f 65 73 20 73 6f  l. Vista does so
21480 6d 65 77 68 61 74 20 62 65 74 74 65 72 0a 67 65  mewhat better.ge
21490 74 74 69 6e 67 20 72 65 73 75 6c 74 73 20 63 6f  tting results co
214a0 72 72 65 63 74 20 62 61 63 6b 20 74 6f 20 31 39  rrect back to 19
214b0 38 36 2c 20 77 68 65 6e 20 74 68 65 20 72 75 6c  86, when the rul
214c0 65 73 20 77 65 72 65 20 61 6c 73 6f 20 63 68 61  es were also cha
214d0 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c  nged.</p>..<p>Al
214e0 6c 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75  l internal compu
214f0 74 61 74 69 6f 6e 73 20 61 73 73 75 6d 65 20 74  tations assume t
21500 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77  he .[http://en.w
21510 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
21520 69 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65  i/Gregorian_cale
21530 6e 64 61 72 20 7c 20 47 72 65 67 6f 72 69 61 6e  ndar | Gregorian
21540 20 63 61 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65   calendar].syste
21550 6d 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 20 61  m.  It is also a
21560 73 73 75 6d 65 64 20 74 68 61 74 20 65 76 65 72  ssumed that ever
21570 79 0a 64 61 79 20 69 73 20 65 78 61 63 74 6c 79  y.day is exactly
21580 20 38 36 34 30 30 20 73 65 63 6f 6e 64 73 20 69   86400 seconds i
21590 6e 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a  n duration.</p>.
215a0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
215b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
215c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
215d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
215e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
215f0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41  #####.Section {A
21600 67 67 72 65 67 61 74 65 20 46 75 6e 63 74 69 6f  ggregate Functio
21610 6e 73 7d 20 61 67 67 66 75 6e 63 20 7b 2a 61 67  ns} aggfunc {*ag
21620 67 66 75 6e 63 7d 0a 75 6e 73 65 74 20 2d 6e 6f  gfunc}.unset -no
21630 63 6f 6d 70 6c 61 69 6e 20 63 6f 72 65 66 75 6e  complain corefun
21640 63 73 65 74 0a 0a 66 75 6e 63 64 65 66 20 7b 61  cset..funcdef {a
21650 76 67 28 58 29 7d 20 7b 2a 61 76 67 20 7b 61 76  vg(X)} {*avg {av
21660 67 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  g() aggregate fu
21670 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
21680 65 20 61 76 67 28 29 20 66 75 6e 63 74 69 6f 6e  e avg() function
21690 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  .  returns the a
216a0 76 65 72 61 67 65 20 76 61 6c 75 65 20 6f 66 20  verage value of 
216b0 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e  all non-NULL <i>
216c0 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61 0a 20  X</i> within a. 
216d0 20 67 72 6f 75 70 2e 20 20 5e 53 74 72 69 6e 67   group.  ^String
216e0 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65 73   and BLOB values
216f0 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f   that do not loo
21700 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20 61  k like numbers a
21710 72 65 0a 20 20 69 6e 74 65 72 70 72 65 74 65 64  re.  interpreted
21720 20 61 73 20 30 2e 0a 20 20 5e 54 68 65 20 72 65   as 0..  ^The re
21730 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73  sult of avg() is
21740 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69   always a floati
21750 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 61  ng point value a
21760 73 20 6c 6f 6e 67 20 61 73 0a 20 20 61 74 20 74  s long as.  at t
21770 68 65 72 65 20 69 73 20 61 74 20 6c 65 61 73 74  here is at least
21780 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e   one non-NULL in
21790 70 75 74 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a  put even if all.
217a0 20 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74    inputs are int
217b0 65 67 65 72 73 2e 20 20 5e 54 68 65 20 72 65 73  egers.  ^The res
217c0 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73 20  ult of avg() is 
217d0 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79  NULL if and only
217e0 20 69 66 0a 20 20 74 68 65 72 65 20 61 72 65 20   if.  there are 
217f0 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75  no non-NULL inpu
21800 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64 65 66  ts.  .}..funcdef
21810 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75 6e 74   {count(X) count
21820 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63 6f  (*)} {*count {co
21830 75 6e 74 28 29 20 61 67 67 72 65 67 61 74 65 20  unt() aggregate 
21840 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
21850 54 68 65 20 63 6f 75 6e 74 28 58 29 20 66 75 6e  The count(X) fun
21860 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20  ction returns.  
21870 61 20 63 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e  a count of the n
21880 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 0a 20  umber of times. 
21890 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69   that <i>X</i> i
218a0 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20  s not NULL in a 
218b0 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 63 6f 75  group.  ^The cou
218c0 6e 74 28 2a 29 20 66 75 6e 63 74 69 6f 6e 0a 20  nt(*) function. 
218d0 20 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d 65   (with no argume
218e0 6e 74 73 29 20 72 65 74 75 72 6e 73 20 74 68 65  nts) returns the
218f0 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
21900 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f   rows in the gro
21910 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  up..}..funcdef {
21920 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 29 20  group_concat(X) 
21930 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 2c 59  group_concat(X,Y
21940 29 7d 20 7b 0a 20 20 2a 67 72 6f 75 70 5f 63 6f  )} {.  *group_co
21950 6e 63 61 74 20 7b 67 72 6f 75 70 5f 63 6f 6e 63  ncat {group_conc
21960 61 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66  at() aggregate f
21970 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e  unction}.} {.  ^
21980 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74  The group_concat
21990 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
219a0 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77  rns.  a string w
219b0 68 69 63 68 20 69 73 20 74 68 65 20 63 6f 6e 63  hich is the conc
219c0 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20 61  atenation of.  a
219d0 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  ll non-NULL valu
219e0 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20  es of <i>X</i>. 
219f0 20 5e 49 66 20 70 61 72 61 6d 65 74 65 72 20 3c   ^If parameter <
21a00 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65 73 65  i>Y</i> is prese
21a10 6e 74 20 74 68 65 6e 0a 20 20 69 74 20 69 73 20  nt then.  it is 
21a20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61  used as the sepa
21a30 72 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e 20  rator.  between 
21a40 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e  instances of <i>
21a50 58 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d 61  X</i>.  ^A comma
21a60 20 28 22 2c 22 29 20 69 73 20 75 73 65 64 20 61   (",") is used a
21a70 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a  s the separator.
21a80 20 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73    if <i>Y</i> is
21a90 20 6f 6d 69 74 74 65 64 2e 20 20 54 68 65 20 6f   omitted.  The o
21aa0 72 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6e 63  rder of the conc
21ab0 61 74 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74  atenated element
21ac0 73 20 69 73 0a 20 20 61 72 62 69 74 72 61 72 79  s is.  arbitrary
21ad0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61  ..}..funcdef {ma
21ae0 78 28 58 29 7d 20 7b 2a 6d 61 78 41 67 67 46 75  x(X)} {*maxAggFu
21af0 6e 63 20 2a 61 67 67 5f 6d 61 78 20 7b 6d 61 78  nc *agg_max {max
21b00 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
21b10 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
21b20 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
21b30 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75   function.  retu
21b40 72 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  rns the maximum 
21b50 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c  value of all val
21b60 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
21b70 2e 0a 20 20 5e 54 68 65 20 6d 61 78 69 6d 75 6d  ..  ^The maximum
21b80 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 76 61   value is the va
21b90 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62  lue that would b
21ba0 65 20 72 65 74 75 72 6e 65 64 20 6c 61 73 74 20  e returned last 
21bb0 69 6e 20 61 6e 0a 20 20 4f 52 44 45 52 20 42 59  in an.  ORDER BY
21bc0 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 63 6f 6c   on the same col
21bd0 75 6d 6e 2e 20 20 5e 41 67 67 72 65 67 61 74 65  umn.  ^Aggregate
21be0 20 6d 61 78 28 29 20 72 65 74 75 72 6e 73 20 4e   max() returns N
21bf0 55 4c 4c 20 0a 20 20 69 66 20 61 6e 64 20 6f 6e  ULL .  if and on
21c00 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ly if there are 
21c10 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  no non-NULL valu
21c20 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
21c30 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e  .}..funcdef {min
21c40 28 58 29 7d 20 7b 2a 6d 69 6e 41 67 67 46 75 6e  (X)} {*minAggFun
21c50 63 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e 28  c *agg_min {min(
21c60 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
21c70 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20  tion}} {.  ^The 
21c80 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20  min() aggregate 
21c90 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72  function.  retur
21ca0 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e  ns the minimum n
21cb0 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66  on-NULL value of
21cc0 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74   all values in t
21cd0 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65  he group..  ^The
21ce0 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69   minimum value i
21cf0 73 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d  s the first non-
21d00 4e 55 4c 4c 20 76 61 6c 75 65 20 74 68 61 74 20  NULL value that 
21d10 77 6f 75 6c 64 20 61 70 70 65 61 72 0a 20 20 69  would appear.  i
21d20 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6f 66  n an ORDER BY of
21d30 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20 5e   the column..  ^
21d40 41 67 67 72 65 67 61 74 65 20 6d 69 6e 28 29 20  Aggregate min() 
21d50 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20  returns NULL if 
21d60 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72  and only if ther
21d70 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
21d80 4c 0a 20 20 76 61 6c 75 65 73 20 69 6e 20 74 68  L.  values in th
21d90 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63  e group..}..func
21da0 64 65 66 20 7b 73 75 6d 28 58 29 20 74 6f 74 61  def {sum(X) tota
21db0 6c 28 58 29 7d 20 7b 0a 20 20 2a 73 75 6d 46 75  l(X)} {.  *sumFu
21dc0 6e 63 20 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a 20  nc *sum *total. 
21dd0 20 7b 73 75 6d 28 29 20 61 67 67 72 65 67 61 74   {sum() aggregat
21de0 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b 74  e function}.  {t
21df0 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74 65  otal() aggregate
21e00 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20   function}.} {. 
21e10 20 5e 54 68 65 20 73 75 6d 28 29 20 61 6e 64 20   ^The sum() and 
21e20 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74  total() aggregat
21e30 65 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20 72 65  e functions.  re
21e40 74 75 72 6e 20 73 75 6d 20 6f 66 20 61 6c 6c 20  turn sum of all 
21e50 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20  non-NULL values 
21e60 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20  in the group..  
21e70 5e 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f  ^If there are no
21e80 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20   non-NULL input 
21e90 72 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29 20  rows then sum() 
21ea0 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20 62  returns.  NULL b
21eb0 75 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75 72  ut total() retur
21ec0 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20 69  ns 0.0..  NULL i
21ed0 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61  s not normally a
21ee0 20 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74 20   helpful result 
21ef0 66 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20 6e  for the sum of n
21f00 6f 20 72 6f 77 73 0a 20 20 62 75 74 20 74 68 65  o rows.  but the
21f10 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72 65   SQL standard re
21f20 71 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d 6f  quires it and mo
21f30 73 74 20 6f 74 68 65 72 0a 20 20 53 51 4c 20 64  st other.  SQL d
21f40 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20  atabase engines 
21f50 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20  implement sum() 
21f60 74 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c 69  that way so SQLi
21f70 74 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74 68  te does it in th
21f80 65 0a 20 20 73 61 6d 65 20 77 61 79 20 69 6e 20  e.  same way in 
21f90 6f 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d 70  order to be comp
21fa0 61 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e 6f  atible.   The no
21fb0 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61 6c  n-standard total
21fc0 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69 73  () function.  is
21fd0 20 70 72 6f 76 69 64 65 64 20 61 73 20 61 20 63   provided as a c
21fe0 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74 6f  onvenient way to
21ff0 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68 69   work around thi
22000 73 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65 6d  s design problem
22010 0a 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61  .  in the SQL la
22020 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c  nguage.</p>..  <
22030 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  p>^The result of
22040 20 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77 61   total() is alwa
22050 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ys a floating po
22060 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68  int value..  ^Th
22070 65 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d 28  e result of sum(
22080 29 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  ) is an integer 
22090 76 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e  value if all non
220a0 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72 65  -NULL inputs are
220b0 20 69 6e 74 65 67 65 72 73 2e 0a 20 20 5e 49 66   integers..  ^If
220c0 20 61 6e 79 20 69 6e 70 75 74 20 74 6f 20 73 75   any input to su
220d0 6d 28 29 20 69 73 20 6e 65 69 74 68 65 72 20 61  m() is neither a
220e0 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 4e  n integer or a N
220f0 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28 29  ULL.  then sum()
22100 20 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74   returns a float
22110 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a  ing point value.
22120 20 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65    which might be
22130 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f   an approximatio
22140 6e 20 74 6f 20 74 68 65 20 74 72 75 65 20 73 75  n to the true su
22150 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53 75  m.</p>..  <p>^Su
22160 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f 77 20 61  m() will throw a
22170 6e 20 22 69 6e 74 65 67 65 72 20 6f 76 65 72 66  n "integer overf
22180 6c 6f 77 22 20 65 78 63 65 70 74 69 6f 6e 20 69  low" exception i
22190 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61  f all inputs.  a
221a0 72 65 20 69 6e 74 65 67 65 72 73 20 6f 72 20 4e  re integers or N
221b0 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74  ULL.  and an int
221c0 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63  eger overflow oc
221d0 63 75 72 73 20 61 74 20 61 6e 79 20 70 6f 69 6e  curs at any poin
221e0 74 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6d  t during the com
221f0 70 75 74 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f 74  putation..  ^Tot
22200 61 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f 77  al() never throw
22210 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65  s an integer ove
22220 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a  rflow..}.</tcl>.
22230 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72 65 67  ..<p>.The aggreg
22240 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68  ate functions sh
22250 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76  own below are av
22260 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
22270 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  lt.  Additional.
22280 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
22290 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43  ons written in C
222a0 20 6d 61 79 20 62 65 20 61 64 64 65 64 20 75 73   may be added us
222b0 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69 74 65  ing the .[sqlite
222c0 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
222d0 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70  n()]</a>.API.</p
222e0 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20 61  >..<p>.^In any a
222f0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
22300 6e 20 74 68 61 74 20 74 61 6b 65 73 20 61 20 73  n that takes a s
22310 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20  ingle argument, 
22320 74 68 61 74 20 61 72 67 75 6d 65 6e 74 0a 63 61  that argument.ca
22330 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  n be preceded by
22340 20 74 68 65 20 6b 65 79 77 6f 72 64 20 44 49 53   the keyword DIS
22350 54 49 4e 43 54 2e 20 20 5e 49 6e 20 73 75 63 68  TINCT.  ^In such
22360 20 63 61 73 65 73 2c 20 64 75 70 6c 69 63 61 74   cases, duplicat
22370 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 66  e.elements are f
22380 69 6c 74 65 72 65 64 20 62 65 66 6f 72 65 20 62  iltered before b
22390 65 69 6e 67 20 70 61 73 73 65 64 20 69 6e 74 6f  eing passed into
223a0 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 66   the aggregate f
223b0 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78  unction..^For ex
223c0 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63 74  ample, the funct
223d0 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74 69  ion "count(disti
223e0 6e 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65 74  nct X)" will ret
223f0 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  urn the number.o
22400 66 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75 65  f distinct value
22410 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e  s of column X in
22420 73 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f 74  stead of the tot
22430 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  al number of non
22440 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20  -null.values in 
22450 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a  column X..</p>..
22460 3c 74 63 6c 3e 0a 73 65 74 20 6c 78 20 7b 7d 0a  <tcl>.set lx {}.
22470 66 6f 72 65 61 63 68 20 62 61 73 65 73 79 6e 74  foreach basesynt
22480 61 78 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20  ax [array names 
22490 63 6f 72 65 66 75 6e 63 73 65 74 5d 20 7b 0a 20  corefuncset] {. 
224a0 20 66 6f 72 65 61 63 68 20 7b 73 79 6e 74 61 78   foreach {syntax
224b0 20 6b 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20   keywords desc} 
224c0 24 63 6f 72 65 66 75 6e 63 73 65 74 28 24 62 61  $corefuncset($ba
224d0 73 65 73 79 6e 74 61 78 29 20 62 72 65 61 6b 0a  sesyntax) break.
224e0 20 20 72 65 67 65 78 70 20 7b 5e 5b 61 2d 7a 5f    regexp {^[a-z_
224f0 5d 2b 7d 20 24 62 61 73 65 73 79 6e 74 61 78 20  ]+} $basesyntax 
22500 66 72 61 67 6d 65 6e 74 0a 20 20 66 6f 72 65 61  fragment.  forea
22510 63 68 20 63 6f 72 65 73 79 6e 74 61 78 20 24 73  ch coresyntax $s
22520 79 6e 74 61 78 20 7b 0a 20 20 20 20 6c 61 70 70  yntax {.    lapp
22530 65 6e 64 20 6c 78 20 5b 6c 69 73 74 20 24 66 72  end lx [list $fr
22540 61 67 6d 65 6e 74 20 24 63 6f 72 65 73 79 6e 74  agment $coresynt
22550 61 78 20 30 5d 0a 20 20 7d 0a 7d 0a 68 64 5f 6c  ax 0].  }.}.hd_l
22560 69 73 74 5f 6f 66 5f 6c 69 6e 6b 73 20 7b 7d 20  ist_of_links {} 
22570 32 32 35 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65  225 [lsort -inde
22580 78 20 31 20 24 6c 78 5d 0a 0a 68 64 5f 70 75 74  x 1 $lx]..hd_put
22590 73 6e 6c 20 22 3c 68 72 20 63 6c 61 73 73 3d 27  snl "<hr class='
225a0 78 68 72 27 3e 22 0a 68 64 5f 70 75 74 73 6e 6c  xhr'>".hd_putsnl
225b0 20 22 3c 64 6c 3e 22 0a 66 6f 72 65 61 63 68 20   "<dl>".foreach 
225c0 62 61 73 65 73 79 6e 74 61 78 20 5b 6c 73 6f 72  basesyntax [lsor
225d0 74 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 63  t [array names c
225e0 6f 72 65 66 75 6e 63 73 65 74 5d 5d 20 7b 0a 20  orefuncset]] {. 
225f0 20 66 6f 72 65 61 63 68 20 7b 73 79 6e 74 61 78   foreach {syntax
22600 20 6b 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20   keywords desc} 
22610 24 63 6f 72 65 66 75 6e 63 73 65 74 28 24 62 61  $corefuncset($ba
22620 73 65 73 79 6e 74 61 78 29 20 62 72 65 61 6b 0a  sesyntax) break.
22630 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c    regsub -all {\
22640 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  s+} [string trim
22650 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 20 2f   $syntax] {<br /
22660 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73  >} syntax.  regs
22670 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29  ub -all {\(([^*)
22680 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b  ]+)\)} $syntax {
22690 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e  (<i>\1</i>)} syn
226a0 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  tax.  regsub -al
226b0 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c  l {,} $syntax {<
226c0 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a  /i>,<i>} syntax.
226d0 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c    regsub -all {<
226e0 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73  i>\.\.\.</i>} $s
226f0 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74  yntax {...} synt
22700 61 78 0a 20 20 72 65 67 65 78 70 20 7b 5e 5b 61  ax.  regexp {^[a
22710 2d 7a 5d 2b 7d 20 24 62 61 73 65 73 79 6e 74 61  -z]+} $basesynta
22720 78 20 66 72 61 67 6d 65 6e 74 0a 20 20 69 66 20  x fragment.  if 
22730 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f  {[llength $keywo
22740 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72  rds]==0} {.    r
22750 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20  egexp {[a-z_]+} 
22760 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a 20 20 20  $syntax name.   
22770 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 6e 61   hd_fragment $na
22780 6d 65 20 2a 24 6e 61 6d 65 20 22 24 7b 6e 61 6d  me *$name "${nam
22790 65 7d 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  e}() SQL functio
227a0 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  n".  } else {.  
227b0 20 20 73 65 74 20 66 72 61 67 6e 61 6d 65 20 5b    set fragname [
227c0 6c 69 6e 64 65 78 20 24 6b 65 79 77 6f 72 64 73  lindex $keywords
227d0 20 30 5d 0a 20 20 20 20 72 65 67 73 75 62 20 2d   0].    regsub -
227e0 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20 24 66 72  all {[^a-z]} $fr
227f0 61 67 6e 61 6d 65 20 7b 7d 20 66 72 61 67 6e 61  agname {} fragna
22800 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65  me.    hd_fragme
22810 6e 74 20 24 66 72 61 67 6e 61 6d 65 0a 20 20 20  nt $fragname.   
22820 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64   eval hd_keyword
22830 73 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 5c  s [string map {\
22840 6e 20 7b 20 7d 7d 20 24 6b 65 79 77 6f 72 64 73  n { }} $keywords
22850 5d 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20  ].  }.  hd_puts 
22860 22 3c 64 74 3e 3c 70 3e 3c 62 3e 24 73 79 6e 74  "<dt><p><b>$synt
22870 61 78 3c 2f 62 3e 3c 2f 64 74 3e 22 0a 20 20 68  ax</b></dt>".  h
22880 64 5f 72 65 73 6f 6c 76 65 20 22 3c 64 64 3e 3c  d_resolve "<dd><
22890 70 3e 24 64 65 73 63 3c 2f 64 64 3e 5c 6e 22 0a  p>$desc</dd>\n".
228a0 7d 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c 2f 64  }.hd_putsnl "</d
228b0 6c 3e 22 0a 0a 23 23 23 23 23 23 23 23 23 23 23  l>"..###########
228c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
228d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
228e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
228f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22900 23 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45  ###.Section INSE
22910 52 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52  RT insert {INSER
22920 54 20 2a 49 4e 53 45 52 54 73 7d 0a 0a 52 65 63  T *INSERTs}..Rec
22930 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
22940 72 61 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74 0a  ram insert-stmt.
22950 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49  </tcl>..<p>The I
22960 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
22970 63 6f 6d 65 73 20 69 6e 20 74 68 72 65 65 20 62  comes in three b
22980 61 73 69 63 20 66 6f 72 6d 73 2e 20 20 0a 3c 6f  asic forms.  .<o
22990 6c 3e 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 49 4e 53  l>.<li><p><b>INS
229a0 45 52 54 20 49 4e 54 4f 20 3c 2f 62 3e 3c 69 3e  ERT INTO </b><i>
229b0 74 61 62 6c 65 3c 2f 69 3e 3c 62 3e 20 56 41 4c  table</i><b> VAL
229c0 55 45 53 28 2e 2e 2e 29 3b 3c 2f 62 3e 0a 3c 70  UES(...);</b>.<p
229d0 3e 5e 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  >^The first form
229e0 20 28 77 69 74 68 20 74 68 65 20 22 56 41 4c 55   (with the "VALU
229f0 45 53 22 20 6b 65 79 77 6f 72 64 29 20 63 72 65  ES" keyword) cre
22a00 61 74 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ates one or more
22a10 0a 6e 65 77 20 72 6f 77 73 20 69 6e 0a 61 6e 20  .new rows in.an 
22a20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 20  existing table. 
22a30 5e 49 66 20 74 68 65 20 3c 79 79 74 65 72 6d 3e  ^If the <yyterm>
22a40 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74  column-name</yyt
22a50 65 72 6d 3e 20 6c 69 73 74 20 61 66 74 65 72 0a  erm> list after.
22a60 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61  <yyterm>table-na
22a70 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 6f  me</yyterm> is o
22a80 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68 65 20  mitted then the 
22a90 6e 75 6d 62 65 72 0a 6f 66 20 76 61 6c 75 65 73  number.of values
22aa0 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 65   inserted into e
22ab0 61 63 68 20 72 6f 77 0a 6d 75 73 74 20 62 65 20  ach row.must be 
22ac0 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
22ad0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
22ae0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
22af0 5e 49 6e 20 74 68 69 73 20 63 61 73 65 0a 74 68  ^In this case.th
22b00 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c  e result of eval
22b10 75 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d  uating the left-
22b20 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20  most expression 
22b30 66 72 6f 6d 20 65 61 63 68 20 74 65 72 6d 20 6f  from each term o
22b40 66 0a 74 68 65 20 56 41 4c 55 45 53 20 6c 69 73  f.the VALUES lis
22b50 74 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e  t is inserted in
22b60 74 6f 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  to the left-most
22b70 20 63 6f 6c 75 6d 6e 20 6f 66 20 65 61 63 68 20   column of each 
22b80 6e 65 77 20 72 6f 77 2c 0a 61 6e 64 20 73 6f 20  new row,.and so 
22b90 66 6f 72 74 68 20 66 6f 72 20 65 61 63 68 20 73  forth for each s
22ba0 75 62 73 65 71 75 65 6e 74 20 65 78 70 72 65 73  ubsequent expres
22bb0 73 69 6f 6e 2e 20 5e 49 66 20 61 20 3c 79 79 74  sion. ^If a <yyt
22bc0 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  erm>column-name<
22bd0 2f 79 79 74 65 72 6d 3e 0a 6c 69 73 74 20 69 73  /yyterm>.list is
22be0 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
22bf0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76   the number of v
22c00 61 6c 75 65 73 20 69 6e 20 65 61 63 68 20 74 65  alues in each te
22c10 72 6d 20 6f 66 20 74 68 65 0a 56 41 4c 55 45 20  rm of the.VALUE 
22c20 6c 69 73 74 20 6d 75 73 74 20 6d 61 74 63 68 20  list must match 
22c30 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70  the number of.sp
22c40 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e  ecified columns.
22c50 20 5e 45 61 63 68 20 6f 66 20 74 68 65 20 6e 61   ^Each of the na
22c60 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  med columns of t
22c70 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f  he new row is po
22c80 70 75 6c 61 74 65 64 0a 77 69 74 68 20 74 68 65  pulated.with the
22c90 20 72 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c   results of eval
22ca0 75 61 74 69 6e 67 20 74 68 65 20 63 6f 72 72 65  uating the corre
22cb0 73 70 6f 6e 64 69 6e 67 20 56 41 4c 55 45 53 20  sponding VALUES 
22cc0 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 54 61 62  expression. ^Tab
22cd0 6c 65 0a 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  le.columns that 
22ce0 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e  do not appear in
22cf0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74   the column list
22d00 20 61 72 65 20 70 6f 70 75 6c 61 74 65 64 20 77   are populated w
22d10 69 74 68 20 74 68 65 20 0a 5b 64 65 66 61 75 6c  ith the .[defaul
22d20 74 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 5d 20  t column value] 
22d30 28 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61  (specified as pa
22d40 72 74 20 6f 66 20 74 68 65 20 5b 43 52 45 41 54  rt of the [CREAT
22d50 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  E TABLE] stateme
22d60 6e 74 29 2c 20 6f 72 0a 77 69 74 68 20 4e 55 4c  nt), or.with NUL
22d70 4c 20 69 66 20 6e 6f 20 5b 64 65 66 61 75 6c 74  L if no [default
22d80 20 76 61 6c 75 65 5d 20 69 73 20 73 70 65 63 69   value] is speci
22d90 66 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62  fied...<li><p><b
22da0 3e 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 2f 62  >INSERT INTO </b
22db0 3e 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 3c 62 3e  ><i>table</i><b>
22dc0 20 53 45 4c 45 43 54 20 2e 2e 2e 3b 3c 2f 62 3e   SELECT ...;</b>
22dd0 0a 3c 70 3e 54 68 65 20 73 65 63 6f 6e 64 20 66  .<p>The second f
22de0 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52  orm of the INSER
22df0 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 74  T statement cont
22e00 61 69 6e 73 20 61 20 5b 53 45 4c 45 43 54 5d 20  ains a [SELECT] 
22e10 73 74 61 74 65 6d 65 6e 74 0a 69 6e 73 74 65 61  statement.instea
22e20 64 20 6f 66 20 61 20 56 41 4c 55 45 53 20 63 6c  d of a VALUES cl
22e30 61 75 73 65 2e 20 5e 41 20 6e 65 77 20 65 6e 74  ause. ^A new ent
22e40 72 79 20 69 73 20 69 6e 73 65 72 74 65 64 20 69  ry is inserted i
22e50 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 66 6f  nto the table fo
22e60 72 20 65 61 63 68 0a 72 6f 77 20 6f 66 20 64 61  r each.row of da
22e70 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 65  ta returned by e
22e80 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c  xecuting the SEL
22e90 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ECT statement. ^
22ea0 49 66 20 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74  If a column-list
22eb0 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
22ec0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
22ed0 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
22ee0 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  lt of the SELECT
22ef0 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
22f00 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e.as the number 
22f10 6f 66 20 69 74 65 6d 73 20 69 6e 20 74 68 65 20  of items in the 
22f20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 2e 20 5e 4f 74  column-list. ^Ot
22f30 68 65 72 77 69 73 65 2c 20 69 66 20 6e 6f 20 63  herwise, if no c
22f40 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70  olumn-list is.sp
22f50 65 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d  ecified, the num
22f60 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
22f70 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
22f80 74 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20  the SELECT must 
22f90 62 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74  be the same.as t
22fa0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
22fb0 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
22fc0 65 2e 20 5e 41 6e 79 20 53 45 4c 45 43 54 20 73  e. ^Any SELECT s
22fd0 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63 6c 75 64  tatement, includ
22fe0 69 6e 67 0a 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  ing.[compound SE
22ff0 4c 45 43 54 73 5d 20 61 6e 64 20 53 45 4c 45 43  LECTs] and SELEC
23000 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  T statements wit
23010 68 20 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e 64  h [ORDER BY] and
23020 2f 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75  /or [LIMIT] clau
23030 73 65 73 2c 20 0a 6d 61 79 20 62 65 20 75 73 65  ses, .may be use
23040 64 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  d in an INSERT s
23050 74 61 74 65 6d 65 6e 74 20 6f 66 20 74 68 69 73  tatement of this
23060 20 66 6f 72 6d 2e 0a 0a 3c 70 3e 54 6f 20 61 76   form...<p>To av
23070 6f 69 64 20 61 20 70 61 72 73 69 6e 67 20 61 6d  oid a parsing am
23080 62 69 67 75 69 74 79 2c 20 74 68 65 20 53 45 4c  biguity, the SEL
23090 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 73 68  ECT statement sh
230a0 6f 75 6c 64 20 61 6c 77 61 79 73 0a 63 6f 6e 74  ould always.cont
230b0 61 69 6e 20 61 20 57 48 45 52 45 20 63 6c 61 75  ain a WHERE clau
230c0 73 65 2c 20 65 76 65 6e 20 69 66 20 74 68 61 74  se, even if that
230d0 20 63 6c 61 75 73 65 20 69 73 20 73 69 6d 70 6c   clause is simpl
230e0 79 20 22 57 48 45 52 45 20 74 72 75 65 22 2c 0a  y "WHERE true",.
230f0 69 66 20 74 68 65 20 5b 75 70 73 65 72 74 2d 63  if the [upsert-c
23100 6c 61 75 73 65 5d 20 69 73 20 70 72 65 73 65 6e  lause] is presen
23110 74 2e 20 20 57 69 74 68 6f 75 74 20 74 68 65 20  t.  Without the 
23120 57 48 45 52 45 20 63 6c 61 75 73 65 2c 20 74 68  WHERE clause, th
23130 65 0a 70 61 72 73 65 72 20 64 6f 65 73 20 6e 6f  e.parser does no
23140 74 20 6b 6e 6f 77 20 69 66 20 74 68 65 20 74 6f  t know if the to
23150 6b 65 6e 20 22 4f 4e 22 20 69 73 20 70 61 72 74  ken "ON" is part
23160 20 6f 66 20 61 20 6a 6f 69 6e 20 63 6f 6e 73 74   of a join const
23170 72 61 69 6e 74 0a 6f 6e 20 74 68 65 20 53 45 4c  raint.on the SEL
23180 45 43 54 2c 20 6f 72 20 74 68 65 20 62 65 67 69  ECT, or the begi
23190 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 5b 75 70  nning of the [up
231a0 73 65 72 74 2d 63 6c 61 75 73 65 5d 2e 0a 0a 3c  sert-clause]...<
231b0 6c 69 3e 3c 70 3e 3c 62 3e 49 4e 53 45 52 54 20  li><p><b>INSERT 
231c0 49 4e 54 4f 20 3c 2f 62 3e 3c 69 3e 74 61 62 6c  INTO </b><i>tabl
231d0 65 3c 2f 69 3e 3c 62 3e 20 44 45 46 41 55 4c 54  e</i><b> DEFAULT
231e0 20 56 41 4c 55 45 53 3b 3c 2f 62 3e 0a 3c 70 3e   VALUES;</b>.<p>
231f0 54 68 65 20 74 68 69 72 64 20 66 6f 72 6d 20 6f  The third form o
23200 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  f an INSERT stat
23210 65 6d 65 6e 74 20 69 73 20 77 69 74 68 20 44 45  ement is with DE
23220 46 41 55 4c 54 20 56 41 4c 55 45 53 2e 0a 5e 28  FAULT VALUES..^(
23230 54 68 65 20 49 4e 53 45 52 54 20 2e 2e 2e 20 44  The INSERT ... D
23240 45 46 41 55 4c 54 20 56 41 4c 55 45 53 20 73 74  EFAULT VALUES st
23250 61 74 65 6d 65 6e 74 20 69 6e 73 65 72 74 73 20  atement inserts 
23260 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77  a single new row
23270 20 69 6e 74 6f 20 74 68 65 0a 6e 61 6d 65 64 20   into the.named 
23280 74 61 62 6c 65 2e 29 5e 20 5e 45 61 63 68 20 63  table.)^ ^Each c
23290 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77  olumn of the new
232a0 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65   row is populate
232b0 64 20 77 69 74 68 20 69 74 73 20 0a 5b 64 65 66  d with its .[def
232c0 61 75 6c 74 20 76 61 6c 75 65 5d 2c 20 6f 72 20  ault value], or 
232d0 77 69 74 68 20 61 20 4e 55 4c 4c 20 69 66 20 6e  with a NULL if n
232e0 6f 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  o default value 
232f0 69 73 20 73 70 65 63 69 66 69 65 64 20 0a 61 73  is specified .as
23300 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6c   part of the col
23310 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  umn definition i
23320 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20 54 41  n the [CREATE TA
23330 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a  BLE] statement..
23340 54 68 65 20 5b 75 70 73 65 72 74 2d 63 6c 61 75  The [upsert-clau
23350 73 65 5d 20 69 73 20 6e 6f 74 20 73 75 70 70 6f  se] is not suppo
23360 72 74 65 64 20 61 66 74 65 72 20 44 45 46 41 55  rted after DEFAU
23370 4c 54 20 56 41 4c 55 45 53 2e 0a 0a 3c 2f 6f 6c  LT VALUES...</ol
23380 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 69 6e 69 74  >..<p>.^The init
23390 69 61 6c 20 22 49 4e 53 45 52 54 22 20 6b 65 79  ial "INSERT" key
233a0 77 6f 72 64 20 63 61 6e 20 62 65 20 72 65 70 6c  word can be repl
233b0 61 63 65 64 20 62 79 0a 22 52 45 50 4c 41 43 45  aced by."REPLACE
233c0 22 20 6f 72 20 22 49 4e 53 45 52 54 20 4f 52 20  " or "INSERT OR 
233d0 3c 69 3e 61 63 74 69 6f 6e 3c 2f 69 3e 22 20 74  <i>action</i>" t
233e0 6f 20 73 70 65 63 69 66 79 20 61 6e 20 61 6c 74  o specify an alt
233f0 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61  ernative.constra
23400 69 6e 74 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  int [ON CONFLICT
23410 7c 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75  |conflict resolu
23420 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 20  tion algorithm] 
23430 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 0a 74  to use during .t
23440 68 61 74 20 6f 6e 65 20 49 4e 53 45 52 54 20 63  hat one INSERT c
23450 6f 6d 6d 61 6e 64 2e 0a 46 6f 72 20 63 6f 6d 70  ommand..For comp
23460 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d  atibility with M
23470 79 53 51 4c 2c 20 5e 74 68 65 20 70 61 72 73 65  ySQL, ^the parse
23480 72 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65  r allows the use
23490 20 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b   of the.single k
234a0 65 79 77 6f 72 64 20 3c 61 20 68 72 65 66 3d 22  eyword <a href="
234b0 6c 61 6e 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d  lang_replace.htm
234c0 6c 22 3e 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61  l">REPLACE</a> a
234d0 73 20 61 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20  s an .alias for 
234e0 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41  "INSERT OR REPLA
234f0 43 45 22 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f  CE"...<p>^(The o
23500 70 74 69 6f 6e 61 6c 20 22 3c 69 3e 73 63 68 65  ptional "<i>sche
23510 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c  ma-name</i><b>.<
23520 2f 62 3e 22 20 70 72 65 66 69 78 20 6f 6e 20 74  /b>" prefix on t
23530 68 65 20 0a 3c 79 79 74 65 72 6d 3e 74 61 62 6c  he .<yyterm>tabl
23540 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a  e-name</yyterm>.
23550 69 73 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72  is supported for
23560 20 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52   top-level INSER
23570 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c  T statements onl
23580 79 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65  y.)^  ^The table
23590 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e   name must be.un
235a0 71 75 61 6c 69 66 69 65 64 20 66 6f 72 20 49 4e  qualified for IN
235b0 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20  SERT statements 
235c0 74 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69  that occur withi
235d0 6e 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  n [CREATE TRIGGE
235e0 52 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e  R] statements..^
235f0 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 22  Similarly, the "
23600 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20  DEFAULT VALUES" 
23610 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45  form of the INSE
23620 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  RT statement is 
23630 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f  supported for.to
23640 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
23650 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61  tatements only a
23660 6e 64 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52  nd not for INSER
23670 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  T statements wit
23680 68 69 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70  hin.triggers..<p
23690 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e  >..<p>The option
236a0 61 6c 20 22 41 53 20 3c 79 79 74 65 72 6d 3e 61  al "AS <yyterm>a
236b0 6c 69 61 73 3c 2f 79 79 74 65 72 6d 3e 22 20 70  lias</yyterm>" p
236c0 68 72 61 73 65 20 70 72 6f 76 69 64 65 73 20 61  hrase provides a
236d0 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 6e 61  n alternative.na
236e0 6d 65 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  me for the table
236f0 20 69 6e 74 6f 20 77 68 69 63 68 20 63 6f 6e 74   into which cont
23700 65 6e 74 20 69 73 20 62 65 69 6e 67 20 69 6e 73  ent is being ins
23710 65 72 74 65 64 2e 20 20 54 68 65 20 61 6c 69 61  erted.  The alia
23720 73 20 6e 61 6d 65 0a 63 61 6e 20 62 65 20 75 73  s name.can be us
23730 65 64 20 77 69 74 68 69 6e 20 57 48 45 52 45 20  ed within WHERE 
23740 61 6e 64 20 53 45 54 20 63 6c 61 75 73 65 73 20  and SET clauses 
23750 6f 66 20 74 68 65 20 5b 55 50 53 45 52 54 5d 2e  of the [UPSERT].
23760 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
23770 0a 5b 75 70 73 65 72 74 2d 63 6c 61 75 73 65 5d  .[upsert-clause]
23780 2c 20 74 68 65 6e 20 74 68 65 20 3c 79 79 74 65  , then the <yyte
23790 72 6d 3e 61 6c 69 61 73 3c 2f 79 79 74 65 72 6d  rm>alias</yyterm
237a0 3e 20 69 73 20 70 6f 69 6e 74 6c 65 73 73 2c 20  > is pointless, 
237b0 62 75 74 20 61 6c 73 6f 0a 68 61 72 6d 6c 65 73  but also.harmles
237c0 73 2e 0a 0a 3c 70 3e 53 65 65 20 74 68 65 20 73  s...<p>See the s
237d0 65 70 61 72 61 74 65 20 5b 55 50 53 45 52 54 5d  eparate [UPSERT]
237e0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
237f0 6f 72 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61  or the additiona
23800 6c 20 74 72 61 69 6c 69 6e 67 0a 73 79 6e 74 61  l trailing.synta
23810 78 20 74 68 61 74 20 63 61 6e 20 63 61 75 73 65  x that can cause
23820 20 61 6e 20 49 4e 53 45 52 54 20 74 6f 20 62 65   an INSERT to be
23830 68 61 76 65 20 61 73 20 61 6e 20 55 50 44 41 54  have as an UPDAT
23840 45 20 69 66 20 74 68 65 20 49 4e 53 45 52 54 20  E if the INSERT 
23850 77 6f 75 6c 64 0a 6f 74 68 65 72 77 69 73 65 20  would.otherwise 
23860 76 69 6f 6c 61 74 65 20 61 20 75 6e 69 71 75 65  violate a unique
23870 6e 65 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e  ness constraint.
23880 20 20 54 68 65 20 5b 75 70 73 65 72 74 20 63 6c    The [upsert cl
23890 61 75 73 65 5d 20 69 73 20 6e 6f 74 0a 61 6c 6c  ause] is not.all
238a0 6f 77 65 64 20 6f 6e 20 61 6e 20 22 49 4e 53 45  owed on an "INSE
238b0 52 54 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56  RT ... DEFAULT V
238c0 41 4c 55 45 53 22 2e 0a 0a 0a 3c 74 63 6c 3e 0a  ALUES"....<tcl>.
238d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
238e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
238f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53  ##############.S
23920 65 63 74 69 6f 6e 20 75 70 73 65 72 74 20 55 50  ection upsert UP
23930 53 45 52 54 20 7b 55 50 53 45 52 54 20 7b 75 70  SERT {UPSERT {up
23940 73 65 72 74 20 63 6c 61 75 73 65 7d 7d 0a 0a 52  sert clause}}..R
23950 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
23960 61 67 72 61 6d 20 75 70 73 65 72 74 2d 63 6c 61  agram upsert-cla
23970 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 55  use.</tcl>..<p>U
23980 50 53 45 52 54 20 69 73 20 61 20 73 70 65 63 69  PSERT is a speci
23990 61 6c 20 73 79 6e 74 61 78 20 61 64 64 69 74 69  al syntax additi
239a0 6f 6e 20 74 6f 20 5b 49 4e 53 45 52 54 5d 20 74  on to [INSERT] t
239b0 68 61 74 20 63 61 75 73 65 73 20 74 68 65 0a 49  hat causes the.I
239c0 4e 53 45 52 54 20 74 6f 20 62 65 68 61 76 65 20  NSERT to behave 
239d0 61 73 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f  as an [UPDATE] o
239e0 72 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65  r a no-op if the
239f0 20 49 4e 53 45 52 54 20 77 6f 75 6c 64 20 76 69   INSERT would vi
23a00 6f 6c 61 74 65 0a 61 20 75 6e 69 71 75 65 6e 65  olate.a uniquene
23a10 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 55  ss constraint..U
23a20 50 53 45 52 54 20 69 73 20 6e 6f 74 20 73 74 61  PSERT is not sta
23a30 6e 64 61 72 64 20 53 51 4c 2e 20 20 55 50 53 45  ndard SQL.  UPSE
23a40 52 54 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 6c  RT in SQLite fol
23a50 6c 6f 77 73 20 74 68 65 0a 73 79 6e 74 61 78 20  lows the.syntax 
23a60 65 73 74 61 62 6c 69 73 68 65 64 20 62 79 20 50  established by P
23a70 6f 73 74 67 72 65 53 51 4c 2e 0a 55 50 53 45 52  ostgreSQL..UPSER
23a80 54 20 73 79 6e 74 61 78 20 77 61 73 20 61 64 64  T syntax was add
23a90 65 64 20 74 6f 20 53 51 4c 69 74 65 20 77 69 74  ed to SQLite wit
23aa0 68 20 76 65 72 73 69 6f 6e 20 33 2e 32 34 2e 30  h version 3.24.0
23ab0 20 28 5b 64 61 74 65 6f 66 3a 33 2e 32 34 2e 30   ([dateof:3.24.0
23ac0 5d 29 2e 0a 0a 3c 70 3e 41 6e 20 55 50 53 45 52  ])...<p>An UPSER
23ad0 54 20 69 73 20 61 6e 20 6f 72 64 69 6e 61 72 79  T is an ordinary
23ae0 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d   [INSERT] statem
23af0 65 6e 74 20 74 68 61 74 20 69 73 20 66 6f 6c 6c  ent that is foll
23b00 6f 77 65 64 20 62 79 0a 74 68 65 20 73 70 65 63  owed by.the spec
23b10 69 61 6c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ial ON CONFLICT 
23b20 63 6c 61 75 73 65 20 73 68 6f 77 6e 20 61 62 6f  clause shown abo
23b30 76 65 2e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e 74  ve...<p>The synt
23b40 61 78 20 74 68 61 74 20 6f 63 63 75 72 73 20 69  ax that occurs i
23b50 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 22 4f  n between the "O
23b60 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61 6e 64 20  N CONFLICT" and 
23b70 22 44 4f 22 20 6b 65 79 77 6f 72 64 73 0a 69 73  "DO" keywords.is
23b80 20 63 61 6c 6c 65 64 20 74 68 65 20 22 63 6f 6e   called the "con
23b90 66 6c 69 63 74 20 74 61 72 67 65 74 22 2e 20 20  flict target".  
23ba0 54 68 65 20 63 6f 6e 66 6c 69 63 74 20 74 61 72  The conflict tar
23bb0 67 65 74 20 73 70 65 63 69 66 69 65 73 20 61 20  get specifies a 
23bc0 73 70 65 63 69 66 69 63 0a 75 6e 69 71 75 65 6e  specific.uniquen
23bd0 65 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 74  ess constraint t
23be0 68 61 74 20 77 69 6c 6c 20 74 72 69 67 67 65 72  hat will trigger
23bf0 20 74 68 65 20 75 70 73 65 72 74 2e 20 20 54 68   the upsert.  Th
23c00 65 20 63 6f 6e 66 6c 69 63 74 20 74 61 72 67 65  e conflict targe
23c10 74 0a 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  t.is required fo
23c20 72 20 44 4f 20 55 50 44 41 54 45 20 75 70 73 65  r DO UPDATE upse
23c30 72 74 73 2c 20 62 75 74 20 69 73 20 6f 70 74 69  rts, but is opti
23c40 6f 6e 61 6c 20 66 6f 72 20 44 4f 20 4e 4f 54 48  onal for DO NOTH
23c50 49 4e 47 2e 0a 41 20 44 4f 20 4e 4f 54 48 49 4e  ING..A DO NOTHIN
23c60 47 20 75 70 73 65 72 74 20 77 69 74 68 6f 75 74  G upsert without
23c70 20 61 20 63 6f 6e 66 6c 69 63 74 20 74 61 72 67   a conflict targ
23c80 65 74 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d  et works the sam
23c90 65 20 61 73 20 61 6e 0a 5b 4f 4e 20 43 4f 4e 46  e as an.[ON CONF
23ca0 4c 49 43 54 7c 49 4e 53 45 52 54 20 4f 52 20 49  LICT|INSERT OR I
23cb0 47 4e 4f 52 45 5d 2e 0a 0a 3c 70 3e 49 66 20 74  GNORE]...<p>If t
23cc0 68 65 20 69 6e 73 65 72 74 20 6f 70 65 72 61 74  he insert operat
23cd0 69 6f 6e 20 77 6f 75 6c 64 20 63 61 75 73 65 20  ion would cause 
23ce0 74 68 65 20 75 6e 69 71 75 65 6e 65 73 73 20 63  the uniqueness c
23cf0 6f 6e 73 74 72 61 69 6e 74 20 69 64 65 6e 74 69  onstraint identi
23d00 66 69 65 64 0a 62 79 20 74 68 65 20 63 6f 6e 66  fied.by the conf
23d10 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75  lict-target clau
23d20 73 65 20 74 6f 20 66 61 69 6c 2c 20 74 68 65 6e  se to fail, then
23d30 20 74 68 65 20 69 6e 73 65 72 74 20 69 73 20 6f   the insert is o
23d40 6d 69 74 74 65 64 20 61 6e 64 0a 65 69 74 68 65  mitted and.eithe
23d50 72 20 74 68 65 20 44 4f 20 4e 4f 54 48 49 4e 47  r the DO NOTHING
23d60 20 6f 72 20 44 4f 20 55 50 44 41 54 45 20 6f 70   or DO UPDATE op
23d70 65 72 61 74 69 6f 6e 20 69 73 20 70 65 72 66 6f  eration is perfo
23d80 72 6d 65 64 20 69 6e 73 74 65 61 64 2e 0a 49 6e  rmed instead..In
23d90 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 6d   the case of a m
23da0 75 6c 74 69 2d 72 6f 77 20 69 6e 73 65 72 74 2c  ulti-row insert,
23db0 20 74 68 69 73 20 64 65 63 69 73 69 6f 6e 20 69   this decision i
23dc0 73 20 6d 61 64 65 20 73 65 70 61 72 61 74 65 6c  s made separatel
23dd0 79 0a 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  y.for each row o
23de0 66 20 74 68 65 20 69 6e 73 65 72 74 2e 0a 0a 3c  f the insert...<
23df0 70 3e 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69  p>Column names i
23e00 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
23e10 73 20 6f 66 20 61 20 44 4f 20 55 50 44 41 54 45  s of a DO UPDATE
23e20 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6f 72   refer to the or
23e30 69 67 69 6e 61 6c 0a 75 6e 63 68 61 6e 67 65 64  iginal.unchanged
23e40 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
23e50 6c 75 6d 6e 2c 20 62 65 66 6f 72 65 20 74 68 65  lumn, before the
23e60 20 61 74 74 65 6d 70 74 65 64 20 49 4e 53 45 52   attempted INSER
23e70 54 2e 20 20 54 6f 20 75 73 65 20 74 68 65 0a 76  T.  To use the.v
23e80 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20  alue that would 
23e90 68 61 76 65 20 62 65 65 6e 20 69 6e 73 65 72 74  have been insert
23ea0 65 64 20 68 61 64 20 74 68 65 20 63 6f 6e 73 74  ed had the const
23eb0 72 61 69 6e 74 20 6e 6f 74 20 66 61 69 6c 65 64  raint not failed
23ec0 2c 0a 61 64 64 20 74 68 65 20 73 70 65 63 69 61  ,.add the specia
23ed0 6c 20 22 65 78 63 6c 75 64 65 64 2e 22 20 74 61  l "excluded." ta
23ee0 62 6c 65 20 71 75 61 6c 69 66 69 65 72 20 74 6f  ble qualifier to
23ef0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
23f00 2e 0a 0a 3c 70 3e 53 6f 6d 65 20 65 78 61 6d 70  ...<p>Some examp
23f10 6c 65 73 20 77 69 6c 6c 20 68 65 6c 70 20 69 6c  les will help il
23f20 6c 75 73 74 72 61 74 65 20 74 68 65 20 64 69 66  lustrate the dif
23f30 66 65 72 65 6e 63 65 3a 0a 0a 3c 62 6c 6f 63 6b  ference:..<block
23f40 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
23f50 54 45 20 54 41 42 4c 45 20 76 6f 63 61 62 75 6c  TE TABLE vocabul
23f60 61 72 79 28 77 6f 72 64 20 54 45 58 54 20 50 52  ary(word TEXT PR
23f70 49 4d 41 52 59 20 4b 45 59 2c 20 63 6f 75 6e 74  IMARY KEY, count
23f80 20 49 4e 54 20 44 45 46 41 55 4c 54 20 31 29 3b   INT DEFAULT 1);
23f90 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 76 6f 63  .INSERT INTO voc
23fa0 61 62 75 6c 61 72 79 28 77 6f 72 64 29 20 56 41  abulary(word) VA
23fb0 4c 55 45 53 28 27 6a 6f 76 69 61 6c 27 29 0a 20  LUES('jovial'). 
23fc0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 77 6f 72   ON CONFLICT(wor
23fd0 64 29 20 44 4f 20 55 50 44 41 54 45 20 53 45 54  d) DO UPDATE SET
23fe0 20 63 6f 75 6e 74 3d 63 6f 75 6e 74 2b 31 3b 0a   count=count+1;.
23ff0 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
24000 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 75 70 73 65  te>..<p>The upse
24010 72 74 20 61 62 6f 76 65 20 69 6e 73 65 72 74 73  rt above inserts
24020 20 74 68 65 20 6e 65 77 20 76 6f 63 61 62 75 6c   the new vocabul
24030 61 72 79 20 77 6f 72 64 20 22 6a 6f 76 69 61 6c  ary word "jovial
24040 22 20 69 66 20 74 68 61 74 0a 77 6f 72 64 20 69  " if that.word i
24050 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69 6e  s not already in
24060 20 74 68 65 20 64 69 63 74 69 6f 6e 61 72 79 2c   the dictionary,
24070 20 6f 72 20 69 66 20 69 74 20 69 73 20 61 6c 72   or if it is alr
24080 65 61 64 79 20 69 6e 20 74 68 65 0a 64 69 63 74  eady in the.dict
24090 69 6f 6e 61 72 79 2c 20 69 74 20 69 6e 63 72 65  ionary, it incre
240a0 6d 65 6e 74 73 20 74 68 65 20 63 6f 75 6e 74 65  ments the counte
240b0 72 2e 20 20 54 68 65 20 22 63 6f 75 6e 74 2b 31  r.  The "count+1
240c0 22 20 65 78 70 72 65 73 73 69 6f 6e 0a 63 6f 75  " expression.cou
240d0 6c 64 20 61 6c 73 6f 20 62 65 20 77 72 69 74 74  ld also be writt
240e0 65 6e 20 61 73 20 22 76 6f 63 61 62 75 6c 61 72  en as "vocabular
240f0 79 2e 63 6f 75 6e 74 22 2e 20 20 50 6f 73 74 67  y.count".  Postg
24100 72 65 53 51 4c 20 72 65 71 75 69 72 65 73 20 74  reSQL requires t
24110 68 65 0a 73 65 63 6f 6e 64 20 66 6f 72 6d 2c 20  he.second form, 
24120 62 75 74 20 53 51 4c 69 74 65 20 61 63 63 65 70  but SQLite accep
24130 74 73 20 65 69 74 68 65 72 2e 0a 0a 3c 62 6c 6f  ts either...<blo
24140 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
24150 45 41 54 45 20 54 41 42 4c 45 20 70 68 6f 6e 65  EATE TABLE phone
24160 62 6f 6f 6b 28 6e 61 6d 65 20 54 45 58 54 20 50  book(name TEXT P
24170 52 49 4d 41 52 59 20 4b 45 59 2c 20 70 68 6f 6e  RIMARY KEY, phon
24180 65 6e 75 6d 62 65 72 20 54 45 58 54 29 3b 0a 49  enumber TEXT);.I
24190 4e 53 45 52 54 20 49 4e 54 4f 20 70 68 6f 6e 65  NSERT INTO phone
241a0 62 6f 6f 6b 28 6e 61 6d 65 2c 70 68 6f 6e 65 6e  book(name,phonen
241b0 75 6d 62 65 72 29 20 56 41 4c 55 45 53 28 27 41  umber) VALUES('A
241c0 6c 69 63 65 27 2c 27 37 30 34 2d 35 35 35 2d 31  lice','704-555-1
241d0 32 31 32 27 29 0a 20 20 4f 4e 20 43 4f 4e 46 4c  212').  ON CONFL
241e0 49 43 54 28 6e 61 6d 65 29 20 44 4f 20 55 50 44  ICT(name) DO UPD
241f0 41 54 45 20 53 45 54 20 70 68 6f 6e 65 6e 75 6d  ATE SET phonenum
24200 62 65 72 3d 65 78 63 6c 75 64 65 64 2e 70 68 6f  ber=excluded.pho
24210 6e 65 6e 75 6d 62 65 72 3b 0a 3c 2f 70 72 65 3e  nenumber;.</pre>
24220 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
24230 70 3e 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20  p>In the second 
24240 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 65 78 70  example, the exp
24250 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 44  ression in the D
24260 4f 20 55 50 44 41 54 45 20 63 6c 61 75 73 65 20  O UPDATE clause 
24270 69 73 0a 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  is.of the form "
24280 65 78 63 6c 75 64 65 64 2e 70 68 6f 6e 65 6e 75  excluded.phonenu
24290 6d 62 65 72 22 2e 20 20 54 68 65 20 22 65 78 63  mber".  The "exc
242a0 6c 75 64 65 64 2e 22 20 70 72 65 66 69 78 20 63  luded." prefix c
242b0 61 75 73 65 73 20 74 68 65 0a 22 70 68 6f 6e 65  auses the."phone
242c0 6e 75 6d 62 65 72 22 20 74 6f 20 72 65 66 65 72  number" to refer
242d0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 66 6f   to the value fo
242e0 72 20 70 68 6f 6e 65 6e 75 6d 62 65 72 20 74 68  r phonenumber th
242f0 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  at would have be
24300 65 6e 0a 69 6e 73 65 72 74 65 64 20 68 61 64 20  en.inserted had 
24310 74 68 65 72 65 20 62 65 65 6e 20 6e 6f 20 63 6f  there been no co
24320 6e 66 6c 69 63 74 2e 20 20 48 65 6e 63 65 2c 20  nflict.  Hence, 
24330 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 74 68  the effect of th
24340 65 20 75 70 73 65 72 74 0a 69 73 20 74 6f 20 69  e upsert.is to i
24350 6e 73 65 72 74 20 61 20 70 68 6f 6e 65 6e 75 6d  nsert a phonenum
24360 62 65 72 20 6f 66 20 41 6c 69 63 65 20 69 66 20  ber of Alice if 
24370 6e 6f 6e 65 20 65 78 69 73 74 73 2c 20 6f 72 20  none exists, or 
24380 74 6f 20 6f 76 65 72 77 72 69 74 65 0a 61 6e 79  to overwrite.any
24390 20 70 72 69 6f 72 20 70 68 6f 6e 65 6e 75 6d 62   prior phonenumb
243a0 65 72 20 66 6f 72 20 41 6c 69 63 65 20 77 69 74  er for Alice wit
243b0 68 20 74 68 65 20 6e 65 77 20 6f 6e 65 2e 0a 0a  h the new one...
243c0 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65  <p>Note that the
243d0 20 44 4f 20 55 50 44 41 54 45 20 63 6c 61 75 73   DO UPDATE claus
243e0 65 20 61 63 74 73 20 6f 6e 6c 79 20 6f 6e 20 74  e acts only on t
243f0 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 0a 74 68  he single row.th
24400 61 74 20 65 78 70 65 72 69 65 6e 63 65 64 20 74  at experienced t
24410 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 65 72  he constraint er
24420 72 6f 72 20 64 75 72 69 6e 67 20 49 4e 53 45 52  ror during INSER
24430 54 2e 20 20 49 74 20 69 73 20 6e 6f 74 0a 6e 65  T.  It is not.ne
24440 63 65 73 73 61 72 79 20 74 6f 20 69 6e 63 6c 75  cessary to inclu
24450 64 65 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  de a WHERE claus
24460 65 20 74 68 61 74 20 72 65 73 74 72 69 63 74 69  e that restricti
24470 6f 6e 73 20 74 68 65 20 61 63 74 69 6f 6e 0a 74  ons the action.t
24480 6f 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 2e 20  o that one row. 
24490 20 54 68 65 20 6f 6e 6c 79 20 75 73 65 20 66 6f   The only use fo
244a0 72 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  r the WHERE clau
244b0 73 65 20 61 74 0a 74 68 65 20 65 6e 64 20 6f 66  se at.the end of
244c0 20 74 68 65 20 44 4f 20 55 50 44 41 54 45 20 69   the DO UPDATE i
244d0 73 20 74 6f 20 6f 70 74 69 6f 6e 61 6c 6c 79 20  s to optionally 
244e0 63 68 61 6e 67 65 20 74 68 65 20 44 4f 20 55 50  change the DO UP
244f0 44 41 54 45 0a 69 6e 74 6f 20 61 20 6e 6f 2d 6f  DATE.into a no-o
24500 70 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74  p depending on t
24510 68 65 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 2f  he original and/
24520 6f 72 20 6e 65 77 20 76 61 6c 75 65 73 2e 0a 46  or new values..F
24530 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c 62 6c  or example:..<bl
24540 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
24550 52 45 41 54 45 20 54 41 42 4c 45 20 70 68 6f 6e  REATE TABLE phon
24560 65 62 6f 6f 6b 32 28 0a 20 20 6e 61 6d 65 20 54  ebook2(.  name T
24570 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  EXT PRIMARY KEY,
24580 0a 20 20 70 68 6f 6e 65 6e 75 6d 62 65 72 20 54  .  phonenumber T
24590 45 58 54 2c 0a 20 20 76 61 6c 69 64 44 61 74 65  EXT,.  validDate
245a0 20 44 41 54 45 0a 29 3b 0a 49 4e 53 45 52 54 20   DATE.);.INSERT 
245b0 49 4e 54 4f 20 70 68 6f 6e 65 62 6f 6f 6b 32 28  INTO phonebook2(
245c0 6e 61 6d 65 2c 70 68 6f 6e 65 6e 75 6d 62 65 72  name,phonenumber
245d0 2c 76 61 6c 69 64 44 61 74 65 29 0a 20 20 56 41  ,validDate).  VA
245e0 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 27 37 30  LUES('Alice','70
245f0 34 2d 35 35 35 2d 31 32 31 32 27 2c 27 32 30 31  4-555-1212','201
24600 38 2d 30 35 2d 30 38 27 29 0a 20 20 4f 4e 20 43  8-05-08').  ON C
24610 4f 4e 46 4c 49 43 54 28 6e 61 6d 65 29 20 44 4f  ONFLICT(name) DO
24620 20 55 50 44 41 54 45 20 53 45 54 0a 20 20 20 20   UPDATE SET.    
24630 70 68 6f 6e 65 6e 75 6d 62 65 72 3d 65 78 63 6c  phonenumber=excl
24640 75 64 65 64 2e 70 68 6f 6e 65 6e 75 6d 62 65 72  uded.phonenumber
24650 2c 0a 20 20 20 20 76 61 6c 69 64 44 61 74 65 3d  ,.    validDate=
24660 65 78 63 6c 75 64 65 64 2e 76 61 6c 69 64 44 61  excluded.validDa
24670 74 65 0a 20 20 57 48 45 52 45 20 65 78 63 6c 75  te.  WHERE exclu
24680 64 65 64 2e 76 61 6c 69 64 44 61 74 65 3e 70 68  ded.validDate>ph
24690 6f 6e 65 62 6f 6f 6b 32 2e 76 61 6c 69 64 44 61  onebook2.validDa
246a0 74 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  te;.</pre></bloc
246b0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74  kquote>..<p>In t
246c0 68 69 73 20 6c 61 73 74 20 65 78 61 6d 70 6c 65  his last example
246d0 2c 20 74 68 65 20 70 68 6f 6e 65 62 6f 6f 6b 32  , the phonebook2
246e0 20 65 6e 74 72 79 20 69 73 20 6f 6e 6c 79 0a 75   entry is only.u
246f0 70 64 61 74 65 64 20 69 66 20 74 68 65 20 76 61  pdated if the va
24700 6c 69 64 44 61 74 65 20 66 6f 72 20 74 68 65 20  lidDate for the 
24710 6e 65 77 6c 79 20 69 6e 73 65 72 74 65 64 20 76  newly inserted v
24720 61 6c 75 65 20 69 73 0a 6e 65 77 65 72 20 74 68  alue is.newer th
24730 61 6e 20 74 68 65 20 65 6e 74 72 79 20 61 6c 72  an the entry alr
24740 65 61 64 79 20 69 6e 20 74 68 65 20 74 61 62 6c  eady in the tabl
24750 65 2e 20 20 49 66 20 74 68 65 20 74 61 62 6c 65  e.  If the table
24760 20 61 6c 72 65 61 64 79 0a 63 6f 6e 74 61 69 6e   already.contain
24770 73 20 61 6e 20 65 6e 74 72 79 20 77 69 74 68 20  s an entry with 
24780 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e  the same name an
24790 64 20 61 20 63 75 72 72 65 6e 74 20 76 61 6c 69  d a current vali
247a0 64 44 61 74 65 2c 0a 74 68 65 6e 20 74 68 65 20  dDate,.then the 
247b0 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 61 75  WHERE clause cau
247c0 73 65 73 20 74 68 65 20 44 4f 20 55 50 44 41 54  ses the DO UPDAT
247d0 45 20 74 6f 20 62 65 63 6f 6d 65 20 61 20 6e 6f  E to become a no
247e0 2d 6f 70 2e 0a 0a 3c 68 33 3e 4c 69 6d 69 74 61  -op...<h3>Limita
247f0 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 55  tions</h3>..<p>U
24800 50 53 45 52 54 20 64 6f 65 73 20 6e 6f 74 20 63  PSERT does not c
24810 75 72 72 65 6e 74 6c 79 20 77 6f 72 6b 20 66 6f  urrently work fo
24820 72 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65  r [virtual table
24830 73 5d 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  s]....<tcl>.####
24840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24880 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
24890 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  on {ON CONFLICT 
248a0 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74  clause} conflict
248b0 20 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75   {{conflict clau
248c0 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54  se} {ON CONFLICT
248d0 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  }}..RecursiveBub
248e0 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c  bleDiagram confl
248f0 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c  ict-clause.</tcl
24900 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e  >..<p>The ON CON
24910 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73 20  FLICT clause is 
24920 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 65  a.non-standard e
24930 78 74 65 6e 73 69 6f 6e 20 73 70 65 63 69 66 69  xtension specifi
24940 63 20 74 6f 20 53 51 4c 69 74 65 20 0a 74 68 61  c to SQLite .tha
24950 74 20 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20  t can appear in 
24960 6d 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63  many other SQL c
24970 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67  ommands..It is g
24980 69 76 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63  iven its own sec
24990 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63  tion in this doc
249a0 75 6d 65 6e 74 20 62 65 63 61 75 73 65 20 69 74  ument because it
249b0 20 69 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20   is not.part of 
249c0 73 74 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64  standard SQL and
249d0 20 74 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74   therefore might
249e0 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72   not be familiar
249f0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e  .</p>..<p>The ON
24a00 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
24a10 20 64 65 73 63 72 69 62 65 64 20 68 65 72 65 20   described here 
24a20 68 61 73 20 62 65 65 6e 20 61 20 70 61 72 74 20  has been a part 
24a30 6f 66 0a 53 51 4c 69 74 65 20 73 69 6e 63 65 20  of.SQLite since 
24a40 62 65 66 6f 72 65 20 76 65 72 73 69 6f 6e 20 33  before version 3
24a50 2e 30 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33 2e  .0.0 ([dateof:3.
24a60 30 2e 30 5d 29 2e 20 20 54 68 65 20 70 68 72 61  0.0]).  The phra
24a70 73 65 0a 22 4f 4e 26 6e 62 73 70 3b 43 4f 4e 46  se."ON&nbsp;CONF
24a80 4c 49 43 54 22 20 69 73 20 61 6c 73 6f 20 70 61  LICT" is also pa
24a90 72 74 20 6f 66 20 5b 55 50 53 45 52 54 5d 2c 20  rt of [UPSERT], 
24aa0 77 68 69 63 68 20 69 73 20 61 6e 20 65 78 74 65  which is an exte
24ab0 6e 73 69 6f 6e 0a 74 6f 20 5b 49 4e 53 45 52 54  nsion.to [INSERT
24ac0 5d 20 61 64 64 65 64 20 69 6e 20 76 65 72 73 69  ] added in versi
24ad0 6f 6e 20 33 2e 32 34 2e 30 20 28 5b 64 61 74 65  on 3.24.0 ([date
24ae0 6f 66 3a 33 2e 32 34 2e 30 5d 29 2e 20 20 44 6f  of:3.24.0]).  Do
24af0 20 6e 6f 74 0a 63 6f 6e 66 75 73 65 20 74 68 65   not.confuse the
24b00 73 65 20 74 77 6f 20 73 65 70 61 72 61 74 65 20  se two separate 
24b10 75 73 65 73 20 6f 66 20 74 68 65 20 22 4f 4e 26  uses of the "ON&
24b20 6e 62 73 70 3b 43 4f 4e 46 4c 49 43 54 22 20 70  nbsp;CONFLICT" p
24b30 68 72 61 73 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20  hrase...<p>^The 
24b40 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 4f  syntax for the O
24b50 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
24b60 65 20 69 73 20 61 73 20 73 68 6f 77 6e 20 61 62  e is as shown ab
24b70 6f 76 65 20 66 6f 72 0a 74 68 65 20 43 52 45 41  ove for.the CREA
24b80 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  TE TABLE command
24b90 2e 20 20 5e 46 6f 72 20 74 68 65 20 49 4e 53 45  .  ^For the INSE
24ba0 52 54 20 61 6e 64 0a 55 50 44 41 54 45 20 63 6f  RT and.UPDATE co
24bb0 6d 6d 61 6e 64 73 2c 20 74 68 65 20 6b 65 79 77  mmands, the keyw
24bc0 6f 72 64 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43  ords "ON CONFLIC
24bd0 54 22 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  T" are replaced 
24be0 62 79 20 22 4f 52 22 20 73 6f 20 74 68 61 74 0a  by "OR" so that.
24bf0 74 68 65 20 73 79 6e 74 61 78 20 72 65 61 64 73  the syntax reads
24c00 20 6d 6f 72 65 20 6e 61 74 75 72 61 6c 6c 79 2e   more naturally.
24c10 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69    For example, i
24c20 6e 73 74 65 61 64 20 6f 66 0a 22 49 4e 53 45 52  nstead of."INSER
24c30 54 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47  T ON CONFLICT IG
24c40 4e 4f 52 45 22 20 77 65 20 68 61 76 65 20 22 49  NORE" we have "I
24c50 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 22  NSERT OR IGNORE"
24c60 2e 0a 54 68 65 20 6b 65 79 77 6f 72 64 73 20 63  ..The keywords c
24c70 68 61 6e 67 65 20 62 75 74 20 74 68 65 20 6d 65  hange but the me
24c80 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 63 6c 61  aning of the cla
24c90 75 73 65 20 69 73 20 74 68 65 20 73 61 6d 65 0a  use is the same.
24ca0 65 69 74 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a  either way.</p>.
24cb0 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c  .<p>The ON CONFL
24cc0 49 43 54 20 63 6c 61 75 73 65 20 61 70 70 6c 69  ICT clause appli
24cd0 65 73 20 74 6f 20 5b 55 4e 49 51 55 45 5d 2c 20  es to [UNIQUE], 
24ce0 5b 4e 4f 54 20 4e 55 4c 4c 5d 2c 0a 5b 43 48 45  [NOT NULL],.[CHE
24cf0 43 4b 5d 2c 20 61 6e 64 20 5b 50 52 49 4d 41 52  CK], and [PRIMAR
24d00 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e  Y KEY] constrain
24d10 74 73 2e 0a 54 68 65 20 4f 4e 20 43 4f 4e 46 4c  ts..The ON CONFL
24d20 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 20 64 6f  ICT algorithm do
24d30 65 73 20 6e 6f 74 0a 61 70 70 6c 79 20 74 6f 20  es not.apply to 
24d40 5b 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e  [FOREIGN KEY con
24d50 73 74 72 61 69 6e 74 73 5d 2e 0a 54 68 65 72 65  straints]..There
24d60 20 61 72 65 20 66 69 76 65 20 63 6f 6e 66 6c 69   are five confli
24d70 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
24d80 67 6f 72 69 74 68 6d 20 63 68 6f 69 63 65 73 3a  gorithm choices:
24d90 0a 52 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54  .ROLLBACK, ABORT
24da0 2c 20 46 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20  , FAIL, IGNORE, 
24db0 61 6e 64 20 52 45 50 4c 41 43 45 2e 0a 5e 54 68  and REPLACE..^Th
24dc0 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69  e default confli
24dd0 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
24de0 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54  gorithm is ABORT
24df0 2e 20 20 54 68 69 73 0a 69 73 20 77 68 61 74 20  .  This.is what 
24e00 74 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a  they mean:</p>..
24e10 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c  <dl>.<dt><b>ROLL
24e20 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  BACK</b></dt>.<d
24e30 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61  d><p> ^When an a
24e40 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72  pplicable constr
24e50 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
24e60 63 63 75 72 73 2c 20 74 68 65 20 52 4f 4c 4c 42  ccurs, the ROLLB
24e70 41 43 4b 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ACK.resolution a
24e80 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20  lgorithm aborts 
24e90 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20  the current SQL 
24ea0 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 0a 61  statement with.a
24eb0 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  n SQLITE_CONSTRA
24ec0 49 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 72 6f  INT error and ro
24ed0 6c 6c 73 20 62 61 63 6b 20 74 68 65 20 63 75 72  lls back the cur
24ee0 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
24ef0 2e 0a 5e 49 66 20 6e 6f 20 74 72 61 6e 73 61 63  ..^If no transac
24f00 74 69 6f 6e 20 69 73 0a 61 63 74 69 76 65 20 28  tion is.active (
24f10 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 69  other than the i
24f20 6d 70 6c 69 65 64 20 74 72 61 6e 73 61 63 74 69  mplied transacti
24f30 6f 6e 20 74 68 61 74 20 69 73 20 63 72 65 61 74  on that is creat
24f40 65 64 20 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d  ed on every.comm
24f50 61 6e 64 29 20 74 68 65 6e 20 74 68 65 20 52 4f  and) then the RO
24f60 4c 4c 42 41 43 4b 20 72 65 73 6f 6c 75 74 69 6f  LLBACK resolutio
24f70 6e 20 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b  n algorithm work
24f80 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
24f90 65 0a 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68  e.ABORT algorith
24fa0 6d 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  m.</p></dd>..<dt
24fb0 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64  ><b>ABORT</b></d
24fc0 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e  t>.<dd><p> ^When
24fd0 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63   an applicable c
24fe0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
24ff0 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
25000 41 42 4f 52 54 0a 72 65 73 6f 6c 75 74 69 6f 6e  ABORT.resolution
25010 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74   algorithm abort
25020 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51  s the current SQ
25030 4c 20 73 74 61 74 65 6d 65 6e 74 0a 77 69 74 68  L statement.with
25040 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54   an SQLITE_CONST
25050 52 41 49 4e 54 20 65 72 72 6f 72 20 61 6e 64 20  RAINT error and 
25060 62 61 63 6b 73 20 6f 75 74 20 61 6e 79 20 63 68  backs out any ch
25070 61 6e 67 65 73 0a 6d 61 64 65 20 62 79 20 74 68  anges.made by th
25080 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74  e current SQL st
25090 61 74 65 6d 65 6e 74 3b 20 62 75 74 20 63 68 61  atement; but cha
250a0 6e 67 65 73 20 63 61 75 73 65 64 0a 62 79 20 70  nges caused.by p
250b0 72 69 6f 72 20 53 51 4c 20 73 74 61 74 65 6d 65  rior SQL stateme
250c0 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  nts within the s
250d0 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ame transaction 
250e0 61 72 65 20 70 72 65 73 65 72 76 65 64 20 61 6e  are preserved an
250f0 64 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f  d the.transactio
25100 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69 76 65  n remains active
25110 2e 0a 54 68 69 73 20 69 73 20 74 68 65 20 64 65  ..This is the de
25120 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72 20 61  fault behavior a
25130 6e 64 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  nd the behavior 
25140 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
25150 20 53 51 4c 0a 73 74 61 6e 64 61 72 64 2e 3c 2f   SQL.standard.</
25160 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e  p></dd>..<dt><b>
25170 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  FAIL</b></dt>.<d
25180 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61  d><p> ^When an a
25190 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72  pplicable constr
251a0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
251b0 63 63 75 72 73 2c 20 74 68 65 20 46 41 49 4c 0a  ccurs, the FAIL.
251c0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
251d0 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20  ithm aborts the 
251e0 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
251f0 65 6d 65 6e 74 20 77 69 74 68 20 61 6e 0a 53 51  ement with an.SQ
25200 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
25210 65 72 72 6f 72 2e 20 20 5e 42 75 74 20 74 68 65  error.  ^But the
25220 20 46 41 49 4c 20 72 65 73 6f 6c 75 74 69 6f 6e   FAIL resolution
25230 20 64 6f 65 73 20 6e 6f 74 0a 62 61 63 6b 20 6f   does not.back o
25240 75 74 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ut prior changes
25250 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74   of the SQL stat
25260 65 6d 65 6e 74 20 74 68 61 74 20 66 61 69 6c 65  ement that faile
25270 64 20 6e 6f 72 20 64 6f 65 73 0a 69 74 20 65 6e  d nor does.it en
25280 64 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  d the transactio
25290 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c  n..^For example,
252a0 20 69 66 20 61 6e 20 55 50 44 41 54 45 0a 73 74   if an UPDATE.st
252b0 61 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65  atement encounte
252c0 72 65 64 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  red a constraint
252d0 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68   violation on th
252e0 65 20 31 30 30 74 68 20 72 6f 77 20 74 68 61 74  e 100th row that
252f0 0a 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  .it attempts to 
25300 75 70 64 61 74 65 2c 20 74 68 65 6e 20 74 68 65  update, then the
25310 20 66 69 72 73 74 20 39 39 20 72 6f 77 20 63 68   first 99 row ch
25320 61 6e 67 65 73 20 61 72 65 20 70 72 65 73 65 72  anges are preser
25330 76 65 64 0a 62 75 74 20 63 68 61 6e 67 65 73 20  ved.but changes 
25340 74 6f 20 72 6f 77 73 20 31 30 30 20 61 6e 64 20  to rows 100 and 
25350 62 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63  beyond never occ
25360 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ur.</p></dd>..<d
25370 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c  t><b>IGNORE</b><
25380 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68  /dt>.<dd><p> ^Wh
25390 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65  en an applicable
253a0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
253b0 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74  ation occurs, .t
253c0 68 65 20 49 47 4e 4f 52 45 20 72 65 73 6f 6c 75  he IGNORE resolu
253d0 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 73  tion algorithm s
253e0 6b 69 70 73 20 74 68 65 20 6f 6e 65 20 72 6f 77  kips the one row
253f0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74   that contains.t
25400 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
25410 6f 6c 61 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 74  olation and cont
25420 69 6e 75 65 73 20 70 72 6f 63 65 73 73 69 6e 67  inues processing
25430 20 73 75 62 73 65 71 75 65 6e 74 20 72 6f 77 73   subsequent rows
25440 0a 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74  .of the SQL stat
25450 65 6d 65 6e 74 20 61 73 20 69 66 20 6e 6f 74 68  ement as if noth
25460 69 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67 2e 0a  ing went wrong..
25470 4f 74 68 65 72 20 72 6f 77 73 20 62 65 66 6f 72  Other rows befor
25480 65 20 61 6e 64 20 61 66 74 65 72 20 74 68 65 20  e and after the 
25490 72 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e  row that.contain
254a0 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
254b0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
254c0 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61  inserted or upda
254d0 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e  ted.normally. ^N
254e0 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  o error is retur
254f0 6e 65 64 20 77 68 65 6e 20 74 68 65 20 49 47 4e  ned when the IGN
25500 4f 52 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ORE conflict res
25510 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68  olution.algorith
25520 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f  m is used.</p></
25530 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c  dd>..<dt><b>REPL
25540 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ACE</b></dt>.<dd
25550 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 20 5b 55 4e  ><p> ^When a [UN
25560 49 51 55 45 5d 20 6f 72 20 5b 50 52 49 4d 41 52  IQUE] or [PRIMAR
25570 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e  Y KEY] constrain
25580 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
25590 72 73 2c 20 0a 74 68 65 20 52 45 50 4c 41 43 45  rs, .the REPLACE
255a0 20 61 6c 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74   algorithm.delet
255b0 65 73 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20  es pre-existing 
255c0 72 6f 77 73 20 74 68 61 74 20 61 72 65 20 63 61  rows that are ca
255d0 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72  using the constr
255e0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70  aint violation.p
255f0 72 69 6f 72 20 74 6f 20 69 6e 73 65 72 74 69 6e  rior to insertin
25600 67 20 6f 72 20 75 70 64 61 74 69 6e 67 20 74 68  g or updating th
25610 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 6e  e current row an
25620 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f  d the command co
25630 6e 74 69 6e 75 65 73 20 0a 65 78 65 63 75 74 69  ntinues .executi
25640 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66  ng normally..^If
25650 20 61 20 5b 4e 4f 54 20 4e 55 4c 4c 5d 20 63 6f   a [NOT NULL] co
25660 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
25670 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52  on occurs, the R
25680 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 0a  EPLACE conflict.
25690 72 65 73 6f 6c 75 74 69 6f 6e 20 72 65 70 6c 61  resolution repla
256a0 63 65 73 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c  ces the NULL val
256b0 75 65 20 77 69 74 68 0a 74 68 65 20 64 65 66 61  ue with.the defa
256c0 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ult value for th
256d0 61 74 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66  at column, or if
256e0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20   the column has 
256f0 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65  no default.value
25700 2c 20 74 68 65 6e 20 74 68 65 20 41 42 4f 52 54  , then the ABORT
25710 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73   algorithm is us
25720 65 64 2e 0a 5e 49 66 20 61 20 5b 43 48 45 43 4b  ed..^If a [CHECK
25730 5d 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  ] constraint vio
25740 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
25750 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c  he REPLACE confl
25760 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61  ict resolution.a
25770 6c 67 6f 72 69 74 68 6d 20 61 6c 77 61 79 73 20  lgorithm always 
25780 77 6f 72 6b 73 20 6c 69 6b 65 20 41 42 4f 52 54  works like ABORT
25790 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20  .</p>..<p>^When 
257a0 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66  the REPLACE conf
257b0 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
257c0 73 74 72 61 74 65 67 79 20 64 65 6c 65 74 65 73  strategy deletes
257d0 20 72 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74   rows in order t
257e0 6f 0a 73 61 74 69 73 66 79 20 61 20 63 6f 6e 73  o.satisfy a cons
257f0 74 72 61 69 6e 74 2c 20 5b 43 52 45 41 54 45 20  traint, [CREATE 
25800 54 52 49 47 47 45 52 20 7c 20 64 65 6c 65 74 65  TRIGGER | delete
25810 20 74 72 69 67 67 65 72 73 5d 20 66 69 72 65 20   triggers] fire 
25820 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b  if and only if.[
25830 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65  recursive_trigge
25840 72 73 20 70 72 61 67 6d 61 20 7c 20 72 65 63 75  rs pragma | recu
25850 72 73 69 76 65 20 74 72 69 67 67 65 72 73 5d 20  rsive triggers] 
25860 61 72 65 20 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e  are enabled.</p>
25870 0a 0a 3c 70 3e 5e 54 68 65 20 5b 73 71 6c 69 74  ..<p>^The [sqlit
25880 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 20 7c  e3_update_hook |
25890 20 75 70 64 61 74 65 20 68 6f 6f 6b 5d 20 69 73   update hook] is
258a0 20 6e 6f 74 20 69 6e 76 6f 6b 65 64 20 66 6f 72   not invoked for
258b0 20 72 6f 77 73 20 74 68 61 74 0a 61 72 65 20 64   rows that.are d
258c0 65 6c 65 74 65 64 20 62 79 20 74 68 65 20 52 45  eleted by the RE
258d0 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72  PLACE conflict r
258e0 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65  esolution strate
258f0 67 79 2e 20 20 5e 4e 6f 72 20 64 6f 65 73 0a 52  gy.  ^Nor does.R
25900 45 50 4c 41 43 45 20 69 6e 63 72 65 6d 65 6e 74  EPLACE increment
25910 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68   the [sqlite3_ch
25920 61 6e 67 65 73 20 7c 20 63 68 61 6e 67 65 20 63  anges | change c
25930 6f 75 6e 74 65 72 5d 2e 0a 54 68 65 20 65 78 63  ounter]..The exc
25940 65 70 74 69 6f 6e 61 6c 20 62 65 68 61 76 69 6f  eptional behavio
25950 72 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68  rs defined in th
25960 69 73 20 70 61 72 61 67 72 61 70 68 20 6d 69 67  is paragraph mig
25970 68 74 20 63 68 61 6e 67 65 20 0a 69 6e 20 61 20  ht change .in a 
25980 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 2e 3c  future release.<
25990 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54  /p>.</dl>..<p>^T
259a0 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65  he algorithm spe
259b0 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 4f 52  cified in the OR
259c0 20 63 6c 61 75 73 65 20 6f 66 20 61 6e 20 49 4e   clause of an IN
259d0 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 0a 6f  SERT or UPDATE.o
259e0 76 65 72 72 69 64 65 73 20 61 6e 79 20 61 6c 67  verrides any alg
259f0 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64  orithm specified
25a00 20 69 6e 20 61 20 43 52 45 41 54 45 20 54 41 42   in a CREATE TAB
25a10 4c 45 2e 0a 5e 49 66 20 6e 6f 20 61 6c 67 6f 72  LE..^If no algor
25a20 69 74 68 6d 20 69 73 20 73 70 65 63 69 66 69 65  ithm is specifie
25a30 64 20 61 6e 79 77 68 65 72 65 2c 20 74 68 65 20  d anywhere, the 
25a40 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20  ABORT algorithm 
25a50 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74  is used.</p>..<t
25a60 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
25a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25a90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25aa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25ab0 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 49 4e 44  ##.Section REIND
25ac0 45 58 20 72 65 69 6e 64 65 78 20 52 45 49 4e 44  EX reindex REIND
25ad0 45 58 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  EX..RecursiveBub
25ae0 62 6c 65 44 69 61 67 72 61 6d 20 72 65 69 6e 64  bleDiagram reind
25af0 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ex-stmt.</tcl>..
25b00 3c 70 3e 5e 54 68 65 20 52 45 49 4e 44 45 58 20  <p>^The REINDEX 
25b10 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20  command is used 
25b20 74 6f 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65  to delete and re
25b30 63 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 66  create indices f
25b40 72 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54 68 69  rom scratch..Thi
25b50 73 20 69 73 20 75 73 65 66 75 6c 20 77 68 65 6e  s is useful when
25b60 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   the definition 
25b70 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  of a collation s
25b80 65 71 75 65 6e 63 65 20 68 61 73 20 63 68 61 6e  equence has chan
25b90 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  ged..</p>..<p>^I
25ba0 66 20 74 68 65 20 52 45 49 4e 44 45 58 20 6b 65  f the REINDEX ke
25bb0 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 66 6f 6c  yword is not fol
25bc0 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c 6c 61  lowed by a colla
25bd0 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6f 72  tion-sequence or
25be0 20 64 61 74 61 62 61 73 65 20 0a 6f 62 6a 65 63   database .objec
25bf0 74 20 69 64 65 6e 74 69 66 69 65 72 2c 20 74 68  t identifier, th
25c00 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69  en all indices i
25c10 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
25c20 61 74 61 62 61 73 65 73 20 61 72 65 20 72 65 62  atabases are reb
25c30 75 69 6c 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  uilt...<p>^If th
25c40 65 20 52 45 49 4e 44 45 58 20 6b 65 79 77 6f 72  e REINDEX keywor
25c50 64 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  d is followed by
25c60 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71   a collation-seq
25c70 75 65 6e 63 65 20 6e 61 6d 65 2c 20 74 68 65 6e  uence name, then
25c80 0a 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20  .all indices in 
25c90 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
25ca0 61 62 61 73 65 73 20 74 68 61 74 20 75 73 65 20  abases that use 
25cb0 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74  the named collat
25cc0 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 0a 61 72  ion sequences.ar
25cd0 65 20 72 65 63 72 65 61 74 65 64 2e 20 0a 0a 3c  e recreated. ..<
25ce0 70 3e 5e 4f 72 2c 20 69 66 20 74 68 65 20 61 72  p>^Or, if the ar
25cf0 67 75 6d 65 6e 74 20 61 74 74 61 63 68 65 64 20  gument attached 
25d00 74 6f 20 74 68 65 20 52 45 49 4e 44 45 58 20 69  to the REINDEX i
25d10 64 65 6e 74 69 66 69 65 73 20 61 20 73 70 65 63  dentifies a spec
25d20 69 66 69 63 20 0a 64 61 74 61 62 61 73 65 20 74  ific .database t
25d30 61 62 6c 65 2c 20 74 68 65 6e 20 61 6c 6c 20 69  able, then all i
25d40 6e 64 69 63 65 73 20 61 74 74 61 63 68 65 64 20  ndices attached 
25d50 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
25d60 74 61 62 6c 65 20 61 72 65 20 72 65 62 75 69 6c  table are rebuil
25d70 74 2e 20 0a 5e 49 66 20 69 74 20 69 64 65 6e 74  t. .^If it ident
25d80 69 66 69 65 73 20 61 20 73 70 65 63 69 66 69 63  ifies a specific
25d90 20 64 61 74 61 62 61 73 65 20 69 6e 64 65 78 2c   database index,
25da0 20 74 68 65 6e 20 6a 75 73 74 20 74 68 61 74 20   then just that 
25db0 69 6e 64 65 78 20 69 73 20 72 65 63 72 65 61 74  index is recreat
25dc0 65 64 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 61 20 63  ed...<p>^For a c
25dd0 6f 6d 6d 61 6e 64 20 6f 66 20 74 68 65 20 66 6f  ommand of the fo
25de0 72 6d 20 22 52 45 49 4e 44 45 58 20 3c 69 3e 6e  rm "REINDEX <i>n
25df0 61 6d 65 3c 2f 69 3e 22 2c 20 61 20 6d 61 74 63  ame</i>", a matc
25e00 68 0a 61 67 61 69 6e 73 74 20 3c 79 79 74 65 72  h.against <yyter
25e10 6d 3e 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65  m>collation-name
25e20 3c 2f 79 79 74 65 72 6d 3e 20 74 61 6b 65 73 20  </yyterm> takes 
25e30 70 72 65 63 65 64 65 6e 63 65 20 6f 76 65 72 20  precedence over 
25e40 61 20 6d 61 74 63 68 0a 61 67 61 69 6e 73 74 20  a match.against 
25e50 3c 79 79 74 65 72 6d 3e 69 6e 64 65 78 2d 6e 61  <yyterm>index-na
25e60 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6f 72 20 3c  me</yyterm> or <
25e70 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d  yyterm>table-nam
25e80 65 3c 2f 79 79 74 65 72 6d 3e 2e 0a 54 68 69 73  e</yyterm>..This
25e90 20 61 6d 62 69 67 75 69 74 79 20 69 6e 20 74 68   ambiguity in th
25ea0 65 20 73 79 6e 74 61 78 20 6d 61 79 20 62 65 20  e syntax may be 
25eb0 61 76 6f 69 64 65 64 20 62 79 20 61 6c 77 61 79  avoided by alway
25ec0 73 20 73 70 65 63 69 66 79 69 6e 67 20 61 0a 3c  s specifying a.<
25ed0 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61  yyterm>schema-na
25ee0 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 77 68 65 6e  me</yyterm> when
25ef0 20 72 65 69 6e 64 65 78 69 6e 67 20 61 20 73 70   reindexing a sp
25f00 65 63 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20  ecific table or 
25f10 69 6e 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23  index...<tcl>.##
25f20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25f60 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
25f70 63 74 69 6f 6e 20 52 45 50 4c 41 43 45 20 72 65  ction REPLACE re
25f80 70 6c 61 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c  place REPLACE..<
25f90 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  /tcl>..<p>^The R
25fa0 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69  EPLACE command i
25fb0 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
25fc0 68 65 20 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  he "[ON CONFLICT
25fd0 20 7c 20 49 4e 53 45 52 54 20 4f 52 20 52 45 50   | INSERT OR REP
25fe0 4c 41 43 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f  LACE]".variant o
25ff0 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 63  f the [INSERT] c
26000 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68 69 73 20 61  ommand.  .This a
26010 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64 65 64  lias is provided
26020 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69   for compatibili
26030 74 79 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74  ty other SQL dat
26040 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e 20 20  abase engines.  
26050 53 65 65 20 74 68 65 20 0a 5b 49 4e 53 45 52 54  See the .[INSERT
26060 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65  ] command docume
26070 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69  ntation for addi
26080 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
26090 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e  on.</p>  ..<tcl>
260a0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
260b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
260c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
260d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
260e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
260f0 0a 53 65 63 74 69 6f 6e 20 7b 57 49 54 48 20 63  .Section {WITH c
26100 6c 61 75 73 65 7d 20 77 69 74 68 20 7b 7b 63 6f  lause} with {{co
26110 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
26120 73 73 69 6f 6e 73 7d 20 57 49 54 48 7d 0a 0a 52  ssions} WITH}..R
26130 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
26140 61 67 72 61 6d 20 77 69 74 68 2d 63 6c 61 75 73  agram with-claus
26150 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d  e.</tcl>..<p>Com
26160 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73  mon Table Expres
26170 73 69 6f 6e 73 20 6f 72 20 43 54 45 73 20 61 63  sions or CTEs ac
26180 74 20 6c 69 6b 65 20 74 65 6d 70 6f 72 61 72 79  t like temporary
26190 20 5b 76 69 65 77 73 5d 20 74 68 61 74 20 65 78   [views] that ex
261a0 69 73 74 0a 6f 6e 6c 79 20 66 6f 72 20 74 68 65  ist.only for the
261b0 20 64 75 72 61 74 69 6f 6e 20 6f 66 20 61 20 73   duration of a s
261c0 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
261d0 65 6e 74 2e 20 20 54 68 65 72 65 20 61 72 65 20  ent.  There are 
261e0 74 77 6f 20 6b 69 6e 64 73 20 6f 66 0a 63 6f 6d  two kinds of.com
261f0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
26200 73 69 6f 6e 73 3a 20 22 6f 72 64 69 6e 61 72 79  sions: "ordinary
26210 22 20 61 6e 64 20 22 72 65 63 75 72 73 69 76 65  " and "recursive
26220 22 2e 20 4f 72 64 69 6e 61 72 79 20 0a 63 6f 6d  ". Ordinary .com
26230 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
26240 73 69 6f 6e 73 20 61 72 65 20 68 65 6c 70 66 75  sions are helpfu
26250 6c 20 66 6f 72 20 6d 61 6b 69 6e 67 0a 71 75 65  l for making.que
26260 72 69 65 73 20 65 61 73 69 65 72 20 74 6f 20 75  ries easier to u
26270 6e 64 65 72 73 74 61 6e 64 20 62 79 20 66 61 63  nderstand by fac
26280 74 6f 72 69 6e 67 0a 73 75 62 71 75 65 72 69 65  toring.subquerie
26290 73 20 6f 75 74 20 6f 66 20 74 68 65 20 6d 61 69  s out of the mai
262a0 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  n SQL statement.
262b0 0a 52 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f  .Recursive commo
262c0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
262d0 6f 6e 73 0a 70 72 6f 76 69 64 65 20 74 68 65 20  ons.provide the 
262e0 61 62 69 6c 69 74 79 20 74 6f 20 64 6f 20 68 69  ability to do hi
262f0 65 72 61 72 63 68 69 63 61 6c 20 6f 72 0a 72 65  erarchical or.re
26300 63 75 72 73 69 76 65 20 71 75 65 72 69 65 73 20  cursive queries 
26310 6f 66 20 74 72 65 65 73 20 61 6e 64 20 67 72 61  of trees and gra
26320 70 68 73 2c 20 61 20 63 61 70 61 62 69 6c 69 74  phs, a capabilit
26330 79 0a 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 74  y.that is not ot
26340 68 65 72 77 69 73 65 20 61 76 61 69 6c 61 62 6c  herwise availabl
26350 65 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e  e in the SQL lan
26360 67 75 61 67 65 2e 0a 0a 3c 70 3e 41 6c 6c 20 63  guage...<p>All c
26370 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
26380 65 73 73 69 6f 6e 73 20 28 6f 72 64 69 6e 61 72  essions (ordinar
26390 79 20 61 6e 64 20 72 65 63 75 72 73 69 76 65 29  y and recursive)
263a0 20 61 72 65 20 0a 63 72 65 61 74 65 64 20 62 79   are .created by
263b0 20 70 72 65 70 65 6e 64 69 6e 67 20 61 20 57 49   prepending a WI
263c0 54 48 20 63 6c 61 75 73 65 20 69 6e 20 66 72 6f  TH clause in fro
263d0 6e 74 20 6f 66 20 61 20 5b 53 45 4c 45 43 54 5d  nt of a [SELECT]
263e0 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 5b 44 45 4c  , [INSERT], [DEL
263f0 45 54 45 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45  ETE],.or [UPDATE
26400 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 20  ] statement.  A 
26410 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75  single WITH clau
26420 73 65 20 63 61 6e 20 73 70 65 63 69 66 79 20 6f  se can specify o
26430 6e 65 20 6f 72 20 6d 6f 72 65 0a 63 6f 6d 6d 6f  ne or more.commo
26440 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
26450 6f 6e 73 2c 20 73 6f 6d 65 20 6f 66 20 77 68 69  ons, some of whi
26460 63 68 20 61 72 65 20 6f 72 64 69 6e 61 72 79 20  ch are ordinary 
26470 61 6e 64 20 73 6f 6d 65 20 6f 66 20 77 68 69 63  and some of whic
26480 68 0a 61 72 65 20 72 65 63 75 72 73 69 76 65 2e  h.are recursive.
26490 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
264a0 6e 74 20 6f 72 64 69 6e 61 72 79 63 74 65 20 7b  nt ordinarycte {
264b0 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20  ordinary common 
264c0 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
264d0 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 72 64  s}</tcl>.<h3>Ord
264e0 69 6e 61 72 79 20 43 6f 6d 6d 6f 6e 20 54 61 62  inary Common Tab
264f0 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f  le Expressions</
26500 68 33 3e 0a 0a 3c 70 3e 41 6e 20 6f 72 64 69 6e  h3>..<p>An ordin
26510 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ary common table
26520 20 65 78 70 72 65 73 73 69 6f 6e 20 77 6f 72 6b   expression work
26530 73 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20  s as if it were 
26540 61 20 5b 76 69 65 77 5d 20 74 68 61 74 0a 65 78  a [view] that.ex
26550 69 73 74 73 20 66 6f 72 20 74 68 65 20 64 75 72  ists for the dur
26560 61 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c  ation of a singl
26570 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 4f 72  e statement.  Or
26580 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
26590 62 6c 65 0a 65 78 70 72 65 73 73 69 6f 6e 73 20  ble.expressions 
265a0 61 72 65 20 75 73 65 66 75 6c 20 66 6f 72 20 66  are useful for f
265b0 61 63 74 6f 72 69 6e 67 20 6f 75 74 20 73 75 62  actoring out sub
265c0 71 75 65 72 69 65 73 20 61 6e 64 20 6d 61 6b 69  queries and maki
265d0 6e 67 20 74 68 65 20 6f 76 65 72 61 6c 6c 0a 53  ng the overall.S
265e0 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 65 61 73  QL statement eas
265f0 69 65 72 20 74 6f 20 72 65 61 64 20 61 6e 64 20  ier to read and 
26600 75 6e 64 65 72 73 74 61 6e 64 2e 0a 0a 3c 70 3e  understand...<p>
26610 41 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61  A WITH clause ca
26620 6e 20 63 6f 6e 74 61 69 6e 20 6f 72 64 69 6e 61  n contain ordina
26630 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ry common table 
26640 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 65 6e  expressions even
26650 20 69 66 0a 69 74 20 69 6e 63 6c 75 64 65 73 20   if.it includes 
26660 74 68 65 20 52 45 43 55 52 53 49 56 45 20 6b 65  the RECURSIVE ke
26670 79 77 6f 72 64 2e 20 20 54 68 65 20 75 73 65 20  yword.  The use 
26680 6f 66 20 52 45 43 55 52 53 49 56 45 20 64 6f 65  of RECURSIVE doe
26690 73 20 6e 6f 74 20 66 6f 72 63 65 0a 63 6f 6d 6d  s not force.comm
266a0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
266b0 69 6f 6e 73 20 74 6f 20 62 65 20 72 65 63 75 72  ions to be recur
266c0 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f  sive...<tcl>.hd_
266d0 66 72 61 67 6d 65 6e 74 20 72 65 63 75 72 73 69  fragment recursi
266e0 76 65 63 74 65 20 7b 72 65 63 75 72 73 69 76 65  vecte {recursive
266f0 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
26700 70 72 65 73 73 69 6f 6e 73 7d 20 5c 0a 7b 72 65  pressions} \.{re
26710 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74  cursive common t
26720 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 7d  able expression}
26730 20 7b 72 65 63 75 72 73 69 76 65 20 71 75 65 72   {recursive quer
26740 79 7d 0a 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52 65  y}.</tcl>.<h3>Re
26750 63 75 72 73 69 76 65 20 43 6f 6d 6d 6f 6e 20 54  cursive Common T
26760 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73  able Expressions
26770 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 72 65 63 75  </h3>..<p>A recu
26780 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62  rsive common tab
26790 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61  le expression ca
267a0 6e 20 62 65 20 75 73 65 64 20 74 6f 20 77 72 69  n be used to wri
267b0 74 65 20 61 20 71 75 65 72 79 20 74 68 61 74 0a  te a query that.
267c0 77 61 6c 6b 73 20 61 20 74 72 65 65 20 6f 72 20  walks a tree or 
267d0 67 72 61 70 68 2e 20 20 41 20 72 65 63 75 72 73  graph.  A recurs
267e0 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ive common table
267f0 20 65 78 70 72 65 73 73 69 6f 6e 20 68 61 73 20   expression has 
26800 74 68 65 20 73 61 6d 65 0a 62 61 73 69 63 20 73  the same.basic s
26810 79 6e 74 61 78 20 61 73 20 61 6e 20 6f 72 64 69  yntax as an ordi
26820 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  nary common tabl
26830 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 62 75  e expression, bu
26840 74 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f  t with the follo
26850 77 69 6e 67 0a 61 64 64 69 74 69 6f 6e 61 6c 20  wing.additional 
26860 66 65 61 74 75 72 65 73 3a 0a 0a 3c 6f 6c 3e 0a  features:..<ol>.
26870 3c 6c 69 3e 20 54 68 65 20 22 5b 73 65 6c 65 63  <li> The "[selec
26880 74 2d 73 74 6d 74 5d 22 0a 20 20 20 20 20 6d 75  t-stmt]".     mu
26890 73 74 20 62 65 20 61 20 5b 63 6f 6d 70 6f 75 6e  st be a [compoun
268a0 64 20 73 65 6c 65 63 74 5d 20 77 68 65 72 65 20  d select] where 
268b0 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b  the right-most [
268c0 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f  compound-operato
268d0 72 5d 20 69 73 0a 20 20 20 20 20 65 69 74 68 65  r] is.     eithe
268e0 72 20 55 4e 49 4f 4e 20 6f 72 20 55 4e 49 4f 4e  r UNION or UNION
268f0 20 41 4c 4c 2e 0a 3c 6c 69 3e 20 54 68 65 20 74   ALL..<li> The t
26900 61 62 6c 65 20 6e 61 6d 65 64 20 6f 6e 20 74 68  able named on th
26910 65 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65  e left-hand side
26920 20 6f 66 20 74 68 65 20 41 53 20 6b 65 79 77 6f   of the AS keywo
26930 72 64 20 6d 75 73 74 20 61 70 70 65 61 72 0a 20  rd must appear. 
26940 20 20 20 20 65 78 61 63 74 6c 79 20 6f 6e 63 65      exactly once
26950 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
26960 75 73 65 20 6f 66 20 74 68 65 20 72 69 67 68 74  use of the right
26970 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 73 74 61  -most SELECT sta
26980 74 65 6d 65 6e 74 0a 20 20 20 20 20 6f 66 20 74  tement.     of t
26990 68 65 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65  he compound sele
269a0 63 74 2c 20 61 6e 64 20 6e 6f 77 68 65 72 65 20  ct, and nowhere 
269b0 65 6c 73 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  else..</ol>..<p>
269c0 54 6f 20 70 75 74 20 69 74 20 61 6e 6f 74 68 65  To put it anothe
269d0 72 20 77 61 79 2c 20 61 20 72 65 63 75 72 73 69  r way, a recursi
269e0 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ve common table 
269f0 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74 0a  expression must.
26a00 6c 6f 6f 6b 20 6c 69 6b 65 20 74 68 65 20 66 6f  look like the fo
26a10 6c 6c 6f 77 69 6e 67 3a 0a 0a 3c 74 63 6c 3e 52  llowing:..<tcl>R
26a20 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
26a30 61 67 72 61 6d 20 72 65 63 75 72 73 69 76 65 2d  agram recursive-
26a40 63 74 65 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61  cte</tcl>..<p>Ca
26a50 6c 6c 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  ll the table nam
26a60 65 64 20 62 79 20 74 68 65 20 5b 63 74 65 2d 74  ed by the [cte-t
26a70 61 62 6c 65 2d 6e 61 6d 65 5d 20 69 6e 20 61 20  able-name] in a 
26a80 72 65 63 75 72 73 69 76 65 0a 63 6f 6d 6d 6f 6e  recursive.common
26a90 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
26aa0 6e 20 74 68 65 20 22 72 65 63 75 72 73 69 76 65  n the "recursive
26ab0 20 74 61 62 6c 65 22 2e 0a 49 6e 20 74 68 65 20   table"..In the 
26ac0 5b 72 65 63 75 72 73 69 76 65 2d 63 74 65 5d 20  [recursive-cte] 
26ad0 62 75 62 62 6c 65 20 64 69 61 67 72 61 6d 20 61  bubble diagram a
26ae0 62 6f 76 65 2c 20 74 68 65 20 72 65 63 75 72 73  bove, the recurs
26af0 69 76 65 0a 74 61 62 6c 65 20 6d 75 73 74 20 61  ive.table must a
26b00 70 70 65 61 72 20 65 78 61 63 74 6c 79 20 6f 6e  ppear exactly on
26b10 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ce in the FROM c
26b20 6c 61 75 73 65 20 6f 66 20 74 68 65 20 0a 3c 79  lause of the .<y
26b30 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76 65 2d  yterm>recursive-
26b40 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 0a  select</yyterm>.
26b50 61 6e 64 20 6d 75 73 74 20 6e 6f 74 20 61 70 70  and must not app
26b60 65 61 72 20 61 6e 79 77 68 65 72 65 20 65 6c 73  ear anywhere els
26b70 65 20 69 6e 20 65 69 74 68 65 72 20 74 68 65 0a  e in either the.
26b80 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d  <yyterm>initial-
26b90 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20  select</yyterm> 
26ba0 6f 72 20 74 68 65 0a 3c 79 79 74 65 72 6d 3e 72  or the.<yyterm>r
26bb0 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c  ecursive-select<
26bc0 2f 79 79 74 65 72 6d 3e 2c 20 69 6e 63 6c 75 64  /yyterm>, includ
26bd0 69 6e 67 20 73 75 62 71 75 65 72 69 65 73 2e 0a  ing subqueries..
26be0 54 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e 69 74  The <yyterm>init
26bf0 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65  ial-select</yyte
26c00 72 6d 3e 20 6d 61 79 20 62 65 0a 61 20 5b 63 6f  rm> may be.a [co
26c10 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2c 20  mpound select], 
26c20 62 75 74 20 69 74 20 6d 61 79 20 6e 6f 74 20 69  but it may not i
26c30 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44 45 52 20  nclude an ORDER 
26c40 42 59 2c 20 4c 49 4d 49 54 2c 20 6f 72 20 4f 46  BY, LIMIT, or OF
26c50 46 53 45 54 2e 0a 54 68 65 20 72 65 63 75 72 73  FSET..The recurs
26c60 69 76 65 2d 73 65 6c 65 63 74 20 6d 75 73 74 20  ive-select must 
26c70 62 65 20 61 20 73 69 6d 70 6c 65 20 73 65 6c 65  be a simple sele
26c80 63 74 2c 20 6e 6f 74 20 61 20 63 6f 6d 70 6f 75  ct, not a compou
26c90 6e 64 2e 20 20 54 68 65 0a 72 65 63 75 72 73 69  nd.  The.recursi
26ca0 76 65 2d 73 65 6c 65 63 74 20 69 73 20 61 6c 6c  ve-select is all
26cb0 6f 77 65 64 20 74 6f 20 69 6e 63 6c 75 64 65 20  owed to include 
26cc0 61 6e 20 4f 52 44 45 52 20 42 59 2c 20 4c 49 4d  an ORDER BY, LIM
26cd0 49 54 2c 20 61 6e 64 2f 6f 72 20 4f 46 46 53 45  IT, and/or OFFSE
26ce0 54 2e 0a 0a 3c 70 3e 54 68 65 20 62 61 73 69 63  T...<p>The basic
26cf0 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 63   algorithm for c
26d00 6f 6d 70 75 74 69 6e 67 20 74 68 65 20 63 6f 6e  omputing the con
26d10 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65 63 75  tent of the recu
26d20 72 73 69 76 65 20 74 61 62 6c 65 0a 69 73 20 61  rsive table.is a
26d30 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e  s follows:..<ol>
26d40 0a 3c 6c 69 3e 20 52 75 6e 20 74 68 65 20 3c 79  .<li> Run the <y
26d50 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65  yterm>initial-se
26d60 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 61 6e  lect</yyterm> an
26d70 64 20 61 64 64 20 74 68 65 20 72 65 73 75 6c 74  d add the result
26d80 73 20 74 6f 20 61 20 71 75 65 75 65 2e 0a 3c 6c  s to a queue..<l
26d90 69 3e 20 57 68 69 6c 65 20 74 68 65 20 71 75 65  i> While the que
26da0 75 65 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 3a  ue is not empty:
26db0 0a 3c 6f 6c 20 74 79 70 65 3d 22 61 22 3e 0a 3c  .<ol type="a">.<
26dc0 6c 69 3e 20 45 78 74 72 61 63 74 20 61 20 73 69  li> Extract a si
26dd0 6e 67 6c 65 20 72 6f 77 20 66 72 6f 6d 20 74 68  ngle row from th
26de0 65 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20 49 6e  e queue..<li> In
26df0 73 65 72 74 20 74 68 61 74 20 73 69 6e 67 6c 65  sert that single
26e00 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 20 72 65   row into the re
26e10 63 75 72 73 69 76 65 20 74 61 62 6c 65 0a 3c 6c  cursive table.<l
26e20 69 3e 20 50 72 65 74 65 6e 64 20 74 68 61 74 20  i> Pretend that 
26e30 74 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 20 6a  the single row j
26e40 75 73 74 20 65 78 74 72 61 63 74 65 64 20 69 73  ust extracted is
26e50 20 74 68 65 20 6f 6e 6c 79 0a 20 20 20 20 20 72   the only.     r
26e60 6f 77 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  ow in the recurs
26e70 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20 72 75  ive table and ru
26e80 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  n the recursive-
26e90 73 65 6c 65 63 74 2c 0a 20 20 20 20 20 61 64 64  select,.     add
26ea0 69 6e 67 20 61 6c 6c 20 72 65 73 75 6c 74 73 20  ing all results 
26eb0 74 6f 20 74 68 65 20 71 75 65 75 65 2e 0a 3c 2f  to the queue..</
26ec0 6f 6c 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68  ol>.</ol>..<p>Th
26ed0 65 20 62 61 73 69 63 20 70 72 6f 63 65 64 75 72  e basic procedur
26ee0 65 20 61 62 6f 76 65 20 6d 61 79 20 6d 6f 64 69  e above may modi
26ef0 66 69 65 64 20 62 79 20 74 68 65 20 66 6f 6c 6c  fied by the foll
26f00 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c  owing additional
26f10 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c   rules:..<ul>.<l
26f20 69 3e 3c 70 3e 0a 20 20 49 66 20 61 20 55 4e 49  i><p>.  If a UNI
26f30 4f 4e 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e 6e  ON operator conn
26f40 65 63 74 73 20 74 68 65 20 3c 79 79 74 65 72 6d  ects the <yyterm
26f50 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c  >initial-select<
26f60 2f 79 79 74 65 72 6d 3e 20 77 69 74 68 20 74 68  /yyterm> with th
26f70 65 0a 20 20 3c 79 79 74 65 72 6d 3e 72 65 63 75  e.  <yyterm>recu
26f80 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79  rsive-select</yy
26f90 74 65 72 6d 3e 2c 20 74 68 65 6e 20 6f 6e 6c 79  term>, then only
26fa0 20 61 64 64 20 72 6f 77 73 20 74 6f 20 74 68 65   add rows to the
26fb0 20 71 75 65 75 65 20 69 66 20 0a 20 20 6e 6f 20   queue if .  no 
26fc0 69 64 65 6e 74 69 63 61 6c 20 72 6f 77 20 68 61  identical row ha
26fd0 73 0a 20 20 62 65 65 6e 20 70 72 65 76 69 6f 75  s.  been previou
26fe0 73 6c 79 20 61 64 64 65 64 20 74 6f 20 74 68 65  sly added to the
26ff0 20 71 75 65 75 65 2e 20 20 52 65 70 65 61 74 65   queue.  Repeate
27000 64 20 72 6f 77 73 20 61 72 65 20 64 69 73 63 61  d rows are disca
27010 72 64 65 64 20 62 65 66 6f 72 65 20 62 65 69 6e  rded before bein
27020 67 0a 20 20 61 64 64 65 64 20 74 6f 20 74 68 65  g.  added to the
27030 20 71 75 65 75 65 20 65 76 65 6e 20 69 66 20 74   queue even if t
27040 68 65 20 72 65 70 65 61 74 65 64 20 72 6f 77 73  he repeated rows
27050 20 68 61 76 65 20 61 6c 72 65 61 64 79 20 62 65   have already be
27060 65 6e 20 65 78 74 72 61 63 74 65 64 0a 20 20 66  en extracted.  f
27070 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20 62 79  rom the queue by
27080 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73   the recursion s
27090 74 65 70 2e 20 20 49 66 20 74 68 65 20 6f 70 65  tep.  If the ope
270a0 72 61 74 6f 72 20 69 73 20 55 4e 49 4f 4e 20 41  rator is UNION A
270b0 4c 4c 2c 0a 20 20 74 68 65 6e 20 61 6c 6c 20 72  LL,.  then all r
270c0 6f 77 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  ows generated by
270d0 20 62 6f 74 68 20 74 68 65 20 3c 79 79 74 65 72   both the <yyter
270e0 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74  m>initial-select
270f0 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20 74 68  </yyterm> and th
27100 65 0a 20 20 3c 79 79 74 65 72 6d 3e 72 65 63 75  e.  <yyterm>recu
27110 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79  rsive-select</yy
27120 74 65 72 6d 3e 20 61 72 65 20 61 6c 77 61 79 73  term> are always
27130 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75   added to the qu
27140 65 75 65 20 65 76 65 6e 20 69 66 0a 20 20 74 68  eue even if.  th
27150 65 79 20 61 72 65 20 72 65 70 65 61 74 73 2e 0a  ey are repeats..
27160 20 20 57 68 65 6e 20 64 65 74 65 72 6d 69 6e 69    When determini
27170 6e 67 20 69 66 20 61 20 72 6f 77 20 69 73 20 72  ng if a row is r
27180 65 70 65 61 74 65 64 2c 20 4e 55 4c 4c 20 76 61  epeated, NULL va
27190 6c 75 65 73 20 63 6f 6d 70 61 72 65 0a 20 20 65  lues compare.  e
271a0 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74  qual to one anot
271b0 68 65 72 20 61 6e 64 20 6e 6f 74 20 65 71 75 61  her and not equa
271c0 6c 20 74 6f 20 61 6e 79 20 6f 74 68 65 72 20 76  l to any other v
271d0 61 6c 75 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  alue..<li><p>.  
271e0 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  The LIMIT clause
271f0 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20 64 65  , if present, de
27200 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6d 61 78  termines the max
27210 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72  imum number of r
27220 6f 77 73 20 74 68 61 74 0a 20 20 77 69 6c 6c 20  ows that.  will 
27230 65 76 65 72 20 62 65 20 61 64 64 65 64 20 74 6f  ever be added to
27240 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
27250 61 62 6c 65 20 69 6e 20 73 74 65 70 20 32 62 2e  able in step 2b.
27260 0a 20 20 4f 6e 63 65 20 74 68 65 20 6c 69 6d 69  .  Once the limi
27270 74 20 69 73 20 72 65 61 63 68 65 64 2c 20 74 68  t is reached, th
27280 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f 70  e recursion stop
27290 73 2e 0a 20 20 41 20 6c 69 6d 69 74 20 6f 66 20  s..  A limit of 
272a0 7a 65 72 6f 20 6d 65 61 6e 73 20 74 68 61 74 20  zero means that 
272b0 6e 6f 20 72 6f 77 73 20 61 72 65 20 65 76 65 72  no rows are ever
272c0 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a 20 20   added to the.  
272d0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2c  recursive table,
272e0 20 61 6e 64 20 61 20 6e 65 67 61 74 69 76 65 20   and a negative 
272f0 6c 69 6d 69 74 20 6d 65 61 6e 73 20 61 6e 20 75  limit means an u
27300 6e 6c 69 6d 69 74 65 64 20 6e 75 6d 62 65 72 20  nlimited number 
27310 6f 66 20 72 6f 77 73 0a 20 20 6d 61 79 20 62 65  of rows.  may be
27320 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65   added to the re
27330 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 3c  cursive table..<
27340 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20 4f 46 46  li><p>.  The OFF
27350 53 45 54 20 63 6c 61 75 73 65 2c 20 69 66 20 69  SET clause, if i
27360 74 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64  t is present and
27370 20 68 61 73 20 61 20 70 6f 73 69 74 69 76 65 20   has a positive 
27380 76 61 6c 75 65 20 4e 2c 20 70 72 65 76 65 6e 74  value N, prevent
27390 73 20 74 68 65 0a 20 20 66 69 72 73 74 20 4e 20  s the.  first N 
273a0 72 6f 77 73 20 66 72 6f 6d 20 62 65 69 6e 67 20  rows from being 
273b0 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65 63  added to the rec
273c0 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 20 20  ursive table..  
273d0 54 68 65 20 66 69 72 73 74 20 4e 20 72 6f 77 73  The first N rows
273e0 20 61 72 65 20 73 74 69 6c 6c 20 70 72 6f 63 65   are still proce
273f0 73 73 65 64 0a 20 20 62 79 20 74 68 65 20 3c 79  ssed.  by the <y
27400 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76 65 2d  yterm>recursive-
27410 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20  select</yyterm> 
27420 26 6d 64 61 73 68 3b 20 74 68 65 79 0a 20 20 6a  &mdash; they.  j
27430 75 73 74 20 61 72 65 20 6e 6f 74 20 61 64 64 65  ust are not adde
27440 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69  d to the recursi
27450 76 65 20 74 61 62 6c 65 2e 20 20 52 6f 77 73 20  ve table.  Rows 
27460 61 72 65 20 6e 6f 74 20 63 6f 75 6e 74 65 64 20  are not counted 
27470 74 6f 77 61 72 64 0a 20 20 66 75 6c 66 69 6c 6c  toward.  fulfill
27480 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 75 6e  ing the LIMIT un
27490 74 69 6c 20 61 6c 6c 20 4f 46 46 53 45 54 20 72  til all OFFSET r
274a0 6f 77 73 20 68 61 76 65 20 62 65 65 6e 20 73 6b  ows have been sk
274b0 69 70 70 65 64 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20  ipped..<li><p>. 
274c0 20 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59 20   If an ORDER BY 
274d0 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
274e0 74 2c 20 69 74 20 64 65 74 65 72 6d 69 6e 65 73  t, it determines
274f0 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   the order in wh
27500 69 63 68 20 72 6f 77 73 0a 20 20 61 72 65 20 65  ich rows.  are e
27510 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20 74 68  xtracted from th
27520 65 20 71 75 65 75 65 20 69 6e 20 73 74 65 70 20  e queue in step 
27530 32 61 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  2a.  If there is
27540 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61   no ORDER BY cla
27550 75 73 65 2c 0a 20 20 74 68 65 6e 20 74 68 65 20  use,.  then the 
27560 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72  order in which r
27570 6f 77 73 20 61 72 65 20 65 78 74 72 61 63 74 65  ows are extracte
27580 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  d is undefined. 
27590 20 28 49 6e 20 74 68 65 20 63 75 72 72 65 6e 74   (In the current
275a0 0a 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  .  implementatio
275b0 6e 2c 20 74 68 65 20 71 75 65 75 65 20 62 65 63  n, the queue bec
275c0 6f 6d 65 73 20 61 20 46 49 46 4f 20 69 66 20 74  omes a FIFO if t
275d0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
275e0 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2c 0a 20  se is omitted,. 
275f0 20 62 75 74 20 61 70 70 6c 69 63 61 74 69 6f 6e   but application
27600 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 64 65 70  s should not dep
27610 65 6e 64 20 6f 6e 20 74 68 61 74 20 66 61 63 74  end on that fact
27620 20 73 69 6e 63 65 20 69 74 20 6d 69 67 68 74 20   since it might 
27630 63 68 61 6e 67 65 2e 29 0a 3c 2f 75 6c 3e 0a 0a  change.).</ul>..
27640 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
27650 20 72 63 65 78 31 3c 2f 74 63 6c 3e 0a 3c 68 34   rcex1</tcl>.<h4
27660 3e 52 65 63 75 72 73 69 76 65 20 51 75 65 72 79  >Recursive Query
27670 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a   Examples</h4>..
27680 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  <p>The following
27690 20 71 75 65 72 79 20 72 65 74 75 72 6e 73 20 61   query returns a
276a0 6c 6c 20 69 6e 74 65 67 65 72 73 20 62 65 74 77  ll integers betw
276b0 65 65 6e 20 31 20 61 6e 64 20 31 30 30 30 30 30  een 1 and 100000
276c0 30 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  0:..<blockquote>
276d0 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
276e0 53 49 56 45 0a 20 20 63 6e 74 28 78 29 20 41 53  SIVE.  cnt(x) AS
276f0 20 28 56 41 4c 55 45 53 28 31 29 20 55 4e 49 4f   (VALUES(1) UNIO
27700 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 78 2b 31  N ALL SELECT x+1
27710 20 46 52 4f 4d 20 63 6e 74 20 57 48 45 52 45 20   FROM cnt WHERE 
27720 78 3c 31 30 30 30 30 30 30 29 0a 53 45 4c 45 43  x<1000000).SELEC
27730 54 20 78 20 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f  T x FROM cnt;.</
27740 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
27750 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72 20 68  >..<p>Consider h
27760 6f 77 20 74 68 69 73 20 71 75 65 72 79 20 77 6f  ow this query wo
27770 72 6b 73 2e 20 20 54 68 65 20 69 6e 69 74 69 61  rks.  The initia
27780 6c 2d 73 65 6c 65 63 74 0a 72 75 6e 73 20 66 69  l-select.runs fi
27790 72 73 74 20 61 6e 64 20 72 65 74 75 72 6e 73 20  rst and returns 
277a0 61 20 73 69 6e 67 6c 65 20 72 6f 77 0a 77 69 74  a single row.wit
277b0 68 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  h a single colum
277c0 6e 20 22 31 22 2e 20 20 54 68 69 73 20 6f 6e 65  n "1".  This one
277d0 20 72 6f 77 20 69 73 20 61 64 64 65 64 20 74 6f   row is added to
277e0 20 74 68 65 20 71 75 65 75 65 2e 20 20 49 6e 0a   the queue.  In.
277f0 73 74 65 70 20 32 61 2c 20 74 68 61 74 20 6f 6e  step 2a, that on
27800 65 20 72 6f 77 20 69 73 20 65 78 74 72 61 63 74  e row is extract
27810 65 64 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75  ed from the queu
27820 65 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 22  e and added to "
27830 63 6e 74 22 2e 0a 54 68 65 6e 20 74 68 65 20 72  cnt"..Then the r
27840 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
27850 69 73 20 72 75 6e 20 69 6e 20 61 63 63 6f 72 64  is run in accord
27860 61 6e 63 65 20 77 69 74 68 20 73 74 65 70 20 32  ance with step 2
27870 63 20 67 65 6e 65 72 61 74 69 6e 67 0a 61 20 73  c generating.a s
27880 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20 77 69  ingle new row wi
27890 74 68 20 76 61 6c 75 65 20 22 32 22 20 74 6f 20  th value "2" to 
278a0 61 64 64 20 74 6f 20 74 68 65 20 71 75 65 75 65  add to the queue
278b0 2e 20 20 54 68 65 20 71 75 65 75 65 20 73 74 69  .  The queue sti
278c0 6c 6c 0a 68 61 73 20 6f 6e 65 20 72 6f 77 2c 20  ll.has one row, 
278d0 73 6f 20 73 74 65 70 20 32 20 72 65 70 65 61 74  so step 2 repeat
278e0 73 2e 20 20 54 68 65 20 22 32 22 20 72 6f 77 20  s.  The "2" row 
278f0 69 73 20 65 78 74 72 61 63 74 65 64 20 61 6e 64  is extracted and
27900 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a 72 65   added to the.re
27910 63 75 72 73 69 76 65 20 74 61 62 6c 65 20 62 79  cursive table by
27920 20 73 74 65 70 73 20 32 61 20 61 6e 64 20 32 62   steps 2a and 2b
27930 2e 20 20 54 68 65 6e 20 74 68 65 20 72 6f 77 20  .  Then the row 
27940 63 6f 6e 74 61 69 6e 69 6e 67 20 32 20 69 73 20  containing 2 is 
27950 75 73 65 64 20 0a 61 73 20 69 66 20 69 74 20 77  used .as if it w
27960 65 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  ere the complete
27970 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
27980 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 20  recursive table 
27990 61 6e 64 20 74 68 65 20 0a 72 65 63 75 72 73 69  and the .recursi
279a0 76 65 2d 73 65 6c 65 63 74 20 69 73 20 72 75 6e  ve-select is run
279b0 20 61 67 61 69 6e 2c 20 72 65 73 75 6c 74 69 6e   again, resultin
279c0 67 20 69 6e 20 61 20 72 6f 77 20 77 69 74 68 20  g in a row with 
279d0 76 61 6c 75 65 20 22 33 22 20 62 65 69 6e 67 20  value "3" being 
279e0 61 64 64 65 64 0a 74 6f 20 74 68 65 20 71 75 65  added.to the que
279f0 75 65 2e 20 20 54 68 69 73 20 72 65 70 65 61 74  ue.  This repeat
27a00 73 20 39 39 39 39 39 39 20 74 69 6d 65 73 20 75  s 999999 times u
27a10 6e 74 69 6c 20 66 69 6e 61 6c 6c 79 20 61 74 20  ntil finally at 
27a20 73 74 65 70 20 32 61 20 74 68 65 0a 6f 6e 6c 79  step 2a the.only
27a30 20 76 61 6c 75 65 20 6f 6e 20 74 68 65 20 71 75   value on the qu
27a40 65 75 65 20 69 73 20 61 20 72 6f 77 20 63 6f 6e  eue is a row con
27a50 74 61 69 6e 69 6e 67 20 31 30 30 30 30 30 30 2e  taining 1000000.
27a60 20 20 54 68 61 74 20 72 6f 77 20 69 73 0a 65 78    That row is.ex
27a70 74 72 61 63 74 65 64 20 61 6e 64 20 61 64 64 65  tracted and adde
27a80 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69  d to the recursi
27a90 76 65 20 74 61 62 6c 65 2e 20 20 42 75 74 20 74  ve table.  But t
27aa0 68 69 73 20 74 69 6d 65 2c 20 74 68 65 0a 57 48  his time, the.WH
27ab0 45 52 45 20 63 6c 61 75 73 65 20 63 61 75 73 65  ERE clause cause
27ac0 73 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  s the recursive-
27ad0 73 65 6c 65 63 74 20 74 6f 20 72 65 74 75 72 6e  select to return
27ae0 20 6e 6f 20 72 6f 77 73 2c 20 73 6f 20 74 68 65   no rows, so the
27af0 0a 71 75 65 75 65 20 72 65 6d 61 69 6e 73 20 65  .queue remains e
27b00 6d 70 74 79 20 61 6e 64 20 74 68 65 20 72 65 63  mpty and the rec
27b10 75 72 73 69 6f 6e 20 73 74 6f 70 73 2e 0a 0a 3c  ursion stops...<
27b20 70 3e 3c 62 3e 4f 70 74 69 6d 69 7a 61 74 69 6f  p><b>Optimizatio
27b30 6e 20 6e 6f 74 65 3a 3c 2f 62 3e 0a 49 6e 20 74  n note:</b>.In t
27b40 68 65 20 64 69 73 63 75 73 73 69 6f 6e 20 61 62  he discussion ab
27b50 6f 76 65 2c 20 73 74 61 74 65 6d 65 6e 74 73 20  ove, statements 
27b60 6c 69 6b 65 20 22 69 6e 73 65 72 74 20 74 68 65  like "insert the
27b70 20 72 6f 77 20 69 6e 74 6f 0a 74 68 65 20 72 65   row into.the re
27b80 63 75 72 73 69 76 65 20 74 61 62 6c 65 22 20 73  cursive table" s
27b90 68 6f 75 6c 64 20 62 65 20 75 6e 64 65 72 73 74  hould be underst
27ba0 6f 6f 64 20 63 6f 6e 63 65 70 74 75 61 6c 6c 79  ood conceptually
27bb0 2c 20 6e 6f 74 20 6c 69 74 65 72 61 6c 6c 79 2e  , not literally.
27bc0 0a 49 74 20 73 6f 75 6e 64 73 20 61 73 20 69 66  .It sounds as if
27bd0 20 53 51 4c 69 74 65 20 69 73 20 61 63 63 75 6d   SQLite is accum
27be0 75 6c 61 74 69 6e 67 20 61 20 68 75 67 65 20 74  ulating a huge t
27bf0 61 62 6c 65 0a 63 6f 6e 74 61 69 6e 69 6e 67 20  able.containing 
27c00 6f 6e 65 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73  one million rows
27c10 2c 20 74 68 65 6e 20 67 6f 69 6e 67 20 62 61 63  , then going bac
27c20 6b 20 61 6e 64 20 73 63 61 6e 6e 69 6e 67 20 74  k and scanning t
27c30 68 61 74 20 74 61 62 6c 65 0a 66 72 6f 6d 20 74  hat table.from t
27c40 6f 70 20 74 6f 20 62 6f 74 74 6f 6d 20 74 6f 20  op to bottom to 
27c50 67 65 6e 65 72 61 74 65 20 74 68 65 20 72 65 73  generate the res
27c60 75 6c 74 2e 20 20 57 68 61 74 20 72 65 61 6c 6c  ult.  What reall
27c70 79 20 68 61 70 70 65 6e 73 0a 69 73 20 74 68 61  y happens.is tha
27c80 74 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  t the query opti
27c90 6d 69 7a 65 72 20 73 65 65 73 20 74 68 61 74 20  mizer sees that 
27ca0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 0a 22 63  values in the."c
27cb0 6e 74 22 20 72 65 63 75 72 73 69 76 65 20 74 61  nt" recursive ta
27cc0 62 6c 65 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  ble are only use
27cd0 64 20 6f 6e 63 65 2e 20 20 53 6f 20 61 73 20 65  d once.  So as e
27ce0 61 63 68 20 72 6f 77 20 69 73 20 61 64 64 65 64  ach row is added
27cf0 20 74 6f 0a 74 68 65 20 72 65 63 75 72 73 69 76   to.the recursiv
27d00 65 20 74 61 62 6c 65 2c 20 74 68 61 74 20 72 6f  e table, that ro
27d10 77 20 69 73 20 69 6d 6d 65 64 69 61 74 65 6c 79  w is immediately
27d20 20 72 65 74 75 72 6e 65 64 20 61 73 20 61 20 72   returned as a r
27d30 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6d 61 69  esult of the mai
27d40 6e 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  n.SELECT stateme
27d50 6e 74 20 61 6e 64 20 74 68 65 6e 20 64 69 73 63  nt and then disc
27d60 61 72 64 65 64 2e 20 20 53 51 4c 69 74 65 20 64  arded.  SQLite d
27d70 6f 65 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e  oes <em>not</em>
27d80 20 61 63 63 75 6d 75 6c 61 74 65 0a 61 20 74 65   accumulate.a te
27d90 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 63 6f  mporary table co
27da0 6e 74 61 69 6e 69 6e 67 20 61 20 6d 69 6c 6c 69  ntaining a milli
27db0 6f 6e 20 72 6f 77 73 2e 20 20 56 65 72 79 20 6c  on rows.  Very l
27dc0 69 74 74 6c 65 20 6d 65 6d 6f 72 79 20 69 73 0a  ittle memory is.
27dd0 6e 65 65 64 65 64 20 74 6f 20 72 75 6e 20 74 68  needed to run th
27de0 65 20 61 62 6f 76 65 20 65 78 61 6d 70 6c 65 2e  e above example.
27df0 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68    However, if th
27e00 65 20 65 78 61 6d 70 6c 65 20 68 61 64 20 75 73  e example had us
27e10 65 64 0a 55 4e 49 4f 4e 20 69 6e 73 74 65 61 64  ed.UNION instead
27e20 20 6f 66 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 74   of UNION ALL, t
27e30 68 65 6e 20 53 51 4c 69 74 65 20 77 6f 75 6c 64  hen SQLite would
27e40 20 68 61 76 65 20 68 61 64 20 74 6f 20 6b 65 65   have had to kee
27e50 70 20 61 72 6f 75 6e 64 0a 61 6c 6c 20 70 72 65  p around.all pre
27e60 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65  viously generate
27e70 64 20 63 6f 6e 74 65 6e 74 20 69 6e 20 6f 72 64  d content in ord
27e80 65 72 20 74 6f 20 63 68 65 63 6b 20 66 6f 72 20  er to check for 
27e90 64 75 70 6c 69 63 61 74 65 73 2e 0a 46 6f 72 20  duplicates..For 
27ea0 74 68 69 73 20 72 65 61 73 6f 6e 2c 20 70 72 6f  this reason, pro
27eb0 67 72 61 6d 6d 65 72 73 20 73 68 6f 75 6c 64 20  grammers should 
27ec0 73 74 72 69 76 65 20 74 6f 20 75 73 65 20 55 4e  strive to use UN
27ed0 49 4f 4e 20 41 4c 4c 20 69 6e 73 74 65 61 64 0a  ION ALL instead.
27ee0 6f 66 20 55 4e 49 4f 4e 20 77 68 65 6e 20 66 65  of UNION when fe
27ef0 61 73 69 62 6c 65 2e 0a 0a 3c 70 3e 48 65 72 65  asible...<p>Here
27f00 20 69 73 20 61 20 76 61 72 69 61 74 69 6f 6e 20   is a variation 
27f10 6f 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  on the previous 
27f20 65 78 61 6d 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b  example:..<block
27f30 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
27f40 20 52 45 43 55 52 53 49 56 45 0a 20 20 63 6e 74   RECURSIVE.  cnt
27f50 28 78 29 20 41 53 20 28 0a 20 20 20 20 20 53 45  (x) AS (.     SE
27f60 4c 45 43 54 20 31 0a 20 20 20 20 20 55 4e 49 4f  LECT 1.     UNIO
27f70 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45 4c 45 43  N ALL.     SELEC
27f80 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e 74 0a 20  T x+1 FROM cnt. 
27f90 20 20 20 20 20 4c 49 4d 49 54 20 31 30 30 30 30       LIMIT 10000
27fa0 30 30 0a 20 20 29 0a 53 45 4c 45 43 54 20 78 20  00.  ).SELECT x 
27fb0 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e  FROM cnt;.</pre>
27fc0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
27fd0 70 3e 54 68 65 72 65 20 61 72 65 20 74 77 6f 20  p>There are two 
27fe0 64 69 66 66 65 72 65 6e 63 65 73 20 69 6e 20 74  differences in t
27ff0 68 69 73 20 76 61 72 69 61 74 69 6f 6e 2e 20 20  his variation.  
28000 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65  The initial-sele
28010 63 74 20 69 73 0a 22 53 45 4c 45 43 54 20 31 22  ct is."SELECT 1"
28020 20 69 6e 73 74 65 61 64 20 6f 66 20 22 56 41 4c   instead of "VAL
28030 55 45 53 28 31 29 22 2e 20 20 42 75 74 20 74 68  UES(1)".  But th
28040 6f 73 65 20 61 72 65 20 6a 75 73 74 20 64 69 66  ose are just dif
28050 66 65 72 65 6e 74 0a 73 79 6e 74 61 78 65 73 20  ferent.syntaxes 
28060 66 6f 72 20 73 61 79 69 6e 67 20 65 78 61 63 74  for saying exact
28070 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
28080 67 2e 20 20 54 68 65 20 6f 74 68 65 72 20 63 68  g.  The other ch
28090 61 6e 67 65 20 69 73 20 74 68 61 74 20 74 68 65  ange is that the
280a0 0a 72 65 63 75 72 73 69 6f 6e 20 69 73 20 73 74  .recursion is st
280b0 6f 70 70 65 64 20 62 79 20 61 20 4c 49 4d 49 54  opped by a LIMIT
280c0 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 20 57   rather than a W
280d0 48 45 52 45 20 63 6c 61 75 73 65 2e 20 20 54 68  HERE clause.  Th
280e0 65 20 75 73 65 20 6f 66 0a 4c 49 4d 49 54 20 6d  e use of.LIMIT m
280f0 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e 20 74  eans that when t
28100 68 65 20 6f 6e 65 2d 6d 69 6c 6c 69 6f 6e 74 68  he one-millionth
28110 20 72 6f 77 20 69 73 20 61 64 64 65 64 20 74 6f   row is added to
28120 20 74 68 65 20 22 63 6e 74 22 20 74 61 62 6c 65   the "cnt" table
28130 0a 28 61 6e 64 20 72 65 74 75 72 6e 65 64 20 62  .(and returned b
28140 79 20 74 68 65 20 6d 61 69 6e 20 53 45 4c 45 43  y the main SELEC
28150 54 2c 20 74 68 61 6e 6b 73 20 74 6f 20 74 68 65  T, thanks to the
28160 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
28170 29 0a 74 68 65 6e 20 74 68 65 20 72 65 63 75 72  ).then the recur
28180 73 69 6f 6e 20 73 74 6f 70 73 20 69 6d 6d 65 64  sion stops immed
28190 69 61 74 65 6c 79 20 72 65 67 61 72 64 6c 65 73  iately regardles
281a0 73 20 6f 66 20 68 6f 77 20 6d 61 6e 79 20 72 6f  s of how many ro
281b0 77 73 20 6d 69 67 68 74 20 62 65 0a 6c 65 66 74  ws might be.left
281c0 20 69 6e 20 74 68 65 20 71 75 65 75 65 2e 20 20   in the queue.  
281d0 4f 6e 20 6d 6f 72 65 20 63 6f 6d 70 6c 65 78 20  On more complex 
281e0 71 75 65 72 69 65 73 2c 20 69 74 20 63 61 6e 20  queries, it can 
281f0 73 6f 6d 65 74 69 6d 65 73 20 62 65 0a 64 69 66  sometimes be.dif
28200 66 69 63 75 6c 74 20 74 6f 20 65 6e 73 75 72 65  ficult to ensure
28210 20 74 68 61 74 20 74 68 65 20 57 48 45 52 45 20   that the WHERE 
28220 63 6c 61 75 73 65 20 77 69 6c 6c 20 65 76 65 6e  clause will even
28230 74 75 61 6c 6c 79 20 63 61 75 73 65 20 74 68 65  tually cause the
28240 0a 71 75 65 75 65 20 74 6f 20 64 72 61 69 6e 20  .queue to drain 
28250 61 6e 64 20 74 68 65 20 72 65 63 75 72 73 69 6f  and the recursio
28260 6e 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 2e 20  n to terminate. 
28270 20 42 75 74 20 74 68 65 20 4c 49 4d 49 54 20 63   But the LIMIT c
28280 6c 61 75 73 65 20 77 69 6c 6c 0a 61 6c 77 61 79  lause will.alway
28290 73 20 73 74 6f 70 20 74 68 65 20 72 65 63 75 72  s stop the recur
282a0 73 69 6f 6e 2e 20 20 53 6f 20 69 74 20 69 73 20  sion.  So it is 
282b0 67 6f 6f 64 20 70 72 61 63 74 69 63 65 20 74 6f  good practice to
282c0 20 61 6c 77 61 79 73 20 69 6e 63 6c 75 64 65 20   always include 
282d0 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  a.LIMIT clause a
282e0 73 20 61 20 73 61 66 65 74 79 20 69 66 20 61 6e  s a safety if an
282f0 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20   upper bound on 
28300 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
28310 72 65 63 75 72 73 69 6f 6e 20 0a 69 73 20 6b 6e  recursion .is kn
28320 6f 77 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  own...<tcl>hd_fr
28330 61 67 6d 65 6e 74 20 72 63 65 78 32 3c 2f 74 63  agment rcex2</tc
28340 6c 3e 0a 3c 68 34 3e 48 69 65 72 61 72 63 68 69  l>.<h4>Hierarchi
28350 63 61 6c 20 51 75 65 72 79 20 45 78 61 6d 70 6c  cal Query Exampl
28360 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 43 6f 6e 73  es</h4>..<p>Cons
28370 69 64 65 72 20 61 20 74 61 62 6c 65 20 74 68 61  ider a table tha
28380 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
28390 6d 65 6d 62 65 72 73 20 6f 66 20 61 6e 20 6f 72  members of an or
283a0 67 61 6e 69 7a 61 74 69 6f 6e 20 61 73 0a 77 65  ganization as.we
283b0 6c 6c 20 61 73 20 74 68 65 20 63 68 61 69 6e 2d  ll as the chain-
283c0 6f 66 2d 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69  of-command withi
283d0 6e 20 74 68 61 74 20 6f 72 67 61 6e 69 7a 61 74  n that organizat
283e0 69 6f 6e 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ion:..<blockquot
283f0 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
28400 41 42 4c 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65  ABLE org(.  name
28410 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45   TEXT PRIMARY KE
28420 59 2c 0a 20 20 62 6f 73 73 20 54 45 58 54 20 52  Y,.  boss TEXT R
28430 45 46 45 52 45 4e 43 45 53 20 6f 72 67 2c 0a 20  EFERENCES org,. 
28440 20 68 65 69 67 68 74 20 49 4e 54 2c 0a 20 20 2d   height INT,.  -
28450 2d 20 6f 74 68 65 72 20 63 6f 6e 74 65 6e 74 20  - other content 
28460 6f 6d 69 74 74 65 64 0a 29 3b 0a 3c 2f 70 72 65  omitted.);.</pre
28470 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
28480 3c 70 3e 45 76 65 72 79 20 6d 65 6d 62 65 72 20  <p>Every member 
28490 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a 61 74  in the organizat
284a0 69 6f 6e 20 68 61 73 20 61 20 6e 61 6d 65 2c 20  ion has a name, 
284b0 61 6e 64 20 6d 6f 73 74 20 6d 65 6d 62 65 72 73  and most members
284c0 20 68 61 76 65 0a 61 20 73 69 6e 67 6c 65 20 62   have.a single b
284d0 6f 73 73 2e 20 20 28 54 68 65 20 68 65 61 64 20  oss.  (The head 
284e0 6f 66 20 74 68 65 20 77 68 6f 6c 65 20 6f 72 67  of the whole org
284f0 61 6e 69 7a 61 74 69 6f 6e 20 68 61 73 20 61 20  anization has a 
28500 4e 55 4c 4c 0a 22 62 6f 73 73 22 20 66 69 65 6c  NULL."boss" fiel
28510 64 2e 29 20 54 68 65 20 72 6f 77 73 20 6f 66 20  d.) The rows of 
28520 74 68 65 20 22 6f 72 67 22 20 74 61 62 6c 65 20  the "org" table 
28530 66 6f 72 6d 20 61 20 74 72 65 65 2e 0a 0a 3c 70  form a tree...<p
28540 3e 48 65 72 65 20 69 73 20 61 20 71 75 65 72 79  >Here is a query
28550 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74   that computes t
28560 68 65 20 61 76 65 72 61 67 65 20 68 65 69 67 68  he average heigh
28570 74 20 6f 76 65 72 20 65 76 65 72 79 6f 6e 65 0a  t over everyone.
28580 69 6e 20 41 6c 69 63 65 27 73 20 6f 72 67 61 6e  in Alice's organ
28590 69 7a 61 74 69 6f 6e 2c 20 69 6e 63 6c 75 64 69  ization, includi
285a0 6e 67 20 41 6c 69 63 65 3a 0a 0a 3c 62 6c 6f 63  ng Alice:..<bloc
285b0 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
285c0 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 77 6f  H RECURSIVE.  wo
285d0 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 28 6e 29  rks_for_alice(n)
285e0 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53   AS (.    VALUES
285f0 28 27 41 6c 69 63 65 27 29 0a 20 20 20 20 55 4e  ('Alice').    UN
28600 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54 20 6e  ION.    SELECT n
28610 61 6d 65 20 46 52 4f 4d 20 6f 72 67 2c 20 77 6f  ame FROM org, wo
28620 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 0a 20 20  rks_for_alice.  
28630 20 20 20 57 48 45 52 45 20 6f 72 67 2e 62 6f 73     WHERE org.bos
28640 73 3d 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63  s=works_for_alic
28650 65 2e 6e 0a 20 20 29 0a 53 45 4c 45 43 54 20 61  e.n.  ).SELECT a
28660 76 67 28 68 65 69 67 68 74 29 20 46 52 4f 4d 20  vg(height) FROM 
28670 6f 72 67 0a 20 57 48 45 52 45 20 6f 72 67 2e 6e  org. WHERE org.n
28680 61 6d 65 20 49 4e 20 77 6f 72 6b 73 5f 66 6f 72  ame IN works_for
28690 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f  _alice;.</pre></
286a0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
286b0 54 68 65 20 6e 65 78 74 20 65 78 61 6d 70 6c 65  The next example
286c0 20 75 73 65 73 20 74 77 6f 20 0a 63 6f 6d 6d 6f   uses two .commo
286d0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
286e0 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  ons in a single 
286f0 57 49 54 48 20 63 6c 61 75 73 65 2e 20 20 0a 54  WITH clause.  .T
28700 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62  he following tab
28710 6c 65 20 72 65 63 6f 72 64 73 20 61 20 66 61 6d  le records a fam
28720 69 6c 79 20 74 72 65 65 3a 0a 0a 3c 62 6c 6f 63  ily tree:..<bloc
28730 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
28740 41 54 45 20 54 41 42 4c 45 20 66 61 6d 69 6c 79  ATE TABLE family
28750 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50 52  (.  name TEXT PR
28760 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 6d 6f 6d  IMARY KEY,.  mom
28770 20 54 45 58 54 20 52 45 46 45 52 45 4e 43 45 53   TEXT REFERENCES
28780 20 66 61 6d 69 6c 79 2c 0a 20 20 64 61 64 20 54   family,.  dad T
28790 45 58 54 20 52 45 46 45 52 45 4e 43 45 53 20 66  EXT REFERENCES f
287a0 61 6d 69 6c 79 2c 0a 20 20 62 6f 72 6e 20 44 41  amily,.  born DA
287b0 54 45 54 49 4d 45 2c 0a 20 20 64 69 65 64 20 44  TETIME,.  died D
287c0 41 54 45 54 49 4d 45 2c 20 2d 2d 20 4e 55 4c 4c  ATETIME, -- NULL
287d0 20 69 66 20 73 74 69 6c 6c 20 61 6c 69 76 65 0a   if still alive.
287e0 20 20 2d 2d 20 6f 74 68 65 72 20 63 6f 6e 74 65    -- other conte
287f0 6e 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  nt.);.</pre></bl
28800 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
28810 65 20 22 66 61 6d 69 6c 79 22 20 74 61 62 6c 65  e "family" table
28820 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74   is similar to t
28830 68 65 20 65 61 72 6c 69 65 72 20 22 6f 72 67 22  he earlier "org"
28840 20 74 61 62 6c 65 20 65 78 63 65 70 74 20 74 68   table except th
28850 61 74 20 0a 6e 6f 77 20 74 68 65 72 65 20 61 72  at .now there ar
28860 65 20 74 77 6f 20 70 61 72 65 6e 74 73 20 74 6f  e two parents to
28870 20 65 61 63 68 20 6d 65 6d 62 65 72 2e 0a 57 65   each member..We
28880 20 77 61 6e 74 20 74 6f 20 6b 6e 6f 77 20 61 6c   want to know al
28890 6c 20 6c 69 76 69 6e 67 20 61 6e 63 65 73 74 6f  l living ancesto
288a0 72 73 20 6f 66 20 41 6c 69 63 65 2c 20 66 72 6f  rs of Alice, fro
288b0 6d 20 6f 6c 64 65 73 74 20 74 6f 20 79 6f 75 6e  m oldest to youn
288c0 67 65 73 74 2e 0a 41 6e 20 6f 72 64 69 6e 61 72  gest..An ordinar
288d0 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  y common table e
288e0 78 70 72 65 73 73 69 6f 6e 2c 20 22 70 61 72 65  xpression, "pare
288f0 6e 74 5f 6f 66 22 2c 20 69 73 20 64 65 66 69 6e  nt_of", is defin
28900 65 64 20 66 69 72 73 74 2e 20 20 54 68 61 74 0a  ed first.  That.
28910 6f 72 64 69 6e 61 72 79 20 43 54 45 20 69 73 20  ordinary CTE is 
28920 61 20 76 69 65 77 20 74 68 61 74 20 63 61 6e 20  a view that can 
28930 62 65 20 75 73 65 64 20 74 6f 20 66 69 6e 64 20  be used to find 
28940 61 6c 6c 20 70 61 72 65 6e 74 73 20 6f 66 20 61  all parents of a
28950 6e 79 0a 69 6e 64 69 76 69 64 75 61 6c 2e 20 20  ny.individual.  
28960 54 68 61 74 20 6f 72 64 69 6e 61 72 79 20 43 54  That ordinary CT
28970 45 20 69 73 20 74 68 65 6e 20 75 73 65 64 20 69  E is then used i
28980 6e 20 74 68 65 20 22 61 6e 63 65 73 74 6f 72 5f  n the "ancestor_
28990 6f 66 5f 61 6c 69 63 65 22 0a 72 65 63 75 72 73  of_alice".recurs
289a0 69 76 65 20 43 54 45 2e 20 20 54 68 65 20 72 65  ive CTE.  The re
289b0 63 75 72 73 69 76 65 20 43 54 45 20 69 73 20 74  cursive CTE is t
289c0 68 65 6e 20 75 73 65 64 20 69 6e 20 74 68 65 20  hen used in the 
289d0 66 69 6e 61 6c 20 71 75 65 72 79 3a 0a 0a 3c 62  final query:..<b
289e0 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
289f0 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
28a00 20 70 61 72 65 6e 74 5f 6f 66 28 6e 61 6d 65 2c   parent_of(name,
28a10 20 70 61 72 65 6e 74 29 20 41 53 0a 20 20 20 20   parent) AS.    
28a20 28 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 6d 6f  (SELECT name, mo
28a30 6d 20 46 52 4f 4d 20 66 61 6d 69 6c 79 20 55 4e  m FROM family UN
28a40 49 4f 4e 20 53 45 4c 45 43 54 20 6e 61 6d 65 2c  ION SELECT name,
28a50 20 64 61 64 20 46 52 4f 4d 20 66 61 6d 69 6c 79   dad FROM family
28a60 29 2c 0a 20 20 61 6e 63 65 73 74 6f 72 5f 6f 66  ),.  ancestor_of
28a70 5f 61 6c 69 63 65 28 6e 61 6d 65 29 20 41 53 0a  _alice(name) AS.
28a80 20 20 20 20 28 53 45 4c 45 43 54 20 70 61 72 65      (SELECT pare
28a90 6e 74 20 46 52 4f 4d 20 70 61 72 65 6e 74 5f 6f  nt FROM parent_o
28aa0 66 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 41 6c  f WHERE name='Al
28ab0 69 63 65 27 0a 20 20 20 20 20 55 4e 49 4f 4e 20  ice'.     UNION 
28ac0 41 4c 4c 0a 20 20 20 20 20 53 45 4c 45 43 54 20  ALL.     SELECT 
28ad0 70 61 72 65 6e 74 20 46 52 4f 4d 20 70 61 72 65  parent FROM pare
28ae0 6e 74 5f 6f 66 20 4a 4f 49 4e 20 61 6e 63 65 73  nt_of JOIN ances
28af0 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 20 55 53 49  tor_of_alice USI
28b00 4e 47 28 6e 61 6d 65 29 29 0a 53 45 4c 45 43 54  NG(name)).SELECT
28b10 20 66 61 6d 69 6c 79 2e 6e 61 6d 65 20 46 52 4f   family.name FRO
28b20 4d 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c  M ancestor_of_al
28b30 69 63 65 2c 20 66 61 6d 69 6c 79 0a 20 57 48 45  ice, family. WHE
28b40 52 45 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61  RE ancestor_of_a
28b50 6c 69 63 65 2e 6e 61 6d 65 3d 66 61 6d 69 6c 79  lice.name=family
28b60 2e 6e 61 6d 65 0a 20 20 20 41 4e 44 20 64 69 65  .name.   AND die
28b70 64 20 49 53 20 4e 55 4c 4c 0a 20 4f 52 44 45 52  d IS NULL. ORDER
28b80 20 42 59 20 62 6f 72 6e 3b 0a 3c 2f 70 72 65 3e   BY born;.</pre>
28b90 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
28ba0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
28bb0 72 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34 3e  rcex2</tcl>.<h4>
28bc0 51 75 65 72 69 65 73 20 41 67 61 69 6e 73 74 20  Queries Against 
28bd0 41 20 47 72 61 70 68 3c 2f 68 34 3e 0a 0a 3c 70  A Graph</h4>..<p
28be0 3e 41 20 76 65 72 73 69 6f 6e 20 63 6f 6e 74 72  >A version contr
28bf0 6f 6c 20 73 79 73 74 65 6d 20 28 56 43 53 29 20  ol system (VCS) 
28c00 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20 73  will typically s
28c10 74 6f 72 65 20 74 68 65 20 65 76 6f 6c 76 69 6e  tore the evolvin
28c20 67 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20 61 20  g.versions of a 
28c30 70 72 6f 6a 65 63 74 20 61 73 20 61 20 64 69 72  project as a dir
28c40 65 63 74 65 64 20 61 63 79 63 6c 69 63 20 67 72  ected acyclic gr
28c50 61 70 68 20 28 44 41 47 29 2e 20 20 43 61 6c 6c  aph (DAG).  Call
28c60 20 65 61 63 68 0a 76 65 72 73 69 6f 6e 20 6f 66   each.version of
28c70 20 74 68 65 20 70 72 6f 6a 65 63 74 20 61 20 22   the project a "
28c80 63 68 65 63 6b 69 6e 22 2e 20 20 41 20 73 69 6e  checkin".  A sin
28c90 67 6c 65 0a 63 68 65 63 6b 69 6e 20 63 61 6e 20  gle.checkin can 
28ca0 68 61 76 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  have zero or mor
28cb0 65 20 70 61 72 65 6e 74 73 2e 20 20 4d 6f 73 74  e parents.  Most
28cc0 20 63 68 65 63 6b 69 6e 73 20 28 65 78 63 65 70   checkins (excep
28cd0 74 20 74 68 65 0a 66 69 72 73 74 29 20 68 61 76  t the.first) hav
28ce0 65 20 61 20 73 69 6e 67 6c 65 20 70 61 72 65 6e  e a single paren
28cf0 74 2c 20 62 75 74 20 69 6e 20 74 68 65 20 63 61  t, but in the ca
28d00 73 65 20 6f 66 20 61 20 6d 65 72 67 65 2c 20 61  se of a merge, a
28d10 20 63 68 65 63 6b 69 6e 0a 6d 69 67 68 74 20 68   checkin.might h
28d20 61 76 65 20 74 77 6f 20 6f 72 20 74 68 72 65 65  ave two or three
28d30 20 6f 72 20 6d 6f 72 65 20 70 61 72 65 6e 74 73   or more parents
28d40 2e 20 20 41 20 73 63 68 65 6d 61 20 74 6f 20 6b  .  A schema to k
28d50 65 65 70 20 74 72 61 63 6b 20 6f 66 0a 63 68 65  eep track of.che
28d60 63 6b 69 6e 73 20 61 6e 64 20 74 68 65 20 6f 72  ckins and the or
28d70 64 65 72 20 69 6e 20 77 68 69 63 68 20 74 68 65  der in which the
28d80 79 20 6f 63 63 75 72 20 6d 69 67 68 74 20 6c 6f  y occur might lo
28d90 6f 6b 20 73 6f 6d 65 74 68 69 6e 67 20 6c 69 6b  ok something lik
28da0 65 0a 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  e.this:..<blockq
28db0 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
28dc0 45 20 54 41 42 4c 45 20 63 68 65 63 6b 69 6e 28  E TABLE checkin(
28dd0 0a 20 20 69 64 20 49 4e 54 45 47 45 52 20 50 52  .  id INTEGER PR
28de0 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 6d 74 69  IMARY KEY,.  mti
28df0 6d 65 20 49 4e 54 45 47 45 52 20 2d 2d 20 74 69  me INTEGER -- ti
28e00 6d 65 73 74 61 6d 70 20 77 68 65 6e 20 74 68 69  mestamp when thi
28e10 73 20 63 68 65 63 6b 69 6e 20 6f 63 63 75 72 72  s checkin occurr
28e20 65 64 0a 29 3b 0a 43 52 45 41 54 45 20 54 41 42  ed.);.CREATE TAB
28e30 4c 45 20 64 65 72 69 76 65 64 66 72 6f 6d 28 0a  LE derivedfrom(.
28e40 20 20 78 66 72 6f 6d 20 49 4e 54 45 47 45 52 20    xfrom INTEGER 
28e50 4e 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52 45 4e  NOT NULL REFEREN
28e60 43 45 53 20 63 68 65 63 6b 69 6e 2c 20 2d 2d 20  CES checkin, -- 
28e70 70 61 72 65 6e 74 20 63 68 65 63 6b 69 6e 0a 20  parent checkin. 
28e80 20 78 74 6f 20 49 4e 54 45 47 45 52 20 4e 4f 54   xto INTEGER NOT
28e90 20 4e 55 4c 4c 20 52 45 46 45 52 45 4e 43 45 53   NULL REFERENCES
28ea0 20 63 68 65 63 6b 69 6e 2c 20 20 20 2d 2d 20 64   checkin,   -- d
28eb0 65 72 69 76 65 64 20 63 68 65 63 6b 69 6e 0a 20  erived checkin. 
28ec0 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78 66 72   PRIMARY KEY(xfr
28ed0 6f 6d 2c 78 74 6f 29 0a 29 3b 0a 43 52 45 41 54  om,xto).);.CREAT
28ee0 45 20 49 4e 44 45 58 20 64 65 72 69 76 65 64 66  E INDEX derivedf
28ef0 72 6f 6d 5f 62 61 63 6b 20 4f 4e 20 64 65 72 69  rom_back ON deri
28f00 76 65 64 66 72 6f 6d 28 78 74 6f 2c 78 66 72 6f  vedfrom(xto,xfro
28f10 6d 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  m);.</pre></bloc
28f20 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69 73  kquote>..<p>This
28f30 20 67 72 61 70 68 20 69 73 20 61 63 79 63 6c 69   graph is acycli
28f40 63 2e 20 20 41 6e 64 20 77 65 20 61 73 73 75 6d  c.  And we assum
28f50 65 20 74 68 61 74 20 74 68 65 20 6d 74 69 6d 65  e that the mtime
28f60 20 6f 66 20 65 76 65 72 79 0a 63 68 69 6c 64 20   of every.child 
28f70 63 68 65 63 6b 69 6e 20 69 73 20 6e 6f 20 6c 65  checkin is no le
28f80 73 73 20 74 68 61 6e 20 74 68 65 20 6d 74 69 6d  ss than the mtim
28f90 65 20 6f 66 20 61 6c 6c 20 69 74 73 20 70 61 72  e of all its par
28fa0 65 6e 74 73 2e 20 20 42 75 74 0a 75 6e 6c 69 6b  ents.  But.unlik
28fb0 65 20 74 68 65 20 65 61 72 6c 69 65 72 20 65 78  e the earlier ex
28fc0 61 6d 70 6c 65 73 2c 20 74 68 69 73 20 67 72 61  amples, this gra
28fd0 70 68 20 6d 69 67 68 74 20 68 61 76 65 20 6d 75  ph might have mu
28fe0 6c 74 69 70 6c 65 20 70 61 74 68 73 20 6f 66 0a  ltiple paths of.
28ff0 64 69 66 66 65 72 69 6e 67 20 6c 65 6e 67 74 68  differing length
29000 73 20 62 65 74 77 65 65 6e 20 61 6e 79 20 74 77  s between any tw
29010 6f 20 63 68 65 63 6b 69 6e 73 2e 0a 0a 3c 70 3e  o checkins...<p>
29020 57 65 20 77 61 6e 74 20 74 6f 20 6b 6e 6f 77 20  We want to know 
29030 74 68 65 20 74 77 65 6e 74 79 20 6d 6f 73 74 20  the twenty most 
29040 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f 72 73  recent ancestors
29050 20 69 6e 20 74 69 6d 65 20 28 6f 75 74 20 6f 66   in time (out of
29060 0a 74 68 65 20 74 68 6f 75 73 61 6e 64 73 20 61  .the thousands a
29070 6e 64 20 74 68 6f 75 73 61 6e 64 73 20 6f 66 20  nd thousands of 
29080 61 6e 63 65 73 74 6f 72 73 20 69 6e 20 74 68 65  ancestors in the
29090 20 77 68 6f 6c 65 20 44 41 47 29 20 66 6f 72 0a   whole DAG) for.
290a0 63 68 65 63 6b 69 6e 20 22 40 42 41 53 45 4c 49  checkin "@BASELI
290b0 4e 45 22 2e 20 20 28 41 20 71 75 65 72 79 20 73  NE".  (A query s
290c0 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20 69  imilar to this i
290d0 73 20 75 73 65 64 0a 62 79 20 74 68 65 20 3c 61  s used.by the <a
290e0 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77   href="http://ww
290f0 77 2e 66 6f 73 73 69 6c 2d 73 63 6d 2e 6f 72 67  w.fossil-scm.org
29100 2f 22 3e 46 6f 73 73 69 6c 3c 2f 61 3e 20 56 43  /">Fossil</a> VC
29110 53 20 74 6f 0a 73 68 6f 77 20 74 68 65 20 4e 20  S to.show the N 
29120 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e 63 65  most recent ance
29130 73 74 6f 72 73 20 6f 66 20 61 20 63 68 65 63 6b  stors of a check
29140 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a  .  For example:.
29150 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  <a href="http://
29160 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73  www.sqlite.org/s
29170 72 63 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d 74 72  rc/timeline?p=tr
29180 75 6e 6b 26 6e 3d 33 30 22 3e 68 74 74 70 3a 2f  unk&n=30">http:/
29190 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f  /www.sqlite.org/
291a0 73 72 63 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d 74  src/timeline?p=t
291b0 72 75 6e 6b 26 6e 3d 33 30 3c 2f 61 3e 2e 29 0a  runk&n=30</a>.).
291c0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
291d0 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56  e>.WITH RECURSIV
291e0 45 0a 20 20 61 6e 63 65 73 74 6f 72 28 69 64 2c  E.  ancestor(id,
291f0 6d 74 69 6d 65 29 20 41 53 20 28 0a 20 20 20 20  mtime) AS (.    
29200 53 45 4c 45 43 54 20 69 64 2c 20 6d 74 69 6d 65  SELECT id, mtime
29210 20 46 52 4f 4d 20 63 68 65 63 6b 69 6e 20 57 48   FROM checkin WH
29220 45 52 45 20 69 64 3d 40 42 41 53 45 4c 49 4e 45  ERE id=@BASELINE
29230 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 53  .    UNION.    S
29240 45 4c 45 43 54 20 64 65 72 69 76 65 64 66 72 6f  ELECT derivedfro
29250 6d 2e 78 66 72 6f 6d 2c 20 63 68 65 63 6b 69 6e  m.xfrom, checkin
29260 2e 6d 74 69 6d 65 0a 20 20 20 20 20 20 46 52 4f  .mtime.      FRO
29270 4d 20 61 6e 63 65 73 74 6f 72 2c 20 64 65 72 69  M ancestor, deri
29280 76 65 64 66 72 6f 6d 2c 20 63 68 65 63 6b 69 6e  vedfrom, checkin
29290 0a 20 20 20 20 20 57 48 45 52 45 20 61 6e 63 65  .     WHERE ance
292a0 73 74 6f 72 2e 69 64 3d 64 65 72 69 76 65 64 66  stor.id=derivedf
292b0 72 6f 6d 2e 78 74 6f 0a 20 20 20 20 20 20 20 41  rom.xto.       A
292c0 4e 44 20 63 68 65 63 6b 69 6e 2e 69 64 3d 64 65  ND checkin.id=de
292d0 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f 6d 0a  rivedfrom.xfrom.
292e0 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 63 68       ORDER BY ch
292f0 65 63 6b 69 6e 2e 6d 74 69 6d 65 20 44 45 53 43  eckin.mtime DESC
29300 0a 20 20 20 20 20 4c 49 4d 49 54 20 32 30 0a 20  .     LIMIT 20. 
29310 20 29 0a 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   ).SELECT * FROM
29320 20 63 68 65 63 6b 69 6e 20 4a 4f 49 4e 20 61 6e   checkin JOIN an
29330 63 65 73 74 6f 72 20 55 53 49 4e 47 28 69 64 29  cestor USING(id)
29340 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
29350 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 54 68 65 20 22  uote>..<p>.The "
29360 4f 52 44 45 52 20 42 59 20 63 68 65 63 6b 69 6e  ORDER BY checkin
29370 2e 6d 74 69 6d 65 20 44 45 53 43 22 20 74 65 72  .mtime DESC" ter
29380 6d 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69  m in the recursi
29390 76 65 2d 73 65 6c 65 63 74 20 6d 61 6b 65 73 0a  ve-select makes.
293a0 74 68 65 20 71 75 65 72 79 20 72 75 6e 20 6d 75  the query run mu
293b0 63 68 20 66 61 73 74 65 72 20 62 79 20 70 72 65  ch faster by pre
293c0 76 65 6e 74 69 6e 67 20 69 74 20 66 72 6f 6d 20  venting it from 
293d0 66 6f 6c 6c 6f 77 69 6e 67 0a 62 72 61 6e 63 68  following.branch
293e0 65 73 20 74 68 61 74 20 6d 65 72 67 65 20 63 68  es that merge ch
293f0 65 63 6b 69 6e 73 0a 66 72 6f 6d 20 6c 6f 6e 67  eckins.from long
29400 20 61 67 6f 2e 20 20 54 68 65 20 4f 52 44 45 52   ago.  The ORDER
29410 20 42 59 20 66 6f 72 63 65 73 20 74 68 65 20 72   BY forces the r
29420 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
29430 74 6f 20 66 6f 63 75 73 0a 6f 6e 20 74 68 65 20  to focus.on the 
29440 6d 6f 73 74 20 72 65 63 65 6e 74 20 63 68 65 63  most recent chec
29450 6b 69 6e 73 2c 20 74 68 65 20 6f 6e 65 73 20 77  kins, the ones w
29460 65 20 77 61 6e 74 2e 20 20 57 69 74 68 6f 75 74  e want.  Without
29470 20 74 68 65 20 4f 52 44 45 52 20 42 59 0a 6f 6e   the ORDER BY.on
29480 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73   the recursive-s
29490 65 6c 65 63 74 2c 20 6f 6e 65 20 77 6f 75 6c 64  elect, one would
294a0 20 62 65 20 66 6f 72 63 65 64 20 74 6f 20 63 6f   be forced to co
294b0 6d 70 75 74 65 20 74 68 65 20 63 6f 6d 70 6c 65  mpute the comple
294c0 74 65 20 73 65 74 20 6f 66 0a 74 68 6f 75 73 61  te set of.thousa
294d0 6e 64 73 20 6f 66 20 61 6e 63 65 73 74 6f 72 73  nds of ancestors
294e0 2c 20 73 6f 72 74 20 74 68 65 6d 20 61 6c 6c 20  , sort them all 
294f0 62 79 20 6d 74 69 6d 65 2c 20 74 68 65 6e 20 74  by mtime, then t
29500 61 6b 65 20 74 68 65 20 74 6f 70 20 74 77 65 6e  ake the top twen
29510 74 79 2e 0a 54 68 65 20 4f 52 44 45 52 20 42 59  ty..The ORDER BY
29520 20 65 73 73 65 6e 74 69 61 6c 6c 79 20 73 65 74   essentially set
29530 73 20 75 70 20 61 20 70 72 69 6f 72 69 74 79 20  s up a priority 
29540 71 75 65 75 65 20 74 68 61 74 0a 66 6f 72 63 65  queue that.force
29550 73 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  s the recursive 
29560 71 75 65 72 79 20 74 6f 20 6c 6f 6f 6b 20 61 74  query to look at
29570 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
29580 20 61 6e 63 65 73 74 6f 72 73 20 66 69 72 73 74   ancestors first
29590 2c 0a 61 6c 6c 6f 77 69 6e 67 20 74 68 65 20 75  ,.allowing the u
295a0 73 65 20 6f 66 20 61 20 4c 49 4d 49 54 20 63 6c  se of a LIMIT cl
295b0 61 75 73 65 20 74 6f 20 72 65 73 74 72 69 63 74  ause to restrict
295c0 20 74 68 65 20 73 63 6f 70 65 20 6f 66 20 74 68   the scope of th
295d0 65 0a 71 75 65 72 79 20 74 6f 20 6a 75 73 74 20  e.query to just 
295e0 74 68 65 20 63 68 65 63 6b 69 6e 73 20 6f 66 20  the checkins of 
295f0 69 6e 74 65 72 65 73 74 2e 0a 0a 3c 74 63 6c 3e  interest...<tcl>
29600 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 69 74 68  hd_fragment with
29610 6f 72 64 65 72 62 79 3c 2f 74 63 6c 3e 0a 3c 68  orderby</tcl>.<h
29620 34 3e 43 6f 6e 74 72 6f 6c 6c 69 6e 67 20 44 65  4>Controlling De
29630 70 74 68 2d 46 69 72 73 74 20 56 65 72 73 75 73  pth-First Versus
29640 20 42 72 65 61 64 74 68 2d 46 69 72 73 74 20 53   Breadth-First S
29650 65 61 72 63 68 20 4f 66 20 61 20 54 72 65 65 0a  earch Of a Tree.
29660 55 73 69 6e 67 20 4f 52 44 45 52 20 42 59 3c 2f  Using ORDER BY</
29670 68 34 3e 0a 0a 3c 70 3e 41 6e 20 4f 52 44 45 52  h4>..<p>An ORDER
29680 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 74 68   BY clause on th
29690 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
296a0 63 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  ct can be used t
296b0 6f 20 63 6f 6e 74 72 6f 6c 0a 77 68 65 74 68 65  o control.whethe
296c0 72 20 74 68 65 20 73 65 61 72 63 68 20 6f 66 20  r the search of 
296d0 61 20 74 72 65 65 20 69 73 20 64 65 70 74 68 2d  a tree is depth-
296e0 66 69 72 73 74 20 6f 72 20 62 72 65 61 64 74 68  first or breadth
296f0 2d 66 69 72 73 74 2e 20 20 54 6f 0a 69 6c 6c 75  -first.  To.illu
29700 73 74 72 61 74 65 2c 20 77 65 20 77 69 6c 6c 20  strate, we will 
29710 75 73 65 20 61 20 76 61 72 69 61 74 69 6f 6e 20  use a variation 
29720 6f 6e 20 74 68 65 20 22 6f 72 67 22 20 74 61 62  on the "org" tab
29730 6c 65 20 66 72 6f 6d 20 61 6e 20 65 78 61 6d 70  le from an examp
29740 6c 65 0a 61 62 6f 76 65 2c 20 77 69 74 68 6f 75  le.above, withou
29750 74 20 74 68 65 20 22 68 65 69 67 68 74 22 20 63  t the "height" c
29760 6f 6c 75 6d 6e 2c 20 61 6e 64 20 77 69 74 68 20  olumn, and with 
29770 73 6f 6d 65 20 72 65 61 6c 20 64 61 74 61 20 69  some real data i
29780 6e 73 65 72 74 65 64 3a 0a 0a 3c 62 6c 6f 63 6b  nserted:..<block
29790 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
297a0 54 45 20 54 41 42 4c 45 20 6f 72 67 28 0a 20 20  TE TABLE org(.  
297b0 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52  name TEXT PRIMAR
297c0 59 20 4b 45 59 2c 0a 20 20 62 6f 73 73 20 54 45  Y KEY,.  boss TE
297d0 58 54 20 52 45 46 45 52 45 4e 43 45 53 20 6f 72  XT REFERENCES or
297e0 67 0a 29 20 57 49 54 48 4f 55 54 20 52 4f 57 49  g.) WITHOUT ROWI
297f0 44 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f  D;.INSERT INTO o
29800 72 67 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65  rg VALUES('Alice
29810 27 2c 4e 55 4c 4c 29 3b 0a 49 4e 53 45 52 54 20  ',NULL);.INSERT 
29820 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28  INTO org VALUES(
29830 27 42 6f 62 27 2c 27 41 6c 69 63 65 27 29 3b 0a  'Bob','Alice');.
29840 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20  INSERT INTO org 
29850 56 41 4c 55 45 53 28 27 43 69 6e 64 79 27 2c 27  VALUES('Cindy','
29860 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52 54 20  Alice');.INSERT 
29870 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28  INTO org VALUES(
29880 27 44 61 76 65 27 2c 27 42 6f 62 27 29 3b 0a 49  'Dave','Bob');.I
29890 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56  NSERT INTO org V
298a0 41 4c 55 45 53 28 27 45 6d 6d 61 27 2c 27 42 6f  ALUES('Emma','Bo
298b0 62 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  b');.INSERT INTO
298c0 20 6f 72 67 20 56 41 4c 55 45 53 28 27 46 72 65   org VALUES('Fre
298d0 64 27 2c 27 43 69 6e 64 79 27 29 3b 0a 49 4e 53  d','Cindy');.INS
298e0 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c  ERT INTO org VAL
298f0 55 45 53 28 27 47 61 69 6c 27 2c 27 43 69 6e 64  UES('Gail','Cind
29900 79 27 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  y');.</pre></blo
29910 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 48 65 72  ckquote>..<p>Her
29920 65 20 69 73 20 61 20 71 75 65 72 79 20 74 6f 20  e is a query to 
29930 73 68 6f 77 20 74 68 65 20 74 72 65 65 20 73 74  show the tree st
29940 72 75 63 74 75 72 65 20 69 6e 20 61 20 62 72 65  ructure in a bre
29950 61 64 74 68 2d 66 69 72 73 74 20 70 61 74 74 65  adth-first patte
29960 72 6e 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  rn:..<blockquote
29970 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55  ><pre>.WITH RECU
29980 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f 61 6c  RSIVE.  under_al
29990 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c 29 20  ice(name,level) 
299a0 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28  AS (.    VALUES(
299b0 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20 20 55  'Alice',0).    U
299c0 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c  NION ALL.    SEL
299d0 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e  ECT org.name, un
299e0 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b  der_alice.level+
299f0 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f 72 67  1.      FROM org
29a00 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c 69 63   JOIN under_alic
29a10 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d 75 6e  e ON org.boss=un
29a20 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a 20  der_alice.name. 
29a30 20 20 20 20 4f 52 44 45 52 20 42 59 20 32 0a 20      ORDER BY 2. 
29a40 20 29 0a 53 45 4c 45 43 54 20 73 75 62 73 74 72   ).SELECT substr
29a50 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c  ('..........',1,
29a60 6c 65 76 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65  level*3) || name
29a70 20 46 52 4f 4d 20 75 6e 64 65 72 5f 61 6c 69 63   FROM under_alic
29a80 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  e;.</pre></block
29a90 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22  quote>..<p>The "
29aa0 4f 52 44 45 52 20 42 59 20 32 22 20 28 77 68 69  ORDER BY 2" (whi
29ab0 63 68 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d  ch means the sam
29ac0 65 20 61 73 20 22 4f 52 44 45 52 20 42 59 20 75  e as "ORDER BY u
29ad0 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c  nder_alice.level
29ae0 2b 31 22 29 0a 63 61 75 73 65 73 20 68 69 67 68  +1").causes high
29af0 65 72 20 6c 65 76 65 6c 73 20 69 6e 20 74 68 65  er levels in the
29b00 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 63 68   organization ch
29b10 61 72 74 20 28 77 69 74 68 20 73 6d 61 6c 6c 65  art (with smalle
29b20 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75 65 73  r "level" values
29b30 29 0a 74 6f 20 62 65 20 70 72 6f 63 65 73 73 65  ).to be processe
29b40 64 20 66 69 72 73 74 2c 20 72 65 73 75 6c 74 69  d first, resulti
29b50 6e 67 20 69 6e 20 61 20 62 72 65 61 64 74 68 2d  ng in a breadth-
29b60 66 69 72 73 74 20 73 65 61 72 63 68 2e 20 20 54  first search.  T
29b70 68 65 20 6f 75 74 70 75 74 20 69 73 3a 0a 0a 3c  he output is:..<
29b80 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
29b90 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e  .Alice....Bob...
29ba0 2e 43 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e 44 61 76  .Cindy.......Dav
29bb0 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e 2e  e.......Emma....
29bc0 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61  ...Fred.......Ga
29bd0 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  il.</pre></block
29be0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 42 75 74 20 69  quote>..<p>But i
29bf0 66 20 77 65 20 63 68 61 6e 67 65 20 74 68 65 20  f we change the 
29c00 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
29c10 74 6f 20 61 64 64 20 74 68 65 20 22 44 45 53 43  to add the "DESC
29c20 22 20 6d 6f 64 69 66 69 65 72 2c 20 74 68 61 74  " modifier, that
29c30 20 77 69 6c 6c 0a 63 61 75 73 65 20 6c 6f 77 65   will.cause lowe
29c40 72 20 6c 65 76 65 6c 73 20 69 6e 20 74 68 65 20  r levels in the 
29c50 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 28 77 69  organization (wi
29c60 74 68 20 6c 61 72 67 65 72 20 22 6c 65 76 65 6c  th larger "level
29c70 22 20 76 61 6c 75 65 73 29 20 74 6f 20 62 65 0a  " values) to be.
29c80 70 72 6f 63 65 73 73 65 64 20 66 69 72 73 74 20  processed first 
29c90 62 79 20 74 68 65 20 72 65 63 75 72 73 69 76 65  by the recursive
29ca0 2d 73 65 6c 65 63 74 2c 20 72 65 73 75 6c 74 69  -select, resulti
29cb0 6e 67 20 69 6e 20 61 20 64 65 70 74 68 2d 66 69  ng in a depth-fi
29cc0 72 73 74 20 73 65 61 72 63 68 3a 0a 0a 3c 62 6c  rst search:..<bl
29cd0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
29ce0 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
29cf0 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61 6d 65  under_alice(name
29d00 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20 20 20  ,level) AS (.   
29d10 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27 2c   VALUES('Alice',
29d20 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c  0).    UNION ALL
29d30 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72 67 2e  .    SELECT org.
29d40 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c 69 63  name, under_alic
29d50 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20 20 20  e.level+1.      
29d60 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20 75 6e  FROM org JOIN un
29d70 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f 72 67  der_alice ON org
29d80 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c 69 63  .boss=under_alic
29d90 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52 44 45  e.name.     ORDE
29da0 52 20 42 59 20 32 20 3c 62 3e 44 45 53 43 3c 2f  R BY 2 <b>DESC</
29db0 62 3e 0a 20 20 29 0a 53 45 4c 45 43 54 20 73 75  b>.  ).SELECT su
29dc0 62 73 74 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  bstr('..........
29dd0 27 2c 31 2c 6c 65 76 65 6c 2a 33 29 20 7c 7c 20  ',1,level*3) || 
29de0 6e 61 6d 65 20 46 52 4f 4d 20 75 6e 64 65 72 5f  name FROM under_
29df0 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  alice;.</pre></b
29e00 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
29e10 68 65 20 6f 75 74 70 75 74 20 6f 66 20 74 68 69  he output of thi
29e20 73 20 72 65 76 69 73 65 64 20 71 75 65 72 79 20  s revised query 
29e30 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  is:..<blockquote
29e40 3e 3c 70 72 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e  ><pre>.Alice....
29e50 42 6f 62 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e  Bob.......Dave..
29e60 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e 2e 43 69 6e  .....Emma....Cin
29e70 64 79 0a 2e 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e  dy.......Fred...
29e80 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c  ....Gail.</pre><
29e90 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
29ea0 3e 57 68 65 6e 20 74 68 65 20 4f 52 44 45 52 20  >When the ORDER 
29eb0 42 59 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69  BY clause is omi
29ec0 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  tted from the re
29ed0 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20  cursive-select, 
29ee0 74 68 65 0a 71 75 65 75 65 20 62 65 68 61 76 65  the.queue behave
29ef0 73 20 61 73 20 61 20 46 49 46 4f 2c 20 77 68 69  s as a FIFO, whi
29f00 63 68 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20  ch results in a 
29f10 62 72 65 61 64 74 68 2d 66 69 72 73 74 20 73 65  breadth-first se
29f20 61 72 63 68 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f  arch....<tcl>hd_
29f30 66 72 61 67 6d 65 6e 74 20 6d 61 6e 64 65 6c 62  fragment mandelb
29f40 72 6f 74 20 7b 63 6f 6d 70 75 74 65 20 74 68 65  rot {compute the
29f50 20 4d 61 6e 64 65 6c 62 72 6f 74 20 73 65 74 7d   Mandelbrot set}
29f60 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 4f 75 74 6c 61  </tcl>.<h4>Outla
29f70 6e 64 69 73 68 20 52 65 63 75 72 73 69 76 65 20  ndish Recursive 
29f80 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f  Query Examples</
29f90 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h4>..<p>The foll
29fa0 6f 77 69 6e 67 20 71 75 65 72 79 20 63 6f 6d 70  owing query comp
29fb0 75 74 65 73 20 61 6e 20 61 70 70 72 6f 78 69 6d  utes an approxim
29fc0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 4d 61 6e  ation of the Man
29fd0 64 65 6c 62 72 6f 74 20 53 65 74 0a 61 6e 64 20  delbrot Set.and 
29fe0 6f 75 74 70 75 74 73 20 74 68 65 20 72 65 73 75  outputs the resu
29ff0 6c 74 20 61 73 20 41 53 43 49 49 2d 61 72 74 3a  lt as ASCII-art:
2a000 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
2a010 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49  re>.WITH RECURSI
2a020 56 45 0a 20 20 78 61 78 69 73 28 78 29 20 41 53  VE.  xaxis(x) AS
2a030 20 28 56 41 4c 55 45 53 28 2d 32 2e 30 29 20 55   (VALUES(-2.0) U
2a040 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20  NION ALL SELECT 
2a050 78 2b 30 2e 30 35 20 46 52 4f 4d 20 78 61 78 69  x+0.05 FROM xaxi
2a060 73 20 57 48 45 52 45 20 78 26 6c 74 3b 31 2e 32  s WHERE x&lt;1.2
2a070 29 2c 0a 20 20 79 61 78 69 73 28 79 29 20 41 53  ),.  yaxis(y) AS
2a080 20 28 56 41 4c 55 45 53 28 2d 31 2e 30 29 20 55   (VALUES(-1.0) U
2a090 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20  NION ALL SELECT 
2a0a0 79 2b 30 2e 31 20 46 52 4f 4d 20 79 61 78 69 73  y+0.1 FROM yaxis
2a0b0 20 57 48 45 52 45 20 79 26 6c 74 3b 31 2e 30 29   WHERE y&lt;1.0)
2a0c0 2c 0a 20 20 6d 28 69 74 65 72 2c 20 63 78 2c 20  ,.  m(iter, cx, 
2a0d0 63 79 2c 20 78 2c 20 79 29 20 41 53 20 28 0a 20  cy, x, y) AS (. 
2a0e0 20 20 20 53 45 4c 45 43 54 20 30 2c 20 78 2c 20     SELECT 0, x, 
2a0f0 79 2c 20 30 2e 30 2c 20 30 2e 30 20 46 52 4f 4d  y, 0.0, 0.0 FROM
2a100 20 78 61 78 69 73 2c 20 79 61 78 69 73 0a 20 20   xaxis, yaxis.  
2a110 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20    UNION ALL.    
2a120 53 45 4c 45 43 54 20 69 74 65 72 2b 31 2c 20 63  SELECT iter+1, c
2a130 78 2c 20 63 79 2c 20 78 2a 78 2d 79 2a 79 20 2b  x, cy, x*x-y*y +
2a140 20 63 78 2c 20 32 2e 30 2a 78 2a 79 20 2b 20 63   cx, 2.0*x*y + c
2a150 79 20 46 52 4f 4d 20 6d 20 0a 20 20 20 20 20 57  y FROM m .     W
2a160 48 45 52 45 20 28 78 2a 78 20 2b 20 79 2a 79 29  HERE (x*x + y*y)
2a170 20 26 6c 74 3b 20 34 2e 30 20 41 4e 44 20 69 74   &lt; 4.0 AND it
2a180 65 72 26 6c 74 3b 32 38 0a 20 20 29 2c 0a 20 20  er&lt;28.  ),.  
2a190 6d 32 28 69 74 65 72 2c 20 63 78 2c 20 63 79 29  m2(iter, cx, cy)
2a1a0 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54   AS (.    SELECT
2a1b0 20 6d 61 78 28 69 74 65 72 29 2c 20 63 78 2c 20   max(iter), cx, 
2a1c0 63 79 20 46 52 4f 4d 20 6d 20 47 52 4f 55 50 20  cy FROM m GROUP 
2a1d0 42 59 20 63 78 2c 20 63 79 0a 20 20 29 2c 0a 20  BY cx, cy.  ),. 
2a1e0 20 61 28 74 29 20 41 53 20 28 0a 20 20 20 20 53   a(t) AS (.    S
2a1f0 45 4c 45 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63  ELECT group_conc
2a200 61 74 28 20 73 75 62 73 74 72 28 27 20 2e 2b 2a  at( substr(' .+*
2a210 23 27 2c 20 31 2b 6d 69 6e 28 69 74 65 72 2f 37  #', 1+min(iter/7
2a220 2c 34 29 2c 20 31 29 2c 20 27 27 29 20 0a 20 20  ,4), 1), '') .  
2a230 20 20 46 52 4f 4d 20 6d 32 20 47 52 4f 55 50 20    FROM m2 GROUP 
2a240 42 59 20 63 79 0a 20 20 29 0a 53 45 4c 45 43 54  BY cy.  ).SELECT
2a250 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 72 74   group_concat(rt
2a260 72 69 6d 28 74 29 2c 78 27 30 61 27 29 20 46 52  rim(t),x'0a') FR
2a270 4f 4d 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  OM a;.</pre></bl
2a280 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e  ockquote>..<p>In
2a290 20 74 68 69 73 20 71 75 65 72 79 2c 20 74 68 65   this query, the
2a2a0 20 22 78 61 78 69 73 22 20 61 6e 64 20 22 79 61   "xaxis" and "ya
2a2b0 78 69 73 22 20 43 54 45 73 20 64 65 66 69 6e 65  xis" CTEs define
2a2c0 20 74 68 65 20 67 72 69 64 20 6f 66 20 70 6f 69   the grid of poi
2a2d0 6e 74 73 20 66 6f 72 0a 77 68 69 63 68 20 74 68  nts for.which th
2a2e0 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 53 65 74  e Mandelbrot Set
2a2f0 20 77 69 6c 6c 20 62 65 20 61 70 70 72 6f 78 69   will be approxi
2a300 6d 61 74 65 64 2e 20 20 45 61 63 68 20 72 6f 77  mated.  Each row
2a310 20 69 6e 20 74 68 65 0a 22 6d 28 69 74 65 72 2c   in the."m(iter,
2a320 63 78 2c 63 79 2c 78 2c 79 29 22 20 43 54 45 20  cx,cy,x,y)" CTE 
2a330 6d 65 61 6e 73 20 74 68 61 74 20 61 66 74 65 72  means that after
2a340 20 22 69 74 65 72 22 20 69 74 65 72 61 74 69 6f   "iter" iteratio
2a350 6e 73 2c 20 74 68 65 20 4d 61 6e 64 65 6c 62 72  ns, the Mandelbr
2a360 6f 74 0a 69 74 65 72 61 74 69 6f 6e 20 73 74 61  ot.iteration sta
2a370 72 74 69 6e 67 20 61 74 20 63 78 2c 63 79 20 68  rting at cx,cy h
2a380 61 73 20 72 65 61 63 68 65 64 20 70 6f 69 6e 74  as reached point
2a390 20 78 2c 79 2e 20 20 54 68 65 20 6e 75 6d 62 65   x,y.  The numbe
2a3a0 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 0a  r of iterations.
2a3b0 69 6e 20 74 68 69 73 20 65 78 61 6d 70 6c 65 20  in this example 
2a3c0 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 32 38  is limited to 28
2a3d0 20 28 77 68 69 63 68 20 73 65 76 65 72 65 6c 79   (which severely
2a3e0 20 6c 69 6d 69 74 73 20 74 68 65 20 72 65 73 6f   limits the reso
2a3f0 6c 75 74 69 6f 6e 20 6f 66 0a 74 68 65 20 63 6f  lution of.the co
2a400 6d 70 75 74 61 74 69 6f 6e 2c 20 62 75 74 20 69  mputation, but i
2a410 73 20 73 75 66 66 69 63 69 65 6e 74 20 66 6f 72  s sufficient for
2a420 20 6c 6f 77 2d 72 65 73 6f 6c 75 74 69 6f 6e 20   low-resolution 
2a430 41 53 43 49 49 2d 61 72 74 20 6f 75 74 70 75 74  ASCII-art output
2a440 29 2e 0a 54 68 65 20 22 6d 32 28 69 74 65 72 2c  )..The "m2(iter,
2a450 63 78 2c 63 79 29 22 20 43 54 45 20 68 6f 6c 64  cx,cy)" CTE hold
2a460 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  s the maximum nu
2a470 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
2a480 6e 73 20 72 65 61 63 68 65 64 20 77 68 65 6e 0a  ns reached when.
2a490 73 74 61 72 74 69 6e 67 20 61 74 20 70 6f 69 6e  starting at poin
2a4a0 74 20 63 78 2c 63 79 2e 0a 46 69 6e 61 6c 6c 79  t cx,cy..Finally
2a4b0 2c 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68  , each row in th
2a4c0 65 20 22 61 28 74 29 22 20 43 54 45 20 68 6f 6c  e "a(t)" CTE hol
2a4d0 64 73 20 61 20 73 74 72 69 6e 67 20 0a 77 68 69  ds a string .whi
2a4e0 63 68 20 69 73 20 61 20 73 69 6e 67 6c 65 20 6c  ch is a single l
2a4f0 69 6e 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75  ine of the outpu
2a500 74 20 41 53 43 49 49 2d 61 72 74 2e 0a 54 68 65  t ASCII-art..The
2a510 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2a520 74 20 61 74 20 74 68 65 20 65 6e 64 20 6a 75 73  t at the end jus
2a530 74 20 71 75 65 72 69 65 73 20 74 68 65 20 22 61  t queries the "a
2a540 22 20 43 54 45 20 74 6f 0a 72 65 74 72 69 65 76  " CTE to.retriev
2a550 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 41  e all lines of A
2a560 53 43 49 49 2d 61 72 74 2c 20 6f 6e 65 20 62 79  SCII-art, one by
2a570 20 6f 6e 65 2e 0a 0a 3c 70 3e 52 75 6e 6e 69 6e   one...<p>Runnin
2a580 67 20 74 68 65 20 71 75 65 72 79 20 61 62 6f 76  g the query abov
2a590 65 20 69 6e 20 61 6e 20 53 51 4c 69 74 65 20 5b  e in an SQLite [
2a5a0 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65  command-line she
2a5b0 6c 6c 5d 20 72 65 73 75 6c 74 73 0a 69 6e 20 74  ll] results.in t
2a5c0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 75 74  he following out
2a5d0 70 75 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  put:..<blockquot
2a5e0 65 3e 3c 70 72 65 3e 0a 20 20 20 20 20 20 20 20  e><pre>.        
2a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a600 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
2a610 23 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #.              
2a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a630 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20       ..#*...    
2a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a650 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b               ..+
2a660 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20  ####+..         
2a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a680 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e     .......+####.
2a690 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20 20 20  ...   +.        
2a6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6b0 20 20 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23     ..##+*#######
2a6c0 23 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20  ###+.++++.      
2a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6e0 20 20 20 20 2e 2b 2e 23 23 23 23 23 23 23 23 23      .+.#########
2a6f0 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20  #########+..    
2a700 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e            ......
2a710 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23  .......+########
2a720 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20  ###########+.+. 
2a730 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b               ..+
2a740 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23  +..#.....*######
2a750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b  ###############+
2a760 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2e  ..             .
2a770 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23 23 23 23  ..+#######++####
2a780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a790 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20 20 2e  ###..          .
2a7a0 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23 23 23  ...+*###########
2a7b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a7c0 23 23 23 23 23 2e 0a 20 23 23 23 23 23 23 23 23  #####.. ########
2a7d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a7e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a7f0 23 23 23 23 23 2e 2e 2e 0a 20 20 20 20 20 20 20  #####....       
2a800 20 20 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 23     ....+*#######
2a810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a820 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20 20  #########..     
2a830 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23 23 23          ...+####
2a840 23 23 23 2b 2b 23 23 23 23 23 23 23 23 23 23 23  ###++###########
2a850 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20  ############..  
2a860 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b              ..++
2a870 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23  ..#.....*#######
2a880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e  ##############+.
2a890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e  .              .
2a8a0 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23  ............+###
2a8b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a8c0 2b 2e 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +.+.            
2a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2b                .+
2a8e0 2e 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
2a8f0 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20  ###+..          
2a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a910 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23   ..##+*#########
2a920 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20  #+.++++.        
2a930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a940 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23      .......+####
2a950 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20 20  ....   +.       
2a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a970 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23 23            ..+###
2a980 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  #+..            
2a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9a0 20 20 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20         ..#*...  
2a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9d0 20 20 2e 2e 2e 2e 23 0a 20 20 20 20 20 20 20 20    ....#.        
2a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9f0 20 20 20 20 20 20 20 20 20 20 20 20 2b 2e 0a 3c              +..<
2aa00 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
2aa10 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  e>..<tcl>hd_frag
2aa20 6d 65 6e 74 20 73 75 64 6f 6b 75 20 7b 73 6f 6c  ment sudoku {sol
2aa30 76 65 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65  ve Sudoku puzzle
2aa40 73 7d 20 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 69  s} </tcl>.<p>Thi
2aa50 73 20 6e 65 78 74 20 71 75 65 72 79 20 73 6f 6c  s next query sol
2aa60 76 65 73 20 61 20 53 75 64 6f 6b 75 20 70 75 7a  ves a Sudoku puz
2aa70 7a 6c 65 2e 20 20 54 68 65 20 73 74 61 74 65 20  zle.  The state 
2aa80 6f 66 20 74 68 65 20 70 75 7a 7a 6c 65 20 69 73  of the puzzle is
2aa90 0a 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 38  .defined by an 8
2aaa0 31 2d 63 68 61 72 61 63 74 65 72 20 73 74 72 69  1-character stri
2aab0 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 61  ng formed by rea
2aac0 64 69 6e 67 20 65 6e 74 72 69 65 73 20 66 72 6f  ding entries fro
2aad0 6d 20 74 68 65 0a 70 75 7a 7a 6c 65 20 62 6f 78  m the.puzzle box
2aae0 20 72 6f 77 20 62 79 20 72 6f 77 20 66 72 6f 6d   row by row from
2aaf0 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 61   left to right a
2ab00 6e 64 20 74 68 65 6e 20 66 72 6f 6d 20 74 6f 70  nd then from top
2ab10 20 74 6f 20 62 6f 74 74 6f 6d 2e 0a 42 6c 61 6e   to bottom..Blan
2ab20 6b 20 73 71 75 61 72 65 73 20 69 6e 20 74 68 65  k squares in the
2ab30 20 70 75 7a 7a 6c 65 20 61 72 65 20 64 65 6e 6f   puzzle are deno
2ab40 74 65 64 20 62 79 20 61 20 22 2e 22 20 63 68 61  ted by a "." cha
2ab50 72 61 63 74 65 72 2e 20 20 0a 54 68 75 73 20 74  racter.  .Thus t
2ab60 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 3a  he input string:
2ab70 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35  ..<blockquote>.5
2ab80 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e  3..7....6..195..
2ab90 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e  ..98....6.8...6.
2aba0 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e  ..34..8.3..17...
2abb0 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e  2...6.6....28...
2abc0 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39  .419..5....8..79
2abd0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
2abe0 3c 70 3e 43 6f 72 72 65 73 70 6f 6e 64 73 20 74  <p>Corresponds t
2abf0 6f 20 61 20 70 75 7a 7a 6c 65 20 6c 69 6b 65 20  o a puzzle like 
2ac00 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  this:..<blockquo
2ac10 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  te>.<table borde
2ac20 72 3d 22 31 22 20 63 65 6c 6c 70 61 64 64 69 6e  r="1" cellpaddin
2ac30 67 3d 22 35 22 3e 0a 3c 74 72 3e 3c 74 64 3e 35  g="5">.<tr><td>5
2ac40 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>3<td> <td> <
2ac50 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>7<td> <td> <t
2ac60 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e  d> <td>.<tr><td>
2ac70 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31  6<td> <td> <td>1
2ac80 3c 74 64 3e 39 3c 74 64 3e 35 3c 74 64 3e 20 3c  <td>9<td>5<td> <
2ac90 74 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64  td> <td>.<tr><td
2aca0 3e 20 3c 74 64 3e 39 3c 74 64 3e 38 3c 74 64 3e  > <td>9<td>8<td>
2acb0 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20   <td> <td> <td> 
2acc0 3c 74 64 3e 36 3c 74 64 3e 0a 3c 74 72 3e 3c 74  <td>6<td>.<tr><t
2acd0 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>8<td> <td> <td
2ace0 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e  > <td>6<td> <td>
2acf0 20 3c 74 64 3e 20 3c 74 64 3e 33 0a 3c 74 72 3e   <td> <td>3.<tr>
2ad00 3c 74 64 3e 34 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>4<td> <td> <
2ad10 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 33 3c 74  td>8<td> <td>3<t
2ad20 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 0a 3c 74  d> <td> <td>1.<t
2ad30 72 3e 3c 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e  r><td>7<td> <td>
2ad40 20 3c 74 64 3e 20 3c 74 64 3e 32 3c 74 64 3e 20   <td> <td>2<td> 
2ad50 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 0a  <td> <td> <td>6.
2ad60 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 36 3c 74  <tr><td> <td>6<t
2ad70 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
2ad80 3e 20 3c 74 64 3e 32 3c 74 64 3e 38 3c 74 64 3e  > <td>2<td>8<td>
2ad90 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c  .<tr><td> <td> <
2ada0 74 64 3e 20 3c 74 64 3e 34 3c 74 64 3e 31 3c 74  td> <td>4<td>1<t
2adb0 64 3e 39 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>9<td> <td> <td
2adc0 3e 35 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e  >5.<tr><td> <td>
2add0 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38   <td> <td> <td>8
2ade0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c  <td> <td> <td>7<
2adf0 74 64 3e 39 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  td>9.</table>.</
2ae00 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
2ae10 54 68 69 73 20 69 73 20 74 68 65 20 71 75 65 72  This is the quer
2ae20 79 20 74 68 61 74 20 73 6f 6c 76 65 73 20 74 68  y that solves th
2ae30 65 20 70 75 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f 63  e puzzle:..<bloc
2ae40 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
2ae50 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 69 6e  H RECURSIVE.  in
2ae60 70 75 74 28 73 75 64 29 20 41 53 20 28 0a 20 20  put(sud) AS (.  
2ae70 20 20 56 41 4c 55 45 53 28 27 35 33 2e 2e 37 2e    VALUES('53..7.
2ae80 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e  ...6..195....98.
2ae90 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e  ...6.8...6...34.
2aea0 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36  .8.3..17...2...6
2aeb0 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e  .6....28....419.
2aec0 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 27 29 0a 20 20  .5....8..79').  
2aed0 29 2c 0a 20 20 64 69 67 69 74 73 28 7a 2c 20 6c  ),.  digits(z, l
2aee0 70 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55  p) AS (.    VALU
2aef0 45 53 28 27 31 27 2c 20 31 29 0a 20 20 20 20 55  ES('1', 1).    U
2af00 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 0a  NION ALL SELECT.
2af10 20 20 20 20 43 41 53 54 28 6c 70 2b 31 20 41 53      CAST(lp+1 AS
2af20 20 54 45 58 54 29 2c 20 6c 70 2b 31 20 46 52 4f   TEXT), lp+1 FRO
2af30 4d 20 64 69 67 69 74 73 20 57 48 45 52 45 20 6c  M digits WHERE l
2af40 70 26 6c 74 3b 39 0a 20 20 29 2c 0a 20 20 78 28  p&lt;9.  ),.  x(
2af50 73 2c 20 69 6e 64 29 20 41 53 20 28 0a 20 20 20  s, ind) AS (.   
2af60 20 53 45 4c 45 43 54 20 73 75 64 2c 20 69 6e 73   SELECT sud, ins
2af70 74 72 28 73 75 64 2c 20 27 2e 27 29 20 46 52 4f  tr(sud, '.') FRO
2af80 4d 20 69 6e 70 75 74 0a 20 20 20 20 55 4e 49 4f  M input.    UNIO
2af90 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54  N ALL.    SELECT
2afa0 0a 20 20 20 20 20 20 73 75 62 73 74 72 28 73 2c  .      substr(s,
2afb0 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c 20 7a 20   1, ind-1) || z 
2afc0 7c 7c 20 73 75 62 73 74 72 28 73 2c 20 69 6e 64  || substr(s, ind
2afd0 2b 31 29 2c 0a 20 20 20 20 20 20 69 6e 73 74 72  +1),.      instr
2afe0 28 20 73 75 62 73 74 72 28 73 2c 20 31 2c 20 69  ( substr(s, 1, i
2aff0 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75  nd-1) || z || su
2b000 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29 2c 20  bstr(s, ind+1), 
2b010 27 2e 27 20 29 0a 20 20 20 20 20 46 52 4f 4d 20  '.' ).     FROM 
2b020 78 2c 20 64 69 67 69 74 73 20 41 53 20 7a 0a 20  x, digits AS z. 
2b030 20 20 20 57 48 45 52 45 20 69 6e 64 3e 30 0a 20     WHERE ind>0. 
2b040 20 20 20 20 20 41 4e 44 20 4e 4f 54 20 45 58 49       AND NOT EXI
2b050 53 54 53 20 28 0a 20 20 20 20 20 20 20 20 20 20  STS (.          
2b060 20 20 53 45 4c 45 43 54 20 31 0a 20 20 20 20 20    SELECT 1.     
2b070 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 64 69           FROM di
2b080 67 69 74 73 20 41 53 20 6c 70 0a 20 20 20 20 20  gits AS lp.     
2b090 20 20 20 20 20 20 20 20 57 48 45 52 45 20 7a 2e          WHERE z.
2b0a0 7a 20 3d 20 73 75 62 73 74 72 28 73 2c 20 28 28  z = substr(s, ((
2b0b0 69 6e 64 2d 31 29 2f 39 29 2a 39 20 2b 20 6c 70  ind-1)/9)*9 + lp
2b0c0 2c 20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20  , 1).           
2b0d0 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75       OR z.z = su
2b0e0 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31 29  bstr(s, ((ind-1)
2b0f0 25 39 29 20 2b 20 28 6c 70 2d 31 29 2a 39 20 2b  %9) + (lp-1)*9 +
2b100 20 31 2c 20 31 29 0a 20 20 20 20 20 20 20 20 20   1, 1).         
2b110 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20         OR z.z = 
2b120 73 75 62 73 74 72 28 73 2c 20 28 28 28 69 6e 64  substr(s, (((ind
2b130 2d 31 29 2f 33 29 20 25 20 33 29 20 2a 20 33 0a  -1)/3) % 3) * 3.
2b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b150 20 20 20 20 20 20 20 20 2b 20 28 28 69 6e 64 2d          + ((ind-
2b160 31 29 2f 32 37 29 20 2a 20 32 37 20 2b 20 6c 70  1)/27) * 27 + lp
2b170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b180 20 20 20 20 20 20 20 20 20 2b 20 28 28 6c 70 2d           + ((lp-
2b190 31 29 20 2f 20 33 29 20 2a 20 36 2c 20 31 29 0a  1) / 3) * 6, 1).
2b1a0 20 20 20 20 20 20 20 20 20 29 0a 20 20 29 0a 53           ).  ).S
2b1b0 45 4c 45 43 54 20 73 20 46 52 4f 4d 20 78 20 57  ELECT s FROM x W
2b1c0 48 45 52 45 20 69 6e 64 3d 30 3b 0a 3c 2f 70 72  HERE ind=0;.</pr
2b1d0 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
2b1e0 0a 3c 70 3e 54 68 65 20 22 69 6e 70 75 74 22 20  .<p>The "input" 
2b1f0 43 54 45 20 64 65 66 69 6e 65 73 20 74 68 65 20  CTE defines the 
2b200 69 6e 70 75 74 20 70 75 7a 7a 6c 65 2e 0a 54 68  input puzzle..Th
2b210 65 20 22 64 69 67 69 74 73 22 20 43 54 45 20 64  e "digits" CTE d
2b220 65 66 69 6e 65 73 20 61 20 74 61 62 6c 65 20 74  efines a table t
2b230 68 61 74 20 68 6f 6c 64 73 20 61 6c 6c 20 64 69  hat holds all di
2b240 67 69 74 73 20 62 65 74 77 65 65 6e 20 31 20 61  gits between 1 a
2b250 6e 64 20 39 2e 0a 54 68 65 20 77 6f 72 6b 20 6f  nd 9..The work o
2b260 66 20 73 6f 6c 76 69 6e 67 20 74 68 65 20 70 75  f solving the pu
2b270 7a 7a 6c 65 20 69 73 20 75 6e 64 65 72 74 61 6b  zzle is undertak
2b280 65 6e 20 62 79 20 74 68 65 20 22 78 22 20 43 54  en by the "x" CT
2b290 45 2e 0a 41 6e 20 65 6e 74 72 79 20 69 6e 20 78  E..An entry in x
2b2a0 28 73 2c 69 6e 64 29 20 6d 65 61 6e 73 20 74 68  (s,ind) means th
2b2b0 61 74 20 74 68 65 20 38 31 2d 63 68 61 72 61 63  at the 81-charac
2b2c0 74 65 72 20 73 74 72 69 6e 67 20 22 73 22 20 69  ter string "s" i
2b2d0 73 20 61 20 76 61 6c 69 64 0a 73 75 64 6f 6b 75  s a valid.sudoku
2b2e0 20 70 75 7a 7a 6c 65 20 28 69 74 20 68 61 73 20   puzzle (it has 
2b2f0 6e 6f 20 63 6f 6e 66 6c 69 63 74 73 29 20 61 6e  no conflicts) an
2b300 64 20 74 68 61 74 20 74 68 65 20 66 69 72 73 74  d that the first
2b310 20 75 6e 6b 6e 6f 77 6e 20 63 68 61 72 61 63 74   unknown charact
2b320 65 72 0a 69 73 20 61 74 20 70 6f 73 69 74 69 6f  er.is at positio
2b330 6e 20 22 69 6e 64 22 2c 20 6f 72 20 69 6e 64 3d  n "ind", or ind=
2b340 3d 30 20 69 66 20 61 6c 6c 20 63 68 61 72 61 63  =0 if all charac
2b350 74 65 72 20 70 6f 73 69 74 69 6f 6e 73 20 61 72  ter positions ar
2b360 65 20 66 69 6c 6c 65 64 20 69 6e 2e 0a 54 68 65  e filled in..The
2b370 20 67 6f 61 6c 2c 20 74 68 65 6e 2c 20 69 73 20   goal, then, is 
2b380 74 6f 20 63 6f 6d 70 75 74 65 20 65 6e 74 72 69  to compute entri
2b390 65 73 20 66 6f 72 20 22 78 22 20 77 69 74 68 20  es for "x" with 
2b3a0 61 6e 20 22 69 6e 64 22 20 6f 66 20 30 2e 0a 0a  an "ind" of 0...
2b3b0 3c 70 3e 54 68 65 20 73 6f 6c 76 65 72 20 77 6f  <p>The solver wo
2b3c0 72 6b 73 20 62 79 20 61 64 64 69 6e 67 20 6e 65  rks by adding ne
2b3d0 77 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65  w entries to the
2b3e0 20 22 78 22 20 72 65 63 75 72 73 69 76 65 20 74   "x" recursive t
2b3f0 61 62 6c 65 2e 0a 47 69 76 65 6e 20 70 72 69 6f  able..Given prio
2b400 72 20 65 6e 74 72 69 65 73 2c 20 74 68 65 20 72  r entries, the r
2b410 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
2b420 74 72 69 65 73 20 74 6f 20 66 69 6c 6c 20 69 6e  tries to fill in
2b430 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 0a 70 6f   a single new.po
2b440 73 69 74 69 6f 6e 20 77 69 74 68 20 61 6c 6c 20  sition with all 
2b450 76 61 6c 75 65 73 20 62 65 74 77 65 65 6e 20 31  values between 1
2b460 20 61 6e 64 20 39 20 74 68 61 74 20 61 63 74 75   and 9 that actu
2b470 61 6c 6c 79 20 77 6f 72 6b 20 69 6e 20 74 68 61  ally work in tha
2b480 74 0a 70 6f 73 69 74 69 6f 6e 2e 20 20 54 68 65  t.position.  The
2b490 20 63 6f 6d 70 6c 69 63 61 74 65 64 20 22 4e 4f   complicated "NO
2b4a0 54 20 45 58 49 53 54 53 22 20 73 75 62 71 75 65  T EXISTS" subque
2b4b0 72 79 20 69 73 20 74 68 65 20 6d 61 67 69 63 20  ry is the magic 
2b4c0 74 68 61 74 0a 66 69 67 75 72 65 73 20 6f 75 74  that.figures out
2b4d0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
2b4e0 65 61 63 68 20 63 61 6e 64 69 64 61 74 65 20 22  each candidate "
2b4f0 73 22 20 73 74 72 69 6e 67 20 69 73 20 61 20 76  s" string is a v
2b500 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a  alid.sudoku puzz
2b510 6c 65 20 6f 72 20 6e 6f 74 2e 0a 0a 3c 70 3e 54  le or not...<p>T
2b520 68 65 20 66 69 6e 61 6c 20 61 6e 73 77 65 72 20  he final answer 
2b530 69 73 20 66 6f 75 6e 64 20 62 79 20 6c 6f 6f 6b  is found by look
2b540 69 6e 67 20 66 6f 72 20 61 20 73 74 72 69 6e 67  ing for a string
2b550 20 77 69 74 68 20 69 6e 64 3d 3d 30 2e 0a 49 66   with ind==0..If
2b560 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 73 75   the original su
2b570 64 6f 6b 75 20 70 72 6f 62 6c 65 6d 20 64 69 64  doku problem did
2b580 20 6e 6f 74 20 68 61 76 65 20 61 20 75 6e 69 71   not have a uniq
2b590 75 65 20 73 6f 6c 75 74 69 6f 6e 2c 20 74 68 65  ue solution, the
2b5a0 6e 0a 74 68 65 20 71 75 65 72 79 20 77 69 6c 6c  n.the query will
2b5b0 20 72 65 74 75 72 6e 20 61 6c 6c 20 70 6f 73 73   return all poss
2b5c0 69 62 6c 65 20 73 6f 6c 75 74 69 6f 6e 73 2e 20  ible solutions. 
2b5d0 20 49 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   If the original
2b5e0 20 70 72 6f 62 6c 65 6d 0a 77 61 73 20 75 6e 73   problem.was uns
2b5f0 6f 6c 76 61 62 6c 65 2c 20 74 68 65 6e 20 6e 6f  olvable, then no
2b600 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20 72 65   rows will be re
2b610 74 75 72 6e 65 64 2e 20 20 49 6e 20 74 68 69 73  turned.  In this
2b620 20 63 61 73 65 2c 20 74 68 65 20 75 6e 69 71 75   case, the uniqu
2b630 65 0a 61 6e 73 77 65 72 20 69 73 3a 0a 0a 3c 62  e.answer is:..<b
2b640 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 34 36 37  lockquote>.53467
2b650 38 39 31 32 36 37 32 31 39 35 33 34 38 31 39 38  8912672195348198
2b660 33 34 32 35 36 37 38 35 39 37 36 31 34 32 33 34  3425678597614234
2b670 32 36 38 35 33 37 39 31 37 31 33 39 32 34 38 35  2685379171392485
2b680 36 39 36 31 35 33 37 32 38 34 32 38 37 34 31 39  6961537284287419
2b690 36 33 35 33 34 35 32 38 36 31 37 39 0a 3c 2f 62  635345286179.</b
2b6a0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
2b6b0 68 65 20 73 6f 6c 75 74 69 6f 6e 20 77 61 73 20  he solution was 
2b6c0 63 6f 6d 70 75 74 65 64 20 69 6e 20 6c 65 73 73  computed in less
2b6d0 20 74 68 61 6e 20 33 30 30 20 6d 69 6c 6c 69 73   than 300 millis
2b6e0 65 63 6f 6e 64 73 20 6f 6e 20 61 20 6d 6f 64 65  econds on a mode
2b6f0 72 6e 0a 77 6f 72 6b 73 74 61 74 69 6f 6e 2e 0a  rn.workstation..
2b700 0a 3c 68 33 3e 4c 69 6d 69 74 61 74 69 6f 6e 73  .<h3>Limitations
2b710 20 41 6e 64 20 43 61 76 65 61 74 73 3c 2f 68 33   And Caveats</h3
2b720 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a  >..<ul>.<li><p>.
2b730 54 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  The WITH clause 
2b740 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 77  cannot be used w
2b750 69 74 68 69 6e 20 61 20 5b 43 52 45 41 54 45 20  ithin a [CREATE 
2b760 54 52 49 47 47 45 52 5d 2e 0a 3c 6c 69 3e 3c 70  TRIGGER]..<li><p
2b770 3e 0a 54 68 65 20 57 49 54 48 20 63 6c 61 75 73  >.The WITH claus
2b780 65 20 6d 75 73 74 20 61 70 70 65 61 72 20 61 74  e must appear at
2b790 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
2b7a0 66 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 5b 53  f a top-level [S
2b7b0 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
2b7c0 0a 6f 72 20 61 74 20 74 68 65 20 62 65 67 69 6e  .or at the begin
2b7d0 6e 69 6e 67 20 6f 66 20 61 20 73 75 62 71 75 65  ning of a subque
2b7e0 72 79 2e 20 20 54 68 65 20 57 49 54 48 20 63 6c  ry.  The WITH cl
2b7f0 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 70  ause cannot be p
2b800 72 65 70 65 6e 64 65 64 20 74 6f 0a 74 68 65 20  repended to.the 
2b810 73 65 63 6f 6e 64 20 6f 72 20 73 75 62 73 65 71  second or subseq
2b820 75 65 6e 74 20 53 45 4c 45 43 54 20 73 74 61 74  uent SELECT stat
2b830 65 6d 65 6e 74 20 6f 66 20 61 20 5b 63 6f 6d 70  ement of a [comp
2b840 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2e 0a 3c 6c  ound select]..<l
2b850 69 3e 3c 70 3e 0a 54 68 65 20 53 51 4c 3a 31 39  i><p>.The SQL:19
2b860 39 39 20 73 70 65 63 20 72 65 71 75 69 72 65 73  99 spec requires
2b870 20 74 68 61 74 20 74 68 65 20 52 45 43 55 52 53   that the RECURS
2b880 49 56 45 20 6b 65 79 77 6f 72 64 20 66 6f 6c 6c  IVE keyword foll
2b890 6f 77 20 57 49 54 48 20 69 6e 20 61 6e 79 0a 57  ow WITH in any.W
2b8a0 49 54 48 20 63 6c 61 75 73 65 20 74 68 61 74 20  ITH clause that 
2b8b0 69 6e 63 6c 75 64 65 73 20 61 20 72 65 63 75 72  includes a recur
2b8c0 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  sive common tabl
2b8d0 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 48  e expression.  H
2b8e0 6f 77 65 76 65 72 2c 20 66 6f 72 0a 63 6f 6d 70  owever, for.comp
2b8f0 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 53  atibility with S
2b900 71 6c 53 65 72 76 65 72 20 61 6e 64 20 4f 72 61  qlServer and Ora
2b910 63 6c 65 2c 20 53 51 4c 69 74 65 20 64 6f 65 73  cle, SQLite does
2b920 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 74 68 69   not enforce thi
2b930 73 20 72 75 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c  s rule..</ul>..<
2b940 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
2b950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b990 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53 45 4c  ####.Section SEL
2b9a0 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45 4c 45  ECT select {SELE
2b9b0 43 54 20 71 75 65 72 79 7d 0a 0a 52 65 63 75 72  CT query}..Recur
2b9c0 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
2b9d0 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f  m select-stmt.</
2b9e0 74 63 6c 3e 0a 0a 0a 3c 70 3e 54 68 65 20 53 45  tcl>...<p>The SE
2b9f0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
2ba00 73 20 75 73 65 64 20 74 6f 20 71 75 65 72 79 20  s used to query 
2ba10 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
2ba20 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 61 20 53  he.result of a S
2ba30 45 4c 45 43 54 20 69 73 20 7a 65 72 6f 20 6f 72  ELECT is zero or
2ba40 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 64 61   more rows of da
2ba50 74 61 20 77 68 65 72 65 20 65 61 63 68 20 72 6f  ta where each ro
2ba60 77 0a 68 61 73 20 61 20 66 69 78 65 64 20 6e 75  w.has a fixed nu
2ba70 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e  mber of columns.
2ba80 20 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65    A SELECT state
2ba90 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61  ment does not ma
2baa0 6b 65 0a 61 6e 79 20 63 68 61 6e 67 65 73 20 74  ke.any changes t
2bab0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a  o the database..
2bac0 0a 3c 70 3e 54 68 65 20 22 5b 73 65 6c 65 63 74  .<p>The "[select
2bad0 2d 73 74 6d 74 5d 22 20 73 79 6e 74 61 78 20 64  -stmt]" syntax d
2bae0 69 61 67 72 61 6d 20 61 62 6f 76 65 20 61 74 74  iagram above att
2baf0 65 6d 70 74 73 20 74 6f 20 73 68 6f 77 20 61 73  empts to show as
2bb00 20 6d 75 63 68 20 6f 66 20 74 68 65 0a 53 45 4c   much of the.SEL
2bb10 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 73 79  ECT statement sy
2bb20 6e 74 61 78 20 61 73 20 70 6f 73 73 69 62 6c 65  ntax as possible
2bb30 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 64 69 61   in a single dia
2bb40 67 72 61 6d 2c 20 62 65 63 61 75 73 65 20 73 6f  gram, because so
2bb50 6d 65 20 72 65 61 64 65 72 73 0a 66 69 6e 64 20  me readers.find 
2bb60 74 68 61 74 20 68 65 6c 70 66 75 6c 2e 20 20 54  that helpful.  T
2bb70 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 22 5b 66  he following "[f
2bb80 61 63 74 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73  actored-select-s
2bb90 74 6d 74 5d 22 20 69 73 20 61 6e 20 61 6c 74 65  tmt]" is an alte
2bba0 72 6e 61 74 69 76 65 0a 73 79 6e 74 61 78 20 64  rnative.syntax d
2bbb0 69 61 67 72 61 6d 73 20 74 68 61 74 20 65 78 70  iagrams that exp
2bbc0 72 65 73 73 65 73 20 74 68 65 20 73 61 6d 65 20  resses the same 
2bbd0 73 79 6e 74 61 78 20 62 75 74 20 74 72 69 65 73  syntax but tries
2bbe0 20 74 6f 20 62 72 65 61 6b 20 74 68 65 20 73 79   to break the sy
2bbf0 6e 74 61 78 20 0a 64 6f 77 6e 20 69 6e 74 6f 20  ntax .down into 
2bc00 73 6d 61 6c 6c 65 72 20 63 68 75 6e 6b 73 2e 0a  smaller chunks..
2bc10 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65  .<tcl>.Recursive
2bc20 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 2d 2d  BubbleDiagram --
2bc30 69 6e 69 74 69 61 6c 6c 79 2d 68 69 64 64 65 6e  initially-hidden
2bc40 20 66 61 63 74 6f 72 65 64 2d 73 65 6c 65 63 74   factored-select
2bc50 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d 63 6f 72  -stmt select-cor
2bc60 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74  e.</tcl>..<p>Not
2bc70 65 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65  e that there are
2bc80 20 70 61 74 68 73 20 74 68 72 6f 75 67 68 20 74   paths through t
2bc90 68 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  he syntax diagra
2bca0 6d 73 20 74 68 61 74 0a 61 72 65 20 6e 6f 74 20  ms that.are not 
2bcb0 61 6c 6c 6f 77 65 64 20 69 6e 20 70 72 61 63 74  allowed in pract
2bcc0 69 63 65 2e 20 20 53 6f 6d 65 20 65 78 61 6d 70  ice.  Some examp
2bcd0 6c 65 73 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41 20  les:.<ul>.<li>A 
2bce0 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73 65 20  [VALUES] clause 
2bcf0 63 61 6e 20 62 65 20 74 68 65 20 66 69 72 73 74  can be the first
2bd00 20 65 6c 65 6d 65 6e 74 20 69 6e 20 61 20 5b 63   element in a [c
2bd10 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 0a  ompound SELECT].
2bd20 20 20 20 20 74 68 61 74 20 75 73 65 73 20 61 20      that uses a 
2bd30 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 2c 20 62  [WITH] clause, b
2bd40 75 74 20 61 20 5b 73 69 6d 70 6c 65 20 53 45 4c  ut a [simple SEL
2bd50 45 43 54 5d 20 74 68 61 74 20 63 6f 6e 73 69 73  ECT] that consis
2bd60 74 73 20 6f 66 0a 20 20 20 20 6a 75 73 74 20 61  ts of.    just a
2bd70 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73 65   [VALUES] clause
2bd80 20 63 61 6e 6e 6f 74 20 62 65 20 70 72 65 63 65   cannot be prece
2bd90 64 65 64 20 62 79 20 61 20 5b 57 49 54 48 5d 20  ded by a [WITH] 
2bda0 63 6c 61 75 73 65 2e 0a 3c 6c 69 3e 54 68 65 20  clause..<li>The 
2bdb0 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 20 6d 75  [WITH] clause mu
2bdc0 73 74 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20  st occur on the 
2bdd0 66 69 72 73 74 20 53 45 4c 45 43 54 20 6f 66 20  first SELECT of 
2bde0 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  a [compound SELE
2bdf0 43 54 5d 2e 0a 20 20 20 20 49 74 20 63 61 6e 6e  CT]..    It cann
2be00 6f 74 20 66 6f 6c 6c 6f 77 20 61 20 5b 63 6f 6d  ot follow a [com
2be10 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 2e  pound-operator].
2be20 0a 3c 2f 75 6c 3e 0a 54 68 65 73 65 20 61 6e 64  .</ul>.These and
2be30 20 6f 74 68 65 72 20 73 69 6d 69 6c 61 72 20 73   other similar s
2be40 79 6e 74 61 78 20 72 65 73 74 72 69 63 74 69 6f  yntax restrictio
2be50 6e 73 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ns are described
2be60 20 69 6e 20 74 68 65 20 74 65 78 74 2e 0a 0a 3c   in the text...<
2be70 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74 61  p>The SELECT sta
2be80 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20 6d 6f  tement is the mo
2be90 73 74 20 63 6f 6d 70 6c 69 63 61 74 65 64 20 63  st complicated c
2bea0 6f 6d 6d 61 6e 64 20 69 6e 20 74 68 65 20 53 51  ommand in the SQ
2beb0 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 54 6f 20 6d  L language..To m
2bec0 61 6b 65 20 74 68 65 20 64 65 73 63 72 69 70 74  ake the descript
2bed0 69 6f 6e 20 65 61 73 69 65 72 20 74 6f 20 66 6f  ion easier to fo
2bee0 6c 6c 6f 77 2c 20 73 6f 6d 65 20 6f 66 20 74 68  llow, some of th
2bef0 65 20 70 61 73 73 61 67 65 73 20 62 65 6c 6f 77  e passages below
2bf00 20 64 65 73 63 72 69 62 65 0a 74 68 65 20 77 61   describe.the wa
2bf10 79 20 74 68 65 20 64 61 74 61 20 72 65 74 75 72  y the data retur
2bf20 6e 65 64 20 62 79 20 61 20 53 45 4c 45 43 54 20  ned by a SELECT 
2bf30 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64 65 74  statement is det
2bf40 65 72 6d 69 6e 65 64 20 61 73 20 61 20 73 65 72  ermined as a ser
2bf50 69 65 73 20 6f 66 0a 73 74 65 70 73 2e 20 49 74  ies of.steps. It
2bf60 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
2bf70 20 6b 65 65 70 20 69 6e 20 6d 69 6e 64 20 74 68   keep in mind th
2bf80 61 74 20 74 68 69 73 20 69 73 20 70 75 72 65 6c  at this is purel
2bf90 79 20 69 6c 6c 75 73 74 72 61 74 69 76 65 20 2d  y illustrative -
2bfa0 0a 69 6e 20 70 72 61 63 74 69 63 65 20 6e 65 69  .in practice nei
2bfb0 74 68 65 72 20 53 51 4c 69 74 65 20 6e 6f 72 20  ther SQLite nor 
2bfc0 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 65 6e  any other SQL en
2bfd0 67 69 6e 65 20 69 73 20 72 65 71 75 69 72 65 64  gine is required
2bfe0 20 74 6f 20 66 6f 6c 6c 6f 77 20 0a 74 68 69 73   to follow .this
2bff0 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 73 70   or any other sp
2c000 65 63 69 66 69 63 20 70 72 6f 63 65 73 73 2e 0a  ecific process..
2c010 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2c020 74 20 73 69 6d 70 6c 65 73 65 6c 65 63 74 20 7b  t simpleselect {
2c030 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 7d 3c 2f  simple SELECT}</
2c040 74 63 6c 3e 0a 3c 68 33 3e 53 69 6d 70 6c 65 20  tcl>.<h3>Simple 
2c050 53 65 6c 65 63 74 20 50 72 6f 63 65 73 73 69 6e  Select Processin
2c060 67 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63  g</h3>..<p>The c
2c070 6f 72 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  ore of a SELECT 
2c080 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 20 22  statement is a "
2c090 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 22 20 73  simple SELECT" s
2c0a0 68 6f 77 6e 20 62 79 20 74 68 65 0a 5b 73 65 6c  hown by the.[sel
2c0b0 65 63 74 2d 63 6f 72 65 5d 20 61 6e 64 20 5b 73  ect-core] and [s
2c0c0 69 6d 70 6c 65 2d 73 65 6c 65 63 74 2d 73 74 6d  imple-select-stm
2c0d0 74 5d 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  t] syntax diagra
2c0e0 6d 73 20 62 65 6c 6f 77 2e 20 20 0a 49 6e 20 70  ms below.  .In p
2c0f0 72 61 63 74 69 63 65 2c 20 6d 6f 73 74 20 53 45  ractice, most SE
2c100 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
2c110 61 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  are simple SELEC
2c120 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c  T statements...<
2c130 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75  tcl>.RecursiveBu
2c140 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 6d 70  bbleDiagram simp
2c150 6c 65 2d 73 65 6c 65 63 74 2d 73 74 6d 74 20 73  le-select-stmt s
2c160 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c  elect-core.</tcl
2c170 3e 0a 0a 3c 70 3e 47 65 6e 65 72 61 74 69 6e 67  >..<p>Generating
2c180 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
2c190 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a  a simple SELECT.
2c1a0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
2c1b0 73 65 6e 74 65 64 20 61 73 20 61 20 66 6f 75 72  sented as a four
2c1c0 20 73 74 65 70 20 70 72 6f 63 65 73 73 20 69 6e   step process in
2c1d0 20 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e   the description
2c1e0 20 62 65 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20   below:..<ol>.  
2c1f0 3c 6c 69 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c  <li> <p>[FROM cl
2c200 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e 67  ause] processing
2c210 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61 74 61  : The input data
2c220 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20   for the simple 
2c230 53 45 4c 45 43 54 20 69 73 0a 20 20 20 20 20 20  SELECT is.      
2c240 20 64 65 74 65 72 6d 69 6e 65 64 2e 20 54 68 65   determined. The
2c250 20 69 6e 70 75 74 20 64 61 74 61 20 69 73 20 65   input data is e
2c260 69 74 68 65 72 20 69 6d 70 6c 69 63 69 74 6c 79  ither implicitly
2c270 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 77 69   a single row wi
2c280 74 68 20 30 0a 20 20 20 20 20 20 20 63 6f 6c 75  th 0.       colu
2c290 6d 6e 73 20 28 69 66 20 74 68 65 72 65 20 69 73  mns (if there is
2c2a0 20 6e 6f 20 46 52 4f 4d 20 63 6c 61 75 73 65 29   no FROM clause)
2c2b0 20 6f 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65   or is determine
2c2c0 64 20 62 79 20 74 68 65 20 46 52 4f 4d 0a 20 20  d by the FROM.  
2c2d0 20 20 20 20 20 63 6c 61 75 73 65 2e 0a 20 20 3c       clause..  <
2c2e0 6c 69 3e 20 3c 70 3e 5b 57 48 45 52 45 20 63 6c  li> <p>[WHERE cl
2c2f0 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e 67  ause] processing
2c300 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61 74 61  : The input data
2c310 20 69 73 20 66 69 6c 74 65 72 65 64 20 75 73 69   is filtered usi
2c320 6e 67 20 74 68 65 20 57 48 45 52 45 0a 20 20 20  ng the WHERE.   
2c330 20 20 20 20 63 6c 61 75 73 65 20 65 78 70 72 65      clause expre
2c340 73 73 69 6f 6e 2e 20 20 0a 20 20 3c 6c 69 3e 20  ssion.  .  <li> 
2c350 3c 70 3e 5b 47 52 4f 55 50 20 42 59 7c 47 52 4f  <p>[GROUP BY|GRO
2c360 55 50 20 42 59 2c 20 48 41 56 49 4e 47 20 61 6e  UP BY, HAVING an
2c370 64 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20  d result-column 
2c380 65 78 70 72 65 73 73 69 6f 6e 5d 20 70 72 6f 63  expression] proc
2c390 65 73 73 69 6e 67 3a 20 0a 20 20 20 20 20 20 20  essing: .       
2c3a0 54 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c  The set of resul
2c3b0 74 20 72 6f 77 73 20 69 73 20 63 6f 6d 70 75 74  t rows is comput
2c3c0 65 64 20 62 79 20 61 67 67 72 65 67 61 74 69 6e  ed by aggregatin
2c3d0 67 20 74 68 65 20 64 61 74 61 20 61 63 63 6f 72  g the data accor
2c3e0 64 69 6e 67 20 74 6f 0a 20 20 20 20 20 20 20 61  ding to.       a
2c3f0 6e 79 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  ny GROUP BY clau
2c400 73 65 20 61 6e 64 20 63 61 6c 63 75 6c 61 74 69  se and calculati
2c410 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  ng the result-se
2c420 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 66 6f  t expressions fo
2c430 72 20 74 68 65 0a 20 20 20 20 20 20 20 72 6f 77  r the.       row
2c440 73 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72 65  s of the filtere
2c450 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 2e  d input dataset.
2c460 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 44 49    .  <li> <p>[DI
2c470 53 54 49 4e 43 54 7c 44 49 53 54 49 4e 43 54 2f  STINCT|DISTINCT/
2c480 41 4c 4c 20 6b 65 79 77 6f 72 64 5d 20 70 72 6f  ALL keyword] pro
2c490 63 65 73 73 69 6e 67 3a 20 49 66 20 74 68 65 20  cessing: If the 
2c4a0 71 75 65 72 79 20 69 73 20 61 20 22 53 45 4c 45  query is a "SELE
2c4b0 43 54 0a 20 20 20 20 20 20 20 44 49 53 54 49 4e  CT.       DISTIN
2c4c0 43 54 22 20 71 75 65 72 79 2c 20 64 75 70 6c 69  CT" query, dupli
2c4d0 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65  cate rows are re
2c4e0 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 73  moved from the s
2c4f0 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
2c500 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65  s..</ol>..<p>The
2c510 72 65 20 61 72 65 20 74 77 6f 20 74 79 70 65 73  re are two types
2c520 20 6f 66 20 73 69 6d 70 6c 65 20 53 45 4c 45 43   of simple SELEC
2c530 54 20 73 74 61 74 65 6d 65 6e 74 20 2d 20 61 67  T statement - ag
2c540 67 72 65 67 61 74 65 20 61 6e 64 20 0a 6e 6f 6e  gregate and .non
2c550 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 69  -aggregate queri
2c560 65 73 2e 20 5e 41 20 73 69 6d 70 6c 65 20 53 45  es. ^A simple SE
2c570 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
2c580 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  s an aggregate q
2c590 75 65 72 79 20 69 66 0a 69 74 20 63 6f 6e 74 61  uery if.it conta
2c5a0 69 6e 73 20 65 69 74 68 65 72 20 61 20 47 52 4f  ins either a GRO
2c5b0 55 50 20 42 59 20 63 6c 61 75 73 65 20 6f 72 20  UP BY clause or 
2c5c0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
2c5d0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a  egate functions.
2c5e0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
2c5f0 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  t. ^Otherwise, i
2c600 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  f a simple SELEC
2c610 54 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 61 67  T contains no ag
2c620 67 72 65 67 61 74 65 0a 66 75 6e 63 74 69 6f 6e  gregate.function
2c630 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20  s or a GROUP BY 
2c640 63 6c 61 75 73 65 2c 20 69 74 20 69 73 20 61 20  clause, it is a 
2c650 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75  non-aggregate qu
2c660 65 72 79 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e 20 44  ery...<p><b>1. D
2c670 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 6f 66 20  etermination of 
2c680 69 6e 70 75 74 20 64 61 74 61 20 28 46 52 4f 4d  input data (FROM
2c690 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69   clause processi
2c6a0 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64  ng).</b>.<tcl>hd
2c6b0 5f 66 72 61 67 6d 65 6e 74 20 66 72 6f 6d 63 6c  _fragment fromcl
2c6c0 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  ause</tcl>.<tcl>
2c6d0 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 46 52 4f  hd_keywords {FRO
2c6e0 4d 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a  M clause}</tcl>.
2c6f0 0a 3c 70 3e 54 68 65 20 69 6e 70 75 74 20 64 61  .<p>The input da
2c700 74 61 20 75 73 65 64 20 62 79 20 61 20 73 69 6d  ta used by a sim
2c710 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65 72 79  ple SELECT query
2c720 20 69 73 20 61 20 73 65 74 20 6f 66 20 3c 69 3e   is a set of <i>
2c730 4e 3c 2f 69 3e 20 72 6f 77 73 20 0a 65 61 63 68  N</i> rows .each
2c740 20 3c 69 3e 4d 3c 2f 69 3e 20 63 6f 6c 75 6d 6e   <i>M</i> column
2c750 73 20 77 69 64 65 2e 0a 0a 3c 70 3e 5e 28 49 66  s wide...<p>^(If
2c760 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
2c770 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
2c780 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
2c790 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
2c7a0 20 74 68 65 20 0a 69 6e 70 75 74 20 64 61 74 61   the .input data
2c7b0 20 69 73 20 69 6d 70 6c 69 63 69 74 6c 79 20 61   is implicitly a
2c7c0 20 73 69 6e 67 6c 65 20 72 6f 77 20 7a 65 72 6f   single row zero
2c7d0 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 29 5e 20   columns wide)^ 
2c7e0 28 69 2e 65 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d 31  (i.e. <i>N</i>=1
2c7f0 20 61 6e 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30 29   and.<i>M</i>=0)
2c800 2e 0a 0a 3c 70 3e 49 66 20 61 20 46 52 4f 4d 20  ...<p>If a FROM 
2c810 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
2c820 69 65 64 2c 20 74 68 65 20 64 61 74 61 20 6f 6e  ied, the data on
2c830 20 77 68 69 63 68 20 61 20 73 69 6d 70 6c 65 20   which a simple 
2c840 53 45 4c 45 43 54 20 71 75 65 72 79 0a 6f 70 65  SELECT query.ope
2c850 72 61 74 65 73 20 63 6f 6d 65 73 20 66 72 6f 6d  rates comes from
2c860 20 74 68 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65   the one or more
2c870 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
2c880 65 72 69 65 73 20 28 53 45 4c 45 43 54 20 73 74  eries (SELECT st
2c890 61 74 65 6d 65 6e 74 73 0a 69 6e 20 70 61 72 65  atements.in pare
2c8a0 6e 74 68 65 73 69 73 29 20 73 70 65 63 69 66 69  nthesis) specifi
2c8b0 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ed following the
2c8c0 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 5e   FROM keyword. ^
2c8d0 41 20 73 75 62 71 75 65 72 79 20 73 70 65 63 69  A subquery speci
2c8e0 66 69 65 64 0a 69 6e 20 74 68 65 20 3c 79 79 74  fied.in the <yyt
2c8f0 65 72 6d 3e 74 61 62 6c 65 2d 6f 72 2d 73 75 62  erm>table-or-sub
2c900 71 75 65 72 79 3c 2f 79 79 74 65 72 6d 3e 20 66  query</yyterm> f
2c910 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f  ollowing the FRO
2c920 4d 20 63 6c 61 75 73 65 20 69 6e 20 61 20 0a 73  M clause in a .s
2c930 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
2c940 74 65 6d 65 6e 74 20 69 73 0a 68 61 6e 64 6c 65  tement is.handle
2c950 64 20 61 73 20 69 66 20 69 74 20 77 61 73 20 61  d as if it was a
2c960 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e   table containin
2c970 67 20 74 68 65 20 64 61 74 61 20 72 65 74 75 72  g the data retur
2c980 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e 67  ned by executing
2c990 20 74 68 65 0a 73 75 62 71 75 65 72 79 20 73 74   the.subquery st
2c9a0 61 74 65 6d 65 6e 74 2e 20 5e 45 61 63 68 20 63  atement. ^Each c
2c9b0 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 73 75 62  olumn of the sub
2c9c0 71 75 65 72 79 20 68 61 73 20 74 68 65 0a 5b 63  query has the.[c
2c9d0 6f 6c 6c 61 74 69 6f 6e 7c 63 6f 6c 6c 61 74 69  ollation|collati
2c9e0 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20 61 6e 64  on sequence] and
2c9f0 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74   [affinity] of t
2ca00 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
2ca10 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 6e 20 74   expression.in t
2ca20 68 65 20 73 75 62 71 75 65 72 79 20 73 74 61 74  he subquery stat
2ca30 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74  ement...<p>^If t
2ca40 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 61 20 73  here is only a s
2ca50 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20 73  ingle table or s
2ca60 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
2ca70 52 4f 4d 0a 63 6c 61 75 73 65 2c 20 74 68 65 6e  ROM.clause, then
2ca80 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20   the input data 
2ca90 75 73 65 64 20 62 79 20 74 68 65 20 53 45 4c 45  used by the SELE
2caa0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
2cab0 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
2cac0 74 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e  the.named table.
2cad0 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f   ^If there is mo
2cae0 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 61 62 6c  re than one tabl
2caf0 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e  e or subquery in
2cb00 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 74 68 65   FROM clause.the
2cb10 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  n the contents o
2cb20 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64  f all tables and
2cb30 2f 6f 72 20 73 75 62 71 75 65 72 69 65 73 0a 61  /or subqueries.a
2cb40 72 65 20 6a 6f 69 6e 65 64 20 69 6e 74 6f 20 61  re joined into a
2cb50 20 73 69 6e 67 6c 65 20 64 61 74 61 73 65 74 20   single dataset 
2cb60 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53  for the simple S
2cb70 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
2cb80 74 6f 20 6f 70 65 72 61 74 65 20 6f 6e 2e 0a 45  to operate on..E
2cb90 78 61 63 74 6c 79 20 68 6f 77 20 74 68 65 20 64  xactly how the d
2cba0 61 74 61 20 69 73 20 63 6f 6d 62 69 6e 65 64 20  ata is combined 
2cbb0 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 73  depends on the s
2cbc0 70 65 63 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70  pecific [join-op
2cbd0 65 72 61 74 6f 72 5d 20 61 6e 64 0a 5b 6a 6f 69  erator] and.[joi
2cbe0 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 20 75 73  n-constraint] us
2cbf0 65 64 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 68  ed to connect th
2cc00 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  e tables or subq
2cc10 75 65 72 69 65 73 20 74 6f 67 65 74 68 65 72 2e  ueries together.
2cc20 0a 0a 3c 70 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69  ..<p>All joins i
2cc30 6e 20 53 51 4c 69 74 65 20 61 72 65 20 62 61 73  n SQLite are bas
2cc40 65 64 20 6f 6e 20 74 68 65 20 63 61 72 74 65 73  ed on the cartes
2cc50 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74  ian product of t
2cc60 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68  he left and.righ
2cc70 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e  t-hand datasets.
2cc80 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66   ^The columns of
2cc90 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
2cca0 72 6f 64 75 63 74 20 64 61 74 61 73 65 74 20 61  roduct dataset a
2ccb0 72 65 2c 20 69 6e 20 0a 6f 72 64 65 72 2c 20 61  re, in .order, a
2ccc0 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ll the columns o
2ccd0 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  f the left-hand 
2cce0 64 61 74 61 73 65 74 20 66 6f 6c 6c 6f 77 65 64  dataset followed
2ccf0 20 62 79 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75   by all the colu
2cd00 6d 6e 73 0a 6f 66 20 74 68 65 20 72 69 67 68 74  mns.of the right
2cd10 2d 68 61 6e 64 20 64 61 74 61 73 65 74 2e 20 5e  -hand dataset. ^
2cd20 54 68 65 72 65 20 69 73 20 61 20 72 6f 77 20 69  There is a row i
2cd30 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  n the cartesian 
2cd40 70 72 6f 64 75 63 74 20 64 61 74 61 73 65 74 0a  product dataset.
2cd50 66 6f 72 6d 65 64 20 62 79 20 63 6f 6d 62 69 6e  formed by combin
2cd60 69 6e 67 20 65 61 63 68 20 75 6e 69 71 75 65 20  ing each unique 
2cd70 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 61  combination of a
2cd80 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6c 65   row from the le
2cd90 66 74 2d 68 61 6e 64 20 0a 61 6e 64 20 72 69 67  ft-hand .and rig
2cda0 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73  ht-hand datasets
2cdb0 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72  . ^(In other wor
2cdc0 64 73 2c 20 69 66 20 74 68 65 20 6c 65 66 74 2d  ds, if the left-
2cdd0 68 61 6e 64 20 64 61 74 61 73 65 74 20 63 6f 6e  hand dataset con
2cde0 73 69 73 74 73 20 6f 66 0a 3c 69 3e 4e 3c 73 75  sists of.<i>N<su
2cdf0 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73  b><small>left</s
2ce00 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20  mall></sub></i> 
2ce10 72 6f 77 73 20 6f 66 20 0a 3c 69 3e 4d 3c 73 75  rows of .<i>M<su
2ce20 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73  b><small>left</s
2ce30 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20  mall></sub></i> 
2ce40 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 74 68 65  columns, and the
2ce50 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61   right-hand data
2ce60 73 65 74 20 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e  set of.<i>N<sub>
2ce70 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d  <small>right</sm
2ce80 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72  all></sub></i> r
2ce90 6f 77 73 20 6f 66 0a 3c 69 3e 4d 3c 73 75 62 3e  ows of.<i>M<sub>
2cea0 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d  <small>right</sm
2ceb0 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63  all></sub></i> c
2cec0 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65  olumns, then the
2ced0 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
2cee0 63 74 20 69 73 20 61 0a 64 61 74 61 73 65 74 20  ct is a.dataset 
2cef0 6f 66 20 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d  of .<i>N<sub><sm
2cf00 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e  all>left</small>
2cf10 3c 2f 73 75 62 3e 26 74 69 6d 65 73 3b 4e 3c 73  </sub>&times;N<s
2cf20 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c  ub><small>right<
2cf30 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69  /small></sub></i
2cf40 3e 0a 72 6f 77 73 2c 20 65 61 63 68 20 63 6f 6e  >.rows, each con
2cf50 74 61 69 6e 69 6e 67 20 0a 3c 69 3e 4d 3c 73 75  taining .<i>M<su
2cf60 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73  b><small>left</s
2cf70 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 2b 4d 3c 73 75  mall></sub>+M<su
2cf80 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f  b><small>right</
2cf90 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e  small></sub></i>
2cfa0 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a 0a 3c 70 3e   columns.)^..<p>
2cfb0 5e 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65  ^If the join-ope
2cfc0 72 61 74 6f 72 20 69 73 20 22 43 52 4f 53 53 20  rator is "CROSS 
2cfd0 4a 4f 49 4e 22 2c 20 22 49 4e 4e 45 52 20 4a 4f  JOIN", "INNER JO
2cfe0 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 6f 72 20 61  IN", "JOIN" or a
2cff0 20 63 6f 6d 6d 61 0a 28 22 2c 22 29 20 61 6e 64   comma.(",") and
2d000 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 4e 20   there is no ON 
2d010 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c  or USING clause,
2d020 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
2d030 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 69 73 0a   of the join is.
2d040 73 69 6d 70 6c 79 20 74 68 65 20 63 61 72 74 65  simply the carte
2d050 73 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20  sian product of 
2d060 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
2d070 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73  ht-hand datasets
2d080 2e 20 0a 49 66 20 6a 6f 69 6e 2d 6f 70 65 72 61  . .If join-opera
2d090 74 6f 72 20 64 6f 65 73 20 68 61 76 65 20 4f 4e  tor does have ON
2d0a0 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65   or USING clause
2d0b0 73 2c 20 74 68 6f 73 65 20 61 72 65 20 68 61 6e  s, those are han
2d0c0 64 6c 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  dled according t
2d0d0 6f 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o.the following 
2d0e0 62 75 6c 6c 65 74 20 70 6f 69 6e 74 73 3a 0a 0a  bullet points:..
2d0f0 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e  <ul>.  <li> <p>^
2d100 28 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 20  (If there is an 
2d110 4f 4e 20 63 6c 61 75 73 65 20 74 68 65 6e 20 74  ON clause then t
2d120 68 65 20 4f 4e 20 65 78 70 72 65 73 73 69 6f 6e  he ON expression
2d130 20 69 73 0a 20 20 20 20 20 20 20 65 76 61 6c 75   is.       evalu
2d140 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
2d150 77 20 6f 66 20 74 68 65 20 63 61 72 74 65 73 69  w of the cartesi
2d160 61 6e 20 70 72 6f 64 75 63 74 20 61 73 20 61 20  an product as a 
2d170 0a 20 20 20 20 20 20 20 5b 62 6f 6f 6c 65 61 6e  .       [boolean
2d180 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e   expression]. On
2d190 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  ly rows for whic
2d1a0 68 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  h the expression
2d1b0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 0a 20   evaluates to . 
2d1c0 20 20 20 20 20 20 74 72 75 65 20 61 72 65 20 69        true are i
2d1d0 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65  ncluded from the
2d1e0 20 64 61 74 61 73 65 74 2e 29 5e 0a 0a 20 20 3c   dataset.)^..  <
2d1f0 6c 69 3e 20 3c 70 3e 5e 49 66 20 74 68 65 72 65  li> <p>^If there
2d200 20 69 73 20 61 20 55 53 49 4e 47 20 63 6c 61 75   is a USING clau
2d210 73 65 0a 20 20 20 20 20 20 20 74 68 65 6e 20 65  se.       then e
2d220 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ach of the colum
2d230 6e 20 6e 61 6d 65 73 20 73 70 65 63 69 66 69 65  n names specifie
2d240 64 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20  d must exist in 
2d250 74 68 65 20 64 61 74 61 73 65 74 73 20 74 6f 20  the datasets to 
2d260 0a 20 20 20 20 20 20 20 62 6f 74 68 20 74 68 65  .       both the
2d270 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20   left and right 
2d280 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72  of the join-oper
2d290 61 74 6f 72 2e 20 5e 28 46 6f 72 20 65 61 63 68  ator. ^(For each
2d2a0 20 70 61 69 72 20 6f 66 20 6e 61 6d 65 64 0a 20   pair of named. 
2d2b0 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 2c 20 74        columns, t
2d2c0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 22 6c  he expression "l
2d2d0 68 73 2e 58 20 3d 20 72 68 73 2e 58 22 20 69 73  hs.X = rhs.X" is
2d2e0 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
2d2f0 61 63 68 20 72 6f 77 20 6f 66 0a 20 20 20 20 20  ach row of.     
2d300 20 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20    the cartesian 
2d310 70 72 6f 64 75 63 74 20 61 73 20 61 20 5b 62 6f  product as a [bo
2d320 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
2d330 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72  ]. Only rows for
2d340 20 77 68 69 63 68 0a 20 20 20 20 20 20 20 61 6c   which.       al
2d350 6c 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f  l such expressio
2d360 6e 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  ns evaluates to 
2d370 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65  true are include
2d380 64 20 66 72 6f 6d 20 74 68 65 0a 20 20 20 20 20  d from the.     
2d390 20 20 72 65 73 75 6c 74 20 73 65 74 2e 29 5e 20    result set.)^ 
2d3a0 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20  ^When comparing 
2d3b0 76 61 6c 75 65 73 20 61 73 20 61 20 72 65 73 75  values as a resu
2d3c0 6c 74 20 6f 66 20 61 20 55 53 49 4e 47 20 63 6c  lt of a USING cl
2d3d0 61 75 73 65 2c 20 74 68 65 0a 20 20 20 20 20 20  ause, the.      
2d3e0 20 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f   normal rules fo
2d3f0 72 20 68 61 6e 64 6c 69 6e 67 20 61 66 66 69 6e  r handling affin
2d400 69 74 69 65 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e  ities, collation
2d410 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 4e   sequences and N
2d420 55 4c 4c 0a 20 20 20 20 20 20 20 76 61 6c 75 65  ULL.       value
2d430 73 20 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 73  s in comparisons
2d440 20 61 70 70 6c 79 2e 20 5e 54 68 65 20 63 6f 6c   apply. ^The col
2d450 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 64 61 74  umn from the dat
2d460 61 73 65 74 20 6f 6e 20 74 68 65 0a 20 20 20 20  aset on the.    
2d470 20 20 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64     left-hand sid
2d480 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70  e of the join-op
2d490 65 72 61 74 6f 72 20 69 73 20 63 6f 6e 73 69 64  erator is consid
2d4a0 65 72 65 64 20 74 6f 20 62 65 20 6f 6e 20 74 68  ered to be on th
2d4b0 65 20 6c 65 66 74 2d 68 61 6e 64 0a 20 20 20 20  e left-hand.    
2d4c0 20 20 20 73 69 64 65 20 6f 66 20 74 68 65 20 63     side of the c
2d4d0 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
2d4e0 6f 72 20 28 3d 29 20 66 6f 72 20 74 68 65 20 70  or (=) for the p
2d4f0 75 72 70 6f 73 65 73 20 6f 66 20 63 6f 6c 6c 61  urposes of colla
2d500 74 69 6f 6e 20 0a 20 20 20 20 20 20 20 73 65 71  tion .       seq
2d510 75 65 6e 63 65 20 61 6e 64 20 61 66 66 69 6e 69  uence and affini
2d520 74 79 20 70 72 65 63 65 64 65 6e 63 65 2e 0a 0a  ty precedence...
2d530 20 20 20 20 20 20 20 3c 70 3e 5e 46 6f 72 20 65         <p>^For e
2d540 61 63 68 20 70 61 69 72 20 6f 66 20 63 6f 6c 75  ach pair of colu
2d550 6d 6e 73 20 69 64 65 6e 74 69 66 69 65 64 20 62  mns identified b
2d560 79 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65  y a USING clause
2d570 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20  , the column.   
2d580 20 20 20 20 66 72 6f 6d 20 74 68 65 20 72 69 67      from the rig
2d590 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ht-hand dataset 
2d5a0 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
2d5b0 74 68 65 20 6a 6f 69 6e 65 64 20 64 61 74 61 73  the joined datas
2d5c0 65 74 2e 20 5e 54 68 69 73 20 0a 20 20 20 20 20  et. ^This .     
2d5d0 20 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 64 69    is the only di
2d5e0 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
2d5f0 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20   a USING clause 
2d600 61 6e 64 20 69 74 73 20 65 71 75 69 76 61 6c 65  and its equivale
2d610 6e 74 20 4f 4e 0a 20 20 20 20 20 20 20 63 6f 6e  nt ON.       con
2d620 73 74 72 61 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e  straint...  <li>
2d630 20 3c 70 3e 5e 28 49 66 20 74 68 65 20 4e 41 54   <p>^(If the NAT
2d640 55 52 41 4c 20 6b 65 79 77 6f 72 64 20 69 73 20  URAL keyword is 
2d650 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72  in the join-oper
2d660 61 74 6f 72 20 74 68 65 6e 20 61 6e 0a 20 20 20  ator then an.   
2d670 20 20 20 20 69 6d 70 6c 69 63 69 74 20 55 53 49      implicit USI
2d680 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61 64 64  NG clause is add
2d690 65 64 20 74 6f 20 74 68 65 20 6a 6f 69 6e 2d 63  ed to the join-c
2d6a0 6f 6e 73 74 72 61 69 6e 74 73 2e 20 54 68 65 20  onstraints. The 
2d6b0 69 6d 70 6c 69 63 69 74 0a 20 20 20 20 20 20 20  implicit.       
2d6c0 55 53 49 4e 47 20 63 6c 61 75 73 65 20 63 6f 6e  USING clause con
2d6d0 74 61 69 6e 73 20 65 61 63 68 20 6f 66 20 74 68  tains each of th
2d6e0 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74  e column names t
2d6f0 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 62 6f  hat appear in bo
2d700 74 68 0a 20 20 20 20 20 20 20 74 68 65 20 6c 65  th.       the le
2d710 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
2d720 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 73  d input datasets
2d730 2e 29 5e 20 5e 49 66 20 74 68 65 20 6c 65 66 74  .)^ ^If the left
2d740 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a   and right-hand.
2d750 20 20 20 20 20 20 20 69 6e 70 75 74 20 64 61 74         input dat
2d760 61 73 65 74 73 20 66 65 61 74 75 72 65 20 6e 6f  asets feature no
2d770 20 63 6f 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e   common column n
2d780 61 6d 65 73 2c 20 74 68 65 6e 20 74 68 65 20 4e  ames, then the N
2d790 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 0a 20  ATURAL keyword. 
2d7a0 20 20 20 20 20 20 68 61 73 20 6e 6f 20 65 66 66        has no eff
2d7b0 65 63 74 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  ect on the resul
2d7c0 74 73 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2e 20  ts of the join. 
2d7d0 5e 41 20 55 53 49 4e 47 20 6f 72 20 4f 4e 20 63  ^A USING or ON c
2d7e0 6c 61 75 73 65 20 6d 61 79 0a 20 20 20 20 20 20  lause may.      
2d7f0 20 6e 6f 74 20 62 65 20 61 64 64 65 64 20 74 6f   not be added to
2d800 20 61 20 6a 6f 69 6e 20 74 68 61 74 20 73 70 65   a join that spe
2d810 63 69 66 69 65 73 20 74 68 65 20 4e 41 54 55 52  cifies the NATUR
2d820 41 4c 20 6b 65 79 77 6f 72 64 2e 0a 0a 20 20 3c  AL keyword...  <
2d830 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 20  li> <p>^(If the 
2d840 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73  join-operator is
2d850 20 61 20 22 4c 45 46 54 20 4a 4f 49 4e 22 20 6f   a "LEFT JOIN" o
2d860 72 20 22 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f  r "LEFT OUTER JO
2d870 49 4e 22 2c 20 74 68 65 6e 0a 20 20 20 20 20 20  IN", then.      
2d880 20 61 66 74 65 72 0a 20 20 20 20 20 20 20 74 68   after.       th
2d890 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 66 69  e ON or USING fi
2d8a0 6c 74 65 72 69 6e 67 20 63 6c 61 75 73 65 73 20  ltering clauses 
2d8b0 68 61 76 65 20 62 65 65 6e 20 61 70 70 6c 69 65  have been applie
2d8c0 64 2c 20 61 6e 20 65 78 74 72 61 20 72 6f 77 20  d, an extra row 
2d8d0 69 73 20 0a 20 20 20 20 20 20 20 61 64 64 65 64  is .       added
2d8e0 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 66   to the output f
2d8f0 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
2d900 68 65 20 6f 72 69 67 69 6e 61 6c 20 6c 65 66 74  he original left
2d910 2d 68 61 6e 64 20 69 6e 70 75 74 20 0a 20 20 20  -hand input .   
2d920 20 20 20 20 64 61 74 61 73 65 74 20 74 68 61 74      dataset that
2d930 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2d940 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 20 69  no rows at all i
2d950 6e 20 74 68 65 20 63 6f 6d 70 6f 73 69 74 65 0a  n the composite.
2d960 20 20 20 20 20 20 20 64 61 74 61 73 65 74 20 28         dataset (
2d970 69 66 20 61 6e 79 29 2e 29 5e 20 5e 54 68 65 20  if any).)^ ^The 
2d980 61 64 64 65 64 20 72 6f 77 73 20 63 6f 6e 74 61  added rows conta
2d990 69 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  in NULL values i
2d9a0 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 20 20  n the columns.  
2d9b0 20 20 20 20 20 74 68 61 74 20 77 6f 75 6c 64 20       that would 
2d9c0 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e  normally contain
2d9d0 20 76 61 6c 75 65 73 20 63 6f 70 69 65 64 20 66   values copied f
2d9e0 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68 61  rom the right-ha
2d9f0 6e 64 20 69 6e 70 75 74 0a 20 20 20 20 20 20 20  nd input.       
2da00 64 61 74 61 73 65 74 2e 20 20 0a 3c 2f 75 6c 3e  dataset.  .</ul>
2da10 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6d 6f 72 65  ..<p>^(When more
2da20 20 74 68 61 6e 20 74 77 6f 20 74 61 62 6c 65 73   than two tables
2da30 20 61 72 65 20 6a 6f 69 6e 65 64 20 74 6f 67 65   are joined toge
2da40 74 68 65 72 20 61 73 20 70 61 72 74 20 6f 66 20  ther as part of 
2da50 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2c 0a 74  a FROM clause,.t
2da60 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74 69 6f  he join operatio
2da70 6e 73 20 61 72 65 20 70 72 6f 63 65 73 73 65 64  ns are processed
2da80 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c   in order from l
2da90 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e  eft to right. In
2daa0 20 6f 74 68 65 72 20 0a 77 6f 72 64 73 2c 20 74   other .words, t
2dab0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 28  he FROM clause (
2dac0 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 20 6a 6f  A join-op-1 B jo
2dad0 69 6e 2d 6f 70 2d 32 20 43 29 20 69 73 20 63 6f  in-op-2 C) is co
2dae0 6d 70 75 74 65 64 20 61 73 20 0a 28 28 41 20 6a  mputed as .((A j
2daf0 6f 69 6e 2d 6f 70 2d 31 20 42 29 20 6a 6f 69 6e  oin-op-1 B) join
2db00 2d 6f 70 2d 32 20 43 29 2e 29 5e 0a 0a 3c 74 63  -op-2 C).)^..<tc
2db10 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 72  l>hd_fragment cr
2db20 6f 73 73 6a 6f 69 6e 20 7b 74 72 65 61 74 73 20  ossjoin {treats 
2db30 74 68 65 20 43 52 4f 53 53 20 4a 4f 49 4e 20 6f  the CROSS JOIN o
2db40 70 65 72 61 74 6f 72 20 73 70 65 63 69 61 6c 6c  perator speciall
2db50 79 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 53  y}</tcl>.<p><b>S
2db60 69 64 65 20 6e 6f 74 65 3a 20 53 70 65 63 69 61  ide note: Specia
2db70 6c 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52  l handling of CR
2db80 4f 53 53 20 4a 4f 49 4e 2e 3c 2f 62 3e 0a 5e 54  OSS JOIN.</b>.^T
2db90 68 65 72 65 20 69 73 20 6e 6f 20 64 69 66 66 65  here is no diffe
2dba0 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68  rence between th
2dbb0 65 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20  e "INNER JOIN", 
2dbc0 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6a  "JOIN" and "," j
2dbd0 6f 69 6e 0a 6f 70 65 72 61 74 6f 72 73 2e 20 54  oin.operators. T
2dbe0 68 65 79 20 61 72 65 20 63 6f 6d 70 6c 65 74 65  hey are complete
2dbf0 6c 79 20 69 6e 74 65 72 63 68 61 6e 67 65 61 62  ly interchangeab
2dc00 6c 65 20 69 6e 20 53 51 4c 69 74 65 2e 0a 5e 28  le in SQLite..^(
2dc10 54 68 65 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22  The "CROSS JOIN"
2dc20 20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f 72 20 70   join operator p
2dc30 72 6f 64 75 63 65 73 20 74 68 65 20 73 61 6d 65  roduces the same
2dc40 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 0a   result as the .
2dc50 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a  "INNER JOIN", "J
2dc60 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6f 70 65  OIN" and "," ope
2dc70 72 61 74 6f 72 73 29 5e 2c 20 62 75 74 20 69 73  rators)^, but is
2dc80 20 0a 5b 43 52 4f 53 53 20 4a 4f 49 4e 7c 68 61   .[CROSS JOIN|ha
2dc90 6e 64 6c 65 64 20 64 69 66 66 65 72 65 6e 74 6c  ndled differentl
2dca0 79 20 62 79 20 74 68 65 20 71 75 65 72 79 20 6f  y by the query o
2dcb0 70 74 69 6d 69 7a 65 72 5d 0a 69 6e 20 74 68 61  ptimizer].in tha
2dcc0 74 20 69 74 20 70 72 65 76 65 6e 74 73 20 74 68  t it prevents th
2dcd0 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
2dce0 72 20 66 72 6f 6d 20 72 65 6f 72 64 65 72 69 6e  r from reorderin
2dcf0 67 0a 74 68 65 20 74 61 62 6c 65 73 20 69 6e 20  g.the tables in 
2dd00 74 68 65 20 6a 6f 69 6e 2e 20 20 41 6e 20 61 70  the join.  An ap
2dd10 70 6c 69 63 61 74 69 6f 6e 20 70 72 6f 67 72 61  plication progra
2dd20 6d 6d 65 72 20 63 61 6e 20 75 73 65 20 74 68 65  mmer can use the
2dd30 20 43 52 4f 53 53 20 4a 4f 49 4e 20 0a 6f 70 65   CROSS JOIN .ope
2dd40 72 61 74 6f 72 20 74 6f 20 64 69 72 65 63 74 6c  rator to directl
2dd50 79 20 69 6e 66 6c 75 65 6e 63 65 20 74 68 65 20  y influence the 
2dd60 61 6c 67 6f 72 69 74 68 6d 20 74 68 61 74 20 69  algorithm that i
2dd70 73 20 63 68 6f 73 65 6e 20 74 6f 20 69 6d 70 6c  s chosen to impl
2dd80 65 6d 65 6e 74 0a 74 68 65 20 53 45 4c 45 43 54  ement.the SELECT
2dd90 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 76 6f   statement.  Avo
2dda0 69 64 20 75 73 69 6e 67 20 43 52 4f 53 53 20 4a  id using CROSS J
2ddb0 4f 49 4e 20 65 78 63 65 70 74 20 69 6e 20 73 70  OIN except in sp
2ddc0 65 63 69 66 69 63 20 73 69 74 75 61 74 69 6f 6e  ecific situation
2ddd0 73 20 0a 77 68 65 72 65 20 6d 61 6e 75 61 6c 20  s .where manual 
2dde0 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 65 20 71  control of the q
2ddf0 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69  uery optimizer i
2de00 73 20 64 65 73 69 72 65 64 2e 20 20 41 76 6f 69  s desired.  Avoi
2de10 64 20 75 73 69 6e 67 0a 43 52 4f 53 53 20 4a 4f  d using.CROSS JO
2de20 49 4e 20 65 61 72 6c 79 20 69 6e 20 74 68 65 20  IN early in the 
2de30 64 65 76 65 6c 6f 70 6d 65 6e 74 20 6f 66 20 61  development of a
2de40 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 61 73  n application as
2de50 20 64 6f 69 6e 67 20 73 6f 20 69 73 0a 61 20 3c   doing so is.a <
2de60 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 63  a href="http://c
2de70 32 2e 63 6f 6d 2f 63 67 69 2f 77 69 6b 69 3f 50  2.com/cgi/wiki?P
2de80 72 65 6d 61 74 75 72 65 4f 70 74 69 6d 69 7a 61  rematureOptimiza
2de90 74 69 6f 6e 22 3e 70 72 65 6d 61 74 75 72 65 0a  tion">premature.
2dea0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 61 3e  optimization</a>
2deb0 2e 20 20 54 68 65 20 73 70 65 63 69 61 6c 20 68  .  The special h
2dec0 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53  andling of CROSS
2ded0 20 4a 4f 49 4e 20 69 73 20 61 6e 20 53 51 4c 69   JOIN is an SQLi
2dee0 74 65 2d 73 70 65 63 69 66 69 63 0a 66 65 61 74  te-specific.feat
2def0 75 72 65 20 61 6e 64 20 69 73 20 6e 6f 74 20 61  ure and is not a
2df00 20 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72   part of standar
2df10 64 20 53 51 4c 2e 0a 20 20 20 20 20 20 20 0a 0a  d SQL..       ..
2df20 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2df30 20 77 68 65 72 65 63 6c 61 75 73 65 3c 2f 74 63   whereclause</tc
2df40 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
2df50 72 64 73 20 7b 57 48 45 52 45 20 63 6c 61 75 73  rds {WHERE claus
2df60 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 32  e}</tcl>.<p><b>2
2df70 2e 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  . WHERE clause f
2df80 69 6c 74 65 72 69 6e 67 2e 3c 2f 62 3e 0a 0a 3c  iltering.</b>..<
2df90 70 3e 5e 28 49 66 20 61 20 57 48 45 52 45 20 63  p>^(If a WHERE c
2dfa0 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
2dfb0 65 64 2c 20 74 68 65 20 57 48 45 52 45 20 65 78  ed, the WHERE ex
2dfc0 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
2dfd0 75 61 74 65 64 20 66 6f 72 20 0a 65 61 63 68 20  uated for .each 
2dfe0 72 6f 77 20 69 6e 20 74 68 65 20 69 6e 70 75 74  row in the input
2dff0 20 64 61 74 61 20 61 73 20 61 20 5b 62 6f 6f 6c   data as a [bool
2e000 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e  ean expression].
2e010 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20 77   Only rows for w
2e020 68 69 63 68 20 74 68 65 0a 57 48 45 52 45 20 63  hich the.WHERE c
2e030 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e  lause expression
2e040 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 74 72   evaluates to tr
2e050 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  ue are included 
2e060 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
2e070 20 62 65 66 6f 72 65 0a 63 6f 6e 74 69 6e 75 69   before.continui
2e080 6e 67 2e 29 5e 20 20 52 6f 77 73 20 61 72 65 20  ng.)^  Rows are 
2e090 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68  excluded from th
2e0a0 65 20 72 65 73 75 6c 74 20 69 66 20 74 68 65 20  e result if the 
2e0b0 57 48 45 52 45 20 63 6c 61 75 73 65 0a 65 76 61  WHERE clause.eva
2e0c0 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68 65 72  luates to either
2e0d0 20 66 61 6c 73 65 20 6f 72 20 4e 55 4c 4c 2e 0a   false or NULL..
2e0e0 0a 3c 70 3e 46 6f 72 20 61 20 4a 4f 49 4e 20 6f  .<p>For a JOIN o
2e0f0 72 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 6f 72 20  r INNER JOIN or 
2e100 43 52 4f 53 53 20 4a 4f 49 4e 2c 20 74 68 65 72  CROSS JOIN, ther
2e110 65 20 69 73 20 6e 6f 20 64 69 66 66 65 72 65 6e  e is no differen
2e120 63 65 20 62 65 74 77 65 65 6e 20 0a 61 20 63 6f  ce between .a co
2e130 6e 73 74 72 61 69 6e 74 20 65 78 70 72 65 73 73  nstraint express
2e140 69 6f 6e 20 69 6e 20 74 68 65 20 57 48 45 52 45  ion in the WHERE
2e150 20 63 6c 61 75 73 65 20 61 6e 64 20 6f 6e 65 20   clause and one 
2e160 69 6e 20 74 68 65 20 4f 4e 20 63 6c 61 75 73 65  in the ON clause
2e170 2e 20 20 48 6f 77 65 76 65 72 2c 0a 66 6f 72 20  .  However,.for 
2e180 61 20 4c 45 46 54 20 4a 4f 49 4e 20 6f 72 20 4c  a LEFT JOIN or L
2e190 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 2c 20  EFT OUTER JOIN, 
2e1a0 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69  the difference i
2e1b0 73 20 76 65 72 79 20 69 6d 70 6f 72 74 61 6e 74  s very important
2e1c0 2e 20 20 0a 49 6e 20 61 20 4c 45 46 54 20 4a 4f  .  .In a LEFT JO
2e1d0 49 4e 2c 0a 74 68 65 20 65 78 74 72 61 20 4e 55  IN,.the extra NU
2e1e0 4c 4c 20 72 6f 77 20 66 6f 72 20 74 68 65 20 72  LL row for the r
2e1f0 69 67 68 74 2d 68 61 6e 64 20 74 61 62 6c 65 20  ight-hand table 
2e200 69 73 20 61 64 64 65 64 20 61 66 74 65 72 20 4f  is added after O
2e210 4e 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73  N clause process
2e220 69 6e 67 0a 62 75 74 20 62 65 66 6f 72 65 20 57  ing.but before W
2e230 48 45 52 45 20 63 6c 61 75 73 65 20 70 72 6f 63  HERE clause proc
2e240 65 73 73 69 6e 67 2e 20 20 41 20 63 6f 6e 73 74  essing.  A const
2e250 72 61 69 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  raint of the for
2e260 6d 20 22 6c 65 66 74 2e 78 3d 72 69 67 68 74 2e  m "left.x=right.
2e270 79 22 0a 69 6e 20 61 6e 20 4f 4e 20 63 6c 61 75  y".in an ON clau
2e280 73 65 20 77 69 6c 6c 20 74 68 65 72 65 66 6f 72  se will therefor
2e290 65 20 61 6c 6c 6f 77 20 74 68 72 6f 75 67 68 20  e allow through 
2e2a0 74 68 65 20 61 64 64 65 64 20 61 6c 6c 2d 4e 55  the added all-NU
2e2b0 4c 4c 20 72 6f 77 73 20 6f 66 20 74 68 65 0a 72  LL rows of the.r
2e2c0 69 67 68 74 20 74 61 62 6c 65 2e 20 20 42 75 74  ight table.  But
2e2d0 20 69 66 20 74 68 61 74 20 73 61 6d 65 20 63 6f   if that same co
2e2e0 6e 73 74 72 61 69 6e 74 20 69 73 20 69 6e 20 74  nstraint is in t
2e2f0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
2e300 61 20 4e 55 4c 4c 20 69 6e 0a 22 72 69 67 68 74  a NULL in."right
2e310 2e 79 22 20 77 69 6c 6c 20 70 72 65 76 65 6e 74  .y" will prevent
2e320 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
2e330 22 6c 65 66 74 2e 78 3d 72 69 67 68 74 2e 79 22  "left.x=right.y"
2e340 20 66 72 6f 6d 20 62 65 69 6e 67 20 74 72 75 65   from being true
2e350 2c 20 61 6e 64 0a 74 68 75 73 20 65 78 63 6c 75  , and.thus exclu
2e360 64 65 20 74 68 61 74 20 72 6f 77 20 66 72 6f 6d  de that row from
2e370 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 0a 3c 70   the output...<p
2e380 3e 3c 62 3e 33 2e 20 47 65 6e 65 72 61 74 69 6f  ><b>3. Generatio
2e390 6e 20 6f 66 20 74 68 65 20 73 65 74 20 6f 66 20  n of the set of 
2e3a0 72 65 73 75 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e  result rows.</b>
2e3b0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2e3c0 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 74 63 6c  t resultset</tcl
2e3d0 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72  >.<tcl>hd_keywor
2e3e0 64 73 20 7b 72 65 73 75 6c 74 2d 73 65 74 20 65  ds {result-set e
2e3f0 78 70 72 65 73 73 69 6f 6e 73 7d 20 7b 47 52 4f  xpressions} {GRO
2e400 55 50 20 42 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  UP BY}</tcl>..<p
2e410 3e 4f 6e 63 65 20 74 68 65 20 69 6e 70 75 74 20  >Once the input 
2e420 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20 46 52  data from the FR
2e430 4f 4d 20 63 6c 61 75 73 65 20 68 61 73 20 62 65  OM clause has be
2e440 65 6e 20 66 69 6c 74 65 72 65 64 20 62 79 20 74  en filtered by t
2e450 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20  he.WHERE clause 
2e460 65 78 70 72 65 73 73 69 6f 6e 20 28 69 66 20 61  expression (if a
2e470 6e 79 29 2c 20 74 68 65 20 73 65 74 20 6f 66 20  ny), the set of 
2e480 72 65 73 75 6c 74 20 72 6f 77 73 20 66 6f 72 20  result rows for 
2e490 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45  the simple .SELE
2e4a0 43 54 20 61 72 65 20 63 61 6c 63 75 6c 61 74 65  CT are calculate
2e4b0 64 2e 20 45 78 61 63 74 6c 79 20 68 6f 77 20 74  d. Exactly how t
2e4c0 68 69 73 20 69 73 20 64 6f 6e 65 20 64 65 70 65  his is done depe
2e4d0 6e 64 73 20 6f 6e 20 77 68 65 74 68 65 72 20 74  nds on whether t
2e4e0 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43  he simple .SELEC
2e4f0 54 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74  T is an aggregat
2e500 65 20 6f 72 20 6e 6f 6e 2d 61 67 67 72 65 67 61  e or non-aggrega
2e510 74 65 20 71 75 65 72 79 2c 20 61 6e 64 20 77 68  te query, and wh
2e520 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 47  ether or not a G
2e530 52 4f 55 50 0a 42 59 20 63 6c 61 75 73 65 20 77  ROUP.BY clause w
2e540 61 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c  as specified...<
2e550 70 3e 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65  p> The list of e
2e560 78 70 72 65 73 73 69 6f 6e 73 20 62 65 74 77 65  xpressions betwe
2e570 65 6e 20 74 68 65 20 53 45 4c 45 43 54 20 61 6e  en the SELECT an
2e580 64 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73 20  d FROM keywords 
2e590 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 74 68 65 20  is known as.the 
2e5a0 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
2e5b0 6e 20 6c 69 73 74 2e 20 20 5e 49 66 20 61 20 72  n list.  ^If a r
2e5c0 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
2e5d0 20 69 73 20 74 68 65 20 73 70 65 63 69 61 6c 20   is the special 
2e5e0 65 78 70 72 65 73 73 69 6f 6e 0a 22 2a 22 20 74  expression."*" t
2e5f0 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  hen all columns 
2e600 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74  in the input dat
2e610 61 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  a are substitute
2e620 64 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 65  d for that one e
2e630 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 28 49 66 20  xpression..^(If 
2e640 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
2e650 73 20 74 68 65 20 61 6c 69 61 73 20 6f 66 20 61  s the alias of a
2e660 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
2e670 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ry in the FROM c
2e680 6c 61 75 73 65 0a 66 6f 6c 6c 6f 77 65 64 20 62  lause.followed b
2e690 79 20 22 2e 2a 22 20 74 68 65 6e 20 61 6c 6c 20  y ".*" then all 
2e6a0 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74 68 65  columns from the
2e6b0 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f 72 20   named table or 
2e6c0 73 75 62 71 75 65 72 79 20 61 72 65 0a 73 75 62  subquery are.sub
2e6d0 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68 65  stituted for the
2e6e0 20 73 69 6e 67 6c 65 20 65 78 70 72 65 73 73 69   single expressi
2e6f0 6f 6e 2e 29 5e 20 5e 28 49 74 20 69 73 20 61 6e  on.)^ ^(It is an
2e700 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20 61 20   error to use a 
2e710 22 2a 22 20 6f 72 0a 22 61 6c 69 61 73 2e 2a 22  "*" or."alias.*"
2e720 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 61   expression in a
2e730 6e 79 20 63 6f 6e 74 65 78 74 20 6f 74 68 65 72  ny context other
2e740 20 74 68 61 6e 20 61 20 72 65 73 75 6c 74 20 65   than a result e
2e750 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 29  xpression list.)
2e760 5e 0a 5e 28 49 74 20 69 73 20 61 6c 73 6f 20 61  ^.^(It is also a
2e770 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20 61  n error to use a
2e780 20 22 2a 22 20 6f 72 20 22 61 6c 69 61 73 2e 2a   "*" or "alias.*
2e790 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  " expression in 
2e7a0 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a  a simple SELECT.
2e7b0 71 75 65 72 79 20 74 68 61 74 20 64 6f 65 73 20  query that does 
2e7c0 6e 6f 74 20 68 61 76 65 20 61 20 46 52 4f 4d 20  not have a FROM 
2e7d0 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e  clause.)^..<p> ^
2e7e0 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  (The number of c
2e7f0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 6f  olumns in the ro
2e800 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 61  ws returned by a
2e810 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
2e820 74 61 74 65 6d 65 6e 74 0a 69 73 20 65 71 75 61  tatement.is equa
2e830 6c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  l to the number 
2e840 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  of expressions i
2e850 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78 70  n the result exp
2e860 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 61 66 74  ression list aft
2e870 65 72 0a 73 75 62 73 74 69 74 75 74 69 6f 6e 20  er.substitution 
2e880 6f 66 20 2a 20 61 6e 64 20 61 6c 69 61 73 2e 2a  of * and alias.*
2e890 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 29 5e 20   expressions.)^ 
2e8a0 45 61 63 68 20 72 65 73 75 6c 74 20 72 6f 77 20  Each result row 
2e8b0 69 73 20 63 61 6c 63 75 6c 61 74 65 64 20 62 79  is calculated by
2e8c0 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20  .evaluating the 
2e8d0 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74  expressions in t
2e8e0 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73  he result expres
2e8f0 73 69 6f 6e 20 6c 69 73 74 20 77 69 74 68 20 72  sion list with r
2e900 65 73 70 65 63 74 20 74 6f 20 61 0a 73 69 6e 67  espect to a.sing
2e910 6c 65 20 72 6f 77 20 6f 66 20 69 6e 70 75 74 20  le row of input 
2e920 64 61 74 61 20 6f 72 2c 20 66 6f 72 20 61 67 67  data or, for agg
2e930 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2c 20  regate queries, 
2e940 77 69 74 68 20 72 65 73 70 65 63 74 20 74 6f 20  with respect to 
2e950 61 20 67 72 6f 75 70 0a 6f 66 20 72 6f 77 73 2e  a group.of rows.
2e960 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ul>.  <li><p>
2e970 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73  ^If the SELECT s
2e980 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61  tatement is <b>a
2e990 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71   non-aggregate q
2e9a0 75 65 72 79 3c 2f 62 3e 2c 20 74 68 65 6e 20 0a  uery</b>, then .
2e9b0 20 20 20 20 65 61 63 68 20 65 78 70 72 65 73 73      each express
2e9c0 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ion in the resul
2e9d0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  t expression lis
2e9e0 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66  t is evaluated f
2e9f0 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 0a 20  or each row in. 
2ea00 20 20 20 74 68 65 20 64 61 74 61 73 65 74 20 66     the dataset f
2ea10 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 20 57  iltered by the W
2ea20 48 45 52 45 20 63 6c 61 75 73 65 2e 0a 0a 20 20  HERE clause...  
2ea30 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53  <li><p>^If the S
2ea40 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
2ea50 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61  is <b>an aggrega
2ea60 74 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74  te query without
2ea70 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59 3c   a GROUP.    BY<
2ea80 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  /b> clause, then
2ea90 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20   each aggregate 
2eaa0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
2eab0 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20  e result-set is 
2eac0 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 6f  .    evaluated o
2ead0 6e 63 65 20 61 63 72 6f 73 73 20 74 68 65 20 65  nce across the e
2eae0 6e 74 69 72 65 20 64 61 74 61 73 65 74 2e 20 5e  ntire dataset. ^
2eaf0 45 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67 61  Each non-aggrega
2eb00 74 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20  te expression.  
2eb10 20 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d    in the result-
2eb20 73 65 74 20 69 73 20 65 76 61 6c 75 61 74 65 64  set is evaluated
2eb30 20 6f 6e 63 65 20 66 6f 72 20 61 6e 20 61 72 62   once for an arb
2eb40 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65  itrarily selecte
2eb50 64 20 72 6f 77 20 6f 66 0a 20 20 20 20 74 68 65  d row of.    the
2eb60 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65 20 73   dataset. ^The s
2eb70 61 6d 65 20 61 72 62 69 74 72 61 72 69 6c 79 20  ame arbitrarily 
2eb80 73 65 6c 65 63 74 65 64 20 72 6f 77 20 69 73 20  selected row is 
2eb90 75 73 65 64 20 66 6f 72 20 65 61 63 68 0a 20 20  used for each.  
2eba0 20 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20    non-aggregate 
2ebb0 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 4f 72 2c  expression. ^Or,
2ebc0 20 69 66 20 74 68 65 20 64 61 74 61 73 65 74 20   if the dataset 
2ebd0 63 6f 6e 74 61 69 6e 73 20 7a 65 72 6f 20 72 6f  contains zero ro
2ebe0 77 73 2c 20 74 68 65 6e 20 0a 20 20 20 20 65 61  ws, then .    ea
2ebf0 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65  ch non-aggregate
2ec00 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
2ec10 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74  valuated against
2ec20 20 61 20 72 6f 77 20 63 6f 6e 73 69 73 74 69 6e   a row consistin
2ec30 67 0a 20 20 20 20 65 6e 74 69 72 65 6c 79 20 6f  g.    entirely o
2ec40 66 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a  f NULL values...
2ec50 20 20 20 3c 70 3e 5e 54 68 65 20 73 69 6e 67 6c     <p>^The singl
2ec60 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 2d  e row of result-
2ec70 73 65 74 20 64 61 74 61 20 63 72 65 61 74 65 64  set data created
2ec80 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74   by evaluating t
2ec90 68 65 20 61 67 67 72 65 67 61 74 65 0a 20 20 20  he aggregate.   
2eca0 20 61 6e 64 20 6e 6f 6e 2d 61 67 67 72 65 67 61   and non-aggrega
2ecb0 74 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  te expressions i
2ecc0 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
2ecd0 20 66 6f 72 6d 73 20 74 68 65 20 72 65 73 75 6c   forms the resul
2ece0 74 20 6f 66 20 61 6e 0a 20 20 20 20 61 67 67 72  t of an.    aggr
2ecf0 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68  egate query with
2ed00 6f 75 74 20 61 20 47 52 4f 55 50 20 42 59 20 63  out a GROUP BY c
2ed10 6c 61 75 73 65 2e 20 5e 41 6e 20 61 67 67 72 65  lause. ^An aggre
2ed20 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68 6f  gate query witho
2ed30 75 74 20 61 0a 20 20 20 20 47 52 4f 55 50 20 42  ut a.    GROUP B
2ed40 59 20 63 6c 61 75 73 65 20 61 6c 77 61 79 73 20  Y clause always 
2ed50 72 65 74 75 72 6e 73 20 65 78 61 63 74 6c 79 20  returns exactly 
2ed60 6f 6e 65 20 72 6f 77 20 6f 66 20 64 61 74 61 2c  one row of data,
2ed70 20 65 76 65 6e 20 69 66 20 74 68 65 72 65 20 61   even if there a
2ed80 72 65 0a 20 20 20 20 7a 65 72 6f 20 72 6f 77 73  re.    zero rows
2ed90 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 2e 0a   of input data..
2eda0 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 28 49 66 20 74  .  <li><p>^(If t
2edb0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
2edc0 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61 67 67  ent is <b>an agg
2edd0 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
2ede0 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59  h a GROUP.    BY
2edf0 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68 65  </b> clause, the
2ee00 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20 65 78  n each of the ex
2ee10 70 72 65 73 73 69 6f 6e 73 20 73 70 65 63 69 66  pressions specif
2ee20 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  ied as part of t
2ee30 68 65 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20  he.    GROUP BY 
2ee40 63 6c 61 75 73 65 20 69 73 20 65 76 61 6c 75 61  clause is evalua
2ee50 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  ted for each row
2ee60 20 6f 66 20 74 68 65 20 64 61 74 61 73 65 74 2e   of the dataset.
2ee70 20 45 61 63 68 20 72 6f 77 0a 20 20 20 20 69 73   Each row.    is
2ee80 20 74 68 65 6e 20 61 73 73 69 67 6e 65 64 20 74   then assigned t
2ee90 6f 20 61 20 22 67 72 6f 75 70 22 20 62 61 73 65  o a "group" base
2eea0 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  d on the results
2eeb0 3b 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  ; rows for which
2eec0 0a 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 73  .    the results
2eed0 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74   of evaluating t
2eee0 68 65 20 47 52 4f 55 50 20 42 59 20 65 78 70 72  he GROUP BY expr
2eef0 65 73 73 69 6f 6e 73 20 61 72 65 20 74 68 65 20  essions are the 
2ef00 73 61 6d 65 20 67 65 74 0a 20 20 20 20 61 73 73  same get.    ass
2ef10 69 67 6e 65 64 20 74 6f 20 74 68 65 20 73 61 6d  igned to the sam
2ef20 65 20 67 72 6f 75 70 2e 29 5e 20 5e 46 6f 72 20  e group.)^ ^For 
2ef30 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
2ef40 67 72 6f 75 70 69 6e 67 20 72 6f 77 73 2c 20 4e  grouping rows, N
2ef50 55 4c 4c 20 0a 20 20 20 20 76 61 6c 75 65 73 20  ULL .    values 
2ef60 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 65  are considered e
2ef70 71 75 61 6c 2e 20 5e 54 68 65 20 75 73 75 61 6c  qual. ^The usual
2ef80 20 72 75 6c 65 73 20 66 6f 72 20 5b 63 6f 6c 6c   rules for [coll
2ef90 61 74 69 6f 6e 7c 73 65 6c 65 63 74 69 6e 67 20  ation|selecting 
2efa0 61 0a 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 20  a.    collation 
2efb0 73 65 71 75 65 6e 63 65 5d 20 77 69 74 68 20 77  sequence] with w
2efc0 68 69 63 68 20 74 6f 20 63 6f 6d 70 61 72 65 20  hich to compare 
2efd0 74 65 78 74 20 76 61 6c 75 65 73 20 61 70 70 6c  text values appl
2efe0 79 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69 6e  y when evaluatin
2eff0 67 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e  g.    expression
2f000 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59 20  s in a GROUP BY 
2f010 63 6c 61 75 73 65 2e 20 20 5e 54 68 65 20 65 78  clause.  ^The ex
2f020 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65  pressions in the
2f030 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2f040 0a 20 20 20 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c  .    do <em>not<
2f050 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62 65 20  /em> have to be 
2f060 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
2f070 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 72   appear in the r
2f080 65 73 75 6c 74 2e 20 5e 54 68 65 0a 20 20 20 20  esult. ^The.    
2f090 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61  expressions in a
2f0a0 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2f0b0 20 6d 61 79 20 6e 6f 74 20 62 65 20 61 67 67 72   may not be aggr
2f0c0 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
2f0d0 73 2e 0a 0a 20 20 20 20 3c 70 3e 5e 28 49 66 20  s...    <p>^(If 
2f0e0 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  a HAVING clause 
2f0f0 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 69 74  is specified, it
2f100 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e   is evaluated on
2f110 63 65 20 66 6f 72 20 65 61 63 68 20 67 72 6f 75  ce for each grou
2f120 70 20 0a 20 20 20 20 6f 66 20 72 6f 77 73 20 61  p .    of rows a
2f130 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70  s a [boolean exp
2f140 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68 65  ression]. If the
2f150 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75   result of evalu
2f160 61 74 69 6e 67 20 74 68 65 0a 20 20 20 20 48 41  ating the.    HA
2f170 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 66  VING clause is f
2f180 61 6c 73 65 2c 20 74 68 65 20 67 72 6f 75 70 20  alse, the group 
2f190 69 73 20 64 69 73 63 61 72 64 65 64 2e 29 5e 20  is discarded.)^ 
2f1a0 5e 49 66 20 74 68 65 20 48 41 56 49 4e 47 20 63  ^If the HAVING c
2f1b0 6c 61 75 73 65 20 69 73 0a 20 20 20 20 61 6e 20  lause is.    an 
2f1c0 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
2f1d0 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61 6c  sion, it is eval
2f1e0 75 61 74 65 64 20 61 63 72 6f 73 73 20 61 6c 6c  uated across all
2f1f0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f   rows in the gro
2f200 75 70 2e 20 5e 49 66 0a 20 20 20 20 61 20 48 41  up. ^If.    a HA
2f210 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61  VING clause is a
2f220 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
2f230 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73  xpression, it is
2f240 20 65 76 61 6c 75 61 74 65 64 20 77 69 74 68 20   evaluated with 
2f250 72 65 73 70 65 63 74 0a 20 20 20 20 74 6f 20 61  respect.    to a
2f260 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20 73 65  n arbitrarily se
2f270 6c 65 63 74 65 64 20 72 6f 77 20 66 72 6f 6d 20  lected row from 
2f280 74 68 65 20 67 72 6f 75 70 2e 20 20 5e 54 68 65  the group.  ^The
2f290 20 48 41 56 49 4e 47 20 65 78 70 72 65 73 73 69   HAVING expressi
2f2a0 6f 6e 20 6d 61 79 0a 20 20 20 20 72 65 66 65 72  on may.    refer
2f2b0 20 74 6f 20 76 61 6c 75 65 73 2c 20 65 76 65 6e   to values, even
2f2c0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
2f2d0 69 6f 6e 73 2c 20 74 68 61 74 20 61 72 65 20 6e  ions, that are n
2f2e0 6f 74 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ot in the result
2f2f0 2e 3c 2f 70 3e 0a 0a 20 20 20 20 3c 70 3e 5e 45  .</p>..    <p>^E
2f300 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ach expression i
2f310 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
2f320 20 69 73 20 74 68 65 6e 20 65 76 61 6c 75 61 74   is then evaluat
2f330 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68  ed once for each
2f340 0a 20 20 20 20 67 72 6f 75 70 20 6f 66 20 72 6f  .    group of ro
2f350 77 73 2e 20 5e 49 66 20 74 68 65 20 65 78 70 72  ws. ^If the expr
2f360 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 61 67 67  ession is an agg
2f370 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2f380 6e 2c 20 69 74 20 69 73 20 0a 20 20 20 20 65 76  n, it is .    ev
2f390 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73 20 61  aluated across a
2f3a0 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67  ll rows in the g
2f3b0 72 6f 75 70 2e 20 5e 4f 74 68 65 72 77 69 73 65  roup. ^Otherwise
2f3c0 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
2f3d0 64 20 61 67 61 69 6e 73 74 0a 20 20 20 20 61 20  d against.    a 
2f3e0 73 69 6e 67 6c 65 20 61 72 62 69 74 72 61 72 69  single arbitrari
2f3f0 6c 79 20 63 68 6f 73 65 6e 20 72 6f 77 20 66 72  ly chosen row fr
2f400 6f 6d 20 77 69 74 68 69 6e 20 74 68 65 20 67 72  om within the gr
2f410 6f 75 70 2e 20 5e 49 66 20 74 68 65 72 65 20 69  oup. ^If there i
2f420 73 20 6d 6f 72 65 0a 20 20 20 20 74 68 61 6e 20  s more.    than 
2f430 6f 6e 65 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74  one non-aggregat
2f440 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  e expression in 
2f450 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 2c 20  the result-set, 
2f460 74 68 65 6e 20 61 6c 6c 20 73 75 63 68 0a 20 20  then all such.  
2f470 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72    expressions ar
2f480 65 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  e evaluated for 
2f490 74 68 65 20 73 61 6d 65 20 72 6f 77 2e 0a 0a 20  the same row... 
2f4a0 20 20 20 3c 70 3e 5e 45 61 63 68 20 67 72 6f 75     <p>^Each grou
2f4b0 70 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 73  p of input datas
2f4c0 65 74 20 72 6f 77 73 20 63 6f 6e 74 72 69 62 75  et rows contribu
2f4d0 74 65 73 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  tes a single row
2f4e0 20 74 6f 20 74 68 65 20 0a 20 20 20 20 73 65 74   to the .    set
2f4f0 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e   of result rows.
2f500 20 5e 53 75 62 6a 65 63 74 20 74 6f 20 66 69 6c   ^Subject to fil
2f510 74 65 72 69 6e 67 20 61 73 73 6f 63 69 61 74 65  tering associate
2f520 64 20 77 69 74 68 20 74 68 65 20 44 49 53 54 49  d with the DISTI
2f530 4e 43 54 0a 20 20 20 20 6b 65 79 77 6f 72 64 2c  NCT.    keyword,
2f540 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2f550 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  ows returned by 
2f560 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  an aggregate que
2f570 72 79 20 77 69 74 68 20 61 20 47 52 4f 55 50 0a  ry with a GROUP.
2f580 20 20 20 20 42 59 20 63 6c 61 75 73 65 20 69 73      BY clause is
2f590 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
2f5a0 20 6e 75 6d 62 65 72 20 6f 66 20 67 72 6f 75 70   number of group
2f5b0 73 20 6f 66 20 72 6f 77 73 20 70 72 6f 64 75 63  s of rows produc
2f5c0 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67 0a 20  ed by applying. 
2f5d0 20 20 20 74 68 65 20 47 52 4f 55 50 20 42 59 20     the GROUP BY 
2f5e0 61 6e 64 20 48 41 56 49 4e 47 20 63 6c 61 75 73  and HAVING claus
2f5f0 65 73 20 74 6f 20 74 68 65 20 66 69 6c 74 65 72  es to the filter
2f600 65 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74  ed input dataset
2f610 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64  ..</ul>..<tcl>hd
2f620 5f 66 72 61 67 6d 65 6e 74 20 62 61 72 65 61 67  _fragment bareag
2f630 67 20 7b 62 61 72 65 20 61 67 67 72 65 67 61 74  g {bare aggregat
2f640 65 20 74 65 72 6d 73 7d 3c 2f 74 63 6c 3e 0a 3c  e terms}</tcl>.<
2f650 70 3e 3c 62 3e 53 69 64 65 20 6e 6f 74 65 3a 20  p><b>Side note: 
2f660 42 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  Bare columns in 
2f670 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  an aggregate que
2f680 72 69 65 73 2e 3c 2f 62 3e 0a 54 68 65 20 75 73  ries.</b>.The us
2f690 75 61 6c 20 63 61 73 65 20 69 73 20 74 68 61 74  ual case is that
2f6a0 20 61 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   all column name
2f6b0 73 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  s in an aggregat
2f6c0 65 20 71 75 65 72 79 20 61 72 65 20 65 69 74 68  e query are eith
2f6d0 65 72 0a 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  er.arguments to 
2f6e0 5b 61 67 67 66 75 6e 63 7c 61 67 67 72 65 67 61  [aggfunc|aggrega
2f6f0 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 6f 72  te functions] or
2f700 20 65 6c 73 65 20 61 70 70 65 61 72 20 69 6e 20   else appear in 
2f710 74 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  the GROUP BY cla
2f720 75 73 65 2e 0a 41 20 72 65 73 75 6c 74 20 63 6f  use..A result co
2f730 6c 75 6d 6e 20 77 68 69 63 68 20 63 6f 6e 74 61  lumn which conta
2f740 69 6e 73 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d  ins a column nam
2f750 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 77 69  e that is not wi
2f760 74 68 69 6e 20 61 6e 0a 61 67 67 72 65 67 61 74  thin an.aggregat
2f770 65 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74  e function and t
2f780 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 61 70 70  hat does not app
2f790 65 61 72 20 69 6e 20 74 68 65 20 47 52 4f 55 50  ear in the GROUP
2f7a0 20 42 59 20 63 6c 61 75 73 65 20 28 69 66 0a 6f   BY clause (if.o
2f7b0 6e 65 20 65 78 69 73 74 73 29 20 69 73 20 63 61  ne exists) is ca
2f7c0 6c 6c 65 64 20 61 20 22 62 61 72 65 22 20 63 6f  lled a "bare" co
2f7d0 6c 75 6d 6e 2e 0a 45 78 61 6d 70 6c 65 3a 0a 3c  lumn..Example:.<
2f7e0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
2f7f0 0a 53 45 4c 45 43 54 20 61 2c 20 62 2c 20 73 75  .SELECT a, b, su
2f800 6d 28 63 29 20 46 52 4f 4d 20 74 61 62 31 20 47  m(c) FROM tab1 G
2f810 52 4f 55 50 20 42 59 20 61 3b 0a 3c 2f 70 72 65  ROUP BY a;.</pre
2f820 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  ></blockquote>.<
2f830 70 3e 49 6e 20 74 68 65 20 71 75 65 72 79 20 61  p>In the query a
2f840 62 6f 76 65 2c 20 74 68 65 20 22 61 22 20 63 6f  bove, the "a" co
2f850 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20  lumn is part of 
2f860 74 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  the GROUP BY cla
2f870 75 73 65 0a 61 6e 64 20 73 6f 20 65 61 63 68 20  use.and so each 
2f880 72 6f 77 20 6f 66 20 74 68 65 20 6f 75 74 70 75  row of the outpu
2f890 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
2f8a0 66 20 74 68 65 20 64 69 73 74 69 6e 63 74 20 76  f the distinct v
2f8b0 61 6c 75 65 73 20 66 6f 72 0a 22 61 22 2e 20 20  alues for."a".  
2f8c0 54 68 65 20 22 63 22 20 63 6f 6c 75 6d 6e 20 69  The "c" column i
2f8d0 73 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  s contained with
2f8e0 69 6e 20 74 68 65 20 5b 73 75 6d 28 29 5d 20 61  in the [sum()] a
2f8f0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
2f900 6e 0a 61 6e 64 20 73 6f 20 74 68 61 74 20 6f 75  n.and so that ou
2f910 74 70 75 74 20 63 6f 6c 75 6d 6e 20 69 73 20 74  tput column is t
2f920 68 65 20 73 75 6d 20 6f 66 20 61 6c 6c 20 22 63  he sum of all "c
2f930 22 20 76 61 6c 75 65 73 20 69 6e 20 72 6f 77 73  " values in rows
2f940 20 74 68 61 74 0a 68 61 76 65 20 74 68 65 20 73   that.have the s
2f950 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 22 61  ame value for "a
2f960 22 2e 20 20 42 75 74 20 77 68 61 74 20 69 73 20  ".  But what is 
2f970 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
2f980 65 20 62 61 72 65 20 0a 63 6f 6c 75 6d 6e 20 22  e bare .column "
2f990 62 22 3f 20 54 68 65 20 61 6e 73 77 65 72 20 69  b"? The answer i
2f9a0 73 20 74 68 61 74 20 74 68 65 20 22 62 22 20 72  s that the "b" r
2f9b0 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 74 68  esult will be th
2f9c0 65 0a 76 61 6c 75 65 20 66 6f 72 20 22 62 22 20  e.value for "b" 
2f9d0 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  in one of the in
2f9e0 70 75 74 20 72 6f 77 73 20 74 68 61 74 20 66 6f  put rows that fo
2f9f0 72 6d 20 74 68 65 20 61 67 67 72 65 67 61 74 65  rm the aggregate
2fa00 2e 0a 54 68 65 20 70 72 6f 62 6c 65 6d 20 69 73  ..The problem is
2fa10 20 74 68 61 74 20 79 6f 75 20 75 73 75 61 6c 6c   that you usuall
2fa20 79 20 64 6f 20 6e 6f 74 20 6b 6e 6f 77 20 77 68  y do not know wh
2fa30 69 63 68 20 69 6e 70 75 74 20 72 6f 77 20 69 73  ich input row is
2fa40 20 75 73 65 64 0a 74 6f 20 63 6f 6d 70 75 74 65   used.to compute
2fa50 20 22 62 22 2c 20 61 6e 64 20 73 6f 20 69 6e 20   "b", and so in 
2fa60 6d 61 6e 79 20 63 61 73 65 73 20 74 68 65 20 76  many cases the v
2fa70 61 6c 75 65 20 66 6f 72 20 22 62 22 20 69 73 20  alue for "b" is 
2fa80 75 6e 64 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a  undefined..</p>.
2fa90 3c 70 3e 0a 53 70 65 63 69 61 6c 20 70 72 6f 63  <p>.Special proc
2faa0 65 73 73 69 6e 67 20 6f 63 63 75 72 73 20 6f 63  essing occurs oc
2fab0 63 75 72 73 20 77 68 65 6e 20 74 68 65 20 61 67  curs when the ag
2fac0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
2fad0 20 69 73 20 0a 65 69 74 68 65 72 20 5b 6d 61 78   is .either [max
2fae0 41 67 67 46 75 6e 63 7c 6d 69 6e 28 29 5d 20 6f  AggFunc|min()] o
2faf0 72 20 5b 6d 69 6e 41 67 67 46 75 6e 63 7c 6d 61  r [minAggFunc|ma
2fb00 78 28 29 5d 2e 20 20 45 78 61 6d 70 6c 65 3a 0a  x()].  Example:.
2fb10 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
2fb20 3e 0a 53 45 4c 45 43 54 20 61 2c 20 62 2c 20 6d  >.SELECT a, b, m
2fb30 61 78 28 63 29 20 46 52 4f 4d 20 74 61 62 31 20  ax(c) FROM tab1 
2fb40 47 52 4f 55 50 20 42 59 20 61 3b 0a 3c 2f 70 72  GROUP BY a;.</pr
2fb50 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
2fb60 57 68 65 6e 20 74 68 65 20 5b 6d 61 78 41 67 67  When the [maxAgg
2fb70 46 75 6e 63 7c 6d 69 6e 28 29 5d 20 6f 72 20 5b  Func|min()] or [
2fb80 6d 69 6e 41 67 67 46 75 6e 63 7c 6d 61 78 28 29  minAggFunc|max()
2fb90 5d 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ] aggregate func
2fba0 74 69 6f 6e 73 20 0a 61 72 65 20 75 73 65 64 20  tions .are used 
2fbb0 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
2fbc0 71 75 65 72 79 2c 20 61 6c 6c 20 62 61 72 65 20  query, all bare 
2fbd0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
2fbe0 65 73 75 6c 74 20 73 65 74 20 0a 74 61 6b 65 20  esult set .take 
2fbf0 76 61 6c 75 65 73 20 66 72 6f 6d 20 74 68 65 20  values from the 
2fc00 69 6e 70 75 74 0a 72 6f 77 20 77 68 69 63 68 20  input.row which 
2fc10 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 74 68  also contains th
2fc20 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 20 6d 61 78  e minimum or max
2fc30 69 6d 75 6d 2e 20 20 53 6f 20 69 6e 20 74 68 65  imum.  So in the
2fc40 20 71 75 65 72 79 0a 61 62 6f 76 65 2c 20 74 68   query.above, th
2fc50 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 22  e value of the "
2fc60 62 22 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  b" column in the
2fc70 20 6f 75 74 70 75 74 20 77 69 6c 6c 20 62 65 20   output will be 
2fc80 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 74 68 65  the value of.the
2fc90 20 22 62 22 20 63 6f 6c 75 6d 6e 20 69 6e 20 74   "b" column in t
2fca0 68 65 20 69 6e 70 75 74 20 72 6f 77 20 74 68 61  he input row tha
2fcb0 74 20 68 61 73 20 74 68 65 20 6c 61 72 67 65 73  t has the larges
2fcc0 74 20 22 63 22 20 76 61 6c 75 65 2e 0a 54 68 65  t "c" value..The
2fcd0 72 65 20 69 73 20 73 74 69 6c 6c 20 61 6e 20 61  re is still an a
2fce0 6d 62 69 67 75 69 74 79 20 69 66 20 74 77 6f 20  mbiguity if two 
2fcf0 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 69  or more of the i
2fd00 6e 70 75 74 20 72 6f 77 73 20 68 61 76 65 20 74  nput rows have t
2fd10 68 65 0a 73 61 6d 65 20 6d 69 6e 69 6d 75 6d 20  he.same minimum 
2fd20 6f 72 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  or maximum value
2fd30 20 6f 72 20 69 66 20 74 68 65 20 71 75 65 72 79   or if the query
2fd40 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
2fd50 68 61 6e 20 6f 6e 65 0a 6d 69 6e 28 29 20 61 6e  han one.min() an
2fd60 64 2f 6f 72 20 6d 61 78 28 29 20 61 67 67 72 65  d/or max() aggre
2fd70 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 20 4f  gate function. O
2fd80 6e 6c 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e  nly the built-in
2fd90 20 5b 6d 69 6e 41 67 67 46 75 6e 63 7c 6d 69 6e   [minAggFunc|min
2fda0 28 29 5d 20 0a 61 6e 64 20 5b 6d 61 78 41 67 67  ()] .and [maxAgg
2fdb0 46 75 6e 63 7c 6d 61 78 28 29 5d 20 66 75 6e 63  Func|max()] func
2fdc0 74 69 6f 6e 73 20 77 6f 72 6b 20 74 68 69 73 20  tions work this 
2fdd0 77 61 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 3c 62  way..</p>..<p><b
2fde0 3e 34 2e 20 52 65 6d 6f 76 61 6c 20 6f 66 20 64  >4. Removal of d
2fdf0 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 28 44  uplicate rows (D
2fe00 49 53 54 49 4e 43 54 20 70 72 6f 63 65 73 73 69  ISTINCT processi
2fe10 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64  ng).</b>.<tcl>hd
2fe20 5f 66 72 61 67 6d 65 6e 74 20 64 69 73 74 69 6e  _fragment distin
2fe30 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64  ct</tcl>.<tcl>hd
2fe40 5f 6b 65 79 77 6f 72 64 73 20 7b 44 49 53 54 49  _keywords {DISTI
2fe50 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  NCT}</tcl>..<p>^
2fe60 4f 6e 65 20 6f 66 20 74 68 65 20 41 4c 4c 20 6f  One of the ALL o
2fe70 72 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  r DISTINCT keywo
2fe80 72 64 73 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 74  rds may follow t
2fe90 68 65 20 53 45 4c 45 43 54 20 6b 65 79 77 6f 72  he SELECT keywor
2fea0 64 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53  d in a .simple S
2feb0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
2fec0 20 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20   ^If the simple 
2fed0 53 45 4c 45 43 54 20 69 73 20 61 20 53 45 4c 45  SELECT is a SELE
2fee0 43 54 20 41 4c 4c 2c 20 74 68 65 6e 20 74 68 65  CT ALL, then the
2fef0 0a 65 6e 74 69 72 65 20 73 65 74 20 6f 66 20 72  .entire set of r
2ff00 65 73 75 6c 74 20 72 6f 77 73 20 61 72 65 20 72  esult rows are r
2ff10 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
2ff20 45 4c 45 43 54 2e 20 5e 49 66 20 6e 65 69 74 68  ELECT. ^If neith
2ff30 65 72 20 41 4c 4c 20 6f 72 0a 44 49 53 54 49 4e  er ALL or.DISTIN
2ff40 43 54 20 61 72 65 20 70 72 65 73 65 6e 74 2c 20  CT are present, 
2ff50 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
2ff60 72 20 69 73 20 61 73 20 69 66 20 41 4c 4c 20 77  r is as if ALL w
2ff70 65 72 65 20 73 70 65 63 69 66 69 65 64 2e 20 0a  ere specified. .
2ff80 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53  ^If the simple S
2ff90 45 4c 45 43 54 20 69 73 20 61 20 53 45 4c 45 43  ELECT is a SELEC
2ffa0 54 20 44 49 53 54 49 4e 43 54 2c 20 74 68 65 6e  T DISTINCT, then
2ffb0 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
2ffc0 61 72 65 20 72 65 6d 6f 76 65 64 0a 66 72 6f 6d  are removed.from
2ffd0 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
2ffe0 6c 74 20 72 6f 77 73 20 62 65 66 6f 72 65 20 69  lt rows before i
2fff0 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e  t is returned. ^
30000 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
30010 20 6f 66 0a 64 65 74 65 63 74 69 6e 67 20 64 75   of.detecting du
30020 70 6c 69 63 61 74 65 20 72 6f 77 73 2c 20 74 77  plicate rows, tw
30030 6f 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  o NULL values ar
30040 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  e considered to 
30050 62 65 20 65 71 75 61 6c 2e 20 5e 54 68 65 0a 5b  be equal. ^The.[
30060 68 6f 77 20 63 6f 6c 6c 61 74 69 6f 6e 20 69 73  how collation is
30070 20 64 65 74 65 72 6d 69 6e 65 64 7c 75 73 75 61   determined|usua
30080 6c 20 72 75 6c 65 73 5d 20 61 70 70 6c 79 20 66  l rules] apply f
30090 6f 72 20 73 65 6c 65 63 74 69 6e 67 20 61 20 63  or selecting a c
300a0 6f 6c 6c 61 74 69 6f 6e 0a 73 65 71 75 65 6e 63  ollation.sequenc
300b0 65 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  e to compare tex
300c0 74 20 76 61 6c 75 65 73 2e 0a 0a 3c 74 63 6c 3e  t values...<tcl>
300d0 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d  .hd_fragment com
300e0 70 6f 75 6e 64 20 7b 63 6f 6d 70 6f 75 6e 64 20  pound {compound 
300f0 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e  select} {compoun
30100 64 20 71 75 65 72 79 7d 20 7b 63 6f 6d 70 6f 75  d query} {compou
30110 6e 64 20 53 45 4c 45 43 54 7d 20 7b 63 6f 6d 70  nd SELECT} {comp
30120 6f 75 6e 64 20 53 45 4c 45 43 54 73 7d 0a 3c 2f  ound SELECTs}.</
30130 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e  tcl>.<h3>Compoun
30140 64 20 53 65 6c 65 63 74 20 53 74 61 74 65 6d 65  d Select Stateme
30150 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f  nts</h3>..<p>Two
30160 20 6f 72 20 6d 6f 72 65 20 5b 73 69 6d 70 6c 65   or more [simple
30170 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65   SELECT] stateme
30180 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e 6e 65  nts may be conne
30190 63 74 65 64 20 74 6f 67 65 74 68 65 72 20 74 6f  cted together to
301a0 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64   form.a compound
301b0 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20 74 68   SELECT using th
301c0 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41  e UNION, UNION A
301d0 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20 6f 72  LL, INTERSECT or
301e0 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72   EXCEPT operator
301f0 2c 0a 61 73 20 73 68 6f 77 6e 20 62 79 20 74 68  ,.as shown by th
30200 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67  e following diag
30210 72 61 6d 3a 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75  ram:..<tcl>.Recu
30220 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
30230 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65  am compound-sele
30240 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ct-stmt.</tcl>..
30250 3c 70 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e  <p>^In a compoun
30260 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68  d SELECT, all th
30270 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45  e constituent SE
30280 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74 75 72  LECTs must retur
30290 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62  n the same .numb
302a0 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c  er of result col
302b0 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20 63 6f  umns. ^As the co
302c0 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f  mponents of a co
302d0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d 75  mpound SELECT mu
302e0 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53 45 4c  st.be simple SEL
302f0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  ECT statements, 
30300 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  they may not con
30310 74 61 69 6e 20 5b 4f 52 44 45 52 20 42 59 5d 20  tain [ORDER BY] 
30320 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73  or [LIMIT] claus
30330 65 73 2e 0a 5e 5b 4f 52 44 45 52 20 42 59 5d 20  es..^[ORDER BY] 
30340 61 6e 64 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75  and [LIMIT] clau
30350 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63  ses may only occ
30360 75 72 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ur at the end of
30370 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70   the entire comp
30380 6f 75 6e 64 0a 53 45 4c 45 43 54 2c 20 61 6e 64  ound.SELECT, and
30390 20 74 68 65 6e 20 6f 6e 6c 79 20 69 66 20 74 68   then only if th
303a0 65 20 66 69 6e 61 6c 20 65 6c 65 6d 65 6e 74 20  e final element 
303b0 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  of the compound 
303c0 69 73 20 6e 6f 74 20 61 20 5b 56 41 4c 55 45 53  is not a [VALUES
303d0 5d 20 63 6c 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41  ] clause...<p>^A
303e0 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
303f0 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 55   created using U
30400 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f  NION ALL operato
30410 72 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 74 68  r returns all th
30420 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20  e rows.from the 
30430 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20 6c 65  SELECT to the le
30440 66 74 20 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20  ft of the UNION 
30450 41 4c 4c 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e  ALL operator, an
30460 64 20 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66  d all the rows.f
30470 72 6f 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74  rom the SELECT t
30480 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 69  o the right of i
30490 74 2e 20 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70  t. ^The UNION op
304a0 65 72 61 74 6f 72 20 77 6f 72 6b 73 20 74 68 65  erator works the
304b0 20 73 61 6d 65 20 77 61 79 20 61 73 0a 55 4e 49   same way as.UNI
304c0 4f 4e 20 41 4c 4c 2c 20 65 78 63 65 70 74 20 74  ON ALL, except t
304d0 68 61 74 20 64 75 70 6c 69 63 61 74 65 20 72 6f  hat duplicate ro
304e0 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66  ws are removed f
304f0 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 20 72 65  rom the final re
30500 73 75 6c 74 20 73 65 74 2e 0a 5e 54 68 65 20 49  sult set..^The I
30510 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f  NTERSECT operato
30520 72 20 72 65 74 75 72 6e 73 20 74 68 65 20 69 6e  r returns the in
30530 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68  tersection of th
30540 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
30550 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68 74 20   left and.right 
30560 53 45 4c 45 43 54 73 2e 20 20 5e 54 68 65 20 45  SELECTs.  ^The E
30570 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 20 72  XCEPT operator r
30580 65 74 75 72 6e 73 20 74 68 65 20 73 75 62 73 65  eturns the subse
30590 74 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e  t of rows return
305a0 65 64 20 62 79 20 74 68 65 0a 6c 65 66 74 20 53  ed by the.left S
305b0 45 4c 45 43 54 20 74 68 61 74 20 61 72 65 20 6e  ELECT that are n
305c0 6f 74 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64  ot also returned
305d0 20 62 79 20 74 68 65 20 72 69 67 68 74 2d 68 61   by the right-ha
305e0 6e 64 20 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c  nd SELECT. ^Dupl
305f0 69 63 61 74 65 0a 72 6f 77 73 20 61 72 65 20 72  icate.rows are r
30600 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20  emoved from the 
30610 72 65 73 75 6c 74 73 20 6f 66 20 49 4e 54 45 52  results of INTER
30620 53 45 43 54 20 61 6e 64 20 45 58 43 45 50 54 20  SECT and EXCEPT 
30630 6f 70 65 72 61 74 6f 72 73 20 62 65 66 6f 72 65  operators before
30640 20 74 68 65 0a 72 65 73 75 6c 74 20 73 65 74 20   the.result set 
30650 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70  is returned...<p
30660 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73  >^For the purpos
30670 65 73 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e  es of determinin
30680 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  g duplicate rows
30690 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 73   for the results
306a0 20 6f 66 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c   of compound.SEL
306b0 45 43 54 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e  ECT operators, N
306c0 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
306d0 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c 20  onsidered equal 
306e0 74 6f 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61  to other NULL va
306f0 6c 75 65 73 20 61 6e 64 0a 64 69 73 74 69 6e 63  lues and.distinc
30700 74 20 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e  t from all non-N
30710 55 4c 4c 20 76 61 6c 75 65 73 2e 20 5e 54 68 65  ULL values. ^The
30720 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
30730 6e 63 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70  nce used to comp
30740 61 72 65 20 0a 74 77 6f 20 74 65 78 74 20 76 61  are .two text va
30750 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e  lues is determin
30760 65 64 20 61 73 20 69 66 20 74 68 65 20 63 6f 6c  ed as if the col
30770 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74  umns of the left
30780 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a   and right-hand.
30790 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
307a0 73 20 77 65 72 65 20 74 68 65 20 6c 65 66 74 20  s were the left 
307b0 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 6f  and right-hand o
307c0 70 65 72 61 6e 64 73 20 6f 66 20 74 68 65 20 65  perands of the e
307d0 71 75 61 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74  quals (=).operat
307e0 6f 72 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  or, except that 
307f0 67 72 65 61 74 65 72 20 70 72 65 63 65 64 65 6e  greater preceden
30800 63 65 20 69 73 20 6e 6f 74 20 61 73 73 69 67 6e  ce is not assign
30810 65 64 20 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f  ed to a collatio
30820 6e 20 0a 73 65 71 75 65 6e 63 65 20 73 70 65 63  n .sequence spec
30830 69 66 69 65 64 20 77 69 74 68 20 74 68 65 20 70  ified with the p
30840 6f 73 74 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f  ostfix COLLATE o
30850 70 65 72 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66  perator. ^No aff
30860 69 6e 69 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61  inity.transforma
30870 74 69 6f 6e 73 20 61 72 65 20 61 70 70 6c 69 65  tions are applie
30880 64 20 74 6f 20 61 6e 79 20 76 61 6c 75 65 73 20  d to any values 
30890 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72  when comparing r
308a0 6f 77 73 20 61 73 20 70 61 72 74 20 6f 66 20 61  ows as part of a
308b0 0a 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  .compound SELECT
308c0 2e 20 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68  . ..<p>^(When th
308d0 72 65 65 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70  ree or more simp
308e0 6c 65 20 53 45 4c 45 43 54 73 20 61 72 65 20 63  le SELECTs are c
308f0 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20  onnected into a 
30900 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c  compound SELECT,
30910 0a 74 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d  .they group from
30920 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20   left to right. 
30930 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
30940 69 66 20 22 41 22 2c 20 22 42 22 20 61 6e 64 20  if "A", "B" and 
30950 22 43 22 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70  "C" are all.simp
30960 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
30970 65 6e 74 73 2c 20 28 41 20 6f 70 20 42 20 6f 70  ents, (A op B op
30980 20 43 29 20 69 73 20 70 72 6f 63 65 73 73 65 64   C) is processed
30990 20 61 73 20 28 28 41 20 6f 70 20 42 29 20 6f 70   as ((A op B) op
309a0 20 43 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74   C).)^..</p>..<t
309b0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f  cl>hd_fragment o
309c0 72 64 65 72 62 79 20 7b 6f 72 64 65 72 20 62 79  rderby {order by
309d0 7d 20 7b 4f 52 44 45 52 20 42 59 7d 3c 2f 74 63  } {ORDER BY}</tc
309e0 6c 3e 0a 3c 68 33 3e 54 68 65 20 4f 52 44 45 52  l>.<h3>The ORDER
309f0 20 42 59 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a   BY clause</h3>.
30a00 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43 54 20  .<p>If a SELECT 
30a10 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 72  statement that r
30a20 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e  eturns more than
30a30 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f   one row does no
30a40 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45 52 20  t have an.ORDER 
30a50 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6f  BY clause, the o
30a60 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74 68  rder in which th
30a70 65 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72  e rows are retur
30a80 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ned is undefined
30a90 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c 45 43  ..Or, if a SELEC
30aa0 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  T statement does
30ab0 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42   have an ORDER B
30ac0 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
30ad0 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70 72 65  he list of.expre
30ae0 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65 64 20  ssions attached 
30af0 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  to the ORDER BY 
30b00 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6f 72  determine the or
30b10 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
30b20 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 74  s.are returned t
30b30 6f 20 74 68 65 20 75 73 65 72 2e 0a 0a 3c 70 3e  o the user...<p>
30b40 0a 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  .^In a [compound
30b50 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65   SELECT] stateme
30b60 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 61 73  nt, only the las
30b70 74 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20  t or right-most 
30b80 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 0a  [simple SELECT].
30b90 6d 61 79 20 68 61 76 65 20 61 6e 20 4f 52 44 45  may have an ORDE
30ba0 52 20 42 59 20 63 6c 61 75 73 65 2e 20 5e 54 68  R BY clause. ^Th
30bb0 61 74 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  at ORDER BY clau
30bc0 73 65 20 77 69 6c 6c 20 61 70 70 6c 79 20 61 63  se will apply ac
30bd0 72 6f 73 73 20 61 6c 6c 20 65 6c 65 6d 65 6e 74  ross all element
30be0 73 20 6f 66 0a 74 68 65 20 63 6f 6d 70 6f 75 6e  s of.the compoun
30bf0 64 2e 20 5e 49 66 20 74 68 65 20 72 69 67 68 74  d. ^If the right
30c00 2d 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  -most element of
30c10 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
30c20 45 43 54 5d 20 69 73 20 61 20 5b 56 41 4c 55 45  ECT] is a [VALUE
30c30 53 5d 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20  S] clause,.then 
30c40 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  no ORDER BY clau
30c50 73 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 6f 6e  se is allowed on
30c60 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2e   that statement.
30c70 0a 0a 0a 3c 70 3e 5e 52 6f 77 73 20 61 72 65 20  ...<p>^Rows are 
30c80 66 69 72 73 74 20 73 6f 72 74 65 64 20 62 61 73  first sorted bas
30c90 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74  ed on the result
30ca0 73 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20  s of.evaluating 
30cb0 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78  the left-most ex
30cc0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
30cd0 4f 52 44 45 52 20 42 59 20 6c 69 73 74 2c 20 74  ORDER BY list, t
30ce0 68 65 6e 20 74 69 65 73 20 61 72 65 20 62 72 6f  hen ties are bro
30cf0 6b 65 6e 0a 62 79 20 65 76 61 6c 75 61 74 69 6e  ken.by evaluatin
30d00 67 20 74 68 65 20 73 65 63 6f 6e 64 20 6c 65 66  g the second lef
30d10 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f  t-most expressio
30d20 6e 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65  n and so on. The
30d30 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 0a   order in which.
30d40 74 77 6f 20 72 6f 77 73 20 66 6f 72 20 77 68 69  two rows for whi
30d50 63 68 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20  ch all ORDER BY 
30d60 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c  expressions eval
30d70 75 61 74 65 20 74 6f 20 65 71 75 61 6c 20 76 61  uate to equal va
30d80 6c 75 65 73 20 61 72 65 0a 72 65 74 75 72 6e 65  lues are.returne
30d90 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  d is undefined. 
30da0 5e 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65  ^Each ORDER BY e
30db0 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65  xpression may be
30dc0 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c   optionally foll
30dd0 6f 77 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74  owed.by one of t
30de0 68 65 20 6b 65 79 77 6f 72 64 73 20 41 53 43 20  he keywords ASC 
30df0 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20  (smaller values 
30e00 61 72 65 20 72 65 74 75 72 6e 65 64 20 66 69 72  are returned fir
30e10 73 74 29 20 6f 72 20 44 45 53 43 20 28 6c 61 72  st) or DESC (lar
30e20 67 65 72 0a 76 61 6c 75 65 73 20 61 72 65 20 72  ger.values are r
30e30 65 74 75 72 6e 65 64 20 66 69 72 73 74 29 2e 20  eturned first). 
30e40 5e 49 66 20 6e 65 69 74 68 65 72 20 41 53 43 20  ^If neither ASC 
30e50 6f 72 20 44 45 53 43 20 61 72 65 20 73 70 65 63  or DESC are spec
30e60 69 66 69 65 64 2c 20 72 6f 77 73 0a 61 72 65 20  ified, rows.are 
30e70 73 6f 72 74 65 64 20 69 6e 20 61 73 63 65 6e 64  sorted in ascend
30e80 69 6e 67 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c  ing (smaller val
30e90 75 65 73 20 66 69 72 73 74 29 20 6f 72 64 65 72  ues first) order
30ea0 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70   by default...<p
30eb0 3e 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65  >Each ORDER BY e
30ec0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f  xpression is pro
30ed0 63 65 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77  cessed as follow
30ee0 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  s:</p>..<ol>.<li
30ef0 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45  ><p>^If the ORDE
30f00 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
30f10 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e  is a constant in
30f20 74 65 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65  teger K then the
30f30 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63  .expression is c
30f40 6f 6e 73 69 64 65 72 65 64 20 61 6e 20 61 6c 69  onsidered an ali
30f50 61 73 20 66 6f 72 20 74 68 65 20 4b 2d 74 68 20  as for the K-th 
30f60 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65  column of the re
30f70 73 75 6c 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e  sult set.(column
30f80 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20 66  s are numbered f
30f90 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
30fa0 74 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20  t starting with 
30fb0 31 29 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20  1)...<li><p>^If 
30fc0 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70  the ORDER BY exp
30fd0 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64  ression is an id
30fe0 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 63 6f  entifier that co
30ff0 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65  rresponds to.the
31000 20 61 6c 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66   alias of one of
31010 20 74 68 65 20 6f 75 74 70 75 74 20 63 6f 6c 75   the output colu
31020 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 65 78  mns, then the ex
31030 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73  pression is cons
31040 69 64 65 72 65 64 0a 61 6e 20 61 6c 69 61 73 20  idered.an alias 
31050 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e  for that column.
31060 0a 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77  ..<li><p>^Otherw
31070 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45  ise, if the ORDE
31080 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
31090 69 73 20 61 6e 79 20 6f 74 68 65 72 20 65 78 70  is any other exp
310a0 72 65 73 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20  ression, it .is 
310b0 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68  evaluated and th
310c0 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65  e returned value
310d0 20 75 73 65 64 20 74 6f 20 6f 72 64 65 72 20 74   used to order t
310e0 68 65 20 6f 75 74 70 75 74 20 72 6f 77 73 2e 20  he output rows. 
310f0 5e 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20 73  ^If.the SELECT s
31100 74 61 74 65 6d 65 6e 74 20 69 73 20 61 20 73 69  tatement is a si
31110 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20 74 68 65  mple SELECT, the
31120 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6d 61  n an ORDER BY ma
31130 79 20 63 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72  y contain any.ar
31140 62 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69  bitrary expressi
31150 6f 6e 73 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69  ons. ^However, i
31160 66 20 74 68 65 20 53 45 4c 45 43 54 20 69 73 20  f the SELECT is 
31170 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
31180 54 2c 20 74 68 65 6e 0a 4f 52 44 45 52 20 42 59  T, then.ORDER BY
31190 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
311a0 74 20 61 72 65 20 6e 6f 74 20 61 6c 69 61 73 65  t are not aliase
311b0 73 20 74 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75  s to output colu
311c0 6d 6e 73 20 6d 75 73 74 20 62 65 20 65 78 61 63  mns must be exac
311d0 74 6c 79 0a 74 68 65 20 73 61 6d 65 20 61 73 20  tly.the same as 
311e0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73  an expression us
311f0 65 64 20 61 73 20 61 6e 20 6f 75 74 70 75 74 20  ed as an output 
31200 63 6f 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c  column..</ol>..<
31210 70 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f  p>^For the purpo
31220 73 65 73 20 6f 66 20 73 6f 72 74 69 6e 67 20 72  ses of sorting r
31230 6f 77 73 2c 20 76 61 6c 75 65 73 20 61 72 65 20  ows, values are 
31240 63 6f 6d 70 61 72 65 64 20 69 6e 20 74 68 65 20  compared in the 
31250 73 61 6d 65 20 77 61 79 0a 61 73 20 66 6f 72 20  same way.as for 
31260 5b 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72  [comparison expr
31270 65 73 73 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f  essions]. The co
31280 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
31290 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
312a0 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73  .two text values
312b0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61   is determined a
312c0 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e  s follows:..<ol>
312d0 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  .  <li><p>^If th
312e0 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
312f0 73 73 69 6f 6e 20 69 73 20 61 73 73 69 67 6e 65  ssion is assigne
31300 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  d a collation se
31310 71 75 65 6e 63 65 20 75 73 69 6e 67 0a 20 20 74  quence using.  t
31320 68 65 20 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c  he postfix [COLL
31330 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74  ATE operator], t
31340 68 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65  hen the specifie
31350 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  d collation sequ
31360 65 6e 63 65 20 69 73 0a 20 20 75 73 65 64 2e 0a  ence is.  used..
31370 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77    <li><p>^Otherw
31380 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45  ise, if the ORDE
31390 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
313a0 69 73 20 61 6e 20 61 6c 69 61 73 20 74 6f 20 61  is an alias to a
313b0 6e 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 74  n expression.  t
313c0 68 61 74 20 68 61 73 20 62 65 65 6e 20 61 73 73  hat has been ass
313d0 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f  igned a collatio
313e0 6e 20 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67  n sequence using
313f0 20 74 68 65 20 70 6f 73 74 66 69 78 20 0a 20 20   the postfix .  
31400 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  [COLLATE operato
31410 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  r], then the col
31420 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
31430 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20  assigned to the 
31440 61 6c 69 61 73 65 64 0a 20 20 65 78 70 72 65 73  aliased.  expres
31450 73 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20  sion is used..  
31460 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73  <li><p>^Otherwis
31470 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20  e, if the ORDER 
31480 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
31490 20 61 20 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20   a column or an 
314a0 61 6c 69 61 73 20 6f 66 0a 20 20 61 6e 20 65 78  alias of.  an ex
314b0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
314c0 20 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20   a column, then 
314d0 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  the default coll
314e0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
314f0 6f 72 0a 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20  or.  the column 
31500 69 73 20 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e  is used. .  <li>
31510 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 74  <p>^Otherwise, t
31520 68 65 20 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c  he [BINARY] coll
31530 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69  ation sequence i
31540 73 20 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c  s used..</ol>..<
31550 70 3e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  p>In a [compound
31560 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65   SELECT] stateme
31570 6e 74 2c 20 61 6c 6c 20 4f 52 44 45 52 20 42 59  nt, all ORDER BY
31580 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65   expressions are
31590 20 68 61 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61   handled.as alia
315a0 73 65 73 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74  ses for one of t
315b0 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
315c0 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e  s of the compoun
315d0 64 2e 0a 5e 28 49 66 20 61 6e 20 4f 52 44 45 52  d..^(If an ORDER
315e0 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
315f0 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
31600 20 61 6c 69 61 73 2c 20 74 68 65 6e 20 53 51 4c   alias, then SQL
31610 69 74 65 20 73 65 61 72 63 68 65 73 0a 74 68 65  ite searches.the
31620 20 6c 65 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43   left-most SELEC
31630 54 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e  T in the compoun
31640 64 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 63  d for a result c
31650 6f 6c 75 6d 6e 20 74 68 61 74 20 6d 61 74 63 68  olumn that match
31660 65 73 20 65 69 74 68 65 72 0a 74 68 65 20 73 65  es either.the se
31670 63 6f 6e 64 20 6f 72 20 74 68 69 72 64 20 72 75  cond or third ru
31680 6c 65 73 20 61 62 6f 76 65 2e 20 49 66 20 61 20  les above. If a 
31690 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
316a0 74 68 65 20 73 65 61 72 63 68 20 73 74 6f 70 73  the search stops
316b0 20 61 6e 64 0a 74 68 65 20 65 78 70 72 65 73 73   and.the express
316c0 69 6f 6e 20 69 73 20 68 61 6e 64 6c 65 64 20 61  ion is handled a
316d0 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
316e0 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
316f0 20 74 68 61 74 20 69 74 20 68 61 73 20 62 65 65   that it has bee
31700 6e 0a 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73  n.matched agains
31710 74 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68  t. Otherwise, th
31720 65 20 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f  e next SELECT to
31730 20 74 68 65 20 72 69 67 68 74 20 69 73 20 74 72   the right is tr
31740 69 65 64 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29  ied, and so on.)
31750 5e 0a 5e 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e  ^.^If no matchin
31760 67 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e  g expression can
31770 20 62 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   be found in the
31780 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20   result columns 
31790 6f 66 20 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65  of any.constitue
317a0 6e 74 20 53 45 4c 45 43 54 2c 20 69 74 20 69 73  nt SELECT, it is
317b0 20 61 6e 20 65 72 72 6f 72 2e 20 5e 45 61 63 68   an error. ^Each
317c0 20 74 65 72 6d 20 6f 66 20 74 68 65 20 4f 52 44   term of the ORD
317d0 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a  ER BY clause is.
317e0 70 72 6f 63 65 73 73 65 64 20 73 65 70 61 72 61  processed separa
317f0 74 65 6c 79 20 61 6e 64 20 6d 61 79 20 62 65 20  tely and may be 
31800 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 20  matched against 
31810 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66  result columns f
31820 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 0a 53 45  rom different.SE
31830 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
31840 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  in the compound.
31850 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
31860 61 67 6d 65 6e 74 20 6c 69 6d 69 74 6f 66 66 73  agment limitoffs
31870 65 74 20 7b 4c 49 4d 49 54 7d 20 7b 4f 46 46 53  et {LIMIT} {OFFS
31880 45 54 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  ET}</tcl>.<h3>Th
31890 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 3c 2f  e LIMIT clause</
318a0 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d  h3>..<p>^The LIM
318b0 49 54 20 63 6c 61 75 73 65 20 69 73 20 75 73 65  IT clause is use
318c0 64 20 74 6f 20 70 6c 61 63 65 20 61 6e 20 75 70  d to place an up
318d0 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
318e0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a   number of rows.
318f0 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
31900 65 6e 74 69 72 65 20 53 45 4c 45 43 54 20 73 74  entire SELECT st
31910 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 6e  atement...<p>^In
31920 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
31930 45 43 54 5d 2c 20 6f 6e 6c 79 20 74 68 65 0a 6c  ECT], only the.l
31940 61 73 74 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73  ast or right-mos
31950 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  t [simple SELECT
31960 5d 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 61 20  ] may contain a 
31970 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 0a  LIMIT clause.  .
31980 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20  ^In a [compound 
31990 53 45 4c 45 43 54 5d 2c 20 0a 74 68 65 20 4c 49  SELECT], .the LI
319a0 4d 49 54 20 63 6c 61 75 73 65 20 61 70 70 6c 69  MIT clause appli
319b0 65 73 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  es to the entire
319c0 20 63 6f 6d 70 6f 75 6e 64 2c 20 6e 6f 74 20 6a   compound, not j
319d0 75 73 74 20 74 68 65 20 66 69 6e 61 6c 20 53 45  ust the final SE
319e0 4c 45 43 54 2e 0a 5e 49 66 20 74 68 65 20 72 69  LECT..^If the ri
319f0 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65  ght-most [simple
31a00 20 53 45 4c 45 43 54 5d 20 69 73 20 61 20 5b 56   SELECT] is a [V
31a10 41 4c 55 45 53 20 63 6c 61 75 73 65 5d 20 74 68  ALUES clause] th
31a20 65 6e 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75  en no LIMIT clau
31a30 73 65 0a 69 73 20 61 6c 6c 6f 77 65 64 2e 0a 0a  se.is allowed...
31a40 3c 70 3e 5e 41 6e 79 20 73 63 61 6c 61 72 20 65  <p>^Any scalar e
31a50 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65  xpression may be
31a60 20 75 73 65 64 20 69 6e 20 74 68 65 20 0a 4c 49   used in the .LI
31a70 4d 49 54 20 63 6c 61 75 73 65 2c 20 73 6f 20 6c  MIT clause, so l
31a80 6f 6e 67 20 61 73 20 69 74 20 65 76 61 6c 75 61  ong as it evalua
31a90 74 65 73 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  tes to an intege
31aa0 72 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61  r or a value tha
31ab0 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73  t can be.lossles
31ac0 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly converted to
31ad0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66   an integer. ^If
31ae0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
31af0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 4e  evaluates to a N
31b00 55 4c 4c 20 0a 76 61 6c 75 65 20 6f 72 20 61 6e  ULL .value or an
31b10 79 20 6f 74 68 65 72 20 76 61 6c 75 65 20 74 68  y other value th
31b20 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73  at cannot be los
31b30 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
31b40 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c  d to an integer,
31b50 20 61 6e 0a 65 72 72 6f 72 20 69 73 20 72 65 74   an.error is ret
31b60 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 20 4c  urned. ^If the L
31b70 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20  IMIT expression 
31b80 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e  evaluates to a n
31b90 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c 0a 74  egative value,.t
31ba0 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20  hen there is no 
31bb0 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74  upper bound on t
31bc0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
31bd0 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 4f 74 68  s returned. ^Oth
31be0 65 72 77 69 73 65 2c 20 74 68 65 0a 53 45 4c 45  erwise, the.SELE
31bf0 43 54 20 72 65 74 75 72 6e 73 20 74 68 65 20 66  CT returns the f
31c00 69 72 73 74 20 4e 20 72 6f 77 73 20 6f 66 20 69  irst N rows of i
31c10 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 6f 6e  ts result set on
31c20 6c 79 2c 20 77 68 65 72 65 20 4e 20 69 73 20 74  ly, where N is t
31c30 68 65 20 76 61 6c 75 65 0a 74 68 61 74 20 74 68  he value.that th
31c40 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  e LIMIT expressi
31c50 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 2e  on evaluates to.
31c60 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c   ^Or, if the SEL
31c70 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  ECT statement wo
31c80 75 6c 64 0a 72 65 74 75 72 6e 20 6c 65 73 73 20  uld.return less 
31c90 74 68 61 6e 20 4e 20 72 6f 77 73 20 77 69 74 68  than N rows with
31ca0 6f 75 74 20 61 20 4c 49 4d 49 54 20 63 6c 61 75  out a LIMIT clau
31cb0 73 65 2c 20 74 68 65 6e 20 74 68 65 20 65 6e 74  se, then the ent
31cc0 69 72 65 20 72 65 73 75 6c 74 20 73 65 74 20 69  ire result set i
31cd0 73 0a 72 65 74 75 72 6e 65 64 2e 20 0a 0a 3c 70  s.returned. ..<p
31ce0 3e 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  >^The expression
31cf0 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
31d00 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54   optional OFFSET
31d10 20 63 6c 61 75 73 65 20 74 68 61 74 20 6d 61 79   clause that may
31d20 20 66 6f 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54 20   follow a.LIMIT 
31d30 63 6c 61 75 73 65 20 6d 75 73 74 20 61 6c 73 6f  clause must also
31d40 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 6e 20   evaluate to an 
31d50 69 6e 74 65 67 65 72 2c 20 6f 72 20 61 20 76 61  integer, or a va
31d60 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 0a  lue that can be.
31d70 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65  losslessly conve
31d80 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
31d90 65 72 2e 20 5e 49 66 20 61 6e 20 65 78 70 72 65  er. ^If an expre
31da0 73 73 69 6f 6e 20 68 61 73 20 61 6e 20 4f 46 46  ssion has an OFF
31db0 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e  SET clause,.then
31dc0 20 74 68 65 20 66 69 72 73 74 20 4d 20 72 6f 77   the first M row
31dd0 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20 66 72  s are omitted fr
31de0 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  om the result se
31df0 74 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  t returned by th
31e00 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65  e SELECT.stateme
31e10 6e 74 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20  nt and the next 
31e20 4e 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72  N rows are retur
31e30 6e 65 64 2c 20 77 68 65 72 65 20 4d 20 61 6e 64  ned, where M and
31e40 20 4e 20 61 72 65 20 74 68 65 20 76 61 6c 75 65   N are the value
31e50 73 20 74 68 61 74 0a 74 68 65 20 4f 46 46 53 45  s that.the OFFSE
31e60 54 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75  T and LIMIT clau
31e70 73 65 73 20 65 76 61 6c 75 61 74 65 20 74 6f 2c  ses evaluate to,
31e80 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 5e   respectively. ^
31e90 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43  Or, if the SELEC
31ea0 54 0a 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6c  T.would return l
31eb0 65 73 73 20 74 68 61 6e 20 4d 2b 4e 20 72 6f 77  ess than M+N row
31ec0 73 20 69 66 20 69 74 20 64 69 64 20 6e 6f 74 20  s if it did not 
31ed0 68 61 76 65 20 61 20 4c 49 4d 49 54 20 63 6c 61  have a LIMIT cla
31ee0 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 66 69  use, then the.fi
31ef0 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20 73  rst M rows are s
31f00 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20 72  kipped and the r
31f10 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 28 69  emaining rows (i
31f20 66 20 61 6e 79 29 20 61 72 65 20 72 65 74 75 72  f any) are retur
31f30 6e 65 64 2e 20 5e 49 66 20 74 68 65 0a 4f 46 46  ned. ^If the.OFF
31f40 53 45 54 20 63 6c 61 75 73 65 20 65 76 61 6c 75  SET clause evalu
31f50 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74 69  ates to a negati
31f60 76 65 20 76 61 6c 75 65 2c 20 74 68 65 20 72 65  ve value, the re
31f70 73 75 6c 74 73 20 61 72 65 20 74 68 65 20 73 61  sults are the sa
31f80 6d 65 20 61 73 20 69 66 20 69 74 0a 68 61 64 20  me as if it.had 
31f90 65 76 61 6c 75 61 74 65 64 20 74 6f 20 7a 65 72  evaluated to zer
31fa0 6f 2e 0a 0a 3c 70 3e 5e 49 6e 73 74 65 61 64 20  o...<p>^Instead 
31fb0 6f 66 20 61 20 73 65 70 61 72 61 74 65 20 4f 46  of a separate OF
31fc0 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68 65  FSET clause, the
31fd0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 61   LIMIT clause ma
31fe0 79 20 73 70 65 63 69 66 79 20 74 77 6f 0a 73 63  y specify two.sc
31ff0 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 73  alar expressions
32000 20 73 65 70 61 72 61 74 65 64 20 62 79 20 61 20   separated by a 
32010 63 6f 6d 6d 61 2e 20 5e 49 6e 20 74 68 69 73 20  comma. ^In this 
32020 63 61 73 65 2c 20 74 68 65 20 66 69 72 73 74 20  case, the first 
32030 65 78 70 72 65 73 73 69 6f 6e 0a 69 73 20 75 73  expression.is us
32040 65 64 20 61 73 20 74 68 65 20 4f 46 46 53 45 54  ed as the OFFSET
32050 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
32060 74 68 65 20 73 65 63 6f 6e 64 20 61 73 20 74 68  the second as th
32070 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  e LIMIT expressi
32080 6f 6e 2e 0a 54 68 69 73 20 69 73 20 63 6f 75 6e  on..This is coun
32090 74 65 72 2d 69 6e 74 75 69 74 69 76 65 2c 20 61  ter-intuitive, a
320a0 73 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65  s when using the
320b0 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20 74   OFFSET clause t
320c0 68 65 20 73 65 63 6f 6e 64 20 6f 66 0a 74 68 65  he second of.the
320d0 20 74 77 6f 20 65 78 70 72 65 73 73 69 6f 6e 73   two expressions
320e0 20 69 73 20 74 68 65 20 4f 46 46 53 45 54 20 61   is the OFFSET a
320f0 6e 64 20 74 68 65 20 66 69 72 73 74 20 74 68 65  nd the first the
32100 20 4c 49 4d 49 54 2e 20 0a 54 68 69 73 20 72 65   LIMIT. .This re
32110 76 65 72 73 61 6c 20 6f 66 20 74 68 65 20 6f 66  versal of the of
32120 66 73 65 74 20 61 6e 64 20 6c 69 6d 69 74 20 69  fset and limit i
32130 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20  s intentional.- 
32140 69 74 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d  it maximizes com
32150 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
32160 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61  other SQL databa
32170 73 65 20 73 79 73 74 65 6d 73 2e 0a 48 6f 77 65  se systems..Howe
32180 76 65 72 2c 20 74 6f 20 61 76 6f 69 64 20 63 6f  ver, to avoid co
32190 6e 66 75 73 69 6f 6e 2c 20 70 72 6f 67 72 61 6d  nfusion, program
321a0 6d 65 72 73 20 61 72 65 20 73 74 72 6f 6e 67 6c  mers are strongl
321b0 79 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 20  y encouraged to 
321c0 75 73 65 0a 74 68 65 20 66 6f 72 6d 20 6f 66 20  use.the form of 
321d0 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  the LIMIT clause
321e0 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 22   that uses the "
321f0 4f 46 46 53 45 54 22 20 6b 65 79 77 6f 72 64 20  OFFSET" keyword 
32200 61 6e 64 20 61 76 6f 69 64 0a 75 73 69 6e 67 20  and avoid.using 
32210 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 77  a LIMIT clause w
32220 69 74 68 20 61 20 63 6f 6d 6d 61 2d 73 65 70 61  ith a comma-sepa
32230 72 61 74 65 64 20 6f 66 66 73 65 74 2e 0a 0a 3c  rated offset...<
32240 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
32250 76 61 6c 75 65 73 20 7b 56 41 4c 55 45 53 20 63  values {VALUES c
32260 6c 61 75 73 65 7d 20 56 41 4c 55 45 53 3c 2f 74  lause} VALUES</t
32270 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 56 41 4c 55  cl>.<h3>The VALU
32280 45 53 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a  ES clause</h3>..
32290 3c 70 3e 5e 28 54 68 65 20 70 68 72 61 73 65 20  <p>^(The phrase 
322a0 22 56 41 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d  "VALUES(<i>expr-
322b0 6c 69 73 74 3c 2f 69 3e 29 22 20 6d 65 61 6e 73  list</i>)" means
322c0 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 0a   the same thing.
322d0 61 73 20 22 53 45 4c 45 43 54 20 3c 69 3e 65 78  as "SELECT <i>ex
322e0 70 72 2d 6c 69 73 74 3c 2f 69 3e 22 2e 29 5e 20  pr-list</i>".)^ 
322f0 20 5e 28 54 68 65 20 70 68 72 61 73 65 0a 22 56   ^(The phrase."V
32300 41 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69  ALUES(<i>expr-li
32310 73 74 2d 31 3c 2f 69 3e 29 2c 2e 2e 2e 2c 28 3c  st-1</i>),...,(<
32320 69 3e 65 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69  i>expr-list-N</i
32330 3e 29 22 20 6d 65 61 6e 73 20 74 68 65 20 73 61  >)" means the sa
32340 6d 65 0a 74 68 69 6e 67 20 61 73 20 22 53 45 4c  me.thing as "SEL
32350 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74  ECT <i>expr-list
32360 2d 31 3c 2f 69 3e 20 55 4e 49 4f 4e 20 41 4c 4c  -1</i> UNION ALL
32370 20 2e 2e 2e 20 55 4e 49 4f 4e 20 41 4c 4c 0a 53   ... UNION ALL.S
32380 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69  ELECT <i>expr-li
32390 73 74 2d 4e 3c 2f 69 3e 22 2e 29 5e 20 20 42 6f  st-N</i>".)^  Bo
323a0 74 68 20 66 6f 72 6d 73 20 61 72 65 20 74 68 65  th forms are the
323b0 20 73 61 6d 65 2c 20 65 78 63 65 70 74 20 74 68   same, except th
323c0 61 74 0a 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  at.the number of
323d0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
323e0 74 73 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ts in a compound
323f0 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79 0a 5b   is limited by.[
32400 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4d  SQLITE_LIMIT_COM
32410 50 4f 55 4e 44 5f 53 45 4c 45 43 54 5d 20 77 68  POUND_SELECT] wh
32420 65 72 65 61 73 20 74 68 65 20 6e 75 6d 62 65 72  ereas the number
32430 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 56 41   of rows in a.VA
32440 4c 55 45 53 20 63 6c 61 75 73 65 20 68 61 73 20  LUES clause has 
32450 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d  no arbitrary lim
32460 69 74 2e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  it...<p>There ar
32470 65 20 73 6f 6d 65 20 72 65 73 74 72 69 63 74 69  e some restricti
32480 6f 6e 73 20 6f 6e 20 74 68 65 20 75 73 65 20 6f  ons on the use o
32490 66 20 61 20 56 41 4c 55 45 53 20 63 6c 61 75 73  f a VALUES claus
324a0 65 20 74 68 61 74 20 61 72 65 0a 6e 6f 74 20 73  e that are.not s
324b0 68 6f 77 6e 20 6f 6e 20 74 68 65 20 73 79 6e 74  hown on the synt
324c0 61 78 20 64 69 61 67 72 61 6d 73 3a 0a 0a 3c 75  ax diagrams:..<u
324d0 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41  l>.<li><p>.^A VA
324e0 4c 55 45 53 20 63 6c 61 75 73 65 20 63 61 6e 6e  LUES clause cann
324f0 6f 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  ot be followed b
32500 79 20 5b 4f 52 44 45 52 20 42 59 5d 2e 0a 0a 3c  y [ORDER BY]...<
32510 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55 45 53  li><p>.^A VALUES
32520 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62   clause cannot b
32530 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4c  e followed by [L
32540 49 4d 49 54 5d 2e 0a 3c 2f 75 6c 3e 0a 0a 0a 3c  IMIT]..</ul>...<
32550 68 33 3e 54 68 65 20 57 49 54 48 20 43 6c 61 75  h3>The WITH Clau
32560 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 53 45 4c  se</h3>..<p>^SEL
32570 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6d  ECT statements m
32580 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79  ay be optionally
32590 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20 73   preceded by a s
325a0 69 6e 67 6c 65 0a 5b 57 49 54 48 20 63 6c 61 75  ingle.[WITH clau
325b0 73 65 5d 20 74 68 61 74 20 64 65 66 69 6e 65 73  se] that defines
325c0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f   one or more [co
325d0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
325e0 73 73 69 6f 6e 73 5d 0a 66 6f 72 20 75 73 65 20  ssions].for use 
325f0 77 69 74 68 69 6e 20 74 68 65 20 53 45 4c 45 43  within the SELEC
32600 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 74  T statement...<t
32610 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74  cl>hd_fragment t
32620 61 62 66 75 6e 63 31 20 7b 74 61 62 6c 65 2d 76  abfunc1 {table-v
32630 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e 73 20  alued functions 
32640 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
32650 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 61  se}</tcl>.<h3>Ta
32660 62 6c 65 2d 76 61 6c 75 65 64 20 46 75 6e 63 74  ble-valued Funct
32670 69 6f 6e 73 20 49 6e 20 54 68 65 20 46 52 4f 4d  ions In The FROM
32680 20 43 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70   Clause</h3>..<p
32690 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  >A [virtual tabl
326a0 65 5d 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  e] that contains
326b0 20 5b 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73   [hidden columns
326c0 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20 6c 69  ] can be used li
326d0 6b 65 0a 61 20 5b 74 61 62 6c 65 2d 76 61 6c 75  ke.a [table-valu
326e0 65 64 20 66 75 6e 63 74 69 6f 6e 5d 20 69 6e 20  ed function] in 
326f0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e  the FROM clause.
32700 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20    The arguments 
32710 74 6f 20 74 68 65 0a 74 61 62 6c 65 2d 76 61 6c  to the.table-val
32720 75 65 64 20 66 75 6e 63 74 69 6f 6e 20 62 65 63  ued function bec
32730 6f 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ome constraints 
32740 6f 6e 20 74 68 65 20 48 49 44 44 45 4e 20 63 6f  on the HIDDEN co
32750 6c 75 6d 6e 73 20 6f 66 0a 74 68 65 20 76 69 72  lumns of.the vir
32760 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 41 64 64  tual table.  Add
32770 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
32780 69 6f 6e 20 63 61 6e 20 62 65 20 66 6f 75 6e 64  ion can be found
32790 20 69 6e 20 74 68 65 0a 5b 74 61 62 6c 65 2d 76   in the.[table-v
327a0 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e 73 7c  alued functions|
327b0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 6f  virtual table do
327c0 63 75 6d 65 6e 74 61 74 69 6f 6e 5d 2e 0a 0a 3c  cumentation]...<
327d0 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
327e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
327f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32820 23 23 23 0a 53 65 63 74 69 6f 6e 20 55 50 44 41  ###.Section UPDA
32830 54 45 20 75 70 64 61 74 65 20 7b 55 50 44 41 54  TE update {UPDAT
32840 45 20 2a 55 50 44 41 54 45 73 7d 0a 0a 52 65 63  E *UPDATEs}..Rec
32850 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
32860 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 0a  ram update-stmt.
32870 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55  </tcl>..<p>^An U
32880 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
32890 69 73 20 75 73 65 64 20 74 6f 20 6d 6f 64 69 66  is used to modif
328a0 79 20 61 20 73 75 62 73 65 74 20 6f 66 20 74 68  y a subset of th
328b0 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20  e values stored 
328c0 69 6e 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  in .zero or more
328d0 20 72 6f 77 73 20 6f 66 20 74 68 65 20 64 61 74   rows of the dat
328e0 61 62 61 73 65 20 74 61 62 6c 65 20 69 64 65 6e  abase table iden
328f0 74 69 66 69 65 64 20 62 79 20 74 68 65 20 0a 5b  tified by the .[
32900 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d  qualified-table-
32910 6e 61 6d 65 5d 20 73 70 65 63 69 66 69 65 64 20  name] specified 
32920 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 55  as part of the U
32930 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
32940 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44  ..<p>^If the UPD
32950 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 64 6f  ATE statement do
32960 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20 57 48  es not have a WH
32970 45 52 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20  ERE clause, all 
32980 72 6f 77 73 20 69 6e 20 74 68 65 0a 74 61 62 6c  rows in the.tabl
32990 65 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 62  e are modified b
329a0 79 20 74 68 65 20 55 50 44 41 54 45 2e 20 5e 4f  y the UPDATE. ^O
329b0 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 55 50  therwise, the UP
329c0 44 41 54 45 20 61 66 66 65 63 74 73 20 6f 6e 6c  DATE affects onl
329d0 79 20 74 68 6f 73 65 0a 72 6f 77 73 20 66 6f 72  y those.rows for
329e0 20 77 68 69 63 68 20 74 68 65 20 57 48 45 52 45   which the WHERE
329f0 20 63 6c 61 75 73 65 0a 5b 62 6f 6f 6c 65 61 6e   clause.[boolean
32a00 20 65 78 70 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c   expression|bool
32a10 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ean expression i
32a20 73 20 74 72 75 65 5d 2e 20 5e 49 74 20 69 73 20  s true]. ^It is 
32a30 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 69 66 20  not an error if 
32a40 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65  the.WHERE clause
32a50 20 64 6f 65 73 20 6e 6f 74 20 65 76 61 6c 75 61   does not evalua
32a60 74 65 20 74 6f 20 74 72 75 65 20 66 6f 72 20 61  te to true for a
32a70 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 20 74 61  ny row in the ta
32a80 62 6c 65 20 2d 20 74 68 69 73 20 6a 75 73 74 0a  ble - this just.
32a90 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 55  means that the U
32aa0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
32ab0 61 66 66 65 63 74 73 20 7a 65 72 6f 20 72 6f 77  affects zero row
32ac0 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64 69 66  s...<p>The modif
32ad0 69 63 61 74 69 6f 6e 73 20 6d 61 64 65 20 74 6f  ications made to
32ae0 20 65 61 63 68 20 72 6f 77 20 61 66 66 65 63 74   each row affect
32af0 65 64 20 62 79 20 61 6e 20 55 50 44 41 54 45 20  ed by an UPDATE 
32b00 73 74 61 74 65 6d 65 6e 74 20 61 72 65 0a 64 65  statement are.de
32b10 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
32b20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65  list of assignme
32b30 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  nts following th
32b40 65 20 53 45 54 20 6b 65 79 77 6f 72 64 2e 20 45  e SET keyword. E
32b50 61 63 68 0a 61 73 73 69 67 6e 6d 65 6e 74 20 73  ach.assignment s
32b60 70 65 63 69 66 69 65 73 20 61 20 3c 79 79 74 65  pecifies a <yyte
32b70 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f  rm>column-name</
32b80 79 79 74 65 72 6d 3e 20 74 6f 20 74 68 65 20 6c  yyterm> to the l
32b90 65 66 74 20 6f 66 20 74 68 65 20 0a 65 71 75 61  eft of the .equa
32ba0 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 20 73 63  ls sign and a sc
32bb0 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 20  alar expression 
32bc0 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20 0a 5e  to the right. .^
32bd0 46 6f 72 20 65 61 63 68 20 61 66 66 65 63 74 65  For each affecte
32be0 64 20 72 6f 77 2c 20 74 68 65 20 6e 61 6d 65 64  d row, the named
32bf0 20 63 6f 6c 75 6d 6e 73 0a 61 72 65 20 73 65 74   columns.are set
32c00 20 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20 66   to the values f
32c10 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69  ound by evaluati
32c20 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
32c30 64 69 6e 67 20 73 63 61 6c 61 72 20 0a 65 78 70  ding scalar .exp
32c40 72 65 73 73 69 6f 6e 73 2e 20 5e 49 66 20 61 20  ressions. ^If a 
32c50 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61  single column-na
32c60 6d 65 20 61 70 70 65 61 72 73 20 6d 6f 72 65 20  me appears more 
32c70 74 68 61 6e 20 6f 6e 63 65 20 69 6e 20 74 68 65  than once in the
32c80 20 6c 69 73 74 20 6f 66 0a 61 73 73 69 67 6e 6d   list of.assignm
32c90 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  ent expressions,
32ca0 20 61 6c 6c 20 62 75 74 20 74 68 65 20 72 69 67   all but the rig
32cb0 68 74 6d 6f 73 74 20 6f 63 63 75 72 72 65 6e 63  htmost occurrenc
32cc0 65 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43  e is ignored. ^C
32cd0 6f 6c 75 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e  olumns.that do n
32ce0 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  ot appear in the
32cf0 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d   list of assignm
32d00 65 6e 74 73 20 61 72 65 20 6c 65 66 74 20 75 6e  ents are left un
32d10 6d 6f 64 69 66 69 65 64 2e 20 5e 54 68 65 20 73  modified. ^The s
32d20 63 61 6c 61 72 0a 65 78 70 72 65 73 73 69 6f 6e  calar.expression
32d30 73 20 6d 61 79 20 72 65 66 65 72 20 74 6f 20 63  s may refer to c
32d40 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f  olumns of the ro
32d50 77 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 2e  w being updated.
32d60 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 20 61   ^In this case a
32d70 6c 6c 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73  ll.scalar expres
32d80 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61  sions are evalua
32d90 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61  ted before any a
32da0 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d  ssignments are m
32db0 61 64 65 2e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69  ade...<p>Beginni
32dc0 6e 67 20 69 6e 20 53 51 4c 69 74 65 20 5b 76 65  ng in SQLite [ve
32dd0 72 73 69 6f 6e 20 33 2e 31 35 2e 30 5d 20 28 5b  rsion 3.15.0] ([
32de0 64 61 74 65 6f 66 3a 33 2e 31 35 2e 30 5d 29 2c  dateof:3.15.0]),
32df0 20 61 6e 20 61 73 73 69 67 6e 6d 65 6e 74 20 69   an assignment i
32e00 6e 0a 74 68 65 20 53 45 54 20 63 6c 61 75 73 65  n.the SET clause
32e10 20 63 61 6e 20 62 65 20 61 20 0a 5b 63 6f 6c 75   can be a .[colu
32e20 6d 6e 2d 6e 61 6d 65 2d 6c 69 73 74 7c 70 61 72  mn-name-list|par
32e30 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20  enthesized list 
32e40 6f 66 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 5d  of column names]
32e50 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 61 6e 64   on the left and
32e60 20 61 0a 5b 72 6f 77 20 76 61 6c 75 65 5d 20 6f   a.[row value] o
32e70 66 20 74 68 65 20 73 61 6d 65 20 73 69 7a 65 20  f the same size 
32e80 6f 6e 20 74 68 65 20 72 69 67 68 74 2e 0a 0a 0a  on the right....
32e90 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  <p>^The optional
32ea0 20 22 4f 52 20 3c 69 3e 61 63 74 69 6f 6e 3c 2f   "OR <i>action</
32eb0 69 3e 22 20 63 6f 6e 66 6c 69 63 74 20 63 6c 61  i>" conflict cla
32ec0 75 73 65 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73  use that follows
32ed0 20 74 68 65 0a 55 50 44 41 54 45 20 6b 65 79 77   the.UPDATE keyw
32ee0 6f 72 64 20 61 6c 6c 6f 77 73 20 74 68 65 20 75  ord allows the u
32ef0 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74 65 20  ser to nominate 
32f00 61 20 73 70 65 63 69 66 69 63 0a 63 6f 6e 73 74  a specific.const
32f10 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72  raint conflict r
32f20 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
32f30 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e  thm to use durin
32f40 67 20 74 68 69 73 20 6f 6e 65 20 55 50 44 41 54  g this one UPDAT
32f50 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65 72  E command..Refer
32f60 20 74 6f 20 74 68 65 20 73 65 63 74 69 6f 6e 20   to the section 
32f70 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e  entitled [ON CON
32f80 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74  FLICT] for addit
32f90 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
32fa0 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74  n...<h3>Restrict
32fb0 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45 20 53  ions on UPDATE S
32fc0 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
32fd0 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c   CREATE TRIGGER<
32fe0 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h3>..<p>The fol
32ff0 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61  lowing additiona
33000 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72 69 63  l syntax restric
33010 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 55  tions apply to U
33020 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73  PDATE statements
33030 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69 74 68   that.occur with
33040 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61  in the body of a
33050 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
33060 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 0a  ] statement.  ..
33070 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54  <ul>.  <li><p>^T
33080 68 65 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65  he <yyterm>table
33090 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 73  -name</yyterm> s
330a0 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
330b0 20 6f 66 20 61 6e 20 55 50 44 41 54 45 20 0a 20   of an UPDATE . 
330c0 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 20 77       statement w
330d0 69 74 68 69 6e 0a 20 20 20 20 20 20 61 20 74 72  ithin.      a tr
330e0 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73 74 20  igger body must 
330f0 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20  be unqualified. 
33100 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  ^(In other words
33110 2c 20 74 68 65 0a 20 20 20 20 20 20 3c 69 3e 73  , the.      <i>s
33120 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62  chema-name</i><b
33130 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e  >.</b> prefix on
33140 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20   the table name 
33150 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 69 73  of the UPDATE is
33160 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c 6c 6f 77  .      not allow
33170 65 64 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ed within trigge
33180 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73 20 74 68  rs.)^ ^Unless th
33190 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68  e table to which
331a0 20 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20   the trigger.   
331b0 20 20 20 69 73 20 61 74 74 61 63 68 65 64 20 69     is attached i
331c0 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61  s in the TEMP da
331d0 74 61 62 61 73 65 2c 20 74 68 65 20 74 61 62 6c  tabase, the tabl
331e0 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 20  e being updated 
331f0 62 79 20 74 68 65 0a 20 20 20 20 20 20 74 72 69  by the.      tri
33200 67 67 65 72 20 70 72 6f 67 72 61 6d 20 6d 75 73  gger program mus
33210 74 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20  t reside in the 
33220 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73  same database as
33230 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62   it. ^If the tab
33240 6c 65 0a 20 20 20 20 20 20 74 6f 20 77 68 69 63  le.      to whic
33250 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  h the trigger is
33260 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e 20   attached is in 
33270 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
33280 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20 20  e, then the.    
33290 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61    unqualified na
332a0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
332b0 62 65 69 6e 67 20 75 70 64 61 74 65 64 20 69 73  being updated is
332c0 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65   resolved in the
332d0 20 73 61 6d 65 20 77 61 79 0a 20 20 20 20 20 20   same way.      
332e0 61 73 20 69 74 20 69 73 20 66 6f 72 20 61 20 74  as it is for a t
332f0 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65  op-level stateme
33300 6e 74 20 28 62 79 20 73 65 61 72 63 68 69 6e 67  nt (by searching
33310 20 66 69 72 73 74 20 74 68 65 20 54 45 4d 50 20   first the TEMP 
33320 64 61 74 61 62 61 73 65 2c 0a 20 20 20 20 20 20  database,.      
33330 74 68 65 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  then the main da
33340 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79  tabase, then any
33350 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73   other databases
33360 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68   in the order th
33370 65 79 20 77 65 72 65 0a 20 20 20 20 20 20 61 74  ey were.      at
33380 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e  tached)...  <li>
33390 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20  <p>^The INDEXED 
333a0 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58  BY and NOT INDEX
333b0 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e  ED clauses are n
333c0 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50  ot allowed on UP
333d0 44 41 54 45 0a 20 20 20 20 20 20 73 74 61 74 65  DATE.      state
333e0 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
333f0 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c  ggers.</p>..  <l
33400 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  i><p>^The LIMIT 
33410 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
33420 75 73 65 73 20 66 6f 72 20 55 50 44 41 54 45 20  uses for UPDATE 
33430 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20  are unsupported 
33440 77 69 74 68 69 6e 0a 20 20 20 20 20 20 74 72 69  within.      tri
33450 67 67 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73  ggers, regardles
33460 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 61  s of the compila
33470 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 75 73 65  tion options use
33480 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74  d to build SQLit
33490 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70  e..</ul>..<h3>Op
334a0 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64  tional LIMIT and
334b0 20 4f 52 44 45 52 20 42 59 20 43 6c 61 75 73 65   ORDER BY Clause
334c0 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20  s</h3>..<p>^(If 
334d0 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 20  SQLite is built 
334e0 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45  with the [SQLITE
334f0 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
33500 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d  ELETE_LIMIT].com
33510 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
33520 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78   then the syntax
33530 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
33540 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 74 65  tatement is exte
33550 6e 64 65 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e  nded.with option
33560 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  al ORDER BY and 
33570 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 29 5e 20  LIMIT clauses)^ 
33580 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as follows:</p>.
33590 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
335a0 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 2d  ram update-stmt-
335b0 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c  limited</tcl>..<
335c0 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20  p>^If an UPDATE 
335d0 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20  statement has a 
335e0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
335f0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
33600 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69   of rows that.wi
33610 6c 6c 20 62 65 20 75 70 64 61 74 65 64 20 69 73  ll be updated is
33620 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61   found by evalua
33630 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61  ting the accompa
33640 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nying expression
33650 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20   and casting.it 
33660 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  to an integer va
33670 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74 69 76 65  lue. ^A negative
33680 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72 70   value is interp
33690 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d  reted as "no lim
336a0 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  it"...<p>^If the
336b0 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
336c0 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6e  n evaluates to n
336d0 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75  on-negative valu
336e0 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74  e <i>N</i> and t
336f0 68 65 0a 55 50 44 41 54 45 20 73 74 61 74 65 6d  he.UPDATE statem
33700 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44 45 52  ent has an ORDER
33710 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
33720 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 20 77   all rows that w
33730 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65 64 20  ould be updated 
33740 69 6e 0a 74 68 65 20 61 62 73 65 6e 63 65 20 6f  in.the absence o
33750 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  f the LIMIT clau
33760 73 65 20 61 72 65 20 73 6f 72 74 65 64 20 61 63  se are sorted ac
33770 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 4f  cording to the O
33780 52 44 45 52 20 42 59 20 61 6e 64 20 74 68 65 0a  RDER BY and the.
33790 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75  first <i>N</i> u
337a0 70 64 61 74 65 64 2e 20 5e 28 49 66 20 74 68 65  pdated. ^(If the
337b0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
337c0 74 20 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46  t also has an OF
337d0 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65  FSET clause,.the
337e0 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c  n it is similarl
337f0 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20  y evaluated and 
33800 63 61 73 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  cast to an integ
33810 65 72 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  er value. If the
33820 20 4f 46 46 53 45 54 0a 65 78 70 72 65 73 73 69   OFFSET.expressi
33830 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
33840 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76  a non-negative v
33850 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74  alue <i>M</i>, t
33860 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 3c 69  hen the first <i
33870 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61 72 65 20  >M</i>.rows are 
33880 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20  skipped and the 
33890 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f  following <i>N</
338a0 69 3e 20 72 6f 77 73 20 75 70 64 61 74 65 64 20  i> rows updated 
338b0 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e  instead.)^..<p>^
338c0 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  If the UPDATE st
338d0 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f  atement has no O
338e0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
338f0 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68  then all rows th
33900 61 74 0a 77 6f 75 6c 64 20 62 65 20 75 70 64 61  at.would be upda
33910 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e  ted in the absen
33920 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ce of the LIMIT 
33930 63 6c 61 75 73 65 20 61 72 65 20 61 73 73 65 6d  clause are assem
33940 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74  bled in an.arbit
33950 72 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72  rary order befor
33960 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c  e applying the L
33970 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20  IMIT and OFFSET 
33980 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65 72  clauses to deter
33990 6d 69 6e 65 20 0a 77 68 69 63 68 20 61 72 65 20  mine .which are 
339a0 61 63 74 75 61 6c 6c 79 20 75 70 64 61 74 65 64  actually updated
339b0 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45  ...<p>^(The ORDE
339c0 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61  R BY clause on a
339d0 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
339e0 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  nt is used only 
339f0 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  to determine whi
33a00 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74  ch.rows fall wit
33a10 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54  hin the LIMIT. T
33a20 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
33a30 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64 69 66  h rows are modif
33a40 69 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79  ied is arbitrary
33a50 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c  .and is not infl
33a60 75 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52  uenced by the OR
33a70 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e  DER BY clause.)^
33a80 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
33a90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33aa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33ab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33ad0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 56  ######.Section V
33ae0 41 43 55 55 4d 20 76 61 63 75 75 6d 20 56 41 43  ACUUM vacuum VAC
33af0 55 55 4d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  UUM..RecursiveBu
33b00 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61 63 75  bbleDiagram vacu
33b10 75 6d 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  um-stmt.</tcl>..
33b20 3c 70 3e 0a 20 20 54 68 65 20 56 41 43 55 55 4d  <p>.  The VACUUM
33b30 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69 6c 64   command rebuild
33b40 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
33b50 69 6c 65 2c 20 72 65 70 61 63 6b 69 6e 67 20 69  ile, repacking i
33b60 74 20 69 6e 74 6f 20 61 20 6d 69 6e 69 6d 61 6c  t into a minimal
33b70 0a 20 20 61 6d 6f 75 6e 74 20 6f 66 20 64 69 73  .  amount of dis
33b80 6b 20 73 70 61 63 65 2e 20 54 68 65 72 65 20 61  k space. There a
33b90 72 65 20 73 65 76 65 72 61 6c 20 0a 20 20 72 65  re several .  re
33ba0 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69 63 61  asons an applica
33bb0 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20 74 68  tion might do th
33bc0 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  is:..<ul>.  <li>
33bd0 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c   <p> ^Unless SQL
33be0 69 74 65 20 69 73 20 72 75 6e 6e 69 6e 67 20 69  ite is running i
33bf0 6e 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46  n "auto_vacuum=F
33c00 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20  ULL" mode, when 
33c10 61 20 6c 61 72 67 65 0a 20 20 20 20 20 61 6d 6f  a large.     amo
33c20 75 6e 74 20 6f 66 20 64 61 74 61 20 69 73 20 64  unt of data is d
33c30 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20  eleted from the 
33c40 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 74  database file it
33c50 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65   leaves behind e
33c60 6d 70 74 79 0a 20 20 20 20 20 73 70 61 63 65 2c  mpty.     space,
33c70 20 6f 72 20 22 66 72 65 65 22 20 64 61 74 61 62   or "free" datab
33c80 61 73 65 20 70 61 67 65 73 2e 20 54 68 69 73 20  ase pages. This 
33c90 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
33ca0 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 20 20  se file might.  
33cb0 20 20 20 62 65 20 6c 61 72 67 65 72 20 74 68 61     be larger tha
33cc0 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65 73  n strictly neces
33cd0 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56  sary. ^Running V
33ce0 41 43 55 55 4d 20 74 6f 20 72 65 62 75 69 6c 64  ACUUM to rebuild
33cf0 20 74 68 65 20 0a 20 20 20 20 20 64 61 74 61 62   the .     datab
33d00 61 73 65 20 72 65 63 6c 61 69 6d 73 20 74 68 69  ase reclaims thi
33d10 73 20 73 70 61 63 65 20 61 6e 64 20 72 65 64 75  s space and redu
33d20 63 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ces the size of 
33d30 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
33d40 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e  e...  <li> <p> ^
33d50 46 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74 73  Frequent inserts
33d60 2c 20 75 70 64 61 74 65 73 2c 20 61 6e 64 20 64  , updates, and d
33d70 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73 65  eletes can cause
33d80 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
33d90 6c 65 0a 20 20 20 20 20 74 6f 20 62 65 63 6f 6d  le.     to becom
33da0 65 20 66 72 61 67 6d 65 6e 74 65 64 20 2d 20 77  e fragmented - w
33db0 68 65 72 65 20 64 61 74 61 20 66 6f 72 20 61 20  here data for a 
33dc0 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20  single table or 
33dd0 69 6e 64 65 78 20 69 73 20 73 63 61 74 74 65 72  index is scatter
33de0 65 64 20 0a 20 20 20 20 20 61 72 6f 75 6e 64 20  ed .     around 
33df0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
33e00 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55  e. ^Running VACU
33e10 55 4d 20 65 6e 73 75 72 65 73 20 74 68 61 74 20  UM ensures that 
33e20 65 61 63 68 20 74 61 62 6c 65 20 61 6e 64 0a 20  each table and. 
33e30 20 20 20 20 69 6e 64 65 78 20 69 73 20 6c 61 72      index is lar
33e40 67 65 6c 79 20 73 74 6f 72 65 64 20 63 6f 6e 74  gely stored cont
33e50 69 67 75 6f 75 73 6c 79 20 77 69 74 68 69 6e 20  iguously within 
33e60 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
33e70 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20  e. ^In some.    
33e80 20 63 61 73 65 73 2c 20 56 41 43 55 55 4d 20 6d   cases, VACUUM m
33e90 61 79 20 61 6c 73 6f 20 72 65 64 75 63 65 20 74  ay also reduce t
33ea0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 72  he number of par
33eb0 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61  tially filled pa
33ec0 67 65 73 20 69 6e 0a 20 20 20 20 20 74 68 65 20  ges in.     the 
33ed0 64 61 74 61 62 61 73 65 2c 20 72 65 64 75 63 69  database, reduci
33ee0 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ng the size of t
33ef0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
33f00 20 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69   further...  <li
33f10 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c  > <p> ^Normally,
33f20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 5b 70   the database [p
33f30 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68  age_size] and wh
33f40 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
33f50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 73   database.     s
33f60 75 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61  upports [auto_va
33f70 63 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f  cuum] must be co
33f80 6e 66 69 67 75 72 65 64 20 62 65 66 6f 72 65 20  nfigured before 
33f90 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
33fa0 65 20 69 73 0a 20 20 20 20 20 61 63 74 75 61 6c  e is.     actual
33fb0 6c 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f 77  ly created. ^How
33fc0 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69  ever, when not i
33fd0 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  n [write-ahead l
33fe0 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20  og] mode, the . 
33ff0 20 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20      [page_size] 
34000 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63  and/or [auto_vac
34010 75 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73 20  uum] properties 
34020 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  of an existing d
34030 61 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a 20  atabase may be. 
34040 20 20 20 20 63 68 61 6e 67 65 64 20 62 79 20 75      changed by u
34050 73 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73  sing the [page_s
34060 69 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65 5f  ize pragma|page_
34070 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20  size]  and/or . 
34080 20 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d      [auto_vacuum
34090 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63  |pragma auto_vac
340a0 75 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e 64  uum] pragmas and
340b0 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c   then immediatel
340c0 79 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20 20  y VACUUMing.    
340d0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 5e   the database. ^
340e0 57 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61  When in [write-a
340f0 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20  head log] mode, 
34100 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f 76  only the [auto_v
34110 61 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70 70  acuum].     supp
34120 6f 72 74 20 70 72 6f 70 65 72 74 79 20 63 61 6e  ort property can
34130 20 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e   be changed usin
34140 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a  g VACUUM..</ul>.
34150 0a 3c 70 3e 5e 42 79 20 64 65 66 61 75 6c 74 2c  .<p>^By default,
34160 20 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72   VACUUM only wor
34170 6b 73 20 6f 6e 6c 79 20 6f 6e 20 74 68 65 20 6d  ks only on the m
34180 61 69 6e 20 64 61 74 61 62 61 73 65 2e 0a 5e 5b  ain database..^[
34190 41 54 54 41 43 48 7c 41 74 74 61 63 68 65 64 20  ATTACH|Attached 
341a0 64 61 74 61 62 61 73 65 73 5d 20 63 61 6e 20 62  databases] can b
341b0 65 20 76 61 63 75 75 6d 65 64 20 62 79 20 61 70  e vacuumed by ap
341c0 70 65 6e 64 69 6e 67 20 74 68 65 20 61 70 70 72  pending the appr
341d0 6f 70 72 69 61 74 65 0a 3c 79 79 74 65 72 6d 3e  opriate.<yyterm>
341e0 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74  schema-name</yyt
341f0 65 72 6d 3e 20 74 6f 20 74 68 65 20 56 41 43 55  erm> to the VACU
34200 55 4d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  UM statement...<
34210 70 3e 3c 62 3e 43 6f 6d 70 61 74 69 62 69 6c 69  p><b>Compatibili
34220 74 79 20 57 61 72 6e 69 6e 67 3a 3c 2f 62 3e 20  ty Warning:</b> 
34230 54 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 76  The ability to v
34240 61 63 75 75 6d 20 61 74 74 61 63 68 65 64 20 64  acuum attached d
34250 61 74 61 62 61 73 65 73 20 77 61 73 0a 61 64 64  atabases was.add
34260 65 64 20 69 6e 20 5b 76 65 72 73 69 6f 6e 20 33  ed in [version 3
34270 2e 31 35 2e 30 5d 20 28 5b 64 61 74 65 6f 66 3a  .15.0] ([dateof:
34280 33 2e 31 35 2e 30 5d 29 2e 20 20 50 72 69 6f 72  3.15.0]).  Prior
34290 20 74 6f 20 74 68 61 74 2c 20 61 20 0a 3c 79 79   to that, a .<yy
342a0 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
342b0 3c 2f 79 79 74 65 72 6d 3e 20 61 64 64 65 64 20  </yyterm> added 
342c0 74 6f 20 74 68 65 0a 56 41 43 55 55 4d 20 73 74  to the.VACUUM st
342d0 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 62 65  atement would be
342e0 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65   silently ignore
342f0 64 20 61 6e 64 20 74 68 65 20 22 6d 61 69 6e 22  d and the "main"
34300 20 73 63 68 65 6d 61 20 77 6f 75 6c 64 20 62 65   schema would be
34310 0a 76 61 63 75 75 6d 65 64 2e 3c 2f 70 3e 0a 0a  .vacuumed.</p>..
34320 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
34330 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 62 79 20  ommand works by 
34340 63 6f 70 79 69 6e 67 20 74 68 65 20 63 6f 6e 74  copying the cont
34350 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61  ents of the data
34360 62 61 73 65 20 69 6e 74 6f 0a 61 20 74 65 6d 70  base into.a temp
34370 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20 66  orary database f
34380 69 6c 65 20 61 6e 64 20 74 68 65 6e 20 6f 76 65  ile and then ove
34390 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69  rwriting the ori
343a0 67 69 6e 61 6c 20 77 69 74 68 20 74 68 65 20 0a  ginal with the .
343b0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
343c0 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 2e 20  temporary file. 
343d0 5e 57 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e  ^When overwritin
343e0 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 2c 20  g the original, 
343f0 61 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e  a rollback.journ
34400 61 6c 20 6f 72 20 5b 77 72 69 74 65 2d 61 68 65  al or [write-ahe
34410 61 64 20 6c 6f 67 5d 20 57 41 4c 20 66 69 6c 65  ad log] WAL file
34420 20 69 73 20 75 73 65 64 20 6a 75 73 74 20 61 73   is used just as
34430 20 69 74 20 77 6f 75 6c 64 20 62 65 20 66 6f 72   it would be for
34440 20 61 6e 79 0a 6f 74 68 65 72 20 64 61 74 61 62   any.other datab
34450 61 73 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ase transaction.
34460 20 5e 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61   ^This means tha
34470 74 20 77 68 65 6e 20 56 41 43 55 55 4d 69 6e 67  t when VACUUMing
34480 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a 61 73   a database, .as
34490 20 6d 75 63 68 20 61 73 20 74 77 69 63 65 20 74   much as twice t
344a0 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6f  he size of the o
344b0 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65  riginal database
344c0 20 66 69 6c 65 20 69 73 20 72 65 71 75 69 72 65   file is require
344d0 64 20 69 6e 20 66 72 65 65 0a 64 69 73 6b 20 73  d in free.disk s
344e0 70 61 63 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 56  pace...<p>^The V
344f0 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61  ACUUM command ma
34500 79 20 63 68 61 6e 67 65 20 74 68 65 20 5b 52 4f  y change the [RO
34510 57 49 44 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66  WID | ROWIDs] of
34520 20 65 6e 74 72 69 65 73 20 69 6e 20 61 6e 79 0a   entries in any.
34530 74 61 62 6c 65 73 20 74 68 61 74 20 64 6f 20 6e  tables that do n
34540 6f 74 20 68 61 76 65 20 61 6e 20 65 78 70 6c 69  ot have an expli
34550 63 69 74 20 5b 49 4e 54 45 47 45 52 20 50 52 49  cit [INTEGER PRI
34560 4d 41 52 59 20 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a  MARY KEY]..</p>.
34570 0a 3c 70 3e 5e 41 20 56 41 43 55 55 4d 20 77 69  .<p>^A VACUUM wi
34580 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 72 65  ll fail if there
34590 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 72 61 6e   is an open tran
345a0 73 61 63 74 69 6f 6e 2c 20 6f 72 20 69 66 20 74  saction, or if t
345b0 68 65 72 65 20 61 72 65 20 6f 6e 65 20 6f 72 0a  here are one or.
345c0 6d 6f 72 65 20 61 63 74 69 76 65 20 53 51 4c 20  more active SQL 
345d0 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 20  statements when 
345e0 69 74 20 69 73 20 72 75 6e 2e 0a 0a 3c 70 3e 5e  it is run...<p>^
345f0 28 41 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20  (An alternative 
34600 74 6f 20 75 73 69 6e 67 20 74 68 65 20 56 41 43  to using the VAC
34610 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72  UUM command to.r
34620 65 63 6c 61 69 6d 20 73 70 61 63 65 20 61 66 74  eclaim space aft
34630 65 72 20 64 61 74 61 20 68 61 73 20 62 65 65 6e  er data has been
34640 20 64 65 6c 65 74 65 64 20 69 73 20 61 75 74 6f   deleted is auto
34650 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e  -vacuum mode, en
34660 61 62 6c 65 64 20 75 73 69 6e 67 0a 74 68 65 20  abled using.the 
34670 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72  [auto_vacuum] pr
34680 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61  agma.)^ ^When [a
34690 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73 20 65  uto_vacuum] is e
346a0 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74  nabled for a dat
346b0 61 62 61 73 65 0a 66 72 65 65 20 70 61 67 65 73  abase.free pages
346c0 20 6d 61 79 20 62 65 20 72 65 63 6c 61 69 6d 65   may be reclaime
346d0 64 20 61 66 74 65 72 20 64 65 6c 65 74 69 6e 67  d after deleting
346e0 20 64 61 74 61 2c 20 63 61 75 73 69 6e 67 20 74   data, causing t
346f0 68 65 20 66 69 6c 65 20 74 6f 20 73 68 72 69 6e  he file to shrin
34700 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65 62 75 69  k,.without rebui
34710 6c 64 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65  lding the entire
34720 20 64 61 74 61 62 61 73 65 20 75 73 69 6e 67 20   database using 
34730 56 41 43 55 55 4d 2e 20 20 5e 48 6f 77 65 76 65  VACUUM.  ^Howeve
34740 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f 5f 76  r, using.[auto_v
34750 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61 64 20  acuum] can lead 
34760 74 6f 20 65 78 74 72 61 20 64 61 74 61 62 61 73  to extra databas
34770 65 20 66 69 6c 65 20 66 72 61 67 6d 65 6e 74 61  e file fragmenta
34780 74 69 6f 6e 2e 20 20 5e 41 6e 64 20 5b 61 75 74  tion.  ^And [aut
34790 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e  o_vacuum].does n
347a0 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72 74 69  ot compact parti
347b0 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65  ally filled page
347c0 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
347d0 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f 65 73  e as VACUUM does
347e0 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a  ...</p>...<tcl>.
347f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
34840 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20  ection {INDEXED 
34850 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b 7b  BY} indexedby {{
34860 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54  INDEXED BY} {NOT
34870 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63   INDEXED}}..</tc
34880 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58  l>.<p>^The INDEX
34890 45 44 20 42 59 20 70 68 72 61 73 65 20 66 6f 72  ED BY phrase for
348a0 63 65 73 20 74 68 65 20 5b 53 51 4c 69 74 65 20  ces the [SQLite 
348b0 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 5d 20 74  query planner] t
348c0 6f 20 75 73 65 20 61 0a 70 61 72 74 69 63 75 6c  o use a.particul
348d0 61 72 20 6e 61 6d 65 64 20 69 6e 64 65 78 20 6f  ar named index o
348e0 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 53  n a [DELETE], [S
348f0 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50 44 41  ELECT], or [UPDA
34900 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54  TE] statement..T
34910 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
34920 72 61 73 65 20 69 73 20 61 6e 20 53 51 4c 69 74  rase is an SQLit
34930 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 6e 64 0a  e extension and.
34940 69 73 20 6e 6f 74 20 70 6f 72 74 61 62 6c 65 20  is not portable 
34950 74 6f 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74  to other SQL dat
34960 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e 3c 2f  abase engines.</
34970 70 3e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73  p>..<tcl>.Recurs
34980 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
34990 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65   qualified-table
349a0 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -name.</tcl>..<p
349b0 3e 5e 54 68 65 20 22 49 4e 44 45 58 45 44 20 42  >^The "INDEXED B
349c0 59 20 3c 79 79 74 65 72 6d 3e 69 6e 64 65 78 2d  Y <yyterm>index-
349d0 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 22 20 70  name</yyterm>" p
349e0 68 72 61 73 65 20 73 70 65 63 69 66 69 65 73 20  hrase specifies 
349f0 0a 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20  .that the named 
34a00 69 6e 64 65 78 0a 6d 75 73 74 20 62 65 20 75 73  index.must be us
34a10 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c  ed in order to l
34a20 6f 6f 6b 20 75 70 20 76 61 6c 75 65 73 20 6f 6e  ook up values on
34a30 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74   the preceding t
34a40 61 62 6c 65 2e 0a 5e 49 66 20 3c 79 79 74 65 72  able..^If <yyter
34a50 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 79 79  m>index-name</yy
34a60 74 65 72 6d 3e 20 64 6f 65 73 20 6e 6f 74 20 65  term> does not e
34a70 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f 74 20 62  xist or cannot b
34a80 65 20 75 73 65 64 20 0a 66 6f 72 20 74 68 65 20  e used .for the 
34a90 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68 65 20  query, then the 
34aa0 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66 20 74  preparation of t
34ab0 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
34ac0 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20 22 4e   fails..^(The "N
34ad0 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c 61 75  OT INDEXED" clau
34ae0 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68 61  se specifies tha
34af0 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c  t no index shall
34b00 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a 61 63   be used when.ac
34b10 63 65 73 73 69 6e 67 20 74 68 65 20 70 72 65 63  cessing the prec
34b20 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e 63  eding table, inc
34b30 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69  luding implied i
34b40 6e 64 69 63 65 73 20 63 72 65 61 74 65 20 62 79  ndices create by
34b50 0a 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d  .UNIQUE and PRIM
34b60 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  ARY KEY constrai
34b70 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 74  nts.  However, t
34b80 68 65 20 5b 72 6f 77 69 64 5d 0a 63 61 6e 20 73  he [rowid].can s
34b90 74 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20  till be used to 
34ba0 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65 73 20  look up entries 
34bb0 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49  even when "NOT I
34bc0 4e 44 45 58 45 44 22 20 69 73 20 73 70 65 63 69  NDEXED" is speci
34bd0 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  fied.)^</p>..<p>
34be0 53 6f 6d 65 20 53 51 4c 20 64 61 74 61 62 61 73  Some SQL databas
34bf0 65 20 65 6e 67 69 6e 65 73 20 70 72 6f 76 69 64  e engines provid
34c00 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22  e non-standard "
34c10 68 69 6e 74 22 20 6d 65 63 68 61 6e 69 73 6d 73  hint" mechanisms
34c20 20 77 68 69 63 68 0a 63 61 6e 20 62 65 20 75 73   which.can be us
34c30 65 64 20 74 6f 20 67 69 76 65 20 74 68 65 20 71  ed to give the q
34c40 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63  uery optimizer c
34c50 6c 75 65 73 20 61 62 6f 75 74 20 77 68 61 74 20  lues about what 
34c60 69 6e 64 69 63 65 73 20 69 74 20 73 68 6f 75 6c  indices it shoul
34c70 64 0a 75 73 65 20 66 6f 72 20 61 20 70 61 72 74  d.use for a part
34c80 69 63 75 6c 61 72 20 73 74 61 74 65 6d 65 6e 74  icular statement
34c90 2e 20 20 54 68 65 20 49 4e 44 45 58 20 42 59 20  .  The INDEX BY 
34ca0 63 6c 61 75 73 65 20 6f 66 20 53 51 4c 69 74 65  clause of SQLite
34cb0 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d   is .<em>not</em
34cc0 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d 65 63 68  > a hinting mech
34cd0 61 6e 69 73 6d 20 61 6e 64 20 69 74 20 73 68 6f  anism and it sho
34ce0 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20  uld not be used 
34cf0 61 73 20 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e  as such..^The IN
34d00 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
34d10 64 6f 65 73 20 6e 6f 74 20 67 69 76 65 20 74 68  does not give th
34d20 65 20 6f 70 74 69 6d 69 7a 65 72 20 68 69 6e 74  e optimizer hint
34d30 73 20 61 62 6f 75 74 20 77 68 69 63 68 20 69 6e  s about which in
34d40 64 65 78 0a 74 6f 20 75 73 65 3b 20 69 74 20 67  dex.to use; it g
34d50 69 76 65 73 20 74 68 65 20 6f 70 74 69 6d 69 7a  ives the optimiz
34d60 65 72 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74  er a requirement
34d70 20 6f 66 20 77 68 69 63 68 20 69 6e 64 65 78 20   of which index 
34d80 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74 68 65 20  to use..^If the 
34d90 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
34da0 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 75 73 65  is unable to use
34db0 20 74 68 65 20 69 6e 64 65 78 20 73 70 65 63 69   the index speci
34dc0 66 69 65 64 20 62 79 20 74 68 65 0a 49 4e 44 45  fied by the.INDE
34dd0 58 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  X BY clause, the
34de0 6e 20 74 68 65 20 71 75 65 72 79 20 77 69 6c 6c  n the query will
34df0 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72   fail with an er
34e00 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ror.</p>..<p>The
34e10 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
34e20 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65  se is <em>not</e
34e30 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20  m> intended for 
34e40 75 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68  use in tuning.th
34e50 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66  e performance of
34e60 20 61 20 71 75 65 72 79 2e 20 20 54 68 65 20 69   a query.  The i
34e70 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 49 4e 44  ntent of the IND
34e80 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69  EXED BY clause i
34e90 73 0a 74 6f 20 72 61 69 73 65 20 61 20 72 75 6e  s.to raise a run
34ea0 2d 74 69 6d 65 20 65 72 72 6f 72 20 69 66 20 61  -time error if a
34eb0 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2c 20   schema change, 
34ec0 73 75 63 68 20 61 73 20 64 72 6f 70 70 69 6e 67  such as dropping
34ed0 20 6f 72 0a 63 72 65 61 74 69 6e 67 20 61 6e 20   or.creating an 
34ee0 69 6e 64 65 78 2c 20 63 61 75 73 65 73 20 74 68  index, causes th
34ef0 65 20 71 75 65 72 79 20 70 6c 61 6e 20 66 6f 72  e query plan for
34f00 20 61 20 74 69 6d 65 2d 73 65 6e 73 69 74 69 76   a time-sensitiv
34f10 65 20 71 75 65 72 79 0a 74 6f 20 63 68 61 6e 67  e query.to chang
34f20 65 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44 20  e.  The INDEXED 
34f30 42 59 20 63 6c 61 75 73 65 20 69 73 20 64 65 73  BY clause is des
34f40 69 67 6e 65 64 20 74 6f 20 68 65 6c 70 20 64 65  igned to help de
34f50 74 65 63 74 0a 75 6e 64 65 73 69 72 61 62 6c 65  tect.undesirable
34f60 20 71 75 65 72 79 20 70 6c 61 6e 20 63 68 61 6e   query plan chan
34f70 67 65 73 20 64 75 72 69 6e 67 20 72 65 67 72 65  ges during regre
34f80 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 41  ssion testing..A
34f90 70 70 6c 69 63 61 74 69 6f 6e 20 0a 64 65 76 65  pplication .deve
34fa0 6c 6f 70 65 72 73 20 61 72 65 20 61 64 6d 6f 6e  lopers are admon
34fb0 69 73 68 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c  ished to omit al
34fc0 6c 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44  l use of INDEXED
34fd0 20 42 59 20 64 75 72 69 6e 67 0a 61 70 70 6c 69   BY during.appli
34fe0 63 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69  cation design, i
34ff0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
35000 65 73 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69  esting, and tuni
35010 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58 45 44 20  ng.  If.INDEXED 
35020 42 59 20 69 73 20 74 6f 20 62 65 20 75 73 65 64  BY is to be used
35030 20 61 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75   at all, it shou
35040 6c 64 20 62 65 20 69 6e 73 65 72 74 65 64 20 61  ld be inserted a
35050 74 20 74 68 65 20 76 65 72 79 0a 65 6e 64 20 6f  t the very.end o
35060 66 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e  f the developmen
35070 74 20 70 72 6f 63 65 73 73 20 77 68 65 6e 20 22  t process when "
35080 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20  locking down" a 
35090 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33  design.</p>..<h3
350a0 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a  >See Also:</h3>.
350b0 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65  .<ol>.<li><p>The
350c0 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20   [query planner 
350d0 63 68 65 63 6b 6c 69 73 74 5d 20 64 65 73 63 72  checklist] descr
350e0 69 62 65 73 20 73 74 65 70 73 20 74 68 61 74 20  ibes steps that 
350f0 61 70 70 6c 69 63 61 74 69 6f 6e 0a 64 65 76 65  application.deve
35100 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 66 6f  lopers should fo
35110 6c 6c 6f 77 69 6e 67 20 74 6f 20 68 65 6c 70 20  llowing to help 
35120 72 65 73 6f 6c 76 65 20 71 75 65 72 79 20 70 6c  resolve query pl
35130 61 6e 6e 65 72 20 70 72 6f 62 6c 65 6d 73 2e 0a  anner problems..
35140 4e 6f 74 69 63 65 20 74 68 65 20 74 68 61 74 20  Notice the that 
35150 74 68 65 20 75 73 65 20 6f 66 20 49 4e 44 45 58  the use of INDEX
35160 45 44 20 42 59 20 69 73 20 61 20 6c 61 73 74 20  ED BY is a last 
35170 72 65 73 6f 72 74 2c 20 74 6f 20 62 65 20 75 73  resort, to be us
35180 65 64 20 6f 6e 6c 79 0a 77 68 65 6e 20 61 6c 6c  ed only.when all
35190 20 6f 74 68 65 72 20 6d 65 61 73 75 72 65 73 20   other measures 
351a0 66 61 69 6c 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c  fail.</p>..<li><
351b0 70 3e 5b 75 70 6c 75 73 63 6f 6e 74 72 6f 6c 7c  p>[upluscontrol|
351c0 54 68 65 20 75 6e 61 72 79 20 22 2b 22 20 6f 70  The unary "+" op
351d0 65 72 61 74 6f 72 5d 0a 63 61 6e 20 62 65 20 75  erator].can be u
351e0 73 65 64 20 74 6f 20 64 69 73 71 75 61 6c 69 66  sed to disqualif
351f0 79 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20 57  y terms in the W
35200 48 45 52 45 20 63 6c 61 75 73 65 20 66 72 6f 6d  HERE clause from
35210 20 75 73 65 20 62 79 20 69 6e 64 69 63 65 73 2e   use by indices.
35220 0a 43 61 72 65 66 75 6c 20 75 73 65 20 6f 66 20  .Careful use of 
35230 75 6e 61 72 79 20 2b 20 63 61 6e 20 73 6f 6d 65  unary + can some
35240 74 69 6d 65 73 20 68 65 6c 70 20 70 72 65 76 65  times help preve
35250 6e 74 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  nt the query pla
35260 6e 6e 65 72 20 66 72 6f 6d 0a 63 68 6f 6f 73 69  nner from.choosi
35270 6e 67 20 61 20 70 6f 6f 72 20 69 6e 64 65 78 20  ng a poor index 
35280 77 69 74 68 6f 75 74 20 72 65 73 74 72 69 63 74  without restrict
35290 69 6e 67 20 69 74 20 74 6f 20 75 73 69 6e 67 20  ing it to using 
352a0 6f 6e 65 20 73 70 65 63 69 66 69 63 20 69 6e 64  one specific ind
352b0 65 78 2e 0a 43 61 72 65 66 75 6c 20 70 6c 61 63  ex..Careful plac
352c0 65 6d 65 6e 74 20 6f 66 20 75 6e 61 72 79 20 2b  ement of unary +
352d0 20 6f 70 65 72 61 74 6f 72 73 20 69 73 20 61 20   operators is a 
352e0 62 65 74 74 65 72 20 6d 65 74 68 6f 64 20 66 6f  better method fo
352f0 72 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 0a 77  r controlling .w
35300 68 69 63 68 20 69 6e 64 69 63 65 73 20 61 72 65  hich indices are
35310 20 75 73 65 64 20 62 79 20 61 20 71 75 65 72 79   used by a query
35320 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68  .</p>..<li><p>Th
35330 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  e [sqlite3_stmt_
35340 73 74 61 74 75 73 28 29 5d 20 43 2f 43 2b 2b 20  status()] C/C++ 
35350 69 6e 74 65 72 66 61 63 65 20 74 6f 67 65 74 68  interface togeth
35360 65 72 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c  er with the.[SQL
35370 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 46  ITE_STMTSTATUS_F
35380 55 4c 4c 53 43 41 4e 5f 53 54 45 50 5d 20 61 6e  ULLSCAN_STEP] an
35390 64 20 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  d [SQLITE_STMTST
353a0 41 54 55 53 5f 53 4f 52 54 5d 20 76 65 72 62 73  ATUS_SORT] verbs
353b0 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20  .can be used to 
353c0 64 65 74 65 63 74 20 61 74 20 72 75 6e 2d 74 69  detect at run-ti
353d0 6d 65 20 77 68 65 6e 20 61 6e 20 53 51 4c 20 73  me when an SQL s
353e0 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 0a  tatement is not.
353f0 6d 61 6b 69 6e 67 20 65 66 66 65 63 74 69 76 65  making effective
35400 20 75 73 65 20 6f 66 20 69 6e 64 69 63 65 73 2e   use of indices.
35410 20 20 4d 61 6e 79 20 61 70 70 6c 69 63 61 74 69    Many applicati
35420 6f 6e 73 20 6d 61 79 20 70 72 65 66 65 72 20 74  ons may prefer t
35430 6f 0a 75 73 65 20 74 68 65 20 5b 73 71 6c 69 74  o.use the [sqlit
35440 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29  e3_stmt_status()
35450 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 64  ] interface to d
35460 65 74 65 63 74 20 69 6e 64 65 78 20 6d 69 73 75  etect index misu
35470 73 65 0a 72 61 74 68 65 72 20 74 68 61 6e 20 74  se.rather than t
35480 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
35490 72 61 73 65 20 64 65 73 63 72 69 62 65 64 20 68  rase described h
354a0 65 72 65 2e 3c 2f 70 3e 0a 3c 2f 6f 6c 3e 0a 0a  ere.</p>.</ol>..
354b0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
354c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
354d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
354e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
354f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35500 23 23 23 0a 23 20 41 20 6c 69 73 74 20 6f 66 20  ###.# A list of 
35510 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61 73 74  keywords.  A ast
35520 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61 66 74  erisk occurs aft
35530 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64 20 69  er the keyword i
35540 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74 68 65  f it is on.# the
35550 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74 2e 0a   fallback list..
35560 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c 69  #.set keyword_li
35570 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20 41  st [lsort {.   A
35580 42 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a 20  BORT.   ACTION. 
35590 20 20 41 44 44 0a 20 20 20 41 46 54 45 52 0a 20    ADD.   AFTER. 
355a0 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a 20    ALL.   ALTER. 
355b0 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e 44    ANALYZE.   AND
355c0 0a 20 20 20 41 53 0a 20 20 20 41 53 43 0a 20 20  .   AS.   ASC.  
355d0 20 41 54 54 41 43 48 0a 20 20 20 41 55 54 4f 49   ATTACH.   AUTOI
355e0 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f  NCREMENT.   BEFO
355f0 52 45 0a 20 20 20 42 45 47 49 4e 0a 20 20 20 42  RE.   BEGIN.   B
35600 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20  ETWEEN.   BY.   
35610 43 41 53 43 41 44 45 0a 20 20 20 43 41 53 45 0a  CASCADE.   CASE.
35620 20 20 20 43 41 53 54 0a 20 20 20 43 48 45 43 4b     CAST.   CHECK
35630 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20 43  .   COLLATE.   C
35640 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a  OLUMN.   COMMIT.
35650 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20 43     CONFLICT.   C
35660 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52 45  ONSTRAINT.   CRE
35670 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20  ATE.   CROSS.   
35680 43 55 52 52 45 4e 54 5f 44 41 54 45 0a 20 20 20  CURRENT_DATE.   
35690 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20  CURRENT_TIME.   
356a0 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
356b0 50 0a 20 20 20 44 41 54 41 42 41 53 45 0a 20 20  P.   DATABASE.  
356c0 20 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45   DEFAULT.   DEFE
356d0 52 52 45 44 0a 20 20 20 44 45 46 45 52 52 41 42  RRED.   DEFERRAB
356e0 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20  LE.   DELETE.   
356f0 44 45 53 43 0a 20 20 20 44 45 54 41 43 48 0a 20  DESC.   DETACH. 
35700 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20 44 52    DISTINCT.   DR
35710 4f 50 0a 20 20 20 45 4e 44 0a 20 20 20 45 41 43  OP.   END.   EAC
35720 48 0a 20 20 20 45 4c 53 45 0a 20 20 20 45 53 43  H.   ELSE.   ESC
35730 41 50 45 0a 20 20 20 45 58 43 45 50 54 0a 20 20  APE.   EXCEPT.  
35740 20 45 58 43 4c 55 53 49 56 45 0a 20 20 20 45 58   EXCLUSIVE.   EX
35750 49 53 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a  ISTS.   EXPLAIN.
35760 20 20 20 46 41 49 4c 0a 20 20 20 46 4f 52 0a 20     FAIL.   FOR. 
35770 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f    FOREIGN.   FRO
35780 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f  M.   FULL.   GLO
35790 42 0a 20 20 20 47 52 4f 55 50 0a 20 20 20 48 41  B.   GROUP.   HA
357a0 56 49 4e 47 0a 20 20 20 49 46 0a 20 20 20 49 47  VING.   IF.   IG
357b0 4e 4f 52 45 0a 20 20 20 49 4d 4d 45 44 49 41 54  NORE.   IMMEDIAT
357c0 45 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58  E.   IN.   INDEX
357d0 0a 20 20 20 49 4e 44 45 58 45 44 0a 20 20 20 49  .   INDEXED.   I
357e0 4e 49 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45  NITIALLY.   INNE
357f0 52 0a 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49  R.   INSERT.   I
35800 4e 53 54 45 41 44 0a 20 20 20 49 4e 54 45 52 53  NSTEAD.   INTERS
35810 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49  ECT.   INTO.   I
35820 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a  S.   ISNULL.   J
35830 4f 49 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45  OIN.   KEY.   LE
35840 46 54 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49  FT.   LIKE.   LI
35850 4d 49 54 0a 20 20 20 4d 41 54 43 48 0a 20 20 20  MIT.   MATCH.   
35860 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20  NATURAL.   NO.  
35870 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a   NOT.   NOTNULL.
35880 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20 20     NULL.   OF.  
35890 20 4f 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20 20   OFFSET.   ON.  
358a0 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20 20 20   OR.   ORDER.   
358b0 4f 55 54 45 52 0a 20 20 20 50 4c 41 4e 0a 20 20  OUTER.   PLAN.  
358c0 20 50 52 41 47 4d 41 0a 20 20 20 50 52 49 4d 41   PRAGMA.   PRIMA
358d0 52 59 0a 20 20 20 51 55 45 52 59 0a 20 20 20 52  RY.   QUERY.   R
358e0 41 49 53 45 0a 20 20 20 52 45 43 55 52 53 49 56  AISE.   RECURSIV
358f0 45 0a 20 20 20 52 45 46 45 52 45 4e 43 45 53 0a  E.   REFERENCES.
35900 20 20 20 52 45 47 45 58 50 0a 20 20 20 52 45 49     REGEXP.   REI
35910 4e 44 45 58 0a 20 20 20 52 45 4c 45 41 53 45 0a  NDEX.   RELEASE.
35920 20 20 20 52 45 4e 41 4d 45 0a 20 20 20 52 45 50     RENAME.   REP
35930 4c 41 43 45 0a 20 20 20 52 45 53 54 52 49 43 54  LACE.   RESTRICT
35940 0a 20 20 20 52 49 47 48 54 0a 20 20 20 52 4f 4c  .   RIGHT.   ROL
35950 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a 20 20 20  LBACK.   ROW.   
35960 53 41 56 45 50 4f 49 4e 54 0a 20 20 20 53 45 4c  SAVEPOINT.   SEL
35970 45 43 54 0a 20 20 20 53 45 54 0a 20 20 20 54 41  ECT.   SET.   TA
35980 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20 20 20 54  BLE.   TEMP.   T
35990 45 4d 50 4f 52 41 52 59 0a 20 20 20 54 48 45 4e  EMPORARY.   THEN
359a0 0a 20 20 20 54 4f 0a 20 20 20 54 52 41 4e 53 41  .   TO.   TRANSA
359b0 43 54 49 4f 4e 0a 20 20 20 54 52 49 47 47 45 52  CTION.   TRIGGER
359c0 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49  .   UNION.   UNI
359d0 51 55 45 0a 20 20 20 55 50 44 41 54 45 0a 20 20  QUE.   UPDATE.  
359e0 20 55 53 49 4e 47 0a 20 20 20 56 41 43 55 55 4d   USING.   VACUUM
359f0 0a 20 20 20 56 41 4c 55 45 53 0a 20 20 20 56 49  .   VALUES.   VI
35a00 45 57 0a 20 20 20 56 49 52 54 55 41 4c 0a 20 20  EW.   VIRTUAL.  
35a10 20 57 49 54 48 0a 20 20 20 57 49 54 48 4f 55 54   WITH.   WITHOUT
35a20 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52  .   WHEN.   WHER
35a30 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c  E.}]..hd_puts {<
35a40 44 49 56 20 63 6c 61 73 73 3d 22 70 64 66 5f 73  DIV class="pdf_s
35a50 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f  ection">}.Sectio
35a60 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f 72  n {SQLite Keywor
35a70 64 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b 2a  ds} keywords {{*
35a80 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51  SQL keyword} {SQ
35a90 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f  L keywords}}.hd_
35aa0 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f  puts {</DIV>}.</
35ab0 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c  tcl>..<p>The SQL
35ac0 20 73 74 61 6e 64 61 72 64 20 73 70 65 63 69 66   standard specif
35ad0 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62 65  ies a huge numbe
35ae0 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68  r of keywords wh
35af0 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75  ich may not.be u
35b00 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73  sed as the names
35b10 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69   of tables, indi
35b20 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61  ces, columns, da
35b30 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64 65  tabases, user-de
35b40 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c  fined.functions,
35b50 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72   collations, vir
35b60 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
35b70 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65 72  es, or any other
35b80 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54   named object..T
35b90 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f  he list of keywo
35ba0 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74  rds is so long t
35bb0 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63  hat few people c
35bc0 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d  an remember them
35bd0 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53   all..For most S
35be0 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73 61  QL code, your sa
35bf0 66 65 73 74 20 62 65 74 20 69 73 20 74 6f 20 6e  fest bet is to n
35c00 65 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e 67  ever use any Eng
35c10 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f  lish language.wo
35c20 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f  rd as the name o
35c30 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64  f a user-defined
35c40 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70   object.</p>..<p
35c50 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20  >If you want to 
35c60 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61 73  use a keyword as
35c70 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65   a name, you nee
35c80 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20 20  d to quote it.  
35c90 54 68 65 72 65 0a 61 72 65 20 66 6f 75 72 20 77  There.are four w
35ca0 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b  ays of quoting k
35cb0 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74  eywords in SQLit
35cc0 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f  e:</p>..<p>.<blo
35cd0 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e  ckquote>.<table>
35ce0 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
35cf0 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f  ="top"><b>'keywo
35d00 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20  rd'</b></td><td 
35d10 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
35d20 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64  ..<td>^A keyword
35d30 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65   in single quote
35d40 73 20 69 73 20 61 20 73 74 72 69 6e 67 20 6c 69  s is a string li
35d50 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e  teral.</td></tr>
35d60 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
35d70 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77  n="top"><b>"keyw
35d80 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  ord"</b></td><td
35d90 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
35da0 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65  eyword in double
35db0 2d 71 75 6f 74 65 73 20 69 73 20 61 6e 20 69 64  -quotes is an id
35dc0 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f  entifier.</td></
35dd0 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61  tr>..<tr>.<td va
35de0 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23  lign="top"><b>&#
35df0 39 31 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b 3c  91;keyword&#93;<
35e00 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64  /b></td><td></td
35e10 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
35e20 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71  d enclosed in sq
35e30 75 61 72 65 20 62 72 61 63 6b 65 74 73 20 69 73  uare brackets is
35e40 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64 65   .        an ide
35e50 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20 69  ntifier.  This i
35e60 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53  s not standard S
35e70 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e  QL.  This quotin
35e80 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20  g mechanism.    
35e90 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20 4d      is used by M
35ea0 53 20 41 63 63 65 73 73 20 61 6e 64 20 53 51 4c  S Access and SQL
35eb0 20 53 65 72 76 65 72 20 61 6e 64 20 69 73 20 69   Server and is i
35ec0 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74  ncluded in SQLit
35ed0 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f  e for.        co
35ee0 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64  mpatibility.</td
35ef0 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64  ></tr>..<tr>.<td
35f00 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
35f10 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64 26 23 39  >&#96;keyword&#9
35f20 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c  6;</b></td><td><
35f30 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79  /td>..<td>^A key
35f40 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e  word enclosed in
35f50 20 67 72 61 76 65 20 61 63 63 65 6e 74 73 20 28   grave accents (
35f60 41 53 43 49 49 20 63 6f 64 65 20 39 36 29 20 69  ASCII code 96) i
35f70 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64  s .        an id
35f80 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20  entifier.  This 
35f90 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20  is not standard 
35fa0 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69  SQL.  This quoti
35fb0 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20  ng mechanism.   
35fc0 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20       is used by 
35fd0 4d 79 53 51 4c 20 61 6e 64 20 69 73 20 69 6e 63  MySQL and is inc
35fe0 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  luded in SQLite 
35ff0 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70  for.        comp
36000 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c  atibility.</td><
36010 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
36020 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e  blockquote>.</p>
36030 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69 65  ..<p>For resilie
36040 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f 6e  nce when confron
36050 74 65 64 20 77 69 74 68 20 68 69 73 74 6f 72 69  ted with histori
36060 63 61 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  cal SQL statemen
36070 74 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20  ts, SQLite.will 
36080 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64 20 74  sometimes bend t
36090 68 65 20 71 75 6f 74 69 6e 67 20 72 75 6c 65 73  he quoting rules
360a0 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c   above:</p>..<ul
360b0 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b  >.<li><p>^If a k
360c0 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65  eyword in single
360d0 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e  .quotes (ex: <b>
360e0 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62 3e  'key'</b> or <b>
360f0 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20 75  'glob'</b>) is u
36100 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74  sed in a context
36110 20 77 68 65 72 65 0a 61 6e 20 69 64 65 6e 74 69   where.an identi
36120 66 69 65 72 20 69 73 20 61 6c 6c 6f 77 65 64 20  fier is allowed 
36130 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69  but where a stri
36140 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 6e 6f  ng literal is no
36150 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 0a  t allowed, then.
36160 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64  the token is und
36170 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 6e  erstood to be an
36180 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e 73 74   identifier inst
36190 65 61 64 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ead of a string 
361a0 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c  literal..</p></l
361b0 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61  i>..<li><p>^If a
361c0 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62   keyword in doub
361d0 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c  le.quotes (ex: <
361e0 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20 3c  b>"key"</b> or <
361f0 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69 73  b>"glob"</b>) is
36200 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65   used in a conte
36210 78 74 20 77 68 65 72 65 0a 69 74 20 63 61 6e 6e  xt where.it cann
36220 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64 20 74  ot be resolved t
36230 6f 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  o an identifier 
36240 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69  but where a stri
36250 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20 61 6c  ng literal.is al
36260 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68 65 20  lowed, then the 
36270 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74  token is underst
36280 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74 72 69  ood to be a stri
36290 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73 74 65  ng literal inste
362a0 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69 66  ad.of an identif
362b0 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f  ier.</p></li>.</
362c0 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d 6d  ul>..<p>Programm
362d0 65 72 73 20 61 72 65 20 63 61 75 74 69 6f 6e 65  ers are cautione
362e0 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74 68 65  d not to use the
362f0 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e 73 20   two exceptions 
36300 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68 65  described in.the
36310 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c 65 74   previous bullet
36320 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69 7a 65  s.  We emphasize
36330 20 74 68 61 74 20 74 68 65 79 20 65 78 69 73 74   that they exist
36340 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f 6c   only so that ol
36350 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65 64  d.and ill-formed
36360 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
36370 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63 74  will run correct
36380 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65 72 73  ly.  Future vers
36390 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d  ions of.SQLite m
363a0 69 67 68 74 20 72 61 69 73 65 20 65 72 72 6f 72  ight raise error
363b0 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 63 63  s instead of acc
363c0 65 70 74 69 6e 67 20 74 68 65 20 6d 61 6c 66 6f  epting the malfo
363d0 72 6d 65 64 0a 73 74 61 74 65 6d 65 6e 74 73 20  rmed.statements 
363e0 63 6f 76 65 72 65 64 20 62 79 20 74 68 65 20 65  covered by the e
363f0 78 63 65 70 74 69 6f 6e 73 20 61 62 6f 76 65 2e  xceptions above.
36400 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  </p>..<p>.SQLite
36410 20 61 64 64 73 20 6e 65 77 20 6b 65 79 77 6f 72   adds new keywor
36420 64 73 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20  ds from time to 
36430 74 69 6d 65 20 77 68 65 6e 20 69 74 20 74 61 6b  time when it tak
36440 65 73 20 6f 6e 20 6e 65 77 20 66 65 61 74 75 72  es on new featur
36450 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e  es..So to preven
36460 74 20 79 6f 75 72 20 63 6f 64 65 20 66 72 6f 6d  t your code from
36470 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79   being broken by
36480 20 66 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d   future enhancem
36490 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64  ents, you should
364a0 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20  .normally quote 
364b0 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20 74  any identifier t
364c0 68 61 74 20 69 73 20 61 6e 20 45 6e 67 6c 69 73  hat is an Englis
364d0 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72 64 2c  h language word,
364e0 20 65 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f 20   even if.you do 
364f0 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f 70  not have to..</p
36500 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69 73 74 20  >..<p>.The list 
36510 62 65 6c 6f 77 20 73 68 6f 77 73 20 61 6c 6c 20  below shows all 
36520 70 6f 73 73 69 62 6c 65 20 6b 65 79 77 6f 72 64  possible keyword
36530 73 20 75 73 65 64 20 62 79 20 61 6e 79 20 62 75  s used by any bu
36540 69 6c 64 20 6f 66 0a 53 51 4c 69 74 65 20 72 65  ild of.SQLite re
36550 67 61 72 64 6c 65 73 73 20 6f 66 20 5b 63 6f 6d  gardless of [com
36560 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
36570 73 5d 2e 20 20 0a 4d 6f 73 74 20 72 65 61 73 6f  s].  .Most reaso
36580 6e 61 62 6c 65 20 63 6f 6e 66 69 67 75 72 61 74  nable configurat
36590 69 6f 6e 73 20 75 73 65 20 6d 6f 73 74 20 6f 72  ions use most or
365a0 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 6b 65   all of these ke
365b0 79 77 6f 72 64 73 2c 0a 62 75 74 20 73 6f 6d 65  ywords,.but some
365c0 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 62 65   keywords may be
365d0 20 6f 6d 69 74 74 65 64 20 77 68 65 6e 20 53 51   omitted when SQ
365e0 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75  L language featu
365f0 72 65 73 20 61 72 65 0a 64 69 73 61 62 6c 65 64  res are.disabled
36600 2e 0a 5e 28 52 65 67 61 72 64 6c 65 73 73 20 6f  ..^(Regardless o
36610 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  f the compile-ti
36620 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  me configuration
36630 2c 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72  , any identifier
36640 20 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 6e 0a   that is not on.
36650 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 74  the following <t
36660 63 6c 3e 68 64 5f 70 75 74 73 20 5b 6c 6c 65 6e  cl>hd_puts [llen
36670 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  gth $keyword_lis
36680 74 5d 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65 6e 74  t]</tcl> element
36690 0a 6c 69 73 74 20 69 73 20 6e 6f 74 20 61 20 6b  .list is not a k
366a0 65 79 77 6f 72 64 20 74 6f 20 74 68 65 20 53 51  eyword to the SQ
366b0 4c 20 70 61 72 73 65 72 20 69 6e 20 53 51 4c 69  L parser in SQLi
366c0 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  te:.</p>..<ol>.<
366d0 74 63 6c 3e 0a 73 65 74 20 6c 78 20 7b 7d 0a 66  tcl>.set lx {}.f
366e0 6f 72 65 61 63 68 20 77 6f 72 64 20 5b 6c 73 6f  oreach word [lso
366f0 72 74 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74  rt $keyword_list
36700 5d 20 7b 0a 20 20 68 64 5f 70 75 74 73 6e 6c 20  ] {.  hd_putsnl 
36710 22 3c 6c 69 3e 24 77 6f 72 64 3c 2f 6c 69 3e 22  "<li>$word</li>"
36720 0a 7d 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c 2f  .}.hd_putsnl "</
36730 6f 6c 3e 29 5e 22 0a 3c 2f 74 63 6c 3e 0a        ol>)^".</tcl>.