Documentation Source Text

Hex Artifact Content
Login

Artifact 5985afc495eb2c132d798f880dcfb2abe7ad77e56095542b6883c189684d2b75:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 55 50 53 45 52 54 20 75 70 73 65 72     {UPSERT upser
0380: 74 7d 0a 20 20 20 20 7b 52 45 50 4c 41 43 45 20  t}.    {REPLACE 
0390: 72 65 70 6c 61 63 65 7d 0a 20 20 20 20 7b 44 45  replace}.    {DE
03a0: 4c 45 54 45 20 64 65 6c 65 74 65 7d 0a 20 20 20  LETE delete}.   
03b0: 20 7b 55 50 44 41 54 45 20 75 70 64 61 74 65 7d   {UPDATE update}
03c0: 0a 20 20 20 20 7b 53 45 4c 45 43 54 20 73 65 6c  .    {SELECT sel
03d0: 65 63 74 7d 0a 20 20 20 20 7b 7b 57 49 54 48 20  ect}.    {{WITH 
03e0: 63 6c 61 75 73 65 7d 20 77 69 74 68 63 6c 61 75  clause} withclau
03f0: 73 65 7d 0a 20 20 20 20 7b 63 6f 6d 6d 65 6e 74  se}.    {comment
0400: 20 63 6f 6d 6d 65 6e 74 7d 0a 20 20 20 20 7b 45   comment}.    {E
0410: 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 7d 0a  XPLAIN explain}.
0420: 20 20 20 20 7b 65 78 70 72 65 73 73 69 6f 6e 20      {expression 
0430: 65 78 70 72 7d 0a 20 20 20 20 7b 7b 42 45 47 49  expr}.    {{BEGI
0440: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74  N TRANSACTION} t
0450: 72 61 6e 73 61 63 74 69 6f 6e 7d 0a 20 20 20 20  ransaction}.    
0460: 7b 7b 43 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43  {{COMMIT TRANSAC
0470: 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f  TION} transactio
0480: 6e 20 43 4f 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b  n COMMIT}.    {{
0490: 45 4e 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d  END TRANSACTION}
04a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43 4f 4d   transaction COM
04b0: 4d 49 54 7d 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42  MIT}.    {{ROLLB
04c0: 41 43 4b 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d  ACK TRANSACTION}
04d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 52 4f 4c   transaction ROL
04e0: 4c 42 41 43 4b 7d 0a 20 20 20 20 7b 53 41 56 45  LBACK}.    {SAVE
04f0: 50 4f 49 4e 54 20 73 61 76 65 70 6f 69 6e 74 7d  POINT savepoint}
0500: 0a 20 20 20 20 7b 7b 52 45 4c 45 41 53 45 20 53  .    {{RELEASE S
0510: 41 56 45 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f  AVEPOINT} savepo
0520: 69 6e 74 20 53 41 56 45 50 4f 49 4e 54 7d 0a 20  int SAVEPOINT}. 
0530: 20 20 20 7b 50 52 41 47 4d 41 20 70 72 61 67 6d     {PRAGMA pragm
0540: 61 2e 68 74 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e  a.html}.    {{ON
0550: 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
0560: 7d 20 63 6f 6e 66 6c 69 63 74 7d 0a 20 20 20 20  } conflict}.    
0570: 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20 63  {{CREATE VIEW} c
0580: 72 65 61 74 65 76 69 65 77 7d 0a 20 20 20 20 7b  reateview}.    {
0590: 7b 44 52 4f 50 20 56 49 45 57 7d 20 64 72 6f 70  {DROP VIEW} drop
05a0: 76 69 65 77 7d 0a 20 20 20 20 7b 7b 43 52 45 41  view}.    {{CREA
05b0: 54 45 20 54 52 49 47 47 45 52 7d 20 63 72 65 61  TE TRIGGER} crea
05c0: 74 65 74 72 69 67 67 65 72 7d 0a 20 20 20 20 7b  tetrigger}.    {
05d0: 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20 64  {DROP TRIGGER} d
05e0: 72 6f 70 74 72 69 67 67 65 72 7d 0a 20 20 20 20  roptrigger}.    
05f0: 7b 7b 41 54 54 41 43 48 20 44 41 54 41 42 41 53  {{ATTACH DATABAS
0600: 45 7d 20 61 74 74 61 63 68 7d 0a 20 20 20 20 7b  E} attach}.    {
0610: 7b 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45  {DETACH DATABASE
0620: 7d 20 64 65 74 61 63 68 7d 0a 20 20 20 20 20 20  } detach}.      
0630: 7b 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78  {REINDEX reindex
0640: 7d 0a 20 20 20 20 7b 7b 41 4c 54 45 52 20 54 41  }.    {{ALTER TA
0650: 42 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 7d  BLE} altertable}
0660: 0a 20 20 20 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20  .    {{ANALYZE} 
0670: 61 6e 61 6c 79 7a 65 7d 0a 20 20 20 20 7b 7b 49  analyze}.    {{I
0680: 4e 44 45 58 45 44 20 42 59 7d 20 69 6e 64 65 78  NDEXED BY} index
0690: 65 64 62 79 7d 0a 20 20 20 20 7b 7b 61 67 67 72  edby}.    {{aggr
06a0: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 7d  egate functions}
06b0: 20 61 67 67 66 75 6e 63 20 61 67 67 66 75 6e 63   aggfunc aggfunc
06c0: 7d 0a 20 20 20 20 7b 7b 63 6f 72 65 20 66 75 6e  }.    {{core fun
06d0: 63 74 69 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63  ctions} corefunc
06e0: 20 63 6f 72 65 66 75 6e 63 7d 0a 20 20 20 20 7b   corefunc}.    {
06f0: 7b 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66  {date and time f
0700: 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75  unctions} datefu
0710: 6e 63 20 64 61 74 65 66 75 6e 63 7d 0a 20 20 20  nc datefunc}.   
0720: 20 7b 6b 65 79 77 6f 72 64 73 20 6b 65 79 77 6f   {keywords keywo
0730: 72 64 73 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64  rds {SQL keyword
0740: 73 7d 7d 0a 20 20 7d 0a 20 20 73 65 74 20 6c 78  s}}.  }.  set lx
0750: 20 7b 7d 0a 20 20 66 6f 72 65 61 63 68 20 7b 73   {}.  foreach {s
0760: 65 63 74 69 6f 6e 7d 20 5b 6c 73 6f 72 74 20 2d  ection} [lsort -
0770: 69 6e 64 65 78 20 30 20 2d 64 69 63 74 69 6f 6e  index 0 -diction
0780: 61 72 79 20 24 6c 61 6e 67 5f 73 65 63 74 69 6f  ary $lang_sectio
0790: 6e 5f 6c 69 73 74 5d 20 7b 0a 20 20 20 20 66 6f  n_list] {.    fo
07a0: 72 65 61 63 68 20 7b 73 5f 74 69 74 6c 65 20 73  reach {s_title s
07b0: 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73 65 63 74  _tag s_kw} $sect
07c0: 69 6f 6e 20 7b 7d 0a 20 20 20 20 69 66 20 7b 24  ion {}.    if {$
07d0: 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20 20  s_kw == ""} {.  
07e0: 20 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f      set s_kw $s_
07f0: 74 69 74 6c 65 0a 20 20 20 20 7d 0a 20 20 20 20  title.    }.    
0800: 6c 61 70 70 65 6e 64 20 6c 78 20 5b 6c 69 73 74  lappend lx [list
0810: 20 24 73 5f 6b 77 20 24 73 5f 74 69 74 6c 65 20   $s_kw $s_title 
0820: 30 5d 0a 20 20 7d 0a 20 20 68 64 5f 6c 69 73 74  0].  }.  hd_list
0830: 5f 6f 66 5f 6c 69 6e 6b 73 20 7b 7d 20 33 34 30  _of_links {} 340
0840: 20 24 6c 78 0a 3c 2f 74 63 6c 3e 0a 3c 2f 75 6c   $lx.</tcl>.</ul
0850: 3e 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62  ></td></tr></tab
0860: 6c 65 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72 6f 75  le>..<p>^The rou
0870: 74 69 6e 65 73 20 5b 73 71 6c 69 74 65 33 5f 70  tines [sqlite3_p
0880: 72 65 70 61 72 65 5f 76 32 28 29 5d 2c 20 5b 73  repare_v2()], [s
0890: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
08a0: 5d 2c 0a 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  ],.[sqlite3_prep
08b0: 61 72 65 31 36 28 29 5d 2c 20 5b 73 71 6c 69 74  are16()], [sqlit
08c0: 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76 32 28  e3_prepare16_v2(
08d0: 29 5d 2c 20 0a 5b 73 71 6c 69 74 65 33 5f 65 78  )], .[sqlite3_ex
08e0: 65 63 28 29 5d 2c 20 61 6e 64 20 5b 73 71 6c 69  ec()], and [sqli
08f0: 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 28 29 5d  te3_get_table()]
0900: 20 61 63 63 65 70 74 0a 61 6e 20 53 51 4c 20 73   accept.an SQL s
0910: 74 61 74 65 6d 65 6e 74 20 6c 69 73 74 20 28 73  tatement list (s
0920: 71 6c 2d 73 74 6d 74 2d 6c 69 73 74 29 20 77 68  ql-stmt-list) wh
0930: 69 63 68 20 69 73 20 61 20 73 65 6d 69 63 6f 6c  ich is a semicol
0940: 6f 6e 2d 73 65 70 61 72 61 74 65 64 0a 6c 69 73  on-separated.lis
0950: 74 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  t of statements.
0960: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
0970: 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d  eDiagram sql-stm
0980: 74 2d 6c 69 73 74 3c 2f 74 63 6c 3e 0a 0a 3c 70  t-list</tcl>..<p
0990: 3e 45 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d  >Each SQL statem
09a0: 65 6e 74 20 69 6e 20 74 68 65 20 73 74 61 74 65  ent in the state
09b0: 6d 65 6e 74 20 6c 69 73 74 20 69 73 20 61 6e 20  ment list is an 
09c0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a  instance of the.
09d0: 66 6f 6c 6c 6f 77 69 6e 67 3a 3c 2f 70 3e 0a 0a  following:</p>..
09e0: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
09f0: 61 6d 20 73 71 6c 2d 73 74 6d 74 3c 2f 74 63 6c  am sql-stmt</tcl
0a00: 3e 0a 0a 3c 74 63 6c 3e 0a 70 72 6f 63 20 4f 70  >..<tcl>.proc Op
0a10: 65 72 61 74 6f 72 20 7b 6e 61 6d 65 7d 20 7b 0a  erator {name} {.
0a20: 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20    return "<font 
0a30: 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c  color=\"#2c2cf0\
0a40: 22 3e 3c 62 69 67 3e 24 6e 61 6d 65 3c 2f 62 69  "><big>$name</bi
0a50: 67 3e 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a 70 72 6f  g></font>".}.pro
0a60: 63 20 4e 6f 6e 74 65 72 6d 69 6e 61 6c 20 7b 6e  c Nonterminal {n
0a70: 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20  ame} {.  return 
0a80: 22 3c 69 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  "<i><font color=
0a90: 5c 22 23 66 66 33 34 33 34 5c 22 3e 24 6e 61 6d  \"#ff3434\">$nam
0aa0: 65 3c 2f 66 6f 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a  e</font></i>".}.
0ab0: 70 72 6f 63 20 4b 65 79 77 6f 72 64 20 7b 6e 61  proc Keyword {na
0ac0: 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 22  me} {.  return "
0ad0: 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 32  <font color=\"#2
0ae0: 63 32 63 66 30 5c 22 3e 24 6e 61 6d 65 3c 2f 66  c2cf0\">$name</f
0af0: 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 45 78 61  ont>".}.proc Exa
0b00: 6d 70 6c 65 20 7b 74 65 78 74 7d 20 7b 0a 20 20  mple {text} {.  
0b10: 68 64 5f 70 75 74 73 20 22 3c 62 6c 6f 63 6b 71  hd_puts "<blockq
0b20: 75 6f 74 65 3e 3c 70 72 65 3e 24 74 65 78 74 3c  uote><pre>$text<
0b30: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
0b40: 65 3e 22 0a 7d 0a 0a 70 72 6f 63 20 53 65 63 74  e>".}..proc Sect
0b50: 69 6f 6e 20 7b 6e 61 6d 65 20 6c 61 62 65 6c 20  ion {name label 
0b60: 6b 65 79 77 6f 72 64 73 7d 20 7b 0a 20 20 67 6c  keywords} {.  gl
0b70: 6f 62 61 6c 20 44 4f 43 0a 20 20 68 64 5f 63 6c  obal DOC.  hd_cl
0b80: 6f 73 65 5f 6d 61 69 6e 0a 20 20 68 64 5f 6f 70  ose_main.  hd_op
0b90: 65 6e 5f 6d 61 69 6e 20 6c 61 6e 67 5f 24 6c 61  en_main lang_$la
0ba0: 62 65 6c 2e 68 74 6d 6c 0a 20 20 68 64 5f 68 65  bel.html.  hd_he
0bb0: 61 64 65 72 20 22 53 51 4c 69 74 65 20 51 75 65  ader "SQLite Que
0bc0: 72 79 20 4c 61 6e 67 75 61 67 65 3a 20 24 6e 61  ry Language: $na
0bd0: 6d 65 22 20 24 44 4f 43 2f 70 61 67 65 73 2f 6c  me" $DOC/pages/l
0be0: 61 6e 67 2e 69 6e 0a 20 20 65 76 61 6c 20 68 64  ang.in.  eval hd
0bf0: 5f 6b 65 79 77 6f 72 64 73 20 24 6b 65 79 77 6f  _keywords $keywo
0c00: 72 64 73 0a 20 20 69 66 20 7b 5b 6c 73 65 61 72  rds.  if {[lsear
0c10: 63 68 20 24 6b 65 79 77 6f 72 64 73 20 24 6e 61  ch $keywords $na
0c20: 6d 65 5d 20 3d 3d 20 2d 31 20 26 26 20 5b 6c 73  me] == -1 && [ls
0c30: 65 61 72 63 68 20 24 6b 65 79 77 6f 72 64 73 20  earch $keywords 
0c40: 2a 24 6e 61 6d 65 5d 20 3d 3d 20 2d 31 7d 20 7b  *$name] == -1} {
0c50: 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79  .    eval hd_key
0c60: 77 6f 72 64 73 20 7b 20 24 6e 61 6d 65 20 7d 0a  words { $name }.
0c70: 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c    }.  hd_puts {<
0c80: 64 69 76 20 63 6c 61 73 73 3d 6e 6f 73 65 61 72  div class=nosear
0c90: 63 68 3e 7d 0a 20 20 68 64 5f 70 75 74 73 20 7b  ch>}.  hd_puts {
0ca0: 3c 68 31 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <h1 align="cente
0cb0: 72 22 3e 53 51 4c 20 41 73 20 55 6e 64 65 72 73  r">SQL As Unders
0cc0: 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65 3c 2f  tood By SQLite</
0cd0: 68 31 3e 7d 0a 20 20 68 64 5f 70 75 74 73 20 7b  h1>}.  hd_puts {
0ce0: 3c 70 3e 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67  <p><a href="lang
0cf0: 2e 68 74 6d 6c 22 3e 5b 54 6f 70 5d 3c 2f 61 3e  .html">[Top]</a>
0d00: 3c 2f 70 3e 7d 0a 20 20 68 64 5f 70 75 74 73 20  </p>}.  hd_puts 
0d10: 22 3c 68 32 3e 24 6e 61 6d 65 3c 2f 68 32 3e 22  "<h2>$name</h2>"
0d20: 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 2f 64 69  .  hd_puts {</di
0d30: 76 3e 7d 0a 7d 0a 0a 23 23 23 23 23 23 23 23 23  v>}.}..#########
0d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d80: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
0d90: 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 61 6c 74  ALTER TABLE} alt
0da0: 65 72 74 61 62 6c 65 20 7b 7b 41 4c 54 45 52 20  ertable {{ALTER 
0db0: 54 41 42 4c 45 7d 20 7b 2a 41 4c 54 45 52 7d 7d  TABLE} {*ALTER}}
0dc0: 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
0dd0: 65 44 69 61 67 72 61 6d 20 61 6c 74 65 72 2d 74  eDiagram alter-t
0de0: 61 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  able-stmt.</tcl>
0df0: 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70  ..<p>SQLite supp
0e00: 6f 72 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73  orts a limited s
0e10: 75 62 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54  ubset of ALTER T
0e20: 41 42 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20  ABLE..The ALTER 
0e30: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  TABLE command in
0e40: 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74   SQLite allows t
0e50: 68 65 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d  he user to renam
0e60: 65 20 61 20 74 61 62 6c 65 2c 0a 74 6f 20 72 65  e a table,.to re
0e70: 6e 61 6d 65 20 61 20 63 6f 6c 75 6d 6e 20 77 69  name a column wi
0e80: 74 68 69 6e 20 61 20 74 61 62 6c 65 2c 20 6f 72  thin a table, or
0e90: 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f   to add a new co
0ea0: 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69 73 74  lumn to an exist
0eb0: 69 6e 67 20 74 61 62 6c 65 2e 0a 0a 3c 74 63 6c  ing table...<tcl
0ec0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 61 6c 74  >hd_fragment alt
0ed0: 65 72 74 61 62 72 65 6e 61 6d 65 20 7b 41 4c 54  ertabrename {ALT
0ee0: 45 52 20 54 41 42 4c 45 20 52 45 4e 41 4d 45 7d  ER TABLE RENAME}
0ef0: 20 7b 72 65 6e 61 6d 65 20 74 61 62 6c 65 7d 3c   {rename table}<
0f00: 2f 74 63 6c 3e 0a 3c 68 33 3e 41 4c 54 45 52 20  /tcl>.<h3>ALTER 
0f10: 54 41 42 4c 45 20 52 45 4e 41 4d 45 3c 2f 68 33  TABLE RENAME</h3
0f20: 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e  >..<p> ^(The REN
0f30: 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 63 68  AME TO syntax ch
0f40: 61 6e 67 65 73 20 74 68 65 20 6e 61 6d 65 20 6f  anges the name o
0f50: 66 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d  f <yyterm>table-
0f60: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 74 6f  name</yyterm>.to
0f70: 20 3c 79 79 74 65 72 6d 3e 6e 65 77 2d 74 61 62   <yyterm>new-tab
0f80: 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  le-name</yyterm>
0f90: 2e 29 5e 0a 54 68 69 73 20 63 6f 6d 6d 61 6e 64  .)^.This command
0fa0: 20 0a 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64   .cannot be used
0fb0: 20 74 6f 20 6d 6f 76 65 20 61 20 74 61 62 6c 65   to move a table
0fc0: 20 62 65 74 77 65 65 6e 20 61 74 74 61 63 68 65   between attache
0fd0: 64 20 64 61 74 61 62 61 73 65 73 2c 20 6f 6e 6c  d databases, onl
0fe0: 79 20 74 6f 20 72 65 6e 61 6d 65 20 0a 61 20 74  y to rename .a t
0ff0: 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68 65 20  able within the 
1000: 73 61 6d 65 20 64 61 74 61 62 61 73 65 2e 0a 5e  same database..^
1010: 49 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  If the table bei
1020: 6e 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20 74  ng renamed has t
1030: 72 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69 63  riggers or indic
1040: 65 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20 72  es, then these r
1050: 65 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20 74  emain.attached t
1060: 6f 20 74 68 65 20 74 61 62 6c 65 20 61 66 74 65  o the table afte
1070: 72 20 69 74 20 68 61 73 20 62 65 65 6e 20 72 65  r it has been re
1080: 6e 61 6d 65 64 2e 0a 0a 3c 62 6c 6f 63 6b 71 75  named...<blockqu
1090: 6f 74 65 20 73 74 79 6c 65 3d 27 62 61 63 6b 67  ote style='backg
10a0: 72 6f 75 6e 64 2d 63 6f 6c 6f 72 3a 20 23 66 66  round-color: #ff
10b0: 64 30 64 30 3b 27 3e 0a 3c 62 3e 43 6f 6d 70 61  d0d0;'>.<b>Compa
10c0: 74 69 62 69 6c 69 74 79 20 4e 6f 74 65 3a 3c 2f  tibility Note:</
10d0: 62 3e 0a 54 68 65 20 62 65 68 61 76 69 6f 72 20  b>.The behavior 
10e0: 6f 66 20 41 4c 54 45 52 20 54 41 42 4c 45 20 77  of ALTER TABLE w
10f0: 68 65 6e 20 72 65 6e 61 6d 69 6e 67 20 61 20 74  hen renaming a t
1100: 61 62 6c 65 20 77 61 73 20 65 6e 68 61 6e 63 65  able was enhance
1110: 64 0a 69 6e 20 76 65 72 73 69 6f 6e 73 20 33 2e  d.in versions 3.
1120: 32 35 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33 2e  25.0 ([dateof:3.
1130: 32 35 2e 30 5d 29 20 61 6e 64 20 33 2e 32 36 2e  25.0]) and 3.26.
1140: 30 20 28 5b 64 61 74 65 6f 66 3a 33 2e 32 36 2e  0 ([dateof:3.26.
1150: 30 5d 29 0a 69 6e 20 6f 72 64 65 72 20 74 6f 20  0]).in order to 
1160: 63 61 72 72 79 20 74 68 65 20 72 65 6e 61 6d 65  carry the rename
1170: 20 6f 70 65 72 61 74 69 6f 6e 20 66 6f 72 77 61   operation forwa
1180: 72 64 20 69 6e 74 6f 20 74 72 69 67 67 65 72 73  rd into triggers
1190: 20 61 6e 64 0a 76 69 65 77 73 20 74 68 61 74 20   and.views that 
11a0: 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 72 65  reference the re
11b0: 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 20 54 68  named table.  Th
11c0: 69 73 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  is is considered
11d0: 20 61 6e 0a 69 6d 70 72 6f 76 65 6d 65 6e 74 2e   an.improvement.
11e0: 20 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68   Applications th
11f0: 61 74 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 65  at depend on the
1200: 20 6f 6c 64 65 72 20 28 61 6e 64 0a 61 72 67 75   older (and.argu
1210: 61 62 6c 79 20 62 75 67 67 79 29 20 62 65 68 61  ably buggy) beha
1220: 76 69 6f 72 20 63 61 6e 20 75 73 65 20 74 68 65  vior can use the
1230: 0a 5b 50 52 41 47 4d 41 20 6c 65 67 61 63 79 5f  .[PRAGMA legacy_
1240: 61 6c 74 65 72 5f 74 61 62 6c 65 3d 4f 4e 5d 20  alter_table=ON] 
1250: 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 6d 61 6b  statement to mak
1260: 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20 52 45  e ALTER TABLE RE
1270: 4e 41 4d 45 0a 62 65 68 61 76 65 20 61 73 20 69  NAME.behave as i
1280: 74 20 64 69 64 20 70 72 69 6f 72 20 74 6f 20 76  t did prior to v
1290: 65 72 73 69 6f 6e 20 33 2e 32 35 2e 30 2e 0a 3c  ersion 3.25.0..<
12a0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
12b0: 3e 0a 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  >.Beginning with
12c0: 20 72 65 6c 65 61 73 65 20 33 2e 32 35 2e 30 20   release 3.25.0 
12d0: 28 5b 64 61 74 65 6f 66 3a 33 2e 32 35 2e 30 5d  ([dateof:3.25.0]
12e0: 29 2c 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  ), references to
12f0: 20 74 68 65 20 74 61 62 6c 65 0a 77 69 74 68 69   the table.withi
1300: 6e 20 74 72 69 67 67 65 72 20 62 6f 64 69 65 73  n trigger bodies
1310: 20 61 6e 64 20 76 69 65 77 20 64 65 66 69 6e 69   and view defini
1320: 74 69 6f 6e 73 20 61 72 65 20 61 6c 73 6f 20 72  tions are also r
1330: 65 6e 61 6d 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70  enamed..</p>..<p
1340: 3e 20 50 72 69 6f 72 20 74 6f 20 76 65 72 73 69  > Prior to versi
1350: 6f 6e 20 33 2e 32 36 2e 30 20 28 5b 64 61 74 65  on 3.26.0 ([date
1360: 6f 66 3a 33 2e 32 36 2e 30 5d 29 2c 20 46 4f 52  of:3.26.0]), FOR
1370: 45 49 47 4e 20 4b 45 59 20 72 65 66 65 72 65 6e  EIGN KEY referen
1380: 63 65 73 0a 74 6f 20 61 20 74 61 62 6c 65 20 74  ces.to a table t
1390: 68 61 74 20 69 73 20 72 65 6e 61 6d 65 64 20 77  hat is renamed w
13a0: 65 72 65 20 6f 6e 6c 79 20 65 64 69 74 65 64 20  ere only edited 
13b0: 69 66 20 74 68 65 0a 5b 50 52 41 47 4d 41 20 66  if the.[PRAGMA f
13c0: 6f 72 65 69 67 6e 5f 6b 65 79 73 3d 4f 4e 5d 2c  oreign_keys=ON],
13d0: 20 6f 72 20 69 6e 20 6f 74 68 65 72 20 77 6f 72   or in other wor
13e0: 64 73 20 69 66 0a 5b 66 6f 72 65 69 67 6e 20 6b  ds if.[foreign k
13f0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20  ey constraints] 
1400: 77 65 72 65 20 62 65 67 69 6e 20 65 6e 66 6f 72  were begin enfor
1410: 63 65 64 2e 20 20 57 69 74 68 0a 5b 50 52 41 47  ced.  With.[PRAG
1420: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3d  MA foreign_keys=
1430: 4f 46 46 5d 2c 20 46 4f 52 45 49 47 4e 20 4b 45  OFF], FOREIGN KE
1440: 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 6f  Y constraints wo
1450: 75 6c 64 20 6e 6f 74 20 62 65 20 63 68 61 6e 67  uld not be chang
1460: 65 64 0a 77 68 65 6e 20 74 68 65 20 74 61 62 6c  ed.when the tabl
1470: 65 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69  e that the forei
1480: 67 6e 20 6b 65 79 20 72 65 66 65 72 72 65 64 20  gn key referred 
1490: 74 6f 20 28 74 68 65 20 22 5b 70 61 72 65 6e 74  to (the "[parent
14a0: 20 74 61 62 6c 65 5d 22 29 0a 77 61 73 20 72 65   table]").was re
14b0: 6e 61 6d 65 64 2e 20 20 42 65 67 69 6e 6e 69 6e  named.  Beginnin
14c0: 67 20 77 69 74 68 20 76 65 72 73 69 6f 6e 20 33  g with version 3
14d0: 2e 32 36 2e 30 2c 20 46 4f 52 45 49 47 4e 20 4b  .26.0, FOREIGN K
14e0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a 61  EY constraints.a
14f0: 72 65 20 61 6c 77 61 79 73 20 63 6f 6e 76 65 72  re always conver
1500: 74 65 64 20 77 68 65 6e 20 61 20 74 61 62 6c 65  ted when a table
1510: 20 69 73 20 72 65 6e 61 6d 65 64 2c 20 75 6e 6c   is renamed, unl
1520: 65 73 73 20 74 68 65 0a 5b 50 52 41 47 4d 41 20  ess the.[PRAGMA 
1530: 6c 65 67 61 63 79 5f 61 6c 74 65 72 5f 74 61 62  legacy_alter_tab
1540: 6c 65 3d 4f 4e 5d 20 73 65 74 74 69 6e 67 20 69  le=ON] setting i
1550: 73 20 65 6e 67 61 67 65 64 2e 20 20 54 68 65 20  s engaged.  The 
1560: 66 6f 6c 6c 6f 77 69 6e 67 0a 74 61 62 6c 65 20  following.table 
1570: 73 75 6d 6d 61 72 69 65 73 20 74 68 65 20 64 69  summaries the di
1580: 66 66 65 72 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c  fference:</p>..<
1590: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
15a0: 6c 65 20 62 6f 72 64 65 72 3d 22 31 22 20 63 65  le border="1" ce
15b0: 6c 6c 70 61 64 64 69 6e 67 3d 22 32 22 20 63 65  llpadding="2" ce
15c0: 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c  llspacing="0">.<
15d0: 74 72 3e 0a 3c 74 68 3e 50 52 41 47 4d 41 20 66  tr>.<th>PRAGMA f
15e0: 6f 72 65 69 67 6e 5f 6b 65 79 73 0a 3c 74 68 3e  oreign_keys.<th>
15f0: 50 52 41 47 4d 41 20 6c 65 67 61 63 79 5f 61 6c  PRAGMA legacy_al
1600: 74 65 72 5f 74 61 62 6c 65 0a 3c 74 68 3e 5b 70  ter_table.<th>[p
1610: 61 72 65 6e 74 20 74 61 62 6c 65 7c 50 61 72 65  arent table|Pare
1620: 6e 74 20 54 61 62 6c 65 5d 0a 72 65 66 65 72 65  nt Table].refere
1630: 6e 63 65 73 20 61 72 65 20 75 70 64 61 74 65 64  nces are updated
1640: 0a 3c 74 68 3e 53 51 4c 69 74 65 20 76 65 72 73  .<th>SQLite vers
1650: 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  ion.<tr><td alig
1660: 6e 3d 22 63 65 6e 74 65 72 22 3e 4f 66 66 3c 74  n="center">Off<t
1670: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
1680: 3e 4f 66 66 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >Off<td align="c
1690: 65 6e 74 65 72 22 3e 4e 6f 3c 74 64 20 61 6c 69  enter">No<td ali
16a0: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 26 6c 74 3b  gn="center">&lt;
16b0: 20 33 2e 32 36 2e 30 0a 3c 74 72 3e 3c 74 64 20   3.26.0.<tr><td 
16c0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4f  align="center">O
16d0: 66 66 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  ff<td align="cen
16e0: 74 65 72 22 3e 4f 66 66 3c 74 64 20 61 6c 69 67  ter">Off<td alig
16f0: 6e 3d 22 63 65 6e 74 65 72 22 3e 59 65 73 3c 74  n="center">Yes<t
1700: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
1710: 3e 26 67 74 3b 3d 20 33 2e 32 36 2e 30 0a 3c 74  >&gt;= 3.26.0.<t
1720: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  r><td align="cen
1730: 74 65 72 22 3e 4f 6e 3c 74 64 20 61 6c 69 67 6e  ter">On<td align
1740: 3d 22 63 65 6e 74 65 72 22 3e 4f 66 66 3c 74 64  ="center">Off<td
1750: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
1760: 59 65 73 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  Yes<td align="ce
1770: 6e 74 65 72 22 3e 61 6c 6c 0a 3c 74 72 3e 3c 74  nter">all.<tr><t
1780: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
1790: 3e 4f 66 66 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >Off<td align="c
17a0: 65 6e 74 65 72 22 3e 4f 6e 3c 74 64 20 61 6c 69  enter">On<td ali
17b0: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 6f 3c 74  gn="center">No<t
17c0: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
17d0: 3e 61 6c 6c 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  >all.<tr><td ali
17e0: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4f 6e 3c 74  gn="center">On<t
17f0: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
1800: 3e 4f 6e 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  >On<td align="ce
1810: 6e 74 65 72 22 3e 59 65 73 3c 74 64 20 61 6c 69  nter">Yes<td ali
1820: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 61 6c 6c 0a  gn="center">all.
1830: 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
1840: 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  quote>..<tcl>hd_
1850: 66 72 61 67 6d 65 6e 74 20 61 6c 74 65 72 74 61  fragment alterta
1860: 62 6d 76 63 6f 6c 20 7b 41 4c 54 45 52 20 54 41  bmvcol {ALTER TA
1870: 42 4c 45 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d  BLE RENAME COLUM
1880: 4e 7d 20 7b 72 65 6e 61 6d 65 20 63 6f 6c 75 6d  N} {rename colum
1890: 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 41 4c 54  n}</tcl>.<h3>ALT
18a0: 45 52 20 54 41 42 4c 45 20 52 45 4e 41 4d 45 20  ER TABLE RENAME 
18b0: 43 4f 4c 55 4d 4e 3c 2f 68 33 3e 0a 0a 3c 70 3e  COLUMN</h3>..<p>
18c0: 20 54 68 65 20 52 45 4e 41 4d 45 20 43 4f 4c 55   The RENAME COLU
18d0: 4d 4e 20 54 4f 20 73 79 6e 74 61 78 20 63 68 61  MN TO syntax cha
18e0: 6e 67 65 73 20 74 68 65 0a 3c 79 79 74 65 72 6d  nges the.<yyterm
18f0: 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79  >column-name</yy
1900: 74 65 72 6d 3e 20 6f 66 20 74 61 62 6c 65 20 3c  term> of table <
1910: 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d  yyterm>table-nam
1920: 65 3c 2f 79 79 74 65 72 6d 3e 0a 69 6e 74 6f 20  e</yyterm>.into 
1930: 3c 79 79 74 65 72 6d 3e 6e 65 77 2d 63 6f 6c 75  <yyterm>new-colu
1940: 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  mn-name</yyterm>
1950: 2e 20 20 54 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  .  The column na
1960: 6d 65 20 69 73 20 63 68 61 6e 67 65 64 20 62 6f  me is changed bo
1970: 74 68 0a 77 69 74 68 69 6e 20 74 68 65 20 74 61  th.within the ta
1980: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ble definition i
1990: 74 73 65 6c 66 20 61 6e 64 20 61 6c 73 6f 20 77  tself and also w
19a0: 69 74 68 69 6e 20 61 6c 6c 20 69 6e 64 65 78 65  ithin all indexe
19b0: 73 2c 20 74 72 69 67 67 65 72 73 2c 0a 61 6e 64  s, triggers,.and
19c0: 20 76 69 65 77 73 20 74 68 61 74 20 72 65 66 65   views that refe
19d0: 72 65 6e 63 65 20 74 68 65 20 63 6f 6c 75 6d 6e  rence the column
19e0: 2e 20 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e  .  If the column
19f0: 20 6e 61 6d 65 20 63 68 61 6e 67 65 20 77 6f 75   name change wou
1a00: 6c 64 0a 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ld.result in a s
1a10: 65 6d 61 6e 74 69 63 20 61 6d 62 69 67 75 69 74  emantic ambiguit
1a20: 79 20 69 6e 20 61 20 74 72 69 67 67 65 72 20 6f  y in a trigger o
1a30: 72 20 76 69 65 77 2c 20 74 68 65 6e 20 74 68 65  r view, then the
1a40: 20 52 45 4e 41 4d 45 0a 43 4f 4c 55 4d 4e 20 66   RENAME.COLUMN f
1a50: 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72  ails with an err
1a60: 6f 72 20 61 6e 64 20 6e 6f 20 63 68 61 6e 67 65  or and no change
1a70: 73 20 61 72 65 20 61 70 70 6c 69 65 64 2e 0a 0a  s are applied...
1a80: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
1a90: 20 61 6c 74 65 72 74 61 62 61 64 64 63 6f 6c 20   altertabaddcol 
1aa0: 7b 41 4c 54 45 52 20 54 41 42 4c 45 20 41 44 44  {ALTER TABLE ADD
1ab0: 20 43 4f 4c 55 4d 4e 7d 20 7b 61 64 64 20 63 6f   COLUMN} {add co
1ac0: 6c 75 6d 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  lumn}</tcl>.<h3>
1ad0: 41 4c 54 45 52 20 54 41 42 4c 45 20 41 44 44 20  ALTER TABLE ADD 
1ae0: 43 4f 4c 55 4d 4e 3c 2f 68 33 3e 0a 0a 3c 70 3e  COLUMN</h3>..<p>
1af0: 20 5e 54 68 65 20 41 44 44 20 43 4f 4c 55 4d 4e   ^The ADD COLUMN
1b00: 20 73 79 6e 74 61 78 0a 69 73 20 75 73 65 64 20   syntax.is used 
1b10: 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
1b20: 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69 73 74 69  umn to an existi
1b30: 6e 67 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 6e  ng table..^The n
1b40: 65 77 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6c 77  ew column is alw
1b50: 61 79 73 20 61 70 70 65 6e 64 65 64 20 74 6f 20  ays appended to 
1b60: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c  the end of the l
1b70: 69 73 74 20 6f 66 20 65 78 69 73 74 69 6e 67 20  ist of existing 
1b80: 63 6f 6c 75 6d 6e 73 2e 0a 54 68 65 20 5b 63 6f  columns..The [co
1b90: 6c 75 6d 6e 2d 64 65 66 5d 20 72 75 6c 65 20 64  lumn-def] rule d
1ba0: 65 66 69 6e 65 73 20 74 68 65 20 63 68 61 72 61  efines the chara
1bb0: 63 74 65 72 69 73 74 69 63 73 20 6f 66 20 74 68  cteristics of th
1bc0: 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 2e 0a 5e 28  e new column..^(
1bd0: 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 6d  The new column m
1be0: 61 79 20 74 61 6b 65 20 61 6e 79 20 6f 66 20 74  ay take any of t
1bf0: 68 65 20 66 6f 72 6d 73 20 70 65 72 6d 69 73 73  he forms permiss
1c00: 69 62 6c 65 20 69 6e 20 61 20 5b 43 52 45 41 54  ible in a [CREAT
1c10: 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65  E TABLE].stateme
1c20: 6e 74 2c 20 77 69 74 68 20 74 68 65 20 66 6f 6c  nt, with the fol
1c30: 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69  lowing restricti
1c40: 6f 6e 73 3a 29 5e 0a 3c 75 6c 3e 0a 3c 6c 69 3e  ons:)^.<ul>.<li>
1c50: 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20  ^The column may 
1c60: 6e 6f 74 20 68 61 76 65 20 61 20 50 52 49 4d 41  not have a PRIMA
1c70: 52 59 20 4b 45 59 20 6f 72 20 55 4e 49 51 55 45  RY KEY or UNIQUE
1c80: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 3c 2f 6c 69   constraint.</li
1c90: 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c 75 6d  >.<li>^The colum
1ca0: 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65 20 61  n may not have a
1cb0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
1cc0: 66 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20  f CURRENT_TIME, 
1cd0: 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20 0a 20  CURRENT_DATE, . 
1ce0: 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53     CURRENT_TIMES
1cf0: 54 41 4d 50 2c 20 6f 72 20 61 6e 20 65 78 70 72  TAMP, or an expr
1d00: 65 73 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74  ession in parent
1d10: 68 65 73 65 73 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e  heses.</li>.<li>
1d20: 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  ^If a NOT NULL c
1d30: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 73 70 65  onstraint is spe
1d40: 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65  cified, then the
1d50: 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 68 61 76   column must hav
1d60: 65 20 61 0a 20 20 20 20 64 65 66 61 75 6c 74 20  e a.    default 
1d70: 76 61 6c 75 65 20 6f 74 68 65 72 20 74 68 61 6e  value other than
1d80: 20 4e 55 4c 4c 2e 0a 3c 6c 69 3e 5e 49 66 20 5b   NULL..<li>^If [
1d90: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
1da0: 74 72 61 69 6e 74 73 5d 20 61 72 65 20 5b 66 6f  traints] are [fo
1db0: 72 65 69 67 6e 5f 6b 65 79 73 20 70 72 61 67 6d  reign_keys pragm
1dc0: 61 20 7c 20 65 6e 61 62 6c 65 64 5d 20 61 6e 64  a | enabled] and
1dd0: 0a 20 20 20 20 61 20 63 6f 6c 75 6d 6e 20 77 69  .    a column wi
1de0: 74 68 20 61 20 5b 66 6f 72 65 69 67 6e 2d 6b 65  th a [foreign-ke
1df0: 79 2d 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52  y-clause | REFER
1e00: 45 4e 43 45 53 20 63 6c 61 75 73 65 5d 0a 20 20  ENCES clause].  
1e10: 20 20 69 73 20 61 64 64 65 64 2c 20 74 68 65 20    is added, the 
1e20: 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 68 61 76 65  column must have
1e30: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
1e40: 20 6f 66 20 4e 55 4c 4c 2e 0a 3c 2f 75 6c 3e 0a   of NULL..</ul>.
1e50: 0a 3c 70 3e 5e 4e 6f 74 65 20 61 6c 73 6f 20 74  .<p>^Note also t
1e60: 68 61 74 20 77 68 65 6e 20 61 64 64 69 6e 67 20  hat when adding 
1e70: 61 20 5b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  a [CHECK constra
1e80: 69 6e 74 5d 2c 20 74 68 65 20 43 48 45 43 4b 20  int], the CHECK 
1e90: 63 6f 6e 73 74 72 61 69 6e 74 0a 69 73 20 6e 6f  constraint.is no
1ea0: 74 20 74 65 73 74 65 64 20 61 67 61 69 6e 73 74  t tested against
1eb0: 20 70 72 65 65 78 69 73 74 69 6e 67 20 72 6f 77   preexisting row
1ec0: 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 0a  s of the table..
1ed0: 5e 54 68 69 73 20 63 61 6e 20 72 65 73 75 6c 74  ^This can result
1ee0: 20 69 6e 20 61 20 74 61 62 6c 65 20 74 68 61 74   in a table that
1ef0: 20 63 6f 6e 74 61 69 6e 73 20 64 61 74 61 20 74   contains data t
1f00: 68 61 74 0a 69 73 20 69 6e 20 76 69 6f 6c 61 74  hat.is in violat
1f10: 69 6f 6e 20 6f 66 20 74 68 65 20 43 48 45 43 4b  ion of the CHECK
1f20: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 20 46 75   constraint.  Fu
1f30: 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
1f40: 20 53 51 4c 69 74 65 20 6d 69 67 68 74 0a 63 68   SQLite might.ch
1f50: 61 6e 67 65 20 74 6f 20 76 61 6c 69 64 61 74 65  ange to validate
1f60: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
1f70: 74 73 20 61 73 20 74 68 65 79 20 61 72 65 20 61  ts as they are a
1f80: 64 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  dded.</p>..<p>Th
1f90: 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f  e ALTER TABLE co
1fa0: 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 62 79 20 6d  mmand works by m
1fb0: 6f 64 69 66 79 69 6e 67 20 74 68 65 20 53 51 4c  odifying the SQL
1fc0: 20 74 65 78 74 20 6f 66 20 74 68 65 20 73 63 68   text of the sch
1fd0: 65 6d 61 0a 73 74 6f 72 65 64 20 69 6e 20 74 68  ema.stored in th
1fe0: 65 20 5b 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  e [sqlite_master
1ff0: 20 74 61 62 6c 65 5d 2e 0a 4e 6f 20 63 68 61 6e   table]..No chan
2000: 67 65 73 20 61 72 65 20 6d 61 64 65 20 74 6f 20  ges are made to 
2010: 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 2e 0a 42  table content..B
2020: 65 63 61 75 73 65 20 6f 66 20 74 68 69 73 2c 0a  ecause of this,.
2030: 74 68 65 20 65 78 65 63 75 74 69 6f 6e 20 74 69  the execution ti
2040: 6d 65 20 6f 66 20 74 68 65 20 41 4c 54 45 52 20  me of the ALTER 
2050: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 73  TABLE command is
2060: 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 6f 66 0a   independent of.
2070: 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61  the amount of da
2080: 74 61 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ta in the table.
2090: 20 20 54 68 65 20 41 4c 54 45 52 20 54 41 42 4c    The ALTER TABL
20a0: 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 61  E command runs a
20b0: 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20 61 20 74  s quickly.on a t
20c0: 61 62 6c 65 20 77 69 74 68 20 31 30 20 6d 69 6c  able with 10 mil
20d0: 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20 69 74 20  lion rows as it 
20e0: 64 6f 65 73 20 6f 6e 20 61 20 74 61 62 6c 65 20  does on a table 
20f0: 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c 2f 70 3e  with 1 row..</p>
2100: 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44 44 20 43  ..<p>After ADD C
2110: 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65 6e 20 72  OLUMN has been r
2120: 75 6e 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65  un on a database
2130: 2c 20 74 68 61 74 20 64 61 74 61 62 61 73 65 20  , that database 
2140: 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72 65 61 64  will not.be read
2150: 61 62 6c 65 20 62 79 20 53 51 4c 69 74 65 20 76  able by SQLite v
2160: 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20 28 5b 64  ersion 3.1.3 ([d
2170: 61 74 65 6f 66 3a 33 2e 31 2e 33 5d 29 20 61 6e  ateof:3.1.3]) an
2180: 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70 3e 0a 0a  d earlier.</p>..
2190: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
21a0: 20 6f 74 68 65 72 61 6c 74 65 72 20 7b 67 65 6e   otheralter {gen
21b0: 65 72 61 6c 69 7a 65 64 20 41 4c 54 45 52 20 54  eralized ALTER T
21c0: 41 42 4c 45 20 70 72 6f 63 65 64 75 72 65 7d 3c  ABLE procedure}<
21d0: 2f 74 63 6c 3e 0a 3c 68 33 3e 4d 61 6b 69 6e 67  /tcl>.<h3>Making
21e0: 20 4f 74 68 65 72 20 4b 69 6e 64 73 20 4f 66 20   Other Kinds Of 
21f0: 54 61 62 6c 65 20 53 63 68 65 6d 61 20 43 68 61  Table Schema Cha
2200: 6e 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 54  nges</h3>..<p> T
2210: 68 65 20 6f 6e 6c 79 20 73 63 68 65 6d 61 20 61  he only schema a
2220: 6c 74 65 72 69 6e 67 20 63 6f 6d 6d 61 6e 64 73  ltering commands
2230: 20 64 69 72 65 63 74 6c 79 20 73 75 70 70 6f 72   directly suppor
2240: 74 65 64 20 62 79 20 53 51 4c 69 74 65 20 61 72  ted by SQLite ar
2250: 65 20 74 68 65 0a 22 5b 72 65 6e 61 6d 65 20 74  e the."[rename t
2260: 61 62 6c 65 5d 22 2c 20 22 5b 72 65 6e 61 6d 65  able]", "[rename
2270: 20 63 6f 6c 75 6d 6e 5d 22 2c 20 61 6e 64 20 22   column]", and "
2280: 5b 61 64 64 20 63 6f 6c 75 6d 6e 5d 22 20 63 6f  [add column]" co
2290: 6d 6d 61 6e 64 73 20 73 68 6f 77 6e 20 61 62 6f  mmands shown abo
22a0: 76 65 2e 20 20 0a 48 6f 77 65 76 65 72 2c 20 61  ve.  .However, a
22b0: 70 70 6c 69 63 61 74 69 6f 6e 73 0a 63 61 6e 20  pplications.can 
22c0: 6d 61 6b 65 20 6f 74 68 65 72 20 61 72 62 69 74  make other arbit
22d0: 72 61 72 79 20 63 68 61 6e 67 65 73 20 74 6f 20  rary changes to 
22e0: 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20  the format of a 
22f0: 74 61 62 6c 65 20 75 73 69 6e 67 20 61 20 73 69  table using a si
2300: 6d 70 6c 65 0a 73 65 71 75 65 6e 63 65 20 6f 66  mple.sequence of
2310: 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 54 68 65   operations..The
2320: 20 73 74 65 70 73 20 74 6f 20 6d 61 6b 65 20 61   steps to make a
2330: 72 62 69 74 72 61 72 79 20 63 68 61 6e 67 65 73  rbitrary changes
2340: 20 74 6f 20 74 68 65 20 73 63 68 65 6d 61 20 64   to the schema d
2350: 65 73 69 67 6e 20 6f 66 20 73 6f 6d 65 20 74 61  esign of some ta
2360: 62 6c 65 20 58 0a 61 72 65 20 61 73 20 66 6f 6c  ble X.are as fol
2370: 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  lows:..<ol>.<li>
2380: 3c 70 3e 0a 49 66 20 66 6f 72 65 69 67 6e 20 6b  <p>.If foreign k
2390: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  ey constraints a
23a0: 72 65 20 65 6e 61 62 6c 65 64 2c 20 64 69 73 61  re enabled, disa
23b0: 62 6c 65 20 74 68 65 6d 20 75 73 69 6e 67 20 5b  ble them using [
23c0: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
23d0: 65 79 73 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69 3e 3c  eys=OFF]...<li><
23e0: 70 3e 0a 53 74 61 72 74 20 61 20 74 72 61 6e 73  p>.Start a trans
23f0: 61 63 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e  action...<li><p>
2400: 0a 52 65 6d 65 6d 62 65 72 20 74 68 65 20 66 6f  .Remember the fo
2410: 72 6d 61 74 20 6f 66 20 61 6c 6c 20 69 6e 64 65  rmat of all inde
2420: 78 65 73 20 61 6e 64 20 74 72 69 67 67 65 72 73  xes and triggers
2430: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
2440: 20 74 61 62 6c 65 20 58 2e 0a 54 68 69 73 20 69   table X..This i
2450: 6e 66 6f 72 6d 61 74 69 6f 6e 20 77 69 6c 6c 20  nformation will 
2460: 62 65 20 6e 65 65 64 65 64 20 69 6e 20 73 74 65  be needed in ste
2470: 70 20 38 20 62 65 6c 6f 77 2e 20 20 4f 6e 65 20  p 8 below.  One 
2480: 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69  way to do this i
2490: 73 0a 74 6f 20 72 75 6e 20 61 20 71 75 65 72 79  s.to run a query
24a0: 20 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77   like the follow
24b0: 69 6e 67 3a 0a 53 45 4c 45 43 54 20 74 79 70 65  ing:.SELECT type
24c0: 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74  , sql FROM sqlit
24d0: 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74  e_master WHERE t
24e0: 62 6c 5f 6e 61 6d 65 3d 27 58 27 2e 0a 0a 3c 6c  bl_name='X'...<l
24f0: 69 3e 3c 70 3e 0a 55 73 65 20 5b 43 52 45 41 54  i><p>.Use [CREAT
2500: 45 20 54 41 42 4c 45 5d 20 74 6f 20 63 6f 6e 73  E TABLE] to cons
2510: 74 72 75 63 74 20 61 20 6e 65 77 20 74 61 62 6c  truct a new tabl
2520: 65 20 22 6e 65 77 5f 58 22 20 74 68 61 74 20 69  e "new_X" that i
2530: 73 20 69 6e 20 74 68 65 20 64 65 73 69 72 65 64  s in the desired
2540: 0a 72 65 76 69 73 65 64 20 66 6f 72 6d 61 74 20  .revised format 
2550: 6f 66 20 74 61 62 6c 65 20 58 2e 20 20 4d 61 6b  of table X.  Mak
2560: 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20  e sure that the 
2570: 6e 61 6d 65 20 22 6e 65 77 5f 58 22 20 64 6f 65  name "new_X" doe
2580: 73 20 6e 6f 74 20 63 6f 6c 6c 69 64 65 0a 77 69  s not collide.wi
2590: 74 68 20 61 6e 79 20 65 78 69 73 74 69 6e 67 20  th any existing 
25a0: 74 61 62 6c 65 20 6e 61 6d 65 2c 20 6f 66 20 63  table name, of c
25b0: 6f 75 72 73 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ourse...<li><p>.
25c0: 54 72 61 6e 73 66 65 72 20 63 6f 6e 74 65 6e 74  Transfer content
25d0: 20 66 72 6f 6d 20 58 20 69 6e 74 6f 20 6e 65 77   from X into new
25e0: 5f 58 20 75 73 69 6e 67 20 61 20 73 74 61 74 65  _X using a state
25f0: 6d 65 6e 74 0a 6c 69 6b 65 3a 20 49 4e 53 45 52  ment.like: INSER
2600: 54 20 49 4e 54 4f 20 6e 65 77 5f 58 20 53 45 4c  T INTO new_X SEL
2610: 45 43 54 20 2e 2e 2e 20 46 52 4f 4d 20 58 2e 0a  ECT ... FROM X..
2620: 0a 3c 6c 69 3e 3c 70 3e 0a 44 72 6f 70 20 74 68  .<li><p>.Drop th
2630: 65 20 6f 6c 64 20 74 61 62 6c 65 20 58 3a 20 20  e old table X:  
2640: 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 44 52  [DROP TABLE | DR
2650: 4f 50 20 54 41 42 4c 45 20 58 5d 2e 0a 0a 3c 6c  OP TABLE X]...<l
2660: 69 3e 3c 70 3e 0a 43 68 61 6e 67 65 20 74 68 65  i><p>.Change the
2670: 20 6e 61 6d 65 20 6f 66 20 6e 65 77 5f 58 20 74   name of new_X t
2680: 6f 20 58 20 75 73 69 6e 67 3a 20 41 4c 54 45 52  o X using: ALTER
2690: 20 54 41 42 4c 45 20 6e 65 77 5f 58 20 52 45 4e   TABLE new_X REN
26a0: 41 4d 45 20 54 4f 20 58 2e 0a 0a 3c 6c 69 3e 3c  AME TO X...<li><
26b0: 70 3e 0a 55 73 65 20 5b 43 52 45 41 54 45 20 49  p>.Use [CREATE I
26c0: 4e 44 45 58 5d 20 61 6e 64 20 5b 43 52 45 41 54  NDEX] and [CREAT
26d0: 45 20 54 52 49 47 47 45 52 5d 20 74 6f 20 72 65  E TRIGGER] to re
26e0: 63 6f 6e 73 74 72 75 63 74 20 69 6e 64 65 78 65  construct indexe
26f0: 73 20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61  s and triggers.a
2700: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
2710: 61 62 6c 65 20 58 2e 20 20 50 65 72 68 61 70 73  able X.  Perhaps
2720: 20 75 73 65 20 74 68 65 20 6f 6c 64 20 66 6f 72   use the old for
2730: 6d 61 74 20 6f 66 20 74 68 65 20 74 72 69 67 67  mat of the trigg
2740: 65 72 73 20 61 6e 64 0a 69 6e 64 65 78 65 73 20  ers and.indexes 
2750: 73 61 76 65 64 20 66 72 6f 6d 20 73 74 65 70 20  saved from step 
2760: 33 20 61 62 6f 76 65 20 61 73 20 61 20 67 75 69  3 above as a gui
2770: 64 65 2c 20 6d 61 6b 69 6e 67 20 63 68 61 6e 67  de, making chang
2780: 65 73 20 61 73 20 61 70 70 72 6f 70 72 69 61 74  es as appropriat
2790: 65 0a 66 6f 72 20 74 68 65 20 61 6c 74 65 72 61  e.for the altera
27a0: 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 49 66  tion...<li><p>If
27b0: 20 61 6e 79 20 76 69 65 77 73 20 72 65 66 65 72   any views refer
27c0: 20 74 6f 20 74 61 62 6c 65 20 58 20 69 6e 20 61   to table X in a
27d0: 20 77 61 79 20 74 68 61 74 20 69 73 20 61 66 66   way that is aff
27e0: 65 63 74 65 64 20 62 79 20 74 68 65 0a 73 63 68  ected by the.sch
27f0: 65 6d 61 20 63 68 61 6e 67 65 2c 20 74 68 65 6e  ema change, then
2800: 20 64 72 6f 70 20 74 68 6f 73 65 20 76 69 65 77   drop those view
2810: 73 20 75 73 69 6e 67 20 5b 44 52 4f 50 20 56 49  s using [DROP VI
2820: 45 57 5d 20 61 6e 64 20 72 65 63 72 65 61 74 65  EW] and recreate
2830: 20 74 68 65 6d 0a 77 69 74 68 20 77 68 61 74 65   them.with whate
2840: 76 65 72 20 63 68 61 6e 67 65 73 20 61 72 65 20  ver changes are 
2850: 6e 65 63 65 73 73 61 72 79 20 74 6f 20 61 63 63  necessary to acc
2860: 6f 6d 6d 6f 64 61 74 65 20 74 68 65 20 73 63 68  ommodate the sch
2870: 65 6d 61 20 63 68 61 6e 67 65 0a 75 73 69 6e 67  ema change.using
2880: 20 5b 43 52 45 41 54 45 20 56 49 45 57 5d 2e 0a   [CREATE VIEW]..
2890: 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65  .<li><p>.If fore
28a0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
28b0: 6e 74 73 20 77 65 72 65 20 6f 72 69 67 69 6e 61  nts were origina
28c0: 6c 6c 79 20 65 6e 61 62 6c 65 64 0a 74 68 65 6e  lly enabled.then
28d0: 20 72 75 6e 20 5b 50 52 41 47 4d 41 20 66 6f 72   run [PRAGMA for
28e0: 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 5d 20  eign_key_check] 
28f0: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
2900: 68 65 20 73 63 68 65 6d 61 0a 63 68 61 6e 67 65  he schema.change
2910: 20 64 69 64 20 6e 6f 74 20 62 72 65 61 6b 20 61   did not break a
2920: 6e 79 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ny foreign key c
2930: 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 0a 3c 6c  onstraints....<l
2940: 69 3e 3c 70 3e 0a 43 6f 6d 6d 69 74 20 74 68 65  i><p>.Commit the
2950: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
2960: 72 74 65 64 20 69 6e 20 73 74 65 70 20 32 2e 0a  rted in step 2..
2970: 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65  .<li><p>.If fore
2980: 69 67 6e 20 6b 65 79 73 20 63 6f 6e 73 74 72 61  ign keys constra
2990: 69 6e 74 73 20 77 65 72 65 20 6f 72 69 67 69 6e  ints were origin
29a0: 61 6c 6c 79 20 65 6e 61 62 6c 65 64 2c 20 72 65  ally enabled, re
29b0: 65 6e 61 62 6c 65 20 74 68 65 6d 20 6e 6f 77 2e  enable them now.
29c0: 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  .</ol>..<tcl>hd_
29d0: 66 72 61 67 6d 65 6e 74 20 63 61 75 74 69 6f 6e  fragment caution
29e0: 3c 2f 74 63 6c 3e 0a 3c 70 3e 0a 3c 62 3e 43 61  </tcl>.<p>.<b>Ca
29f0: 75 74 69 6f 6e 3a 3c 2f 62 3e 0a 54 61 6b 65 20  ution:</b>.Take 
2a00: 63 61 72 65 20 74 6f 20 66 6f 6c 6c 6f 77 20 74  care to follow t
2a10: 68 65 20 70 72 6f 63 65 64 75 72 65 20 61 62 6f  he procedure abo
2a20: 76 65 20 70 72 65 63 69 73 65 6c 79 2e 20 20 54  ve precisely.  T
2a30: 68 65 20 62 6f 78 65 73 20 62 65 6c 6f 77 0a 73  he boxes below.s
2a40: 75 6d 6d 61 72 69 7a 65 20 74 77 6f 20 70 72 6f  ummarize two pro
2a50: 63 65 64 75 72 65 73 20 66 6f 72 20 6d 6f 64 69  cedures for modi
2a60: 66 79 69 6e 67 20 61 20 74 61 62 6c 65 20 64 65  fying a table de
2a70: 66 69 6e 69 74 69 6f 6e 2e 20 20 41 74 20 66 69  finition.  At fi
2a80: 72 73 74 0a 67 6c 61 6e 63 65 2c 20 74 68 65 79  rst.glance, they
2a90: 20 62 6f 74 68 20 61 70 70 65 61 72 20 74 6f 20   both appear to 
2aa0: 61 63 63 6f 6d 70 6c 69 73 68 20 74 68 65 20 73  accomplish the s
2ab0: 61 6d 65 20 74 68 69 6e 67 2e 20 20 48 6f 77 65  ame thing.  Howe
2ac0: 76 65 72 2c 20 74 68 65 0a 70 72 6f 63 65 64 75  ver, the.procedu
2ad0: 72 65 20 6f 6e 20 74 68 65 20 72 69 67 68 74 20  re on the right 
2ae0: 64 6f 65 73 20 6e 6f 74 20 61 6c 77 61 79 73 20  does not always 
2af0: 77 6f 72 6b 2c 20 65 73 70 65 63 69 61 6c 6c 79  work, especially
2b00: 20 77 69 74 68 20 74 68 65 0a 65 6e 68 61 6e 63   with the.enhanc
2b10: 65 64 20 5b 72 65 6e 61 6d 65 20 74 61 62 6c 65  ed [rename table
2b20: 5d 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 61  ] capabilities a
2b30: 64 64 65 64 20 62 79 20 76 65 72 73 69 6f 6e 73  dded by versions
2b40: 20 33 2e 32 35 2e 30 20 61 6e 64 0a 33 2e 32 36   3.25.0 and.3.26
2b50: 2e 30 2e 20 20 49 6e 20 74 68 65 20 70 72 6f 63  .0.  In the proc
2b60: 65 64 75 72 65 20 6f 6e 20 74 68 65 20 72 69 67  edure on the rig
2b70: 68 74 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 20  ht, the initial 
2b80: 72 65 6e 61 6d 65 20 6f 66 20 74 68 65 0a 74 61  rename of the.ta
2b90: 62 6c 65 20 74 6f 20 61 20 74 65 6d 70 6f 72 61  ble to a tempora
2ba0: 72 79 20 6e 61 6d 65 20 6d 69 67 68 74 20 63 6f  ry name might co
2bb0: 72 72 75 70 74 20 72 65 66 65 72 65 6e 63 65 73  rrupt references
2bc0: 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 69   to that table i
2bd0: 6e 0a 74 72 69 67 67 65 72 73 2c 20 76 69 65 77  n.triggers, view
2be0: 73 2c 20 61 6e 64 20 66 6f 72 65 69 67 6e 20 6b  s, and foreign k
2bf0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20  ey constraints. 
2c00: 20 54 68 65 20 73 61 66 65 20 70 72 6f 63 65 64   The safe proced
2c10: 75 72 65 20 6f 6e 0a 74 68 65 20 6c 65 66 74 20  ure on.the left 
2c20: 63 6f 6e 73 74 72 75 63 74 73 20 74 68 65 20 72  constructs the r
2c30: 65 76 69 73 65 64 20 74 61 62 6c 65 20 64 65 66  evised table def
2c40: 69 6e 69 74 69 6f 6e 20 75 73 69 6e 67 20 61 20  inition using a 
2c50: 6e 65 77 20 74 65 6d 70 6f 72 61 72 79 0a 6e 61  new temporary.na
2c60: 6d 65 2c 20 74 68 65 6e 20 72 65 6e 61 6d 65 73  me, then renames
2c70: 20 74 68 65 20 74 61 62 6c 65 20 69 6e 74 6f 20   the table into 
2c80: 69 74 73 20 66 69 6e 61 6c 20 6e 61 6d 65 2c 20  its final name, 
2c90: 77 68 69 63 68 20 64 6f 65 73 20 6e 6f 74 20 62  which does not b
2ca0: 72 65 61 6b 0a 6c 69 6e 6b 73 2e 0a 0a 3c 63 65  reak.links...<ce
2cb0: 6e 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  nter>.<table bor
2cc0: 64 65 72 3d 22 31 22 20 63 65 6c 6c 70 61 64 64  der="1" cellpadd
2cd0: 69 6e 67 3d 22 31 30 22 20 63 65 6c 6c 73 70 61  ing="10" cellspa
2ce0: 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 0a 3c  cing="0">.<tr>.<
2cf0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
2d00: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 43 72 65 61 74 65  .<ol>.<li>Create
2d10: 20 6e 65 77 20 74 61 62 6c 65 0a 3c 6c 69 3e 43   new table.<li>C
2d20: 6f 70 79 20 64 61 74 61 0a 3c 6c 69 3e 44 72 6f  opy data.<li>Dro
2d30: 70 20 6f 6c 64 20 74 61 62 6c 65 0a 3c 6c 69 3e  p old table.<li>
2d40: 52 65 6e 61 6d 65 20 6e 65 77 20 69 6e 74 6f 20  Rename new into 
2d50: 6f 6c 64 0a 3c 2f 6f 6c 3e 0a 3c 74 64 20 76 61  old.</ol>.<td va
2d60: 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 3c 6f 6c 3e  lign="top">.<ol>
2d70: 0a 3c 6c 69 3e 52 65 6e 61 6d 65 20 6f 6c 64 20  .<li>Rename old 
2d80: 74 61 62 6c 65 0a 3c 6c 69 3e 43 72 65 61 74 65  table.<li>Create
2d90: 20 6e 65 77 20 74 61 62 6c 65 0a 3c 6c 69 3e 43   new table.<li>C
2da0: 6f 70 79 20 64 61 74 61 0a 3c 6c 69 3e 44 72 6f  opy data.<li>Dro
2db0: 70 20 6f 6c 64 20 74 61 62 6c 65 0a 3c 2f 6f 6c  p old table.</ol
2dc0: 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 26 75 61 72 72  >.<tr>.<th>&uarr
2dd0: 3b 3c 62 72 3e 43 6f 72 72 65 63 74 0a 3c 74 68  ;<br>Correct.<th
2de0: 3e 26 75 61 72 72 3b 3c 62 72 3e 49 6e 63 6f 72  >&uarr;<br>Incor
2df0: 72 65 63 74 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  rect.</table>.</
2e00: 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 54 68 65 20  center>..<p>The 
2e10: 31 32 2d 73 74 65 70 20 5b 67 65 6e 65 72 61 6c  12-step [general
2e20: 69 7a 65 64 20 41 4c 54 45 52 20 54 41 42 4c 45  ized ALTER TABLE
2e30: 20 70 72 6f 63 65 64 75 72 65 5d 0a 61 62 6f 76   procedure].abov
2e40: 65 20 77 69 6c 6c 20 77 6f 72 6b 20 65 76 65 6e  e will work even
2e50: 20 69 66 20 74 68 65 0a 73 63 68 65 6d 61 20 63   if the.schema c
2e60: 68 61 6e 67 65 20 63 61 75 73 65 73 20 74 68 65  hange causes the
2e70: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 74 6f   information sto
2e80: 72 65 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65  red in the table
2e90: 20 74 6f 20 63 68 61 6e 67 65 2e 0a 53 6f 20 74   to change..So t
2ea0: 68 65 20 66 75 6c 6c 20 31 32 2d 73 74 65 70 20  he full 12-step 
2eb0: 70 72 6f 63 65 64 75 72 65 20 61 62 6f 76 65 20  procedure above 
2ec0: 69 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  is appropriate f
2ed0: 6f 72 20 64 72 6f 70 70 69 6e 67 20 61 20 63 6f  or dropping a co
2ee0: 6c 75 6d 6e 2c 0a 63 68 61 6e 67 69 6e 67 20 74  lumn,.changing t
2ef0: 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75  he order of colu
2f00: 6d 6e 73 2c 20 61 64 64 69 6e 67 20 6f 72 20 72  mns, adding or r
2f10: 65 6d 6f 76 69 6e 67 20 61 20 55 4e 49 51 55 45  emoving a UNIQUE
2f20: 20 63 6f 6e 73 74 72 61 69 6e 74 0a 6f 72 20 50   constraint.or P
2f30: 52 49 4d 41 52 59 20 4b 45 59 2c 20 61 64 64 69  RIMARY KEY, addi
2f40: 6e 67 20 43 48 45 43 4b 20 6f 72 20 46 4f 52 45  ng CHECK or FORE
2f50: 49 47 4e 20 4b 45 59 20 6f 72 20 4e 4f 54 20 4e  IGN KEY or NOT N
2f60: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  ULL constraints,
2f70: 0a 6f 72 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .or changing the
2f80: 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 61 20   datatype for a 
2f90: 63 6f 6c 75 6d 6e 2c 20 66 6f 72 20 65 78 61 6d  column, for exam
2fa0: 70 6c 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 61  ple.  However, a
2fb0: 20 73 69 6d 70 6c 65 72 0a 61 6e 64 20 66 61 73   simpler.and fas
2fc0: 74 65 72 20 70 72 6f 63 65 64 75 72 65 20 63 61  ter procedure ca
2fd0: 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20  n optionally be 
2fe0: 75 73 65 64 20 66 6f 72 0a 73 6f 6d 65 20 63 68  used for.some ch
2ff0: 61 6e 67 65 73 20 74 68 61 74 20 64 6f 20 6e 6f  anges that do no
3000: 20 61 66 66 65 63 74 20 74 68 65 20 6f 6e 2d 64   affect the on-d
3010: 69 73 6b 20 63 6f 6e 74 65 6e 74 20 69 6e 20 61  isk content in a
3020: 6e 79 20 77 61 79 2e 0a 54 68 65 20 66 6f 6c 6c  ny way..The foll
3030: 6f 77 69 6e 67 20 73 69 6d 70 6c 65 72 20 70 72  owing simpler pr
3040: 6f 63 65 64 75 72 65 20 69 73 20 61 70 70 72 6f  ocedure is appro
3050: 70 72 69 61 74 65 20 66 6f 72 20 72 65 6d 6f 76  priate for remov
3060: 69 6e 67 0a 43 48 45 43 4b 20 6f 72 20 46 4f 52  ing.CHECK or FOR
3070: 45 49 47 4e 20 4b 45 59 20 6f 72 20 4e 4f 54 20  EIGN KEY or NOT 
3080: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73  NULL constraints
3090: 2c 0a 6f 72 20 61 64 64 69 6e 67 2c 20 72 65 6d  ,.or adding, rem
30a0: 6f 76 69 6e 67 2c 20 6f 72 20 63 68 61 6e 67 69  oving, or changi
30b0: 6e 67 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  ng default value
30c0: 73 20 6f 6e 0a 61 20 63 6f 6c 75 6d 6e 2e 0a 0a  s on.a column...
30d0: 3c 6f 6c 3e 0a 3c 6c 49 3e 3c 70 3e 20 53 74 61  <ol>.<lI><p> Sta
30e0: 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
30f0: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 52 75 6e 20 5b  ...<li><p> Run [
3100: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
3110: 72 73 69 6f 6e 5d 20 74 6f 20 64 65 74 65 72 6d  rsion] to determ
3120: 69 6e 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ine the current 
3130: 73 63 68 65 6d 61 0a 76 65 72 73 69 6f 6e 20 6e  schema.version n
3140: 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6e 75 6d  umber.  This num
3150: 62 65 72 20 77 69 6c 6c 20 62 65 20 6e 65 65 64  ber will be need
3160: 65 64 20 66 6f 72 20 73 74 65 70 20 36 20 62 65  ed for step 6 be
3170: 6c 6f 77 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 41 63  low...<li><p> Ac
3180: 74 69 76 61 74 65 20 73 63 68 65 6d 61 20 65 64  tivate schema ed
3190: 69 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50 52  iting using .[PR
31a0: 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63  AGMA writable_sc
31b0: 68 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77 72  hema | PRAGMA wr
31c0: 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e  itable_schema=ON
31d0: 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 52 75 6e 20  ]...<li><p> Run 
31e0: 61 6e 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74  an [UPDATE] stat
31f0: 65 6d 65 6e 74 20 74 6f 20 63 68 61 6e 67 65 20  ement to change 
3200: 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  the definition o
3210: 66 20 74 61 62 6c 65 20 58 0a 69 6e 20 74 68 65  f table X.in the
3220: 20 5b 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20   [sqlite_master 
3230: 74 61 62 6c 65 5d 3a 20 0a 55 50 44 41 54 45 20  table]: .UPDATE 
3240: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 53 45  sqlite_master SE
3250: 54 20 73 71 6c 3d 2e 2e 2e 20 57 48 45 52 45 20  T sql=... WHERE 
3260: 74 79 70 65 3d 27 74 61 62 6c 65 27 20 41 4e 44  type='table' AND
3270: 20 6e 61 6d 65 3d 27 58 27 3b 0a 3c 70 3e 3c 65   name='X';.<p><e
3280: 6d 3e 43 61 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20  m>Caution:</em> 
3290: 20 4d 61 6b 69 6e 67 20 61 20 63 68 61 6e 67 65   Making a change
32a0: 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   to the sqlite_m
32b0: 61 73 74 65 72 20 74 61 62 6c 65 20 6c 69 6b 65  aster table like
32c0: 20 74 68 69 73 20 77 69 6c 6c 0a 72 65 6e 64 65   this will.rende
32d0: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  r the database c
32e0: 6f 72 72 75 70 74 20 61 6e 64 20 75 6e 72 65 61  orrupt and unrea
32f0: 64 61 62 6c 65 20 69 66 20 74 68 65 20 63 68 61  dable if the cha
3300: 6e 67 65 20 63 6f 6e 74 61 69 6e 73 0a 61 20 73  nge contains.a s
3310: 79 6e 74 61 78 20 65 72 72 6f 72 2e 20 20 49 74  yntax error.  It
3320: 20 69 73 20 73 75 67 67 65 73 74 65 64 20 74 68   is suggested th
3330: 61 74 20 63 61 72 65 66 75 6c 20 74 65 73 74 69  at careful testi
3340: 6e 67 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  ng of the UPDATE
3350: 0a 73 74 61 74 65 6d 65 6e 74 20 62 65 20 64 6f  .statement be do
3360: 6e 65 20 6f 6e 20 61 20 73 65 70 61 72 61 74 65  ne on a separate
3370: 20 62 6c 61 6e 6b 20 64 61 74 61 62 61 73 65 20   blank database 
3380: 70 72 69 6f 72 20 74 6f 20 75 73 69 6e 67 20 69  prior to using i
3390: 74 20 6f 6e 0a 61 20 64 61 74 61 62 61 73 65 20  t on.a database 
33a0: 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6d 70 6f 72  containing impor
33b0: 74 61 6e 74 20 64 61 74 61 2e 0a 0a 3c 6c 69 3e  tant data...<li>
33c0: 3c 70 3e 20 49 66 20 74 68 65 20 63 68 61 6e 67  <p> If the chang
33d0: 65 20 74 6f 20 74 61 62 6c 65 20 58 20 61 6c 73  e to table X als
33e0: 6f 20 61 66 66 65 63 74 73 20 6f 74 68 65 72 20  o affects other 
33f0: 74 61 62 6c 65 73 20 6f 72 20 69 6e 64 65 78 65  tables or indexe
3400: 73 20 6f 72 0a 74 72 69 67 67 65 72 73 20 61 72  s or.triggers ar
3410: 65 20 76 69 65 77 73 20 77 69 74 68 69 6e 20 73  e views within s
3420: 63 68 65 6d 61 2c 20 74 68 65 6e 20 72 75 6e 20  chema, then run 
3430: 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65  [UPDATE] stateme
3440: 6e 74 73 20 74 6f 20 6d 6f 64 69 66 79 0a 74 68  nts to modify.th
3450: 6f 73 65 20 6f 74 68 65 72 20 74 61 62 6c 65 73  ose other tables
3460: 20 69 6e 64 65 78 65 73 20 61 6e 64 20 76 69 65   indexes and vie
3470: 77 73 20 74 6f 6f 2e 20 20 46 6f 72 20 65 78 61  ws too.  For exa
3480: 6d 70 6c 65 2c 20 69 66 20 74 68 65 20 6e 61 6d  mple, if the nam
3490: 65 20 6f 66 0a 61 20 63 6f 6c 75 6d 6e 20 63 68  e of.a column ch
34a0: 61 6e 67 65 73 2c 20 61 6c 6c 20 46 4f 52 45 49  anges, all FOREI
34b0: 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
34c0: 74 73 2c 20 74 72 69 67 67 65 72 73 2c 20 69 6e  ts, triggers, in
34d0: 64 65 78 65 73 2c 20 61 6e 64 0a 76 69 65 77 73  dexes, and.views
34e0: 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
34f0: 68 61 74 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20  hat column must 
3500: 62 65 20 6d 6f 64 69 66 69 65 64 2e 0a 3c 70 3e  be modified..<p>
3510: 3c 65 6d 3e 43 61 75 74 69 6f 6e 3a 3c 2f 65 6d  <em>Caution:</em
3520: 3e 20 20 4f 6e 63 65 20 61 67 61 69 6e 2c 20 6d  >  Once again, m
3530: 61 6b 69 6e 67 20 63 68 61 6e 67 65 73 20 74 6f  aking changes to
3540: 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74   the sqlite_mast
3550: 65 72 20 0a 74 61 62 6c 65 20 6c 69 6b 65 20 74  er .table like t
3560: 68 69 73 20 77 69 6c 6c 20 72 65 6e 64 65 72 20  his will render 
3570: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 72  the database cor
3580: 72 75 70 74 20 61 6e 64 20 75 6e 72 65 61 64 61  rupt and unreada
3590: 62 6c 65 20 69 66 20 74 68 65 20 0a 63 68 61 6e  ble if the .chan
35a0: 67 65 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65  ge contains an e
35b0: 72 72 6f 72 2e 20 20 43 61 72 65 66 75 6c 6c 79  rror.  Carefully
35c0: 20 74 65 73 74 20 74 68 69 73 20 65 6e 74 69 72   test this entir
35d0: 65 20 70 72 6f 63 65 64 75 72 65 0a 6f 6e 20 61  e procedure.on a
35e0: 20 73 65 70 61 72 61 74 65 20 74 65 73 74 20 64   separate test d
35f0: 61 74 61 62 61 73 65 20 70 72 69 6f 72 20 74 6f  atabase prior to
3600: 20 75 73 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64   using it on.a d
3610: 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69  atabase containi
3620: 6e 67 20 69 6d 70 6f 72 74 61 6e 74 20 64 61 74  ng important dat
3630: 61 20 61 6e 64 2f 6f 72 20 6d 61 6b 65 20 62 61  a and/or make ba
3640: 63 6b 75 70 20 63 6f 70 69 65 73 20 6f 66 0a 69  ckup copies of.i
3650: 6d 70 6f 72 74 61 6e 74 20 64 61 74 61 62 61 73  mportant databas
3660: 65 73 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e  es prior to runn
3670: 69 6e 67 20 74 68 69 73 20 70 72 6f 63 65 64 75  ing this procedu
3680: 72 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49 6e 63  re...<li><p> Inc
3690: 72 65 6d 65 6e 74 20 74 68 65 20 73 63 68 65 6d  rement the schem
36a0: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
36b0: 20 75 73 69 6e 67 0a 5b 50 52 41 47 4d 41 20 73   using.[PRAGMA s
36c0: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7c 20  chema_version | 
36d0: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
36e0: 72 73 69 6f 6e 3d 58 5d 20 77 68 65 72 65 20 58  rsion=X] where X
36f0: 20 69 73 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61   is one.more tha
3700: 6e 20 74 68 65 20 6f 6c 64 20 73 63 68 65 6d 61  n the old schema
3710: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
3720: 66 6f 75 6e 64 20 69 6e 20 73 74 65 70 20 32 20  found in step 2 
3730: 61 62 6f 76 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20  above...<li><p> 
3740: 44 69 73 61 62 6c 65 20 73 63 68 65 6d 61 20 65  Disable schema e
3750: 64 69 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50  diting using .[P
3760: 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
3770: 63 68 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77  chema | PRAGMA w
3780: 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f  ritable_schema=O
3790: 46 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 28 4f  FF]...<li><p> (O
37a0: 70 74 69 6f 6e 61 6c 29 20 52 75 6e 20 5b 50 52  ptional) Run [PR
37b0: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
37c0: 68 65 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20  heck] to verify 
37d0: 74 68 61 74 20 74 68 65 0a 73 63 68 65 6d 61 20  that the.schema 
37e0: 63 68 61 6e 67 65 73 20 64 69 64 20 6e 6f 74 20  changes did not 
37f0: 64 61 6d 61 67 65 20 74 68 65 20 64 61 74 61 62  damage the datab
3800: 61 73 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 43 6f  ase...<li><p> Co
3810: 6d 6d 69 74 20 74 68 65 20 74 72 61 6e 73 61 63  mmit the transac
3820: 74 69 6f 6e 20 73 74 61 72 74 65 64 20 6f 6e 20  tion started on 
3830: 73 74 65 70 20 31 20 61 62 6f 76 65 2e 0a 3c 2f  step 1 above..</
3840: 6f 6c 3e 0a 0a 3c 70 3e 49 66 20 73 6f 6d 65 20  ol>..<p>If some 
3850: 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e 20 6f  future version o
3860: 66 20 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65  f SQLite adds ne
3870: 77 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 61  w ALTER TABLE ca
3880: 70 61 62 69 6c 69 74 69 65 73 2c 20 0a 74 68 6f  pabilities, .tho
3890: 73 65 20 63 61 70 61 62 69 6c 69 74 69 65 73 20  se capabilities 
38a0: 77 69 6c 6c 20 76 65 72 79 20 6c 69 6b 65 6c 79  will very likely
38b0: 20 75 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 20   use one of the 
38c0: 74 77 6f 20 70 72 6f 63 65 64 75 72 65 73 0a 6f  two procedures.o
38d0: 75 74 6c 69 6e 65 64 20 61 62 6f 76 65 2e 0a 0a  utlined above...
38e0: 3c 74 63 6c 3e 0a 23 20 20 4f 6e 65 20 6f 66 20  <tcl>.#  One of 
38f0: 74 68 65 20 72 65 61 73 6f 6e 73 20 74 68 61 74  the reasons that
3900: 0a 23 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  .# SQLite does n
3910: 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70  ot currently sup
3920: 70 6f 72 74 20 6d 6f 72 65 20 41 4c 54 45 52 20  port more ALTER 
3930: 54 41 42 4c 45 20 63 61 70 61 62 69 6c 69 74 69  TABLE capabiliti
3940: 65 73 20 69 73 20 74 68 61 74 0a 23 20 74 68 65  es is that.# the
3950: 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f 77 6e   procedure shown
3960: 20 61 62 6f 76 65 20 69 73 20 64 69 66 66 69 63   above is diffic
3970: 75 6c 74 20 74 6f 20 61 75 74 6f 6d 61 74 65 20  ult to automate 
3980: 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61 72 79  for an arbitrary
3990: 20 73 63 68 65 6d 61 2e 0a 23 20 50 61 72 74 69   schema..# Parti
39a0: 63 75 6c 61 72 6c 79 20 74 72 6f 75 62 6c 65 73  cularly troubles
39b0: 6f 6d 65 20 61 72 65 61 73 20 61 72 65 20 69 64  ome areas are id
39c0: 65 6e 74 69 66 79 69 6e 67 20 61 6c 6c 20 76 69  entifying all vi
39d0: 65 77 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ews associated w
39e0: 69 74 68 0a 23 20 74 61 62 6c 65 20 58 20 69 6e  ith.# table X in
39f0: 20 73 74 65 70 20 31 20 61 6e 64 20 63 72 65 61   step 1 and crea
3a00: 74 69 6e 67 20 6e 65 77 20 76 69 65 77 73 20 61  ting new views a
3a10: 6e 64 20 74 72 69 67 67 65 72 73 20 74 68 61 74  nd triggers that
3a20: 20 61 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 0a   are compatible.
3a30: 23 20 77 69 74 68 20 74 68 65 20 61 6c 74 65 72  # with the alter
3a40: 65 64 20 73 63 68 65 6d 61 20 66 6f 72 20 74 61  ed schema for ta
3a50: 62 6c 65 20 58 20 69 6e 20 73 74 65 70 20 36 2e  ble X in step 6.
3a60: 20 20 49 74 20 69 73 20 61 20 74 72 69 63 6b 79    It is a tricky
3a70: 20 62 75 74 20 73 6f 6c 76 61 62 6c 65 0a 23 20   but solvable.# 
3a80: 70 72 6f 62 6c 65 6d 20 74 6f 20 63 72 65 61 74  problem to creat
3a90: 65 20 63 6f 64 65 20 74 68 61 74 20 77 69 6c 6c  e code that will
3aa0: 20 70 65 72 66 6f 72 6d 20 74 68 65 20 73 74 65   perform the ste
3ab0: 70 73 20 61 62 6f 76 65 20 0a 23 20 66 6f 72 20  ps above .# for 
3ac0: 22 72 65 61 73 6f 6e 61 62 6c 65 22 20 73 63 68  "reasonable" sch
3ad0: 65 6d 61 73 20 63 6f 6d 6d 6f 6e 6c 79 20 66 6f  emas commonly fo
3ae0: 75 6e 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e  und in practice.
3af0: 20 20 0a 23 20 42 75 74 20 74 68 65 72 65 20 65    .# But there e
3b00: 78 69 73 74 20 6d 61 6c 65 76 6f 6c 65 6e 74 20  xist malevolent 
3b10: 73 63 68 65 6d 61 73 20 66 6f 72 20 77 68 69 63  schemas for whic
3b20: 68 0a 23 20 74 68 65 73 65 20 73 74 65 70 73 20  h.# these steps 
3b30: 61 72 65 20 6d 61 64 64 65 6e 69 6e 67 6c 79 20  are maddeningly 
3b40: 64 69 66 66 69 63 75 6c 74 20 74 6f 20 64 6f 20  difficult to do 
3b50: 63 6f 72 72 65 63 74 6c 79 2e 20 20 52 61 74 68  correctly.  Rath
3b60: 65 72 20 74 68 61 6e 20 63 72 65 61 74 65 0a 23  er than create.#
3b70: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 66 65 61   ALTER TABLE fea
3b80: 74 75 72 65 73 20 74 68 61 74 20 77 6f 72 6b 20  tures that work 
3b90: 63 6f 72 72 65 63 74 6c 79 20 39 39 2e 39 25 20  correctly 99.9% 
3ba0: 6f 66 20 74 68 65 20 74 69 6d 65 20 62 75 74 20  of the time but 
3bb0: 70 6f 73 73 69 62 6c 79 0a 23 20 63 6f 72 72 75  possibly.# corru
3bc0: 70 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 6e  pt the schema on
3bd0: 20 74 68 65 20 6f 74 68 65 72 20 30 2e 31 25 2c   the other 0.1%,
3be0: 20 74 68 65 20 53 51 4c 69 74 65 20 64 65 76 65   the SQLite deve
3bf0: 6c 6f 70 65 72 73 20 68 61 76 65 20 64 65 63 69  lopers have deci
3c00: 64 65 64 0a 23 20 74 6f 20 70 75 73 68 20 74 68  ded.# to push th
3c10: 65 20 70 72 6f 62 6c 65 6d 20 69 6e 74 6f 20 74  e problem into t
3c20: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  he application d
3c30: 6f 6d 61 69 6e 2c 20 77 68 65 72 65 20 69 74 20  omain, where it 
3c40: 69 73 20 6d 75 63 68 20 65 61 73 69 65 72 0a 23  is much easier.#
3c50: 20 74 6f 20 73 6f 6c 76 65 2e 0a 3c 2f 74 63 6c   to solve..</tcl
3c60: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
3c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cb0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
3cc0: 20 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79   {ANALYZE} analy
3cd0: 7a 65 20 41 4e 41 4c 59 5a 45 0a 0a 52 65 63 75  ze ANALYZE..Recu
3ce0: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
3cf0: 61 6d 20 61 6e 61 6c 79 7a 65 2d 73 74 6d 74 0a  am analyze-stmt.
3d00: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65  </tcl>..<p> ^The
3d10: 20 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64   ANALYZE command
3d20: 20 67 61 74 68 65 72 73 20 73 74 61 74 69 73 74   gathers statist
3d30: 69 63 73 20 61 62 6f 75 74 20 74 61 62 6c 65 73  ics about tables
3d40: 20 61 6e 64 0a 69 6e 64 69 63 65 73 20 61 6e 64   and.indices and
3d50: 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 6c   stores the coll
3d60: 65 63 74 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f  ected informatio
3d70: 6e 0a 69 6e 20 5b 69 6e 74 65 72 6e 61 6c 20 74  n.in [internal t
3d80: 61 62 6c 65 73 5d 20 6f 66 20 74 68 65 20 64 61  ables] of the da
3d90: 74 61 62 61 73 65 20 77 68 65 72 65 20 74 68 65  tabase where the
3da0: 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
3db0: 20 63 61 6e 0a 61 63 63 65 73 73 20 74 68 65 20   can.access the 
3dc0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20  information and 
3dd0: 75 73 65 20 69 74 20 74 6f 20 68 65 6c 70 20 6d  use it to help m
3de0: 61 6b 65 20 62 65 74 74 65 72 20 71 75 65 72 79  ake better query
3df0: 20 70 6c 61 6e 6e 69 6e 67 20 63 68 6f 69 63 65   planning choice
3e00: 73 2e 0a 5e 49 66 20 6e 6f 20 61 72 67 75 6d 65  s..^If no argume
3e10: 6e 74 73 20 61 72 65 20 67 69 76 65 6e 2c 20 61  nts are given, a
3e20: 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
3e30: 62 61 73 65 73 20 61 72 65 0a 61 6e 61 6c 79 7a  bases are.analyz
3e40: 65 64 2e 20 20 5e 49 66 20 61 20 73 63 68 65 6d  ed.  ^If a schem
3e50: 61 20 6e 61 6d 65 20 69 73 20 67 69 76 65 6e 20  a name is given 
3e60: 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2c  as the argument,
3e70: 20 74 68 65 6e 20 61 6c 6c 20 74 61 62 6c 65 73   then all tables
3e80: 0a 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20  .and indices in 
3e90: 74 68 61 74 20 6f 6e 65 20 64 61 74 61 62 61 73  that one databas
3ea0: 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20  e are analyzed. 
3eb0: 20 0a 5e 49 66 20 74 68 65 20 61 72 67 75 6d 65   .^If the argume
3ec0: 6e 74 20 69 73 20 61 20 74 61 62 6c 65 20 6e 61  nt is a table na
3ed0: 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  me, then only th
3ee0: 61 74 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  at table and the
3ef0: 0a 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69 61  .indices associa
3f00: 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74 61  ted with that ta
3f10: 62 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64  ble are analyzed
3f20: 2e 20 20 5e 49 66 20 74 68 65 20 61 72 67 75 6d  .  ^If the argum
3f30: 65 6e 74 0a 69 73 20 61 6e 20 69 6e 64 65 78 20  ent.is an index 
3f40: 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20  name, then only 
3f50: 74 68 61 74 20 6f 6e 65 20 69 6e 64 65 78 20 69  that one index i
3f60: 73 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a  s analyzed.</p>.
3f70: 0a 3c 70 3e 20 5e 54 68 65 20 64 65 66 61 75 6c  .<p> ^The defaul
3f80: 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  t implementation
3f90: 20 73 74 6f 72 65 73 20 61 6c 6c 20 73 74 61 74   stores all stat
3fa0: 69 73 74 69 63 73 20 69 6e 20 61 20 73 69 6e 67  istics in a sing
3fb0: 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65 64 20 22  le.table named "
3fc0: 5b 73 71 6c 69 74 65 5f 73 74 61 74 31 5d 22 2e  [sqlite_stat1]".
3fd0: 20 20 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20    ^If SQLite is 
3fe0: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
3ff0: 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e.[SQLITE_ENABLE
4000: 5f 53 54 41 54 33 5d 20 6f 70 74 69 6f 6e 20 61  _STAT3] option a
4010: 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 5b  nd without the [
4020: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
4030: 41 54 34 5d 0a 6f 70 74 69 6f 6e 2c 20 74 68 65  AT4].option, the
4040: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69 73  n additional his
4050: 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a 63  togram data is.c
4060: 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f  ollected and sto
4070: 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73  red in [sqlite_s
4080: 74 61 74 33 5d 2e 0a 20 5e 49 66 20 53 51 4c 69  tat3].. ^If SQLi
4090: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
40a0: 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f  ith the.[SQLITE_
40b0: 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 6f 70  ENABLE_STAT4] op
40c0: 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74  tion, then addit
40d0: 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20  ional histogram 
40e0: 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65  data is.collecte
40f0: 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20  d and stored in 
4100: 5b 73 71 6c 69 74 65 5f 73 74 61 74 34 5d 2e 0a  [sqlite_stat4]..
4110: 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  Older versions o
4120: 66 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 6d  f SQLite would m
4130: 61 6b 65 20 75 73 65 20 6f 66 20 74 68 65 20 5b  ake use of the [
4140: 73 71 6c 69 74 65 5f 73 74 61 74 32 5d 20 74 61  sqlite_stat2] ta
4150: 62 6c 65 0a 77 68 65 6e 20 63 6f 6d 70 69 6c 65  ble.when compile
4160: 64 20 77 69 74 68 20 5b 53 51 4c 49 54 45 5f 45  d with [SQLITE_E
4170: 4e 41 42 4c 45 5f 53 54 41 54 32 5d 20 62 75 74  NABLE_STAT2] but
4180: 20 61 6c 6c 20 72 65 63 65 6e 74 20 76 65 72 73   all recent vers
4190: 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 69  ions of.SQLite i
41a0: 67 6e 6f 72 65 20 74 68 65 20 73 71 6c 69 74 65  gnore the sqlite
41b0: 5f 73 74 61 74 32 20 74 61 62 6c 65 2e 0a 46 75  _stat2 table..Fu
41c0: 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ture enhancement
41d0: 73 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64 64  s may create.add
41e0: 69 74 69 6f 6e 61 6c 20 5b 69 6e 74 65 72 6e 61  itional [interna
41f0: 6c 20 74 61 62 6c 65 73 5d 20 77 69 74 68 20 74  l tables] with t
4200: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 70 61 74  he same name pat
4210: 74 65 72 6e 20 65 78 63 65 70 74 20 77 69 74 68  tern except with
4220: 0a 66 69 6e 61 6c 20 64 69 67 69 74 20 6c 61 72  .final digit lar
4230: 67 65 72 20 74 68 61 6e 20 22 34 22 2e 0a 41 6c  ger than "4"..Al
4240: 6c 20 6f 66 20 74 68 65 73 65 20 74 61 62 6c 65  l of these table
4250: 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76 65  s are collective
4260: 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f 20 61  ly referred to a
4270: 73 20 22 73 74 61 74 69 73 74 69 63 73 20 74 61  s "statistics ta
4280: 62 6c 65 73 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  bles"..</p>..<p>
4290: 20 5e 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66   ^The content of
42a0: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
42b0: 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71 75  tables can be qu
42c0: 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45 4c  eried using [SEL
42d0: 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65 20  ECT].and can be 
42e0: 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20 74 68  changed using th
42f0: 65 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53  e [DELETE], [INS
4300: 45 52 54 5d 2c 20 61 6e 64 20 5b 55 50 44 41 54  ERT], and [UPDAT
4310: 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 5e 28 54  E] commands..^(T
4320: 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20  he [DROP TABLE] 
4330: 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 6f 6e  command works on
4340: 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c   statistics tabl
4350: 65 73 0a 61 73 20 6f 66 20 53 51 4c 69 74 65 20  es.as of SQLite 
4360: 76 65 72 73 69 6f 6e 20 33 2e 37 2e 39 2e 29 5e  version 3.7.9.)^
4370: 20 28 5b 64 61 74 65 6f 66 3a 33 2e 37 2e 39 5d   ([dateof:3.7.9]
4380: 29 0a 5e 54 68 65 20 5b 41 4c 54 45 52 20 54 41  ).^The [ALTER TA
4390: 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  BLE] command doe
43a0: 73 20 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 73 74  s not work on st
43b0: 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 2e  atistics tables.
43c0: 0a 41 70 70 72 6f 70 72 69 61 74 65 20 63 61 72  .Appropriate car
43d0: 65 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  e should be used
43e0: 20 77 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74   when changing t
43f0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
4400: 65 20 73 74 61 74 69 73 74 69 63 73 0a 74 61 62  e statistics.tab
4410: 6c 65 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63  les as invalid c
4420: 6f 6e 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65  ontent can cause
4430: 20 53 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63   SQLite to selec
4440: 74 20 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75  t inefficient.qu
4450: 65 72 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65  ery plans.  Gene
4460: 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20  rally speaking, 
4470: 6f 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d  one should not m
4480: 6f 64 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e  odify the conten
4490: 74 20 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74  t of.the statist
44a0: 69 63 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e  ics tables by an
44b0: 79 20 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65  y mechanism othe
44c0: 72 20 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20  r than invoking 
44d0: 74 68 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d  the.ANALYZE comm
44e0: 61 6e 64 2e 20 20 0a 53 65 65 20 22 5b 4d 61 6e  and.  .See "[Man
44f0: 75 61 6c 20 43 6f 6e 74 72 6f 6c 20 4f 66 20 51  ual Control Of Q
4500: 75 65 72 79 20 50 6c 61 6e 73 20 55 73 69 6e 67  uery Plans Using
4510: 20 53 51 4c 49 54 45 5f 53 54 41 54 20 54 61 62   SQLITE_STAT Tab
4520: 6c 65 73 5d 22 20 66 6f 72 0a 66 75 72 74 68 65  les]" for.furthe
4530: 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  r information.</
4540: 70 3e 0a 0a 3c 70 3e 20 5e 53 74 61 74 69 73 74  p>..<p> ^Statist
4550: 69 63 73 20 67 61 74 68 65 72 65 64 20 62 79 20  ics gathered by 
4560: 41 4e 41 4c 59 5a 45 20 61 72 65 20 6e 6f 74 20  ANALYZE are not 
4570: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70  automatically up
4580: 64 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f 6e  dated as.the con
4590: 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61  tent of the data
45a0: 62 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20 49  base changes.  I
45b0: 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
45c0: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 63 68   the database.ch
45d0: 61 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61 6e  anges significan
45e0: 74 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20 64  tly, or if the d
45f0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
4600: 68 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65  hanges, then one
4610: 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72   should.consider
4620: 20 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20 41   rerunning the A
4630: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69  NALYZE command i
4640: 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74  n order to updat
4650: 65 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  e the statistics
4660: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 71  .</p>..<p> The q
4670: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 6c 6f 61  uery planner loa
4680: 64 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ds the content o
4690: 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  f the statistics
46a0: 20 74 61 62 6c 65 73 0a 69 6e 74 6f 20 6d 65 6d   tables.into mem
46b0: 6f 72 79 20 77 68 65 6e 20 74 68 65 20 73 63 68  ory when the sch
46c0: 65 6d 61 20 69 73 20 72 65 61 64 2e 20 20 5e 48  ema is read.  ^H
46d0: 65 6e 63 65 2c 20 77 68 65 6e 20 61 6e 20 61 70  ence, when an ap
46e0: 70 6c 69 63 61 74 69 6f 6e 0a 63 68 61 6e 67 65  plication.change
46f0: 73 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  s the statistics
4700: 20 74 61 62 6c 65 73 20 64 69 72 65 63 74 6c 79   tables directly
4710: 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f  , SQLite will no
4720: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 6e 6f  t immediately.no
4730: 74 69 63 65 20 74 68 65 20 63 68 61 6e 67 65 73  tice the changes
4740: 2e 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f  . ^An applicatio
4750: 6e 0a 63 61 6e 20 66 6f 72 63 65 20 74 68 65 20  n.can force the 
4760: 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f  query planner to
4770: 20 72 65 72 65 61 64 20 74 68 65 20 73 74 61 74   reread the stat
4780: 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79  istics tables by
4790: 20 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c   running.<b>ANAL
47a0: 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  YZE sqlite_maste
47b0: 72 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 74 63  r</b>. </p>..<tc
47c0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 61 75  l>hd_fragment au
47d0: 74 6f 61 6e 61 6c 79 7a 65 20 7b 61 75 74 6f 6d  toanalyze {autom
47e0: 61 74 69 63 61 6c 6c 79 20 72 75 6e 6e 69 6e 67  atically running
47f0: 20 41 4e 41 4c 59 5a 45 7d 3c 2f 74 63 6c 3e 0a   ANALYZE}</tcl>.
4800: 3c 68 32 3e 41 75 74 6f 6d 61 74 69 63 61 6c 6c  <h2>Automaticall
4810: 79 20 52 75 6e 6e 69 6e 67 20 41 4e 41 4c 59 5a  y Running ANALYZ
4820: 45 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 5b  E</h2>..<p>The [
4830: 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d  PRAGMA optimize]
4840: 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 61 75   command will au
4850: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72 75 6e 20  tomatically run 
4860: 41 4e 41 4c 59 5a 45 20 6f 6e 20 69 6e 64 69 76  ANALYZE on indiv
4870: 69 64 75 61 6c 0a 74 61 62 6c 65 73 20 6f 6e 20  idual.tables on 
4880: 61 6e 20 61 73 2d 6e 65 65 64 65 64 20 62 61 73  an as-needed bas
4890: 69 73 2e 20 20 54 68 65 20 72 65 63 6f 6d 6d 65  is.  The recomme
48a0: 6e 64 65 64 20 70 72 61 63 74 69 63 65 20 69 73  nded practice is
48b0: 20 66 6f 72 20 61 70 70 6c 69 63 61 74 69 6f 6e   for application
48c0: 73 0a 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20  s.to invoke the 
48d0: 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65  [PRAGMA optimize
48e0: 5d 20 73 74 61 74 65 6d 65 6e 74 20 6a 75 73 74  ] statement just
48f0: 20 62 65 66 6f 72 65 20 63 6c 6f 73 69 6e 67 20   before closing 
4900: 65 61 63 68 20 64 61 74 61 62 61 73 65 0a 63 6f  each database.co
4910: 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c  nnection.</p>..<
4920: 70 3e 45 61 63 68 20 53 51 4c 69 74 65 20 5b 64  p>Each SQLite [d
4930: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
4940: 6f 6e 5d 20 72 65 63 6f 72 64 73 20 63 61 73 65  on] records case
4950: 73 20 77 68 65 6e 20 74 68 65 20 71 75 65 72 79  s when the query
4960: 20 70 6c 61 6e 6e 65 72 20 77 6f 75 6c 64 0a 62   planner would.b
4970: 65 6e 65 66 69 74 20 66 72 6f 6d 20 68 61 76 69  enefit from havi
4980: 6e 67 20 61 63 63 75 72 61 74 65 20 72 65 73 75  ng accurate resu
4990: 6c 74 73 20 6f 66 20 41 4e 41 4c 59 5a 45 20 61  lts of ANALYZE a
49a0: 74 20 68 61 6e 64 2e 20 20 54 68 65 73 65 20 72  t hand.  These r
49b0: 65 63 6f 72 64 73 0a 61 72 65 20 68 65 6c 64 20  ecords.are held 
49c0: 69 6e 20 6d 65 6d 6f 72 79 20 61 6e 64 20 61 63  in memory and ac
49d0: 63 75 6d 75 6c 61 74 65 20 6f 76 65 72 20 74 68  cumulate over th
49e0: 65 20 6c 69 66 65 20 6f 66 20 61 20 64 61 74 61  e life of a data
49f0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
4a00: 0a 54 68 65 20 5b 50 52 41 47 4d 41 20 6f 70 74  .The [PRAGMA opt
4a10: 69 6d 69 7a 65 5d 20 63 6f 6d 6d 61 6e 64 20 6c  imize] command l
4a20: 6f 6f 6b 73 20 61 74 20 74 68 6f 73 65 20 72 65  ooks at those re
4a30: 63 6f 72 64 73 20 61 6e 64 20 72 75 6e 73 20 41  cords and runs A
4a40: 4e 41 4c 59 5a 45 20 6f 6e 20 6f 6e 6c 79 0a 74  NALYZE on only.t
4a50: 68 6f 73 65 20 74 61 62 6c 65 73 20 66 6f 72 20  hose tables for 
4a60: 77 68 69 63 68 20 6e 65 77 20 6f 72 20 75 70 64  which new or upd
4a70: 61 74 65 64 20 41 4e 41 4c 59 5a 45 20 64 61 74  ated ANALYZE dat
4a80: 61 20 73 65 65 6d 73 20 6c 69 6b 65 6c 79 20 74  a seems likely t
4a90: 6f 20 62 65 20 75 73 65 66 75 6c 2e 0a 49 6e 20  o be useful..In 
4aa0: 6d 6f 73 74 20 63 61 73 65 73 20 5b 50 52 41 47  most cases [PRAG
4ab0: 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 20 77 69 6c  MA optimize] wil
4ac0: 6c 20 6e 6f 74 20 72 75 6e 20 41 4e 41 4c 59 5a  l not run ANALYZ
4ad0: 45 2c 20 62 75 74 20 69 74 20 77 69 6c 6c 20 6f  E, but it will o
4ae0: 63 63 61 73 69 6f 6e 61 6c 6c 79 0a 64 6f 20 73  ccasionally.do s
4af0: 6f 20 65 69 74 68 65 72 20 66 6f 72 20 74 61 62  o either for tab
4b00: 6c 65 73 20 74 68 61 74 20 68 61 76 65 20 6e 65  les that have ne
4b10: 76 65 72 20 62 65 66 6f 72 65 20 62 65 65 6e 20  ver before been 
4b20: 61 6e 61 6c 79 7a 65 64 2c 20 6f 72 20 66 6f 72  analyzed, or for
4b30: 20 74 61 62 6c 65 73 0a 74 68 61 74 20 68 61 76   tables.that hav
4b40: 65 20 67 72 6f 77 6e 20 73 69 67 6e 69 66 69 63  e grown signific
4b50: 61 6e 74 6c 79 20 73 69 6e 63 65 20 74 68 65 79  antly since they
4b60: 20 77 65 72 65 20 6c 61 73 74 20 61 6e 61 6c 79   were last analy
4b70: 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53 69 6e  zed.</p>..<p>Sin
4b80: 63 65 20 74 68 65 20 61 63 74 69 6f 6e 73 20 6f  ce the actions o
4b90: 66 20 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69  f [PRAGMA optimi
4ba0: 7a 65 5d 20 61 72 65 20 64 65 74 65 72 6d 69 6e  ze] are determin
4bb0: 65 64 20 74 6f 20 73 6f 6d 65 20 65 78 74 65 6e  ed to some exten
4bc0: 74 20 62 79 0a 70 72 69 6f 72 20 71 75 65 72 69  t by.prior queri
4bd0: 65 73 20 74 68 61 74 20 68 61 76 65 20 62 65 65  es that have bee
4be0: 6e 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 20 74  n evaluated on t
4bf0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
4c00: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 69 74 0a   connection, it.
4c10: 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74  is recommended t
4c20: 68 61 74 20 5b 50 52 41 47 4d 41 20 6f 70 74 69  hat [PRAGMA opti
4c30: 6d 69 7a 65 5d 20 62 65 20 64 65 66 65 72 72 65  mize] be deferre
4c40: 64 20 75 6e 74 69 6c 20 74 68 65 20 64 61 74 61  d until the data
4c50: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a  base connection.
4c60: 69 73 20 63 6c 6f 73 69 6e 67 20 61 6e 64 20 68  is closing and h
4c70: 61 73 20 74 68 75 73 20 68 61 64 20 61 6e 20 6f  as thus had an o
4c80: 70 70 6f 72 74 75 6e 69 74 79 20 74 6f 20 61 63  pportunity to ac
4c90: 63 75 6d 75 6c 61 74 65 20 61 73 20 6d 75 73 74  cumulate as must
4ca0: 20 75 73 61 67 65 20 69 6e 66 6f 72 6d 61 74 69   usage informati
4cb0: 6f 6e 0a 61 73 20 70 6f 73 73 69 62 6c 65 2e 20  on.as possible. 
4cc0: 20 49 74 20 69 73 20 61 6c 73 6f 20 72 65 61 73   It is also reas
4cd0: 6f 6e 61 62 6c 65 20 74 6f 20 73 65 74 20 61 20  onable to set a 
4ce0: 74 69 6d 65 72 20 74 6f 20 72 75 6e 20 5b 50 52  timer to run [PR
4cf0: 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 0a 65  AGMA optimize].e
4d00: 76 65 72 79 20 66 65 77 20 68 6f 75 72 73 2c 20  very few hours, 
4d10: 6f 72 20 65 76 65 72 79 20 66 65 77 20 64 61 79  or every few day
4d20: 73 2c 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  s, for database 
4d30: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 68 61 74  connections that
4d40: 20 73 74 61 79 20 6f 70 65 6e 0a 66 6f 72 20 61   stay open.for a
4d50: 20 6c 6f 6e 67 20 74 69 6d 65 2e 3c 2f 70 3e 0a   long time.</p>.
4d60: 0a 3c 70 3e 41 70 70 6c 69 63 61 74 69 6f 6e 73  .<p>Applications
4d70: 20 74 68 61 74 20 64 65 73 69 72 65 20 6d 6f 72   that desire mor
4d80: 65 20 63 6f 6e 74 72 6f 6c 20 63 61 6e 20 72 75  e control can ru
4d90: 6e 20 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69  n [PRAGMA optimi
4da0: 7a 65 28 30 78 30 33 29 5d 20 74 6f 20 0a 6f 62  ze(0x03)] to .ob
4db0: 74 61 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 41  tain a list of A
4dc0: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 73 20  NALYZE commands 
4dd0: 74 68 61 74 20 53 51 4c 69 74 65 20 74 68 69 6e  that SQLite thin
4de0: 6b 73 20 61 72 65 20 61 70 70 72 6f 70 72 69 61  ks are appropria
4df0: 74 65 20 74 6f 20 72 75 6e 2c 0a 62 75 74 20 77  te to run,.but w
4e00: 69 74 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20  ithout actually 
4e10: 72 75 6e 6e 69 6e 67 20 74 68 6f 73 65 20 63 6f  running those co
4e20: 6d 6d 61 6e 64 73 2e 20 20 49 66 20 74 68 65 20  mmands.  If the 
4e30: 72 65 74 75 72 6e 65 64 20 73 65 74 20 69 73 20  returned set is 
4e40: 0a 6e 6f 6e 2d 65 6d 70 74 79 2c 20 74 68 65 20  .non-empty, the 
4e50: 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e 20  application can 
4e60: 74 68 65 6e 20 6d 61 6b 65 20 61 20 64 65 63 69  then make a deci
4e70: 73 69 6f 6e 20 61 62 6f 75 74 20 77 68 65 74 68  sion about wheth
4e80: 65 72 20 6f 72 20 6e 6f 74 0a 74 6f 20 72 75 6e  er or not.to run
4e90: 20 74 68 65 20 73 75 67 67 65 73 74 65 64 20 41   the suggested A
4ea0: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 73 2c  NALYZE commands,
4eb0: 20 70 65 72 68 61 70 73 20 61 66 74 65 72 20 70   perhaps after p
4ec0: 72 6f 6d 70 74 69 6e 67 20 74 68 65 20 75 73 65  rompting the use
4ed0: 72 0a 66 6f 72 20 67 75 69 64 61 6e 63 65 2e 3c  r.for guidance.<
4ee0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 5b 50 52 41  /p>..<p>The [PRA
4ef0: 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 20 63 6f  GMA optimize] co
4f00: 6d 6d 61 6e 64 20 77 61 73 20 66 69 72 73 74 20  mmand was first 
4f10: 69 6e 74 72 6f 64 75 63 65 64 20 77 69 74 68 20  introduced with 
4f20: 0a 53 51 4c 69 74 65 20 33 2e 31 38 2e 30 20 28  .SQLite 3.18.0 (
4f30: 5b 64 61 74 65 6f 66 3a 33 2e 31 38 2e 30 5d 29  [dateof:3.18.0])
4f40: 20 61 6e 64 20 69 73 20 61 20 6e 6f 2d 6f 70 20   and is a no-op 
4f50: 66 6f 72 20 61 6c 6c 20 70 72 69 6f 72 20 72 65  for all prior re
4f60: 6c 65 61 73 65 73 0a 6f 66 20 53 51 4c 69 74 65  leases.of SQLite
4f70: 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 41 6e 74 69 63  .</p>..<h2>Antic
4f80: 69 70 61 74 65 64 20 46 75 74 75 72 65 20 45 6e  ipated Future En
4f90: 68 61 6e 63 65 6d 65 6e 74 73 3c 2f 68 32 3e 0a  hancements</h2>.
4fa0: 0a 3c 70 3e 41 6c 6c 20 65 78 69 73 74 69 6e 67  .<p>All existing
4fb0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
4fc0: 69 74 65 20 64 6f 20 61 20 66 75 6c 6c 20 74 61  ite do a full ta
4fd0: 62 6c 65 20 73 63 61 6e 20 66 6f 72 20 41 4e 41  ble scan for ANA
4fe0: 4c 59 5a 45 2e 20 20 54 68 69 73 20 63 61 6e 20  LYZE.  This can 
4ff0: 62 65 0a 73 6c 6f 77 20 66 6f 72 20 6d 75 6c 74  be.slow for mult
5000: 69 2d 67 69 67 61 62 79 74 65 20 61 6e 64 20 6c  i-gigabyte and l
5010: 61 72 67 65 72 20 64 61 74 61 62 61 73 65 73 2e  arger databases.
5020: 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e    Future version
5030: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68  s of SQLite migh
5040: 74 0a 75 73 65 20 72 61 6e 64 6f 6d 20 73 61 6d  t.use random sam
5050: 70 6c 69 6e 67 20 72 61 74 68 65 72 20 74 68 61  pling rather tha
5060: 6e 20 61 20 66 75 6c 6c 20 74 61 62 6c 65 20 73  n a full table s
5070: 63 61 6e 20 74 6f 20 6f 62 74 61 69 6e 20 65 73  can to obtain es
5080: 74 69 6d 61 74 65 73 20 66 6f 72 20 74 68 65 0a  timates for the.
5090: 64 61 74 61 62 61 73 65 20 73 68 61 70 65 2c 20  database shape, 
50a0: 65 73 70 65 63 69 61 6c 6c 79 20 6f 6e 20 6c 61  especially on la
50b0: 72 67 65 72 20 74 61 62 6c 65 73 2e 20 20 54 68  rger tables.  Th
50c0: 65 20 72 65 73 75 6c 74 73 20 77 6f 75 6c 64 20  e results would 
50d0: 61 70 70 72 6f 78 69 6d 61 74 65 2c 20 62 75 74  approximate, but
50e0: 20 0a 77 69 6c 6c 20 62 65 20 63 6c 6f 73 65 20   .will be close 
50f0: 65 6e 6f 75 67 68 20 66 6f 72 20 71 75 65 72 79  enough for query
5100: 20 70 6c 61 6e 6e 69 6e 67 20 70 75 72 70 6f 73   planning purpos
5110: 65 73 2e 20 20 41 73 20 6f 66 20 32 30 31 37 2d  es.  As of 2017-
5120: 30 33 2d 32 30 2c 20 74 68 69 73 0a 63 6f 6e 63  03-20, this.conc
5130: 65 70 74 20 68 61 73 20 62 65 65 6e 20 74 65 73  ept has been tes
5140: 74 65 64 20 69 6e 20 65 78 70 65 72 69 6d 65 6e  ted in experimen
5150: 74 61 6c 20 62 72 61 6e 63 68 65 73 20 61 6e 64  tal branches and
5160: 20 61 70 70 65 61 72 73 20 74 6f 20 77 6f 72 6b   appears to work
5170: 20 77 65 6c 6c 2c 20 62 75 74 0a 68 61 73 20 6e   well, but.has n
5180: 6f 74 20 62 65 65 6e 20 66 6f 6c 64 65 64 20 69  ot been folded i
5190: 6e 74 6f 20 61 6e 20 6f 66 66 69 63 69 61 6c 20  nto an official 
51a0: 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 74  release.</p>..<t
51b0: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
51c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
51d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
51e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
51f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5200: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 54 54 41  ##.Section {ATTA
5210: 43 48 20 44 41 54 41 42 41 53 45 7d 20 61 74 74  CH DATABASE} att
5220: 61 63 68 20 7b 61 74 74 61 63 68 65 64 20 2a 41  ach {attached *A
5230: 54 54 41 43 48 7d 0a 0a 52 65 63 75 72 73 69 76  TTACH}..Recursiv
5240: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
5250: 74 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c  ttach-stmt.</tcl
5260: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 54 54 41  >..<p> ^The ATTA
5270: 43 48 20 44 41 54 41 42 41 53 45 20 73 74 61 74  CH DATABASE stat
5280: 65 6d 65 6e 74 20 61 64 64 73 20 61 6e 6f 74 68  ement adds anoth
5290: 65 72 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c  er database .fil
52a0: 65 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  e to the current
52b0: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
52c0: 63 74 69 6f 6e 5d 2e 20 0a 44 61 74 61 62 61 73  ction]. .Databas
52d0: 65 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 72  e files that wer
52e0: 65 20 70 72 65 76 69 6f 75 73 6c 79 20 61 74 74  e previously att
52f0: 61 63 68 65 64 20 63 61 6e 20 62 65 20 72 65 6d  ached can be rem
5300: 6f 76 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b  oved using.the [
5310: 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45 5d  DETACH DATABASE]
5320: 20 63 6f 6d 6d 61 6e 64 2e 0a 0a 3c 70 3e 5e 54   command...<p>^T
5330: 68 65 20 66 69 6c 65 6e 61 6d 65 20 66 6f 72 20  he filename for 
5340: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
5350: 62 65 20 61 74 74 61 63 68 65 64 20 69 73 20 74  be attached is t
5360: 68 65 20 76 61 6c 75 65 20 6f 66 0a 74 68 65 20  he value of.the 
5370: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
5380: 6f 63 63 75 72 73 20 62 65 66 6f 72 65 20 74 68  occurs before th
5390: 65 20 41 53 20 6b 65 79 77 6f 72 64 2e 0a 5e 54  e AS keyword..^T
53a0: 68 65 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74  he filename of t
53b0: 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 6c 6c  he database foll
53c0: 6f 77 73 20 74 68 65 20 73 61 6d 65 20 73 65 6d  ows the same sem
53d0: 61 6e 74 69 63 73 20 61 73 20 74 68 65 0a 66 69  antics as the.fi
53e0: 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20  lename argument 
53f0: 74 6f 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e  to [sqlite3_open
5400: 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33  ()] and [sqlite3
5410: 5f 6f 70 65 6e 5f 76 32 28 29 5d 3b 20 74 68 65  _open_v2()]; the
5420: 0a 73 70 65 63 69 61 6c 20 6e 61 6d 65 20 22 5b  .special name "[
5430: 3a 6d 65 6d 6f 72 79 3a 5d 22 20 72 65 73 75 6c  :memory:]" resul
5440: 74 73 20 69 6e 20 61 6e 20 5b 69 6e 2d 6d 65 6d  ts in an [in-mem
5450: 6f 72 79 20 64 61 74 61 62 61 73 65 5d 20 61 6e  ory database] an
5460: 64 20 61 6e 0a 65 6d 70 74 79 20 73 74 72 69 6e  d an.empty strin
5470: 67 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 6e  g results in a n
5480: 65 77 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74  ew temporary dat
5490: 61 62 61 73 65 2e 0a 5e 54 68 65 20 66 69 6c 65  abase..^The file
54a0: 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 63 61  name argument ca
54b0: 6e 20 62 65 20 61 20 5b 55 52 49 20 66 69 6c 65  n be a [URI file
54c0: 6e 61 6d 65 5d 20 69 66 20 55 52 49 20 66 69 6c  name] if URI fil
54d0: 65 6e 61 6d 65 20 70 72 6f 63 65 73 73 69 6e 67  ename processing
54e0: 0a 69 73 20 65 6e 61 62 6c 65 20 6f 6e 20 74 68  .is enable on th
54f0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
5500: 63 74 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61  ction.  The defa
5510: 75 6c 74 20 62 65 68 61 76 69 6f 72 20 69 73 20  ult behavior is 
5520: 66 6f 72 0a 55 52 49 20 66 69 6c 65 6e 61 6d 65  for.URI filename
5530: 73 20 74 6f 20 62 65 20 64 69 73 61 62 6c 65 64  s to be disabled
5540: 2c 20 68 6f 77 65 76 65 72 20 74 68 61 74 20 6d  , however that m
5550: 69 67 68 74 20 63 68 61 6e 67 65 20 69 6e 20 61  ight change in a
5560: 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 0a   future release.
5570: 6f 66 20 53 51 4c 69 74 65 2c 20 73 6f 20 61 70  of SQLite, so ap
5580: 70 6c 69 63 61 74 69 6f 6e 20 64 65 76 65 6c 6f  plication develo
5590: 70 65 72 73 20 61 72 65 20 61 64 76 69 73 65 64  pers are advised
55a0: 20 74 6f 20 70 6c 61 6e 20 61 63 63 6f 72 64 69   to plan accordi
55b0: 6e 67 6c 79 2e 0a 0a 3c 70 3e 54 68 65 20 6e 61  ngly...<p>The na
55c0: 6d 65 20 74 68 61 74 20 6f 63 63 75 72 73 20 61  me that occurs a
55d0: 66 74 65 72 20 74 68 65 20 41 53 20 6b 65 79 77  fter the AS keyw
55e0: 6f 72 64 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ord is the name 
55f0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
5600: 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20  used internally 
5610: 62 79 20 53 51 4c 69 74 65 2e 0a 5e 54 68 65 20  by SQLite..^The 
5620: 73 63 68 65 6d 61 2d 6e 61 6d 65 73 20 27 6d 61  schema-names 'ma
5630: 69 6e 27 20 61 6e 64 20 0a 27 74 65 6d 70 27 20  in' and .'temp' 
5640: 72 65 66 65 72 20 74 6f 20 74 68 65 20 6d 61 69  refer to the mai
5650: 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  n database and t
5660: 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
5670: 20 66 6f 72 20 0a 74 65 6d 70 6f 72 61 72 79 20   for .temporary 
5680: 74 61 62 6c 65 73 2e 20 20 5e 54 68 65 20 6d 61  tables.  ^The ma
5690: 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61 74 61  in and temp data
56a0: 62 61 73 65 73 20 63 61 6e 6e 6f 74 20 62 65 20  bases cannot be 
56b0: 61 74 74 61 63 68 65 64 20 6f 72 0a 64 65 74 61  attached or.deta
56c0: 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  ched.</p>..<p> ^
56d0: 28 54 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74  (Tables in an at
56e0: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
56f0: 63 61 6e 20 62 65 20 72 65 66 65 72 72 65 64 20  can be referred 
5700: 74 6f 20 75 73 69 6e 67 20 74 68 65 20 73 79 6e  to using the syn
5710: 74 61 78 20 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e  tax .<i>schema-n
5720: 61 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  ame.table-name</
5730: 69 3e 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 6e  i>.)^  ^If the n
5740: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
5750: 20 69 73 20 75 6e 69 71 75 65 0a 61 63 72 6f 73   is unique.acros
5760: 73 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  s all attached d
5770: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
5780: 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64   main and temp d
5790: 61 74 61 62 61 73 65 73 2c 20 74 68 65 6e 20 74  atabases, then t
57a0: 68 65 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d  he.<i>schema-nam
57b0: 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20  e</i> prefix is 
57c0: 6e 6f 74 20 72 65 71 75 69 72 65 64 2e 20 20 5e  not required.  ^
57d0: 49 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 74  If two or more t
57e0: 61 62 6c 65 73 20 69 6e 0a 64 69 66 66 65 72 65  ables in.differe
57f0: 6e 74 20 64 61 74 61 62 61 73 65 73 20 68 61 76  nt databases hav
5800: 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  e the same name 
5810: 61 6e 64 20 74 68 65 20 0a 3c 69 3e 73 63 68 65  and the .<i>sche
5820: 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66  ma-name</i> pref
5830: 69 78 20 69 73 20 6e 6f 74 20 75 73 65 64 20 6f  ix is not used o
5840: 6e 20 61 20 74 61 62 6c 65 20 72 65 66 65 72 65  n a table refere
5850: 6e 63 65 2c 20 74 68 65 6e 20 74 68 65 0a 74 61  nce, then the.ta
5860: 62 6c 65 20 63 68 6f 73 65 6e 20 69 73 20 74 68  ble chosen is th
5870: 65 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74  e one in the dat
5880: 61 62 61 73 65 20 74 68 61 74 20 77 61 73 20 6c  abase that was l
5890: 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 61 74  east recently at
58a0: 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tached.</p>..<p>
58b0: 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 69  .^Transactions i
58c0: 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c  nvolving multipl
58d0: 65 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  e attached datab
58e0: 61 73 65 73 20 61 72 65 20 61 74 6f 6d 69 63 2c  ases are atomic,
58f0: 0a 61 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74  .assuming that t
5900: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
5910: 20 69 73 20 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72   is not "[:memor
5920: 79 3a 5d 22 20 61 6e 64 20 74 68 65 20 0a 5b 6a  y:]" and the .[j
5930: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20  ournal_mode] is 
5940: 6e 6f 74 20 5b 57 41 4c 5d 2e 20 20 5e 28 49 66  not [WAL].  ^(If
5950: 20 74 68 65 20 6d 61 69 6e 0a 64 61 74 61 62 61   the main.databa
5960: 73 65 20 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22  se is ":memory:"
5970: 20 6f 72 20 69 66 20 74 68 65 20 6a 6f 75 72 6e   or if the journ
5980: 61 6c 5f 6d 6f 64 65 20 69 73 20 57 41 4c 2c 20  al_mode is WAL, 
5990: 74 68 65 6e 20 0a 74 72 61 6e 73 61 63 74 69 6f  then .transactio
59a0: 6e 73 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62  ns continue to b
59b0: 65 20 61 74 6f 6d 69 63 20 77 69 74 68 69 6e 20  e atomic within 
59c0: 65 61 63 68 20 69 6e 64 69 76 69 64 75 61 6c 0a  each individual.
59d0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 42  database file. B
59e0: 75 74 20 69 66 20 74 68 65 20 68 6f 73 74 20 63  ut if the host c
59f0: 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65 73 20  omputer crashes 
5a00: 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 0a 6f 66  in the middle.of
5a10: 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 77 68 65 72   a [COMMIT] wher
5a20: 65 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61  e two or more da
5a30: 74 61 62 61 73 65 20 66 69 6c 65 73 20 61 72 65  tabase files are
5a40: 20 75 70 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f   updated,.some o
5a50: 66 20 74 68 6f 73 65 20 66 69 6c 65 73 20 6d 69  f those files mi
5a60: 67 68 74 20 67 65 74 20 74 68 65 20 63 68 61 6e  ght get the chan
5a70: 67 65 73 20 77 68 65 72 65 20 6f 74 68 65 72 73  ges where others
5a80: 0a 6d 69 67 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f  .might not.)^.</
5a90: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 72 65 20 69  p>..<p> ^There i
5aa0: 73 20 61 20 6c 69 6d 69 74 2c 20 73 65 74 20 75  s a limit, set u
5ab0: 73 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 6c 69  sing [sqlite3_li
5ac0: 6d 69 74 28 29 5d 20 61 6e 64 20 0a 5b 53 51 4c  mit()] and .[SQL
5ad0: 49 54 45 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48  ITE_LIMIT_ATTACH
5ae0: 45 44 5d 2c 20 74 6f 20 74 68 65 20 6e 75 6d 62  ED], to the numb
5af0: 65 72 20 6f 66 20 64 61 74 61 62 61 73 65 73 20  er of databases 
5b00: 74 68 61 74 20 63 61 6e 20 62 65 0a 73 69 6d 75  that can be.simu
5b10: 6c 74 61 6e 65 6f 75 73 6c 79 20 61 74 74 61 63  ltaneously attac
5b20: 68 65 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  hed to a single 
5b30: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
5b40: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ion.</p>..<tcl>.
5b50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
5ba0: 53 65 63 74 69 6f 6e 20 7b 42 45 47 49 4e 20 54  Section {BEGIN T
5bb0: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
5bc0: 73 61 63 74 69 6f 6e 20 7b 2a 42 45 47 49 4e 20  saction {*BEGIN 
5bd0: 43 4f 4d 4d 49 54 20 52 4f 4c 4c 42 41 43 4b 7d  COMMIT ROLLBACK}
5be0: 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
5bf0: 65 44 69 61 67 72 61 6d 20 62 65 67 69 6e 2d 73  eDiagram begin-s
5c00: 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75 62  tmt.RecursiveBub
5c10: 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 69  bleDiagram commi
5c20: 74 2d 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65  t-stmt.Recursive
5c30: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f  BubbleDiagram ro
5c40: 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63  llback-stmt.</tc
5c50: 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e  l>..<p>.^No chan
5c60: 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20  ges can be made 
5c70: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
5c80: 65 78 63 65 70 74 20 77 69 74 68 69 6e 20 61 20  except within a 
5c90: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e  transaction..^An
5ca0: 79 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63  y command that c
5cb0: 68 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 62  hanges the datab
5cc0: 61 73 65 20 28 62 61 73 69 63 61 6c 6c 79 2c 20  ase (basically, 
5cd0: 61 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a  any SQL command.
5ce0: 6f 74 68 65 72 20 74 68 61 6e 20 5b 53 45 4c 45  other than [SELE
5cf0: 43 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61  CT]) will automa
5d00: 74 69 63 61 6c 6c 79 20 73 74 61 72 74 20 61 20  tically start a 
5d10: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f  transaction if.o
5d20: 6e 65 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64  ne is not alread
5d30: 79 20 69 6e 20 65 66 66 65 63 74 2e 20 20 5e 41  y in effect.  ^A
5d40: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61  utomatically sta
5d50: 72 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  rted transaction
5d60: 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65 64 20  s.are committed 
5d70: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 71 75  when the last qu
5d80: 65 72 79 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f  ery finishes..</
5d90: 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63  p>..<p>.^Transac
5da0: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61  tions can be sta
5db0: 72 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73  rted manually us
5dc0: 69 6e 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f  ing the BEGIN.co
5dd0: 6d 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68 20 74  mmand.  ^(Such t
5de0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 75 73 75 61  ransactions usua
5df0: 6c 6c 79 20 70 65 72 73 69 73 74 20 75 6e 74 69  lly persist unti
5e00: 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49  l the next.COMMI
5e10: 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f  T or ROLLBACK co
5e20: 6d 6d 61 6e 64 2e 20 20 42 75 74 20 61 20 74 72  mmand.  But a tr
5e30: 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61  ansaction will a
5e40: 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66  lso .ROLLBACK if
5e50: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
5e60: 20 63 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e   closed or if an
5e70: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e   error occurs.an
5e80: 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  d the ROLLBACK c
5e90: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
5ea0: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
5eb0: 73 70 65 63 69 66 69 65 64 2e 29 5e 0a 53 65 65  specified.)^.See
5ec0: 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   the documentati
5ed0: 6f 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f  on on the [ON CO
5ee0: 4e 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65 20 66  NFLICT].clause f
5ef0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
5f00: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
5f10: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e  the ROLLBACK.con
5f20: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
5f30: 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e   algorithm..</p>
5f40: 0a 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53  ..<p>.^END TRANS
5f50: 41 43 54 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69  ACTION is an ali
5f60: 61 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c  as for COMMIT..<
5f70: 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73  /p>..<p> ^(Trans
5f80: 61 63 74 69 6f 6e 73 20 63 72 65 61 74 65 64 20  actions created 
5f90: 75 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f  using BEGIN...CO
5fa0: 4d 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74  MMIT do not nest
5fb0: 2e 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20  .)^.^For nested 
5fc0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73  transactions, us
5fd0: 65 20 74 68 65 20 5b 53 41 56 45 50 4f 49 4e 54  e the [SAVEPOINT
5fe0: 5d 20 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20  ] and [RELEASE] 
5ff0: 63 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54  commands..The "T
6000: 4f 20 53 41 56 45 50 4f 49 4e 54 20 3c 79 79 74  O SAVEPOINT <yyt
6010: 65 72 6d 3e 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  erm>name</yyterm
6020: 3e 22 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  >" clause of the
6030: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
6040: 64 20 73 68 6f 77 6e 0a 69 6e 20 74 68 65 20 73  d shown.in the s
6050: 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20 61 62  yntax diagram ab
6060: 6f 76 65 20 69 73 20 6f 6e 6c 79 20 61 70 70 6c  ove is only appl
6070: 69 63 61 62 6c 65 20 74 6f 20 5b 53 41 56 45 50  icable to [SAVEP
6080: 4f 49 4e 54 5d 0a 74 72 61 6e 73 61 63 74 69 6f  OINT].transactio
6090: 6e 73 2e 20 20 5e 41 6e 20 61 74 74 65 6d 70 74  ns.  ^An attempt
60a0: 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20 42   to invoke the B
60b0: 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 77 69 74  EGIN command wit
60c0: 68 69 6e 0a 61 20 74 72 61 6e 73 61 63 74 69 6f  hin.a transactio
60d0: 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  n will fail with
60e0: 20 61 6e 20 65 72 72 6f 72 2c 20 72 65 67 61 72   an error, regar
60f0: 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
6100: 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  .the transaction
6110: 20 77 61 73 20 73 74 61 72 74 65 64 20 62 79 20   was started by 
6120: 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f 72 20 61  [SAVEPOINT] or a
6130: 20 70 72 69 6f 72 20 42 45 47 49 4e 2e 0a 5e 54   prior BEGIN..^T
6140: 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e  he COMMIT comman
6150: 64 20 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41  d and the ROLLBA
6160: 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f  CK command witho
6170: 75 74 20 74 68 65 20 54 4f 20 63 6c 61 75 73 65  ut the TO clause
6180: 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d 65 20 6f  .work the same o
6190: 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 74 72  n [SAVEPOINT] tr
61a0: 61 6e 73 61 63 74 69 6f 6e 73 20 61 73 20 74 68  ansactions as th
61b0: 65 79 20 64 6f 20 77 69 74 68 20 74 72 61 6e 73  ey do with trans
61c0: 61 63 74 69 6f 6e 73 0a 73 74 61 72 74 65 64 20  actions.started 
61d0: 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c  by BEGIN.</p>..<
61e0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
61f0: 69 6d 6d 65 64 69 61 74 65 20 7b 42 45 47 49 4e  immediate {BEGIN
6200: 20 49 4d 4d 45 44 49 41 54 45 7d 20 7b 42 45 47   IMMEDIATE} {BEG
6210: 49 4e 20 45 58 43 4c 55 53 49 56 45 7d 3c 2f 74  IN EXCLUSIVE}</t
6220: 63 6c 3e 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63  cl>.<p>.^Transac
6230: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64 65 66  tions can be def
6240: 65 72 72 65 64 2c 20 69 6d 6d 65 64 69 61 74 65  erred, immediate
6250: 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65 2e 20  , or exclusive. 
6260: 20 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 74   .^The default t
6270: 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 68 61 76  ransaction behav
6280: 69 6f 72 20 69 73 20 64 65 66 65 72 72 65 64 2e  ior is deferred.
6290: 0a 5e 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73  .^Deferred means
62a0: 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61   that no locks a
62b0: 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74  re acquired.on t
62c0: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69  he database unti
62d0: 6c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  l the database i
62e0: 73 20 66 69 72 73 74 20 61 63 63 65 73 73 65 64  s first accessed
62f0: 2e 20 20 5e 54 68 75 73 20 77 69 74 68 20 61 0a  .  ^Thus with a.
6300: 64 65 66 65 72 72 65 64 20 74 72 61 6e 73 61 63  deferred transac
6310: 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20  tion, the BEGIN 
6320: 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66  statement itself
6330: 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f   does nothing to
6340: 20 74 68 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e   the.filesystem.
6350: 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74    ^Locks.are not
6360: 20 61 63 71 75 69 72 65 64 20 75 6e 74 69 6c 20   acquired until 
6370: 74 68 65 20 66 69 72 73 74 20 72 65 61 64 20 6f  the first read o
6380: 72 20 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f  r write operatio
6390: 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 72  n.  ^The first r
63a0: 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67  ead.operation ag
63b0: 61 69 6e 73 74 20 61 20 64 61 74 61 62 61 73 65  ainst a database
63c0: 20 63 72 65 61 74 65 73 20 61 20 5b 53 48 41 52   creates a [SHAR
63d0: 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65  ED] lock and the
63e0: 20 66 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65   first.write ope
63f0: 72 61 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61  ration creates a
6400: 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b   [RESERVED] lock
6410: 2e 20 20 20 5e 42 65 63 61 75 73 65 20 74 68 65  .   ^Because the
6420: 20 61 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a   acquisition of.
6430: 6c 6f 63 6b 73 20 69 73 20 64 65 66 65 72 72 65  locks is deferre
6440: 64 20 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65  d until they are
6450: 20 6e 65 65 64 65 64 2c 20 69 74 20 69 73 20 70   needed, it is p
6460: 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
6470: 74 68 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70  ther.thread or p
6480: 72 6f 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65  rocess could cre
6490: 61 74 65 20 61 20 73 65 70 61 72 61 74 65 20 74  ate a separate t
64a0: 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77  ransaction and w
64b0: 72 69 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61  rite to.the data
64c0: 62 61 73 65 20 61 66 74 65 72 20 74 68 65 20 42  base after the B
64d0: 45 47 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72  EGIN on the curr
64e0: 65 6e 74 20 74 68 72 65 61 64 20 68 61 73 20 65  ent thread has e
64f0: 78 65 63 75 74 65 64 2e 0a 5e 49 66 20 74 68 65  xecuted..^If the
6500: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
6510: 69 6d 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20  immediate, then 
6520: 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73  [RESERVED] locks
6530: 0a 61 72 65 20 61 63 71 75 69 72 65 64 20 6f 6e  .are acquired on
6540: 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 20 61   all databases a
6550: 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 42 45  s soon as the BE
6560: 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65  GIN command is.e
6570: 78 65 63 75 74 65 64 2c 20 77 69 74 68 6f 75 74  xecuted, without
6580: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74 68 65   waiting for the
6590: 0a 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 20  .database to be 
65a0: 75 73 65 64 2e 20 20 5e 41 66 74 65 72 20 61 20  used.  ^After a 
65b0: 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c  BEGIN IMMEDIATE,
65c0: 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61   .no other [data
65d0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
65e0: 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f   will be able to
65f0: 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 64 61   write to the da
6600: 74 61 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42  tabase or.do a B
6610: 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f  EGIN IMMEDIATE o
6620: 72 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56  r BEGIN EXCLUSIV
6630: 45 2e 20 20 5e 4f 74 68 65 72 20 70 72 6f 63 65  E.  ^Other proce
6640: 73 73 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75  sses can continu
6650: 65 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d 20 74  e.to read from t
6660: 68 65 20 64 61 74 61 62 61 73 65 2c 20 68 6f 77  he database, how
6670: 65 76 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75  ever.  ^An exclu
6680: 73 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  sive transaction
6690: 20 63 61 75 73 65 73 0a 5b 45 58 43 4c 55 53 49   causes.[EXCLUSI
66a0: 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20  VE] locks to be 
66b0: 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20  acquired on all 
66c0: 64 61 74 61 62 61 73 65 73 2e 20 20 5e 41 66 74  databases.  ^Aft
66d0: 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55  er a BEGIN.EXCLU
66e0: 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b  SIVE, no other [
66f0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
6700: 69 6f 6e 5d 20 65 78 63 65 70 74 20 66 6f 72 20  ion] except for 
6710: 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65  [read_uncommitte
6720: 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77  d].connections w
6730: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 72  ill be able to r
6740: 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ead the database
6750: 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f   and no other co
6760: 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 6f 75 74  nnection without
6770: 0a 65 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20  .exception will 
6780: 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65  be able to write
6790: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e   the database un
67a0: 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74  til the transact
67b0: 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e  ion is.complete.
67c0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20  .</p>..<p>.^(An 
67d0: 69 6d 70 6c 69 63 69 74 20 74 72 61 6e 73 61 63  implicit transac
67e0: 74 69 6f 6e 20 28 61 20 74 72 61 6e 73 61 63 74  tion (a transact
67f0: 69 6f 6e 20 74 68 61 74 20 69 73 20 73 74 61 72  ion that is star
6800: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
6810: 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61 63  y,.not a transac
6820: 74 69 6f 6e 20 73 74 61 72 74 65 64 20 62 79 20  tion started by 
6830: 42 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74  BEGIN) is commit
6840: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
6850: 79 20 77 68 65 6e 0a 74 68 65 20 6c 61 73 74 20  y when.the last 
6860: 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
6870: 20 66 69 6e 69 73 68 65 73 2e 20 20 41 20 73 74   finishes.  A st
6880: 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73  atement finishes
6890: 20 77 68 65 6e 20 69 74 73 0a 70 72 65 70 61 72   when its.prepar
68a0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
68b0: 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29  [sqlite3_reset()
68c0: 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71   | reset] or.[sq
68d0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
68e0: 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20   | finalized].  
68f0: 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33  An open [sqlite3
6900: 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a  _blob] used for.
6910: 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42  incremental BLOB
6920: 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20 61   I/O counts as a
6930: 6e 20 75 6e 66 69 6e 69 73 68 65 64 20 73 74 61  n unfinished sta
6940: 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71  tement.  The [sq
6950: 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69  lite3_blob].fini
6960: 73 68 65 73 20 77 68 65 6e 20 69 74 20 69 73 20  shes when it is 
6970: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c  [sqlite3_blob_cl
6980: 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e  ose() | closed].
6990: 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68  )^.</p>..<p>.^Th
69a0: 65 20 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49  e explicit COMMI
69b0: 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69  T command runs i
69c0: 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65 76 65 6e  mmediately, even
69d0: 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 70 65   if there are.pe
69e0: 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73  nding [SELECT] s
69f0: 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77  tatements.  ^How
6a00: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
6a10: 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69 74 65  re pending.write
6a20: 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74 68 65   operations, the
6a30: 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a   COMMIT command.
6a40: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
6a50: 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51  n error code [SQ
6a60: 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e  LITE_BUSY]..</p>
6a70: 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70  ..<p>.^An attemp
6a80: 74 20 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d  t to execute COM
6a90: 4d 49 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72  MIT might also r
6aa0: 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c  esult in an [SQL
6ab0: 49 54 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e  ITE_BUSY] return
6ac0: 20 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74   code.if an anot
6ad0: 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72  her thread or pr
6ae0: 6f 63 65 73 73 20 68 61 73 20 61 20 5b 73 68 61  ocess has a [sha
6af0: 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65  red lock] on the
6b00: 20 64 61 74 61 62 61 73 65 0a 74 68 61 74 20 70   database.that p
6b10: 72 65 76 65 6e 74 65 64 20 74 68 65 20 64 61 74  revented the dat
6b20: 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67  abase from being
6b30: 20 75 70 64 61 74 65 64 2e 20 20 5e 57 68 65 6e   updated.  ^When
6b40: 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e   COMMIT fails in
6b50: 20 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74   this.way, the t
6b60: 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69  ransaction remai
6b70: 6e 73 20 61 63 74 69 76 65 20 61 6e 64 20 74 68  ns active and th
6b80: 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20  e COMMIT can be 
6b90: 72 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66  retried later.af
6ba0: 74 65 72 20 74 68 65 20 72 65 61 64 65 72 20 68  ter the reader h
6bb0: 61 73 20 68 61 64 20 61 20 63 68 61 6e 63 65 20  as had a chance 
6bc0: 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a  to clear..</p>..
6bd0: 3c 70 3e 0a 49 6e 20 76 65 72 79 20 6f 6c 64 20  <p>.In very old 
6be0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
6bf0: 74 65 20 28 62 65 66 6f 72 65 20 76 65 72 73 69  te (before versi
6c00: 6f 6e 20 33 2e 37 2e 31 31 20 2d 20 5b 64 61 74  on 3.7.11 - [dat
6c10: 65 6f 66 3a 33 2e 37 2e 31 31 5d 29 0a 74 68 65  eof:3.7.11]).the
6c20: 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 66   ROLLBACK will f
6c30: 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
6c40: 72 20 63 6f 64 65 20 0a 5b 53 51 4c 49 54 45 5f  r code .[SQLITE_
6c50: 42 55 53 59 5d 20 69 66 20 74 68 65 72 65 20 61  BUSY] if there a
6c60: 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67 20 71  re any pending q
6c70: 75 65 72 69 65 73 2e 20 20 5e 49 6e 20 6d 6f 72  ueries.  ^In mor
6c80: 65 20 72 65 63 65 6e 74 0a 76 65 72 73 69 6f 6e  e recent.version
6c90: 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 74 68 65  s of SQLite, the
6ca0: 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 70   ROLLBACK will p
6cb0: 72 6f 63 65 65 64 20 61 6e 64 20 70 65 6e 64 69  roceed and pendi
6cc0: 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0a 77 69  ng statements.wi
6cd0: 6c 6c 20 6f 66 74 65 6e 20 62 65 20 61 62 6f 72  ll often be abor
6ce0: 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68 65  ted, causing the
6cf0: 6d 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 5b  m to return an [
6d00: 53 51 4c 49 54 45 5f 41 42 4f 52 54 5d 20 6f 72  SQLITE_ABORT] or
6d10: 0a 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  .[SQLITE_ABORT_R
6d20: 4f 4c 4c 42 41 43 4b 5d 20 65 72 72 6f 72 2e 0a  OLLBACK] error..
6d30: 5e 49 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69  ^In SQLite versi
6d40: 6f 6e 20 33 2e 38 2e 38 20 28 5b 64 61 74 65 6f  on 3.8.8 ([dateo
6d50: 66 3a 33 2e 38 2e 38 5d 29 20 61 6e 64 20 6c 61  f:3.8.8]) and la
6d60: 74 65 72 2c 0a 61 20 70 65 6e 64 69 6e 67 20 72  ter,.a pending r
6d70: 65 61 64 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ead will continu
6d80: 65 20 66 75 6e 63 74 69 6f 6e 69 6e 67 0a 61 66  e functioning.af
6d90: 74 65 72 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  ter the ROLLBACK
6da0: 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 20   as long as the 
6db0: 52 4f 4c 4c 42 41 43 4b 20 64 6f 65 73 20 6e 6f  ROLLBACK does no
6dc0: 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74  t modify the dat
6dd0: 61 62 61 73 65 0a 73 63 68 65 6d 61 2e 0a 3c 2f  abase.schema..</
6de0: 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41 47  p>..<p>.If [PRAG
6df0: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d  MA journal_mode]
6e00: 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20 28   is set to OFF (
6e10: 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20 74  thus disabling t
6e20: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
6e30: 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20 74  nal.file) then t
6e40: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
6e50: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
6e60: 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  and is undefined
6e70: 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 70  ..</p>..<h3>Resp
6e80: 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20 57  onse To Errors W
6e90: 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63 74  ithin A Transact
6ea0: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28  ion</h3>..<p> ^(
6eb0: 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64 73  If certain kinds
6ec0: 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75 72   of errors occur
6ed0: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
6ee0: 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e 73  ction, the.trans
6ef0: 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d 61  action may or ma
6f00: 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64 20  y not be rolled 
6f10: 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c  back automatical
6f20: 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73 20  ly.  The.errors 
6f30: 74 68 61 74 20 63 61 6e 20 63 61 75 73 65 20 61  that can cause a
6f40: 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 6c 6c  n automatic roll
6f50: 62 61 63 6b 20 69 6e 63 6c 75 64 65 3a 3c 2f 70  back include:</p
6f60: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51  >..<ul>.<li> [SQ
6f70: 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61 74 61  LITE_FULL]: data
6f80: 62 61 73 65 20 6f 72 20 64 69 73 6b 20 66 75 6c  base or disk ful
6f90: 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49  l.<li> [SQLITE_I
6fa0: 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f 4f 20  OERR]: disk I/O 
6fb0: 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49  error.<li> [SQLI
6fc0: 54 45 5f 42 55 53 59 5d 3a 20 64 61 74 61 62 61  TE_BUSY]: databa
6fd0: 73 65 20 69 6e 20 75 73 65 20 62 79 20 61 6e 6f  se in use by ano
6fe0: 74 68 65 72 20 70 72 6f 63 65 73 73 0a 3c 6c 69  ther process.<li
6ff0: 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d  > [SQLITE_NOMEM]
7000: 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79 0a  : out or memory.
7010: 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f  </ul>)^..<p>.^Fo
7020: 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 65  r all of these e
7030: 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61 74  rrors, SQLite at
7040: 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20 6a  tempts to undo j
7050: 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61 74  ust the one stat
7060: 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f 72  ement.it was wor
7070: 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61 76  king on and leav
7080: 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 70  e changes from p
7090: 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20  rior statements 
70a0: 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65 20  within the.same 
70b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 61  transaction inta
70c0: 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  ct and continue 
70d0: 77 69 74 68 20 74 68 65 20 74 72 61 6e 73 61 63  with the transac
70e0: 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65 72 2c  tion.  ^However,
70f0: 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74   .depending on t
7100: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
7110: 6e 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  ng evaluated and
7120: 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77 68   the point at wh
7130: 69 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f 63  ich the.error oc
7140: 63 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20 62  curs, it might b
7150: 65 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20  e necessary for 
7160: 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62 61  SQLite to rollba
7170: 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74 68  ck and.cancel th
7180: 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  e entire transac
7190: 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70 6c 69  tion.  ^An appli
71a0: 63 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c 20  cation can tell 
71b0: 77 68 69 63 68 0a 63 6f 75 72 73 65 20 6f 66 20  which.course of 
71c0: 61 63 74 69 6f 6e 20 53 51 4c 69 74 65 20 74 6f  action SQLite to
71d0: 6f 6b 20 62 79 20 75 73 69 6e 67 20 74 68 65 0a  ok by using the.
71e0: 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74  [sqlite3_get_aut
71f0: 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61 6e  ocommit()] C-lan
7200: 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65 2e  guage interface.
7210: 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20 72  </p>..<p>It is r
7220: 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74 20  ecommended that 
7230: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 65 73  applications res
7240: 70 6f 6e 64 20 74 6f 20 74 68 65 20 65 72 72 6f  pond to the erro
7250: 72 73 0a 6c 69 73 74 65 64 20 61 62 6f 76 65 20  rs.listed above 
7260: 62 79 20 65 78 70 6c 69 63 69 74 6c 79 20 69 73  by explicitly is
7270: 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43 4b  suing a ROLLBACK
7280: 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66 20 74   command.  ^If t
7290: 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  he .transaction 
72a0: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
72b0: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74   rolled back aut
72c0: 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20 74 68  omatically.by th
72d0: 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65  e error response
72e0: 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42  , then the ROLLB
72f0: 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  ACK command will
7300: 20 66 61 69 6c 20 77 69 74 68 20 61 6e 0a 65 72   fail with an.er
7310: 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61 72 6d  ror, but no harm
7320: 20 69 73 20 63 61 75 73 65 64 20 62 79 20 74 68   is caused by th
7330: 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75  is.</p>..<p>Futu
7340: 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  re versions of S
7350: 51 4c 69 74 65 20 6d 61 79 20 65 78 74 65 6e 64  QLite may extend
7360: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 72 72   the list of err
7370: 6f 72 73 20 77 68 69 63 68 0a 6d 69 67 68 74 20  ors which.might 
7380: 63 61 75 73 65 20 61 75 74 6f 6d 61 74 69 63 20  cause automatic 
7390: 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c  transaction roll
73a0: 62 61 63 6b 2e 20 20 46 75 74 75 72 65 20 76 65  back.  Future ve
73b0: 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65  rsions of.SQLite
73c0: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 68   might change th
73d0: 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65  e error response
73e0: 2e 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61 72  .  In particular
73f0: 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65 20  , we may.choose 
7400: 74 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65 20  to simplify the 
7410: 69 6e 74 65 72 66 61 63 65 20 69 6e 20 66 75 74  interface in fut
7420: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ure versions of 
7430: 53 51 4c 69 74 65 20 62 79 0a 63 61 75 73 69 6e  SQLite by.causin
7440: 67 20 74 68 65 20 65 72 72 6f 72 73 20 61 62 6f  g the errors abo
7450: 76 65 20 74 6f 20 66 6f 72 63 65 20 61 6e 20 75  ve to force an u
7460: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f 6c  nconditional rol
7470: 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  lback.</p>..<tcl
7480: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
7490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
74a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
74b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
74c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
74d0: 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56 45 50  #.Section {SAVEP
74e0: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
74f0: 7b 53 41 56 45 50 4f 49 4e 54 20 52 45 4c 45 41  {SAVEPOINT RELEA
7500: 53 45 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  SE}..RecursiveBu
7510: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65  bbleDiagram save
7520: 70 6f 69 6e 74 2d 73 74 6d 74 0a 52 65 63 75 72  point-stmt.Recur
7530: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
7540: 6d 20 72 65 6c 65 61 73 65 2d 73 74 6d 74 0a 52  m release-stmt.R
7550: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
7560: 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73  agram rollback-s
7570: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  tmt.</tcl>..<p> 
7580: 5e 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20  ^SAVEPOINTs are 
7590: 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65 61  a method of crea
75a0: 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e  ting transaction
75b0: 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42  s, similar to.[B
75c0: 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49  EGIN] and [COMMI
75d0: 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  T], except that 
75e0: 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61 6e  the SAVEPOINT an
75f0: 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  d RELEASE comman
7600: 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e 64  ds.are named and
7610: 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e 3c   may be nested.<
7620: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41  /p>..<p> ^The SA
7630: 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20  VEPOINT command 
7640: 73 74 61 72 74 73 20 61 20 6e 65 77 20 74 72 61  starts a new tra
7650: 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61 20  nsaction with a 
7660: 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73  name..^The trans
7670: 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65  action names nee
7680: 64 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65 2e  d not be unique.
7690: 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20 63  .^(A SAVEPOINT c
76a0: 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 65 69  an be started ei
76b0: 74 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20 6f  ther within or o
76c0: 75 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45 47  utside of.a [BEG
76d0: 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29  IN]...[COMMIT].)
76e0: 5e 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56 45  ^  ^(When a SAVE
76f0: 50 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75 74  POINT is the out
7700: 65 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  er-most savepoin
7710: 74 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74 20  t.and it is not 
7720: 77 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d  within a [BEGIN]
7730: 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e  ...[COMMIT] then
7740: 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
7750: 20 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45 47   the.same as BEG
7760: 49 4e 20 44 45 46 45 52 52 45 44 20 54 52 41 4e  IN DEFERRED TRAN
7770: 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a  SACTION.)^</p>..
7780: 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b  <p>^The ROLLBACK
7790: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65   TO command reve
77a0: 72 74 73 20 74 68 65 20 73 74 61 74 65 20 6f 66  rts the state of
77b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 61   the database ba
77c0: 63 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77 61  ck to what.it wa
77d0: 73 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65  s just after the
77e0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 53   corresponding S
77f0: 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65  AVEPOINT.  ^Note
7800: 20 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68 61   that unlike tha
7810: 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43  t.plain [ROLLBAC
7820: 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68  K] command (with
7830: 6f 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77 6f  out the TO keywo
7840: 72 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rd) the ROLLBACK
7850: 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73   TO command.does
7860: 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65 20   not cancel the 
7870: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49  transaction.  ^I
7880: 6e 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65 6c  nstead of cancel
7890: 6c 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61 63  ling the transac
78a0: 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41  tion,.the ROLLBA
78b0: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65  CK TO command re
78c0: 73 74 61 72 74 73 20 74 68 65 20 74 72 61 6e 73  starts the trans
78d0: 61 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74 20  action again at 
78e0: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e  the beginning..^
78f0: 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67 20  All intervening 
7900: 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 63  SAVEPOINTs are c
7910: 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76 65 72  anceled, however
7920: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  .</p>..<p>^The R
7930: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69  ELEASE command i
7940: 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54  s like a [COMMIT
7950: 5d 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e  ] for a SAVEPOIN
7960: 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45 20  T..^The RELEASE 
7970: 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61  command causes a
7980: 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61  ll savepoints ba
7990: 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64  ck to and includ
79a0: 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72 65  ing the .most re
79b0: 63 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 77  cent savepoint w
79c0: 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e  ith a matching n
79d0: 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65  ame to be remove
79e0: 64 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e  d from the .tran
79f0: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20  saction stack.  
7a00: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66 20  ^The RELEASE of 
7a10: 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63  an inner transac
7a20: 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61  tion.does not ca
7a30: 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  use any changes 
7a40: 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f  to be written to
7a50: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
7a60: 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72 65  le; it merely.re
7a70: 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74 73  moves savepoints
7a80: 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 61   from the transa
7a90: 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63 68  ction stack such
7aa0: 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c   that it is.no l
7ab0: 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20 74  onger possible t
7ac0: 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68  o ROLLBACK TO th
7ad0: 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a  ose savepoints..
7ae0: 5e 49 66 20 61 20 52 45 4c 45 41 53 45 20 63 6f  ^If a RELEASE co
7af0: 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74  mmand releases t
7b00: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
7b10: 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20  epoint, so.that 
7b20: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
7b30: 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d  stack becomes em
7b40: 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41 53  pty, then RELEAS
7b50: 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73  E is the same.as
7b60: 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20   [COMMIT]..^The 
7b70: 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64  [COMMIT] command
7b80: 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f 20   may be used to 
7b90: 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76 65  release all save
7ba0: 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69  points and.commi
7bb0: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
7bc0: 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 74 72  n even if the tr
7bd0: 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f 72  ansaction was or
7be0: 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65 64  iginally started
7bf0: 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54 20  .by a SAVEPOINT 
7c00: 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64 20  command instead 
7c10: 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d  of a [BEGIN] com
7c20: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  mand.</p>..<p>^I
7c30: 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d  f the savepoint-
7c40: 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41 53  name in a RELEAS
7c50: 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e  E command does n
7c60: 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61 76  ot match any.sav
7c70: 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  epoint currently
7c80: 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74   in the transact
7c90: 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e 20  ion stack, then 
7ca0: 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72  no savepoints ar
7cb0: 65 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65 20  e.released, the 
7cc0: 64 61 74 61 62 61 73 65 20 69 73 20 75 6e 63 68  database is unch
7cd0: 61 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20 52  anged, and the R
7ce0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72  ELEASE command r
7cf0: 65 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e  eturns.an error.
7d00: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  </p>..<p>^Note t
7d10: 68 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72 61  hat an inner tra
7d20: 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 63  nsaction might c
7d30: 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68 65  ommit (using the
7d40: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
7d50: 29 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65 72  ).but then later
7d60: 20 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20 75   have its work u
7d70: 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42  ndone by a ROLLB
7d80: 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20  ACK in an outer 
7d90: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20  transaction..^A 
7da0: 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72  power failure or
7db0: 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20 6f   program crash o
7dc0: 72 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c 20  r OS crash will 
7dd0: 63 61 75 73 65 20 74 68 65 20 6f 75 74 65 72 2d  cause the outer-
7de0: 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e  most.transaction
7df0: 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e   to rollback, un
7e00: 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65  doing all change
7e10: 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75  s that have occu
7e20: 72 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61 74  rred within.that
7e30: 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69   outer transacti
7e40: 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65 73  on, even changes
7e50: 20 74 68 61 74 20 68 61 76 65 20 73 75 70 70 6f   that have suppo
7e60: 73 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d  sedly been "comm
7e70: 69 74 74 65 64 22 0a 62 79 20 74 68 65 20 52 45  itted".by the RE
7e80: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  LEASE command.  
7e90: 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20  ^Content is not 
7ea0: 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74  actually committ
7eb0: 65 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a  ed on the disk .
7ec0: 75 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72 6d  until the outerm
7ed0: 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ost transaction 
7ee0: 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70  commits.</p>..<p
7ef0: 3e 54 68 65 72 65 20 61 72 65 20 73 65 76 65 72  >There are sever
7f00: 61 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e 6b  al ways of think
7f10: 69 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52 45  ing about the RE
7f20: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f  LEASE command:</
7f30: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ul>.<li><p>
7f40: 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69 65  .Some people vie
7f50: 77 20 52 45 4c 45 41 53 45 20 61 73 20 74 68 65  w RELEASE as the
7f60: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 43   equivalent of C
7f70: 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56 45  OMMIT for a SAVE
7f80: 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20 61  POINT..This is a
7f90: 6e 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f 69  n acceptable poi
7fa0: 6e 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c 6f  nt of view as lo
7fb0: 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62  ng as one rememb
7fc0: 65 72 73 20 74 68 61 74 20 74 68 65 0a 63 68 61  ers that the.cha
7fd0: 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20 62  nges committed b
7fe0: 79 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73  y an inner trans
7ff0: 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74  action might lat
8000: 65 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79 20  er be undone by 
8010: 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e  a.rollback in an
8020: 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69   outer transacti
8030: 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  on.</p></li>..<l
8040: 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69  i><p>.Another vi
8050: 65 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69 73  ew of RELEASE is
8060: 20 74 68 61 74 20 69 74 20 6d 65 72 67 65 73 20   that it merges 
8070: 61 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74  a named transact
8080: 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61 72  ion into its.par
8090: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ent transaction,
80a0: 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61 6d   so that the nam
80b0: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  ed transaction a
80c0: 6e 64 20 69 74 73 20 70 61 72 65 6e 74 20 62 65  nd its parent be
80d0: 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74 72  come.the same tr
80e0: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74 65  ansaction.  Afte
80f0: 72 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20 6e  r RELEASE, the n
8100: 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  amed transaction
8110: 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 0a   and its parent.
8120: 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72  will commit or r
8130: 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65 72  ollback together
8140: 2c 20 77 68 61 74 65 76 65 72 20 74 68 65 69 72  , whatever their
8150: 20 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f   fate may be..</
8160: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
8170: 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74 68  .One can also th
8180: 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e 74  ink of savepoint
8190: 73 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20  s as."marks" in 
81a0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
81b0: 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68  timeline.  In th
81c0: 69 73 20 76 69 65 77 2c 20 74 68 65 20 53 41 56  is view, the SAV
81d0: 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63  EPOINT command.c
81e0: 72 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61 72  reates a new mar
81f0: 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  k, the ROLLBACK 
8200: 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e  TO command rewin
8210: 64 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20  ds the timeline 
8220: 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20  back.to a point 
8230: 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20 6e  just after the n
8240: 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74  amed mark, and t
8250: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
8260: 6e 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73 20  nd.erases marks 
8270: 66 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e  from the timelin
8280: 65 20 77 69 74 68 6f 75 74 20 61 63 74 75 61 6c  e without actual
8290: 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68  ly making any.ch
82a0: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74  anges to the dat
82b0: 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e  abase..</p></li>
82c0: 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72  .</ul>....<h3>Tr
82d0: 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e  ansaction Nestin
82e0: 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70  g Rules</h3>..<p
82f0: 3e 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e 73  >^The last trans
8300: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 77  action started w
8310: 69 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73 74  ill be the first
8320: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d  .transaction com
8330: 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64  mitted or rolled
8340: 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   back.</p>..<p>^
8350: 54 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d  The [BEGIN] comm
8360: 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69  and only works i
8370: 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  f the transactio
8380: 6e 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74 79  n stack is empty
8390: 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f  , or.in other wo
83a0: 72 64 73 20 69 66 20 74 68 65 72 65 20 61 72 65  rds if there are
83b0: 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61 6e   no pending tran
83c0: 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74  sactions.  ^If t
83d0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73  he transaction.s
83e0: 74 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74  tack is not empt
83f0: 79 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47 49  y when the [BEGI
8400: 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e  N] command is in
8410: 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65 20  voked, then the 
8420: 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69  command.fails wi
8430: 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e  th an error.</p>
8440: 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49  ..<p>^The [COMMI
8450: 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69  T] command commi
8460: 74 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69  ts all outstandi
8470: 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  ng transactions 
8480: 61 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20 74  and leaves.the t
8490: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
84a0: 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e   empty.</p>..<p>
84b0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  ^The RELEASE com
84c0: 6d 61 6e 64 20 73 74 61 72 74 73 20 77 69 74 68  mand starts with
84d0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
84e0: 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65   addition to the
84f0: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61  .transaction sta
8500: 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ck and releases 
8510: 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 77  savepoints backw
8520: 61 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e  ards .in time un
8530: 74 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73 20  til it releases 
8540: 61 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68  a savepoint with
8550: 20 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65   a matching save
8560: 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69  point-name..^Pri
8570: 6f 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20 65  or savepoints, e
8580: 76 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 77  ven savepoints w
8590: 69 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61 76  ith matching sav
85a0: 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72  epoint-names, ar
85b0: 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66  e.unchanged..^If
85c0: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
85d0: 6d 61 6e 64 20 63 61 75 73 65 73 20 74 68 65 0a  mand causes the.
85e0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
85f0: 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74  k to become empt
8600: 79 20 28 69 66 20 74 68 65 20 52 45 4c 45 41 53  y (if the RELEAS
8610: 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73  E command releas
8620: 65 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74  es the.outermost
8630: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f   transaction fro
8640: 6d 20 74 68 65 20 73 74 61 63 6b 29 20 74 68 65  m the stack) the
8650: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
8660: 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a  n commits.</p>..
8670: 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43  <p>^The [ROLLBAC
8680: 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f  K] command witho
8690: 75 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72  ut a TO clause r
86a0: 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20 74  olls backs all t
86b0: 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20  ransactions.and 
86c0: 6c 65 61 76 65 73 20 74 68 65 20 74 72 61 6e 73  leaves the trans
86d0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70  action stack emp
86e0: 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ty.</p>..<p>^The
86f0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
8700: 64 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61 75  d with a TO clau
8710: 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72  se rolls back tr
8720: 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67  ansactions going
8730: 0a 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74 69  .backwards in ti
8740: 6d 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20 6d  me back to the m
8750: 6f 73 74 20 72 65 63 65 6e 74 20 53 41 56 45 50  ost recent SAVEP
8760: 4f 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74 63  OINT with a matc
8770: 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20  hing name..^The 
8780: 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20 74  SAVEPOINT with t
8790: 68 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65  he matching name
87a0: 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20   remains on the 
87b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
87c0: 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61 62  k,.but all datab
87d0: 61 73 65 20 63 68 61 6e 67 65 73 20 74 68 61 74  ase changes that
87e0: 20 6f 63 63 75 72 72 65 64 20 61 66 74 65 72 20   occurred after 
87f0: 74 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20 77  that SAVEPOINT w
8800: 61 73 20 63 72 65 61 74 65 64 0a 61 72 65 20 72  as created.are r
8810: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66  olled back.  ^If
8820: 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e   the savepoint-n
8830: 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43  ame in a ROLLBAC
8840: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  K TO command doe
8850: 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20  s not.match any 
8860: 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65  SAVEPOINT on the
8870: 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68 65   stack, then the
8880: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
8890: 64 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 0a  d fails with an.
88a0: 65 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65 73  error and leaves
88b0: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
88c0: 65 20 64 61 74 61 62 61 73 65 20 75 6e 63 68 61  e database uncha
88d0: 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  nged.</p>..<tcl>
88e0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
88f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8930: 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74  .Section comment
8940: 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e   comment {commen
8950: 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 52 65  t *comments}..Re
8960: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
8970: 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e  gram comment-syn
8980: 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tax.</tcl>..<p>^
8990: 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74  Comments are not
89a0: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62   SQL commands, b
89b0: 75 74 20 63 61 6e 20 6f 63 63 75 72 20 77 69 74  ut can occur wit
89c0: 68 69 6e 20 74 68 65 20 74 65 78 74 20 6f 66 0a  hin the text of.
89d0: 53 51 4c 20 71 75 65 72 69 65 73 20 70 61 73 73  SQL queries pass
89e0: 65 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 70  ed to [sqlite3_p
89f0: 72 65 70 61 72 65 5f 76 32 28 29 5d 20 61 6e 64  repare_v2()] and
8a00: 20 72 65 6c 61 74 65 64 20 69 6e 74 65 72 66 61   related interfa
8a10: 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61  ces..^Comments a
8a20: 72 65 20 74 72 65 61 74 65 64 20 61 73 20 77 68  re treated as wh
8a30: 69 74 65 73 70 61 63 65 20 62 79 20 74 68 65 20  itespace by the 
8a40: 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74  parser..^Comment
8a50: 73 20 63 61 6e 20 62 65 67 69 6e 20 61 6e 79 77  s can begin anyw
8a60: 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20  here whitespace 
8a70: 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69  .can be found, i
8a80: 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20  ncluding inside 
8a90: 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
8aa0: 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c   span multiple l
8ab0: 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ines..</p>..<p>^
8ac0: 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67  SQL comments beg
8ad0: 69 6e 20 77 69 74 68 20 74 77 6f 20 63 6f 6e 73  in with two cons
8ae0: 65 63 75 74 69 76 65 20 22 2d 22 20 63 68 61 72  ecutive "-" char
8af0: 61 63 74 65 72 73 20 28 41 53 43 49 49 20 30 78  acters (ASCII 0x
8b00: 32 64 29 0a 61 6e 64 20 65 78 74 65 6e 64 20 75  2d).and extend u
8b10: 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69  p to and includi
8b20: 6e 67 20 74 68 65 20 6e 65 78 74 20 6e 65 77 6c  ng the next newl
8b30: 69 6e 65 20 63 68 61 72 61 63 74 65 72 20 28 41  ine character (A
8b40: 53 43 49 49 20 30 78 30 61 29 0a 6f 72 20 75 6e  SCII 0x0a).or un
8b50: 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69  til the end of i
8b60: 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20  nput, whichever 
8b70: 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f 70 3e  comes first.</p>
8b80: 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20 63 6f  ..<p>^C-style co
8b90: 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69 74  mments begin.wit
8ba0: 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e  h "/*" and exten
8bb0: 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c  d up to and incl
8bc0: 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 22  uding the next "
8bd0: 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20 70 61  */" character pa
8be0: 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20  ir.or until the 
8bf0: 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68  end of input, wh
8c00: 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69  ichever comes fi
8c10: 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20 63  rst.  ^C-style c
8c20: 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e  omments.can span
8c30: 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e   multiple lines.
8c40: 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65   </p>..<p>^Comme
8c50: 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 61  nts can appear a
8c60: 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61  nywhere whitespa
8c70: 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e  ce can occur,.in
8c80: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
8c90: 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69  xpressions and i
8ca0: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
8cb0: 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
8cc0: 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20  ents..^Comments 
8cd0: 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70  do not nest..</p
8ce0: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
8cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d30: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
8d40: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20   {CREATE INDEX} 
8d50: 63 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52  createindex {{CR
8d60: 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 52 65  EATE INDEX}}..Re
8d70: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
8d80: 67 72 61 6d 20 63 72 65 61 74 65 2d 69 6e 64 65  gram create-inde
8d90: 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  x-stmt.</tcl>..<
8da0: 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 49 4e  p>^The CREATE IN
8db0: 44 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73  DEX command cons
8dc0: 69 73 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77  ists of the keyw
8dd0: 6f 72 64 73 20 22 43 52 45 41 54 45 20 49 4e 44  ords "CREATE IND
8de0: 45 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20  EX" followed.by 
8df0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
8e00: 6e 65 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b  new index, the k
8e10: 65 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65  eyword "ON", the
8e20: 20 6e 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69   name of a previ
8e30: 6f 75 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61  ously.created ta
8e40: 62 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62  ble that is to b
8e50: 65 20 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61  e indexed, and a
8e60: 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c   parenthesized l
8e70: 69 73 74 20 6f 66 20 74 61 62 6c 65 20 63 6f 6c  ist of table col
8e80: 75 6d 6e 0a 6e 61 6d 65 73 20 61 6e 64 2f 6f 72  umn.names and/or
8e90: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
8ea0: 74 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 74  t are used for t
8eb0: 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 49 66  he index key..If
8ec0: 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 57 48   the optional WH
8ed0: 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 69 6e  ERE clause is in
8ee0: 63 6c 75 64 65 64 2c 20 74 68 65 6e 20 74 68 65  cluded, then the
8ef0: 20 69 6e 64 65 78 20 69 73 20 61 20 22 5b 70 61   index is a "[pa
8f00: 72 74 69 61 6c 20 69 6e 64 65 78 5d 22 2e 0a 3c  rtial index]"..<
8f10: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
8f20: 67 6d 65 6e 74 20 7b 64 65 73 63 69 64 78 7d 20  gment {descidx} 
8f30: 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 69  {descending indi
8f40: 63 65 73 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67  ces} {descending
8f50: 20 69 6e 64 65 78 7d 20 5c 0a 20 20 20 20 7b 64   index} \.    {d
8f60: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 65  escending indexe
8f70: 73 7d 20 7b 44 45 53 43 7d 3c 2f 74 63 6c 3e 0a  s} {DESC}</tcl>.
8f80: 3c 70 3e 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20  <p>^Each column 
8f90: 6e 61 6d 65 20 6f 72 20 65 78 70 72 65 73 73 69  name or expressi
8fa0: 6f 6e 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77  on can be follow
8fb0: 65 64 20 62 79 20 6f 6e 65 0a 6f 66 20 74 68 65  ed by one.of the
8fc0: 20 22 41 53 43 22 20 6f 72 20 22 44 45 53 43 22   "ASC" or "DESC"
8fd0: 20 6b 65 79 77 6f 72 64 73 20 74 6f 20 69 6e 64   keywords to ind
8fe0: 69 63 61 74 65 20 73 6f 72 74 20 6f 72 64 65 72  icate sort order
8ff0: 2e 0a 5e 54 68 65 20 73 6f 72 74 20 6f 72 64 65  ..^The sort orde
9000: 72 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74  r may or may not
9010: 20 62 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65   be ignored depe
9020: 6e 64 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74  nding.on the dat
9030: 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61  abase file forma
9040: 74 2c 20 61 6e 64 20 69 6e 20 70 61 72 74 69 63  t, and in partic
9050: 75 6c 61 72 20 74 68 65 20 5b 73 63 68 65 6d 61  ular the [schema
9060: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 2e   format number].
9070: 0a 5e 54 68 65 20 22 6c 65 67 61 63 79 22 20 73  .^The "legacy" s
9080: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 31 29  chema format (1)
9090: 20 69 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a 73   ignores index.s
90a0: 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65  ort order.  ^The
90b0: 20 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65   descending inde
90c0: 78 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  x schema format 
90d0: 28 34 29 20 74 61 6b 65 73 20 69 6e 64 65 78 20  (4) takes index 
90e0: 73 6f 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20  sort order.into 
90f0: 61 63 63 6f 75 6e 74 2e 20 20 4f 6e 6c 79 20 76  account.  Only v
9100: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
9110: 65 20 33 2e 33 2e 30 20 28 5b 64 61 74 65 6f 66  e 3.3.0 ([dateof
9120: 3a 33 2e 33 2e 30 5d 29 0a 61 6e 64 20 6c 61 74  :3.3.0]).and lat
9130: 65 72 20 61 72 65 20 61 62 6c 65 20 74 6f 20 75  er are able to u
9140: 6e 64 65 72 73 74 61 6e 64 0a 74 68 65 20 64 65  nderstand.the de
9150: 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 66  scending index f
9160: 6f 72 6d 61 74 2e 20 46 6f 72 20 63 6f 6d 70 61  ormat. For compa
9170: 74 69 62 69 6c 69 74 79 2c 20 76 65 72 73 69 6f  tibility, versio
9180: 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65 74 77  n of SQLite betw
9190: 65 65 6e 20 33 2e 33 2e 30 0a 61 6e 64 20 33 2e  een 3.3.0.and 3.
91a0: 37 2e 39 20 75 73 65 20 74 68 65 20 6c 65 67 61  7.9 use the lega
91b0: 63 79 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  cy schema format
91c0: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68   by default.  Th
91d0: 65 20 6e 65 77 65 72 20 73 63 68 65 6d 61 20 66  e newer schema f
91e0: 6f 72 6d 61 74 20 69 73 0a 75 73 65 64 20 62 79  ormat is.used by
91f0: 20 64 65 66 61 75 6c 74 20 69 6e 20 76 65 72 73   default in vers
9200: 69 6f 6e 20 33 2e 37 2e 31 30 20 28 5b 64 61 74  ion 3.7.10 ([dat
9210: 65 6f 66 3a 33 2e 37 2e 31 30 5d 29 20 61 6e 64  eof:3.7.10]) and
9220: 20 6c 61 74 65 72 2e 0a 5e 54 68 65 20 5b 6c 65   later..^The [le
9230: 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74  gacy_file_format
9240: 20 70 72 61 67 6d 61 5d 20 63 61 6e 20 62 65 20   pragma] can be 
9250: 75 73 65 64 20 74 6f 20 63 68 61 6e 67 65 20 73  used to change s
9260: 65 74 20 74 68 65 20 73 70 65 63 69 66 69 63 0a  et the specific.
9270: 62 65 68 61 76 69 6f 72 20 66 6f 72 20 61 6e 79  behavior for any
9280: 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69   version of SQLi
9290: 74 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  te.</p>..<tcl>hd
92a0: 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 69 64  _fragment collid
92b0: 78 20 7b 43 4f 4c 4c 41 54 45 7d 3c 2f 74 63 6c  x {COLLATE}</tcl
92c0: 3e 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54  >.<p>^The COLLAT
92d0: 45 20 63 6c 61 75 73 65 20 6f 70 74 69 6f 6e 61  E clause optiona
92e0: 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61  lly following ea
92f0: 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 6f  ch column name.o
9300: 72 20 65 78 70 72 65 73 73 69 6f 6e 20 64 65 66  r expression def
9310: 69 6e 65 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67  ines a.collating
9320: 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 66   sequence used f
9330: 6f 72 20 74 65 78 74 20 65 6e 74 72 69 65 73 20  or text entries 
9340: 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a  in that column..
9350: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c  ^The default col
9360: 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20  lating.sequence 
9370: 69 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  is the collating
9380: 20 73 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65   sequence define
9390: 64 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  d for that colum
93a0: 6e 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45  n in the.[CREATE
93b0: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
93c0: 74 2e 20 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f  t.  ^Or if no co
93d0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
93e0: 20 69 73 20 6f 74 68 65 72 77 69 73 65 20 64 65   is otherwise de
93f0: 66 69 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74  fined,.the built
9400: 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61  -in BINARY colla
9410: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
9420: 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   used.</p>..<tcl
9430: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 64  >hd_fragment ind
9440: 65 78 65 78 70 72 3c 2f 74 63 6c 3e 0a 3c 70 3e  exexpr</tcl>.<p>
9450: 5e 45 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20  ^Expressions in 
9460: 61 6e 20 69 6e 64 65 78 20 6d 61 79 20 6e 6f 74  an index may not
9470: 20 72 65 66 65 72 65 6e 63 65 20 6f 74 68 65 72   reference other
9480: 20 74 61 62 6c 65 73 0a 61 6e 64 20 6d 61 79 20   tables.and may 
9490: 6e 6f 74 20 75 73 65 20 73 75 62 71 75 65 72 69  not use subqueri
94a0: 65 73 20 6e 6f 72 20 66 75 6e 63 74 69 6f 6e 73  es nor functions
94b0: 20 77 68 6f 73 65 20 72 65 73 75 6c 74 20 6d 69   whose result mi
94c0: 67 68 74 0a 63 68 61 6e 67 65 20 28 65 78 3a 20  ght.change (ex: 
94d0: 5b 72 61 6e 64 6f 6d 28 29 5d 20 6f 72 20 5b 73  [random()] or [s
94e0: 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 5d  qlite_version()]
94f0: 29 2e 0a 5e 45 78 70 72 65 73 73 69 6f 6e 73 20  )..^Expressions 
9500: 69 6e 20 61 6e 20 69 6e 64 65 78 20 6d 61 79 20  in an index may 
9510: 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 63 6f  only refer to co
9520: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
9530: 6c 65 0a 74 68 61 74 20 69 73 20 62 65 69 6e 67  le.that is being
9540: 20 69 6e 64 65 78 65 64 2e 0a 49 6e 64 65 78 65   indexed..Indexe
9550: 73 20 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s on expression 
9560: 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 77 69  will not work wi
9570: 74 68 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  th versions of S
9580: 51 4c 69 74 65 20 70 72 69 6f 72 0a 74 6f 20 5b  QLite prior.to [
9590: 76 65 72 73 69 6f 6e 20 33 2e 39 2e 30 5d 20 28  version 3.9.0] (
95a0: 5b 64 61 74 65 6f 66 3a 33 2e 39 2e 30 5d 29 2e  [dateof:3.9.0]).
95b0: 0a 53 65 65 20 74 68 65 20 5b 49 6e 64 65 78 65  .See the [Indexe
95c0: 73 20 4f 6e 20 45 78 70 72 65 73 73 69 6f 6e 73  s On Expressions
95d0: 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61  ] document for a
95e0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
95f0: 61 74 69 6f 6e 0a 61 62 6f 75 74 20 75 73 69 6e  ation.about usin
9600: 67 20 67 65 6e 65 72 61 6c 20 65 78 70 72 65 73  g general expres
9610: 73 69 6f 6e 73 20 69 6e 20 43 52 45 41 54 45 20  sions in CREATE 
9620: 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 73  INDEX statements
9630: 2e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  ...<p>There are 
9640: 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d  no arbitrary lim
9650: 69 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  its on the numbe
9660: 72 20 6f 66 20 69 6e 64 69 63 65 73 20 74 68 61  r of indices tha
9670: 74 20 63 61 6e 20 62 65 0a 61 74 74 61 63 68 65  t can be.attache
9680: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
9690: 62 6c 65 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62  ble.  ^(The numb
96a0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
96b0: 20 61 6e 20 69 6e 64 65 78 20 69 73 20 0a 6c 69   an index is .li
96c0: 6d 69 74 65 64 20 74 6f 20 74 68 65 20 76 61 6c  mited to the val
96d0: 75 65 20 73 65 74 20 62 79 0a 5b 73 71 6c 69 74  ue set by.[sqlit
96e0: 65 33 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54  e3_limit]([SQLIT
96f0: 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c  E_LIMIT_COLUMN],
9700: 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63  ...).)^</p>..<tc
9710: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e  l>hd_fragment un
9720: 69 71 75 65 69 64 78 20 7b 75 6e 69 71 75 65 20  iqueidx {unique 
9730: 69 6e 64 65 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  index}</tcl>.<p>
9740: 5e 49 66 20 74 68 65 20 55 4e 49 51 55 45 20 6b  ^If the UNIQUE k
9750: 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62  eyword appears b
9760: 65 74 77 65 65 6e 20 43 52 45 41 54 45 20 61 6e  etween CREATE an
9770: 64 20 49 4e 44 45 58 20 74 68 65 6e 20 64 75 70  d INDEX then dup
9780: 6c 69 63 61 74 65 0a 69 6e 64 65 78 20 65 6e 74  licate.index ent
9790: 72 69 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  ries are not all
97a0: 6f 77 65 64 2e 20 20 5e 41 6e 79 20 61 74 74 65  owed.  ^Any atte
97b0: 6d 70 74 20 74 6f 20 69 6e 73 65 72 74 20 61 20  mpt to insert a 
97c0: 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72 79 0a  duplicate entry.
97d0: 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
97e0: 6e 20 65 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74  n error.  ^For t
97f0: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 75  he purposes of u
9800: 6e 69 71 75 65 20 69 6e 64 69 63 65 73 2c 20 61  nique indices, a
9810: 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61  ll NULL values.a
9820: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69  re considered di
9830: 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c  fferent from all
9840: 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75   other NULL valu
9850: 65 73 20 61 6e 64 20 61 72 65 20 74 68 75 73 20  es and are thus 
9860: 75 6e 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20  unique..This is 
9870: 6f 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70  one of the two p
9880: 6f 73 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65  ossible interpre
9890: 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53  tations of the S
98a0: 51 4c 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28  QL-92 standard.(
98b0: 74 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20  the language in 
98c0: 74 68 65 20 73 74 61 6e 64 61 72 64 20 69 73 20  the standard is 
98d0: 61 6d 62 69 67 75 6f 75 73 29 20 61 6e 64 20 69  ambiguous) and i
98e0: 73 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 61  s the interpreta
98f0: 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79  tion.followed by
9900: 20 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79 53   PostgreSQL, MyS
9910: 51 4c 2c 20 46 69 72 65 62 69 72 64 2c 20 61 6e  QL, Firebird, an
9920: 64 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72  d Oracle.  Infor
9930: 6d 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66  mix and.Microsof
9940: 74 20 53 51 4c 20 53 65 72 76 65 72 20 66 6f 6c  t SQL Server fol
9950: 6c 6f 77 20 74 68 65 20 6f 74 68 65 72 20 69 6e  low the other in
9960: 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
9970: 74 68 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70  the standard.</p
9980: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70  >..<p>^If the op
9990: 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58  tional IF NOT EX
99a0: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
99b0: 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68  resent and anoth
99c0: 65 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74 68  er index.with th
99d0: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65  e same name alre
99e0: 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e  ady exists, then
99f0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65   this command be
9a00: 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f  comes a no-op.</
9a10: 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20  p>..<p>^Indexes 
9a20: 61 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68  are removed with
9a30: 20 74 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58   the [DROP INDEX
9a40: 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a  ] command.</p>..
9a50: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
9a60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9a70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9a80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9a90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9aa0: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
9ab0: 52 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72  REATE TABLE} {cr
9ac0: 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45  eatetable} {{CRE
9ad0: 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63  ATE TABLE}}..Rec
9ae0: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
9af0: 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65  ram create-table
9b00: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
9b10: 3e 54 68 65 20 22 43 52 45 41 54 45 20 54 41 42  >The "CREATE TAB
9b20: 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  LE" command is u
9b30: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
9b40: 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e 20  new table in an 
9b50: 53 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73 65  SQLite .database
9b60: 2e 20 41 20 43 52 45 41 54 45 20 54 41 42 4c 45  . A CREATE TABLE
9b70: 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66 69   command specifi
9b80: 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  es the following
9b90: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 74   attributes of t
9ba0: 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a 3c  he.new table:..<
9bb0: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68 65  ul>.  <li><p>The
9bc0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77   name of the new
9bd0: 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c   table...  <li><
9be0: 70 3e 20 54 68 65 20 64 61 74 61 62 61 73 65 20  p> The database 
9bf0: 69 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65 77  in which the new
9c00: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
9c10: 64 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62 65  d. Tables may be
9c20: 20 0a 20 20 20 20 20 20 63 72 65 61 74 65 64 20   .      created 
9c30: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
9c40: 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64  base, the temp d
9c50: 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20 61  atabase, or in a
9c60: 6e 79 20 61 74 74 61 63 68 65 64 0a 20 20 20 20  ny attached.    
9c70: 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20 3c    database...  <
9c80: 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65 20  li><p> The name 
9c90: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of each column i
9ca0: 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20  n the table...  
9cb0: 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63 6c  <li><p> The decl
9cc0: 61 72 65 64 20 74 79 70 65 20 6f 66 20 65 61 63  ared type of eac
9cd0: 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
9ce0: 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  table...  <li><p
9cf0: 3e 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c 75  > A default valu
9d00: 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20  e or expression 
9d10: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
9d20: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20  in the table... 
9d30: 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61 75   <li><p> A defau
9d40: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
9d50: 75 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69 74  uence to use wit
9d60: 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a  h each column...
9d70: 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e    <li><p> Option
9d80: 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59 20  ally, a PRIMARY 
9d90: 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c  KEY for the tabl
9da0: 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20 63  e. Both single c
9db0: 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20 20  olumn and.      
9dc0: 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c 74   composite (mult
9dd0: 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72 69  iple column) pri
9de0: 6d 61 72 79 20 6b 65 79 73 20 61 72 65 20 73 75  mary keys are su
9df0: 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e  pported...  <li>
9e00: 3c 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51 4c  <p> A set of SQL
9e10: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72   constraints for
9e20: 20 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51 4c   each table. SQL
9e30: 69 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e 49  ite supports UNI
9e40: 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20 20  QUE, NOT.       
9e50: 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64 20  NULL, CHECK and 
9e60: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
9e70: 74 72 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e  traints...  <li>
9e80: 3c 70 3e 20 57 68 65 74 68 65 72 20 74 68 65 20  <p> Whether the 
9e90: 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48  table is a [WITH
9ea0: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
9eb0: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72  ..</ul>..<p>Ever
9ec0: 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  y CREATE TABLE s
9ed0: 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 73 70  tatement must sp
9ee0: 65 63 69 66 79 20 61 20 6e 61 6d 65 20 66 6f 72  ecify a name for
9ef0: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a   the new table..
9f00: 20 20 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73 20    ^(Table names 
9f10: 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20  that begin with 
9f20: 22 73 71 6c 69 74 65 5f 22 20 61 72 65 20 72 65  "sqlite_" are re
9f30: 73 65 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72  served for inter
9f40: 6e 61 6c 20 75 73 65 2e 20 49 74 0a 20 20 69 73  nal use. It.  is
9f50: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74   an error to att
9f60: 65 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61  empt to create a
9f70: 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 6e 61   table with a na
9f80: 6d 65 20 74 68 61 74 20 73 74 61 72 74 73 20 77  me that starts w
9f90: 69 74 68 0a 20 20 22 73 71 6c 69 74 65 5f 22 2e  ith.  "sqlite_".
9fa0: 29 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 3c 79  )^..<p> ^If a <y
9fb0: 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d  yterm>schema-nam
9fc0: 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 73 70  e</yyterm> is sp
9fd0: 65 63 69 66 69 65 64 2c 20 69 74 20 6d 75 73 74  ecified, it must
9fe0: 20 62 65 20 65 69 74 68 65 72 20 22 6d 61 69 6e   be either "main
9ff0: 22 2c 20 0a 20 20 22 74 65 6d 70 22 2c 20 6f 72  ", .  "temp", or
a000: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20   the name of an 
a010: 5b 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45  [ATTACH DATABASE
a020: 7c 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61  |attached databa
a030: 73 65 5d 2e 20 5e 49 6e 20 74 68 69 73 20 63 61  se]. ^In this ca
a040: 73 65 0a 20 20 74 68 65 20 6e 65 77 20 74 61 62  se.  the new tab
a050: 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  le is created in
a060: 20 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62   the named datab
a070: 61 73 65 2e 20 5e 49 66 20 74 68 65 20 22 54 45  ase. ^If the "TE
a080: 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52  MP" or "TEMPORAR
a090: 59 22 0a 20 20 6b 65 79 77 6f 72 64 20 6f 63 63  Y".  keyword occ
a0a0: 75 72 73 20 62 65 74 77 65 65 6e 20 74 68 65 20  urs between the 
a0b0: 22 43 52 45 41 54 45 22 20 61 6e 64 20 22 54 41  "CREATE" and "TA
a0c0: 42 4c 45 22 20 74 68 65 6e 20 74 68 65 20 6e 65  BLE" then the ne
a0d0: 77 20 74 61 62 6c 65 20 69 73 0a 20 20 63 72 65  w table is.  cre
a0e0: 61 74 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70  ated in the temp
a0f0: 20 64 61 74 61 62 61 73 65 2e 20 5e 49 74 20 69   database. ^It i
a100: 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70  s an error to sp
a110: 65 63 69 66 79 20 62 6f 74 68 20 61 20 0a 20 20  ecify both a .  
a120: 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e  <yyterm>schema-n
a130: 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64  ame</yyterm> and
a140: 20 74 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d   the TEMP or TEM
a150: 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64 2c 20  PORARY keyword, 
a160: 75 6e 6c 65 73 73 20 74 68 65 0a 20 20 3c 79 79  unless the.  <yy
a170: 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
a180: 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 22 74 65  </yyterm> is "te
a190: 6d 70 22 2e 20 0a 20 20 5e 49 66 20 6e 6f 20 73  mp". .  ^If no s
a1a0: 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70  chema name is sp
a1b0: 65 63 69 66 69 65 64 20 61 6e 64 20 74 68 65 0a  ecified and the.
a1c0: 20 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69    TEMP keyword i
a1d0: 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 74 68  s not present th
a1e0: 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  en the table is 
a1f0: 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d  created in the m
a200: 61 69 6e 0a 20 20 64 61 74 61 62 61 73 65 2e 0a  ain.  database..
a210: 0a 3c 70 3e 0a 20 20 5e 49 74 20 69 73 20 75 73  .<p>.  ^It is us
a220: 75 61 6c 6c 79 20 61 6e 20 65 72 72 6f 72 20 74  ually an error t
a230: 6f 20 61 74 74 65 6d 70 74 20 74 6f 20 63 72 65  o attempt to cre
a240: 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20  ate a new table 
a250: 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 68  in a database th
a260: 61 74 0a 20 20 61 6c 72 65 61 64 79 20 63 6f 6e  at.  already con
a270: 74 61 69 6e 73 20 61 20 74 61 62 6c 65 2c 20 69  tains a table, i
a280: 6e 64 65 78 20 6f 72 20 76 69 65 77 20 6f 66 20  ndex or view of 
a290: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e 20 5e  the same name. ^
a2a0: 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 0a  However, if the.
a2b0: 20 20 22 49 46 20 4e 4f 54 20 45 58 49 53 54 53    "IF NOT EXISTS
a2c0: 22 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63  " clause is spec
a2d0: 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
a2e0: 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c   the CREATE TABL
a2f0: 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 0a  E statement and.
a300: 20 20 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65    a table or vie
a310: 77 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61  w of the same na
a320: 6d 65 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  me already exist
a330: 73 2c 20 74 68 65 20 43 52 45 41 54 45 20 54 41  s, the CREATE TA
a340: 42 4c 45 20 63 6f 6d 6d 61 6e 64 0a 20 20 73 69  BLE command.  si
a350: 6d 70 6c 79 20 68 61 73 20 6e 6f 20 65 66 66 65  mply has no effe
a360: 63 74 20 28 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ct (and no error
a370: 20 6d 65 73 73 61 67 65 20 69 73 20 72 65 74 75   message is retu
a380: 72 6e 65 64 29 2e 20 5e 41 6e 20 65 72 72 6f 72  rned). ^An error
a390: 20 69 73 20 73 74 69 6c 6c 0a 20 20 72 65 74 75   is still.  retu
a3a0: 72 6e 65 64 20 69 66 20 74 68 65 20 74 61 62 6c  rned if the tabl
a3b0: 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61  e cannot be crea
a3c0: 74 65 64 20 62 65 63 61 75 73 65 20 6f 66 20 61  ted because of a
a3d0: 6e 20 65 78 69 73 74 69 6e 67 20 69 6e 64 65 78  n existing index
a3e0: 2c 20 65 76 65 6e 20 0a 20 20 69 66 20 74 68 65  , even .  if the
a3f0: 20 22 49 46 20 4e 4f 54 20 45 58 49 53 54 53 22   "IF NOT EXISTS"
a400: 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
a410: 66 69 65 64 2e 0a 0a 3c 70 3e 5e 49 74 20 69 73  fied...<p>^It is
a420: 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 74 6f   not an error to
a430: 20 63 72 65 61 74 65 20 61 20 74 61 62 6c 65 20   create a table 
a440: 74 68 61 74 20 68 61 73 20 74 68 65 20 73 61 6d  that has the sam
a450: 65 20 6e 61 6d 65 20 61 73 20 61 6e 20 0a 20 20  e name as an .  
a460: 65 78 69 73 74 69 6e 67 20 5b 43 52 45 41 54 45  existing [CREATE
a470: 20 54 52 49 47 47 45 52 7c 74 72 69 67 67 65 72   TRIGGER|trigger
a480: 5d 2e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 61  ]...<p>^Tables a
a490: 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67  re removed using
a4a0: 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45   the [DROP TABLE
a4b0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 3c 2f  ] statement.  </
a4c0: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
a4d0: 6d 65 6e 74 20 63 72 65 61 74 65 74 61 62 61 73  ment createtabas
a4e0: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 41   {CREATE TABLE A
a4f0: 53 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 52 45  S}</tcl>.<h3>CRE
a500: 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53  ATE TABLE ... AS
a510: 20 53 45 4c 45 43 54 20 53 74 61 74 65 6d 65 6e   SELECT Statemen
a520: 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20  ts</h3>..<p>^(A 
a530: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e  "CREATE TABLE ..
a540: 2e 20 41 53 20 53 45 4c 45 43 54 22 20 73 74 61  . AS SELECT" sta
a550: 74 65 6d 65 6e 74 20 63 72 65 61 74 65 73 20 61  tement creates a
a560: 6e 64 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64  nd populates a d
a570: 61 74 61 62 61 73 65 0a 74 61 62 6c 65 20 62 61  atabase.table ba
a580: 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  sed on the resul
a590: 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  ts of a SELECT s
a5a0: 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68  tatement.)^ ^(Th
a5b0: 65 20 74 61 62 6c 65 20 68 61 73 20 74 68 65 20  e table has the 
a5c0: 73 61 6d 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63  same.number of c
a5d0: 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65 20 72 6f  olumns as the ro
a5e0: 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ws returned by t
a5f0: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
a600: 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66  ent. The name of
a610: 0a 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20  .each column is 
a620: 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
a630: 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 72 72  name of the corr
a640: 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e  esponding column
a650: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 73   in the result.s
a660: 65 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  et of the SELECT
a670: 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28   statement.)^ ^(
a680: 54 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  The declared typ
a690: 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  e of each column
a6a0: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62   is determined.b
a6b0: 79 20 74 68 65 20 5b 65 78 70 72 65 73 73 69 6f  y the [expressio
a6c0: 6e 20 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74  n affinity] of t
a6d0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
a6e0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
a6f0: 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a 6f 66  he result set.of
a700: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
a710: 65 6d 65 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77  ement, as follow
a720: 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72  s:.</p>..<center
a730: 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  ><table border=1
a740: 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72  >.  <tr><th>Expr
a750: 65 73 73 69 6f 6e 20 41 66 66 69 6e 69 74 79 20  ession Affinity 
a760: 20 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63    <th>Column Dec
a770: 6c 61 72 65 64 20 54 79 70 65 0a 20 20 3c 74 72  lared Type.  <tr
a780: 3e 3c 74 64 3e 54 45 58 54 20 20 20 20 20 20 20  ><td>TEXT       
a790: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
a7a0: 54 45 58 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e  TEXT".  <tr><td>
a7b0: 4e 55 4d 45 52 49 43 20 20 20 20 20 20 20 20 20  NUMERIC         
a7c0: 20 20 20 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a        <td>"NUM".
a7d0: 20 20 3c 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45    <tr><td>INTEGE
a7e0: 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  R               
a7f0: 3c 74 64 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e  <td>"INT".  <tr>
a800: 3c 74 64 3e 52 45 41 4c 20 20 20 20 20 20 20 20  <td>REAL        
a810: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 52            <td>"R
a820: 45 41 4c 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 42  EAL".  <tr><td>B
a830: 4c 4f 42 20 28 61 2e 6b 2e 61 20 22 4e 4f 4e 45  LOB (a.k.a "NONE
a840: 22 29 20 20 20 3c 74 64 3e 22 22 20 28 65 6d 70  ")   <td>"" (emp
a850: 74 79 20 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62  ty string).</tab
a860: 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  le></center>)^..
a870: 3c 70 3e 5e 28 41 20 74 61 62 6c 65 20 63 72 65  <p>^(A table cre
a880: 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54  ated using CREAT
a890: 45 20 54 41 42 4c 45 20 41 53 20 68 61 73 20 6e  E TABLE AS has n
a8a0: 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  o PRIMARY KEY an
a8b0: 64 20 6e 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73  d no.constraints
a8c0: 20 6f 66 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68   of any kind. Th
a8d0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
a8e0: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of each column i
a8f0: 73 20 4e 55 4c 4c 2e 20 54 68 65 20 64 65 66 61  s NULL. The defa
a900: 75 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult.collation se
a910: 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
a920: 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65  column of the ne
a930: 77 20 74 61 62 6c 65 20 69 73 20 42 49 4e 41 52  w table is BINAR
a940: 59 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73  Y.)^..<p>^Tables
a950: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   created using C
a960: 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 61  REATE TABLE AS a
a970: 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70  re initially pop
a980: 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 0a  ulated with the.
a990: 72 6f 77 73 20 6f 66 20 64 61 74 61 20 72 65 74  rows of data ret
a9a0: 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
a9b0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ECT statement. ^
a9c0: 52 6f 77 73 20 61 72 65 20 61 73 73 69 67 6e 65  Rows are assigne
a9d0: 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61  d contiguously.a
a9e0: 73 63 65 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d  scending [rowid]
a9f0: 20 76 61 6c 75 65 73 2c 20 73 74 61 72 74 69 6e   values, startin
aa00: 67 20 77 69 74 68 20 31 2c 20 69 6e 20 74 68 65  g with 1, in the
aa10: 20 5b 6f 72 64 65 72 20 62 79 7c 6f 72 64 65 72   [order by|order
aa20: 5d 20 74 68 61 74 20 74 68 65 79 0a 61 72 65 20  ] that they.are 
aa30: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
aa40: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
aa50: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
aa60: 65 6e 74 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66  ent {tablecoldef
aa70: 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  } {column defini
aa80: 74 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65  tion} {column de
aa90: 66 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e  finitions}</tcl>
aaa0: 0a 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69  .<h3>Column Defi
aab0: 6e 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  nitions</h3>..<p
aac0: 3e 55 6e 6c 65 73 73 20 69 74 20 69 73 20 61 20  >Unless it is a 
aad0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
aae0: 20 41 53 20 53 45 4c 45 43 54 20 73 74 61 74 65   AS SELECT state
aaf0: 6d 65 6e 74 2c 20 61 20 43 52 45 41 54 45 20 54  ment, a CREATE T
ab00: 41 42 4c 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e  ABLE includes.on
ab10: 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d  e or more [colum
ab20: 6e 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66  n-def|column def
ab30: 69 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f  initions], optio
ab40: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62  nally followed b
ab50: 79 20 61 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62  y a list of.[tab
ab60: 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61  le-constraint|ta
ab70: 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  ble constraints]
ab80: 2e 20 20 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64  .  Each column d
ab90: 65 66 69 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73  efinition consis
aba0: 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f  ts of the.name o
abb0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70  f the column, op
abc0: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
abd0: 64 20 62 79 20 74 68 65 20 64 65 63 6c 61 72 65  d by the declare
abe0: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f  d type of the co
abf0: 6c 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f  lumn,.then one o
ac00: 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20  r more optional 
ac10: 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69  [column-constrai
ac20: 6e 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72  nt|column constr
ac30: 61 69 6e 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64  aints]. Included
ac40: 20 69 6e 0a 74 68 65 20 64 65 66 69 6e 69 74 69   in.the definiti
ac50: 6f 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f  on of "column co
ac60: 6e 73 74 72 61 69 6e 74 73 22 20 66 6f 72 20 74  nstraints" for t
ac70: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74  he purposes of t
ac80: 68 65 20 70 72 65 76 69 6f 75 73 0a 73 74 61 74  he previous.stat
ac90: 65 6d 65 6e 74 20 61 72 65 20 74 68 65 20 43 4f  ement are the CO
aca0: 4c 4c 41 54 45 20 61 6e 64 20 44 45 46 41 55 4c  LLATE and DEFAUL
acb0: 54 20 63 6c 61 75 73 65 73 2c 20 65 76 65 6e 20  T clauses, even 
acc0: 74 68 6f 75 67 68 20 74 68 65 73 65 20 61 72 65  though these are
acd0: 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73   not really.cons
ace0: 74 72 61 69 6e 74 73 20 69 6e 20 74 68 65 20 73  traints in the s
acf0: 65 6e 73 65 20 74 68 61 74 20 74 68 65 79 20 64  ense that they d
ad00: 6f 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20 74  o not restrict t
ad10: 68 65 20 64 61 74 61 20 74 68 61 74 20 74 68 65  he data that the
ad20: 20 74 61 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61   table may.conta
ad30: 69 6e 2e 20 54 68 65 20 6f 74 68 65 72 20 63 6f  in. The other co
ad40: 6e 73 74 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20  nstraints - NOT 
ad50: 4e 55 4c 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49  NULL, CHECK, UNI
ad60: 51 55 45 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  QUE, PRIMARY KEY
ad70: 20 61 6e 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59   and.FOREIGN KEY
ad80: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 69   constraints - i
ad90: 6d 70 6f 73 65 20 72 65 73 74 72 69 63 74 69 6f  mpose restrictio
ada0: 6e 73 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 73  ns on the tables
adb0: 20 64 61 74 61 2c 20 61 6e 64 20 61 72 65 20 61   data, and are a
adc0: 72 65 0a 64 65 73 63 72 69 62 65 64 20 75 6e 64  re.described und
add0: 65 72 20 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c  er [constraints|
ade0: 53 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61  SQL Data Constra
adf0: 69 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70  ints] below...<p
ae00: 3e 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51  >^Unlike most SQ
ae10: 4c 20 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c  L databases, SQL
ae20: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 73  ite does not res
ae30: 74 72 69 63 74 20 74 68 65 20 74 79 70 65 20 6f  trict the type o
ae40: 66 20 64 61 74 61 20 74 68 61 74 0a 6d 61 79 20  f data that.may 
ae50: 62 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  be inserted into
ae60: 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20   a column based 
ae70: 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64  on the columns d
ae80: 65 63 6c 61 72 65 64 20 74 79 70 65 2e 20 49 6e  eclared type. In
ae90: 73 74 65 61 64 2c 0a 53 51 4c 69 74 65 20 75 73  stead,.SQLite us
aea0: 65 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69  es [dynamic typi
aeb0: 6e 67 5d 2e 20 5e 54 68 65 20 64 65 63 6c 61 72  ng]. ^The declar
aec0: 65 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c  ed type of a col
aed0: 75 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 64  umn is used to.d
aee0: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 5b 61 66  etermine the [af
aef0: 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63  finity] of the c
af00: 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 74 63  olumn only...<tc
af10: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 66  l>hd_fragment df
af20: 6c 74 76 61 6c 20 7b 64 65 66 61 75 6c 74 20 63  ltval {default c
af30: 6f 6c 75 6d 6e 20 76 61 6c 75 65 7d 20 7b 64 65  olumn value} {de
af40: 66 61 75 6c 74 20 76 61 6c 75 65 7d 3c 2f 74 63  fault value}</tc
af50: 6c 3e 0a 3c 70 3e 54 68 65 20 44 45 46 41 55 4c  l>.<p>The DEFAUL
af60: 54 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  T clause specifi
af70: 65 73 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  es a default val
af80: 75 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68  ue to use for th
af90: 65 20 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76  e column if no.v
afa0: 61 6c 75 65 20 69 73 20 65 78 70 6c 69 63 69 74  alue is explicit
afb0: 6c 79 20 70 72 6f 76 69 64 65 64 20 62 79 20 74  ly provided by t
afc0: 68 65 20 75 73 65 72 20 77 68 65 6e 20 64 6f 69  he user when doi
afd0: 6e 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20  ng an [INSERT]. 
afe0: 5e 49 66 20 74 68 65 72 65 0a 69 73 20 6e 6f 20  ^If there.is no 
aff0: 65 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54  explicit DEFAULT
b000: 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64   clause attached
b010: 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66   to a column def
b020: 69 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  inition, then th
b030: 65 20 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65  e .default value
b040: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69   of the column i
b050: 73 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70  s NULL. ^(An exp
b060: 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c  licit DEFAULT cl
b070: 61 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79  ause may specify
b080: 0a 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c  .that the defaul
b090: 74 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  t value is NULL,
b0a0: 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61   a string consta
b0b0: 6e 74 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  nt, a blob const
b0c0: 61 6e 74 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75  ant, a.signed-nu
b0d0: 6d 62 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e  mber, or any con
b0e0: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
b0f0: 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72   enclosed in par
b100: 65 6e 74 68 65 73 65 73 2e 20 41 0a 64 65 66 61  entheses. A.defa
b110: 75 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c  ult value may al
b120: 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  so be one of the
b130: 20 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e   special case-in
b140: 64 65 70 65 6e 64 65 6e 74 20 6b 65 79 77 6f 72  dependent keywor
b150: 64 73 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c  ds.CURRENT_TIME,
b160: 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72   CURRENT_DATE or
b170: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
b180: 4d 50 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70  MP.)^ ^For the p
b190: 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65 0a 44  urposes of the.D
b1a0: 45 46 41 55 4c 54 20 63 6c 61 75 73 65 2c 20 61  EFAULT clause, a
b1b0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  n expression is 
b1c0: 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 6e 73 74  considered const
b1d0: 61 6e 74 20 69 66 20 69 74 0a 63 6f 6e 74 61 69  ant if it.contai
b1e0: 6e 73 20 6e 6f 20 73 75 62 2d 71 75 65 72 69 65  ns no sub-querie
b1f0: 73 2c 20 63 6f 6c 75 6d 6e 20 6f 72 20 74 61 62  s, column or tab
b200: 6c 65 20 72 65 66 65 72 65 6e 63 65 73 2c 20 5b  le references, [
b210: 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73  bound parameters
b220: 5d 2c 0a 6f 72 20 73 74 72 69 6e 67 20 6c 69 74  ],.or string lit
b230: 65 72 61 6c 73 20 65 6e 63 6c 6f 73 65 64 20 69  erals enclosed i
b240: 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20  n double-quotes 
b250: 69 6e 73 74 65 61 64 20 6f 66 20 73 69 6e 67 6c  instead of singl
b260: 65 2d 71 75 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28  e-quotes...<p>^(
b270: 45 61 63 68 20 74 69 6d 65 20 61 20 72 6f 77 20  Each time a row 
b280: 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
b290: 20 74 68 65 20 74 61 62 6c 65 20 62 79 20 61 6e   the table by an
b2a0: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
b2b0: 74 20 74 68 61 74 20 0a 64 6f 65 73 20 6e 6f 74  t that .does not
b2c0: 20 70 72 6f 76 69 64 65 20 65 78 70 6c 69 63 69   provide explici
b2d0: 74 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c  t values for all
b2e0: 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 74   table columns t
b2f0: 68 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64  he values stored
b300: 20 69 6e 0a 74 68 65 20 6e 65 77 20 72 6f 77 20   in.the new row 
b310: 61 72 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62  are determined b
b320: 79 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20  y their default 
b330: 76 61 6c 75 65 73 29 5e 2c 20 61 73 20 66 6f 6c  values)^, as fol
b340: 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  lows:..<ul>.  <l
b350: 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66  i><p>^If the def
b360: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
b370: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f  e column is a co
b380: 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c 20 74 65 78  nstant NULL, tex
b390: 74 2c 20 62 6c 6f 62 20 6f 72 0a 20 20 20 20 73  t, blob or.    s
b3a0: 69 67 6e 65 64 2d 6e 75 6d 62 65 72 20 76 61 6c  igned-number val
b3b0: 75 65 2c 20 74 68 65 6e 20 74 68 61 74 20 76 61  ue, then that va
b3c0: 6c 75 65 20 69 73 20 75 73 65 64 20 64 69 72 65  lue is used dire
b3d0: 63 74 6c 79 20 69 6e 20 74 68 65 20 6e 65 77 20  ctly in the new 
b3e0: 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  row...  <li><p>^
b3f0: 49 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  If the default v
b400: 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  alue of a column
b410: 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
b420: 6e 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73  n in parentheses
b430: 2c 20 74 68 65 6e 0a 20 20 20 20 74 68 65 20 65  , then.    the e
b440: 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
b450: 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20  luated once for 
b460: 65 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65  each row inserte
b470: 64 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  d and the result
b480: 73 0a 20 20 20 20 75 73 65 64 20 69 6e 20 74 68  s.    used in th
b490: 65 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c  e new row...  <l
b4a0: 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66  i><p>^If the def
b4b0: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20  ault value of a 
b4c0: 63 6f 6c 75 6d 6e 20 69 73 20 43 55 52 52 45 4e  column is CURREN
b4d0: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
b4e0: 44 41 54 45 20 6f 72 0a 20 20 20 20 43 55 52 52  DATE or.    CURR
b4f0: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74  ENT_TIMESTAMP, t
b500: 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 75 73  hen the value us
b510: 65 64 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ed in the new ro
b520: 77 20 69 73 20 61 20 74 65 78 74 0a 20 20 20 20  w is a text.    
b530: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
b540: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 55 54  f the current UT
b550: 43 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69  C date and/or ti
b560: 6d 65 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54  me. ^For CURRENT
b570: 5f 54 49 4d 45 2c 20 74 68 65 0a 20 20 20 20 66  _TIME, the.    f
b580: 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 76 61 6c  ormat of the val
b590: 75 65 20 69 73 20 22 48 48 3a 4d 4d 3a 53 53 22  ue is "HH:MM:SS"
b5a0: 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 44  . ^For CURRENT_D
b5b0: 41 54 45 2c 20 22 59 59 59 59 2d 4d 4d 2d 44 44  ATE, "YYYY-MM-DD
b5c0: 22 2e 20 5e 54 68 65 0a 20 20 20 20 66 6f 72 6d  ". ^The.    form
b5d0: 61 74 20 66 6f 72 20 43 55 52 52 45 4e 54 5f 54  at for CURRENT_T
b5e0: 49 4d 45 53 54 41 4d 50 20 69 73 20 22 59 59 59  IMESTAMP is "YYY
b5f0: 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
b600: 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68  "..</ul>..<p>^Th
b610: 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  e COLLATE clause
b620: 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 6e   specifies the n
b630: 61 6d 65 20 6f 66 20 61 20 5b 63 6f 6c 6c 61 74  ame of a [collat
b640: 69 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74 6f  ing sequence] to
b650: 20 75 73 65 20 61 73 0a 74 68 65 20 64 65 66 61   use as.the defa
b660: 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
b670: 71 75 65 6e 63 65 20 66 6f 72 20 74 68 65 20 63  quence for the c
b680: 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e 6f 20 43 4f  olumn. ^If no CO
b690: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 73 0a  LLATE clause is.
b6a0: 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 64  specified, the d
b6b0: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
b6c0: 20 73 65 71 75 65 6e 63 65 20 69 73 20 5b 42 49   sequence is [BI
b6d0: 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20  NARY]...<p>^The 
b6e0: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
b6f0: 73 20 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20  s in a table is 
b700: 6c 69 6d 69 74 65 64 20 62 79 20 74 68 65 20 5b  limited by the [
b710: 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d  SQLITE_MAX_COLUM
b720: 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  N].compile-time 
b730: 70 61 72 61 6d 65 74 65 72 2e 20 5e 41 20 73 69  parameter. ^A si
b740: 6e 67 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61  ngle row of a ta
b750: 62 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65  ble cannot store
b760: 20 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49   more than.[SQLI
b770: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62  TE_MAX_LENGTH] b
b780: 79 74 65 73 20 6f 66 20 64 61 74 61 2e 20 5e 42  ytes of data. ^B
b790: 6f 74 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d  oth of these lim
b7a0: 69 74 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72  its can be lower
b7b0: 65 64 20 61 74 0a 72 75 6e 74 69 6d 65 20 75 73  ed at.runtime us
b7c0: 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ing the [sqlite3
b7d0: 5f 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20  _limit()] C/C++ 
b7e0: 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a  interface.</p>..
b7f0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
b800: 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d 20 7b   {constraints} {
b810: 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63  constraints}</tc
b820: 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44 61 74 61 20  l>.<h3>SQL Data 
b830: 43 6f 6e 73 74 72 61 69 6e 74 73 3c 2f 68 33 3e  Constraints</h3>
b840: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
b850: 6e 74 20 70 72 69 6d 6b 65 79 63 6f 6e 73 74 20  nt primkeyconst 
b860: 7b 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 7b 50  {PRIMARY KEY} {P
b870: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74  RIMARY KEY const
b880: 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  raint}</tcl>.<p>
b890: 5e 45 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53  ^Each table in S
b8a0: 51 4c 69 74 65 20 6d 61 79 20 68 61 76 65 20 61  QLite may have a
b8b0: 74 20 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e 50 52  t most one <b>PR
b8c0: 49 4d 41 52 59 20 4b 45 59 3c 2f 62 3e 2e 20 5e  IMARY KEY</b>. ^
b8d0: 49 66 20 74 68 65 0a 20 20 6b 65 79 77 6f 72 64  If the.  keyword
b8e0: 73 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72  s PRIMARY KEY ar
b8f0: 65 20 61 64 64 65 64 20 74 6f 20 61 20 63 6f 6c  e added to a col
b900: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20  umn definition, 
b910: 74 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79  then the primary
b920: 20 6b 65 79 0a 20 20 66 6f 72 20 74 68 65 20 74   key.  for the t
b930: 61 62 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  able consists of
b940: 20 74 68 61 74 20 73 69 6e 67 6c 65 20 63 6f 6c   that single col
b950: 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20 61 20 50  umn. ^Or, if a P
b960: 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73  RIMARY KEY claus
b970: 65 20 0a 20 20 69 73 20 73 70 65 63 69 66 69 65  e .  is specifie
b980: 64 20 61 73 20 61 20 5b 74 61 62 6c 65 2d 63 6f  d as a [table-co
b990: 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68 65 6e 20  nstraint], then 
b9a0: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
b9b0: 6f 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 63  of the table.  c
b9c0: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6c  onsists of the l
b9d0: 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73  ist of columns s
b9e0: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
b9f0: 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20   of the PRIMARY 
ba00: 4b 45 59 20 63 6c 61 75 73 65 2e 0a 20 20 5e 54  KEY clause..  ^T
ba10: 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  he PRIMARY KEY c
ba20: 6c 61 75 73 65 20 6d 75 73 74 20 63 6f 6e 74 61  lause must conta
ba30: 69 6e 20 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 6e  in only column n
ba40: 61 6d 65 73 20 26 6d 64 61 73 68 3b 20 74 68 65  ames &mdash; the
ba50: 20 75 73 65 20 6f 66 20 0a 20 20 65 78 70 72 65   use of .  expre
ba60: 73 73 69 6f 6e 73 20 69 6e 20 61 6e 20 5b 69 6e  ssions in an [in
ba70: 64 65 78 65 64 2d 63 6f 6c 75 6d 6e 5d 20 6f 66  dexed-column] of
ba80: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69   a PRIMARY KEY i
ba90: 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e  s not supported.
baa0: 0a 20 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20  .  ^An error is 
bab0: 72 61 69 73 65 64 20 69 66 20 6d 6f 72 65 20 74  raised if more t
bac0: 68 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59 20  han one PRIMARY 
bad0: 4b 45 59 20 63 6c 61 75 73 65 20 61 70 70 65 61  KEY clause appea
bae0: 72 73 20 69 6e 20 61 0a 20 20 43 52 45 41 54 45  rs in a.  CREATE
baf0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
bb00: 2e 20 20 5e 54 68 65 20 50 52 49 4d 41 52 59 20  .  ^The PRIMARY 
bb10: 4b 45 59 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20  KEY is optional 
bb20: 66 6f 72 20 6f 72 64 69 6e 61 72 79 20 74 61 62  for ordinary tab
bb30: 6c 65 73 0a 20 20 62 75 74 20 69 73 20 72 65 71  les.  but is req
bb40: 75 69 72 65 64 20 66 6f 72 20 5b 57 49 54 48 4f  uired for [WITHO
bb50: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73  UT ROWID] tables
bb60: 2e 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65  ...<p>If a table
bb70: 20 68 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f   has a single co
bb80: 6c 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79  lumn primary key
bb90: 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65   and the declare
bba0: 64 20 74 79 70 65 20 6f 66 20 74 68 61 74 0a 20  d type of that. 
bbb0: 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45   column is "INTE
bbc0: 47 45 52 22 20 61 6e 64 20 74 68 65 20 74 61 62  GER" and the tab
bbd0: 6c 65 20 69 73 20 6e 6f 74 20 61 20 5b 57 49 54  le is not a [WIT
bbe0: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
bbf0: 65 2c 0a 20 20 74 68 65 6e 20 74 68 65 20 63 6f  e,.  then the co
bc00: 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20 61 73  lumn is known as
bc10: 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49   an [INTEGER PRI
bc20: 4d 41 52 59 20 4b 45 59 5d 2e 0a 20 20 53 65 65  MARY KEY]..  See
bc30: 20 5b 72 6f 77 69 64 7c 62 65 6c 6f 77 5d 20 66   [rowid|below] f
bc40: 6f 72 20 61 20 64 65 73 63 72 69 70 74 69 6f 6e  or a description
bc50: 20 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c 20   of the special 
bc60: 70 72 6f 70 65 72 74 69 65 73 20 61 6e 64 20 62  properties and b
bc70: 65 68 61 76 69 6f 72 73 0a 20 20 61 73 73 6f 63  ehaviors.  assoc
bc80: 69 61 74 65 64 20 77 69 74 68 20 61 6e 20 5b 49  iated with an [I
bc90: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
bca0: 45 59 5d 2e 0a 0a 3c 70 3e 5e 45 61 63 68 20 72  EY]...<p>^Each r
bcb0: 6f 77 20 69 6e 20 61 20 74 61 62 6c 65 20 77 69  ow in a table wi
bcc0: 74 68 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  th a primary key
bcd0: 20 6d 75 73 74 20 68 61 76 65 20 61 20 75 6e 69   must have a uni
bce0: 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a  que combination.
bcf0: 20 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 69    of values in i
bd00: 74 73 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63  ts primary key c
bd10: 6f 6c 75 6d 6e 73 2e 20 5e 46 6f 72 20 74 68 65  olumns. ^For the
bd20: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74   purposes of det
bd30: 65 72 6d 69 6e 69 6e 67 0a 20 20 74 68 65 20 75  ermining.  the u
bd40: 6e 69 71 75 65 6e 65 73 73 20 6f 66 20 70 72 69  niqueness of pri
bd50: 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c  mary key values,
bd60: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
bd70: 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74   considered dist
bd80: 69 6e 63 74 20 66 72 6f 6d 0a 20 20 61 6c 6c 20  inct from.  all 
bd90: 6f 74 68 65 72 20 76 61 6c 75 65 73 2c 20 69 6e  other values, in
bda0: 63 6c 75 64 69 6e 67 20 6f 74 68 65 72 20 4e 55  cluding other NU
bdb0: 4c 4c 73 2e 20 5e 49 66 20 61 6e 20 5b 49 4e 53  LLs. ^If an [INS
bdc0: 45 52 54 5d 20 6f 72 20 5b 55 50 44 41 54 45 5d  ERT] or [UPDATE]
bdd0: 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74  .  statement att
bde0: 65 6d 70 74 73 20 74 6f 20 6d 6f 64 69 66 79 20  empts to modify 
bdf0: 74 68 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e  the table conten
be00: 74 20 73 6f 20 74 68 61 74 20 74 77 6f 20 6f 72  t so that two or
be10: 20 6d 6f 72 65 20 72 6f 77 73 0a 20 20 68 61 76   more rows.  hav
be20: 65 20 69 64 65 6e 74 69 63 61 6c 20 70 72 69 6d  e identical prim
be30: 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20  ary key values, 
be40: 74 68 61 74 20 69 73 20 61 20 63 6f 6e 73 74 72  that is a constr
be50: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a  aint violation..
be60: 0a 3c 70 3e 20 41 63 63 6f 72 64 69 6e 67 20 74  .<p> According t
be70: 6f 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61  o the SQL standa
be80: 72 64 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20  rd, PRIMARY KEY 
be90: 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 69 6d  should always im
bea0: 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 20 20  ply NOT NULL..  
beb0: 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 64  Unfortunately, d
bec0: 75 65 20 74 6f 20 61 20 62 75 67 20 69 6e 20 73  ue to a bug in s
bed0: 6f 6d 65 20 65 61 72 6c 79 20 76 65 72 73 69 6f  ome early versio
bee0: 6e 73 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ns, this is not 
bef0: 74 68 65 0a 20 20 63 61 73 65 20 69 6e 20 53 51  the.  case in SQ
bf00: 4c 69 74 65 2e 20 5e 55 6e 6c 65 73 73 20 74 68  Lite. ^Unless th
bf10: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 5b  e column is an [
bf20: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
bf30: 4b 45 59 5d 20 6f 72 0a 20 20 74 68 65 20 74 61  KEY] or.  the ta
bf40: 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48 4f 55  ble is a [WITHOU
bf50: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 20 6f  T ROWID] table o
bf60: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  r the column is 
bf70: 64 65 63 6c 61 72 65 64 20 4e 4f 54 20 4e 55 4c  declared NOT NUL
bf80: 4c 2c 0a 20 20 53 51 4c 69 74 65 20 61 6c 6c 6f  L,.  SQLite allo
bf90: 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  ws NULL values i
bfa0: 6e 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  n a PRIMARY KEY 
bfb0: 63 6f 6c 75 6d 6e 2e 20 20 53 51 4c 69 74 65 20  column.  SQLite 
bfc0: 63 6f 75 6c 64 20 62 65 20 66 69 78 65 64 20 74  could be fixed t
bfd0: 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74  o.  conform to t
bfe0: 68 65 20 73 74 61 6e 64 61 72 64 2c 20 62 75 74  he standard, but
bff0: 20 64 6f 69 6e 67 20 73 6f 20 6d 69 67 68 74 20   doing so might 
c000: 62 72 65 61 6b 20 6c 65 67 61 63 79 20 61 70 70  break legacy app
c010: 6c 69 63 61 74 69 6f 6e 73 2e 0a 20 20 48 65 6e  lications..  Hen
c020: 63 65 2c 20 69 74 20 68 61 73 20 62 65 65 6e 20  ce, it has been 
c030: 64 65 63 69 64 65 64 20 74 6f 20 6d 65 72 65 6c  decided to merel
c040: 79 20 64 6f 63 75 6d 65 6e 74 20 74 68 65 20 66  y document the f
c050: 61 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 0a  act that SQLite.
c060: 20 20 61 6c 6c 6f 77 69 6e 67 20 4e 55 4c 4c 73    allowing NULLs
c070: 20 69 6e 20 6d 6f 73 74 20 50 52 49 4d 41 52 59   in most PRIMARY
c080: 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a 0a 3c   KEY columns...<
c090: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
c0a0: 75 6e 69 71 75 65 63 6f 6e 73 74 20 7b 55 4e 49  uniqueconst {UNI
c0b0: 51 55 45 7d 20 7b 75 6e 69 71 75 65 20 63 6f 6e  QUE} {unique con
c0c0: 73 74 72 61 69 6e 74 7d 20 7b 55 4e 49 51 55 45  straint} {UNIQUE
c0d0: 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63   constraint}</tc
c0e0: 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 55 4e 49 51  l>.<p>^A <b>UNIQ
c0f0: 55 45 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e  UE</b> constrain
c100: 74 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20  t is similar to 
c110: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  a PRIMARY KEY co
c120: 6e 73 74 72 61 69 6e 74 2c 20 65 78 63 65 70 74  nstraint, except
c130: 0a 20 20 74 68 61 74 20 61 20 73 69 6e 67 6c 65  .  that a single
c140: 20 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20   table may have 
c150: 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 55 4e  any number of UN
c160: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73  IQUE constraints
c170: 2e 20 5e 46 6f 72 20 65 61 63 68 0a 20 20 55 4e  . ^For each.  UN
c180: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
c190: 6f 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 65 61  on the table, ea
c1a0: 63 68 20 72 6f 77 20 6d 75 73 74 20 63 6f 6e 74  ch row must cont
c1b0: 61 69 6e 20 61 20 75 6e 69 71 75 65 20 63 6f 6d  ain a unique com
c1c0: 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61  bination.  of va
c1d0: 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75  lues in the colu
c1e0: 6d 6e 73 20 69 64 65 6e 74 69 66 69 65 64 20 62  mns identified b
c1f0: 79 20 74 68 65 20 55 4e 49 51 55 45 20 63 6f 6e  y the UNIQUE con
c200: 73 74 72 61 69 6e 74 2e 20 0a 20 20 5e 46 6f 72  straint. .  ^For
c210: 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
c220: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
c230: 6e 74 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  nts, NULL values
c240: 0a 20 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  .  are considere
c250: 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  d distinct from 
c260: 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  all other values
c270: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65  , including othe
c280: 72 20 4e 55 4c 4c 73 2e 0a 20 20 5e 41 73 20 77  r NULLs..  ^As w
c290: 69 74 68 20 50 52 49 4d 41 52 59 20 4b 45 59 73  ith PRIMARY KEYs
c2a0: 2c 20 61 20 55 4e 49 51 55 45 20 5b 74 61 62 6c  , a UNIQUE [tabl
c2b0: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 20 63 6c  e-constraint] cl
c2c0: 61 75 73 65 20 6d 75 73 74 20 63 6f 6e 74 61 69  ause must contai
c2d0: 6e 0a 20 20 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20  n.  only column 
c2e0: 6e 61 6d 65 73 20 26 6d 64 61 73 68 3b 20 74 68  names &mdash; th
c2f0: 65 20 75 73 65 20 6f 66 20 0a 20 20 65 78 70 72  e use of .  expr
c300: 65 73 73 69 6f 6e 73 20 69 6e 20 61 6e 20 5b 69  essions in an [i
c310: 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e 5d 20 6f  ndexed-column] o
c320: 66 20 61 20 55 4e 49 51 55 45 20 5b 74 61 62 6c  f a UNIQUE [tabl
c330: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 0a 20 20  e-constraint].  
c340: 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  is not supported
c350: 2e 0a 20 20 0a 0a 3c 70 3e 5e 49 6e 20 6d 6f 73  ..  ..<p>^In mos
c360: 74 20 63 61 73 65 73 2c 20 55 4e 49 51 55 45 20  t cases, UNIQUE 
c370: 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 0a  and PRIMARY KEY.
c380: 20 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72    constraints ar
c390: 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  e implemented by
c3a0: 20 63 72 65 61 74 69 6e 67 20 61 20 75 6e 69 71   creating a uniq
c3b0: 75 65 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20  ue index in the 
c3c0: 64 61 74 61 62 61 73 65 2e 0a 20 20 28 54 68 65  database..  (The
c3d0: 20 65 78 63 65 70 74 69 6f 6e 73 20 61 72 65 20   exceptions are 
c3e0: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
c3f0: 20 4b 45 59 5d 20 61 6e 64 20 50 52 49 4d 41 52   KEY] and PRIMAR
c400: 59 20 4b 45 59 73 20 6f 6e 20 0a 20 20 5b 57 49  Y KEYs on .  [WI
c410: 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
c420: 6c 65 73 2e 29 0a 20 20 48 65 6e 63 65 2c 20 74  les.).  Hence, t
c430: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 68  he following sch
c440: 65 6d 61 73 20 61 72 65 20 6c 6f 67 69 63 61 6c  emas are logical
c450: 6c 79 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 0a  ly equivalent:..
c460: 20 20 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e    <ol>.  <li><p>
c470: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
c480: 61 2c 20 62 20 55 4e 49 51 55 45 29 3b 0a 20 20  a, b UNIQUE);.  
c490: 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41  <li><p>CREATE TA
c4a0: 42 4c 45 20 74 31 28 61 2c 20 62 20 50 52 49 4d  BLE t1(a, b PRIM
c4b0: 41 52 59 20 4b 45 59 29 3b 0a 20 20 3c 6c 69 3e  ARY KEY);.  <li>
c4c0: 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20  <p>CREATE TABLE 
c4d0: 74 31 28 61 2c 20 62 29 3b 3c 62 72 3e 0a 20 20  t1(a, b);<br>.  
c4e0: 20 20 20 20 20 20 20 43 52 45 41 54 45 20 55 4e         CREATE UN
c4f0: 49 51 55 45 20 49 4e 44 45 58 20 74 31 62 20 4f  IQUE INDEX t1b O
c500: 4e 20 74 31 28 62 29 3b 0a 20 20 3c 2f 6f 6c 3e  N t1(b);.  </ol>
c510: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
c520: 6e 74 20 7b 63 6b 63 6f 6e 73 74 7d 20 7b 43 48  nt {ckconst} {CH
c530: 45 43 4b 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73  ECK} {CHECK cons
c540: 74 72 61 69 6e 74 7d 20 7b 43 48 45 43 4b 20 63  traint} {CHECK c
c550: 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c  onstraints}</tcl
c560: 3e 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43 48 45 43  >.<p>^(A <b>CHEC
c570: 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74  K</b> constraint
c580: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
c590: 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66   to a column def
c5a0: 69 6e 69 74 69 6f 6e 20 6f 72 0a 20 20 73 70 65  inition or.  spe
c5b0: 63 69 66 69 65 64 20 61 73 20 61 20 74 61 62 6c  cified as a tabl
c5c0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 49 6e  e constraint. In
c5d0: 20 70 72 61 63 74 69 63 65 20 69 74 20 6d 61 6b   practice it mak
c5e0: 65 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65  es no difference
c5f0: 2e 29 5e 20 5e 28 45 61 63 68 0a 20 20 74 69 6d  .)^ ^(Each.  tim
c600: 65 20 61 20 6e 65 77 20 72 6f 77 20 69 73 20 69  e a new row is i
c610: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
c620: 20 74 61 62 6c 65 20 6f 72 20 61 6e 20 65 78 69   table or an exi
c630: 73 74 69 6e 67 20 72 6f 77 20 69 73 20 75 70 64  sting row is upd
c640: 61 74 65 64 2c 0a 20 20 74 68 65 20 65 78 70 72  ated,.  the expr
c650: 65 73 73 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ession associate
c660: 64 20 77 69 74 68 20 65 61 63 68 20 43 48 45 43  d with each CHEC
c670: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  K constraint is 
c680: 65 76 61 6c 75 61 74 65 64 20 61 6e 64 0a 20 20  evaluated and.  
c690: 63 61 73 74 20 74 6f 20 61 20 4e 55 4d 45 52 49  cast to a NUMERI
c6a0: 43 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 73  C value in the s
c6b0: 61 6d 65 20 77 61 79 20 61 73 20 61 20 5b 43 41  ame way as a [CA
c6c0: 53 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20  ST expression]. 
c6d0: 49 66 20 74 68 65 20 0a 20 20 72 65 73 75 6c 74  If the .  result
c6e0: 20 69 73 20 7a 65 72 6f 20 28 69 6e 74 65 67 65   is zero (intege
c6f0: 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65 61  r value 0 or rea
c700: 6c 20 76 61 6c 75 65 20 30 2e 30 29 2c 20 74 68  l value 0.0), th
c710: 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a  en a constraint.
c720: 20 20 76 69 6f 6c 61 74 69 6f 6e 20 68 61 73 20    violation has 
c730: 6f 63 63 75 72 72 65 64 2e 29 5e 20 5e 49 66 20  occurred.)^ ^If 
c740: 74 68 65 20 43 48 45 43 4b 20 65 78 70 72 65 73  the CHECK expres
c750: 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
c760: 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20 61 6e 79  o NULL, or.  any
c770: 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f 20   other non-zero 
c780: 76 61 6c 75 65 2c 20 69 74 20 69 73 20 6e 6f 74  value, it is not
c790: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
c7a0: 6f 6c 61 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20  olation..  ^The 
c7b0: 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 61 20  expression of a 
c7c0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
c7d0: 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e   may not contain
c7e0: 20 61 20 73 75 62 71 75 65 72 79 2e 0a 0a 3c 74   a subquery...<t
c7f0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  cl>hd_fragment {
c800: 6e 6f 74 6e 75 6c 6c 63 6f 6e 73 74 7d 20 7b 4e  notnullconst} {N
c810: 4f 54 20 4e 55 4c 4c 7d 20 7b 4e 4f 54 20 4e 55  OT NULL} {NOT NU
c820: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f  LL constraint}</
c830: 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 4e 4f  tcl>.<p>^A <b>NO
c840: 54 20 4e 55 4c 4c 3c 2f 62 3e 20 63 6f 6e 73 74  T NULL</b> const
c850: 72 61 69 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 62  raint may only b
c860: 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  e attached to a 
c870: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
c880: 6e 2c 0a 20 20 6e 6f 74 20 73 70 65 63 69 66 69  n,.  not specifi
c890: 65 64 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f  ed as a table co
c8a0: 6e 73 74 72 61 69 6e 74 2e 20 20 4e 6f 74 20 73  nstraint.  Not s
c8b0: 75 72 70 72 69 73 69 6e 67 6c 79 2c 20 5e 28 61  urprisingly, ^(a
c8c0: 20 4e 4f 54 20 4e 55 4c 4c 0a 20 20 63 6f 6e 73   NOT NULL.  cons
c8d0: 74 72 61 69 6e 74 20 64 69 63 74 61 74 65 73 20  traint dictates 
c8e0: 74 68 61 74 20 74 68 65 20 61 73 73 6f 63 69 61  that the associa
c8f0: 74 65 64 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e  ted column may n
c900: 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 4e 55 4c  ot contain a NUL
c910: 4c 20 76 61 6c 75 65 2e 0a 20 20 41 74 74 65 6d  L value..  Attem
c920: 70 74 69 6e 67 20 74 6f 20 73 65 74 20 74 68 65  pting to set the
c930: 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f   column value to
c940: 20 4e 55 4c 4c 20 77 68 65 6e 20 69 6e 73 65 72   NULL when inser
c950: 74 69 6e 67 20 61 20 6e 65 77 20 72 6f 77 20 6f  ting a new row o
c960: 72 0a 20 20 75 70 64 61 74 69 6e 67 20 61 6e 20  r.  updating an 
c970: 65 78 69 73 74 69 6e 67 20 6f 6e 65 20 63 61 75  existing one cau
c980: 73 65 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  ses a constraint
c990: 20 76 69 6f 6c 61 74 69 6f 6e 2e 29 5e 0a 0a 3c   violation.)^..<
c9a0: 70 3e 45 78 61 63 74 6c 79 20 68 6f 77 20 61 20  p>Exactly how a 
c9b0: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
c9c0: 74 69 6f 6e 20 69 73 20 64 65 61 6c 74 20 77 69  tion is dealt wi
c9d0: 74 68 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  th is determined
c9e0: 20 62 79 20 74 68 65 0a 20 20 5b 63 6f 6e 66 6c   by the.  [confl
c9f0: 69 63 74 20 63 6c 61 75 73 65 7c 63 6f 6e 73 74  ict clause|const
ca00: 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72  raint conflict r
ca10: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
ca20: 74 68 6d 5d 2e 20 45 61 63 68 20 0a 20 20 50 52  thm]. Each .  PR
ca30: 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55  IMARY KEY, UNIQU
ca40: 45 2c 20 4e 4f 54 20 4e 55 4c 4c 20 61 6e 64 20  E, NOT NULL and 
ca50: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
ca60: 20 68 61 73 20 61 20 64 65 66 61 75 6c 74 20 63   has a default c
ca70: 6f 6e 66 6c 69 63 74 0a 20 20 72 65 73 6f 6c 75  onflict.  resolu
ca80: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 20  tion algorithm. 
ca90: 5e 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e  ^PRIMARY KEY, UN
caa0: 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
cab0: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d 61  L constraints ma
cac0: 79 20 62 65 0a 20 20 65 78 70 6c 69 63 69 74 6c  y be.  explicitl
cad0: 79 20 61 73 73 69 67 6e 65 64 20 61 20 64 65 66  y assigned a def
cae0: 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  ault conflict re
caf0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
cb00: 68 6d 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 0a  hm by including.
cb10: 20 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c    a [conflict-cl
cb20: 61 75 73 65 5d 20 69 6e 20 74 68 65 69 72 20 64  ause] in their d
cb30: 65 66 69 6e 69 74 69 6f 6e 73 2e 20 5e 4f 72 2c  efinitions. ^Or,
cb40: 20 69 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74   if a constraint
cb50: 20 64 65 66 69 6e 69 74 69 6f 6e 0a 20 20 64 6f   definition.  do
cb60: 65 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61  es not include a
cb70: 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73   [conflict-claus
cb80: 65 5d 20 6f 72 20 69 74 20 69 73 20 61 20 43 48  e] or it is a CH
cb90: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  ECK constraint, 
cba0: 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 63 6f  the default.  co
cbb0: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
cbc0: 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41  n algorithm is A
cbd0: 42 4f 52 54 2e 20 5e 44 69 66 66 65 72 65 6e 74  BORT. ^Different
cbe0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69 74   constraints wit
cbf0: 68 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 74  hin the.  same t
cc00: 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69  able may have di
cc10: 66 66 65 72 65 6e 74 20 64 65 66 61 75 6c 74 20  fferent default 
cc20: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
cc30: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e 20  ion algorithms. 
cc40: 53 65 65 0a 20 20 74 68 65 20 73 65 63 74 69 6f  See.  the sectio
cc50: 6e 20 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e  n titled [ON CON
cc60: 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74  FLICT] for addit
cc70: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
cc80: 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  n...<tcl>hd_frag
cc90: 6d 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54 45  ment rowid {INTE
cca0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 7d  GER PRIMARY KEY}
ccb0: 20 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74 63   ROWID rowid</tc
ccc0: 6c 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61 6e  l>.<h3>ROWIDs an
ccd0: 64 20 74 68 65 20 49 4e 54 45 47 45 52 20 50 52  d the INTEGER PR
cce0: 49 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a  IMARY KEY</h3>..
ccf0: 3c 70 3e 5e 45 78 63 65 70 74 20 66 6f 72 20 5b  <p>^Except for [
cd00: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74  WITHOUT ROWID] t
cd10: 61 62 6c 65 73 2c 20 61 6c 6c 20 72 6f 77 73 20  ables, all rows 
cd20: 77 69 74 68 69 6e 20 53 51 4c 69 74 65 20 74 61  within SQLite ta
cd30: 62 6c 65 73 0a 68 61 76 65 20 61 20 36 34 2d 62  bles.have a 64-b
cd40: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
cd50: 72 20 6b 65 79 20 74 68 61 74 20 75 6e 69 71 75  r key that uniqu
cd60: 65 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20 74  ely identifies t
cd70: 68 65 20 72 6f 77 20 77 69 74 68 69 6e 20 69 74  he row within it
cd80: 73 20 74 61 62 6c 65 2e 0a 54 68 69 73 20 69 6e  s table..This in
cd90: 74 65 67 65 72 20 69 73 20 75 73 75 61 6c 6c 79  teger is usually
cda0: 0a 63 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 77  .called the "row
cdb0: 69 64 22 2e 20 5e 54 68 65 20 72 6f 77 69 64 20  id". ^The rowid 
cdc0: 76 61 6c 75 65 20 63 61 6e 20 62 65 20 61 63 63  value can be acc
cdd0: 65 73 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20  essed using one 
cde0: 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c 0a 63  of the special.c
cdf0: 61 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20  ase-independent 
ce00: 6e 61 6d 65 73 20 22 72 6f 77 69 64 22 2c 20 22  names "rowid", "
ce10: 6f 69 64 22 2c 20 6f 72 20 22 5f 72 6f 77 69 64  oid", or "_rowid
ce20: 5f 22 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  _" in place of a
ce30: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 5e 49   column name..^I
ce40: 66 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  f a table contai
ce50: 6e 73 20 61 20 75 73 65 72 20 64 65 66 69 6e 65  ns a user define
ce60: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 22  d column named "
ce70: 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72  rowid", "oid" or
ce80: 20 22 5f 72 6f 77 69 64 5f 22 2c 0a 74 68 65 6e   "_rowid_",.then
ce90: 20 74 68 61 74 20 6e 61 6d 65 20 61 6c 77 61 79   that name alway
cea0: 73 20 72 65 66 65 72 73 20 74 68 65 20 65 78 70  s refers the exp
ceb0: 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64  licitly declared
cec0: 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 63 61 6e 6e   column and cann
ced0: 6f 74 20 62 65 20 75 73 65 64 0a 74 6f 20 72 65  ot be used.to re
cee0: 74 72 69 65 76 65 20 74 68 65 20 69 6e 74 65 67  trieve the integ
cef0: 65 72 20 72 6f 77 69 64 20 76 61 6c 75 65 2e 0a  er rowid value..
cf00: 0a 3c 70 3e 54 68 65 20 72 6f 77 69 64 20 28 61  .<p>The rowid (a
cf10: 6e 64 20 22 6f 69 64 22 20 61 6e 64 20 22 5f 72  nd "oid" and "_r
cf20: 6f 77 69 64 5f 22 29 20 69 73 20 6f 6d 69 74 74  owid_") is omitt
cf30: 65 64 20 69 6e 20 5b 57 49 54 48 4f 55 54 20 52  ed in [WITHOUT R
cf40: 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 57 49  OWID] tables..WI
cf50: 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
cf60: 65 73 20 61 72 65 20 6f 6e 6c 79 20 61 76 61 69  es are only avai
cf70: 6c 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20  lable in SQLite 
cf80: 5b 76 65 72 73 69 6f 6e 20 33 2e 38 2e 32 5d 0a  [version 3.8.2].
cf90: 28 5b 64 61 74 65 6f 66 3a 33 2e 38 2e 32 5d 29  ([dateof:3.8.2])
cfa0: 20 61 6e 64 20 6c 61 74 65 72 2e 0a 41 20 74 61   and later..A ta
cfb0: 62 6c 65 20 74 68 61 74 20 6c 61 63 6b 73 20 74  ble that lacks t
cfc0: 68 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  he WITHOUT ROWID
cfd0: 20 63 6c 61 75 73 65 20 69 73 20 63 61 6c 6c 65   clause is calle
cfe0: 64 20 61 20 22 72 6f 77 69 64 20 74 61 62 6c 65  d a "rowid table
cff0: 22 2e 0a 0a 3c 70 3e 54 68 65 20 64 61 74 61 20  "...<p>The data 
d000: 66 6f 72 20 72 6f 77 69 64 20 74 61 62 6c 65 73  for rowid tables
d010: 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 20   is stored as a 
d020: 42 2d 54 72 65 65 20 73 74 72 75 63 74 75 72 65  B-Tree structure
d030: 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 6f 6e 65 20   containing.one 
d040: 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 74  entry for each t
d050: 61 62 6c 65 20 72 6f 77 2c 20 75 73 69 6e 67 20  able row, using 
d060: 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20  the rowid value 
d070: 61 73 20 74 68 65 20 6b 65 79 2e 20 54 68 69 73  as the key. This
d080: 20 6d 65 61 6e 73 20 74 68 61 74 0a 72 65 74 72   means that.retr
d090: 69 65 76 69 6e 67 20 6f 72 20 73 6f 72 74 69 6e  ieving or sortin
d0a0: 67 20 72 65 63 6f 72 64 73 20 62 79 20 72 6f 77  g records by row
d0b0: 69 64 20 69 73 20 66 61 73 74 2e 20 53 65 61 72  id is fast. Sear
d0c0: 63 68 69 6e 67 20 66 6f 72 20 61 20 72 65 63 6f  ching for a reco
d0d0: 72 64 20 77 69 74 68 20 61 0a 73 70 65 63 69 66  rd with a.specif
d0e0: 69 63 20 72 6f 77 69 64 2c 20 6f 72 20 66 6f 72  ic rowid, or for
d0f0: 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 77 69 74   all records wit
d100: 68 20 72 6f 77 69 64 73 20 77 69 74 68 69 6e 20  h rowids within 
d110: 61 20 73 70 65 63 69 66 69 65 64 20 72 61 6e 67  a specified rang
d120: 65 20 69 73 0a 61 72 6f 75 6e 64 20 74 77 69 63  e is.around twic
d130: 65 20 61 73 20 66 61 73 74 20 61 73 20 61 20 73  e as fast as a s
d140: 69 6d 69 6c 61 72 20 73 65 61 72 63 68 20 6d 61  imilar search ma
d150: 64 65 20 62 79 20 73 70 65 63 69 66 79 69 6e 67  de by specifying
d160: 20 61 6e 79 20 6f 74 68 65 72 20 50 52 49 4d 41   any other PRIMA
d170: 52 59 0a 4b 45 59 20 6f 72 20 69 6e 64 65 78 65  RY.KEY or indexe
d180: 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 20 5e 57  d value...<p> ^W
d190: 69 74 68 20 6f 6e 65 20 65 78 63 65 70 74 69 6f  ith one exceptio
d1a0: 6e 20 6e 6f 74 65 64 20 62 65 6c 6f 77 2c 20 69  n noted below, i
d1b0: 66 20 61 20 72 6f 77 69 64 20 74 61 62 6c 65 20  f a rowid table 
d1c0: 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
d1d0: 79 20 74 68 61 74 20 63 6f 6e 73 69 73 74 73 0a  y that consists.
d1e0: 6f 66 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  of a single colu
d1f0: 6d 6e 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61  mn and the decla
d200: 72 65 64 20 74 79 70 65 20 6f 66 20 74 68 61 74  red type of that
d210: 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45   column is "INTE
d220: 47 45 52 22 20 69 6e 20 61 6e 79 20 6d 69 78 74  GER" in any mixt
d230: 75 72 65 20 6f 66 0a 75 70 70 65 72 20 61 6e 64  ure of.upper and
d240: 20 6c 6f 77 65 72 20 63 61 73 65 2c 20 74 68 65   lower case, the
d250: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65 63  n the column bec
d260: 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  omes an alias fo
d270: 72 20 74 68 65 20 72 6f 77 69 64 2e 20 53 75 63  r the rowid. Suc
d280: 68 20 61 0a 63 6f 6c 75 6d 6e 20 69 73 20 75 73  h a.column is us
d290: 75 61 6c 6c 79 20 72 65 66 65 72 72 65 64 20 74  ually referred t
d2a0: 6f 20 61 73 20 61 6e 20 22 69 6e 74 65 67 65 72  o as an "integer
d2b0: 20 70 72 69 6d 61 72 79 20 6b 65 79 22 2e 20 41   primary key". A
d2c0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c   PRIMARY KEY col
d2d0: 75 6d 6e 0a 6f 6e 6c 79 20 62 65 63 6f 6d 65 73  umn.only becomes
d2e0: 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d   an integer prim
d2f0: 61 72 79 20 6b 65 79 20 69 66 20 74 68 65 20 64  ary key if the d
d300: 65 63 6c 61 72 65 64 20 74 79 70 65 20 6e 61 6d  eclared type nam
d310: 65 20 69 73 20 65 78 61 63 74 6c 79 0a 22 49 4e  e is exactly."IN
d320: 54 45 47 45 52 22 2e 20 20 5e 4f 74 68 65 72 20  TEGER".  ^Other 
d330: 69 6e 74 65 67 65 72 20 74 79 70 65 20 6e 61 6d  integer type nam
d340: 65 73 20 6c 69 6b 65 20 22 49 4e 54 22 20 6f 72  es like "INT" or
d350: 20 22 42 49 47 49 4e 54 22 20 6f 72 20 22 53 48   "BIGINT" or "SH
d360: 4f 52 54 20 49 4e 54 45 47 45 52 22 0a 6f 72 20  ORT INTEGER".or 
d370: 22 55 4e 53 49 47 4e 45 44 20 49 4e 54 45 47 45  "UNSIGNED INTEGE
d380: 52 22 20 63 61 75 73 65 73 20 74 68 65 20 70 72  R" causes the pr
d390: 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e  imary key column
d3a0: 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 6e   to behave as an
d3b0: 20 6f 72 64 69 6e 61 72 79 0a 74 61 62 6c 65 20   ordinary.table 
d3c0: 63 6f 6c 75 6d 6e 20 77 69 74 68 20 69 6e 74 65  column with inte
d3d0: 67 65 72 20 5b 61 66 66 69 6e 69 74 79 5d 20 61  ger [affinity] a
d3e0: 6e 64 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  nd a unique inde
d3f0: 78 2c 20 6e 6f 74 20 61 73 20 61 6e 20 61 6c 69  x, not as an ali
d400: 61 73 20 66 6f 72 0a 74 68 65 20 72 6f 77 69 64  as for.the rowid
d410: 2e 0a 0a 3c 70 3e 20 54 68 65 20 65 78 63 65 70  ...<p> The excep
d420: 74 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 61  tion mentioned a
d430: 62 6f 76 65 20 69 73 20 74 68 61 74 20 5e 69 66  bove is that ^if
d440: 20 74 68 65 20 64 65 63 6c 61 72 61 74 69 6f 6e   the declaration
d450: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74   of a column wit
d460: 68 0a 64 65 63 6c 61 72 65 64 20 74 79 70 65 20  h.declared type 
d470: 22 49 4e 54 45 47 45 52 22 20 69 6e 63 6c 75 64  "INTEGER" includ
d480: 65 73 20 61 6e 20 22 50 52 49 4d 41 52 59 20 4b  es an "PRIMARY K
d490: 45 59 20 44 45 53 43 22 20 63 6c 61 75 73 65 2c  EY DESC" clause,
d4a0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 62 65 63   it does not.bec
d4b0: 6f 6d 65 20 61 6e 20 61 6c 69 61 73 20 66 6f 72  ome an alias for
d4c0: 20 74 68 65 20 72 6f 77 69 64 20 61 6e 64 20 69   the rowid and i
d4d0: 73 20 6e 6f 74 20 63 6c 61 73 73 69 66 69 65 64  s not classified
d4e0: 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70   as an integer p
d4f0: 72 69 6d 61 72 79 20 6b 65 79 2e 0a 54 68 69 73  rimary key..This
d500: 20 71 75 69 72 6b 20 69 73 20 6e 6f 74 20 62 79   quirk is not by
d510: 20 64 65 73 69 67 6e 2e 20 49 74 20 69 73 20 64   design. It is d
d520: 75 65 20 74 6f 20 61 20 62 75 67 20 69 6e 20 65  ue to a bug in e
d530: 61 72 6c 79 20 76 65 72 73 69 6f 6e 73 20 6f 66  arly versions of
d540: 20 53 51 4c 69 74 65 2e 0a 42 75 74 20 66 69 78   SQLite..But fix
d550: 69 6e 67 20 74 68 65 20 62 75 67 20 63 6f 75 6c  ing the bug coul
d560: 64 20 72 65 73 75 6c 74 20 69 6e 20 62 61 63 6b  d result in back
d570: 77 61 72 64 73 20 69 6e 63 6f 6d 70 61 74 69 62  wards incompatib
d580: 69 6c 69 74 69 65 73 2e 0a 48 65 6e 63 65 2c 20  ilities..Hence, 
d590: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 62 65 68  the original beh
d5a0: 61 76 69 6f 72 20 68 61 73 20 62 65 65 6e 20 72  avior has been r
d5b0: 65 74 61 69 6e 65 64 20 28 61 6e 64 20 64 6f 63  etained (and doc
d5c0: 75 6d 65 6e 74 65 64 29 20 62 65 63 61 75 73 65  umented) because
d5d0: 20 6f 64 64 0a 62 65 68 61 76 69 6f 72 20 69 6e   odd.behavior in
d5e0: 20 61 20 63 6f 72 6e 65 72 20 63 61 73 65 20 69   a corner case i
d5f0: 73 20 66 61 72 20 62 65 74 74 65 72 20 74 68 61  s far better tha
d600: 6e 20 61 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  n a compatibilit
d610: 79 20 62 72 65 61 6b 2e 20 20 54 68 69 73 20 6d  y break.  This m
d620: 65 61 6e 73 0a 74 68 61 74 20 5e 28 74 68 65 20  eans.that ^(the 
d630: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20  following three 
d640: 74 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  table declaratio
d650: 6e 73 20 61 6c 6c 20 63 61 75 73 65 20 74 68 65  ns all cause the
d660: 20 63 6f 6c 75 6d 6e 20 22 78 22 20 74 6f 20 62   column "x" to b
d670: 65 20 61 6e 0a 61 6c 69 61 73 20 66 6f 72 20 74  e an.alias for t
d680: 68 65 20 72 6f 77 69 64 20 28 61 6e 20 69 6e 74  he rowid (an int
d690: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
d6a0: 29 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74  ):..<ul>.<li><tt
d6b0: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
d6c0: 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  x INTEGER PRIMAR
d6d0: 59 20 4b 45 59 20 41 53 43 2c 20 79 2c 20 7a 29  Y KEY ASC, y, z)
d6e0: 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43  ;</tt>.<li><tt>C
d6f0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20  REATE TABLE t(x 
d700: 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50  INTEGER, y, z, P
d710: 52 49 4d 41 52 59 20 4b 45 59 28 78 20 41 53 43  RIMARY KEY(x ASC
d720: 29 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74  ));</tt>.<li><tt
d730: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
d740: 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c  x INTEGER, y, z,
d750: 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78 20 44   PRIMARY KEY(x D
d760: 45 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c  ESC));</tt>.</ul
d770: 3e 29 5e 0a 0a 3c 70 3e 42 75 74 20 5e 28 74 68  >)^..<p>But ^(th
d780: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 65 63 6c  e following decl
d790: 61 72 61 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74  aration does not
d7a0: 20 72 65 73 75 6c 74 20 69 6e 20 22 78 22 20 62   result in "x" b
d7b0: 65 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 66 6f  eing an alias fo
d7c0: 72 0a 74 68 65 20 72 6f 77 69 64 3a 0a 3c 75 6c  r.the rowid:.<ul
d7d0: 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45  >.<li><tt>CREATE
d7e0: 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
d7f0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 44  ER PRIMARY KEY D
d800: 45 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e  ESC, y, z);</tt>
d810: 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 5e 52 6f  .</ul>)^..<p>^Ro
d820: 77 69 64 20 76 61 6c 75 65 73 20 6d 61 79 20 62  wid values may b
d830: 65 20 6d 6f 64 69 66 69 65 64 20 75 73 69 6e 67  e modified using
d840: 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
d850: 6d 65 6e 74 20 69 6e 20 74 68 65 20 73 61 6d 65  ment in the same
d860: 0a 77 61 79 20 61 73 20 61 6e 79 20 6f 74 68 65  .way as any othe
d870: 72 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 63  r column value c
d880: 61 6e 2c 20 65 69 74 68 65 72 20 75 73 69 6e 67  an, either using
d890: 20 6f 6e 65 20 6f 66 20 74 68 65 20 62 75 69 6c   one of the buil
d8a0: 74 2d 69 6e 20 61 6c 69 61 73 65 73 0a 28 22 72  t-in aliases.("r
d8b0: 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20  owid", "oid" or 
d8c0: 22 5f 72 6f 77 69 64 5f 22 29 20 6f 72 20 62 79  "_rowid_") or by
d8d0: 20 75 73 69 6e 67 20 61 6e 20 61 6c 69 61 73 20   using an alias 
d8e0: 63 72 65 61 74 65 64 20 62 79 20 61 6e 20 69 6e  created by an in
d8f0: 74 65 67 65 72 0a 70 72 69 6d 61 72 79 20 6b 65  teger.primary ke
d900: 79 2e 20 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 61  y. ^Similarly, a
d910: 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
d920: 6e 74 20 6d 61 79 20 70 72 6f 76 69 64 65 20 61  nt may provide a
d930: 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73   value to use as
d940: 20 74 68 65 0a 72 6f 77 69 64 20 66 6f 72 20 65   the.rowid for e
d950: 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64  ach row inserted
d960: 2e 20 5e 28 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61  . ^(Unlike norma
d970: 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75 6d 6e 73  l SQLite columns
d980: 2c 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  , an integer pri
d990: 6d 61 72 79 0a 6b 65 79 20 6f 72 20 72 6f 77 69  mary.key or rowi
d9a0: 64 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 63 6f  d column must co
d9b0: 6e 74 61 69 6e 20 69 6e 74 65 67 65 72 20 76 61  ntain integer va
d9c0: 6c 75 65 73 2e 20 49 6e 74 65 67 65 72 20 70 72  lues. Integer pr
d9d0: 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77  imary key or row
d9e0: 69 64 0a 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e  id.columns are n
d9f0: 6f 74 20 61 62 6c 65 20 74 6f 20 68 6f 6c 64 20  ot able to hold 
da00: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
da10: 61 6c 75 65 73 2c 20 73 74 72 69 6e 67 73 2c 20  alues, strings, 
da20: 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e  BLOBs, or NULLs.
da30: 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50  )^..<p>^If an UP
da40: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
da50: 74 74 65 6d 70 74 73 20 74 6f 20 73 65 74 20 61  ttempts to set a
da60: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
da70: 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63  y key or rowid c
da80: 6f 6c 75 6d 6e 0a 74 6f 20 61 20 4e 55 4c 4c 20  olumn.to a NULL 
da90: 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f  or blob value, o
daa0: 72 20 74 6f 20 61 20 73 74 72 69 6e 67 20 6f 72  r to a string or
dab0: 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74   real value that
dac0: 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
dad0: 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20  essly.converted 
dae0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  to an integer, a
daf0: 20 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61   "datatype misma
db00: 74 63 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72  tch" error occur
db10: 73 20 61 6e 64 20 74 68 65 20 73 74 61 74 65 6d  s and the statem
db20: 65 6e 74 0a 69 73 20 61 62 6f 72 74 65 64 2e 20  ent.is aborted. 
db30: 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74  ^If an INSERT st
db40: 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73  atement attempts
db50: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 62 6c 6f   to insert a blo
db60: 62 20 76 61 6c 75 65 2c 20 6f 72 20 61 20 73 74  b value, or a st
db70: 72 69 6e 67 0a 6f 72 20 72 65 61 6c 20 76 61 6c  ring.or real val
db80: 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62  ue that cannot b
db90: 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e losslessly con
dba0: 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
dbb0: 65 67 65 72 20 69 6e 74 6f 20 61 6e 0a 69 6e 74  eger into an.int
dbc0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
dbd0: 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e   or rowid column
dbe0: 2c 20 61 20 22 64 61 74 61 74 79 70 65 20 6d 69  , a "datatype mi
dbf0: 73 6d 61 74 63 68 22 20 65 72 72 6f 72 20 6f 63  smatch" error oc
dc00: 63 75 72 73 20 61 6e 64 20 74 68 65 0a 73 74 61  curs and the.sta
dc10: 74 65 6d 65 6e 74 20 69 73 20 61 62 6f 72 74 65  tement is aborte
dc20: 64 2e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 49 4e  d...<p>^If an IN
dc30: 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61  SERT statement a
dc40: 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72  ttempts to inser
dc50: 74 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  t a NULL value i
dc60: 6e 74 6f 20 61 20 72 6f 77 69 64 20 6f 72 0a 69  nto a rowid or.i
dc70: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
dc80: 65 79 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 20 73  ey column, the s
dc90: 79 73 74 65 6d 20 63 68 6f 6f 73 65 73 20 61 6e  ystem chooses an
dca0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 74   integer value t
dcb0: 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72 6f 77  o use as the.row
dcc0: 69 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  id automatically
dcd0: 2e 20 41 20 64 65 74 61 69 6c 65 64 20 64 65 73  . A detailed des
dce0: 63 72 69 70 74 69 6f 6e 20 6f 66 20 68 6f 77 20  cription of how 
dcf0: 74 68 69 73 20 69 73 20 64 6f 6e 65 20 69 73 20  this is done is 
dd00: 70 72 6f 76 69 64 65 64 0a 3c 61 20 68 72 65 66  provided.<a href
dd10: 3d 22 61 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e  ="autoinc.html">
dd20: 73 65 70 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c  separately</a>.<
dd30: 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 5b 70  /p>..<p>^(The [p
dd40: 61 72 65 6e 74 20 6b 65 79 5d 20 6f 66 20 61 20  arent key] of a 
dd50: 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e  [foreign key con
dd60: 73 74 72 61 69 6e 74 5d 20 69 73 20 6e 6f 74 20  straint] is not 
dd70: 61 6c 6c 6f 77 65 64 20 74 6f 0a 75 73 65 20 74  allowed to.use t
dd80: 68 65 20 72 6f 77 69 64 2e 20 20 54 68 65 20 70  he rowid.  The p
dd90: 61 72 65 6e 74 20 6b 65 79 20 6d 75 73 74 20 75  arent key must u
dda0: 73 65 64 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e  sed named column
ddb0: 73 20 6f 6e 6c 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c  s only.)^</p>..<
ddc0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
ddd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dde0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ddf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
de00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
de10: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45  ###.Section {CRE
de20: 41 54 45 20 54 52 49 47 47 45 52 7d 20 63 72 65  ATE TRIGGER} cre
de30: 61 74 65 74 72 69 67 67 65 72 20 7b 7b 43 52 45  atetrigger {{CRE
de40: 41 54 45 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52  ATE TRIGGER}}..R
de50: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
de60: 61 67 72 61 6d 20 63 72 65 61 74 65 2d 74 72 69  agram create-tri
de70: 67 67 65 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  gger-stmt.</tcl>
de80: 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45  ..<p>^The CREATE
de90: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
dea0: 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 64  nt is used to ad
deb0: 64 20 74 72 69 67 67 65 72 73 20 74 6f 20 74 68  d triggers to th
dec0: 65 20 0a 64 61 74 61 62 61 73 65 20 73 63 68 65  e .database sche
ded0: 6d 61 2e 20 5e 54 72 69 67 67 65 72 73 20 61 72  ma. ^Triggers ar
dee0: 65 20 64 61 74 61 62 61 73 65 20 6f 70 65 72 61  e database opera
def0: 74 69 6f 6e 73 20 0a 74 68 61 74 20 61 72 65 20  tions .that are 
df00: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 65  automatically pe
df10: 72 66 6f 72 6d 65 64 20 77 68 65 6e 20 61 20 73  rformed when a s
df20: 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73  pecified databas
df30: 65 20 65 76 65 6e 74 0a 6f 63 63 75 72 73 2e 20  e event.occurs. 
df40: 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 74 72 69   </p>..<p>^A tri
df50: 67 67 65 72 20 6d 61 79 20 62 65 20 73 70 65 63  gger may be spec
df60: 69 66 69 65 64 20 74 6f 20 66 69 72 65 20 77 68  ified to fire wh
df70: 65 6e 65 76 65 72 20 61 20 5b 44 45 4c 45 54 45  enever a [DELETE
df80: 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f 72 20  ], [INSERT],.or 
df90: 5b 55 50 44 41 54 45 5d 20 6f 66 20 61 0a 70 61  [UPDATE] of a.pa
dfa0: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
dfb0: 65 20 74 61 62 6c 65 20 6f 63 63 75 72 73 2c 20  e table occurs, 
dfc0: 6f 72 20 77 68 65 6e 65 76 65 72 20 61 6e 20 5b  or whenever an [
dfd0: 55 50 44 41 54 45 5d 20 6f 63 63 75 72 73 20 6f  UPDATE] occurs o
dfe0: 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  n.on one or more
dff0: 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d   specified colum
e000: 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 2e 3c 2f  ns of a table.</
e010: 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68 69 73 20  p>..<p>^At this 
e020: 74 69 6d 65 20 53 51 4c 69 74 65 20 73 75 70 70  time SQLite supp
e030: 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52 20 45 41  orts only FOR EA
e040: 43 48 20 52 4f 57 20 74 72 69 67 67 65 72 73 2c  CH ROW triggers,
e050: 20 6e 6f 74 20 46 4f 52 20 45 41 43 48 0a 53 54   not FOR EACH.ST
e060: 41 54 45 4d 45 4e 54 20 74 72 69 67 67 65 72 73  ATEMENT triggers
e070: 2e 20 5e 48 65 6e 63 65 20 65 78 70 6c 69 63 69  . ^Hence explici
e080: 74 6c 79 20 73 70 65 63 69 66 79 69 6e 67 20 46  tly specifying F
e090: 4f 52 20 45 41 43 48 20 52 4f 57 20 69 73 20 6f  OR EACH ROW is o
e0a0: 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52 20 45 41  ptional..^FOR EA
e0b0: 43 48 20 52 4f 57 20 69 6d 70 6c 69 65 73 20 74  CH ROW implies t
e0c0: 68 61 74 20 74 68 65 20 53 51 4c 20 73 74 61 74  hat the SQL stat
e0d0: 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
e0e0: 20 69 6e 20 74 68 65 20 74 72 69 67 67 65 72 0a   in the trigger.
e0f0: 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20  may be executed 
e100: 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68  (depending on th
e110: 65 20 57 48 45 4e 20 63 6c 61 75 73 65 29 20 66  e WHEN clause) f
e120: 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65  or each database
e130: 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65 72   row being.inser
e140: 74 65 64 2c 20 75 70 64 61 74 65 64 20 6f 72 20  ted, updated or 
e150: 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20 73  deleted by the s
e160: 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e 67  tatement causing
e170: 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f 20   the trigger to 
e180: 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28  fire.</p>..<p>^(
e190: 42 6f 74 68 20 74 68 65 20 57 48 45 4e 20 63 6c  Both the WHEN cl
e1a0: 61 75 73 65 20 61 6e 64 20 74 68 65 20 74 72 69  ause and the tri
e1b0: 67 67 65 72 20 61 63 74 69 6f 6e 73 20 6d 61 79  gger actions may
e1c0: 20 61 63 63 65 73 73 20 65 6c 65 6d 65 6e 74 73   access elements
e1d0: 20 6f 66 20 0a 74 68 65 20 72 6f 77 20 62 65 69   of .the row bei
e1e0: 6e 67 20 69 6e 73 65 72 74 65 64 2c 20 64 65 6c  ng inserted, del
e1f0: 65 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 20  eted or updated 
e200: 75 73 69 6e 67 20 72 65 66 65 72 65 6e 63 65 73  using references
e210: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 0a 22 4e   of the form ."N
e220: 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  EW.<i>column-nam
e230: 65 3c 2f 69 3e 22 20 61 6e 64 20 22 4f 4c 44 2e  e</i>" and "OLD.
e240: 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f  <i>column-name</
e250: 69 3e 22 2c 20 77 68 65 72 65 0a 3c 69 3e 63 6f  i>", where.<i>co
e260: 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73  lumn-name</i> is
e270: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63   the name of a c
e280: 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 74  olumn from the t
e290: 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 74 72  able that the tr
e2a0: 69 67 67 65 72 0a 69 73 20 61 73 73 6f 63 69 61  igger.is associa
e2b0: 74 65 64 20 77 69 74 68 2e 29 5e 20 5e 28 4f 4c  ted with.)^ ^(OL
e2c0: 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65 72 65  D and NEW refere
e2d0: 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65  nces may only be
e2e0: 20 75 73 65 64 20 69 6e 20 74 72 69 67 67 65 72   used in trigger
e2f0: 73 20 6f 6e 0a 65 76 65 6e 74 73 20 66 6f 72 20  s on.events for 
e300: 77 68 69 63 68 20 74 68 65 79 20 61 72 65 20 72  which they are r
e310: 65 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c 6c  elevant, as foll
e320: 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65  ows:</p>..<table
e330: 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61   border=0 cellpa
e340: 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c  dding=10>.<tr>.<
e350: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
e360: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69  align="right" wi
e370: 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45 52  dth=120><i>INSER
e380: 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76  T</i></td>.<td v
e390: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20  align="top">NEW 
e3a0: 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76  references are v
e3b0: 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  alid</td>.</tr>.
e3c0: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
e3d0: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
e3e0: 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69  ht" width=120><i
e3f0: 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64 3e  >UPDATE</i></td>
e400: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
e410: 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72 65  ">NEW and OLD re
e420: 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c  ferences are val
e430: 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  id</td>.</tr>.<t
e440: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
e450: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
e460: 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 44  " width=120><i>D
e470: 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c  ELETE</i></td>.<
e480: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
e490: 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61  OLD references a
e4a0: 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f  re valid</td>.</
e4b0: 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 70  tr>.</table>.</p
e4c0: 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 20 57 48  >)^..<p>^If a WH
e4d0: 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75 70  EN clause is sup
e4e0: 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73  plied, the SQL s
e4f0: 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
e500: 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20 65 78 65  ied.are only exe
e510: 63 75 74 65 64 20 69 66 20 74 68 65 20 57 48 45  cuted if the WHE
e520: 4e 20 63 6c 61 75 73 65 20 69 73 20 74 72 75 65  N clause is true
e530: 2e 0a 5e 49 66 20 6e 6f 20 57 48 45 4e 20 63 6c  ..^If no WHEN cl
e540: 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64  ause is supplied
e550: 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  , the SQL statem
e560: 65 6e 74 73 0a 61 72 65 20 65 78 65 63 75 74 65  ents.are execute
e570: 64 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 65  d every time the
e580: 20 74 72 69 67 67 65 72 20 66 69 72 65 73 2e 3c   trigger fires.<
e590: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 42 45 46  /p>..<p>^The BEF
e5a0: 4f 52 45 20 6f 72 20 41 46 54 45 52 20 6b 65 79  ORE or AFTER key
e5b0: 77 6f 72 64 20 64 65 74 65 72 6d 69 6e 65 73 20  word determines 
e5c0: 77 68 65 6e 20 74 68 65 20 74 72 69 67 67 65 72  when the trigger
e5d0: 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c 20 62 65   actions.will be
e5e0: 20 65 78 65 63 75 74 65 64 20 72 65 6c 61 74 69   executed relati
e5f0: 76 65 20 74 6f 20 74 68 65 20 69 6e 73 65 72 74  ve to the insert
e600: 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f  ion, modificatio
e610: 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20  n or removal of 
e620: 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20 72  the.associated r
e630: 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6e 20  ow.</p>..<p>^An 
e640: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c  [ON CONFLICT] cl
e650: 61 75 73 65 20 6d 61 79 20 62 65 20 73 70 65 63  ause may be spec
e660: 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
e670: 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72 20   an [UPDATE] or 
e680: 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69 6f 6e 20  [INSERT].action 
e690: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
e6a0: 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2e 0a  of the trigger..
e6b0: 5e 48 6f 77 65 76 65 72 20 69 66 20 61 6e 20 5b  ^However if an [
e6c0: 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61  ON CONFLICT] cla
e6d0: 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
e6e0: 20 61 73 20 70 61 72 74 20 6f 66 20 0a 74 68 65   as part of .the
e6f0: 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69   statement causi
e700: 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74  ng the trigger t
e710: 6f 20 66 69 72 65 2c 20 74 68 65 6e 20 63 6f 6e  o fire, then con
e720: 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e 67 0a 70  flict handling.p
e730: 6f 6c 69 63 79 20 6f 66 20 74 68 65 20 6f 75 74  olicy of the out
e740: 65 72 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  er statement is 
e750: 75 73 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f 70  used instead.</p
e760: 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20  >..<p>^Triggers 
e770: 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  are automaticall
e780: 79 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 20  y [DROP TRIGGER 
e790: 7c 20 64 72 6f 70 70 65 64 5d 0a 77 68 65 6e 20  | dropped].when 
e7a0: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74  the table that t
e7b0: 68 65 79 20 61 72 65 20 0a 61 73 73 6f 63 69 61  hey are .associa
e7c0: 74 65 64 20 77 69 74 68 20 28 74 68 65 20 3c 69  ted with (the <i
e7d0: 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20  >table-name</i> 
e7e0: 74 61 62 6c 65 29 20 69 73 20 0a 5b 44 52 4f 50  table) is .[DROP
e7f0: 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70 65 64   TABLE | dropped
e800: 5d 2e 20 20 5e 48 6f 77 65 76 65 72 20 69 66 20  ].  ^However if 
e810: 74 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69  the trigger acti
e820: 6f 6e 73 20 72 65 66 65 72 65 6e 63 65 0a 6f 74  ons reference.ot
e830: 68 65 72 20 74 61 62 6c 65 73 2c 20 74 68 65 20  her tables, the 
e840: 74 72 69 67 67 65 72 20 69 73 20 6e 6f 74 20 64  trigger is not d
e850: 72 6f 70 70 65 64 20 6f 72 20 6d 6f 64 69 66 69  ropped or modifi
e860: 65 64 20 69 66 20 74 68 6f 73 65 20 6f 74 68 65  ed if those othe
e870: 72 0a 74 61 62 6c 65 73 20 61 72 65 20 5b 44 52  r.tables are [DR
e880: 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70  OP TABLE | dropp
e890: 65 64 5d 20 6f 72 20 5b 41 4c 54 45 52 20 54 41  ed] or [ALTER TA
e8a0: 42 4c 45 20 7c 20 6d 6f 64 69 66 69 65 64 5d 2e  BLE | modified].
e8b0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65  </p>..<p>^Trigge
e8c0: 72 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75  rs are removed u
e8d0: 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54  sing the [DROP T
e8e0: 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e  RIGGER] statemen
e8f0: 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 79 6e 74  t.</p>..<h3>Synt
e900: 61 78 20 52 65 73 74 72 69 63 74 69 6f 6e 73 20  ax Restrictions 
e910: 4f 6e 20 55 50 44 41 54 45 2c 20 44 45 4c 45 54  On UPDATE, DELET
e920: 45 2c 20 61 6e 64 20 49 4e 53 45 52 54 20 53 74  E, and INSERT St
e930: 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 0a  atements Within.
e940: 20 20 20 20 54 72 69 67 67 65 72 73 3c 2f 68 33      Triggers</h3
e950: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 55 50 44 41  >..<p>^The [UPDA
e960: 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61  TE], [DELETE], a
e970: 6e 64 20 5b 49 4e 53 45 52 54 5d 0a 73 74 61 74  nd [INSERT].stat
e980: 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
e990: 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 20 73 75  iggers do not su
e9a0: 70 70 6f 72 74 0a 74 68 65 20 66 75 6c 6c 20 73  pport.the full s
e9b0: 79 6e 74 61 78 20 66 6f 72 20 5b 55 50 44 41 54  yntax for [UPDAT
e9c0: 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61 6e  E], [DELETE], an
e9d0: 64 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65  d [INSERT] state
e9e0: 6d 65 6e 74 73 2e 20 20 54 68 65 20 66 6f 6c 6c  ments.  The foll
e9f0: 6f 77 69 6e 67 0a 72 65 73 74 72 69 63 74 69 6f  owing.restrictio
ea00: 6e 73 20 61 70 70 6c 79 3a 3c 2f 70 3e 0a 0a 3c  ns apply:</p>..<
ea10: 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28  ul>.<li><p>.  ^(
ea20: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
ea30: 74 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69  table to be modi
ea40: 66 69 65 64 20 69 6e 20 61 6e 20 5b 55 50 44 41  fied in an [UPDA
ea50: 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 6f  TE], [DELETE], o
ea60: 72 20 5b 49 4e 53 45 52 54 5d 0a 20 20 73 74 61  r [INSERT].  sta
ea70: 74 65 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 61  tement must be a
ea80: 6e 20 75 6e 71 75 61 6c 69 66 69 65 64 20 74 61  n unqualified ta
ea90: 62 6c 65 20 6e 61 6d 65 2e 20 20 49 6e 20 6f 74  ble name.  In ot
eaa0: 68 65 72 20 77 6f 72 64 73 2c 20 6f 6e 65 20 6d  her words, one m
eab0: 75 73 74 0a 20 20 75 73 65 20 6a 75 73 74 20 22  ust.  use just "
eac0: 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e  <i>tablename</i>
ead0: 22 20 6e 6f 74 20 22 3c 69 3e 64 61 74 61 62 61  " not "<i>databa
eae0: 73 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 3c 69  se</i><b>.</b><i
eaf0: 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22 0a  >tablename</i>".
eb00: 20 20 77 68 65 6e 20 73 70 65 63 69 66 79 69 6e    when specifyin
eb10: 67 20 74 68 65 20 74 61 62 6c 65 2e 29 5e 20 3c  g the table.)^ <
eb20: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
eb30: 3e 0a 20 5e 46 6f 72 20 6e 6f 6e 2d 54 45 4d 50  >. ^For non-TEMP
eb40: 20 74 72 69 67 67 65 72 73 2c 0a 20 20 74 68 65   triggers,.  the
eb50: 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64   table to be mod
eb60: 69 66 69 65 64 20 6f 72 20 71 75 65 72 69 65 64  ified or queried
eb70: 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20 74   must exist in t
eb80: 68 65 0a 20 20 73 61 6d 65 20 64 61 74 61 62 61  he.  same databa
eb90: 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  se as the table 
eba0: 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68  or view to which
ebb0: 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20   the trigger is 
ebc0: 61 74 74 61 63 68 65 64 2e 0a 20 20 5e 28 54 45  attached..  ^(TE
ebd0: 4d 50 20 74 72 69 67 67 65 72 73 20 61 72 65 20  MP triggers are 
ebe0: 6e 6f 74 20 73 75 62 6a 65 63 74 20 74 6f 20 74  not subject to t
ebf0: 68 65 20 73 61 6d 65 2d 64 61 74 61 62 61 73 65  he same-database
ec00: 20 72 75 6c 65 2e 20 20 41 20 54 45 4d 50 0a 20   rule.  A TEMP. 
ec10: 20 74 72 69 67 67 65 72 20 69 73 20 61 6c 6c 6f   trigger is allo
ec20: 77 65 64 20 74 6f 20 71 75 65 72 79 20 6f 72 20  wed to query or 
ec30: 6d 6f 64 69 66 79 20 61 6e 79 20 74 61 62 6c 65  modify any table
ec40: 20 69 6e 20 61 6e 79 20 5b 41 54 54 41 43 48 5d   in any [ATTACH]
ec50: 2d 65 64 20 64 61 74 61 62 61 73 65 2e 29 5e 0a  -ed database.)^.
ec60: 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69    </p></li>..<li
ec70: 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 22 49 4e 53  ><p>.  ^The "INS
ec80: 45 52 54 20 49 4e 54 4f 20 3c 69 3e 74 61 62 6c  ERT INTO <i>tabl
ec90: 65 3c 2f 69 3e 20 44 45 46 41 55 4c 54 20 56 41  e</i> DEFAULT VA
eca0: 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68  LUES" form of th
ecb0: 65 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65  e [INSERT] state
ecc0: 6d 65 6e 74 0a 20 20 69 73 20 6e 6f 74 20 73 75  ment.  is not su
ecd0: 70 70 6f 72 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c  pported..  </p><
ece0: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  /li>..<li><p>.  
ecf0: 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
ed00: 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  and NOT INDEXED 
ed10: 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20  clauses are not 
ed20: 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 5b 55  supported for [U
ed30: 50 44 41 54 45 5d 20 61 6e 64 0a 20 20 5b 44 45  PDATE] and.  [DE
ed40: 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73  LETE] statements
ed50: 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ..  </p></li>..<
ed60: 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 4f  li><p>.  ^(The O
ed70: 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49  RDER BY and LIMI
ed80: 54 20 63 6c 61 75 73 65 73 20 6f 6e 20 5b 55 50  T clauses on [UP
ed90: 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54  DATE] and [DELET
eda0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72  E] statements ar
edb0: 65 20 6e 6f 74 0a 20 20 73 75 70 70 6f 72 74 65  e not.  supporte
edc0: 64 2e 20 20 4f 52 44 45 52 20 42 59 20 61 6e 64  d.  ORDER BY and
edd0: 20 4c 49 4d 49 54 20 61 72 65 20 6e 6f 74 20 6e   LIMIT are not n
ede0: 6f 72 6d 61 6c 6c 79 20 73 75 70 70 6f 72 74 65  ormally supporte
edf0: 64 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f  d for [UPDATE] o
ee00: 72 0a 20 20 5b 44 45 4c 45 54 45 5d 20 69 6e 20  r.  [DELETE] in 
ee10: 61 6e 79 20 63 6f 6e 74 65 78 74 20 62 75 74 20  any context but 
ee20: 63 61 6e 20 62 65 20 65 6e 61 62 6c 65 64 20 66  can be enabled f
ee30: 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61  or top-level sta
ee40: 74 65 6d 65 6e 74 73 0a 20 20 75 73 69 6e 67 20  tements.  using 
ee50: 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42  the [SQLITE_ENAB
ee60: 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
ee70: 5f 4c 49 4d 49 54 5d 20 63 6f 6d 70 69 6c 65 2d  _LIMIT] compile-
ee80: 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 48 6f  time option.  Ho
ee90: 77 65 76 65 72 2c 0a 20 20 74 68 61 74 20 63 6f  wever,.  that co
eea0: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
eeb0: 6e 20 6f 6e 6c 79 20 61 70 70 6c 69 65 73 20 74  n only applies t
eec0: 6f 20 74 6f 70 2d 6c 65 76 65 6c 20 5b 55 50 44  o top-level [UPD
eed0: 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45  ATE] and [DELETE
eee0: 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  ].  statements, 
eef0: 6e 6f 74 20 5b 55 50 44 41 54 45 5d 20 61 6e 64  not [UPDATE] and
ef00: 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d   [DELETE] statem
ef10: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
ef20: 67 65 72 73 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f  gers.)^.  </p></
ef30: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e  li>..<li><p>.  ^
ef40: 5b 63 6f 6d 6d 6f 6e 2d 74 61 62 6c 65 2d 65 78  [common-table-ex
ef50: 70 72 65 73 73 69 6f 6e 7c 43 6f 6d 6d 6f 6e 20  pression|Common 
ef60: 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
ef70: 5d 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72  ] are not suppor
ef80: 74 65 64 20 66 6f 72 0a 20 20 73 74 61 74 65 6d  ted for.  statem
ef90: 65 6e 74 73 20 69 6e 73 69 64 65 20 6f 66 20 74  ents inside of t
efa0: 72 69 67 67 65 72 73 2e 0a 20 20 3c 2f 70 3e 3c  riggers..  </p><
efb0: 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c  /li>.</ul>..<tcl
efc0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 73  >hd_fragment ins
efd0: 74 65 61 64 5f 6f 66 5f 74 72 69 67 67 65 72 20  tead_of_trigger 
efe0: 7b 49 4e 53 54 45 41 44 20 4f 46 7d 20 7b 49 4e  {INSTEAD OF} {IN
eff0: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
f000: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54  }</tcl>.<h3>INST
f010: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 73 3c  EAD OF triggers<
f020: 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65  /h3>..<p>^Trigge
f030: 72 73 20 6d 61 79 20 62 65 20 63 72 65 61 74 65  rs may be create
f040: 64 20 6f 6e 20 5b 76 69 65 77 73 5d 2c 20 61 73  d on [views], as
f050: 20 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e 61 72   well as ordinar
f060: 79 20 74 61 62 6c 65 73 2c 20 62 79 0a 73 70 65  y tables, by.spe
f070: 63 69 66 79 69 6e 67 20 49 4e 53 54 45 41 44 20  cifying INSTEAD 
f080: 4f 46 20 69 6e 20 74 68 65 20 43 52 45 41 54 45  OF in the CREATE
f090: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
f0a0: 6e 74 2e 20 0a 5e 49 66 20 6f 6e 65 20 6f 72 20  nt. .^If one or 
f0b0: 6d 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54 2c 20  more ON INSERT, 
f0c0: 4f 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f 4e 20  ON DELETE.or ON 
f0d0: 55 50 44 41 54 45 20 74 72 69 67 67 65 72 73 20  UPDATE triggers 
f0e0: 61 72 65 20 64 65 66 69 6e 65 64 20 6f 6e 20 61  are defined on a
f0f0: 20 76 69 65 77 2c 20 74 68 65 6e 20 69 74 20 69   view, then it i
f100: 73 20 6e 6f 74 20 61 6e 0a 65 72 72 6f 72 20 74  s not an.error t
f110: 6f 20 65 78 65 63 75 74 65 20 61 6e 20 49 4e 53  o execute an INS
f120: 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55  ERT, DELETE or U
f130: 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
f140: 6f 6e 20 74 68 65 20 76 69 65 77 2c 20 0a 72 65  on the view, .re
f150: 73 70 65 63 74 69 76 65 6c 79 2e 20 20 5e 49 6e  spectively.  ^In
f160: 73 74 65 61 64 2c 0a 65 78 65 63 75 74 69 6e 67  stead,.executing
f170: 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
f180: 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 6e 20  TE or UPDATE on 
f190: 74 68 65 20 76 69 65 77 20 63 61 75 73 65 73 20  the view causes 
f1a0: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 74  the associated.t
f1b0: 72 69 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e  riggers to fire.
f1c0: 20 5e 54 68 65 20 72 65 61 6c 20 74 61 62 6c 65   ^The real table
f1d0: 73 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 68 65  s underlying the
f1e0: 20 76 69 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f   view are not mo
f1f0: 64 69 66 69 65 64 0a 28 65 78 63 65 70 74 20 70  dified.(except p
f200: 6f 73 73 69 62 6c 79 20 65 78 70 6c 69 63 69 74  ossibly explicit
f210: 6c 79 2c 20 62 79 20 61 20 74 72 69 67 67 65 72  ly, by a trigger
f220: 20 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a   program).</p>..
f230: 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 68  <p>^Note that th
f240: 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  e [sqlite3_chang
f250: 65 73 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74  es()] and [sqlit
f260: 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
f270: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73 0a 64  ()] interfaces.d
f280: 6f 20 6e 6f 74 20 63 6f 75 6e 74 20 49 4e 53 54  o not count INST
f290: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 20 66  EAD OF trigger f
f2a0: 69 72 69 6e 67 73 2c 20 62 75 74 20 74 68 65 0a  irings, but the.
f2b0: 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70  [count_changes p
f2c0: 72 61 67 6d 61 5d 20 64 6f 65 73 20 63 6f 75 6e  ragma] does coun
f2d0: 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69  t INSTEAD OF tri
f2e0: 67 67 65 72 20 66 69 72 69 6e 67 2e 3c 2f 70 3e  gger firing.</p>
f2f0: 0a 0a 3c 68 33 3e 53 6f 6d 65 20 45 78 61 6d 70  ..<h3>Some Examp
f300: 6c 65 20 54 72 69 67 67 65 72 73 3c 2f 68 33 3e  le Triggers</h3>
f310: 0a 0a 3c 70 3e 5e 28 41 73 73 75 6d 69 6e 67 20  ..<p>^(Assuming 
f320: 74 68 61 74 20 63 75 73 74 6f 6d 65 72 20 72 65  that customer re
f330: 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65 64  cords are stored
f340: 20 69 6e 20 74 68 65 20 22 63 75 73 74 6f 6d 65   in the "custome
f350: 72 73 22 20 74 61 62 6c 65 2c 20 61 6e 64 0a 74  rs" table, and.t
f360: 68 61 74 20 6f 72 64 65 72 20 72 65 63 6f 72 64  hat order record
f370: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
f380: 74 68 65 20 22 6f 72 64 65 72 73 22 20 74 61 62  the "orders" tab
f390: 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  le, the followin
f3a0: 67 0a 55 50 44 41 54 45 20 74 72 69 67 67 65 72  g.UPDATE trigger
f3b0: 0a 65 6e 73 75 72 65 73 20 74 68 61 74 20 61 6c  .ensures that al
f3c0: 6c 20 61 73 73 6f 63 69 61 74 65 64 20 6f 72 64  l associated ord
f3d0: 65 72 73 20 61 72 65 20 72 65 64 69 72 65 63 74  ers are redirect
f3e0: 65 64 20 77 68 65 6e 20 61 20 63 75 73 74 6f 6d  ed when a custom
f3f0: 65 72 20 63 68 61 6e 67 65 73 0a 68 69 73 20 6f  er changes.his o
f400: 72 20 68 65 72 20 61 64 64 72 65 73 73 3a 3c 2f  r her address:</
f410: 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  p>..<tcl>Example
f420: 20 7b 0a 43 52 45 41 54 45 20 54 52 49 47 47 45   {.CREATE TRIGGE
f430: 52 20 75 70 64 61 74 65 5f 63 75 73 74 6f 6d 65  R update_custome
f440: 72 5f 61 64 64 72 65 73 73 20 55 50 44 41 54 45  r_address UPDATE
f450: 20 4f 46 20 61 64 64 72 65 73 73 20 4f 4e 20 63   OF address ON c
f460: 75 73 74 6f 6d 65 72 73 20 0a 20 20 42 45 47 49  ustomers .  BEGI
f470: 4e 0a 20 20 20 20 55 50 44 41 54 45 20 6f 72 64  N.    UPDATE ord
f480: 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20  ers SET address 
f490: 3d 20 6e 65 77 2e 61 64 64 72 65 73 73 20 57 48  = new.address WH
f4a0: 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d  ERE customer_nam
f4b0: 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20  e = old.name;.  
f4c0: 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  END;.}</tcl>..<p
f4d0: 3e 57 69 74 68 20 74 68 69 73 20 74 72 69 67 67  >With this trigg
f4e0: 65 72 20 69 6e 73 74 61 6c 6c 65 64 2c 20 65 78  er installed, ex
f4f0: 65 63 75 74 69 6e 67 20 74 68 65 20 73 74 61 74  ecuting the stat
f500: 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ement:</p>..<tcl
f510: 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54  >Example {.UPDAT
f520: 45 20 63 75 73 74 6f 6d 65 72 73 20 53 45 54 20  E customers SET 
f530: 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69  address = '1 Mai
f540: 6e 20 53 74 2e 27 20 57 48 45 52 45 20 6e 61 6d  n St.' WHERE nam
f550: 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27  e = 'Jack Jones'
f560: 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61  ;.}</tcl>..<p>ca
f570: 75 73 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69  uses the followi
f580: 6e 67 20 74 6f 20 62 65 20 61 75 74 6f 6d 61 74  ng to be automat
f590: 69 63 61 6c 6c 79 20 65 78 65 63 75 74 65 64 3a  ically executed:
f5a0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70  </p>..<tcl>Examp
f5b0: 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f 72 64 65  le {.UPDATE orde
f5c0: 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d  rs SET address =
f5d0: 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48   '1 Main St.' WH
f5e0: 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d  ERE customer_nam
f5f0: 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27  e = 'Jack Jones'
f600: 3b 0a 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c 70 3e  ;.}</tcl>)^..<p>
f610: 46 6f 72 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f  For an example o
f620: 66 20 61 6e 20 49 4e 53 54 45 41 44 20 4f 46 20  f an INSTEAD OF 
f630: 74 72 69 67 67 65 72 2c 20 63 6f 6e 73 69 64 65  trigger, conside
f640: 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  r the following 
f650: 73 63 68 65 6d 61 3a 0a 0a 3c 74 63 6c 3e 45 78  schema:..<tcl>Ex
f660: 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54 45 20 54  ample {.CREATE T
f670: 41 42 4c 45 20 63 75 73 74 6f 6d 65 72 28 0a 20  ABLE customer(. 
f680: 20 63 75 73 74 5f 69 64 20 49 4e 54 45 47 45 52   cust_id INTEGER
f690: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20   PRIMARY KEY,.  
f6a0: 63 75 73 74 5f 6e 61 6d 65 20 54 45 58 54 2c 0a  cust_name TEXT,.
f6b0: 20 20 63 75 73 74 5f 61 64 64 72 20 54 45 58 54    cust_addr TEXT
f6c0: 0a 29 3b 0a 43 52 45 41 54 45 20 56 49 45 57 20  .);.CREATE VIEW 
f6d0: 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73  customer_address
f6e0: 20 41 53 0a 20 20 20 53 45 4c 45 43 54 20 63 75   AS.   SELECT cu
f6f0: 73 74 5f 69 64 2c 20 63 75 73 74 5f 61 64 64 72  st_id, cust_addr
f700: 20 46 52 4f 4d 20 63 75 73 74 6f 6d 65 72 3b 0a   FROM customer;.
f710: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 63  CREATE TRIGGER c
f720: 75 73 74 5f 61 64 64 72 5f 63 68 6e 67 0a 49 4e  ust_addr_chng.IN
f730: 53 54 45 41 44 20 4f 46 20 55 50 44 41 54 45 20  STEAD OF UPDATE 
f740: 4f 46 20 63 75 73 74 5f 61 64 64 72 20 4f 4e 20  OF cust_addr ON 
f750: 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73  customer_address
f760: 0a 42 45 47 49 4e 0a 20 20 55 50 44 41 54 45 20  .BEGIN.  UPDATE 
f770: 63 75 73 74 6f 6d 65 72 20 53 45 54 20 63 75 73  customer SET cus
f780: 74 5f 61 64 64 72 3d 4e 45 57 2e 63 75 73 74 5f  t_addr=NEW.cust_
f790: 61 64 64 72 0a 20 20 20 57 48 45 52 45 20 63 75  addr.   WHERE cu
f7a0: 73 74 5f 69 64 3d 4e 45 57 2e 63 75 73 74 5f 69  st_id=NEW.cust_i
f7b0: 64 3b 0a 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a  d;.END;.}</tcl>.
f7c0: 0a 3c 70 3e 57 69 74 68 20 74 68 65 20 73 63 68  .<p>With the sch
f7d0: 65 6d 61 20 61 62 6f 76 65 2c 20 61 20 73 74 61  ema above, a sta
f7e0: 74 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f  tement of the fo
f7f0: 72 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78  rm:</p>..<tcl>Ex
f800: 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63  ample {.UPDATE c
f810: 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20  ustomer_address 
f820: 53 45 54 20 63 75 73 74 5f 61 64 64 72 3d 24 6e  SET cust_addr=$n
f830: 65 77 5f 61 64 64 72 65 73 73 20 57 48 45 52 45  ew_address WHERE
f840: 20 63 75 73 74 5f 69 64 3d 24 63 75 73 74 5f 69   cust_id=$cust_i
f850: 64 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43  d;.}</tcl>..<p>C
f860: 61 75 73 65 73 20 74 68 65 20 63 75 73 74 6f 6d  auses the custom
f870: 65 72 2e 63 75 73 74 5f 61 64 64 72 20 66 69 65  er.cust_addr fie
f880: 6c 64 20 74 6f 20 62 65 20 75 70 64 61 74 65 64  ld to be updated
f890: 20 66 6f 72 20 61 20 73 70 65 63 69 66 69 63 0a   for a specific.
f8a0: 63 75 73 74 6f 6d 65 72 20 65 6e 74 72 79 20 74  customer entry t
f8b0: 68 61 74 20 68 61 73 20 63 75 73 74 6f 6d 65 72  hat has customer
f8c0: 2e 63 75 73 74 5f 69 64 20 65 71 75 61 6c 20 74  .cust_id equal t
f8d0: 6f 20 74 68 65 20 24 63 75 73 74 5f 69 64 20 70  o the $cust_id p
f8e0: 61 72 61 6d 65 74 65 72 2e 0a 4e 6f 74 65 20 68  arameter..Note h
f8f0: 6f 77 20 74 68 65 20 76 61 6c 75 65 73 20 61 73  ow the values as
f900: 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 76 69  signed to the vi
f910: 65 77 20 61 72 65 20 6d 61 64 65 20 61 76 61 69  ew are made avai
f920: 6c 61 62 6c 65 20 61 73 20 66 69 65 6c 64 0a 69  lable as field.i
f930: 6e 20 74 68 65 20 73 70 65 63 69 61 6c 20 22 4e  n the special "N
f940: 45 57 22 20 74 61 62 6c 65 20 77 69 74 68 69 6e  EW" table within
f950: 20 74 68 65 20 74 72 69 67 67 65 72 20 62 6f 64   the trigger bod
f960: 79 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  y.</p>..<tcl>hd_
f970: 66 72 61 67 6d 65 6e 74 20 75 6e 64 65 66 5f 62  fragment undef_b
f980: 65 66 6f 72 65 20 7b 75 6e 64 65 66 69 6e 65 64  efore {undefined
f990: 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 20   BEFORE trigger 
f9a0: 62 65 68 61 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a  behavior}</tcl>.
f9b0: 3c 68 33 3e 43 61 75 74 69 6f 6e 73 20 4f 6e 20  <h3>Cautions On 
f9c0: 54 68 65 20 55 73 65 20 4f 66 20 42 45 46 4f 52  The Use Of BEFOR
f9d0: 45 20 74 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a  E triggers</h3>.
f9e0: 0a 3c 70 3e 49 66 20 61 20 42 45 46 4f 52 45 20  .<p>If a BEFORE 
f9f0: 55 50 44 41 54 45 20 6f 72 20 42 45 46 4f 52 45  UPDATE or BEFORE
fa00: 20 44 45 4c 45 54 45 20 74 72 69 67 67 65 72 20   DELETE trigger 
fa10: 6d 6f 64 69 66 69 65 73 20 6f 72 20 64 65 6c 65  modifies or dele
fa20: 74 65 73 20 61 20 72 6f 77 0a 74 68 61 74 20 77  tes a row.that w
fa30: 61 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20  as to have been 
fa40: 75 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74  updated or delet
fa50: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ed, then the res
fa60: 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 73 65  ult of the subse
fa70: 71 75 65 6e 74 0a 75 70 64 61 74 65 20 6f 72 20  quent.update or 
fa80: 64 65 6c 65 74 65 20 6f 70 65 72 61 74 69 6f 6e  delete operation
fa90: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
faa0: 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 69 66 20  Furthermore, if 
fab0: 61 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72  a BEFORE trigger
fac0: 0a 6d 6f 64 69 66 69 65 73 20 6f 72 20 64 65 6c  .modifies or del
fad0: 65 74 65 73 20 61 20 72 6f 77 2c 20 74 68 65 6e  etes a row, then
fae0: 20 69 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64   it is undefined
faf0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
fb00: 41 46 54 45 52 20 74 72 69 67 67 65 72 73 0a 74  AFTER triggers.t
fb10: 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f  hat would have o
fb20: 74 68 65 72 77 69 73 65 20 72 75 6e 20 6f 6e 20  therwise run on 
fb30: 74 68 6f 73 65 20 72 6f 77 73 20 77 69 6c 6c 20  those rows will 
fb40: 69 6e 20 66 61 63 74 20 72 75 6e 2e 0a 3c 2f 70  in fact run..</p
fb50: 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c 75 65 20  >..<p>The value 
fb60: 6f 66 20 4e 45 57 2e 72 6f 77 69 64 20 69 73 20  of NEW.rowid is 
fb70: 75 6e 64 65 66 69 6e 65 64 20 69 6e 20 61 20 42  undefined in a B
fb80: 45 46 4f 52 45 20 49 4e 53 45 52 54 20 74 72 69  EFORE INSERT tri
fb90: 67 67 65 72 20 69 6e 20 77 68 69 63 68 0a 74 68  gger in which.th
fba0: 65 20 72 6f 77 69 64 20 69 73 20 6e 6f 74 20 65  e rowid is not e
fbb0: 78 70 6c 69 63 69 74 6c 79 20 73 65 74 20 74 6f  xplicitly set to
fbc0: 20 61 6e 20 69 6e 74 65 67 65 72 2e 3c 2f 70 3e   an integer.</p>
fbd0: 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20 6f 66 20  ..<p>Because of 
fbe0: 74 68 65 20 62 65 68 61 76 69 6f 72 73 20 64 65  the behaviors de
fbf0: 73 63 72 69 62 65 64 20 61 62 6f 76 65 2c 20 70  scribed above, p
fc00: 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 65  rogrammers are e
fc10: 6e 63 6f 75 72 61 67 65 64 20 74 6f 0a 70 72 65  ncouraged to.pre
fc20: 66 65 72 20 41 46 54 45 52 20 74 72 69 67 67 65  fer AFTER trigge
fc30: 72 73 20 6f 76 65 72 20 42 45 46 4f 52 45 20 74  rs over BEFORE t
fc40: 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 74  riggers.</p>..<t
fc50: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
fc60: 61 69 73 65 20 7b 52 41 49 53 45 20 66 75 6e 63  aise {RAISE func
fc70: 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  tion}</tcl>.<h3>
fc80: 54 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63  The RAISE() func
fc90: 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  tion</h3>..<p>^(
fca0: 41 20 73 70 65 63 69 61 6c 20 53 51 4c 20 66 75  A special SQL fu
fcb0: 6e 63 74 69 6f 6e 20 52 41 49 53 45 28 29 20 6d  nction RAISE() m
fcc0: 61 79 20 62 65 20 75 73 65 64 20 77 69 74 68 69  ay be used withi
fcd0: 6e 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  n a trigger-prog
fce0: 72 61 6d 2c 29 5e 0a 77 69 74 68 20 74 68 65 20  ram,)^.with the 
fcf0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78  following syntax
fd00: 3c 2f 70 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62  </p> ..<tcl>Bubb
fd10: 6c 65 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d  leDiagram raise-
fd20: 66 75 6e 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a  function</tcl>..
fd30: 3c 70 3e 5e 28 57 68 65 6e 20 6f 6e 65 20 6f 66  <p>^(When one of
fd40: 20 52 41 49 53 45 28 52 4f 4c 4c 42 41 43 4b 2c   RAISE(ROLLBACK,
fd50: 2e 2e 2e 29 2c 20 52 41 49 53 45 28 41 42 4f 52  ...), RAISE(ABOR
fd60: 54 2c 2e 2e 2e 29 20 6f 72 20 52 41 49 53 45 28  T,...) or RAISE(
fd70: 46 41 49 4c 2c 2e 2e 2e 29 0a 69 73 20 63 61 6c  FAIL,...).is cal
fd80: 6c 65 64 20 64 75 72 69 6e 67 20 74 72 69 67 67  led during trigg
fd90: 65 72 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63 75  er-program.execu
fda0: 74 69 6f 6e 2c 20 74 68 65 20 73 70 65 63 69 66  tion, the specif
fdb0: 69 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  ied [ON CONFLICT
fdc0: 5d 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  ] processing is 
fdd0: 70 65 72 66 6f 72 6d 65 64 0a 74 68 65 20 63 75  performed.the cu
fde0: 72 72 65 6e 74 20 71 75 65 72 79 20 74 65 72 6d  rrent query term
fdf0: 69 6e 61 74 65 73 2e 29 5e 0a 41 6e 20 65 72 72  inates.)^.An err
fe00: 6f 72 20 63 6f 64 65 20 6f 66 20 5b 53 51 4c 49  or code of [SQLI
fe10: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69  TE_CONSTRAINT] i
fe20: 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  s returned to th
fe30: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2c 0a 61  e application,.a
fe40: 6c 6f 6e 67 20 77 69 74 68 20 74 68 65 20 73 70  long with the sp
fe50: 65 63 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65  ecified error me
fe60: 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ssage.</p>..<p>^
fe70: 57 68 65 6e 20 52 41 49 53 45 28 49 47 4e 4f 52  When RAISE(IGNOR
fe80: 45 29 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68  E) is called, th
fe90: 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74  e remainder of t
fea0: 68 65 20 63 75 72 72 65 6e 74 20 74 72 69 67 67  he current trigg
feb0: 65 72 20 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20  er program,.the 
fec0: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63  statement that c
fed0: 61 75 73 65 64 20 74 68 65 20 74 72 69 67 67 65  aused the trigge
fee0: 72 20 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65  r program to exe
fef0: 63 75 74 65 20 61 6e 64 20 61 6e 79 20 73 75 62  cute and any sub
ff00: 73 65 71 75 65 6e 74 0a 74 72 69 67 67 65 72 20  sequent.trigger 
ff10: 70 72 6f 67 72 61 6d 73 20 74 68 61 74 20 77 6f  programs that wo
ff20: 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 65 78  uld have been ex
ff30: 65 63 75 74 65 64 20 61 72 65 20 61 62 61 6e 64  ecuted are aband
ff40: 6f 6e 65 64 2e 20 5e 4e 6f 20 64 61 74 61 62 61  oned. ^No databa
ff50: 73 65 0a 63 68 61 6e 67 65 73 20 61 72 65 20 72  se.changes are r
ff60: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66  olled back.  ^If
ff70: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
ff80: 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 74  hat caused the t
ff90: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 74  rigger program.t
ffa0: 6f 20 65 78 65 63 75 74 65 20 69 73 20 69 74 73  o execute is its
ffb0: 65 6c 66 20 70 61 72 74 20 6f 66 20 61 20 74 72  elf part of a tr
ffc0: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 20 74  igger program, t
ffd0: 68 65 6e 20 74 68 61 74 20 74 72 69 67 67 65 72  hen that trigger
ffe0: 20 70 72 6f 67 72 61 6d 0a 72 65 73 75 6d 65 73   program.resumes
fff0: 20 65 78 65 63 75 74 69 6f 6e 20 61 74 20 74 68   execution at th
10000 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
10010 68 65 20 6e 65 78 74 20 73 74 65 70 2e 0a 3c 2f  he next step..</
10020 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
10030 6d 65 6e 74 20 74 65 6d 70 74 72 69 67 20 7b 54  ment temptrig {T
10040 45 4d 50 20 74 72 69 67 67 65 72 73 20 6f 6e 20  EMP triggers on 
10050 6e 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65 73 7d  non-TEMP tables}
10060 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 45 4d 50 20  </tcl>.<h3>TEMP 
10070 54 72 69 67 67 65 72 73 20 6f 6e 20 4e 6f 6e 2d  Triggers on Non-
10080 54 45 4d 50 20 54 61 62 6c 65 73 3c 2f 68 33 3e  TEMP Tables</h3>
10090 0a 0a 3c 70 3e 5e 28 41 20 74 72 69 67 67 65 72  ..<p>^(A trigger
100a0 20 6e 6f 72 6d 61 6c 6c 79 20 65 78 69 73 74 73   normally exists
100b0 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74   in the same dat
100c0 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62  abase as the tab
100d0 6c 65 20 6e 61 6d 65 64 0a 61 66 74 65 72 20 74  le named.after t
100e0 68 65 20 22 4f 4e 22 20 6b 65 79 77 6f 72 64 20  he "ON" keyword 
100f0 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 52  in the CREATE TR
10100 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e  IGGER statement.
10110 20 20 45 78 63 65 70 74 2c 20 69 74 20 69 73 0a    Except, it is.
10120 70 6f 73 73 69 62 6c 65 20 74 6f 20 63 72 65 61  possible to crea
10130 74 65 20 61 20 54 45 4d 50 20 54 52 49 47 47 45  te a TEMP TRIGGE
10140 52 20 6f 6e 20 61 20 74 61 62 6c 65 20 69 6e 20  R on a table in 
10150 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  another database
10160 2e 29 5e 20 20 0a 53 75 63 68 20 61 20 74 72 69  .)^  .Such a tri
10170 67 67 65 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 66  gger will only f
10180 69 72 65 20 77 68 65 6e 20 63 68 61 6e 67 65 73  ire when changes
10190 0a 61 72 65 20 6d 61 64 65 20 74 6f 20 74 68 65  .are made to the
101a0 20 74 61 72 67 65 74 20 74 61 62 6c 65 20 62 79   target table by
101b0 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e   the application
101c0 20 74 68 61 74 20 64 65 66 69 6e 65 64 20 74 68   that defined th
101d0 65 20 74 72 69 67 67 65 72 2e 0a 4f 74 68 65 72  e trigger..Other
101e0 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68   applications th
101f0 61 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61  at modify the da
10200 74 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 20  tabase will not 
10210 62 65 20 61 62 6c 65 20 74 6f 20 73 65 65 20 74  be able to see t
10220 68 65 0a 54 45 4d 50 20 74 72 69 67 67 65 72 20  he.TEMP trigger 
10230 61 6e 64 20 68 65 6e 63 65 20 63 61 6e 6e 6f 74  and hence cannot
10240 20 72 75 6e 20 74 68 65 20 74 72 69 67 67 65 72   run the trigger
10250 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 64  .</p>..<p>When d
10260 65 66 69 6e 69 6e 67 20 61 20 54 45 4d 50 20 74  efining a TEMP t
10270 72 69 67 67 65 72 20 6f 6e 20 61 20 6e 6f 6e 2d  rigger on a non-
10280 54 45 4d 50 20 74 61 62 6c 65 2c 20 69 74 20 69  TEMP table, it i
10290 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 73  s important to.s
102a0 70 65 63 69 66 79 20 74 68 65 20 64 61 74 61 62  pecify the datab
102b0 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ase holding the 
102c0 6e 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65 2e 20  non-TEMP table. 
102d0 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 69 6e   For example,.in
102e0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
102f0 74 61 74 65 6d 65 6e 74 2c 20 69 74 20 69 73 20  tatement, it is 
10300 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 61 79  important to say
10310 20 22 6d 61 69 6e 2e 74 61 62 31 22 20 69 6e 73   "main.tab1" ins
10320 74 65 61 64 0a 6f 66 20 6a 75 73 74 20 22 74 61  tead.of just "ta
10330 62 31 22 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  b1":</p>..<block
10340 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
10350 54 45 20 54 45 4d 50 20 54 52 49 47 47 45 52 20  TE TEMP TRIGGER 
10360 65 78 31 20 41 46 54 45 52 20 49 4e 53 45 52 54  ex1 AFTER INSERT
10370 20 4f 4e 20 3c 62 3e 6d 61 69 6e 2e 3c 2f 62 3e   ON <b>main.</b>
10380 74 61 62 31 20 42 45 47 49 4e 20 2e 2e 2e 0a 3c  tab1 BEGIN ....<
10390 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
103a0 65 3e 0a 0a 3c 70 3e 46 61 69 6c 75 72 65 20 74  e>..<p>Failure t
103b0 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 73 63  o specify the sc
103c0 68 65 6d 61 20 6e 61 6d 65 20 6f 6e 20 74 68 65  hema name on the
103d0 20 74 61 72 67 65 74 20 74 61 62 6c 65 20 63 6f   target table co
103e0 75 6c 64 20 72 65 73 75 6c 74 0a 69 6e 20 74 68  uld result.in th
103f0 65 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 62  e TEMP trigger b
10400 65 69 6e 67 20 72 65 61 74 74 61 63 68 65 64 20  eing reattached 
10410 74 6f 20 61 20 74 61 62 6c 65 20 77 69 74 68 20  to a table with 
10420 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 69 6e  the same name in
10430 0a 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73  .another databas
10440 65 20 77 68 65 6e 65 76 65 72 20 61 6e 79 20 73  e whenever any s
10450 63 68 65 6d 61 20 63 68 61 6e 67 65 20 6f 63 63  chema change occ
10460 75 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  urs.</p>..<tcl>.
10470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
104a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
104b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
104c0 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
104d0 56 49 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65  VIEW} {createvie
104e0 77 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57  w} {{CREATE VIEW
104f0 7d 20 76 69 65 77 20 56 49 45 57 20 2a 76 69 65  } view VIEW *vie
10500 77 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  ws}..RecursiveBu
10510 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
10520 74 65 2d 76 69 65 77 2d 73 74 6d 74 0a 3c 2f 74  te-view-stmt.</t
10530 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45  cl>..<p>^The CRE
10540 41 54 45 20 56 49 45 57 20 63 6f 6d 6d 61 6e 64  ATE VIEW command
10550 20 61 73 73 69 67 6e 73 20 61 20 6e 61 6d 65 20   assigns a name 
10560 74 6f 20 61 20 70 72 65 2d 70 61 63 6b 61 67 65  to a pre-package
10570 64 20 0a 5b 53 45 4c 45 43 54 5d 20 73 74 61 74  d .[SELECT] stat
10580 65 6d 65 6e 74 2e 20 0a 5e 4f 6e 63 65 20 74 68  ement. .^Once th
10590 65 20 76 69 65 77 20 69 73 20 63 72 65 61 74 65  e view is create
105a0 64 2c 20 69 74 20 63 61 6e 20 62 65 20 75 73 65  d, it can be use
105b0 64 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  d in the FROM cl
105c0 61 75 73 65 0a 6f 66 20 61 6e 6f 74 68 65 72 20  ause.of another 
105d0 5b 53 45 4c 45 43 54 5d 20 69 6e 20 70 6c 61 63  [SELECT] in plac
105e0 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d  e of a table nam
105f0 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  e..</p>..<p>^If 
10600 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54  the "TEMP" or "T
10610 45 4d 50 4f 52 41 52 59 22 20 6b 65 79 77 6f 72  EMPORARY" keywor
10620 64 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77  d occurs in betw
10630 65 65 6e 20 22 43 52 45 41 54 45 22 0a 61 6e 64  een "CREATE".and
10640 20 22 56 49 45 57 22 20 74 68 65 6e 20 74 68 65   "VIEW" then the
10650 20 76 69 65 77 20 74 68 61 74 20 69 73 20 63 72   view that is cr
10660 65 61 74 65 64 20 69 73 20 6f 6e 6c 79 20 76 69  eated is only vi
10670 73 69 62 6c 65 20 74 6f 20 74 68 65 0a 5b 64 61  sible to the.[da
10680 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
10690 6e 5d 20 74 68 61 74 20 63 72 65 61 74 65 64 20  n] that created 
106a0 69 74 20 61 6e 64 20 69 73 20 61 75 74 6f 6d 61  it and is automa
106b0 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 20  tically deleted 
106c0 77 68 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73  when.the databas
106d0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
106e0 63 6c 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  closed.</p>..<p>
106f0 20 5e 49 66 20 61 20 3c 79 79 74 65 72 6d 3e 73   ^If a <yyterm>s
10700 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65  chema-name</yyte
10710 72 6d 3e 20 69 73 20 73 70 65 63 69 66 69 65 64  rm> is specified
10720 2c 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20  , then the view 
10730 0a 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74  .is created in t
10740 68 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74  he specified dat
10750 61 62 61 73 65 2e 0a 5e 49 74 20 69 73 20 61 6e  abase..^It is an
10760 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66   error to specif
10770 79 20 62 6f 74 68 20 61 20 3c 79 79 74 65 72 6d  y both a <yyterm
10780 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79  >schema-name</yy
10790 74 65 72 6d 3e 0a 61 6e 64 20 74 68 65 20 54 45  term>.and the TE
107a0 4d 50 20 6b 65 79 77 6f 72 64 20 6f 6e 20 61 20  MP keyword on a 
107b0 56 49 45 57 2c 20 75 6e 6c 65 73 73 20 74 68 65  VIEW, unless the
107c0 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d   <yyterm>schema-
107d0 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 0a 69  name</yyterm> .i
107e0 73 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f  s "temp"..^If no
107f0 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20   schema name is 
10800 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64 20 74  specified, and t
10810 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20  he TEMP keyword 
10820 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 0a  is not present,.
10830 74 68 65 20 56 49 45 57 20 69 73 20 63 72 65 61  the VIEW is crea
10840 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ted in the main 
10850 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c  database.</p>..<
10860 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74 20 5b 44  p>^You cannot [D
10870 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d  ELETE], [INSERT]
10880 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 20  , or [UPDATE] a 
10890 76 69 65 77 2e 20 20 5e 56 69 65 77 73 20 61 72  view.  ^Views ar
108a0 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e 20  e read-only .in 
108b0 53 51 4c 69 74 65 2e 20 20 5e 48 6f 77 65 76 65  SQLite.  ^Howeve
108c0 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73 65 73  r, in many cases
108d0 20 79 6f 75 20 63 61 6e 20 75 73 65 20 61 6e 0a   you can use an.
108e0 5b 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67  [INSTEAD OF trig
108f0 67 65 72 5d 20 6f 6e 20 74 68 65 20 76 69 65 77  ger] on the view
10900 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20 0a   to accomplish .
10910 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20  the same thing. 
10920 20 5e 56 69 65 77 73 20 61 72 65 20 72 65 6d 6f   ^Views are remo
10930 76 65 64 20 0a 77 69 74 68 20 74 68 65 20 5b 44  ved .with the [D
10940 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d 6d 61 6e  ROP VIEW] comman
10950 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61  d.</p>..<p>^If a
10960 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d   <yyterm>column-
10970 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69  name</yyterm> li
10980 73 74 20 66 6f 6c 6c 6f 77 73 20 0a 74 68 65 20  st follows .the 
10990 3c 79 79 74 65 72 6d 3e 76 69 65 77 2d 6e 61 6d  <yyterm>view-nam
109a0 65 3c 2f 79 79 74 65 72 6d 3e 2c 20 74 68 65 6e  e</yyterm>, then
109b0 20 74 68 61 74 20 6c 69 73 74 20 64 65 74 65 72   that list deter
109c0 6d 69 6e 65 73 0a 74 68 65 20 6e 61 6d 65 73 20  mines.the names 
109d0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 66  of the columns f
109e0 6f 72 20 74 68 65 20 76 69 65 77 2e 20 20 5e 49  or the view.  ^I
109f0 66 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 63 6f  f the <yyterm>co
10a00 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  lumn-name</yyter
10a10 6d 3e 0a 6c 69 73 74 20 69 73 20 6f 6d 69 74 74  m>.list is omitt
10a20 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 61 6d  ed, then the nam
10a30 65 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  es of the column
10a40 73 20 69 6e 20 74 68 65 20 76 69 65 77 20 61 72  s in the view ar
10a50 65 20 64 65 72 69 76 65 64 0a 66 72 6f 6d 20 74  e derived.from t
10a60 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the 
10a70 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
10a80 6e 73 20 69 6e 20 74 68 65 20 5b 73 65 6c 65 63  ns in the [selec
10a90 74 2d 73 74 6d 74 5d 2e 0a 54 68 65 20 75 73 65  t-stmt]..The use
10aa0 20 6f 66 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75   of <yyterm>colu
10ab0 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  mn-name</yyterm>
10ac0 20 6c 69 73 74 20 69 73 20 72 65 63 6f 6d 6d 65   list is recomme
10ad0 6e 64 65 64 2e 20 20 4f 72 2c 20 69 66 0a 3c 79  nded.  Or, if.<y
10ae0 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  yterm>column-nam
10af0 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74 20  e</yyterm> list 
10b00 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 68 65 6e  is omitted, then
10b10 20 74 68 65 20 72 65 73 75 6c 74 0a 63 6f 6c 75   the result.colu
10b20 6d 6e 73 20 69 6e 20 74 68 65 20 5b 53 45 4c 45  mns in the [SELE
10b30 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 68  CT] statement th
10b40 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 76  at defines the v
10b50 69 65 77 20 73 68 6f 75 6c 64 20 68 61 76 65 0a  iew should have.
10b60 77 65 6c 6c 2d 64 65 66 69 6e 65 64 20 6e 61 6d  well-defined nam
10b70 65 73 20 75 73 69 6e 67 20 74 68 65 20 0a 22 5b  es using the ."[
10b80 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 7c 41 53  result-column|AS
10b90 20 63 6f 6c 75 6d 6e 2d 61 6c 69 61 73 5d 22 20   column-alias]" 
10ba0 73 79 6e 74 61 78 2e 0a 53 51 4c 69 74 65 20 61  syntax..SQLite a
10bb0 6c 6c 6f 77 73 20 79 6f 75 20 74 6f 20 63 72 65  llows you to cre
10bc0 61 74 65 20 76 69 65 77 73 20 74 68 61 74 20 64  ate views that d
10bd0 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f 6d 61 74  epend on automat
10be0 69 63 61 6c 6c 79 20 0a 67 65 6e 65 72 61 74 65  ically .generate
10bf0 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20  d column names, 
10c00 62 75 74 20 79 6f 75 20 73 68 6f 75 6c 64 20 61  but you should a
10c10 76 6f 69 64 20 75 73 69 6e 67 20 74 68 65 6d 20  void using them 
10c20 73 69 6e 63 65 20 74 68 65 20 0a 72 75 6c 65 73  since the .rules
10c30 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
10c40 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  e column names a
10c50 72 65 20 6e 6f 74 20 61 20 64 65 66 69 6e 65 64  re not a defined
10c60 20 70 61 72 74 20 6f 66 20 74 68 65 0a 69 6e 74   part of the.int
10c70 65 72 66 61 63 65 20 61 6e 64 20 6d 69 67 68 74  erface and might
10c80 20 63 68 61 6e 67 65 20 69 6e 20 66 75 74 75 72   change in futur
10c90 65 20 72 65 6c 65 61 73 65 73 20 6f 66 20 53 51  e releases of SQ
10ca0 4c 69 74 65 2e 0a 0a 3c 70 3e 54 68 65 20 3c 79  Lite...<p>The <y
10cb0 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  yterm>column-nam
10cc0 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74 20  e</yyterm> list 
10cd0 73 79 6e 74 61 78 20 77 61 73 20 61 64 64 65 64  syntax was added
10ce0 20 69 6e 0a 53 51 4c 69 74 65 20 76 65 72 73 69   in.SQLite versi
10cf0 6f 6e 73 20 33 2e 39 2e 30 20 28 5b 64 61 74 65  ons 3.9.0 ([date
10d00 6f 66 3a 33 2e 39 2e 30 5d 29 2e 0a 0a 3c 74 63  of:3.9.0])...<tc
10d10 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
10d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d60 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54  #.Section {CREAT
10d70 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d  E VIRTUAL TABLE}
10d80 20 7b 63 72 65 61 74 65 76 74 61 62 7d 20 7b 7b   {createvtab} {{
10d90 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
10da0 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76  ABLE}}..Recursiv
10db0 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  eBubbleDiagram c
10dc0 72 65 61 74 65 2d 76 69 72 74 75 61 6c 2d 74 61  reate-virtual-ta
10dd0 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ble-stmt.</tcl>.
10de0 0a 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c 20 74  .<p>A [virtual t
10df0 61 62 6c 65 5d 20 69 73 20 61 6e 20 69 6e 74 65  able] is an inte
10e00 72 66 61 63 65 20 74 6f 20 61 6e 20 65 78 74 65  rface to an exte
10e10 72 6e 61 6c 20 73 74 6f 72 61 67 65 20 6f 72 20  rnal storage or 
10e20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69  computation.engi
10e30 6e 65 20 74 68 61 74 20 61 70 70 65 61 72 73 20  ne that appears 
10e40 74 6f 20 62 65 20 61 20 74 61 62 6c 65 20 62 75  to be a table bu
10e50 74 20 64 6f 65 73 20 6e 6f 74 20 61 63 74 75 61  t does not actua
10e60 6c 6c 79 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d  lly store inform
10e70 61 74 69 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74  ation.in the dat
10e80 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  abase file.</p>.
10e90 0a 3c 70 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20  .<p>In general, 
10ea0 79 6f 75 20 63 61 6e 20 64 6f 20 61 6e 79 74 68  you can do anyth
10eb0 69 6e 67 20 77 69 74 68 20 61 20 5b 76 69 72 74  ing with a [virt
10ec0 75 61 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20  ual table] that 
10ed0 63 61 6e 20 62 65 20 64 6f 6e 65 0a 77 69 74 68  can be done.with
10ee0 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
10ef0 6c 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  le, except that 
10f00 5e 79 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65 61  ^you cannot crea
10f10 74 65 20 69 6e 64 69 63 65 73 20 6f 72 20 74 72  te indices or tr
10f20 69 67 67 65 72 73 20 6f 6e 20 61 0a 76 69 72 74  iggers on a.virt
10f30 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d  ual table.  ^Som
10f40 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
10f50 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
10f60 6d 69 67 68 74 20 69 6d 70 6f 73 65 20 61 64 64  might impose add
10f70 69 74 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74  itional.restrict
10f80 69 6f 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d 70  ions.  For examp
10f90 6c 65 2c 20 6d 61 6e 79 20 76 69 72 74 75 61 6c  le, many virtual
10fa0 20 74 61 62 6c 65 73 20 61 72 65 20 72 65 61 64   tables are read
10fb0 2d 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  -only.</p>..<p>T
10fc0 68 65 20 3c 79 79 74 65 72 6d 3e 6d 6f 64 75 6c  he <yyterm>modul
10fd0 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  e-name</yyterm> 
10fe0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
10ff0 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69 6d  n object that im
11000 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20 76 69 72  plements.the vir
11010 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 54 68  tual table.  ^Th
11020 65 20 3c 79 79 74 65 72 6d 3e 6d 6f 64 75 6c 65  e <yyterm>module
11030 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6d  -name</yyterm> m
11040 75 73 74 20 62 65 20 72 65 67 69 73 74 65 72 65  ust be registere
11050 64 20 77 69 74 68 0a 74 68 65 20 53 51 4c 69 74  d with.the SQLit
11060 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
11070 63 74 69 6f 6e 20 75 73 69 6e 67 0a 5b 73 71 6c  ction using.[sql
11080 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
11090 6c 65 28 29 5d 20 6f 72 20 5b 73 71 6c 69 74 65  le()] or [sqlite
110a0 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f  3_create_module_
110b0 76 32 28 29 5d 0a 70 72 69 6f 72 20 74 6f 20 69  v2()].prior to i
110c0 73 73 75 69 6e 67 20 74 68 65 20 43 52 45 41 54  ssuing the CREAT
110d0 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
110e0 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20  statement..^The 
110f0 6d 6f 64 75 6c 65 20 74 61 6b 65 73 20 7a 65 72  module takes zer
11100 6f 20 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d  o or more comma-
11110 73 65 70 61 72 61 74 65 64 20 61 72 67 75 6d 65  separated argume
11120 6e 74 73 2e 0a 5e 54 68 65 20 61 72 67 75 6d 65  nts..^The argume
11130 6e 74 73 20 63 61 6e 20 62 65 20 6a 75 73 74 20  nts can be just 
11140 61 62 6f 75 74 20 61 6e 79 20 74 65 78 74 20 61  about any text a
11150 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 68 61 73  s long as it has
11160 20 62 61 6c 61 6e 63 65 64 0a 70 61 72 65 6e 74   balanced.parent
11170 68 65 73 65 73 2e 20 20 54 68 65 20 61 72 67 75  heses.  The argu
11180 6d 65 6e 74 20 73 79 6e 74 61 78 20 69 73 20 73  ment syntax is s
11190 75 66 66 69 63 69 65 6e 74 6c 79 20 67 65 6e 65  ufficiently gene
111a0 72 61 6c 20 74 68 61 74 20 74 68 65 0a 61 72 67  ral that the.arg
111b0 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6d 61  uments can be ma
111c0 64 65 20 74 6f 20 61 70 70 65 61 72 20 61 73 20  de to appear as 
111d0 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69  [column definiti
111e0 6f 6e 73 5d 20 69 6e 20 61 20 74 72 61 64 69 74  ons] in a tradit
111f0 69 6f 6e 61 6c 0a 5b 43 52 45 41 54 45 20 54 41  ional.[CREATE TA
11200 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
11210 20 0a 5e 53 51 4c 69 74 65 20 70 61 73 73 65 73   .^SQLite passes
11220 20 74 68 65 20 6d 6f 64 75 6c 65 20 61 72 67 75   the module argu
11230 6d 65 6e 74 73 20 64 69 72 65 63 74 6c 79 0a 74  ments directly.t
11240 6f 20 74 68 65 20 5b 78 43 72 65 61 74 65 5d 20  o the [xCreate] 
11250 61 6e 64 20 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d  and [xConnect] m
11260 65 74 68 6f 64 73 20 6f 66 20 74 68 65 20 6d 6f  ethods of the mo
11270 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
11280 69 6f 6e 0a 77 69 74 68 6f 75 74 20 61 6e 79 20  ion.without any 
11290 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 2e 20  interpretation. 
112a0 20 49 74 20 69 73 20 74 68 65 20 72 65 73 70 6f   It is the respo
112b0 6e 73 69 62 69 6c 69 74 79 0a 6f 66 20 74 68 65  nsibility.of the
112c0 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
112d0 74 61 74 69 6f 6e 20 74 6f 20 70 61 72 73 65 20  tation to parse 
112e0 61 6e 64 20 69 6e 74 65 72 70 72 65 74 20 69 74  and interpret it
112f0 73 20 6f 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e  s own arguments.
11300 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 76 69 72 74  </p>..<p>^A virt
11310 75 61 6c 20 74 61 62 6c 65 20 69 73 20 64 65 73  ual table is des
11320 74 72 6f 79 65 64 20 75 73 69 6e 67 20 74 68 65  troyed using the
11330 20 6f 72 64 69 6e 61 72 79 0a 5b 44 52 4f 50 20   ordinary.[DROP 
11340 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
11350 2e 20 20 54 68 65 72 65 20 69 73 20 6e 6f 0a 44  .  There is no.D
11360 52 4f 50 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ROP VIRTUAL TABL
11370 45 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e  E statement.</p>
11380 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
11390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113d0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 44  ######.Section D
113e0 45 4c 45 54 45 20 64 65 6c 65 74 65 20 7b 44 45  ELETE delete {DE
113f0 4c 45 54 45 20 2a 44 45 4c 45 54 45 73 7d 0a 0a  LETE *DELETEs}..
11400 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
11410 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74  iagram delete-st
11420 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  mt.</tcl>..<p>Th
11430 65 20 44 45 4c 45 54 45 20 63 6f 6d 6d 61 6e 64  e DELETE command
11440 20 72 65 6d 6f 76 65 73 20 72 65 63 6f 72 64 73   removes records
11450 20 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20   from the table 
11460 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68  identified by th
11470 65 0a 20 20 20 5b 71 75 61 6c 69 66 69 65 64 2d  e.   [qualified-
11480 74 61 62 6c 65 2d 6e 61 6d 65 5d 2e 0a 0a 3c 70  table-name]...<p
11490 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45 20 63  >^If the WHERE c
114a0 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70 72 65  lause is not pre
114b0 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f 72 64  sent, all record
114c0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 61  s in the table a
114d0 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e  re deleted..   ^
114e0 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  If a WHERE claus
114f0 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74  e is supplied, t
11500 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72  hen only those r
11510 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
11520 65 0a 20 20 20 57 48 45 52 45 20 63 6c 61 75 73  e.   WHERE claus
11530 65 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  e [boolean expre
11540 73 73 69 6f 6e 5d 20 69 73 20 74 72 75 65 20 61  ssion] is true a
11550 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e  re deleted..   ^
11560 52 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  Rows for which t
11570 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
11580 20 66 61 6c 73 65 20 6f 72 20 4e 55 4c 4c 20 61   false or NULL a
11590 72 65 20 72 65 74 61 69 6e 65 64 2e 0a 0a 3c 68  re retained...<h
115a0 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f  3>Restrictions o
115b0 6e 20 44 45 4c 45 54 45 20 53 74 61 74 65 6d 65  n DELETE Stateme
115c0 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45 41 54  nts Within CREAT
115d0 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a  E TRIGGER</h3>..
115e0 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  <p>The following
115f0 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70   restrictions ap
11600 70 6c 79 20 74 6f 20 44 45 4c 45 54 45 20 73 74  ply to DELETE st
11610 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63  atements that oc
11620 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 0a 20  cur within the. 
11630 20 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45    body of a [CRE
11640 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61  ATE TRIGGER] sta
11650 74 65 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20 20  tement:..<ul>.  
11660 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 79 79 74  <li><p>^The <yyt
11670 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  erm>table-name</
11680 79 79 74 65 72 6d 3e 20 73 70 65 63 69 66 69 65  yyterm> specifie
11690 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 20 0a  d as part of a .
116a0 20 20 20 20 44 45 4c 45 54 45 20 73 74 61 74 65      DELETE state
116b0 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20 20  ment within.    
116c0 61 20 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d  a trigger body m
116d0 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69  ust be unqualifi
116e0 65 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65 72 20  ed.  ^(In other 
116f0 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20 20 3c  words, the.    <
11700 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69  i>schema-name</i
11710 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78  ><b>.</b> prefix
11720 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61   on the table na
11730 6d 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  me is not allowe
11740 64 20 0a 20 20 20 20 77 69 74 68 69 6e 20 74 72  d .    within tr
11750 69 67 67 65 72 73 2e 29 5e 20 5e 49 66 20 74 68  iggers.)^ ^If th
11760 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68  e table to which
11770 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20   the trigger is 
11780 61 74 74 61 63 68 65 64 20 69 73 0a 20 20 20 20  attached is.    
11790 6e 6f 74 20 69 6e 20 74 68 65 20 74 65 6d 70 20  not in the temp 
117a0 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 44  database, then D
117b0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73  ELETE statements
117c0 20 77 69 74 68 69 6e 20 74 68 65 20 74 72 69 67   within the trig
117d0 67 65 72 0a 20 20 20 20 62 6f 64 79 20 6d 75 73  ger.    body mus
117e0 74 20 6f 70 65 72 61 74 65 20 6f 6e 20 74 61 62  t operate on tab
117f0 6c 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  les within the s
11800 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20  ame database as 
11810 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62 6c  it. ^If the tabl
11820 65 0a 20 20 20 20 74 6f 20 77 68 69 63 68 20 74  e.    to which t
11830 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74  he trigger is at
11840 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68 65  tached is in the
11850 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20   TEMP database, 
11860 74 68 65 6e 20 74 68 65 0a 20 20 20 20 75 6e 71  then the.    unq
11870 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f 66  ualified name of
11880 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
11890 20 64 65 6c 65 74 65 64 20 69 73 20 72 65 73 6f   deleted is reso
118a0 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  lved in the same
118b0 20 77 61 79 20 61 73 0a 20 20 20 20 69 74 20 69   way as.    it i
118c0 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76 65  s for a top-leve
118d0 6c 20 73 74 61 74 65 6d 65 6e 74 20 28 62 79 20  l statement (by 
118e0 73 65 61 72 63 68 69 6e 67 20 66 69 72 73 74 20  searching first 
118f0 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
11900 65 2c 20 74 68 65 6e 0a 20 20 20 20 74 68 65 20  e, then.    the 
11910 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74  main database, t
11920 68 65 6e 20 61 6e 79 20 6f 74 68 65 72 20 64 61  hen any other da
11930 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 20 6f  tabases in the o
11940 72 64 65 72 20 74 68 65 79 20 77 65 72 65 0a 20  rder they were. 
11950 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a 20 20     attached)..  
11960 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65    .  <li><p>^The
11970 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20   INDEXED BY and 
11980 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
11990 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f  ses are not allo
119a0 77 65 64 20 6f 6e 20 44 45 4c 45 54 45 0a 20 20  wed on DELETE.  
119b0 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74    statements wit
119c0 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70  hin triggers.</p
119d0 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65  >..  <li><p>^The
119e0 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52   LIMIT and ORDER
119f0 20 42 59 20 63 6c 61 75 73 65 73 20 28 64 65 73   BY clauses (des
11a00 63 72 69 62 65 64 20 62 65 6c 6f 77 29 20 61 72  cribed below) ar
11a10 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20 66 6f  e unsupported fo
11a20 72 0a 20 20 20 20 44 45 4c 45 54 45 20 73 74 61  r.    DELETE sta
11a30 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
11a40 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 3c 2f 75  riggers.</p>.</u
11a50 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c  l>..<h3>Optional
11a60 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52   LIMIT and ORDER
11a70 20 42 59 20 63 6c 61 75 73 65 73 3c 2f 68 33 3e   BY clauses</h3>
11a80 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74 65  ..<p>^(If SQLite
11a90 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
11aa0 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  h the [SQLITE_EN
11ab0 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
11ac0 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c  TE_LIMIT].compil
11ad0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74  e-time option, t
11ae0 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f  hen the syntax o
11af0 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
11b00 74 65 6d 65 6e 74 20 69 73 0a 65 78 74 65 6e 64  tement is.extend
11b10 65 64 20 62 79 20 74 68 65 20 61 64 64 69 74 69  ed by the additi
11b20 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20 4f  on of optional O
11b30 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49  RDER BY and LIMI
11b40 54 20 63 6c 61 75 73 65 73 3a 29 5e 3c 2f 70 3e  T clauses:)^</p>
11b50 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61  ..<tcl>BubbleDia
11b60 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74  gram delete-stmt
11b70 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a  -limited</tcl>..
11b80 3c 70 3e 5e 49 66 20 61 20 44 45 4c 45 54 45 20  <p>^If a DELETE 
11b90 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20  statement has a 
11ba0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
11bb0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
11bc0 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69   of rows that.wi
11bd0 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 69 73  ll be deleted is
11be0 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61   found by evalua
11bf0 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61  ting the accompa
11c00 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nying expression
11c10 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20   and casting.it 
11c20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  to an integer va
11c30 6c 75 65 2e 20 5e 49 66 20 74 68 65 20 72 65 73  lue. ^If the res
11c40 75 6c 74 20 6f 66 20 74 68 65 20 65 76 61 6c 75  ult of the evalu
11c50 61 74 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20  ating the LIMIT 
11c60 63 6c 61 75 73 65 0a 63 61 6e 6e 6f 74 20 62 65  clause.cannot be
11c70 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76   losslessly conv
11c80 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
11c90 67 65 72 20 76 61 6c 75 65 2c 20 69 74 20 69 73  ger value, it is
11ca0 20 61 6e 20 65 72 72 6f 72 2e 20 5e 41 20 0a 6e   an error. ^A .n
11cb0 65 67 61 74 69 76 65 20 4c 49 4d 49 54 20 76 61  egative LIMIT va
11cc0 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72 65 74  lue is interpret
11cd0 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22  ed as "no limit"
11ce0 2e 20 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54  . ^(If the DELET
11cf0 45 20 73 74 61 74 65 6d 65 6e 74 20 0a 61 6c 73  E statement .als
11d00 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20  o has an OFFSET 
11d10 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 69 74 20  clause, then it 
11d20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65 76 61  is similarly eva
11d30 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73 74 20  luated and cast 
11d40 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 76 61  to an.integer va
11d50 6c 75 65 2e 20 41 67 61 69 6e 2c 20 69 74 20 69  lue. Again, it i
11d60 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
11d70 65 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62  e value cannot b
11d80 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f 6e  e losslessly.con
11d90 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
11da0 65 67 65 72 2e 29 5e 20 5e 49 66 20 74 68 65 72  eger.)^ ^If ther
11db0 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 20 63  e is no OFFSET c
11dc0 6c 61 75 73 65 2c 20 6f 72 20 74 68 65 20 63 61  lause, or the ca
11dd0 6c 63 75 6c 61 74 65 64 0a 69 6e 74 65 67 65 72  lculated.integer
11de0 20 76 61 6c 75 65 20 69 73 20 6e 65 67 61 74 69   value is negati
11df0 76 65 2c 20 74 68 65 20 65 66 66 65 63 74 69 76  ve, the effectiv
11e00 65 20 4f 46 46 53 45 54 20 76 61 6c 75 65 20 69  e OFFSET value i
11e10 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 28 49 66  s zero...<p>^(If
11e20 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
11e30 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44  ement has an ORD
11e40 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68  ER BY clause, th
11e50 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74  en all rows that
11e60 20 77 6f 75 6c 64 20 0a 62 65 20 64 65 6c 65 74   would .be delet
11e70 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63  ed in the absenc
11e80 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  e of the LIMIT c
11e90 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74 65 64  lause are sorted
11ea0 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
11eb0 65 20 0a 4f 52 44 45 52 20 42 59 2e 20 54 68 65  e .ORDER BY. The
11ec0 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e 20   first <i>M</i> 
11ed0 72 6f 77 73 2c 20 77 68 65 72 65 20 3c 69 3e 4d  rows, where <i>M
11ee0 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c 75  </i> is the valu
11ef0 65 20 66 6f 75 6e 64 20 62 79 0a 65 76 61 6c 75  e found by.evalu
11f00 61 74 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54  ating the OFFSET
11f10 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
11f20 6f 6e 2c 20 61 72 65 20 73 6b 69 70 70 65 64 2c  on, are skipped,
11f30 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69   and the followi
11f40 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e 2c 20 77 68  ng .<i>N</i>, wh
11f50 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e 20 69 73 20  ere <i>N</i> is 
11f60 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
11f70 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
11f80 6e 2c 20 61 72 65 20 64 65 6c 65 74 65 64 2e 29  n, are deleted.)
11f90 5e 0a 5e 49 66 20 74 68 65 72 65 20 61 72 65 20  ^.^If there are 
11fa0 6c 65 73 73 20 74 68 61 6e 20 3c 69 3e 4e 3c 2f  less than <i>N</
11fb0 69 3e 20 72 6f 77 73 20 72 65 6d 61 69 6e 69 6e  i> rows remainin
11fc0 67 20 61 66 74 65 72 20 74 61 6b 69 6e 67 20 74  g after taking t
11fd0 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he OFFSET clause
11fe0 0a 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2c 20 6f  .into account, o
11ff0 72 20 69 66 20 74 68 65 20 4c 49 4d 49 54 20 63  r if the LIMIT c
12000 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65 64 20  lause evaluated 
12010 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76 61  to a negative va
12020 6c 75 65 2c 20 74 68 65 6e 20 61 6c 6c 0a 72 65  lue, then all.re
12030 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 61 72 65  maining rows are
12040 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e 49   deleted...<p>^I
12050 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
12060 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52  tement has no OR
12070 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
12080 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61  hen all rows tha
12090 74 0a 77 6f 75 6c 64 20 62 65 20 64 65 6c 65 74  t.would be delet
120a0 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63  ed in the absenc
120b0 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  e of the LIMIT c
120c0 6c 61 75 73 65 20 61 72 65 20 61 73 73 65 6d 62  lause are assemb
120d0 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74 72  led in an.arbitr
120e0 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72 65  ary order before
120f0 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c 49   applying the LI
12100 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 63  MIT and OFFSET c
12110 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65 72 6d  lauses to determ
12120 69 6e 65 20 0a 74 68 65 20 73 75 62 73 65 74 20  ine .the subset 
12130 74 68 61 74 20 61 72 65 20 61 63 74 75 61 6c 6c  that are actuall
12140 79 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e  y deleted...<p>^
12150 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c  (The ORDER BY cl
12160 61 75 73 65 20 6f 6e 20 61 20 44 45 4c 45 54 45  ause on a DELETE
12170 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
12180 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72  ed only to deter
12190 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f 77 73 20  mine which.rows 
121a0 66 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20  fall within the 
121b0 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72 64 65 72  LIMIT. The order
121c0 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61   in which rows a
121d0 72 65 20 64 65 6c 65 74 65 64 20 69 73 20 61 72  re deleted is ar
121e0 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e  bitrary.and is n
121f0 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64 20 62 79  ot influenced by
12200 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
12210 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  ause.)^..<tcl>hd
12220 5f 66 72 61 67 6d 65 6e 74 20 74 72 75 6e 63 61  _fragment trunca
12230 74 65 6f 70 74 20 7b 74 72 75 6e 63 61 74 65 20  teopt {truncate 
12240 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 7d 3c 2f 74  optimization}</t
12250 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 54 72 75 6e  cl>.<h3>The Trun
12260 63 61 74 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  cate Optimizatio
12270 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  n</h3>..<p>^When
12280 20 74 68 65 20 57 48 45 52 45 20 69 73 20 6f 6d   the WHERE is om
12290 69 74 74 65 64 20 66 72 6f 6d 20 61 20 44 45 4c  itted from a DEL
122a0 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  ETE statement an
122b0 64 20 74 68 65 20 74 61 62 6c 65 0a 62 65 69 6e  d the table.bein
122c0 67 20 64 65 6c 65 74 65 64 20 68 61 73 20 6e 6f  g deleted has no
122d0 20 74 72 69 67 67 65 72 73 2c 0a 53 51 4c 69 74   triggers,.SQLit
122e0 65 20 75 73 65 73 20 61 6e 20 6f 70 74 69 6d 69  e uses an optimi
122f0 7a 61 74 69 6f 6e 20 74 6f 20 65 72 61 73 65 20  zation to erase 
12300 74 68 65 20 65 6e 74 69 72 65 20 74 61 62 6c 65  the entire table
12310 20 63 6f 6e 74 65 6e 74 0a 77 69 74 68 6f 75 74   content.without
12320 20 68 61 76 69 6e 67 20 74 6f 20 76 69 73 69 74   having to visit
12330 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
12340 20 74 61 62 6c 65 20 69 6e 64 69 76 69 64 75 61   table individua
12350 6c 6c 79 2e 0a 54 68 69 73 20 22 74 72 75 6e 63  lly..This "trunc
12360 61 74 65 22 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ate" optimizatio
12370 6e 20 6d 61 6b 65 73 20 74 68 65 20 64 65 6c 65  n makes the dele
12380 74 65 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74  te run much fast
12390 65 72 2e 0a 50 72 69 6f 72 20 74 6f 20 53 51 4c  er..Prior to SQL
123a0 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36  ite [version 3.6
123b0 2e 35 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 36  .5] ([dateof:3.6
123c0 2e 35 5d 29 2c 20 74 68 65 20 74 72 75 6e 63 61  .5]), the trunca
123d0 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a  te optimization.
123e0 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68 61 74 20  also meant that 
123f0 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61  the [sqlite3_cha
12400 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b 73 71 6c  nges()] and.[sql
12410 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
12420 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73  es()] interfaces
12430 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75 6e 74 5f  .and the [count_
12440 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d 0a  changes pragma].
12450 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c  will not actuall
12460 79 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  y return the num
12470 62 65 72 20 6f 66 20 64 65 6c 65 74 65 64 20 72  ber of deleted r
12480 6f 77 73 2e 20 20 0a 54 68 61 74 20 70 72 6f 62  ows.  .That prob
12490 6c 65 6d 20 68 61 73 20 62 65 65 6e 20 66 69 78  lem has been fix
124a0 65 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69 6f  ed as of [versio
124b0 6e 20 33 2e 36 2e 35 5d 20 28 5b 64 61 74 65 6f  n 3.6.5] ([dateo
124c0 66 3a 33 2e 36 2e 35 5d 29 2e 0a 0a 3c 70 3e 5e  f:3.6.5])...<p>^
124d0 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74  The truncate opt
124e0 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 62 65  imization can be
124f0 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
12500 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71 75  abled for all qu
12510 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d 70 69  eries.by recompi
12520 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69 74 68  ling.SQLite with
12530 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d 49   the [SQLITE_OMI
12540 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54 49 4d  T_TRUNCATE_OPTIM
12550 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c 65  IZATION] compile
12560 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f 70  -time switch.</p
12570 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e 63 61  >..<p>The trunca
12580 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  te optimization 
12590 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69 73 61  can also be disa
125a0 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  bled at runtime 
125b0 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74  using.the [sqlit
125c0 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65  e3_set_authorize
125d0 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 20  r()] interface. 
125e0 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72 69 7a   ^If an authoriz
125f0 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65 74 75  er callback.retu
12600 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47 4e 4f  rns [SQLITE_IGNO
12610 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51 4c 49  RE] for an [SQLI
12620 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74 69 6f  TE_DELETE] actio
12630 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74 68 65  n code, then.the
12640 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74 69 6f   DELETE operatio
12650 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64 20 62  n will proceed b
12660 75 74 20 74 68 65 20 74 72 75 6e 63 61 74 65 20  ut the truncate 
12670 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77 69 6c  optimization wil
12680 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20 61 6e  l.be bypassed an
12690 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20 64  d rows will be d
126a0 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20 6f 6e  eleted one by on
126b0 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  e.</p>..<tcl>.##
126c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
126d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
126e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
126f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12700 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
12710 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20 44 41  ction {DETACH DA
12720 54 41 42 41 53 45 7d 20 64 65 74 61 63 68 20 2a  TABASE} detach *
12730 44 45 54 41 43 48 0a 0a 52 65 63 75 72 73 69 76  DETACH..Recursiv
12740 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  eBubbleDiagram d
12750 65 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c  etach-stmt.</tcl
12760 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74  >..<p>^This stat
12770 65 6d 65 6e 74 20 64 65 74 61 63 68 65 73 20 61  ement detaches a
12780 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 61 74  n additional dat
12790 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
127a0 20 70 72 65 76 69 6f 75 73 6c 79 20 0a 61 74 74   previously .att
127b0 61 63 68 65 64 20 75 73 69 6e 67 20 74 68 65 20  ached using the 
127c0 5b 41 54 54 41 43 48 5d 20 73 74 61 74 65 6d 65  [ATTACH] stateme
127d0 6e 74 2e 20 20 0a 5e 57 68 65 6e 20 6e 6f 74 20  nt.  .^When not 
127e0 69 6e 20 5b 73 68 61 72 65 64 20 63 61 63 68 65  in [shared cache
127f0 20 6d 6f 64 65 5d 2c 20 0a 69 74 20 69 73 20 70   mode], .it is p
12800 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20  ossible to have 
12810 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
12820 65 20 66 69 6c 65 20 61 74 74 61 63 68 65 64 20  e file attached 
12830 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 75  multiple times u
12840 73 69 6e 67 20 0a 64 69 66 66 65 72 65 6e 74 20  sing .different 
12850 6e 61 6d 65 73 2c 20 61 6e 64 20 64 65 74 61 63  names, and detac
12860 68 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63 74  hing one connect
12870 69 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20 77 69  ion to a file wi
12880 6c 6c 20 6c 65 61 76 65 20 74 68 65 20 0a 6f 74  ll leave the .ot
12890 68 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70 3e  hers intact.</p>
128a0 0a 5e 49 6e 20 5b 73 68 61 72 65 64 20 63 61 63  .^In [shared cac
128b0 68 65 20 6d 6f 64 65 5d 2c 20 61 74 74 65 6d 70  he mode], attemp
128c0 74 69 6e 67 20 74 6f 20 61 74 74 61 63 68 20 74  ting to attach t
128d0 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
128e0 20 66 69 6c 65 20 6d 6f 72 65 0a 74 68 61 6e 20   file more.than 
128f0 6f 6e 63 65 20 72 65 73 75 6c 74 73 20 69 6e 20  once results in 
12900 61 6e 20 65 72 72 6f 72 2e 0a 0a 0a 3c 74 63 6c  an error....<tcl
12910 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
12920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12960 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49  .Section {DROP I
12970 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 20  NDEX} dropindex 
12980 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a  {{DROP INDEX}}..
12990 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
129a0 69 61 67 72 61 6d 20 64 72 6f 70 2d 69 6e 64 65  iagram drop-inde
129b0 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  x-stmt.</tcl>..<
129c0 70 3e 5e 54 68 65 20 44 52 4f 50 20 49 4e 44 45  p>^The DROP INDE
129d0 58 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f  X statement remo
129e0 76 65 73 20 61 6e 20 69 6e 64 65 78 20 61 64 64  ves an index add
129f0 65 64 0a 77 69 74 68 20 74 68 65 20 5b 43 52 45  ed.with the [CRE
12a00 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65  ATE INDEX] state
12a10 6d 65 6e 74 2e 20 20 54 68 65 20 69 6e 64 65 78  ment.  The index
12a20 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72   is completely r
12a30 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 74 68 65 20  emoved from.the 
12a40 64 69 73 6b 2e 20 20 54 68 65 20 6f 6e 6c 79 20  disk.  The only 
12a50 77 61 79 20 74 6f 20 72 65 63 6f 76 65 72 20 74  way to recover t
12a60 68 65 20 69 6e 64 65 78 20 69 73 20 74 6f 20 72  he index is to r
12a70 65 65 6e 74 65 72 20 74 68 65 0a 61 70 70 72 6f  eenter the.appro
12a80 70 72 69 61 74 65 20 5b 43 52 45 41 54 45 20 49  priate [CREATE I
12a90 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f  NDEX] command.</
12aa0 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
12ab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12af0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
12b00 20 7b 44 52 4f 50 20 54 41 42 4c 45 7d 20 64 72   {DROP TABLE} dr
12b10 6f 70 74 61 62 6c 65 20 7b 7b 44 52 4f 50 20 54  optable {{DROP T
12b20 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76  ABLE}}..Recursiv
12b30 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  eBubbleDiagram d
12b40 72 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 0a 3c  rop-table-stmt.<
12b50 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
12b60 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ROP TABLE statem
12b70 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 61  ent removes a ta
12b80 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20 74  ble added with t
12b90 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he.[CREATE TABLE
12ba0 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
12bb0 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64  e name specified
12bc0 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e 61   is the.table na
12bd0 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70 65  me.  ^The droppe
12be0 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70 6c  d table is compl
12bf0 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72  etely removed fr
12c00 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
12c10 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20  .schema and the 
12c20 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65 20  disk file.  The 
12c30 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62 65  table can not be
12c40 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e 41   recovered.  .^A
12c50 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20 74  ll indices and t
12c60 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61 74  riggers.associat
12c70 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
12c80 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65 74  e are also delet
12c90 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ed.</p>..<p>^The
12ca0 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58 49   optional IF EXI
12cb0 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70 72  STS clause suppr
12cc0 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72 20  esses the error 
12cd0 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61  that would norma
12ce0 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74 68  lly.result if th
12cf0 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74  e table does not
12d00 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e   exist.</p>..<p>
12d10 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  ^If [foreign key
12d20 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72   constraints] ar
12d30 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52 4f  e enabled, a DRO
12d40 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  P TABLE command 
12d50 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70 6c  performs an.impl
12d60 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20 44  icit [DELETE | D
12d70 45 4c 45 54 45 20 46 52 4f 4d 5d 20 63 6f 6d 6d  ELETE FROM] comm
12d80 61 6e 64 20 62 65 66 6f 72 65 20 72 65 6d 6f 76  and before remov
12d90 69 6e 67 20 74 68 65 0a 74 61 62 6c 65 20 66 72  ing the.table fr
12da0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
12db0 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69  schema. ^Any tri
12dc0 67 67 65 72 73 20 61 74 74 61 63 68 65 64 20 74  ggers attached t
12dd0 6f 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 0a  o the table are.
12de0 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74 68 65  dropped from the
12df0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
12e00 20 62 65 66 6f 72 65 20 74 68 65 20 69 6d 70 6c   before the impl
12e10 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d  icit DELETE FROM
12e20 0a 69 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f  .is executed, so
12e30 20 74 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75   this cannot cau
12e40 73 65 20 61 6e 79 20 74 72 69 67 67 65 72 73 20  se any triggers 
12e50 74 6f 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74  to fire. By cont
12e60 72 61 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63  rast, ^an.implic
12e70 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 64  it DELETE FROM d
12e80 6f 65 73 20 63 61 75 73 65 20 61 6e 79 20 63 6f  oes cause any co
12e90 6e 66 69 67 75 72 65 64 0a 5b 66 6f 72 65 69 67  nfigured.[foreig
12ea0 6e 20 6b 65 79 20 61 63 74 69 6f 6e 73 5d 20 74  n key actions] t
12eb0 6f 20 74 61 6b 65 20 70 6c 61 63 65 2e 20 0a 5e  o take place. .^
12ec0 49 66 20 74 68 65 20 69 6d 70 6c 69 63 69 74 20  If the implicit 
12ed0 44 45 4c 45 54 45 20 46 52 4f 4d 20 65 78 65 63  DELETE FROM exec
12ee0 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f 66 20  uted.as part of 
12ef0 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d  a DROP TABLE com
12f00 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20 61 6e  mand violates an
12f10 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  y immediate fore
12f20 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
12f30 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20 69 73  nts,.an error is
12f40 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20 74 68   returned and th
12f50 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 64  e table is not d
12f60 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74 68 65  ropped. ^If .the
12f70 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45   implicit DELETE
12f80 20 46 52 4f 4d 20 63 61 75 73 65 73 20 61 6e 79   FROM causes any
12f90 20 0a 64 65 66 65 72 72 65 64 20 66 6f 72 65 69   .deferred forei
12fa0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
12fb0 74 73 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65  ts to be violate
12fc0 64 2c 20 61 6e 64 20 74 68 65 20 76 69 6f 6c 61  d, and the viola
12fd0 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73  tions still.exis
12fe0 74 20 77 68 65 6e 20 74 68 65 20 74 72 61 6e 73  t when the trans
12ff0 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74  action is commit
13000 74 65 64 2c 20 61 6e 20 65 72 72 6f 72 20 69 73  ted, an error is
13010 20 72 65 74 75 72 6e 65 64 20 61 74 20 74 68 65   returned at the
13020 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e   time.of commit.
13030 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
13040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13080 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
13090 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72  DROP TRIGGER} dr
130a0 6f 70 74 72 69 67 67 65 72 20 7b 7b 44 52 4f 50  optrigger {{DROP
130b0 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75   TRIGGER}}..Recu
130c0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
130d0 61 6d 20 64 72 6f 70 2d 74 72 69 67 67 65 72 2d  am drop-trigger-
130e0 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
130f0 5e 54 68 65 20 44 52 4f 50 20 54 52 49 47 47 45  ^The DROP TRIGGE
13100 52 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f  R statement remo
13110 76 65 73 20 61 20 74 72 69 67 67 65 72 20 63 72  ves a trigger cr
13120 65 61 74 65 64 20 62 79 20 74 68 65 20 0a 5b 43  eated by the .[C
13130 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73  REATE TRIGGER] s
13140 74 61 74 65 6d 65 6e 74 2e 20 5e 4f 6e 63 65 20  tatement. ^Once 
13150 72 65 6d 6f 76 65 64 2c 20 74 68 65 20 74 72 69  removed, the tri
13160 67 67 65 72 20 64 65 66 69 6e 69 74 69 6f 6e 20  gger definition 
13170 69 73 20 6e 6f 0a 6c 6f 6e 67 65 72 20 70 72 65  is no.longer pre
13180 73 65 6e 74 20 69 6e 20 74 68 65 20 73 71 6c 69  sent in the sqli
13190 74 65 5f 6d 61 73 74 65 72 20 28 6f 72 20 73 71  te_master (or sq
131a0 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
131b0 29 20 74 61 62 6c 65 20 61 6e 64 20 69 73 0a 6e  ) table and is.n
131c0 6f 74 20 66 69 72 65 64 20 62 79 20 61 6e 79 20  ot fired by any 
131d0 73 75 62 73 65 71 75 65 6e 74 20 49 4e 53 45 52  subsequent INSER
131e0 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
131f0 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ETE statements..
13200 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74  .<p>^Note that t
13210 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74 6f  riggers are auto
13220 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f 70 70 65  matically droppe
13230 64 20 77 68 65 6e 20 74 68 65 20 61 73 73 6f 63  d when the assoc
13240 69 61 74 65 64 20 74 61 62 6c 65 20 69 73 0a 64  iated table is.d
13250 72 6f 70 70 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23  ropped...<tcl>.#
13260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
132a0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
132b0 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56 49 45 57  ction {DROP VIEW
132c0 7d 20 64 72 6f 70 76 69 65 77 20 7b 7b 44 52 4f  } dropview {{DRO
132d0 50 20 56 49 45 57 7d 7d 0a 0a 52 65 63 75 72 73  P VIEW}}..Recurs
132e0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
132f0 20 64 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 0a   drop-view-stmt.
13300 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
13310 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d  DROP VIEW statem
13320 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69  ent removes a vi
13330 65 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68  ew created by th
13340 65 20 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20  e [CREATE VIEW] 
13350 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54  .  statement. ^T
13360 68 65 20 76 69 65 77 20 64 65 66 69 6e 69 74 69  he view definiti
13370 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72  on is removed fr
13380 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
13390 73 63 68 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e  schema, but .  n
133a0 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 69 6e  o actual data in
133b0 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
133c0 62 61 73 65 20 74 61 62 6c 65 73 20 69 73 20 6d  base tables is m
133d0 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54  odified...<p>^(T
133e0 68 65 20 76 69 65 77 20 74 6f 20 64 72 6f 70 20  he view to drop 
133f0 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
13400 20 74 68 65 20 76 69 65 77 2d 6e 61 6d 65 20 61   the view-name a
13410 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 73  nd optional .  s
13420 63 68 65 6d 61 2d 6e 61 6d 65 20 73 70 65 63 69  chema-name speci
13430 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
13440 74 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74  the DROP VIEW st
13450 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 0a 20  atement. This . 
13460 20 72 65 66 65 72 65 6e 63 65 20 69 73 20 72 65   reference is re
13470 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 74 68 65  solved using the
13480 20 73 74 61 6e 64 61 72 64 20 70 72 6f 63 65 64   standard proced
13490 75 72 65 20 66 6f 72 20 5b 6f 62 6a 65 63 74 20  ure for [object 
134a0 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e 0a 0a  resolution].)^..
134b0 3c 70 3e 0a 20 20 5e 49 66 20 74 68 65 20 73 70  <p>.  ^If the sp
134c0 65 63 69 66 69 65 64 20 76 69 65 77 20 63 61 6e  ecified view can
134d0 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61 6e 64  not be found and
134e0 20 74 68 65 20 49 46 20 45 58 49 53 54 53 20 63   the IF EXISTS c
134f0 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 0a 20 20  lause is not .  
13500 70 72 65 73 65 6e 74 2c 20 69 74 20 69 73 20 61  present, it is a
13510 6e 20 65 72 72 6f 72 2e 20 5e 49 66 20 74 68 65  n error. ^If the
13520 20 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20   specified view 
13530 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20  cannot be found 
13540 61 6e 64 20 61 6e 20 49 46 0a 20 20 45 58 49 53  and an IF.  EXIS
13550 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  TS clause is pre
13560 73 65 6e 74 20 69 6e 20 74 68 65 20 44 52 4f 50  sent in the DROP
13570 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74 2c   VIEW statement,
13580 20 74 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d   then the statem
13590 65 6e 74 0a 20 20 69 73 20 61 20 6e 6f 2d 6f 70  ent.  is a no-op
135a0 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  ....<tcl>.######
135b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135f0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
13600 20 7b 44 61 74 61 62 61 73 65 20 4f 62 6a 65 63   {Database Objec
13610 74 20 4e 61 6d 65 20 52 65 73 6f 6c 75 74 69 6f  t Name Resolutio
13620 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b 6f 62  n} {naming} {{ob
13630 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 7d  ject resolution}
13640 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20  }.</tcl>..<p>.  
13650 49 6e 20 53 51 4c 69 74 65 2c 20 61 20 64 61 74  In SQLite, a dat
13660 61 62 61 73 65 20 6f 62 6a 65 63 74 20 28 61 20  abase object (a 
13670 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 74 72  table, index, tr
13680 69 67 67 65 72 20 6f 72 20 76 69 65 77 29 20 69  igger or view) i
13690 73 20 69 64 65 6e 74 69 66 69 65 64 0a 20 20 62  s identified.  b
136a0 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  y the name of th
136b0 65 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65  e object and the
136c0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74   name of the dat
136d0 61 62 61 73 65 20 74 68 61 74 20 69 74 20 72 65  abase that it re
136e0 73 69 64 65 73 20 69 6e 2e 20 0a 20 20 44 61 74  sides in. .  Dat
136f0 61 62 61 73 65 20 6f 62 6a 65 63 74 73 20 6d 61  abase objects ma
13700 79 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20  y reside in the 
13710 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74  main database, t
13720 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
13730 2c 20 6f 72 20 69 6e 0a 20 20 61 6e 20 5b 41 54  , or in.  an [AT
13740 54 41 43 48 7c 61 74 74 61 63 68 65 64 20 64 61  TACH|attached da
13750 74 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a 20 20  tabase]...<p>.  
13760 54 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68  The syntax of th
13770 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 2c 20  e [DROP TABLE], 
13780 5b 44 52 4f 50 20 49 4e 44 45 58 5d 2c 20 5b 44  [DROP INDEX], [D
13790 52 4f 50 20 56 49 45 57 5d 2c 20 5b 44 52 4f 50  ROP VIEW], [DROP
137a0 20 54 52 49 47 47 45 52 5d 2c 0a 20 20 5b 52 45   TRIGGER],.  [RE
137b0 49 4e 44 45 58 5d 2c 20 5b 41 4c 54 45 52 20 54  INDEX], [ALTER T
137c0 41 42 4c 45 5d 20 61 6e 64 20 6d 61 6e 79 20 6f  ABLE] and many o
137d0 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 20 61 6c  ther commands al
137e0 6c 20 70 65 72 6d 69 74 20 74 68 65 20 75 73 65  l permit the use
137f0 72 20 74 6f 0a 20 20 73 70 65 63 69 66 79 20 61  r to.  specify a
13800 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74   database object
13810 20 65 69 74 68 65 72 20 62 79 20 69 74 73 20 6e   either by its n
13820 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72 20 62 79  ame alone, or by
13830 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
13840 66 0a 20 20 69 74 73 20 6e 61 6d 65 20 61 6e 64  f.  its name and
13850 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 69 74 73   the name of its
13860 20 64 61 74 61 62 61 73 65 2e 20 5e 28 49 66 20   database. ^(If 
13870 6e 6f 20 64 61 74 61 62 61 73 65 20 69 73 20 73  no database is s
13880 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
13890 0a 20 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74  .  of the object
138a0 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65 6e   reference, then
138b0 20 53 51 4c 69 74 65 20 73 65 61 72 63 68 65 73   SQLite searches
138c0 20 74 68 65 20 6d 61 69 6e 2c 20 74 65 6d 70 20   the main, temp 
138d0 61 6e 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64  and all attached
138e0 0a 20 20 64 61 74 61 62 61 73 65 73 20 66 6f 72  .  databases for
138f0 20 61 6e 20 6f 62 6a 65 63 74 20 77 69 74 68 20   an object with 
13900 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e  a matching name.
13910 20 54 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   The temp databa
13920 73 65 20 69 73 20 73 65 61 72 63 68 65 64 0a 20  se is searched. 
13930 20 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77 65 64   first, followed
13940 20 62 79 20 74 68 65 20 6d 61 69 6e 20 64 61 74   by the main dat
13950 61 62 61 73 65 2c 20 66 6f 6c 6c 6f 77 65 64 20  abase, followed 
13960 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
13970 61 62 61 73 65 73 20 69 6e 20 74 68 65 0a 20 20  abases in the.  
13980 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20  order that they 
13990 77 65 72 65 20 61 74 74 61 63 68 65 64 2e 20 54  were attached. T
139a0 68 65 20 72 65 66 65 72 65 6e 63 65 20 72 65 73  he reference res
139b0 6f 6c 76 65 73 20 74 6f 20 74 68 65 20 66 69 72  olves to the fir
139c0 73 74 20 6d 61 74 63 68 0a 20 20 66 6f 75 6e 64  st match.  found
139d0 2e 29 5e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a  .)^ For example:
139e0 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20 20 20  ..<pre>^(.      
139f0 2f 2a 20 41 64 64 20 61 20 74 61 62 6c 65 20 6e  /* Add a table n
13a00 61 6d 65 64 20 27 74 31 27 20 74 6f 20 74 68 65  amed 't1' to the
13a10 20 74 65 6d 70 2c 20 6d 61 69 6e 20 61 6e 64 20   temp, main and 
13a20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
13a30 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 41 54  base */.      AT
13a40 54 41 43 48 20 27 66 69 6c 65 2e 64 62 27 20 41  TACH 'file.db' A
13a50 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43 52 45  S aux;.      CRE
13a60 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20  ATE TABLE t1(x, 
13a70 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  y);.      CREATE
13a80 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 78   TEMP TABLE t1(x
13a90 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41  , y);.      CREA
13aa0 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74 31 28  TE TABLE aux.t1(
13ab0 78 2c 20 79 29 3b 0a 0a 20 20 20 20 20 20 44 52  x, y);..      DR
13ac0 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20  OP TABLE t1;    
13ad0 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62       /* Drop tab
13ae0 6c 65 20 69 6e 20 74 65 6d 70 20 64 61 74 61 62  le in temp datab
13af0 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f  ase */.      DRO
13b00 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20  P TABLE t1;     
13b10 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c      /* Drop tabl
13b20 65 20 69 6e 20 6d 61 69 6e 20 64 61 74 61 62 61  e in main databa
13b30 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50  se */.      DROP
13b40 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20   TABLE t1;      
13b50 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65     /* Drop table
13b60 20 69 6e 20 61 75 78 20 64 61 74 61 62 61 73 65   in aux database
13b70 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c 70   */.)^</pre>..<p
13b80 3e 0a 20 20 5e 49 66 20 61 20 73 63 68 65 6d 61  >.  ^If a schema
13b90 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69   name is specifi
13ba0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
13bb0 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63   object referenc
13bc0 65 2c 20 69 74 20 6d 75 73 74 20 62 65 0a 20 20  e, it must be.  
13bd0 65 69 74 68 65 72 20 22 6d 61 69 6e 22 2c 20 6f  either "main", o
13be0 72 20 22 74 65 6d 70 22 20 6f 72 20 74 68 65 20  r "temp" or the 
13bf0 73 63 68 65 6d 61 2d 6e 61 6d 65 20 6f 66 20 61  schema-name of a
13c00 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
13c10 61 73 65 2e 0a 20 20 5e 4c 69 6b 65 20 6f 74 68  ase..  ^Like oth
13c20 65 72 20 53 51 4c 20 69 64 65 6e 74 69 66 69 65  er SQL identifie
13c30 72 73 2c 20 73 63 68 65 6d 61 20 6e 61 6d 65 73  rs, schema names
13c40 20 61 72 65 20 63 61 73 65 2d 69 6e 73 65 6e 73   are case-insens
13c50 69 74 69 76 65 2e 0a 20 20 5e 49 66 20 61 20 73  itive..  ^If a s
13c60 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70  chema name is sp
13c70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e  ecified, then on
13c80 6c 79 20 74 68 61 74 20 6f 6e 65 20 73 63 68 65  ly that one sche
13c90 6d 61 20 69 73 20 73 65 61 72 63 68 65 64 20 66  ma is searched f
13ca0 6f 72 0a 20 20 74 68 65 20 6e 61 6d 65 64 20 6f  or.  the named o
13cb0 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20 4d 6f  bject...<p>.  Mo
13cc0 73 74 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  st object refere
13cd0 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 72 65  nces may only re
13ce0 73 6f 6c 76 65 20 74 6f 20 61 20 73 70 65 63 69  solve to a speci
13cf0 66 69 63 20 74 79 70 65 20 6f 66 20 6f 62 6a 65  fic type of obje
13d00 63 74 20 28 66 6f 72 0a 20 20 65 78 61 6d 70 6c  ct (for.  exampl
13d10 65 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 68  e a reference th
13d20 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 61 20  at is part of a 
13d30 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
13d40 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 72 65  ment may only re
13d50 73 6f 6c 76 65 0a 20 20 74 6f 20 61 20 74 61 62  solve.  to a tab
13d60 6c 65 20 6f 62 6a 65 63 74 2c 20 6e 6f 74 20 61  le object, not a
13d70 6e 20 69 6e 64 65 78 2c 20 74 72 69 67 67 65 72  n index, trigger
13d80 20 6f 72 20 76 69 65 77 29 2e 20 48 6f 77 65 76   or view). Howev
13d90 65 72 20 69 6e 20 73 6f 6d 65 20 63 6f 6e 74 65  er in some conte
13da0 78 74 73 20 0a 20 20 28 65 2e 67 2e 20 5b 52 45  xts .  (e.g. [RE
13db0 49 4e 44 45 58 5d 29 20 61 6e 20 6f 62 6a 65 63  INDEX]) an objec
13dc0 74 20 72 65 66 65 72 65 6e 63 65 20 6d 61 79 20  t reference may 
13dd0 62 65 20 72 65 73 6f 6c 76 65 20 74 6f 20 6d 6f  be resolve to mo
13de0 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 79 70 65  re than one type
13df0 0a 20 20 6f 66 20 6f 62 6a 65 63 74 2e 20 5e 57  .  of object. ^W
13e00 68 65 6e 20 73 65 61 72 63 68 69 6e 67 20 64 61  hen searching da
13e10 74 61 62 61 73 65 20 73 63 68 65 6d 61 73 20 66  tabase schemas f
13e20 6f 72 20 61 20 6e 61 6d 65 64 20 6f 62 6a 65 63  or a named objec
13e30 74 2c 20 6f 62 6a 65 63 74 73 20 6f 66 0a 20 20  t, objects of.  
13e40 74 79 70 65 73 20 74 68 61 74 20 63 61 6e 6e 6f  types that canno
13e50 74 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65  t be used in the
13e60 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20   context of the 
13e70 72 65 66 65 72 65 6e 63 65 20 61 72 65 20 61 6c  reference are al
13e80 77 61 79 73 20 0a 20 20 69 67 6e 6f 72 65 64 2e  ways .  ignored.
13e90 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
13ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ee0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45  ######.Section E
13ef0 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45  XPLAIN explain E
13f00 58 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69  XPLAIN..BubbleDi
13f10 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c  agram sql-stmt.<
13f20 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51  /tcl>..<p>^An SQ
13f30 4c 20 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20  L statement can 
13f40 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20 74  be preceded by t
13f50 68 65 20 6b 65 79 77 6f 72 64 20 22 45 58 50 4c  he keyword "EXPL
13f60 41 49 4e 22 20 6f 72 0a 62 79 20 74 68 65 20 70  AIN" or.by the p
13f70 68 72 61 73 65 20 22 45 58 50 4c 41 49 4e 20 51  hrase "EXPLAIN Q
13f80 55 45 52 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69  UERY PLAN".  ^Ei
13f90 74 68 65 72 20 6d 6f 64 69 66 69 63 61 74 69 6f  ther modificatio
13fa0 6e 20 63 61 75 73 65 73 20 74 68 65 0a 53 51 4c  n causes the.SQL
13fb0 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 62 65   statement to be
13fc0 68 61 76 65 20 61 73 20 61 20 71 75 65 72 79 20  have as a query 
13fd0 61 6e 64 20 74 6f 20 72 65 74 75 72 6e 20 69 6e  and to return in
13fe0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a  formation about.
13ff0 68 6f 77 20 74 68 65 20 53 51 4c 20 73 74 61 74  how the SQL stat
14000 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65  ement would have
14010 20 6f 70 65 72 61 74 65 64 20 69 66 20 74 68 65   operated if the
14020 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64   EXPLAIN keyword
14030 20 6f 72 0a 70 68 72 61 73 65 20 68 61 64 20 62   or.phrase had b
14040 65 65 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e  een omitted.</p>
14050 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74 20  ..<p>The output 
14060 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61 6e 64  from EXPLAIN and
14070 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
14080 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64 65 64 20  LAN is intended 
14090 66 6f 72 0a 69 6e 74 65 72 61 63 74 69 76 65 20  for.interactive 
140a0 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 74 72 6f  analysis and tro
140b0 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c  ubleshooting onl
140c0 79 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20  y.  The details 
140d0 6f 66 20 74 68 65 20 0a 6f 75 74 70 75 74 20 66  of the .output f
140e0 6f 72 6d 61 74 20 61 72 65 20 73 75 62 6a 65 63  ormat are subjec
140f0 74 20 74 6f 20 63 68 61 6e 67 65 20 66 72 6f 6d  t to change from
14100 20 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f 66 20   one release of 
14110 53 51 4c 69 74 65 20 74 6f 20 74 68 65 20 6e 65  SQLite to the ne
14120 78 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73  xt..Applications
14130 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73 65 20   should not use 
14140 45 58 50 4c 41 49 4e 20 6f 72 20 45 58 50 4c 41  EXPLAIN or EXPLA
14150 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 69  IN QUERY PLAN si
14160 6e 63 65 0a 74 68 65 69 72 20 65 78 61 63 74 20  nce.their exact 
14170 62 65 68 61 76 69 6f 72 20 69 73 20 76 61 72 69  behavior is vari
14180 61 62 6c 65 20 61 6e 64 20 6f 6e 6c 79 20 70 61  able and only pa
14190 72 74 69 61 6c 6c 79 20 64 6f 63 75 6d 65 6e 74  rtially document
141a0 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  ed.</p>..<p>^Whe
141b0 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  n the EXPLAIN ke
141c0 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 79  yword appears by
141d0 20 69 74 73 65 6c 66 20 69 74 20 63 61 75 73 65   itself it cause
141e0 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  s the statement.
141f0 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71  to behave as a q
14200 75 65 72 79 20 74 68 61 74 20 72 65 74 75 72 6e  uery that return
14210 73 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f  s the sequence o
14220 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61 63 68  f .[virtual mach
14230 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ine instructions
14240 5d 20 69 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ] it would have 
14250 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
14260 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64 0a  the command had.
14270 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77  the EXPLAIN keyw
14280 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70 72 65  ord not been pre
14290 73 65 6e 74 2e 20 5e 57 68 65 6e 20 74 68 65 20  sent. ^When the 
142a0 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
142b0 41 4e 20 70 68 72 61 73 65 0a 61 70 70 65 61 72  AN phrase.appear
142c0 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  s, the statement
142d0 20 72 65 74 75 72 6e 73 20 68 69 67 68 2d 6c 65   returns high-le
142e0 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  vel information 
142f0 72 65 67 61 72 64 69 6e 67 20 74 68 65 20 71 75  regarding the qu
14300 65 72 79 0a 70 6c 61 6e 20 74 68 61 74 20 77 6f  ery.plan that wo
14310 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 75 73  uld have been us
14320 65 64 2e 0a 0a 54 68 65 20 45 58 50 4c 41 49 4e  ed...The EXPLAIN
14330 20 51 55 45 52 59 20 50 4c 41 4e 20 63 6f 6d 6d   QUERY PLAN comm
14340 61 6e 64 20 69 73 20 64 65 73 63 72 69 62 65 64  and is described
14350 20 69 6e 20 0a 5b 65 78 70 6c 61 69 6e 20 71 75   in .[explain qu
14360 65 72 79 20 70 6c 61 6e 7c 6d 6f 72 65 20 64 65  ery plan|more de
14370 74 61 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c 74 63  tail here]...<tc
14380 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
14390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143d0 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73  #.Section expres
143e0 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78 70 72  sion expr {*expr
143f0 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73 73 69  ession {expressi
14400 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 52 65 63  on syntax}}..Rec
14410 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
14420 72 61 6d 20 65 78 70 72 0a 3c 2f 74 63 6c 3e 0a  ram expr.</tcl>.
14430 0a 3c 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e  .<p>This section
14440 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
14450 6f 6d 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20  om the others.  
14460 4d 6f 73 74 20 6f 74 68 65 72 20 73 65 63 74 69  Most other secti
14470 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75  ons of.this docu
14480 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74  ment talks about
14490 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 53 51   a particular SQ
144a0 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73  L command.  This
144b0 20 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f   section does.no
144c0 74 20 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73  t talk about a s
144d0 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e  tandalone comman
144e0 64 20 62 75 74 20 61 62 6f 75 74 20 22 65 78 70  d but about "exp
144f0 72 65 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20  ressions" which 
14500 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e  are .subcomponen
14510 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72  ts of most other
14520 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a   commands.</p>..
14530 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
14540 20 62 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61   binaryops {bina
14550 72 79 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74  ry operators}</t
14560 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72  cl>.<h3>Operator
14570 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69  s</h3>.<p>^(SQLi
14580 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74  te understands t
14590 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e  he following bin
145a0 61 72 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69  ary operators, i
145b0 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67  n order from.hig
145c0 68 65 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70  hest to lowest p
145d0 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a  recedence:</p>..
145e0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
145f0 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
14600 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a  2c2cf0"><big>||.
14610 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20  *    /    %.+   
14620 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67   -.&lt;&lt;   &g
14630 74 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20  t;&gt;   &amp;  
14640 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b    |.&lt;    &lt;
14650 3d 20 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b  =   &gt;    &gt;
14660 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20  =.=    ==   !=  
14670 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69   &lt;&gt;   </bi
14680 67 3e 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20  g>IS   IS NOT   
14690 49 4e 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42  IN   LIKE   GLOB
146a0 20 20 20 4d 41 54 43 48 20 20 20 52 45 47 45 58     MATCH   REGEX
146b0 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e  P.AND   .OR</fon
146c0 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t>.</pre></block
146d0 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53  quote>)^..<p>^(S
146e0 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70  upported unary p
146f0 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20  refix operators 
14700 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a  are these:</p>..
14710 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
14720 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
14730 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20  2c2cf0"><big>-  
14740 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c    +    ~    NOT<
14750 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70  /big></font>.</p
14760 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
14770 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
14780 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b  ment collateop {
14790 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
147a0 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  }</tcl>.<p>^The 
147b0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
147c0 20 69 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74   is a unary post
147d0 66 69 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61  fix.operator tha
147e0 74 20 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c  t assigns a [col
147f0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d  lating sequence]
14800 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f   to an expressio
14810 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20  n..^The COLLATE 
14820 6f 70 65 72 61 74 6f 72 20 68 61 73 20 61 20 68  operator has a h
14830 69 67 68 65 72 20 70 72 65 63 65 64 65 6e 63 65  igher precedence
14840 20 28 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67   (binds more tig
14850 68 74 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 62  htly) than any.b
14860 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20 61  inary operator a
14870 6e 64 20 61 6e 79 20 75 6e 61 72 79 20 70 72 65  nd any unary pre
14880 66 69 78 20 6f 70 65 72 61 74 6f 72 20 65 78 63  fix operator exc
14890 65 70 74 20 22 7e 22 2e 0a 28 43 4f 4c 4c 41 54  ept "~"..(COLLAT
148a0 45 20 61 6e 64 20 22 7e 22 20 61 72 65 20 61 73  E and "~" are as
148b0 73 6f 63 69 61 74 69 76 65 20 73 6f 20 74 68 65  sociative so the
148c0 69 72 20 62 69 6e 64 69 6e 67 20 6f 72 64 65 72  ir binding order
148d0 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72   does not matter
148e0 2e 29 0a 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6e  .).^The collatin
148f0 67 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  g sequence set b
14900 79 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70  y the COLLATE op
14910 65 72 61 74 6f 72 20 6f 76 65 72 72 69 64 65 73  erator overrides
14920 20 74 68 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73   the.collating s
14930 65 71 75 65 6e 63 65 20 64 65 74 65 72 6d 69 6e  equence determin
14940 65 64 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54  ed by the COLLAT
14950 45 20 63 6c 61 75 73 65 20 69 6e 20 61 20 74 61  E clause in a ta
14960 62 6c 65 0a 5b 63 6f 6c 75 6d 6e 20 64 65 66 69  ble.[column defi
14970 6e 69 74 69 6f 6e 5d 2e 0a 53 65 65 20 74 68 65  nition]..See the
14980 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
14990 65 6e 63 65 7c 20 64 65 74 61 69 6c 65 64 20 64  ence| detailed d
149a0 69 73 63 75 73 73 69 6f 6e 20 6f 6e 20 63 6f 6c  iscussion on col
149b0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
149c0 5d 0a 69 6e 20 74 68 65 20 5b 64 61 74 61 74 79  ].in the [dataty
149d0 70 65 20 7c 20 44 61 74 61 74 79 70 65 20 49 6e  pe | Datatype In
149e0 20 53 51 4c 69 74 65 33 5d 20 64 6f 63 75 6d 65   SQLite3] docume
149f0 6e 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  nt for additiona
14a00 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 3c  l information..<
14a10 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74  /p>..<tcl>hd_put
14a20 73 20 22 0a 3c 70 3e 5e 54 68 65 20 75 6e 61 72  s ".<p>^The unar
14a30 79 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72  y operator [Oper
14a40 61 74 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d  ator +] is a no-
14a50 6f 70 2e 20 20 5e 49 74 20 63 61 6e 20 62 65 20  op.  ^It can be 
14a60 61 70 70 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e  applied.to strin
14a70 67 73 2c 20 6e 75 6d 62 65 72 73 2c 20 62 6c 6f  gs, numbers, blo
14a80 62 73 20 6f 72 20 4e 55 4c 4c 20 61 6e 64 20 69  bs or NULL and i
14a90 74 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73  t always returns
14aa0 20 61 20 72 65 73 75 6c 74 0a 77 69 74 68 20 74   a result.with t
14ab0 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73  he same value as
14ac0 20 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70   the operand.</p
14ad0 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74  >"</tcl>..<p>Not
14ae0 65 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65  e that there are
14af0 20 74 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20   two variations 
14b00 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 61 6e  of the equals an
14b10 64 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65  d not equals.ope
14b20 72 61 74 6f 72 73 2e 20 20 5e 45 71 75 61 6c 73  rators.  ^Equals
14b30 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 0a   can be either..
14b40 3c 74 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b  <tcl>.hd_puts "[
14b50 4f 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b  Operator =] or [
14b60 4f 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54  Operator ==]..^T
14b70 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70  he non-equals op
14b80 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69  erator can be ei
14b90 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21  ther.[Operator !
14ba0 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20  =] or [Operator 
14bb0 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68  {&lt;&gt;}]..^Th
14bc0 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20  e [Operator ||] 
14bd0 6f 70 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f  operator is \"co
14be0 6e 63 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74  ncatenate\" - it
14bf0 20 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a   joins together.
14c00 74 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20  the two strings 
14c10 6f 66 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e  of its operands.
14c20 0a 5e 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b  .^The operator [
14c30 4f 70 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70  Operator %] outp
14c40 75 74 73 20 74 68 65 20 69 6e 74 65 67 65 72 20  uts the integer 
14c50 76 61 6c 75 65 20 6f 66 20 69 74 73 20 6c 65 66  value of its lef
14c60 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c  t .operand modul
14c70 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70 65 72  o its right oper
14c80 61 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  and.  In other w
14c90 6f 72 64 73 2c 20 74 68 65 0a 6f 70 65 72 61 74  ords, the.operat
14ca0 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20  or [Operator %] 
14cb0 77 6f 72 6b 73 20 69 6e 20 53 51 4c 69 74 65 20  works in SQLite 
14cc0 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 64  the same as it d
14cd0 6f 65 73 0a 69 6e 20 41 4e 53 49 2d 43 2e 3c 2f  oes.in ANSI-C.</
14ce0 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72 65 73 75  p>..<p>^The resu
14cf0 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e 61 72 79  lt of any binary
14d00 20 6f 70 65 72 61 74 6f 72 20 69 73 20 65 69 74   operator is eit
14d10 68 65 72 20 61 20 6e 75 6d 65 72 69 63 20 76 61  her a numeric va
14d20 6c 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c 20 65 78  lue or .NULL, ex
14d30 63 65 70 74 20 66 6f 72 20 74 68 65 20 5b 4f 70  cept for the [Op
14d40 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61  erator ||] conca
14d50 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f  tenation operato
14d60 72 20 77 68 69 63 68 20 61 6c 77 61 79 73 20 0a  r which always .
14d70 65 76 61 6c 75 61 74 65 73 20 74 6f 20 65 69 74  evaluates to eit
14d80 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 74 65  her NULL or a te
14d90 78 74 20 76 61 6c 75 65 2e 3c 2f 70 3e 22 0a 0a  xt value.</p>"..
14da0 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 69 73 69  hd_fragment {isi
14db0 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65 72 61 74  snot} {IS operat
14dc0 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f 70 65 72  or} {IS NOT oper
14dd0 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74 73 20 22  ator}..hd_puts "
14de0 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f  <p>^The [Operato
14df0 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61  r IS] and [Opera
14e00 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 6f 70  tor {IS NOT}] op
14e10 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a 6c 69 6b  erators work.lik
14e20 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 61  e [Operator =] a
14e30 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d  nd [Operator !=]
14e40 20 65 78 63 65 70 74 20 77 68 65 6e 20 6f 6e 65   except when one
14e50 20 6f 72 20 62 6f 74 68 20 6f 66 20 74 68 65 0a   or both of the.
14e60 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
14e70 4c 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65  L. ^In this case
14e80 2c 20 69 66 20 62 6f 74 68 20 6f 70 65 72 61 6e  , if both operan
14e90 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 68 65  ds are NULL, the
14ea0 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74 6f  n the.IS operato
14eb0 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31  r evaluates to 1
14ec0 20 28 74 72 75 65 29 20 61 6e 64 20 74 68 65 20   (true) and the 
14ed0 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20  IS NOT operator 
14ee0 65 76 61 6c 75 61 74 65 73 0a 74 6f 20 30 20 28  evaluates.to 0 (
14ef0 66 61 6c 73 65 29 2e 20 5e 49 66 20 6f 6e 65 20  false). ^If one 
14f00 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
14f10 61 6e 64 20 74 68 65 20 6f 74 68 65 72 20 69 73  and the other is
14f20 20 6e 6f 74 2c 20 74 68 65 6e 20 74 68 65 0a 49   not, then the.I
14f30 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75  S operator evalu
14f40 61 74 65 73 20 74 6f 20 30 20 28 66 61 6c 73 65  ates to 0 (false
14f50 29 20 61 6e 64 20 74 68 65 20 49 53 20 4e 4f 54  ) and the IS NOT
14f60 20 6f 70 65 72 61 74 6f 72 20 69 73 20 31 20 28   operator is 1 (
14f70 74 72 75 65 29 2e 0a 5e 49 74 20 69 73 20 6e 6f  true)..^It is no
14f80 74 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 61  t possible for a
14f90 6e 20 49 53 20 6f 72 20 49 53 20 4e 4f 54 20 65  n IS or IS NOT e
14fa0 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 65 76 61  xpression to eva
14fb0 6c 75 61 74 65 20 74 6f 20 4e 55 4c 4c 2e 0a 5e  luate to NULL..^
14fc0 4f 70 65 72 61 74 6f 72 73 20 5b 4f 70 65 72 61  Operators [Opera
14fd0 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65  tor IS] and [Ope
14fe0 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20  rator {IS NOT}] 
14ff0 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 0a 70  have the same .p
15000 72 65 63 65 64 65 6e 63 65 20 61 73 20 5b 4f 70  recedence as [Op
15010 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c 74 63  erator =]."..<tc
15020 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69  l>hd_fragment li
15030 74 76 61 6c 75 65 20 7b 6c 69 74 65 72 61 6c 20  tvalue {literal 
15040 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  value}</tcl>.<h3
15050 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75 65 73 20  >Literal Values 
15060 28 43 6f 6e 73 74 61 6e 74 73 29 3c 2f 68 33 3e  (Constants)</h3>
15070 0a 3c 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20 76  .<p>.A literal v
15080 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73 20  alue represents 
15090 61 20 63 6f 6e 73 74 61 6e 74 2e 0a 5e 4c 69 74  a constant..^Lit
150a0 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61 79 20  eral values may 
150b0 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f  be integers, flo
150c0 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
150d0 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c  ers, strings,.BL
150e0 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 0a 3c  OBs, or NULLs..<
150f0 70 3e 0a 54 68 65 20 73 79 6e 74 61 78 20 66 6f  p>.The syntax fo
15100 72 20 69 6e 74 65 67 65 72 20 61 6e 64 20 66 6c  r integer and fl
15110 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74  oating point lit
15120 65 72 61 6c 73 20 28 63 6f 6c 6c 65 63 74 69 76  erals (collectiv
15130 65 6c 79 0a 22 6e 75 6d 65 72 69 63 20 6c 69 74  ely."numeric lit
15140 65 72 61 6c 73 22 29 20 69 73 20 73 68 6f 77 6e  erals") is shown
15150 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   by the followin
15160 67 20 64 69 61 67 72 61 6d 3a 3c 2f 70 3e 0a 0a  g diagram:</p>..
15170 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
15180 61 6d 20 6e 75 6d 65 72 69 63 2d 6c 69 74 65 72  am numeric-liter
15190 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28  al</tcl>..<p>.^(
151a0 49 66 20 61 20 6e 75 6d 65 72 69 63 20 6c 69 74  If a numeric lit
151b0 65 72 61 6c 20 68 61 73 20 61 20 64 65 63 69 6d  eral has a decim
151c0 61 6c 20 70 6f 69 6e 74 20 6f 72 20 61 6e 20 65  al point or an e
151d0 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c  xponentiation.cl
151e0 61 75 73 65 20 6f 72 20 69 66 20 69 74 73 20 6d  ause or if its m
151f0 61 67 6e 69 74 75 64 65 20 69 73 20 6c 65 73 73  agnitude is less
15200 20 74 68 61 6e 20 2d 39 32 32 33 33 37 32 30 33   than -922337203
15210 36 38 35 34 37 37 35 38 30 38 20 6f 72 0a 67 72  6854775808 or.gr
15220 65 61 74 65 72 20 74 68 61 6e 20 39 32 32 33 33  eater than 92233
15230 37 32 30 33 36 38 35 34 37 37 35 38 30 37 2c 20  72036854775807, 
15240 74 68 65 6e 20 69 74 20 69 73 20 61 20 66 6c 6f  then it is a flo
15250 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65  ating point lite
15260 72 61 6c 2e 0a 4f 74 68 65 72 77 69 73 65 20 69  ral..Otherwise i
15270 73 20 69 74 20 69 73 20 61 6e 20 20 69 6e 74 65  s it is an  inte
15280 67 65 72 20 6c 69 74 65 72 61 6c 2e 29 5e 0a 5e  ger literal.)^.^
15290 54 68 65 20 22 45 22 20 63 68 61 72 61 63 74 65  The "E" characte
152a0 72 20 74 68 61 74 20 62 65 67 69 6e 73 20 74 68  r that begins th
152b0 65 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e  e exponentiation
152c0 0a 63 6c 61 75 73 65 20 6f 66 20 61 20 66 6c 6f  .clause of a flo
152d0 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65  ating point lite
152e0 72 61 6c 20 63 61 6e 20 62 65 20 65 69 74 68 65  ral can be eithe
152f0 72 20 75 70 70 65 72 20 6f 72 20 6c 6f 77 65 72  r upper or lower
15300 20 63 61 73 65 2e 0a 5e 28 54 68 65 20 22 2e 22   case..^(The "."
15310 20 63 68 61 72 61 63 74 65 72 20 69 73 20 61 6c   character is al
15320 77 61 79 73 20 75 73 65 64 20 0a 61 73 20 74 68  ways used .as th
15330 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
15340 65 76 65 6e 20 69 66 20 74 68 65 20 6c 6f 63 61  even if the loca
15350 6c 65 20 73 65 74 74 69 6e 67 20 73 70 65 63 69  le setting speci
15360 66 69 65 73 20 22 2c 22 20 66 6f 72 0a 74 68 69  fies "," for.thi
15370 73 20 72 6f 6c 65 20 2d 20 74 68 65 20 75 73 65  s role - the use
15380 20 6f 66 20 22 2c 22 20 66 6f 72 20 74 68 65 20   of "," for the 
15390 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f  decimal point wo
153a0 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 0a 73 79  uld result in.sy
153b0 6e 74 61 63 74 69 63 20 61 6d 62 69 67 75 69 74  ntactic ambiguit
153c0 79 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  y.)^..<tcl>hd_fr
153d0 61 67 6d 65 6e 74 20 68 65 78 69 6e 74 20 7b 68  agment hexint {h
153e0 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67  exadecimal integ
153f0 65 72 20 6c 69 74 65 72 61 6c 73 7d 20 7b 68 65  er literals} {he
15400 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
15410 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 48 65  rs}</tcl>.<p>^He
15420 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
15430 72 20 6c 69 74 65 72 61 6c 73 20 66 6f 6c 6c 6f  r literals follo
15440 77 20 74 68 65 20 43 2d 6c 61 6e 67 75 61 67 65  w the C-language
15450 20 6e 6f 74 61 74 69 6f 6e 20 6f 66 0a 22 30 78   notation of."0x
15460 22 20 6f 72 20 22 30 58 22 20 66 6f 6c 6c 6f 77  " or "0X" follow
15470 65 64 20 62 79 20 68 65 78 61 64 65 63 69 6d 61  ed by hexadecima
15480 6c 20 64 69 67 69 74 73 2e 0a 5e 46 6f 72 20 65  l digits..^For e
15490 78 61 6d 70 6c 65 2c 20 30 78 31 32 33 34 20 6d  xample, 0x1234 m
154a0 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73  eans the same as
154b0 20 34 36 36 30 0a 61 6e 64 20 30 78 38 30 30 30   4660.and 0x8000
154c0 30 30 30 30 30 30 30 30 30 30 30 30 20 6d 65 61  000000000000 mea
154d0 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 2d  ns the same as -
154e0 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
154f0 38 30 38 2e 0a 20 5e 28 48 65 78 61 64 65 63 69  808.. ^(Hexadeci
15500 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c 69 74 65  mal integer lite
15510 72 61 6c 73 20 61 72 65 20 69 6e 74 65 72 70 72  rals are interpr
15520 65 74 65 64 20 61 73 20 36 34 2d 62 69 74 0a 74  eted as 64-bit.t
15530 77 6f 27 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  wo's-complement 
15540 69 6e 74 65 67 65 72 73 20 61 6e 64 20 61 72 65  integers and are
15550 20 74 68 75 73 20 6c 69 6d 69 74 65 64 0a 74 6f   thus limited.to
15560 20 73 69 78 74 65 65 6e 20 73 69 67 6e 69 66 69   sixteen signifi
15570 63 61 6e 74 20 64 69 67 69 74 73 20 6f 66 20 70  cant digits of p
15580 72 65 63 69 73 69 6f 6e 2e 29 5e 0a 53 75 70 70  recision.)^.Supp
15590 6f 72 74 20 66 6f 72 20 68 65 78 61 64 65 63 69  ort for hexadeci
155a0 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 77 61 73  mal integers was
155b0 20 61 64 64 65 64 20 74 6f 20 53 51 4c 69 74 65   added to SQLite
155c0 0a 76 65 72 73 69 6f 6e 20 33 2e 38 2e 36 20 28  .version 3.8.6 (
155d0 5b 64 61 74 65 6f 66 3a 33 2e 38 2e 36 5d 29 2e  [dateof:3.8.6]).
155e0 0a 5e 46 6f 72 20 62 61 63 6b 77 61 72 64 73 20  .^For backwards 
155f0 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c 20 74  compatibility, t
15600 68 65 20 22 30 78 22 20 68 65 78 61 64 65 63 69  he "0x" hexadeci
15610 6d 61 6c 20 69 6e 74 65 67 65 72 0a 6e 6f 74 61  mal integer.nota
15620 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 6e 64  tion is only und
15630 65 72 73 74 6f 6f 64 20 62 79 20 74 68 65 20 53  erstood by the S
15640 51 4c 20 6c 61 6e 67 75 61 67 65 20 70 61 72 73  QL language pars
15650 65 72 2c 20 6e 6f 74 20 62 79 20 74 68 65 0a 74  er, not by the.t
15660 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ype conversions 
15670 72 6f 75 74 69 6e 65 73 2e 0a 5e 28 53 74 72 69  routines..^(Stri
15680 6e 67 20 76 61 72 69 61 62 6c 65 73 20 74 68 61  ng variables tha
15690 74 0a 63 6f 6e 74 61 69 6e 20 74 65 78 74 20 66  t.contain text f
156a0 6f 72 6d 61 74 74 65 64 20 6c 69 6b 65 20 68 65  ormatted like he
156b0 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
156c0 72 73 20 61 72 65 20 6e 6f 74 0a 69 6e 74 65 72  rs are not.inter
156d0 70 72 65 74 65 64 20 61 73 20 68 65 78 61 64 65  preted as hexade
156e0 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 77  cimal integers w
156f0 68 65 6e 20 63 6f 65 72 63 69 6e 67 20 74 68 65  hen coercing the
15700 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0a 69 6e   string value.in
15710 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 64 75  to an integer du
15720 65 20 74 6f 20 61 20 5b 43 41 53 54 20 65 78 70  e to a [CAST exp
15730 72 65 73 73 69 6f 6e 5d 20 6f 72 20 66 6f 72 20  ression] or for 
15740 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  a [column affini
15750 74 79 5d 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69  ty].transformati
15760 6f 6e 20 6f 72 20 70 72 69 6f 72 20 74 6f 20 70  on or prior to p
15770 65 72 66 6f 72 6d 69 6e 67 20 61 20 6e 75 6d 65  erforming a nume
15780 72 69 63 20 6f 70 65 72 61 74 69 6f 6e 20 6f 72  ric operation or
15790 20 66 6f 72 0a 61 6e 79 20 6f 74 68 65 72 20 72   for.any other r
157a0 75 6e 2d 74 69 6d 65 20 63 6f 6e 76 65 72 73 69  un-time conversi
157b0 6f 6e 73 2e 29 5e 20 20 5e 28 57 68 65 6e 20 63  ons.)^  ^(When c
157c0 6f 65 72 63 69 6e 67 20 61 0a 73 74 72 69 6e 67  oercing a.string
157d0 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 66 6f   value in the fo
157e0 72 6d 61 74 20 6f 66 20 61 20 68 65 78 61 64 65  rmat of a hexade
157f0 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 69 6e  cimal integer in
15800 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 76 61  to an integer.va
15810 6c 75 65 2c 20 74 68 65 20 63 6f 6e 76 65 72 73  lue, the convers
15820 69 6f 6e 20 70 72 6f 63 65 73 73 20 73 74 6f 70  ion process stop
15830 73 20 77 68 65 6e 20 74 68 65 20 27 78 27 20 63  s when the 'x' c
15840 68 61 72 61 63 74 65 72 20 69 73 20 73 65 65 6e  haracter is seen
15850 0a 73 6f 20 74 68 65 20 72 65 73 75 6c 74 69 6e  .so the resultin
15860 67 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  g integer value 
15870 69 73 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e 29  is always zero.)
15880 5e 0a 5e 28 53 51 4c 69 74 65 20 6f 6e 6c 79 20  ^.^(SQLite only 
15890 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65 20  understands the 
158a0 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
158b0 67 65 72 20 6e 6f 74 61 74 69 6f 6e 20 77 68 65  ger notation whe
158c0 6e 20 69 74 0a 61 70 70 65 61 72 73 20 69 6e 20  n it.appears in 
158d0 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
158e0 74 20 74 65 78 74 2c 20 6e 6f 74 20 77 68 65 6e  t text, not when
158f0 20 69 74 20 61 70 70 65 61 72 73 20 61 73 0a 70   it appears as.p
15900 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  art of the conte
15910 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  nt of the databa
15920 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 41 20 73 74  se.)^..<p> ^A st
15930 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69 73  ring constant is
15940 20 66 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c 6f   formed by enclo
15950 73 69 6e 67 20 74 68 65 0a 73 74 72 69 6e 67 20  sing the.string 
15960 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73  in single quotes
15970 20 28 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c 65   (').  ^A single
15980 20 71 75 6f 74 65 20 77 69 74 68 69 6e 20 74 68   quote within th
15990 65 20 73 74 72 69 6e 67 20 63 61 6e 0a 62 65 20  e string can.be 
159a0 65 6e 63 6f 64 65 64 20 62 79 20 70 75 74 74 69  encoded by putti
159b0 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65 20 71 75  ng two single qu
159c0 6f 74 65 73 20 69 6e 20 61 20 72 6f 77 20 2d 20  otes in a row - 
159d0 61 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43 2d  as in Pascal..C-
159e0 73 74 79 6c 65 20 65 73 63 61 70 65 73 20 75 73  style escapes us
159f0 69 6e 67 20 74 68 65 20 62 61 63 6b 73 6c 61 73  ing the backslas
15a00 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65 20  h character are 
15a10 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62 65  not supported be
15a20 63 61 75 73 65 0a 74 68 65 79 20 61 72 65 20 6e  cause.they are n
15a30 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e  ot standard SQL.
15a40 0a 0a 3c 70 3e 20 5e 42 4c 4f 42 20 6c 69 74 65  ..<p> ^BLOB lite
15a50 72 61 6c 73 20 61 72 65 20 73 74 72 69 6e 67 20  rals are string 
15a60 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e  literals contain
15a70 69 6e 67 20 68 65 78 61 64 65 63 69 6d 61 6c 20  ing hexadecimal 
15a80 64 61 74 61 20 61 6e 64 0a 70 72 65 63 65 64 65  data and.precede
15a90 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 22 78  d by a single "x
15aa0 22 20 6f 72 20 22 58 22 20 63 68 61 72 61 63 74  " or "X" charact
15ab0 65 72 2e 20 20 5e 28 45 78 61 6d 70 6c 65 3a 20  er.  ^(Example: 
15ac0 58 27 35 33 35 31 34 43 36 39 37 34 36 35 27 29  X'53514C697465')
15ad0 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61  ^..<p>.^A litera
15ae0 6c 20 76 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f  l value can also
15af0 20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e   be the token "N
15b00 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ULL"..</p>..<tcl
15b10 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72  >hd_fragment var
15b20 70 61 72 61 6d 20 70 61 72 61 6d 65 74 65 72 20  param parameter 
15b30 70 61 72 61 6d 65 74 65 72 73 20 7b 62 6f 75 6e  parameters {boun
15b40 64 20 70 61 72 61 6d 65 74 65 72 7d 20 7b 62 6f  d parameter} {bo
15b50 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 7d 3c  und parameters}<
15b60 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d 65  /tcl>.<h3>Parame
15b70 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20  ters</h3>.<p>.A 
15b80 22 76 61 72 69 61 62 6c 65 22 20 6f 72 20 22 70  "variable" or "p
15b90 61 72 61 6d 65 74 65 72 22 20 74 6f 6b 65 6e 0a  arameter" token.
15ba0 73 70 65 63 69 66 69 65 73 20 61 20 70 6c 61 63  specifies a plac
15bb0 65 68 6f 6c 64 65 72 20 69 6e 20 74 68 65 20 65  eholder in the e
15bc0 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 61 20  xpression for a 
15bd0 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 66  .value that is f
15be0 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75 6e 74  illed in at runt
15bf0 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 73  ime using the.[s
15c00 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
15c10 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e  () | sqlite3_bin
15c20 64 28 29 5d 20 66 61 6d 69 6c 79 20 6f 66 20 43  d()] family of C
15c30 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 73 2e  /C++ interfaces.
15c40 0a 50 61 72 61 6d 65 74 65 72 73 20 63 61 6e 20  .Parameters can 
15c50 74 61 6b 65 20 73 65 76 65 72 61 6c 20 66 6f 72  take several for
15c60 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ms:.</p>..<block
15c70 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c  quote>.<table>.<
15c80 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
15c90 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
15ca0 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e  p"><b>?</b><i>NN
15cb0 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  N</i></td><td wi
15cc0 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
15cd0 74 64 3e 5e 28 41 20 71 75 65 73 74 69 6f 6e 20  td>^(A question 
15ce0 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20 62 79  mark followed by
15cf0 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e   a number <i>NNN
15d00 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73 70 6f  </i> holds a spo
15d10 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74 68  t for the.NNN-th
15d20 20 70 61 72 61 6d 65 74 65 72 2e 20 20 4e 4e 4e   parameter.  NNN
15d30 20 6d 75 73 74 20 62 65 20 62 65 74 77 65 65 6e   must be between
15d40 20 31 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 4d   1 and [SQLITE_M
15d50 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
15d60 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74  ER].)^.</td>.</t
15d70 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
15d80 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
15d90 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c  ="top"><b>?</b><
15da0 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
15db0 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20  0"></td>.<td>^A 
15dc0 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68  question mark th
15dd0 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77  at is not follow
15de0 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 63  ed by a number c
15df0 72 65 61 74 65 73 20 61 20 70 61 72 61 6d 65 74  reates a paramet
15e00 65 72 0a 77 69 74 68 20 61 20 6e 75 6d 62 65 72  er.with a number
15e10 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68 61   one greater tha
15e20 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 61  n the largest pa
15e30 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61  rameter number a
15e40 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e  lready assigned.
15e50 0a 5e 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20  .^If this means 
15e60 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75  the parameter nu
15e70 6d 62 65 72 20 69 73 20 67 72 65 61 74 65 72 20  mber is greater 
15e80 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58  than.[SQLITE_MAX
15e90 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
15ea0 5d 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  ], it is an erro
15eb0 72 2e 0a 54 68 69 73 20 70 61 72 61 6d 65 74 65  r..This paramete
15ec0 72 20 66 6f 72 6d 61 74 20 69 73 20 70 72 6f 76  r format is prov
15ed0 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74 69  ided for compati
15ee0 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65  bility with othe
15ef0 72 20 64 61 74 61 62 61 73 65 0a 65 6e 67 69 6e  r database.engin
15f00 65 73 2e 20 20 42 75 74 20 62 65 63 61 75 73 65  es.  But because
15f10 20 69 74 20 69 73 20 65 61 73 79 20 74 6f 20 6d   it is easy to m
15f20 69 73 63 6f 75 6e 74 20 74 68 65 20 71 75 65 73  iscount the ques
15f30 74 69 6f 6e 20 6d 61 72 6b 73 2c 20 74 68 65 0a  tion marks, the.
15f40 75 73 65 20 6f 66 20 74 68 69 73 20 70 61 72 61  use of this para
15f50 6d 65 74 65 72 20 66 6f 72 6d 61 74 20 69 73 20  meter format is 
15f60 64 69 73 63 6f 75 72 61 67 65 64 2e 20 20 50 72  discouraged.  Pr
15f70 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 65 6e  ogrammers are en
15f80 63 6f 75 72 61 67 65 64 0a 74 6f 20 75 73 65 20  couraged.to use 
15f90 6f 6e 65 20 6f 66 20 74 68 65 20 73 79 6d 62 6f  one of the symbo
15fa0 6c 69 63 20 66 6f 72 6d 61 74 73 20 62 65 6c 6f  lic formats belo
15fb0 77 20 6f 72 20 74 68 65 20 3f 4e 4e 4e 20 66 6f  w or the ?NNN fo
15fc0 72 6d 61 74 20 61 62 6f 76 65 20 69 6e 73 74 65  rmat above inste
15fd0 61 64 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  ad..</td>.</tr>.
15fe0 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
15ff0 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
16000 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e 41  op"><b>:</b><i>A
16010 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  AAA</i></td><td 
16020 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
16030 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66 6f  .<td>^A colon fo
16040 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65  llowed by an ide
16050 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 68 6f 6c  ntifier name hol
16060 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20  ds a spot for a 
16070 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  .[sqlite3_bind_p
16080 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e 61  arameter_name|na
16090 6d 65 64 20 70 61 72 61 6d 65 74 65 72 5d 20 77  med parameter] w
160a0 69 74 68 20 74 68 65 20 6e 61 6d 65 20 3a 41 41  ith the name :AA
160b0 41 41 2e 20 20 0a 5e 28 4e 61 6d 65 64 20 70 61  AA.  .^(Named pa
160c0 72 61 6d 65 74 65 72 73 20 61 72 65 20 61 6c 73  rameters are als
160d0 6f 20 6e 75 6d 62 65 72 65 64 2e 20 54 68 65 20  o numbered. The 
160e0 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64 20  number assigned 
160f0 69 73 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74  is one greater t
16100 68 61 6e 0a 74 68 65 20 6c 61 72 67 65 73 74 20  han.the largest 
16110 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
16120 20 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65   already assigne
16130 64 2e 29 5e 20 5e 49 66 20 74 68 69 73 20 6d 65  d.)^ ^If this me
16140 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74 65  ans the paramete
16150 72 0a 77 6f 75 6c 64 20 62 65 20 61 73 73 69 67  r.would be assig
16160 6e 65 64 20 61 20 6e 75 6d 62 65 72 20 67 72 65  ned a number gre
16170 61 74 65 72 20 74 68 61 6e 20 5b 53 51 4c 49 54  ater than [SQLIT
16180 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
16190 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 0a 61 6e  UMBER], it is.an
161a0 20 65 72 72 6f 72 2e 20 54 6f 20 61 76 6f 69 64   error. To avoid
161b0 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 69 74 20 69   confusion, it i
161c0 73 20 62 65 73 74 20 74 6f 20 61 76 6f 69 64 20  s best to avoid 
161d0 6d 69 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e 64  mixing named and
161e0 20 6e 75 6d 62 65 72 65 64 0a 70 61 72 61 6d 65   numbered.parame
161f0 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ters.</td>.</tr>
16200 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
16210 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
16220 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69 3e  top"><b>@</b><i>
16230 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64  AAAA</i></td><td
16240 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
16250 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61 74 22 20 73  >.<td>^An "at" s
16260 69 67 6e 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  ign works exactl
16270 79 20 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c 20  y like a colon, 
16280 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
16290 6e 61 6d 65 20 6f 66 0a 74 68 65 20 70 61 72 61  name of.the para
162a0 6d 65 74 65 72 20 63 72 65 61 74 65 64 20 69 73  meter created is
162b0 20 40 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f 74   @AAAA.</td>.</t
162c0 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
162d0 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
162e0 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c  ="top"><b>$</b><
162f0 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c  i>AAAA</i></td><
16300 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
16310 74 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c 61  td>.<td>^A dolla
16320 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64 20  r-sign followed 
16330 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  by an identifier
16340 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64 73   name also holds
16350 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e 61   a spot for a na
16360 6d 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77 69  med.parameter wi
16370 74 68 20 74 68 65 20 6e 61 6d 65 20 24 41 41 41  th the name $AAA
16380 41 2e 20 20 5e 28 54 68 65 20 69 64 65 6e 74 69  A.  ^(The identi
16390 66 69 65 72 20 6e 61 6d 65 20 69 6e 20 74 68 69  fier name in thi
163a0 73 20 63 61 73 65 20 63 61 6e 20 69 6e 63 6c 75  s case can inclu
163b0 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f  de.one or more o
163c0 63 63 75 72 72 65 6e 63 65 73 20 6f 66 20 22 3a  ccurrences of ":
163d0 3a 22 20 61 6e 64 20 61 20 73 75 66 66 69 78 20  :" and a suffix 
163e0 65 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e 2e  enclosed in "(..
163f0 2e 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61  .)" containing.a
16400 6e 79 20 74 65 78 74 20 61 74 20 61 6c 6c 2e 29  ny text at all.)
16410 5e 20 20 54 68 69 73 20 73 79 6e 74 61 78 20 69  ^  This syntax i
16420 73 20 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 20  s the form of a 
16430 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 69 6e  variable name in
16440 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77 77   the.[http://www
16450 2e 74 63 6c 2d 6c 61 6e 67 2e 6f 72 67 2f 20 7c  .tcl-lang.org/ |
16460 20 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67   Tcl programming
16470 20 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54 68 65   language].  The
16480 20 70 72 65 73 65 6e 63 65 0a 6f 66 20 74 68 69   presence.of thi
16490 73 20 73 79 6e 74 61 78 20 72 65 73 75 6c 74 73  s syntax results
164a0 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74   from the fact t
164b0 68 61 74 20 53 51 4c 69 74 65 20 69 73 20 72 65  hat SQLite is re
164c0 61 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78 74  ally a .[Tcl ext
164d0 65 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68 61 73  ension] that has
164e0 20 65 73 63 61 70 65 64 20 69 6e 74 6f 20 74 68   escaped into th
164f0 65 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74  e wild.</td>.</t
16500 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  r>.</table>.</bl
16510 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 50  ockquote>..<p>^P
16520 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 61  arameters that a
16530 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20  re not assigned 
16540 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73 71  values using.[sq
16550 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28  lite3_bind_blob(
16560 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  ) | sqlite3_bind
16570 28 29 5d 20 61 72 65 20 74 72 65 61 74 65 64 0a  ()] are treated.
16580 61 73 20 4e 55 4c 4c 2e 20 20 54 68 65 20 5b 73  as NULL.  The [s
16590 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
165a0 6d 65 74 65 72 5f 69 6e 64 65 78 28 29 5d 20 69  meter_index()] i
165b0 6e 74 65 72 66 61 63 65 20 63 61 6e 20 62 65 20  nterface can be 
165c0 75 73 65 64 0a 74 6f 20 74 72 61 6e 73 6c 61 74  used.to translat
165d0 65 20 61 20 73 79 6d 62 6f 6c 69 63 20 70 61 72  e a symbolic par
165e0 61 6d 65 74 65 72 20 6e 61 6d 65 20 69 6e 74 6f  ameter name into
165f0 20 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20   its equivalent 
16600 6e 75 6d 65 72 69 63 20 69 6e 64 65 78 2e 3c 2f  numeric index.</
16610 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69  p>..<p>^The maxi
16620 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75  mum parameter nu
16630 6d 62 65 72 20 69 73 20 73 65 74 20 61 74 20 63  mber is set at c
16640 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 62 79 0a 74  ompile-time by.t
16650 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56  he [SQLITE_MAX_V
16660 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 20  ARIABLE_NUMBER] 
16670 6d 61 63 72 6f 2e 20 20 5e 28 41 6e 20 69 6e 64  macro.  ^(An ind
16680 69 76 69 64 75 61 6c 20 5b 64 61 74 61 62 61 73  ividual [databas
16690 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 44 20  e connection].D 
166a0 63 61 6e 20 72 65 64 75 63 65 20 69 74 73 20 6d  can reduce its m
166b0 61 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72  aximum parameter
166c0 20 6e 75 6d 62 65 72 20 62 65 6c 6f 77 20 74 68   number below th
166d0 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d  e compile-time m
166e0 61 78 69 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65  aximum.using the
166f0 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d   [sqlite3_limit]
16700 28 44 2c 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  (D, [SQLITE_LIMI
16710 54 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  T_VARIABLE_NUMBE
16720 52 5d 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63  R],...) interfac
16730 65 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  e.)^.</p>..<tcl>
16740 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65  hd_fragment like
16750 20 4c 49 4b 45 20 45 53 43 41 50 45 3c 2f 74 63   LIKE ESCAPE</tc
16760 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49 4b 45 2c  l>.<h3>The LIKE,
16770 20 47 4c 4f 42 2c 20 52 45 47 45 58 50 2c 20 61   GLOB, REGEXP, a
16780 6e 64 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f  nd MATCH operato
16790 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20  rs</h3>.<p>^The 
167a0 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f  LIKE operator do
167b0 65 73 20 61 20 70 61 74 74 65 72 6e 20 6d 61 74  es a pattern mat
167c0 63 68 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e  ching comparison
167d0 2e 20 5e 54 68 65 20 6f 70 65 72 61 6e 64 0a 74  . ^The operand.t
167e0 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74  o the right of t
167f0 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  he LIKE operator
16800 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 61   contains the pa
16810 74 74 65 72 6e 20 61 6e 64 20 74 68 65 20 6c 65  ttern and the le
16820 66 74 20 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20  ft hand.operand 
16830 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 73 74 72  contains the str
16840 69 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61  ing to match aga
16850 69 6e 73 74 20 74 68 65 20 70 61 74 74 65 72 6e  inst the pattern
16860 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20  ...<tcl>hd_puts 
16870 22 5e 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62  "^A percent symb
16880 6f 6c 20 28 5c 22 25 5c 22 29 20 69 6e 20 74 68  ol (\"%\") in th
16890 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d  e LIKE pattern m
168a0 61 74 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65  atches any.seque
168b0 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d  nce of zero or m
168c0 6f 72 65 20 63 68 61 72 61 63 74 65 72 73 20 69  ore characters i
168d0 6e 20 74 68 65 20 73 74 72 69 6e 67 2e 20 20 5e  n the string.  ^
168e0 41 6e 20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c  An underscore.(\
168f0 22 5f 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b  "_\") in the LIK
16900 45 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65  E pattern matche
16910 73 20 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61  s any single cha
16920 72 61 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74  racter in the.st
16930 72 69 6e 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68  ring.  ^(Any oth
16940 65 72 20 63 68 61 72 61 63 74 65 72 20 6d 61 74  er character mat
16950 63 68 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69  ches itself or i
16960 74 73 20 6c 6f 77 65 72 2f 75 70 70 65 72 20 63  ts lower/upper c
16970 61 73 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 28  ase.equivalent (
16980 69 2e 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73  i.e. case-insens
16990 69 74 69 76 65 20 6d 61 74 63 68 69 6e 67 29 2e  itive matching).
169a0 29 5e 0a 0a 3c 75 3e 49 6d 70 6f 72 74 61 6e 74  )^..<u>Important
169b0 20 4e 6f 74 65 3a 3c 2f 75 3e 20 5e 53 51 4c 69   Note:</u> ^SQLi
169c0 74 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61  te only.understa
169d0 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20  nds upper/lower 
169e0 63 61 73 65 20 66 6f 72 20 41 53 43 49 49 20 63  case for ASCII c
169f0 68 61 72 61 63 74 65 72 73 20 62 79 20 64 65 66  haracters by def
16a00 61 75 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45  ault.  ^The.LIKE
16a10 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61 73   operator is cas
16a20 65 20 73 65 6e 73 69 74 69 76 65 20 62 79 20 64  e sensitive by d
16a30 65 66 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f  efault for unico
16a40 64 65 20 63 68 61 72 61 63 74 65 72 73 20 74 68  de characters th
16a50 61 74 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68  at are.beyond th
16a60 65 20 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20  e ASCII range.  
16a70 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68  For example,.^th
16a80 65 20 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e  e expression <b>
16a90 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62  'a'&nbsp;LIKE&nb
16aa0 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52  sp;'A'</b>.is TR
16ab0 55 45 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69  UE but <b>'&aeli
16ac0 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62  g;'&nbsp;LIKE&nb
16ad0 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e  sp;'&AElig;'</b>
16ae0 20 69 73 20 46 41 4c 53 45 2e 22 3c 2f 74 63 6c   is FALSE."</tcl
16af0 3e 0a 54 68 65 20 49 43 55 20 65 78 74 65 6e 73  >.The ICU extens
16b00 69 6f 6e 20 74 6f 20 53 51 4c 69 74 65 20 69 6e  ion to SQLite in
16b10 63 6c 75 64 65 73 20 61 6e 20 65 6e 68 61 6e 63  cludes an enhanc
16b20 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ed version of th
16b30 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e.LIKE operator 
16b40 74 68 61 74 20 64 6f 65 73 20 63 61 73 65 20 66  that does case f
16b50 6f 6c 64 69 6e 67 20 61 63 72 6f 73 73 20 61 6c  olding across al
16b60 6c 20 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63  l unicode charac
16b70 74 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  ters.</p>..<p>^I
16b80 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45  f the optional E
16b90 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73 20  SCAPE clause is 
16ba0 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68  present, then th
16bb0 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f 6c  e expression.fol
16bc0 6c 6f 77 69 6e 67 20 74 68 65 20 45 53 43 41 50  lowing the ESCAP
16bd0 45 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 65  E keyword must e
16be0 76 61 6c 75 61 74 65 20 74 6f 20 61 20 73 74 72  valuate to a str
16bf0 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f  ing consisting o
16c00 66 0a 61 20 73 69 6e 67 6c 65 20 63 68 61 72 61  f.a single chara
16c10 63 74 65 72 2e 20 5e 54 68 69 73 20 63 68 61 72  cter. ^This char
16c20 61 63 74 65 72 20 6d 61 79 20 62 65 20 75 73 65  acter may be use
16c30 64 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61  d in the LIKE pa
16c40 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64 65  ttern.to include
16c50 20 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74   literal percent
16c60 20 6f 72 20 75 6e 64 65 72 73 63 6f 72 65 20 63   or underscore c
16c70 68 61 72 61 63 74 65 72 73 2e 20 5e 54 68 65 20  haracters. ^The 
16c80 65 73 63 61 70 65 0a 63 68 61 72 61 63 74 65 72  escape.character
16c90 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 70   followed by a p
16ca0 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 25  ercent symbol (%
16cb0 29 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 28 5f  ), underscore (_
16cc0 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e 64 0a 69  ), or a second.i
16cd0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 65  nstance of the e
16ce0 73 63 61 70 65 20 63 68 61 72 61 63 74 65 72 20  scape character 
16cf0 69 74 73 65 6c 66 20 6d 61 74 63 68 65 73 20 61  itself matches a
16d00 0a 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74  .literal percent
16d10 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63   symbol, undersc
16d20 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e 67 6c 65  ore, or a single
16d30 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65   escape characte
16d40 72 2c 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e  r,.respectively.
16d50 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66 69 78 20  ..<p>^The infix 
16d60 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73  LIKE operator is
16d70 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
16d80 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70 6c  calling the.appl
16d90 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
16da0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b 6c  SQL functions [l
16db0 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e  ike(<i>Y</i>,<i>
16dc0 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65  X</i>)] or.[like
16dd0 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f  (<i>Y</i>,<i>X</
16de0 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61  i>,<i>Z</i>)]</a
16df0 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  >.</p>..<p>^The 
16e00 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63 61  LIKE operator ca
16e10 6e 20 62 65 20 6d 61 64 65 20 63 61 73 65 20 73  n be made case s
16e20 65 6e 73 69 74 69 76 65 20 75 73 69 6e 67 20 74  ensitive using t
16e30 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73 69 74 69  he.[case_sensiti
16e40 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d 61 5d 2e  ve_like pragma].
16e50 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
16e60 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47 4c 4f 42  agment glob GLOB
16e70 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 47  </tcl>.<p>^The G
16e80 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20 69 73 20  LOB operator is 
16e90 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49 4b 45 20  similar to LIKE 
16ea0 62 75 74 20 75 73 65 73 20 74 68 65 20 55 6e 69  but uses the Uni
16eb0 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69 6e 67 20  x.file globbing 
16ec0 73 79 6e 74 61 78 20 66 6f 72 20 69 74 73 20 77  syntax for its w
16ed0 69 6c 64 63 61 72 64 73 2e 20 20 5e 41 6c 73 6f  ildcards.  ^Also
16ee0 2c 20 47 4c 4f 42 20 69 73 20 63 61 73 65 0a 73  , GLOB is case.s
16ef0 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c 69 6b 65  ensitive, unlike
16f00 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68 20 47 4c   LIKE.  ^Both GL
16f10 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61 79 20  OB and LIKE may 
16f20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 0a 74  be preceded by.t
16f30 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74  he NOT keyword t
16f40 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73 65 6e  o invert the sen
16f50 73 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e 20  se of the test. 
16f60 20 5e 54 68 65 20 69 6e 66 69 78 20 47 4c 4f 42   ^The infix GLOB
16f70 20 0a 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d   .operator is im
16f80 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c  plemented by cal
16f90 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ling the functio
16fa0 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e  n.[glob(<i>Y</i>
16fb0 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64 20  ,<i>X</i>)] and 
16fc0 63 61 6e 20 62 65 20 6d 6f 64 69 66 69 65 64 20  can be modified 
16fd0 62 79 20 6f 76 65 72 72 69 64 69 6e 67 0a 74 68  by overriding.th
16fe0 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e  at function.</p>
16ff0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
17000 6e 74 20 72 65 67 65 78 70 20 52 45 47 45 58 50  nt regexp REGEXP
17010 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 52  </tcl>.<p>^The R
17020 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 69  EGEXP operator i
17030 73 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74  s a special synt
17040 61 78 20 66 6f 72 20 74 68 65 20 72 65 67 65 78  ax for the regex
17050 70 28 29 0a 75 73 65 72 20 66 75 6e 63 74 69 6f  p().user functio
17060 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78 70 28 29  n.  ^No regexp()
17070 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 69   user function i
17080 73 20 64 65 66 69 6e 65 64 20 62 79 20 64 65 66  s defined by def
17090 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65 20  ault.and so use 
170a0 6f 66 20 74 68 65 20 52 45 47 45 58 50 20 6f 70  of the REGEXP op
170b0 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d  erator will norm
170c0 61 6c 6c 79 20 72 65 73 75 6c 74 20 69 6e 20 61  ally result in a
170d0 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  n.error message.
170e0 20 20 5e 49 66 20 61 6e 20 5b 61 70 70 6c 69 63    ^If an [applic
170f0 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51  ation-defined SQ
17100 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e 61 6d 65  L function] name
17110 64 20 22 72 65 67 65 78 70 22 0a 69 73 20 61 64  d "regexp".is ad
17120 64 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 2c  ded at run-time,
17130 20 74 68 65 6e 20 74 68 65 20 22 3c 69 3e 58 3c   then the "<i>X<
17140 2f 69 3e 20 52 45 47 45 58 50 20 3c 69 3e 59 3c  /i> REGEXP <i>Y<
17150 2f 69 3e 22 20 6f 70 65 72 61 74 6f 72 20 77 69  /i>" operator wi
17160 6c 6c 0a 62 65 20 69 6d 70 6c 65 6d 65 6e 74 65  ll.be implemente
17170 64 20 61 73 20 61 20 63 61 6c 6c 20 74 6f 20 22  d as a call to "
17180 72 65 67 65 78 70 28 3c 69 3e 59 3c 2f 69 3e 2c  regexp(<i>Y</i>,
17190 3c 69 3e 58 3c 2f 69 3e 29 22 2e 3c 2f 70 3e 0a  <i>X</i>)".</p>.
171a0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
171b0 74 20 6d 61 74 63 68 20 4d 41 54 43 48 3c 2f 74  t match MATCH</t
171c0 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 4d 41 54 43  cl>.<p>^The MATC
171d0 48 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20  H operator is a 
171e0 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66  special syntax f
171f0 6f 72 20 74 68 65 20 6d 61 74 63 68 28 29 0a 61  or the match().a
17200 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
17210 65 64 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 54  ed function.  ^T
17220 68 65 20 64 65 66 61 75 6c 74 20 6d 61 74 63 68  he default match
17230 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  () function impl
17240 65 6d 65 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65  ementation.raise
17250 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 61  s an exception a
17260 6e 64 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79  nd is not really
17270 20 75 73 65 66 75 6c 20 66 6f 72 20 61 6e 79 74   useful for anyt
17280 68 69 6e 67 2e 0a 5e 42 75 74 20 65 78 74 65 6e  hing..^But exten
17290 73 69 6f 6e 73 20 63 61 6e 20 6f 76 65 72 72 69  sions can overri
172a0 64 65 20 74 68 65 20 6d 61 74 63 68 28 29 20 66  de the match() f
172b0 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72  unction with mor
172c0 65 0a 68 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e  e.helpful logic.
172d0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
172e0 61 67 6d 65 6e 74 20 62 65 74 77 65 65 6e 20 42  agment between B
172f0 45 54 57 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33  ETWEEN</tcl>.<h3
17300 3e 54 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65  >The BETWEEN ope
17310 72 61 74 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28  rator</h3>.<p>^(
17320 54 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72  The BETWEEN oper
17330 61 74 6f 72 20 69 73 20 6c 6f 67 69 63 61 6c 6c  ator is logicall
17340 79 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  y equivalent to 
17350 61 20 70 61 69 72 20 6f 66 20 63 6f 6d 70 61 72  a pair of compar
17360 69 73 6f 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e  isons.."<i>x</i>
17370 20 3c 62 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20   <b>BETWEEN</b> 
17380 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c  <i>y</i> <b>AND<
17390 2f 62 3e 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73  /b> <i>z</i>" is
173a0 20 0a 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20   .equivalent to 
173b0 0a 22 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74  ."<i>x</i><b>&gt
173c0 3b 3d 3c 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c  ;=</b><i>y</i> <
173d0 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f  b>AND</b> <i>x</
173e0 69 3e 3c 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69  i><b>&lt;=</b><i
173f0 3e 7a 3c 2f 69 3e 22 20 65 78 63 65 70 74 0a 74  >z</i>" except.t
17400 68 61 74 20 77 69 74 68 20 42 45 54 57 45 45 4e  hat with BETWEEN
17410 2c 20 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65  , the <i>x</i> e
17420 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6f 6e 6c  xpression is onl
17430 79 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65  y evaluated once
17440 2e 29 5e 0a 5e 54 68 65 20 70 72 65 63 65 64 65  .)^.^The precede
17450 6e 63 65 20 6f 66 20 74 68 65 20 42 45 54 57 45  nce of the BETWE
17460 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 74  EN operator is t
17470 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 70  he same as the p
17480 72 65 63 65 64 65 6e 63 65 0a 61 73 20 6f 70 65  recedence.as ope
17490 72 61 74 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e  rators <b>==</b>
174a0 20 61 6e 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61   and <b>!=</b> a
174b0 6e 64 20 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61  nd <b>LIKE</b> a
174c0 6e 64 20 67 72 6f 75 70 73 20 6c 65 66 74 20 74  nd groups left t
174d0 6f 20 72 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68  o right...<tcl>h
174e0 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73 65 20  d_fragment case 
174f0 7b 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e  {CASE expression
17500 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
17510 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3c  CASE expression<
17520 2f 68 33 3e 0a 3c 70 3e 41 20 43 41 53 45 20 65  /h3>.<p>A CASE e
17530 78 70 72 65 73 73 69 6f 6e 20 73 65 72 76 65 73  xpression serves
17540 20 61 20 72 6f 6c 65 20 73 69 6d 69 6c 61 72 20   a role similar 
17550 74 6f 20 49 46 2d 54 48 45 4e 2d 45 4c 53 45 20  to IF-THEN-ELSE 
17560 69 6e 20 6f 74 68 65 72 0a 70 72 6f 67 72 61 6d  in other.program
17570 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 73 2e 20  ming languages. 
17580 20 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e   ..<p>The option
17590 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  al expression th
175a0 61 74 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74  at occurs in bet
175b0 77 65 65 6e 20 74 68 65 20 43 41 53 45 20 6b 65  ween the CASE ke
175c0 79 77 6f 72 64 20 61 6e 64 20 74 68 65 0a 66 69  yword and the.fi
175d0 72 73 74 20 57 48 45 4e 20 6b 65 79 77 6f 72 64  rst WHEN keyword
175e0 20 69 73 20 63 61 6c 6c 65 64 20 74 68 65 20 22   is called the "
175f0 62 61 73 65 22 20 65 78 70 72 65 73 73 69 6f 6e  base" expression
17600 2e 20 5e 54 68 65 72 65 20 61 72 65 20 74 77 6f  . ^There are two
17610 20 62 61 73 69 63 20 66 6f 72 6d 73 0a 6f 66 20   basic forms.of 
17620 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73  the CASE express
17630 69 6f 6e 3a 20 74 68 6f 73 65 20 77 69 74 68 20  ion: those with 
17640 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  a base expressio
17650 6e 20 61 6e 64 20 74 68 6f 73 65 20 77 69 74 68  n and those with
17660 6f 75 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43  out...<p>^In a C
17670 41 53 45 20 77 69 74 68 6f 75 74 20 61 20 62 61  ASE without a ba
17680 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 65  se expression, e
17690 61 63 68 20 57 48 45 4e 20 65 78 70 72 65 73 73  ach WHEN express
176a0 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
176b0 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20  .and the result 
176c0 74 72 65 61 74 65 64 20 61 73 20 61 20 62 6f 6f  treated as a boo
176d0 6c 65 61 6e 2c 20 73 74 61 72 74 69 6e 67 20 77  lean, starting w
176e0 69 74 68 20 74 68 65 20 6c 65 66 74 6d 6f 73 74  ith the leftmost
176f0 20 61 6e 64 20 63 6f 6e 74 69 6e 75 69 6e 67 0a   and continuing.
17700 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20 5e 54  to the right. ^T
17710 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
17720 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
17730 20 69 73 20 74 68 65 20 65 76 61 6c 75 61 74 69   is the evaluati
17740 6f 6e 20 6f 66 20 74 68 65 20 54 48 45 4e 0a 65  on of the THEN.e
17750 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63  xpression that c
17760 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
17770 65 20 66 69 72 73 74 20 57 48 45 4e 20 65 78 70  e first WHEN exp
17780 72 65 73 73 69 6f 6e 20 74 68 61 74 20 65 76 61  ression that eva
17790 6c 75 61 74 65 73 20 74 6f 0a 74 72 75 65 2e 20  luates to.true. 
177a0 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20  ^Or, if none of 
177b0 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73  the WHEN express
177c0 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f  ions evaluate to
177d0 20 74 72 75 65 2c 20 74 68 65 20 72 65 73 75 6c   true, the resul
177e0 74 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20  t of.evaluating 
177f0 74 68 65 20 45 4c 53 45 20 65 78 70 72 65 73 73  the ELSE express
17800 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66  ion, if any. ^If
17810 20 74 68 65 72 65 20 69 73 20 6e 6f 20 45 4c 53   there is no ELS
17820 45 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  E expression and
17830 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45  .none of the WHE
17840 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72  N expressions ar
17850 65 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  e true, then the
17860 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c 74 20   overall result 
17870 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41 20  is NULL...<p>^A 
17880 4e 55 4c 4c 20 72 65 73 75 6c 74 20 69 73 20 63  NULL result is c
17890 6f 6e 73 69 64 65 72 65 64 20 75 6e 74 72 75 65  onsidered untrue
178a0 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69 6e 67   when evaluating
178b0 20 57 48 45 4e 20 74 65 72 6d 73 2e 0a 0a 3c 70   WHEN terms...<p
178c0 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68  >^In a CASE with
178d0 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69   a base expressi
178e0 6f 6e 2c 20 74 68 65 20 62 61 73 65 20 65 78 70  on, the base exp
178f0 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
17900 61 74 65 64 20 6a 75 73 74 0a 6f 6e 63 65 20 61  ated just.once a
17910 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  nd the result is
17920 20 63 6f 6d 70 61 72 65 64 20 61 67 61 69 6e 73   compared agains
17930 74 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e  t the evaluation
17940 20 6f 66 20 65 61 63 68 20 57 48 45 4e 20 0a 65   of each WHEN .e
17950 78 70 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20 6c  xpression from l
17960 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 5e 54  eft to right. ^T
17970 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
17980 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
17990 20 69 73 20 74 68 65 20 0a 65 76 61 6c 75 61 74   is the .evaluat
179a0 69 6f 6e 20 6f 66 20 74 68 65 20 54 48 45 4e 20  ion of the THEN 
179b0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
179c0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
179d0 68 65 20 66 69 72 73 74 20 57 48 45 4e 0a 65 78  he first WHEN.ex
179e0 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 77 68 69  pression for whi
179f0 63 68 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ch the compariso
17a00 6e 20 69 73 20 74 72 75 65 2e 20 5e 4f 72 2c 20  n is true. ^Or, 
17a10 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57  if none of the W
17a20 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 73 20  HEN.expressions 
17a30 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20 76 61  evaluate to a va
17a40 6c 75 65 20 65 71 75 61 6c 20 74 6f 20 74 68 65  lue equal to the
17a50 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
17a60 2c 20 74 68 65 20 72 65 73 75 6c 74 0a 6f 66 20  , the result.of 
17a70 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45  evaluating the E
17a80 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  LSE expression, 
17a90 69 66 20 61 6e 79 2e 20 5e 49 66 20 74 68 65 72  if any. ^If ther
17aa0 65 20 69 73 20 6e 6f 20 45 4c 53 45 20 65 78 70  e is no ELSE exp
17ab0 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65  ression and.none
17ac0 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65 78 70   of the WHEN exp
17ad0 72 65 73 73 69 6f 6e 73 20 70 72 6f 64 75 63 65  ressions produce
17ae0 20 61 20 72 65 73 75 6c 74 20 65 71 75 61 6c 20   a result equal 
17af0 74 6f 20 74 68 65 20 62 61 73 65 20 65 78 70 72  to the base expr
17b00 65 73 73 69 6f 6e 2c 0a 74 68 65 20 6f 76 65 72  ession,.the over
17b10 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 20 4e 55  all result is NU
17b20 4c 4c 2e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 63 6f  LL...<p>^When co
17b30 6d 70 61 72 69 6e 67 20 61 20 62 61 73 65 20 65  mparing a base e
17b40 78 70 72 65 73 73 69 6f 6e 20 61 67 61 69 6e 73  xpression agains
17b50 74 20 61 20 57 48 45 4e 20 65 78 70 72 65 73 73  t a WHEN express
17b60 69 6f 6e 2c 20 74 68 65 20 73 61 6d 65 0a 63 6f  ion, the same.co
17b70 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
17b80 2c 20 61 66 66 69 6e 69 74 79 2c 20 61 6e 64 20  , affinity, and 
17b90 4e 55 4c 4c 2d 68 61 6e 64 6c 69 6e 67 20 72 75  NULL-handling ru
17ba0 6c 65 73 20 61 70 70 6c 79 20 61 73 20 69 66 20  les apply as if 
17bb0 74 68 65 0a 62 61 73 65 20 65 78 70 72 65 73 73  the.base express
17bc0 69 6f 6e 20 61 6e 64 20 57 48 45 4e 20 65 78 70  ion and WHEN exp
17bd0 72 65 73 73 69 6f 6e 20 61 72 65 20 72 65 73 70  ression are resp
17be0 65 63 74 69 76 65 6c 79 20 74 68 65 20 6c 65 66  ectively the lef
17bf0 74 2d 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e  t- and.right-han
17c00 64 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 61 6e  d operands of an
17c10 20 3c 62 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f   <big><b>=</b></
17c20 62 69 67 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f  big> operator.</
17c30 70 3e 20 5e 49 66 20 74 68 65 20 62 61 73 65 20  p> ^If the base 
17c40 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e  .expression is N
17c50 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
17c60 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45 20  ult of the CASE 
17c70 69 73 20 61 6c 77 61 79 73 20 74 68 65 20 72 65  is always the re
17c80 73 75 6c 74 20 0a 6f 66 20 65 76 61 6c 75 61 74  sult .of evaluat
17c90 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70  ing the ELSE exp
17ca0 72 65 73 73 69 6f 6e 20 69 66 20 69 74 20 65 78  ression if it ex
17cb0 69 73 74 73 2c 20 6f 72 20 4e 55 4c 4c 20 69 66  ists, or NULL if
17cc0 20 69 74 20 64 6f 65 73 20 6e 6f 74 2e 0a 0a 3c   it does not...<
17cd0 70 3e 5e 42 6f 74 68 20 66 6f 72 6d 73 20 6f 66  p>^Both forms of
17ce0 20 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73   the CASE expres
17cf0 73 69 6f 6e 20 75 73 65 20 6c 61 7a 79 2c 20 6f  sion use lazy, o
17d00 72 20 73 68 6f 72 74 2d 63 69 72 63 75 69 74 2c  r short-circuit,
17d10 20 0a 65 76 61 6c 75 61 74 69 6f 6e 2e 0a 0a 3c   .evaluation...<
17d20 70 3e 5e 28 54 68 65 20 6f 6e 6c 79 20 64 69 66  p>^(The only dif
17d30 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
17d40 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77  the following tw
17d50 6f 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  o CASE expressio
17d60 6e 73 20 69 73 20 74 68 61 74 20 0a 74 68 65 20  ns is that .the 
17d70 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73  <i>x</i> express
17d80 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
17d90 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e   exactly once in
17da0 20 74 68 65 20 66 69 72 73 74 20 65 78 61 6d 70   the first examp
17db0 6c 65 20 62 75 74 20 0a 6d 69 67 68 74 20 62 65  le but .might be
17dc0 20 65 76 61 6c 75 61 74 65 64 20 6d 75 6c 74 69   evaluated multi
17dd0 70 6c 65 20 74 69 6d 65 73 20 69 6e 20 74 68 65  ple times in the
17de0 20 73 65 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e 3c 70   second:..<ul><p
17df0 72 65 3e 0a 3c 6c 69 3e 43 41 53 45 20 78 20 57  re>.<li>CASE x W
17e00 48 45 4e 20 77 31 20 54 48 45 4e 20 72 31 20 57  HEN w1 THEN r1 W
17e10 48 45 4e 20 77 32 20 54 48 45 4e 20 72 32 20 45  HEN w2 THEN r2 E
17e20 4c 53 45 20 72 33 20 45 4e 44 0a 3c 6c 69 3e 43  LSE r3 END.<li>C
17e30 41 53 45 20 57 48 45 4e 20 78 3d 77 31 20 54 48  ASE WHEN x=w1 TH
17e40 45 4e 20 72 31 20 57 48 45 4e 20 78 3d 77 32 20  EN r1 WHEN x=w2 
17e50 54 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20  THEN r2 ELSE r3 
17e60 45 4e 44 0a 3c 2f 70 72 65 3e 3c 2f 75 6c 3e 29  END.</pre></ul>)
17e70 5e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  ^...<tcl>hd_frag
17e80 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 49 4e 20 6f  ment in_op {IN o
17e90 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 49 4e  perator} {NOT IN
17ea0 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e   operator}</tcl>
17eb0 0a 3c 68 33 3e 54 68 65 20 49 4e 20 61 6e 64 20  .<h3>The IN and 
17ec0 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 73  NOT IN operators
17ed0 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e  </h3>.<p>^The IN
17ee0 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72   and NOT IN oper
17ef0 61 74 6f 72 73 20 74 61 6b 65 20 61 6e 20 65 78  ators take an ex
17f00 70 72 65 73 73 69 6f 6e 20 6f 6e 20 74 68 65 0a  pression on the.
17f10 6c 65 66 74 20 61 6e 64 20 61 20 6c 69 73 74 20  left and a list 
17f20 6f 66 20 76 61 6c 75 65 73 20 6f 72 20 61 20 73  of values or a s
17f30 75 62 71 75 65 72 79 20 6f 6e 20 74 68 65 20 72  ubquery on the r
17f40 69 67 68 74 2e 0a 5e 57 68 65 6e 20 74 68 65 20  ight..^When the 
17f50 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66  right operand of
17f60 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
17f70 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73   operator is a s
17f80 75 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62  ubquery, the.sub
17f90 71 75 65 72 79 20 6d 75 73 74 20 68 61 76 65 20  query must have 
17fa0 74 68 65 20 73 61 6d 65 20 6e 75 6d 62 65 72 20  the same number 
17fb0 6f 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74 68  of columns as th
17fc0 65 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20  ere are columns 
17fd0 69 6e 0a 74 68 65 20 5b 72 6f 77 20 76 61 6c 75  in.the [row valu
17fe0 65 5d 20 6f 66 20 74 68 65 20 6c 65 66 74 20 6f  e] of the left o
17ff0 70 65 72 61 6e 64 2e 20 20 5e 54 68 65 20 73 75  perand.  ^The su
18000 62 71 75 65 72 79 20 6f 6e 20 74 68 65 0a 72 69  bquery on the.ri
18010 67 68 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20  ght of an IN or 
18020 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  NOT IN operator 
18030 6d 75 73 74 20 62 65 20 61 20 73 63 61 6c 61 72  must be a scalar
18040 20 73 75 62 71 75 65 72 79 20 69 66 20 74 68 65   subquery if the
18050 20 6c 65 66 74 0a 65 78 70 72 65 73 73 69 6f 6e   left.expression
18060 20 69 73 20 6e 6f 74 20 61 20 5b 72 6f 77 20 76   is not a [row v
18070 61 6c 75 65 5d 20 65 78 70 72 65 73 73 69 6f 6e  alue] expression
18080 2e 0a 5e 49 66 20 74 68 65 20 72 69 67 68 74 20  ..^If the right 
18090 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
180a0 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61   or NOT IN opera
180b0 74 6f 72 20 69 73 20 61 20 6c 69 73 74 20 6f 66  tor is a list of
180c0 20 76 61 6c 75 65 73 2c 0a 65 61 63 68 20 6f 66   values,.each of
180d0 20 74 68 6f 73 65 20 76 61 6c 75 65 73 20 6d 75   those values mu
180e0 73 74 20 62 65 20 73 63 61 6c 61 72 73 20 61 6e  st be scalars an
180f0 64 20 74 68 65 20 6c 65 66 74 20 65 78 70 72 65  d the left expre
18100 73 73 69 6f 6e 20 6d 75 73 74 20 61 6c 73 6f 0a  ssion must also.
18110 62 65 20 61 20 73 63 61 6c 61 72 2e 0a 5e 54 68  be a scalar..^Th
18120 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64  e right-hand sid
18130 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f  e of an IN or NO
18140 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 63 61  T IN operator ca
18150 6e 20 62 65 20 61 0a 74 61 62 6c 65 20 3c 69 3e  n be a.table <i>
18160 6e 61 6d 65 3c 2f 69 3e 20 6f 72 20 5b 74 61 62  name</i> or [tab
18170 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e 63 74 69  le-valued functi
18180 6f 6e 5d 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 20  on] <i>name</i> 
18190 69 6e 20 77 68 69 63 68 20 0a 63 61 73 65 20 74  in which .case t
181a0 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69  he right-hand si
181b0 64 65 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64  de is understood
181c0 20 74 6f 20 62 65 20 73 75 62 71 75 65 72 79 20   to be subquery 
181d0 6f 66 0a 74 68 65 20 66 6f 72 6d 20 22 28 53 45  of.the form "(SE
181e0 4c 45 43 54 20 2a 20 46 52 4f 4d 20 3c 69 3e 6e  LECT * FROM <i>n
181f0 61 6d 65 3c 2f 69 3e 29 22 2e 0a 5e 57 68 65 6e  ame</i>)"..^When
18200 20 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61   the right opera
18210 6e 64 20 69 73 20 61 6e 20 65 6d 70 74 79 20 73  nd is an empty s
18220 65 74 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f  et, the result o
18230 66 20 49 4e 20 69 73 20 66 61 6c 73 65 20 61 6e  f IN is false an
18240 64 20 74 68 65 0a 72 65 73 75 6c 74 20 6f 66 20  d the.result of 
18250 4e 4f 54 20 49 4e 20 69 73 20 74 72 75 65 2c 20  NOT IN is true, 
18260 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  regardless of th
18270 65 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 61  e left operand a
18280 6e 64 20 65 76 65 6e 20 69 66 20 74 68 65 0a 6c  nd even if the.l
18290 65 66 74 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  eft operand is N
182a0 55 4c 4c 2e 0a 3c 70 3e 5e 28 54 68 65 20 72 65  ULL..<p>^(The re
182b0 73 75 6c 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72  sult of an IN or
182c0 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72   NOT IN operator
182d0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
182e0 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  y the following.
182f0 6d 61 74 72 69 78 3a 0a 0a 3c 63 65 6e 74 65 72  matrix:..<center
18300 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
18310 31 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 4c 65 66 74  1>.<tr>.<th>Left
18320 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20   operand <br>is 
18330 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f  NULL.<th>Right o
18340 70 65 72 61 6e 64 20 3c 62 72 3e 63 6f 6e 74 61  perand <br>conta
18350 69 6e 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67  ins NULL.<th>Rig
18360 68 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69  ht operand <br>i
18370 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 0a 3c  s an empty set.<
18380 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64 20  th>Left operand 
18390 66 6f 75 6e 64 20 3c 62 72 3e 77 69 74 68 69 6e  found <br>within
183a0 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 0a 3c   right operand.<
183b0 74 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72  th>Result of <br
183c0 3e 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 68  >IN operator.<th
183d0 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 4e  >Result of <br>N
183e0 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c  OT IN operator.<
183f0 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  tr>.<td align="c
18400 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
18410 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
18420 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
18430 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
18440 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
18450 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66  align="center">f
18460 61 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  alse.<td align="
18470 63 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72  center">true.<tr
18480 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
18490 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
184a0 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
184b0 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
184c0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65  lign="center">ye
184d0 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  s.<td align="cen
184e0 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
184f0 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65  n="center">false
18500 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
18510 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74  er">true.<tr>.<t
18520 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
18530 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
18540 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20  enter">does not 
18550 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e  matter.<td align
18560 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
18570 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
18580 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  yes.<td align="c
18590 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 64 20  enter">true.<td 
185a0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66  align="center">f
185b0 61 6c 73 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  alse.<tr>.<td al
185c0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
185d0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
185e0 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e  r">yes.<td align
185f0 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
18600 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
18610 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
18620 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61  nter">NULL.<td a
18630 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
18640 4c 4c 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  LL.<tr>.<td alig
18650 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c  n="center">yes.<
18660 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
18670 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65  ">does not matte
18680 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  r.<td align="cen
18690 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
186a0 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20  n="center">does 
186b0 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61  not matter.<td a
186c0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
186d0 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  LL.<td align="ce
186e0 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 2f 74 61 62  nter">NULL.</tab
186f0 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a  le>.</center>)^.
18700 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 53  .<p>^Note that S
18710 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65  QLite allows the
18720 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c   parenthesized l
18730 69 73 74 20 6f 66 20 73 63 61 6c 61 72 20 76 61  ist of scalar va
18740 6c 75 65 73 20 6f 6e 0a 74 68 65 20 72 69 67 68  lues on.the righ
18750 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61  t-hand side of a
18760 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f  n IN or NOT IN o
18770 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 61 6e  perator to be an
18780 20 65 6d 70 74 79 20 6c 69 73 74 20 62 75 74 0a   empty list but.
18790 6d 6f 73 74 20 6f 74 68 65 72 20 53 51 4c 20 64  most other SQL d
187a0 61 74 61 62 61 73 65 20 64 61 74 61 62 61 73 65  atabase database
187b0 20 65 6e 67 69 6e 65 73 20 61 6e 64 20 74 68 65   engines and the
187c0 20 53 51 4c 39 32 20 73 74 61 6e 64 61 72 64 20   SQL92 standard 
187d0 72 65 71 75 69 72 65 0a 74 68 65 20 6c 69 73 74  require.the list
187e0 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 74 20 6c   to contain at l
187f0 65 61 73 74 20 6f 6e 65 20 65 6c 65 6d 65 6e 74  east one element
18800 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 61 62 6c 65  .</p>..<h3>Table
18810 20 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68   Column Names</h
18820 33 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e  3>..<p>^A column
18830 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 61 6e 79   name can be any
18840 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 64 65   of the names de
18850 66 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 43 52  fined in the [CR
18860 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74  EATE TABLE].stat
18870 65 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20  ement or one of 
18880 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70  the following sp
18890 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72  ecial identifier
188a0 73 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e  s: "<b>ROWID</b>
188b0 22 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c  ",."<b>OID</b>",
188c0 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c   or "<b>_ROWID_<
188d0 2f 62 3e 22 2e 0a 5e 54 68 65 20 74 68 72 65 65  /b>"..^The three
188e0 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66   special identif
188f0 69 65 72 73 20 64 65 73 63 72 69 62 65 20 74 68  iers describe th
18900 65 0a 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e.unique integer
18910 20 6b 65 79 20 28 74 68 65 20 5b 72 6f 77 69 64   key (the [rowid
18920 5d 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ]) associated wi
18930 74 68 20 65 76 65 72 79 20 0a 72 6f 77 20 6f 66  th every .row of
18940 20 65 76 65 72 79 20 74 61 62 6c 65 20 61 6e 64   every table and
18950 20 73 6f 20 61 72 65 20 6e 6f 74 20 61 76 61 69   so are not avai
18960 6c 61 62 6c 65 20 6f 6e 20 5b 57 49 54 48 4f 55  lable on [WITHOU
18970 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e  T ROWID] tables.
18980 0a 5e 54 68 65 20 73 70 65 63 69 61 6c 20 69 64  .^The special id
18990 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c 79 20 72  entifiers only r
189a0 65 66 65 72 20 74 6f 20 74 68 65 20 72 6f 77 20  efer to the row 
189b0 6b 65 79 20 69 66 20 74 68 65 20 5b 43 52 45 41  key if the [CREA
189c0 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d  TE TABLE].statem
189d0 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 64 65 66  ent does not def
189e0 69 6e 65 20 61 20 72 65 61 6c 20 63 6f 6c 75 6d  ine a real colum
189f0 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  n with the same 
18a00 6e 61 6d 65 2e 0a 5e 54 68 65 20 72 6f 77 69 64  name..^The rowid
18a10 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 6e 79   can be used any
18a20 77 68 65 72 65 20 61 20 72 65 67 75 6c 61 72 0a  where a regular.
18a30 63 6f 6c 75 6d 6e 20 63 61 6e 20 62 65 20 75 73  column can be us
18a40 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ed.</p>..<tcl>hd
18a50 5f 66 72 61 67 6d 65 6e 74 20 65 78 69 73 74 73  _fragment exists
18a60 5f 6f 70 20 7b 45 58 49 53 54 53 20 6f 70 65 72  _op {EXISTS oper
18a70 61 74 6f 72 7d 20 7b 4e 4f 54 20 45 58 49 53 54  ator} {NOT EXIST
18a80 53 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c  S operator}</tcl
18a90 3e 0a 3c 68 33 3e 54 68 65 20 45 58 49 53 54 53  >.<h3>The EXISTS
18aa0 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 0a   operator</h3>..
18ab0 3c 70 3e 5e 54 68 65 20 45 58 49 53 54 53 20 6f  <p>^The EXISTS o
18ac0 70 65 72 61 74 6f 72 20 61 6c 77 61 79 73 20 65  perator always e
18ad0 76 61 6c 75 61 74 65 73 20 74 6f 20 6f 6e 65 20  valuates to one 
18ae0 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  of the integer v
18af0 61 6c 75 65 73 20 30 20 0a 61 6e 64 20 31 2e 20  alues 0 .and 1. 
18b00 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20 74 68  ^If executing th
18b10 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
18b20 6e 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20  nt specified as 
18b30 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 0a  the right-hand .
18b40 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65 20 45  operand of the E
18b50 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20 77  XISTS operator w
18b60 6f 75 6c 64 20 72 65 74 75 72 6e 20 6f 6e 65 20  ould return one 
18b70 6f 72 20 6d 6f 72 65 20 72 6f 77 73 2c 20 74 68  or more rows, th
18b80 65 6e 20 74 68 65 0a 45 58 49 53 54 53 20 6f 70  en the.EXISTS op
18b90 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73  erator evaluates
18ba0 20 74 6f 20 31 2e 20 5e 49 66 20 65 78 65 63 75   to 1. ^If execu
18bb0 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20  ting the SELECT 
18bc0 77 6f 75 6c 64 20 72 65 74 75 72 6e 0a 6e 6f 20  would return.no 
18bd0 72 6f 77 73 20 61 74 20 61 6c 6c 2c 20 74 68 65  rows at all, the
18be0 6e 20 74 68 65 20 45 58 49 53 54 53 20 6f 70 65  n the EXISTS ope
18bf0 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20  rator evaluates 
18c00 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20  to 0. ..<p>^The 
18c10 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
18c20 73 20 69 6e 20 65 61 63 68 20 72 6f 77 20 72 65  s in each row re
18c30 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45  turned by the SE
18c40 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 28  LECT statement.(
18c50 69 66 20 61 6e 79 29 20 61 6e 64 20 74 68 65 20  if any) and the 
18c60 73 70 65 63 69 66 69 63 20 76 61 6c 75 65 73 20  specific values 
18c70 72 65 74 75 72 6e 65 64 20 68 61 76 65 20 6e 6f  returned have no
18c80 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65 20 72   effect on the r
18c90 65 73 75 6c 74 73 0a 6f 66 20 74 68 65 20 45 58  esults.of the EX
18ca0 49 53 54 53 20 6f 70 65 72 61 74 6f 72 2e 20 5e  ISTS operator. ^
18cb0 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 72  In particular, r
18cc0 6f 77 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 4e  ows containing N
18cd0 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 0a 6e  ULL values are.n
18ce0 6f 74 20 68 61 6e 64 6c 65 64 20 61 6e 79 20 64  ot handled any d
18cf0 69 66 66 65 72 65 6e 74 6c 79 20 66 72 6f 6d 20  ifferently from 
18d00 72 6f 77 73 20 77 69 74 68 6f 75 74 20 4e 55 4c  rows without NUL
18d10 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c 74 63 6c 3e  L values...<tcl>
18d20 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 75 62 71  hd_fragment subq
18d30 20 7b 53 75 62 71 75 65 72 69 65 73 7d 3c 2f 74   {Subqueries}</t
18d40 63 6c 3e 0a 3c 68 33 3e 53 75 62 71 75 65 72 79  cl>.<h3>Subquery
18d50 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33   Expressions</h3
18d60 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54  >..<p>^A [SELECT
18d70 5d 20 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6c  ] statement encl
18d80 6f 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65  osed in parenthe
18d90 73 65 73 20 69 73 20 61 20 73 75 62 71 75 65 72  ses is a subquer
18da0 79 2e 0a 5e 41 6c 6c 20 74 79 70 65 73 20 6f 66  y..^All types of
18db0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
18dc0 74 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 61 67 67  t, including.agg
18dd0 72 65 67 61 74 65 20 61 6e 64 20 63 6f 6d 70 6f  regate and compo
18de0 75 6e 64 20 53 45 4c 45 43 54 20 71 75 65 72 69  und SELECT queri
18df0 65 73 20 28 71 75 65 72 69 65 73 20 77 69 74 68  es (queries with
18e00 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 0a 55   keywords like.U
18e10 4e 49 4f 4e 20 6f 72 20 45 58 43 45 50 54 29 20  NION or EXCEPT) 
18e20 61 72 65 20 61 6c 6c 6f 77 65 64 20 61 73 20 73  are allowed as s
18e30 63 61 6c 61 72 20 73 75 62 71 75 65 72 69 65 73  calar subqueries
18e40 2e 0a 5e 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ..^The value of 
18e50 61 20 73 75 62 71 75 65 72 79 20 65 78 70 72 65  a subquery expre
18e60 73 73 69 6f 6e 20 69 73 20 74 68 65 20 66 69 72  ssion is the fir
18e70 73 74 20 72 6f 77 20 6f 66 20 74 68 65 20 72 65  st row of the re
18e80 73 75 6c 74 0a 66 72 6f 6d 20 74 68 65 20 65 6e  sult.from the en
18e90 63 6c 6f 73 65 64 20 5b 53 45 4c 45 43 54 5d 20  closed [SELECT] 
18ea0 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 49 6e 20 6f  statement..^In o
18eb0 74 68 65 72 20 77 6f 72 64 73 2c 20 61 6e 20 69  ther words, an i
18ec0 6d 70 6c 69 65 64 20 22 4c 49 4d 49 54 20 31 22  mplied "LIMIT 1"
18ed0 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65   is added to the
18ee0 20 73 75 62 71 75 65 72 79 2c 20 6f 76 65 72 72   subquery, overr
18ef0 69 64 69 6e 67 0a 61 6e 20 65 78 70 6c 69 63 69  iding.an explici
18f00 74 6c 79 20 63 6f 64 65 64 20 4c 49 4d 49 54 2e  tly coded LIMIT.
18f10 0a 5e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61  .^The value of a
18f20 20 73 75 62 71 75 65 72 79 20 65 78 70 72 65 73   subquery expres
18f30 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 20 69 66 20  sion is NULL if 
18f40 74 68 65 20 65 6e 63 6c 6f 73 65 64 0a 5b 53 45  the enclosed.[SE
18f50 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20  LECT] statement 
18f60 72 65 74 75 72 6e 73 20 6e 6f 20 72 6f 77 73 2e  returns no rows.
18f70 0a 0a 3c 70 3e 41 20 73 75 62 71 75 65 72 79 20  ..<p>A subquery 
18f80 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 73  that returns a s
18f90 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 69 73 20  ingle column is 
18fa0 61 20 73 63 61 6c 61 72 20 73 75 62 71 75 65 72  a scalar subquer
18fb0 79 20 61 6e 64 20 63 61 6e 0a 62 65 20 75 73 65  y and can.be use
18fc0 64 20 6d 6f 73 74 20 61 6e 79 77 68 65 72 65 2e  d most anywhere.
18fd0 0a 5e 41 20 73 75 62 71 75 65 72 79 20 74 68 61  .^A subquery tha
18fe0 74 20 72 65 74 75 72 6e 73 20 74 77 6f 20 6f 72  t returns two or
18ff0 20 6d 6f 72 65 20 63 6f 6c 75 6d 6e 73 20 69 73   more columns is
19000 20 61 20 5b 72 6f 77 20 76 61 6c 75 65 5d 0a 73   a [row value].s
19010 75 62 71 75 65 72 79 20 61 6e 64 20 63 61 6e 20  ubquery and can 
19020 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73 20  only be used as 
19030 74 68 65 20 6f 70 65 72 61 6e 64 20 6f 66 20 61  the operand of a
19040 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
19050 61 74 6f 72 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  ator...<tcl>hd_f
19060 72 61 67 6d 65 6e 74 20 63 6f 73 75 62 20 7b 63  ragment cosub {c
19070 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
19080 72 69 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ries}</tcl>.<h3>
19090 43 6f 72 72 65 6c 61 74 65 64 20 53 75 62 71 75  Correlated Subqu
190a0 65 72 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  eries</h3>..<p>^
190b0 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65  A [SELECT] state
190c0 6d 65 6e 74 20 75 73 65 64 20 61 73 20 65 69 74  ment used as eit
190d0 68 65 72 20 61 20 73 63 61 6c 61 72 20 73 75 62  her a scalar sub
190e0 71 75 65 72 79 20 6f 72 20 61 73 20 74 68 65 20  query or as the 
190f0 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72  .right-hand oper
19100 61 6e 64 20 6f 66 20 61 6e 20 49 4e 2c 20 4e 4f  and of an IN, NO
19110 54 20 49 4e 20 6f 72 20 45 58 49 53 54 53 20 65  T IN or EXISTS e
19120 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 63 6f  xpression may co
19130 6e 74 61 69 6e 20 0a 72 65 66 65 72 65 6e 63 65  ntain .reference
19140 73 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  s to columns in 
19150 74 68 65 20 6f 75 74 65 72 20 71 75 65 72 79 2e  the outer query.
19160 20 53 75 63 68 20 61 20 73 75 62 71 75 65 72 79   Such a subquery
19170 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 61 20 63   is known as.a c
19180 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
19190 72 79 2e 20 5e 41 20 63 6f 72 72 65 6c 61 74 65  ry. ^A correlate
191a0 64 20 73 75 62 71 75 65 72 79 20 69 73 20 72 65  d subquery is re
191b0 65 76 61 6c 75 61 74 65 64 20 65 61 63 68 20 74  evaluated each t
191c0 69 6d 65 0a 69 74 73 20 72 65 73 75 6c 74 20 69  ime.its result i
191d0 73 20 72 65 71 75 69 72 65 64 2e 20 5e 41 6e 20  s required. ^An 
191e0 75 6e 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62  uncorrelated sub
191f0 71 75 65 72 79 20 69 73 20 65 76 61 6c 75 61 74  query is evaluat
19200 65 64 20 6f 6e 6c 79 20 6f 6e 63 65 0a 61 6e 64  ed only once.and
19210 20 74 68 65 20 72 65 73 75 6c 74 20 72 65 75 73   the result reus
19220 65 64 20 61 73 20 6e 65 63 65 73 73 61 72 79 2e  ed as necessary.
19230 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
19240 6e 74 20 63 61 73 74 65 78 70 72 20 7b 43 41 53  nt castexpr {CAS
19250 54 20 65 78 70 72 65 73 73 69 6f 6e 7d 20 7b 43  T expression} {C
19260 41 53 54 7d 20 7b 63 61 73 74 7d 20 7b 43 41 53  AST} {cast} {CAS
19270 54 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c  T operator}</tcl
19280 3e 0a 3c 68 33 3e 43 41 53 54 20 65 78 70 72 65  >.<h3>CAST expre
19290 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ssions</h3>..<p>
192a0 41 20 43 41 53 54 20 65 78 70 72 65 73 73 69 6f  A CAST expressio
192b0 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 43  n of the form "C
192c0 41 53 54 28 3c 69 3e 65 78 70 72 3c 2f 69 3e 20  AST(<i>expr</i> 
192d0 41 53 20 3c 69 3e 74 79 70 65 2d 6e 61 6d 65 3c  AS <i>type-name<
192e0 2f 69 3e 29 22 0a 69 73 20 75 73 65 64 20 74 6f  /i>)".is used to
192f0 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76 61 6c   convert the val
19300 75 65 20 6f 66 20 3c 69 3e 65 78 70 72 3c 2f 69  ue of <i>expr</i
19310 3e 20 74 6f 20 0a 61 20 64 69 66 66 65 72 65 6e  > to .a differen
19320 74 20 5b 73 74 6f 72 61 67 65 20 63 6c 61 73 73  t [storage class
19330 5d 20 73 70 65 63 69 66 69 65 64 20 62 79 20 3c  ] specified by <
19340 79 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65  yyterm>type-name
19350 3c 2f 79 79 74 65 72 6d 3e 2e 0a 5e 41 20 43 41  </yyterm>..^A CA
19360 53 54 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  ST conversion is
19370 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20   similar to the 
19380 63 6f 6e 76 65 72 73 69 6f 6e 20 74 68 61 74 20  conversion that 
19390 74 61 6b 65 73 0a 70 6c 61 63 65 20 77 68 65 6e  takes.place when
193a0 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e   a [column affin
193b0 69 74 79 5d 20 69 73 20 61 70 70 6c 69 65 64 20  ity] is applied 
193c0 74 6f 20 61 20 76 61 6c 75 65 20 65 78 63 65 70  to a value excep
193d0 74 20 74 68 61 74 20 77 69 74 68 0a 74 68 65 20  t that with.the 
193e0 43 41 53 54 20 6f 70 65 72 61 74 6f 72 20 74 68  CAST operator th
193f0 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61 6c 77  e conversion alw
19400 61 79 73 20 74 61 6b 65 73 20 70 6c 61 63 65 20  ays takes place 
19410 65 76 65 6e 20 69 66 20 74 68 65 20 63 6f 6e 76  even if the conv
19420 65 72 73 69 6f 6e 0a 6c 6f 73 73 79 20 61 6e 64  ersion.lossy and
19430 20 69 72 72 65 76 65 72 73 69 62 6c 65 2c 20 77   irreversible, w
19440 68 65 72 65 61 73 20 63 6f 6c 75 6d 6e 20 61 66  hereas column af
19450 66 69 6e 69 74 79 20 6f 6e 6c 79 20 63 68 61 6e  finity only chan
19460 67 65 73 20 74 68 65 20 64 61 74 61 20 74 79 70  ges the data typ
19470 65 0a 6f 66 20 61 20 76 61 6c 75 65 20 69 66 20  e.of a value if 
19480 74 68 65 20 63 68 61 6e 67 65 20 69 73 20 6c 6f  the change is lo
19490 73 73 6c 65 73 73 20 61 6e 64 20 72 65 76 65 72  ssless and rever
194a0 73 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74  sible...<p>^If t
194b0 68 65 20 76 61 6c 75 65 20 6f 66 20 3c 69 3e 65  he value of <i>e
194c0 78 70 72 3c 2f 69 3e 20 69 73 20 4e 55 4c 4c 2c  xpr</i> is NULL,
194d0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
194e0 20 6f 66 20 74 68 65 20 43 41 53 54 0a 65 78 70   of the CAST.exp
194f0 72 65 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20  ression is also 
19500 4e 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65  NULL. ^Otherwise
19510 2c 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c  , the storage cl
19520 61 73 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ass of the resul
19530 74 0a 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  t.is determined 
19540 62 79 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20  by applying the 
19550 5b 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65 72  [rules for deter
19560 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 66  mining column af
19570 66 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65 20 3c  finity] to.the <
19580 79 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65  yyterm>type-name
19590 3c 2f 79 79 74 65 72 6d 3e 2e 0a 0a 3c 74 61 62  </yyterm>...<tab
195a0 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  le border=1>.<tr
195b0 3e 0a 20 20 3c 74 68 3e 20 41 66 66 69 6e 69 74  >.  <th> Affinit
195c0 79 20 6f 66 20 3c 79 79 74 65 72 6d 3e 74 79 70  y of <yyterm>typ
195d0 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a  e-name</yyterm>.
195e0 20 20 3c 74 68 3e 20 43 6f 6e 76 65 72 73 69 6f    <th> Conversio
195f0 6e 20 50 72 6f 63 65 73 73 69 6e 67 0a 3c 74 72  n Processing.<tr
19600 3e 0a 20 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20  >.  <td> NONE . 
19610 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67 20 61   <td> ^Casting a
19620 20 76 61 6c 75 65 20 74 6f 20 61 20 3c 79 79 74   value to a <yyt
19630 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79  erm>type-name</y
19640 79 74 65 72 6d 3e 20 77 69 74 68 20 6e 6f 20 61  yterm> with no a
19650 66 66 69 6e 69 74 79 20 0a 20 20 63 61 75 73 65  ffinity .  cause
19660 73 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a 20  s the value to. 
19670 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
19680 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61 73  to a BLOB.  ^Cas
19690 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20 63  ting to a BLOB c
196a0 6f 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73 74  onsists of first
196b0 20 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20 76   casting.  the v
196c0 61 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e 20  alue to TEXT in 
196d0 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f  the [encoding] o
196e0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
196f0 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 0a  onnection, then.
19700 20 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74    interpreting t
19710 68 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79 74  he resulting byt
19720 65 20 73 65 71 75 65 6e 63 65 20 61 73 20 61 20  e sequence as a 
19730 42 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66 20  BLOB instead of 
19740 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20  as TEXT...<tr>. 
19750 20 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74 64   <td> TEXT.  <td
19760 3e 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c 4f  > ^To cast a BLO
19770 42 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54 2c  B value to TEXT,
19780 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66   the sequence of
19790 20 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b 65   bytes that make
197a0 20 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20 69   up the.  BLOB i
197b0 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  s interpreted as
197c0 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75 73   text encoded us
197d0 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
197e0 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e   encoding..  <p>
197f0 0a 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e 20  .   ^Casting an 
19800 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20  INTEGER or REAL 
19810 76 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54 20  value into TEXT 
19820 72 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c 75  renders the valu
19830 65 20 61 73 20 69 66 20 76 69 61 20 0a 20 20 20  e as if via .   
19840 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e   [sqlite3_snprin
19850 74 66 28 29 5d 20 65 78 63 65 70 74 20 74 68 61  tf()] except tha
19860 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20  t the resulting 
19870 54 45 58 54 20 75 73 65 73 20 74 68 65 20 5b 65  TEXT uses the [e
19880 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20 20  ncoding] of.    
19890 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
198a0 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20  nection...<tr>. 
198b0 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74 64   <td> REAL.  <td
198c0 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20  > ^When casting 
198d0 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20  a BLOB value to 
198e0 61 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c 75  a REAL, the valu
198f0 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65  e is first conve
19900 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20  rted to.        
19910 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e  TEXT..       <p>
19920 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20  ^When casting a 
19930 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52 45  TEXT value to RE
19940 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20  AL, the longest 
19950 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78 20  possible prefix 
19960 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65 20 76  of.        the v
19970 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
19980 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
19990 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69 73  a real number is
199a0 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 0a   extracted from.
199b0 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58 54          the TEXT
199c0 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 72   value and the r
199d0 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65 64  emainder ignored
199e0 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20 73  . ^Any leading s
199f0 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20 20  paces in the.   
19a00 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65 20       TEXT value 
19a10 61 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65 6e  are ignored when
19a20 20 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f 6d   converging from
19a30 20 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20 5e   TEXT to REAL. ^
19a40 28 49 66 20 74 68 65 72 65 20 69 73 0a 20 20 20  (If there is.   
19a50 20 20 20 20 20 6e 6f 20 70 72 65 66 69 78 20 74       no prefix t
19a60 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72  hat can be inter
19a70 70 72 65 74 65 64 20 61 73 20 61 20 72 65 61 6c  preted as a real
19a80 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73   number, the res
19a90 75 6c 74 20 6f 66 20 74 68 65 0a 20 20 20 20 20  ult of the.     
19aa0 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73     conversion is
19ab0 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20 20   0.0.)^..<tr>.  
19ac0 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a 20 20 3c  <td> INTEGER.  <
19ad0 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e  td> ^When castin
19ae0 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74  g a BLOB value t
19af0 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 76  o INTEGER, the v
19b00 61 6c 75 65 20 69 73 20 66 69 72 73 74 20 63 6f  alue is first co
19b10 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20  nverted to.     
19b20 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20     TEXT..       
19b30 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  <p>^When casting
19b40 20 61 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f   a TEXT value to
19b50 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 6c 6f   INTEGER, the lo
19b60 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 70  ngest possible p
19b70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20 20  refix of.       
19b80 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20   the value that 
19b90 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
19ba0 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ed as an integer
19bb0 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72 61   number is extra
19bc0 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20  cted from.      
19bd0 20 20 74 68 65 20 54 45 58 54 20 76 61 6c 75 65    the TEXT value
19be0 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 64   and the remaind
19bf0 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79  er ignored. ^Any
19c00 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20   leading spaces 
19c10 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 54  in the.        T
19c20 45 58 54 20 76 61 6c 75 65 20 77 68 65 6e 20 63  EXT value when c
19c30 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20 54  onverting from T
19c40 45 58 54 20 74 6f 20 49 4e 54 45 47 45 52 20 61  EXT to INTEGER a
19c50 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 20  re ignored. ^If 
19c60 74 68 65 72 65 0a 20 20 20 20 20 20 20 20 69 73  there.        is
19c70 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74 20   no prefix that 
19c80 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
19c90 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ed as an integer
19ca0 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73   number, the res
19cb0 75 6c 74 0a 20 20 20 20 20 20 20 20 6f 66 20 74  ult.        of t
19cc0 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  he conversion is
19cd0 20 30 2e 20 20 5e 49 66 20 74 68 65 20 70 72 65   0.  ^If the pre
19ce0 66 69 78 20 69 6e 74 65 67 65 72 20 69 73 20 67  fix integer is g
19cf0 72 65 61 74 65 72 20 74 68 61 6e 0a 20 20 20 20  reater than.    
19d00 20 20 20 20 2b 39 32 32 33 33 37 32 30 33 36 38      +92233720368
19d10 35 34 37 37 35 38 30 37 20 74 68 65 6e 20 74 68  54775807 then th
19d20 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
19d30 63 61 73 74 20 69 73 20 65 78 61 63 74 6c 79 0a  cast is exactly.
19d40 20 20 20 20 20 20 20 20 2b 39 32 32 33 33 37 32          +9223372
19d50 30 33 36 38 35 34 37 37 35 38 30 37 2e 20 20 5e  036854775807.  ^
19d60 53 69 6d 69 6c 61 72 6c 79 2c 20 69 66 20 74 68  Similarly, if th
19d70 65 20 70 72 65 66 69 78 20 69 6e 74 65 67 65 72  e prefix integer
19d80 20 69 73 0a 20 20 20 20 20 20 20 20 6c 65 73 73   is.        less
19d90 20 74 68 61 6e 20 2d 39 32 32 33 33 37 32 30 33   than -922337203
19da0 36 38 35 34 37 37 35 38 30 38 20 74 68 65 6e 20  6854775808 then 
19db0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
19dc0 65 20 63 61 73 74 20 69 73 0a 20 20 20 20 20 20  e cast is.      
19dd0 20 20 65 78 61 63 74 6c 79 20 2d 39 32 32 33 33    exactly -92233
19de0 37 32 30 33 36 38 35 34 37 37 35 38 30 38 2e 0a  72036854775808..
19df0 0a 20 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65  .        <p>^Whe
19e00 6e 20 63 61 73 74 69 6e 67 20 74 6f 20 49 4e 54  n casting to INT
19e10 45 47 45 52 2c 20 69 66 20 74 68 65 20 74 65 78  EGER, if the tex
19e20 74 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 66  t looks like a f
19e30 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 20 20  loating point.  
19e40 20 20 20 20 20 20 76 61 6c 75 65 20 77 69 74 68        value with
19e50 20 61 6e 20 65 78 70 6f 6e 65 6e 74 2c 20 74 68   an exponent, th
19e60 65 20 65 78 70 6f 6e 65 6e 74 20 77 69 6c 6c 20  e exponent will 
19e70 62 65 20 69 67 6e 6f 72 65 64 20 62 65 63 61 75  be ignored becau
19e80 73 65 20 69 74 20 69 73 0a 20 20 20 20 20 20 20  se it is.       
19e90 20 6e 6f 20 70 61 72 74 20 6f 66 20 74 68 65 20   no part of the 
19ea0 69 6e 74 65 67 65 72 20 70 72 65 66 69 78 2e 20  integer prefix. 
19eb0 20 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 20   ^For example,. 
19ec0 20 20 20 20 20 20 20 22 28 43 41 53 54 20 27 31         "(CAST '1
19ed0 32 33 65 2b 35 27 20 41 53 20 49 4e 54 45 47 45  23e+5' AS INTEGE
19ee0 52 29 22 20 72 65 73 75 6c 74 73 20 69 6e 20 31  R)" results in 1
19ef0 32 33 2c 20 6e 6f 74 20 69 6e 20 31 32 33 30 30  23, not in 12300
19f00 30 30 30 2e 0a 0a 20 20 20 20 20 20 20 20 3c 70  000...        <p
19f10 3e 20 5e 28 54 68 65 20 43 41 53 54 20 6f 70 65  > ^(The CAST ope
19f20 72 61 74 6f 72 20 75 6e 64 65 72 73 74 61 6e 64  rator understand
19f30 73 20 64 65 63 69 6d 61 6c 0a 20 20 20 20 20 20  s decimal.      
19f40 20 20 69 6e 74 65 67 65 72 73 20 6f 6e 6c 79 20    integers only 
19f50 26 6d 64 61 73 68 3b 20 63 6f 6e 76 65 72 73 69  &mdash; conversi
19f60 6f 6e 20 6f 66 20 5b 68 65 78 61 64 65 63 69 6d  on of [hexadecim
19f70 61 6c 20 69 6e 74 65 67 65 72 73 5d 20 73 74 6f  al integers] sto
19f80 70 73 20 0a 20 20 20 20 20 20 20 20 61 74 20 74  ps .        at t
19f90 68 65 20 22 78 22 20 69 6e 20 74 68 65 20 22 30  he "x" in the "0
19fa0 78 22 20 70 72 65 66 69 78 20 6f 66 20 74 68 65  x" prefix of the
19fb0 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74   hexadecimal int
19fc0 65 67 65 72 20 73 74 72 69 6e 67 20 0a 20 20 20  eger string .   
19fd0 20 20 20 20 20 61 6e 64 20 74 68 75 73 20 72 65       and thus re
19fe0 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53 54  sult of the CAST
19ff0 20 69 73 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e   is always zero.
1a000 29 5e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e 41 20  )^..      <p>^A 
1a010 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c 20 76  cast of a REAL v
1a020 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49 4e 54  alue into an INT
1a030 45 47 45 52 20 72 65 73 75 6c 74 73 20 69 6e 20  EGER results in 
1a040 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  the integer.    
1a050 20 20 62 65 74 77 65 65 6e 20 74 68 65 20 52 45    between the RE
1a060 41 4c 20 76 61 6c 75 65 20 61 6e 64 20 7a 65 72  AL value and zer
1a070 6f 20 74 68 61 74 20 69 73 20 63 6c 6f 73 65 73  o that is closes
1a080 74 20 74 6f 20 74 68 65 20 52 45 41 4c 20 76 61  t to the REAL va
1a090 6c 75 65 2e 0a 20 20 20 20 20 20 5e 49 66 20 61  lue..      ^If a
1a0a0 20 52 45 41 4c 20 69 73 20 67 72 65 61 74 65 72   REAL is greater
1a0b0 20 74 68 61 6e 20 74 68 65 20 67 72 65 61 74 65   than the greate
1a0c0 73 74 20 70 6f 73 73 69 62 6c 65 20 73 69 67 6e  st possible sign
1a0d0 65 64 0a 20 20 20 20 20 20 69 6e 74 65 67 65 72  ed.      integer
1a0e0 20 28 2b 39 32 32 33 33 37 32 30 33 36 38 35 34   (+9223372036854
1a0f0 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
1a100 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 67   result is the g
1a110 72 65 61 74 65 73 74 20 70 6f 73 73 69 62 6c 65  reatest possible
1a120 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20 69 6e  .      signed in
1a130 74 65 67 65 72 20 61 6e 64 20 69 66 20 74 68 65  teger and if the
1a140 20 52 45 41 4c 20 69 73 20 6c 65 73 73 20 74 68   REAL is less th
1a150 61 6e 20 74 68 65 20 6c 65 61 73 74 20 70 6f 73  an the least pos
1a160 73 69 62 6c 65 20 73 69 67 6e 65 64 0a 20 20 20  sible signed.   
1a170 20 20 20 69 6e 74 65 67 65 72 20 28 2d 39 32 32     integer (-922
1a180 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
1a190 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
1a1a0 74 20 69 73 20 74 68 65 20 6c 65 61 73 74 20 70  t is the least p
1a1b0 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20 73 69  ossible.      si
1a1c0 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a 0a 20  gned integer... 
1a1d0 20 20 20 20 20 3c 70 3e 50 72 69 6f 72 20 74 6f       <p>Prior to
1a1e0 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
1a1f0 33 2e 38 2e 32 20 28 5b 64 61 74 65 6f 66 3a 33  3.8.2 ([dateof:3
1a200 2e 38 2e 32 5d 29 2c 0a 20 20 20 20 20 20 63 61  .8.2]),.      ca
1a210 73 74 69 6e 67 20 61 20 52 45 41 4c 20 76 61 6c  sting a REAL val
1a220 75 65 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a  ue greater than.
1a230 20 20 20 20 20 20 2b 39 32 32 33 33 37 32 30 33        +922337203
1a240 36 38 35 34 37 37 35 38 30 37 2e 30 20 69 6e 74  6854775807.0 int
1a250 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 73  o an integer res
1a260 75 6c 74 65 64 20 69 6e 20 74 68 65 20 6d 6f 73  ulted in the mos
1a270 74 20 6e 65 67 61 74 69 76 65 0a 20 20 20 20 20  t negative.     
1a280 20 69 6e 74 65 67 65 72 2c 20 2d 39 32 32 33 33   integer, -92233
1a290 37 32 30 33 36 38 35 34 37 37 35 38 30 38 2e 20  72036854775808. 
1a2a0 20 54 68 69 73 20 62 65 68 61 76 69 6f 72 20 77   This behavior w
1a2b0 61 73 20 6d 65 61 6e 74 20 74 6f 20 65 6d 75 6c  as meant to emul
1a2c0 61 74 65 20 74 68 65 0a 20 20 20 20 20 20 62 65  ate the.      be
1a2d0 68 61 76 69 6f 72 20 6f 66 20 78 38 36 2f 78 36  havior of x86/x6
1a2e0 34 20 68 61 72 64 77 61 72 65 20 77 68 65 6e 20  4 hardware when 
1a2f0 64 6f 69 6e 67 20 74 68 65 20 65 71 75 69 76 61  doing the equiva
1a300 6c 65 6e 74 20 63 61 73 74 2e 0a 0a 3c 74 72 3e  lent cast...<tr>
1a310 0a 20 20 3c 74 64 3e 20 4e 55 4d 45 52 49 43 0a  .  <td> NUMERIC.
1a320 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67 20    <td> ^Casting 
1a330 61 20 54 45 58 54 20 6f 72 20 42 4c 4f 42 20 76  a TEXT or BLOB v
1a340 61 6c 75 65 20 69 6e 74 6f 20 4e 55 4d 45 52 49  alue into NUMERI
1a350 43 20 66 69 72 73 74 20 64 6f 65 73 20 61 20 66  C first does a f
1a360 6f 72 63 65 64 0a 20 20 20 63 6f 6e 76 65 72 73  orced.   convers
1a370 69 6f 6e 20 69 6e 74 6f 20 52 45 41 4c 20 62 75  ion into REAL bu
1a380 74 20 74 68 65 6e 20 66 75 72 74 68 65 72 20 63  t then further c
1a390 6f 6e 76 65 72 74 73 20 74 68 65 20 72 65 73 75  onverts the resu
1a3a0 6c 74 20 69 6e 74 6f 20 49 4e 54 45 47 45 52 20  lt into INTEGER 
1a3b0 69 66 0a 20 20 20 61 6e 64 20 6f 6e 6c 79 20 69  if.   and only i
1a3c0 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  f the conversion
1a3d0 20 66 72 6f 6d 20 52 45 41 4c 20 74 6f 20 49 4e   from REAL to IN
1a3e0 54 45 47 45 52 20 69 73 20 6c 6f 73 73 6c 65 73  TEGER is lossles
1a3f0 73 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c 65  s and reversible
1a400 2e 0a 20 20 20 54 68 69 73 20 69 73 20 74 68 65  ..   This is the
1a410 20 6f 6e 6c 79 20 63 6f 6e 74 65 78 74 20 69 6e   only context in
1a420 20 53 51 4c 69 74 65 20 77 68 65 72 65 20 74 68   SQLite where th
1a430 65 20 4e 55 4d 45 52 49 43 20 61 6e 64 20 49 4e  e NUMERIC and IN
1a440 54 45 47 45 52 20 5b 61 66 66 69 6e 69 74 69 65  TEGER [affinitie
1a450 73 5d 0a 20 20 20 62 65 68 61 76 65 20 64 69 66  s].   behave dif
1a460 66 65 72 65 6e 74 6c 79 2e 0a 20 20 20 3c 70 3e  ferently..   <p>
1a470 20 5e 43 61 73 74 69 6e 67 20 61 20 52 45 41 4c   ^Casting a REAL
1a480 20 6f 72 20 49 4e 54 45 47 45 52 20 76 61 6c 75   or INTEGER valu
1a490 65 20 74 6f 20 4e 55 4d 45 52 49 43 20 69 73 20  e to NUMERIC is 
1a4a0 61 20 6e 6f 2d 6f 70 2c 20 65 76 65 6e 20 69 66  a no-op, even if
1a4b0 20 61 20 72 65 61 6c 0a 20 20 20 76 61 6c 75 65   a real.   value
1a4c0 20 63 6f 75 6c 64 20 62 65 20 6c 6f 73 73 6c 65   could be lossle
1a4d0 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
1a4e0 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 0a 3c  o an integer...<
1a4f0 2f 74 72 3e 0a 0a 3c 2f 74 61 62 6c 65 3e 0a 0a  /tr>..</table>..
1a500 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 68  <p>^Note that th
1a510 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 63 61  e result from ca
1a520 73 74 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d 42 4c  sting any non-BL
1a530 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20  OB value into a 
1a540 0a 42 4c 4f 42 20 61 6e 64 20 74 68 65 20 72 65  .BLOB and the re
1a550 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e  sult from castin
1a560 67 20 61 6e 79 20 42 4c 4f 42 20 76 61 6c 75 65  g any BLOB value
1a570 20 69 6e 74 6f 20 61 20 6e 6f 6e 2d 42 4c 4f 42   into a non-BLOB
1a580 20 76 61 6c 75 65 0a 6d 61 79 20 62 65 20 64 69   value.may be di
1a590 66 66 65 72 65 6e 74 20 64 65 70 65 6e 64 69 6e  fferent dependin
1a5a0 67 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65  g on whether the
1a5b0 20 64 61 74 61 62 61 73 65 20 5b 65 6e 63 6f 64   database [encod
1a5c0 69 6e 67 5d 20 69 73 20 55 54 46 2d 38 2c 0a 55  ing] is UTF-8,.U
1a5d0 54 46 2d 31 36 62 65 2c 20 6f 72 20 55 54 46 2d  TF-16be, or UTF-
1a5e0 31 36 6c 65 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f  16le....<tcl>hd_
1a5f0 66 72 61 67 6d 65 6e 74 20 62 6f 6f 6c 65 61 6e  fragment boolean
1a600 65 78 70 72 20 7b 62 6f 6f 6c 65 61 6e 20 65 78  expr {boolean ex
1a610 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  pression}</tcl>.
1a620 3c 68 33 3e 42 6f 6f 6c 65 61 6e 20 45 78 70 72  <h3>Boolean Expr
1a630 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  essions</h3>..<p
1a640 3e 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67  >The SQL languag
1a650 65 20 66 65 61 74 75 72 65 73 20 73 65 76 65 72  e features sever
1a660 61 6c 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72  al contexts wher
1a670 65 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  e an expression 
1a680 69 73 20 0a 65 76 61 6c 75 61 74 65 64 20 61 6e  is .evaluated an
1a690 64 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e  d the result con
1a6a0 76 65 72 74 65 64 20 74 6f 20 61 20 62 6f 6f 6c  verted to a bool
1a6b0 65 61 6e 20 28 74 72 75 65 20 6f 72 20 66 61 6c  ean (true or fal
1a6c0 73 65 29 20 76 61 6c 75 65 2e 20 54 68 65 73 65  se) value. These
1a6d0 0a 63 6f 6e 74 65 78 74 73 20 61 72 65 3a 0a 0a  .contexts are:..
1a6e0 20 20 3c 75 6c 3e 0a 20 20 20 20 3c 6c 69 3e 20    <ul>.    <li> 
1a6f0 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
1a700 20 6f 66 20 61 20 53 45 4c 45 43 54 2c 20 55 50   of a SELECT, UP
1a710 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 20 73  DATE or DELETE s
1a720 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c  tatement,.    <l
1a730 69 3e 20 74 68 65 20 4f 4e 20 6f 72 20 55 53 49  i> the ON or USI
1a740 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
1a750 6f 69 6e 20 69 6e 20 61 20 53 45 4c 45 43 54 20  oin in a SELECT 
1a760 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c  statement,.    <
1a770 6c 69 3e 20 74 68 65 20 48 41 56 49 4e 47 20 63  li> the HAVING c
1a780 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
1a790 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20  T statement,.   
1a7a0 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e 20 63   <li> the WHEN c
1a7b0 6c 61 75 73 65 20 6f 66 20 61 6e 20 53 51 4c 20  lause of an SQL 
1a7c0 74 72 69 67 67 65 72 2c 20 61 6e 64 0a 20 20 20  trigger, and.   
1a7d0 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e 20 63   <li> the WHEN c
1a7e0 6c 61 75 73 65 20 6f 72 20 63 6c 61 75 73 65 73  lause or clauses
1a7f0 20 6f 66 20 73 6f 6d 65 20 43 41 53 45 20 65 78   of some CASE ex
1a800 70 72 65 73 73 69 6f 6e 73 2e 0a 20 20 3c 2f 75  pressions..  </u
1a810 6c 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 63 6f 6e 76  l>..<p>^(To conv
1a820 65 72 74 20 74 68 65 20 72 65 73 75 6c 74 73 20  ert the results 
1a830 6f 66 20 61 6e 20 53 51 4c 20 65 78 70 72 65 73  of an SQL expres
1a840 73 69 6f 6e 20 74 6f 20 61 20 62 6f 6f 6c 65 61  sion to a boolea
1a850 6e 20 76 61 6c 75 65 2c 20 53 51 4c 69 74 65 0a  n value, SQLite.
1a860 66 69 72 73 74 20 63 61 73 74 73 20 74 68 65 20  first casts the 
1a870 72 65 73 75 6c 74 20 74 6f 20 61 20 4e 55 4d 45  result to a NUME
1a880 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74 68 65  RIC value in the
1a890 20 73 61 6d 65 20 77 61 79 20 61 73 20 61 20 0a   same way as a .
1a8a0 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  [CAST expression
1a8b0 5d 2e 20 41 20 6e 75 6d 65 72 69 63 20 7a 65 72  ]. A numeric zer
1a8c0 6f 20 76 61 6c 75 65 20 28 69 6e 74 65 67 65 72  o value (integer
1a8d0 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65 61 6c   value 0 or real
1a8e0 20 0a 76 61 6c 75 65 20 30 2e 30 29 20 69 73 20   .value 0.0) is 
1a8f0 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65  considered to be
1a900 20 66 61 6c 73 65 2e 20 20 41 20 4e 55 4c 4c 20   false.  A NULL 
1a910 76 61 6c 75 65 20 69 73 20 73 74 69 6c 6c 20 4e  value is still N
1a920 55 4c 4c 2e 0a 41 6c 6c 20 6f 74 68 65 72 20 76  ULL..All other v
1a930 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64  alues are consid
1a940 65 72 65 64 20 74 72 75 65 2e 29 5e 0a 0a 3c 70  ered true.)^..<p
1a950 3e 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  >^(For example, 
1a960 74 68 65 20 76 61 6c 75 65 73 20 4e 55 4c 4c 2c  the values NULL,
1a970 20 30 2e 30 2c 20 30 2c 20 27 65 6e 67 6c 69 73   0.0, 0, 'englis
1a980 68 27 20 61 6e 64 20 27 30 27 20 61 72 65 20 61  h' and '0' are a
1a990 6c 6c 20 63 6f 6e 73 69 64 65 72 65 64 0a 74 6f  ll considered.to
1a9a0 20 62 65 20 66 61 6c 73 65 2e 29 5e 20 5e 28 56   be false.)^ ^(V
1a9b0 61 6c 75 65 73 20 31 2c 20 31 2e 30 2c 20 30 2e  alues 1, 1.0, 0.
1a9c0 31 2c 20 2d 30 2e 31 20 61 6e 64 20 27 31 65 6e  1, -0.1 and '1en
1a9d0 67 6c 69 73 68 27 20 61 72 65 20 63 6f 6e 73 69  glish' are consi
1a9e0 64 65 72 65 64 20 74 6f 20 0a 62 65 20 74 72 75  dered to .be tru
1a9f0 65 2e 29 5e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69  e.)^..<p>Beginni
1aa00 6e 67 20 77 69 74 68 20 53 51 4c 69 74 65 20 33  ng with SQLite 3
1aa10 2e 32 33 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33  .23.0 ([dateof:3
1aa20 2e 32 33 2e 30 5d 29 2c 20 53 51 4c 69 74 65 20  .23.0]), SQLite 
1aa30 72 65 63 6f 67 6e 69 7a 65 73 20 74 68 65 0a 69  recognizes the.i
1aa40 64 65 6e 74 69 66 69 65 72 73 20 22 54 52 55 45  dentifiers "TRUE
1aa50 22 20 61 6e 64 20 22 46 41 4c 53 45 22 20 61 73  " and "FALSE" as
1aa60 20 62 6f 6f 6c 65 61 6e 20 6c 69 74 65 72 61 6c   boolean literal
1aa70 73 2c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  s, if and only i
1aa80 66 20 74 68 6f 73 65 0a 69 64 65 6e 74 69 66 69  f those.identifi
1aa90 65 72 73 20 61 72 65 20 6e 6f 74 20 61 6c 72 65  ers are not alre
1aaa0 61 64 79 20 75 73 65 64 20 66 6f 72 20 73 6f 6d  ady used for som
1aab0 65 20 6f 74 68 65 72 20 6d 65 61 6e 69 6e 67 2e  e other meaning.
1aac0 20 20 49 66 20 74 68 65 72 65 20 61 6c 72 65 61    If there alrea
1aad0 64 79 0a 65 78 69 73 74 73 20 63 6f 6c 75 6d 6e  dy.exists column
1aae0 73 20 6f 72 20 74 61 62 6c 65 73 20 6f 72 20 6f  s or tables or o
1aaf0 74 68 65 72 20 6f 62 6a 65 63 74 73 20 6e 61 6d  ther objects nam
1ab00 65 64 20 54 52 55 45 20 6f 72 20 46 41 4c 53 45  ed TRUE or FALSE
1ab10 2c 20 74 68 65 6e 20 66 6f 72 0a 74 68 65 20 73  , then for.the s
1ab20 61 6b 65 20 6f 66 20 62 61 63 6b 77 61 72 64 73  ake of backwards
1ab30 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c 20   compatibility, 
1ab40 74 68 65 20 54 52 55 45 20 61 6e 64 20 46 41 4c  the TRUE and FAL
1ab50 53 45 20 69 64 65 6e 74 69 66 69 65 72 73 20 72  SE identifiers r
1ab60 65 66 65 72 0a 74 6f 20 74 68 6f 73 65 20 6f 74  efer.to those ot
1ab70 68 65 72 20 6f 62 6a 65 63 74 73 2c 20 6e 6f 74  her objects, not
1ab80 20 74 6f 20 74 68 65 20 62 6f 6f 6c 65 61 6e 20   to the boolean 
1ab90 76 61 6c 75 65 73 2e 0a 0a 3c 70 3e 54 68 65 20  values...<p>The 
1aba0 62 6f 6f 6c 65 61 6e 20 69 64 65 6e 74 69 66 69  boolean identifi
1abb0 65 72 73 20 54 52 55 45 20 61 6e 64 20 46 41 4c  ers TRUE and FAL
1abc0 53 45 20 61 72 65 20 75 73 75 61 6c 6c 79 20 6a  SE are usually j
1abd0 75 73 74 20 61 6c 69 61 73 65 73 20 66 6f 72 0a  ust aliases for.
1abe0 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
1abf0 65 73 20 31 20 61 6e 64 20 30 2c 20 72 65 73 70  es 1 and 0, resp
1ac00 65 63 74 69 76 65 6c 79 2e 20 20 48 6f 77 65 76  ectively.  Howev
1ac10 65 72 2c 20 69 66 20 54 52 55 45 20 6f 72 20 46  er, if TRUE or F
1ac20 41 4c 53 45 0a 6f 63 63 75 72 20 6f 6e 20 74 68  ALSE.occur on th
1ac30 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64  e right-hand sid
1ac40 65 20 6f 66 20 61 6e 20 49 53 20 6f 70 65 72 61  e of an IS opera
1ac50 74 6f 72 2c 20 74 68 65 6e 20 74 68 65 79 20 66  tor, then they f
1ac60 6f 72 6d 20 6e 65 77 0a 75 6e 61 72 79 20 70 6f  orm new.unary po
1ac70 73 74 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20  stfix operators 
1ac80 22 49 53 20 54 52 55 45 22 20 61 6e 64 20 22 49  "IS TRUE" and "I
1ac90 53 20 46 41 4c 53 45 22 20 77 68 69 63 68 20 74  S FALSE" which t
1aca0 65 73 74 20 74 68 65 20 62 6f 6f 6c 65 61 6e 0a  est the boolean.
1acb0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 65  value of the ope
1acc0 72 61 6e 64 20 6f 6e 20 74 68 65 20 6c 65 66 74  rand on the left
1acd0 2e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73  ...<h3>Functions
1ace0 3c 2f 68 33 3e 0a 3c 70 3e 53 51 4c 69 74 65 20  </h3>.<p>SQLite 
1acf0 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 5b 63  supports many [c
1ad00 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 2c  orefunc|simple],
1ad10 20 5b 61 67 67 66 75 6e 63 7c 61 67 67 72 65 67   [aggfunc|aggreg
1ad20 61 74 65 5d 2c 0a 61 6e 64 20 5b 77 69 6e 64 6f  ate],.and [windo
1ad30 77 20 66 75 6e 63 74 69 6f 6e 73 7c 77 69 6e 64  w functions|wind
1ad40 6f 77 5d 0a 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ow].SQL function
1ad50 73 2e 20 20 46 6f 72 20 70 72 65 73 65 6e 74 61  s.  For presenta
1ad60 74 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73  tion purposes, s
1ad70 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20  imple functions 
1ad80 61 72 65 20 66 75 72 74 68 65 72 0a 73 75 62 64  are further.subd
1ad90 69 76 69 64 65 64 20 69 6e 74 6f 20 5b 63 6f 72  ivided into [cor
1ada0 65 66 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e  efunc | core fun
1adb0 63 74 69 6f 6e 73 5d 2c 20 5b 64 61 74 65 66 75  ctions], [datefu
1adc0 6e 63 7c 64 61 74 65 2d 74 69 6d 65 20 66 75 6e  nc|date-time fun
1add0 63 74 69 6f 6e 73 5d 2c 0a 61 6e 64 20 5b 6a 73  ctions],.and [js
1ade0 6f 6e 31 7c 4a 53 4f 4e 20 66 75 6e 63 74 69 6f  on1|JSON functio
1adf0 6e 73 5d 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e  ns]..Application
1ae00 73 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66 75  s can add new fu
1ae10 6e 63 74 69 6f 6e 73 2c 20 77 72 69 74 74 65 6e  nctions, written
1ae20 20 69 6e 20 43 2f 43 2b 2b 2c 20 75 73 69 6e 67   in C/C++, using
1ae30 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 63 72   the.[sqlite3_cr
1ae40 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
1ae50 20 69 6e 74 65 72 66 61 63 65 2e 0a 3c 2f 70 3e   interface..</p>
1ae60 0a 0a 3c 70 3e 5e 49 74 20 69 73 20 70 6f 73 73  ..<p>^It is poss
1ae70 69 62 6c 65 20 74 6f 20 68 61 76 65 20 61 6e 20  ible to have an 
1ae80 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1ae90 6f 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  on with the same
1aea0 20 6e 61 6d 65 20 61 73 20 61 0a 73 69 6d 70 6c   name as a.simpl
1aeb0 65 20 66 75 6e 63 74 69 6f 6e 2c 20 61 73 20 6c  e function, as l
1aec0 6f 6e 67 20 61 73 20 74 68 65 20 6e 75 6d 62 65  ong as the numbe
1aed0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 66  r of arguments f
1aee0 6f 72 20 74 68 65 20 74 77 6f 20 66 6f 72 6d 73  or the two forms
1aef0 20 6f 66 20 74 68 65 0a 66 75 6e 63 74 69 6f 6e   of the.function
1af00 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 20   are different. 
1af10 20 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74   ^For example, t
1af20 68 65 20 5b 61 67 67 5f 6d 61 78 7c 6d 61 78 28  he [agg_max|max(
1af30 29 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  )] function with
1af40 20 61 0a 73 69 6e 67 6c 65 20 61 72 67 75 6d 65   a.single argume
1af50 6e 74 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  nt is an aggrega
1af60 74 65 20 61 6e 64 20 74 68 65 20 5b 6d 61 78 28  te and the [max(
1af70 29 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  )] function with
1af80 20 74 77 6f 20 6f 72 20 6d 6f 72 65 0a 61 72 67   two or more.arg
1af90 75 6d 65 6e 74 73 20 69 73 20 61 20 73 69 6d 70  uments is a simp
1afa0 6c 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a 3c 74  le function...<t
1afb0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
1afc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1afd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1afe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1aff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b000 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 6f 72 65  ##.Section {Core
1b010 20 46 75 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65   Functions} core
1b020 66 75 6e 63 20 7b 2a 63 6f 72 65 66 75 6e 63 7d  func {*corefunc}
1b030 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61  .unset -nocompla
1b040 69 6e 20 63 6f 72 65 66 75 6e 63 73 65 74 0a 70  in corefuncset.p
1b050 72 6f 63 20 66 75 6e 63 64 65 66 20 7b 73 79 6e  roc funcdef {syn
1b060 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73  tax keywords des
1b070 63 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 63 6f  c} {.  global co
1b080 72 65 66 75 6e 63 73 65 74 0a 20 20 72 65 67 65  refuncset.  rege
1b090 78 70 20 7b 5e 5b 61 2d 7a 5f 5d 2b 7d 20 24 73  xp {^[a-z_]+} $s
1b0a0 79 6e 74 61 78 20 62 61 73 65 73 79 6e 74 61 78  yntax basesyntax
1b0b0 0a 20 20 73 65 74 20 63 6f 72 65 66 75 6e 63 73  .  set corefuncs
1b0c0 65 74 28 24 62 61 73 65 73 79 6e 74 61 78 29 20  et($basesyntax) 
1b0d0 5b 6c 69 73 74 20 24 73 79 6e 74 61 78 20 24 6b  [list $syntax $k
1b0e0 65 79 77 6f 72 64 73 20 24 64 65 73 63 5d 0a 7d  eywords $desc].}
1b0f0 0a 66 75 6e 63 64 65 66 20 7b 61 62 73 28 58 29  .funcdef {abs(X)
1b100 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61 62  } {} {.  ^The ab
1b110 73 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  s(X) function re
1b120 74 75 72 6e 73 20 74 68 65 20 61 62 73 6f 6c 75  turns the absolu
1b130 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  te value of the 
1b140 6e 75 6d 65 72 69 63 0a 20 20 61 72 67 75 6d 65  numeric.  argume
1b150 6e 74 20 58 2e 20 20 5e 41 62 73 28 58 29 20 72  nt X.  ^Abs(X) r
1b160 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 58  eturns NULL if X
1b170 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41   is NULL. .  ^(A
1b180 62 73 28 58 29 20 72 65 74 75 72 6e 73 20 30 2e  bs(X) returns 0.
1b190 30 20 69 66 20 58 20 69 73 20 61 20 73 74 72 69  0 if X is a stri
1b1a0 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61  ng or blob.  tha
1b1b0 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  t cannot be conv
1b1c0 65 72 74 65 64 20 74 6f 20 61 20 6e 75 6d 65 72  erted to a numer
1b1d0 69 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66  ic value.)^  ^If
1b1e0 20 58 20 69 73 20 74 68 65 20 0a 20 20 69 6e 74   X is the .  int
1b1f0 65 67 65 72 20 2d 39 32 32 33 33 37 32 30 33 36  eger -9223372036
1b200 38 35 34 37 37 35 38 30 38 20 74 68 65 6e 20 61  854775808 then a
1b210 62 73 28 58 29 20 74 68 72 6f 77 73 20 61 6e 20  bs(X) throws an 
1b220 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
1b230 0a 20 20 65 72 72 6f 72 20 73 69 6e 63 65 20 74  .  error since t
1b240 68 65 72 65 20 69 73 20 6e 6f 20 65 71 75 69 76  here is no equiv
1b250 61 6c 65 6e 74 20 70 6f 73 69 74 69 76 65 20 36  alent positive 6
1b260 34 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65  4-bit two comple
1b270 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66  ment value..}..f
1b280 75 6e 63 64 65 66 20 7b 63 68 61 6e 67 65 73 28  uncdef {changes(
1b290 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63  )} {} {.  ^The c
1b2a0 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
1b2b0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
1b2c0 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65  mber of database
1b2d0 20 72 6f 77 73 20 74 68 61 74 20 77 65 72 65 20   rows that were 
1b2e0 63 68 61 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73  changed.  or ins
1b2f0 65 72 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64  erted or deleted
1b300 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
1b310 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20  ently completed 
1b320 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a  INSERT, DELETE,.
1b330 20 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74    or UPDATE stat
1b340 65 6d 65 6e 74 2c 20 65 78 63 6c 75 73 69 76 65  ement, exclusive
1b350 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 69   of statements i
1b360 6e 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72  n lower-level tr
1b370 69 67 67 65 72 73 2e 0a 20 20 5e 54 68 65 20 63  iggers..  ^The c
1b380 68 61 6e 67 65 73 28 29 20 53 51 4c 20 66 75 6e  hanges() SQL fun
1b390 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
1b3a0 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
1b3b0 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
1b3c0 5d 0a 20 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69  ].  C/C++ functi
1b3d0 6f 6e 20 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c  on and hence fol
1b3e0 6c 6f 77 73 20 74 68 65 20 73 61 6d 65 20 72 75  lows the same ru
1b3f0 6c 65 73 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67  les for counting
1b400 20 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e   changes..}..fun
1b410 63 64 65 66 20 7b 63 68 61 72 28 58 31 2c 58 32  cdef {char(X1,X2
1b420 2c 2e 2e 2e 2c 58 4e 29 7d 20 7b 7d 20 7b 0a 20  ,...,XN)} {} {. 
1b430 20 5e 28 54 68 65 20 63 68 61 72 28 58 31 2c 58   ^(The char(X1,X
1b440 32 2c 2e 2e 2e 2c 58 4e 29 20 66 75 6e 63 74 69  2,...,XN) functi
1b450 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
1b460 69 6e 67 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20  ing composed of 
1b470 63 68 61 72 61 63 74 65 72 73 20 68 61 76 69 6e  characters havin
1b480 67 20 74 68 65 0a 20 20 20 75 6e 69 63 6f 64 65  g the.   unicode
1b490 20 63 6f 64 65 20 70 6f 69 6e 74 20 76 61 6c 75   code point valu
1b4a0 65 73 20 6f 66 20 69 6e 74 65 67 65 72 73 20 58  es of integers X
1b4b0 31 20 74 68 72 6f 75 67 68 20 58 4e 2c 20 72 65  1 through XN, re
1b4c0 73 70 65 63 74 69 76 65 6c 79 2e 29 5e 0a 7d 0a  spectively.)^.}.
1b4d0 0a 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c 65 73  .funcdef {coales
1b4e0 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20  ce(X,Y,...)} {} 
1b4f0 7b 0a 20 20 5e 54 68 65 20 63 6f 61 6c 65 73 63  {.  ^The coalesc
1b500 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  e() function ret
1b510 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69  urns a copy of i
1b520 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c  ts first non-NUL
1b530 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20  L argument, or. 
1b540 20 4e 55 4c 4c 20 69 66 20 61 6c 6c 20 61 72 67   NULL if all arg
1b550 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e  uments are NULL.
1b560 20 20 5e 43 6f 61 6c 65 73 63 65 28 29 20 6d 75    ^Coalesce() mu
1b570 73 74 20 68 61 76 65 20 61 74 20 6c 65 61 73 74  st have at least
1b580 20 0a 20 20 32 20 61 72 67 75 6d 65 6e 74 73 2e   .  2 arguments.
1b590 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 6c 6f  .}..funcdef {glo
1b5a0 62 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  b(X,Y)} {} {.  ^
1b5b0 54 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75  The glob(X,Y) fu
1b5c0 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61  nction is equiva
1b5d0 6c 65 6e 74 20 74 6f 20 74 68 65 0a 20 20 65 78  lent to the.  ex
1b5e0 70 72 65 73 73 69 6f 6e 20 22 3c 62 3e 59 20 47  pression "<b>Y G
1b5f0 4c 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20 20 4e 6f  LOB X</b>"..  No
1b600 74 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e  te that the X an
1b610 64 20 59 20 61 72 67 75 6d 65 6e 74 73 20 61 72  d Y arguments ar
1b620 65 20 72 65 76 65 72 73 65 64 20 69 6e 20 74 68  e reversed in th
1b630 65 20 67 6c 6f 62 28 29 20 66 75 6e 63 74 69 6f  e glob() functio
1b640 6e 0a 20 20 72 65 6c 61 74 69 76 65 20 74 6f 20  n.  relative to 
1b650 74 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f 42 5d  the infix [GLOB]
1b660 20 6f 70 65 72 61 74 6f 72 2e 20 20 59 20 69 73   operator.  Y is
1b670 20 74 68 65 20 73 74 72 69 6e 67 20 61 6e 64 20   the string and 
1b680 58 20 69 73 20 74 68 65 0a 20 20 70 61 74 74 65  X is the.  patte
1b690 72 6e 2e 20 20 53 6f 2c 20 66 6f 72 20 65 78 61  rn.  So, for exa
1b6a0 6d 70 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  mple, the follow
1b6b0 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ing expressions 
1b6c0 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a  are equivalent:.
1b6d0 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70    <blockquote><p
1b6e0 72 65 3e 0a 20 20 20 20 20 6e 61 6d 65 20 47 4c  re>.     name GL
1b6f0 4f 42 20 27 2a 68 65 6c 69 75 6d 2a 27 0a 20 20  OB '*helium*'.  
1b700 20 20 20 67 6c 6f 62 28 27 2a 68 65 6c 69 75 6d     glob('*helium
1b710 2a 27 2c 6e 61 6d 65 29 0a 20 20 3c 2f 70 72 65  *',name).  </pre
1b720 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ></blockquote>. 
1b730 20 3c 70 3e 5e 49 66 20 74 68 65 20 5b 73 71 6c   <p>^If the [sql
1b740 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
1b750 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63  tion()] interfac
1b760 65 20 69 73 20 75 73 65 64 20 74 6f 0a 20 20 6f  e is used to.  o
1b770 76 65 72 72 69 64 65 20 74 68 65 20 67 6c 6f 62  verride the glob
1b780 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 77  (X,Y) function w
1b790 69 74 68 20 61 6e 20 61 6c 74 65 72 6e 61 74 69  ith an alternati
1b7a0 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ve implementatio
1b7b0 6e 20 74 68 65 6e 0a 20 20 74 68 65 20 5b 47 4c  n then.  the [GL
1b7c0 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20 77 69 6c  OB] operator wil
1b7d0 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20 61 6c 74  l invoke the alt
1b7e0 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65  ernative impleme
1b7f0 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63  ntation..}..func
1b800 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c 59 29  def {ifnull(X,Y)
1b810 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 66  } {} {.  ^The if
1b820 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20  null() function 
1b830 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f  returns a copy o
1b840 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d  f its first non-
1b850 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f  NULL argument, o
1b860 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62 6f 74 68  r.  NULL if both
1b870 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e   arguments are N
1b880 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28 29 20  ULL.  ^Ifnull() 
1b890 6d 75 73 74 20 68 61 76 65 20 65 78 61 63 74 6c  must have exactl
1b8a0 79 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20  y 2 arguments.. 
1b8b0 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66   ^The ifnull() f
1b8c0 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76  unction is equiv
1b8d0 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61 6c 65 73  alent to [coales
1b8e0 63 65 28 29 5d 20 77 69 74 68 20 74 77 6f 20 61  ce()] with two a
1b8f0 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e  rguments..}..fun
1b900 63 64 65 66 20 7b 69 6e 73 74 72 28 58 2c 59 29  cdef {instr(X,Y)
1b910 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 6e  } {} {.  ^The in
1b920 73 74 72 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  str(X,Y) functio
1b930 6e 20 66 69 6e 64 73 20 74 68 65 20 66 69 72 73  n finds the firs
1b940 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20  t occurrence of 
1b950 73 74 72 69 6e 67 20 59 20 77 69 74 68 69 6e 20  string Y within 
1b960 0a 20 20 73 74 72 69 6e 67 20 58 20 61 6e 64 20  .  string X and 
1b970 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
1b980 65 72 20 6f 66 20 70 72 69 6f 72 20 63 68 61 72  er of prior char
1b990 61 63 74 65 72 73 20 70 6c 75 73 20 31 2c 20 6f  acters plus 1, o
1b9a0 72 20 30 20 69 66 0a 20 20 59 20 69 73 20 6e 6f  r 0 if.  Y is no
1b9b0 77 68 65 72 65 20 66 6f 75 6e 64 20 77 69 74 68  where found with
1b9c0 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c 20 69 66 20  in X..  ^Or, if 
1b9d0 58 20 61 6e 64 20 59 20 61 72 65 20 62 6f 74 68  X and Y are both
1b9e0 20 42 4c 4f 42 73 2c 20 74 68 65 6e 20 69 6e 73   BLOBs, then ins
1b9f0 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20  tr(X,Y) returns 
1ba00 6f 6e 65 0a 20 20 6d 6f 72 65 20 74 68 61 6e 20  one.  more than 
1ba10 74 68 65 20 6e 75 6d 62 65 72 20 62 79 74 65 73  the number bytes
1ba20 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69   prior to the fi
1ba30 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f  rst occurrence o
1ba40 66 20 59 2c 20 6f 72 20 30 20 69 66 0a 20 20 59  f Y, or 0 if.  Y
1ba50 20 64 6f 65 73 20 6e 6f 74 20 6f 63 63 75 72 20   does not occur 
1ba60 61 6e 79 77 68 65 72 65 20 77 69 74 68 69 6e 20  anywhere within 
1ba70 58 2e 0a 20 20 5e 49 66 20 62 6f 74 68 20 61 72  X..  ^If both ar
1ba80 67 75 6d 65 6e 74 73 20 58 20 61 6e 64 20 59 20  guments X and Y 
1ba90 74 6f 20 69 6e 73 74 72 28 58 2c 59 29 20 61 72  to instr(X,Y) ar
1baa0 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 6e 64 20 61  e non-NULL and a
1bab0 72 65 20 6e 6f 74 20 42 4c 4f 42 73 0a 20 20 74  re not BLOBs.  t
1bac0 68 65 6e 20 62 6f 74 68 20 61 72 65 20 69 6e 74  hen both are int
1bad0 65 72 70 72 65 74 65 64 20 61 73 20 73 74 72 69  erpreted as stri
1bae0 6e 67 73 2e 0a 20 20 5e 49 66 20 65 69 74 68 65  ngs..  ^If eithe
1baf0 72 20 58 20 6f 72 20 59 20 61 72 65 20 4e 55 4c  r X or Y are NUL
1bb00 4c 20 69 6e 20 69 6e 73 74 72 28 58 2c 59 29 20  L in instr(X,Y) 
1bb10 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
1bb20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75 6e 63  is NULL..}..func
1bb30 64 65 66 20 7b 68 65 78 28 58 29 7d 20 7b 7d 20  def {hex(X)} {} 
1bb40 7b 0a 20 20 5e 54 68 65 20 68 65 78 28 29 20 66  {.  ^The hex() f
1bb50 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72 70 72 65  unction interpre
1bb60 74 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20  ts its argument 
1bb70 61 73 20 61 20 42 4c 4f 42 20 61 6e 64 20 72 65  as a BLOB and re
1bb80 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67  turns.  a string
1bb90 20 77 68 69 63 68 20 69 73 20 74 68 65 20 75 70   which is the up
1bba0 70 65 72 2d 63 61 73 65 20 68 65 78 61 64 65 63  per-case hexadec
1bbb0 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67 20 6f  imal rendering o
1bbc0 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
1bbd0 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a  .  that blob..}.
1bbe0 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73 74 5f 69  .funcdef {last_i
1bbf0 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 7d 20 7b  nsert_rowid()} {
1bc00 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f  } {.  ^The last_
1bc10 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
1bc20 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1bc30 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20 20 6f 66  the [ROWID].  of
1bc40 20 74 68 65 20 6c 61 73 74 20 72 6f 77 20 69 6e   the last row in
1bc50 73 65 72 74 20 66 72 6f 6d 20 74 68 65 20 64 61  sert from the da
1bc60 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
1bc70 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b 65 64 20  n which invoked 
1bc80 74 68 65 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 0a  the.  function..
1bc90 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65    ^The last_inse
1bca0 72 74 5f 72 6f 77 69 64 28 29 20 53 51 4c 20 66  rt_rowid() SQL f
1bcb0 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
1bcc0 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a  pper around the.
1bcd0 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f    [sqlite3_last_
1bce0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 5d 20  insert_rowid()] 
1bcf0 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20  C/C++ interface 
1bd00 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e  function..}..fun
1bd10 63 64 65 66 20 7b 6c 65 6e 67 74 68 28 58 29 7d  cdef {length(X)}
1bd20 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72 20 61 20 73   {} {.  ^For a s
1bd30 74 72 69 6e 67 20 76 61 6c 75 65 20 58 2c 20 74  tring value X, t
1bd40 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e  he length(X) fun
1bd50 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1bd60 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a 20 20 63  e number of .  c
1bd70 68 61 72 61 63 74 65 72 73 20 28 6e 6f 74 20 62  haracters (not b
1bd80 79 74 65 73 29 20 69 6e 20 58 20 70 72 69 6f 72  ytes) in X prior
1bd90 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55   to the first NU
1bda0 4c 20 63 68 61 72 61 63 74 65 72 2e 0a 20 20 53  L character..  S
1bdb0 69 6e 63 65 20 53 51 4c 69 74 65 20 73 74 72 69  ince SQLite stri
1bdc0 6e 67 73 20 64 6f 20 6e 6f 74 20 6e 6f 72 6d 61  ngs do not norma
1bdd0 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 20  lly contain NUL 
1bde0 63 68 61 72 61 63 74 65 72 73 2c 20 74 68 65 20  characters, the 
1bdf0 6c 65 6e 67 74 68 28 58 29 0a 20 20 66 75 6e 63  length(X).  func
1be00 74 69 6f 6e 20 77 69 6c 6c 20 75 73 75 61 6c 6c  tion will usuall
1be10 79 20 72 65 74 75 72 6e 20 74 68 65 20 74 6f 74  y return the tot
1be20 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61  al number of cha
1be30 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 73  racters in the s
1be40 74 72 69 6e 67 20 58 2e 0a 20 20 5e 46 6f 72 20  tring X..  ^For 
1be50 61 20 62 6c 6f 62 20 76 61 6c 75 65 20 58 2c 20  a blob value X, 
1be60 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75 72 6e  length(X) return
1be70 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1be80 62 79 74 65 73 20 69 6e 20 74 68 65 20 62 6c 6f  bytes in the blo
1be90 62 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 4e 55  b..  ^If X is NU
1bea0 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58  LL then length(X
1beb0 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e 49 66  ) is NULL..  ^If
1bec0 20 58 20 69 73 20 6e 75 6d 65 72 69 63 20 74 68   X is numeric th
1bed0 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74  en length(X) ret
1bee0 75 72 6e 73 20 74 68 65 20 6c 65 6e 67 74 68 20  urns the length 
1bef0 6f 66 20 61 20 73 74 72 69 6e 67 0a 20 20 72 65  of a string.  re
1bf00 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
1bf10 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  X..}..funcdef {l
1bf20 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65 28 58 2c  ike(X,Y) like(X,
1bf30 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  Y,Z)} {} {.  ^Th
1bf40 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f  e like() functio
1bf50 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  n is used to imp
1bf60 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 22 3c 62  lement the.  "<b
1bf70 3e 59 20 4c 49 4b 45 20 58 20 26 23 39 31 3b 45  >Y LIKE X &#91;E
1bf80 53 43 41 50 45 20 5a 26 23 39 33 3b 3c 2f 62 3e  SCAPE Z&#93;</b>
1bf90 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 0a 20  " expression. . 
1bfa0 20 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61   ^If the optiona
1bfb0 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20  l ESCAPE clause 
1bfc0 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e  is present, then
1bfd0 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75   the.  like() fu
1bfe0 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f 6b 65  nction is invoke
1bff0 64 20 77 69 74 68 20 74 68 72 65 65 20 61 72 67  d with three arg
1c000 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68 65 72 77  uments.  ^Otherw
1c010 69 73 65 2c 20 69 74 20 69 73 0a 20 20 69 6e 76  ise, it is.  inv
1c020 6f 6b 65 64 20 77 69 74 68 20 74 77 6f 20 61 72  oked with two ar
1c030 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20 4e 6f  guments only. No
1c040 74 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e  te that the X an
1c050 64 20 59 20 70 61 72 61 6d 65 74 65 72 73 20 61  d Y parameters a
1c060 72 65 0a 20 20 72 65 76 65 72 73 65 64 20 69 6e  re.  reversed in
1c070 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63   the like() func
1c080 74 69 6f 6e 20 72 65 6c 61 74 69 76 65 20 74 6f  tion relative to
1c090 20 74 68 65 20 69 6e 66 69 78 20 5b 4c 49 4b 45   the infix [LIKE
1c0a0 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 58 20  ] operator..  X 
1c0b0 69 73 20 74 68 65 20 70 61 74 74 65 72 6e 20 61  is the pattern a
1c0c0 6e 64 20 59 20 69 73 20 74 68 65 20 73 74 72 69  nd Y is the stri
1c0d0 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69  ng to match agai
1c0e0 6e 73 74 20 74 68 61 74 20 70 61 74 74 65 72 6e  nst that pattern
1c0f0 2e 0a 20 20 48 65 6e 63 65 2c 20 74 68 65 20 66  ..  Hence, the f
1c100 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65 73 73  ollowing express
1c110 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76 61 6c  ions are equival
1c120 65 6e 74 3a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f  ent:.  <blockquo
1c130 74 65 3e 3c 70 72 65 3e 0a 20 20 20 20 20 6e 61  te><pre>.     na
1c140 6d 65 20 4c 49 4b 45 20 27 25 6e 65 6f 6e 25 27  me LIKE '%neon%'
1c150 0a 20 20 20 20 20 6c 69 6b 65 28 27 25 6e 65 6f  .     like('%neo
1c160 6e 25 27 2c 6e 61 6d 65 29 0a 20 20 3c 2f 70 72  n%',name).  </pr
1c170 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
1c180 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f    ^The [sqlite3_
1c190 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
1c1a0 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e  )] interface can
1c1b0 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72   be used to over
1c1c0 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28  ride the.  like(
1c1d0 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74  ) function and t
1c1e0 68 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68  hereby change th
1c1f0 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  e operation of t
1c200 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72  he.  [LIKE] oper
1c210 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72  ator.  When over
1c220 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28  riding the like(
1c230 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d  ) function, it m
1c240 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a  ay be important.
1c250 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f    to override bo
1c260 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74  th the two and t
1c270 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65  hree argument ve
1c280 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69  rsions of the li
1c290 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e  ke() .  function
1c2a0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66  . Otherwise, dif
1c2b0 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20  ferent code may 
1c2c0 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70  be called to imp
1c2d0 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49  lement the.  [LI
1c2e0 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70  KE] operator dep
1c2f0 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
1c300 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41  r or not an ESCA
1c310 50 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20  PE clause was . 
1c320 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 0a   specified..}...
1c330 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 69 68  funcdef {likelih
1c340 6f 6f 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  ood(X,Y)} {} {. 
1c350 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64   ^The likelihood
1c360 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
1c370 65 74 75 72 6e 73 20 61 72 67 75 6d 65 6e 74 20  eturns argument 
1c380 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e  X unchanged..  ^
1c390 28 54 68 65 20 76 61 6c 75 65 20 59 20 69 6e 20  (The value Y in 
1c3a0 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20  likelihood(X,Y) 
1c3b0 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69  must be a floati
1c3c0 6e 67 20 70 6f 69 6e 74 20 63 6f 6e 73 74 61 6e  ng point constan
1c3d0 74 0a 20 20 62 65 74 77 65 65 6e 20 30 2e 30 20  t.  between 0.0 
1c3e0 61 6e 64 20 31 2e 30 2c 20 69 6e 63 6c 75 73 69  and 1.0, inclusi
1c3f0 76 65 2e 29 5e 0a 20 20 5e 54 68 65 20 6c 69 6b  ve.)^.  ^The lik
1c400 65 6c 69 68 6f 6f 64 28 58 29 20 66 75 6e 63 74  elihood(X) funct
1c410 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74  ion is a no-op t
1c420 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e  hat the code gen
1c430 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a  erator.  optimiz
1c440 65 73 20 61 77 61 79 20 73 6f 20 74 68 61 74 20  es away so that 
1c450 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43  it consumes no C
1c460 50 55 20 63 79 63 6c 65 73 20 64 75 72 69 6e 67  PU cycles during
1c470 20 72 75 6e 2d 74 69 6d 65 0a 20 20 28 74 68 61   run-time.  (tha
1c480 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c  t is, during cal
1c490 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73  ls to [sqlite3_s
1c4a0 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20  tep()])..  ^The 
1c4b0 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20 6c  purpose of the l
1c4c0 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66  ikelihood(X,Y) f
1c4d0 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72  unction is to pr
1c4e0 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74  ovide a hint.  t
1c4f0 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  o the query plan
1c500 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67  ner that the arg
1c510 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f  ument X is a boo
1c520 6c 65 61 6e 20 74 68 61 74 20 69 73 0a 20 20 74  lean that is.  t
1c530 72 75 65 20 77 69 74 68 20 61 20 70 72 6f 62 61  rue with a proba
1c540 62 69 6c 69 74 79 20 6f 66 20 61 70 70 72 6f 78  bility of approx
1c550 69 6d 61 74 65 6c 79 20 59 2e 0a 20 20 5e 28 54  imately Y..  ^(T
1c560 68 65 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d  he [unlikely(X)]
1c570 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 68 6f   function is sho
1c580 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b 65  rt-hand for like
1c590 6c 69 68 6f 6f 64 28 58 2c 30 2e 30 36 32 35 29  lihood(X,0.0625)
1c5a0 2e 29 5e 0a 20 20 5e 28 54 68 65 20 5b 6c 69 6b  .)^.  ^(The [lik
1c5b0 65 6c 79 28 58 29 5d 20 66 75 6e 63 74 69 6f 6e  ely(X)] function
1c5c0 20 69 73 20 73 68 6f 72 74 2d 68 61 6e 64 20 66   is short-hand f
1c5d0 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c  or likelihood(X,
1c5e0 30 2e 39 33 37 35 29 2e 29 5e 0a 7d 0a 0a 66 75  0.9375).)^.}..fu
1c5f0 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 79 28 58 29  ncdef {likely(X)
1c600 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69  } {} {.  ^The li
1c610 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e  kely(X) function
1c620 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
1c630 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65  ument X unchange
1c640 64 2e 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 79  d..  ^The likely
1c650 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  (X) function is 
1c660 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65  a no-op that the
1c670 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a   code generator.
1c680 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79    optimizes away
1c690 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73   so that it cons
1c6a0 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c  umes no CPU cycl
1c6b0 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65  es at.  run-time
1c6c0 20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e   (that is, durin
1c6d0 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69  g calls to [sqli
1c6e0 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20  te3_step()])..  
1c6f0 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20  ^The purpose of 
1c700 74 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75  the likely(X) fu
1c710 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f  nction is to pro
1c720 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f  vide a hint.  to
1c730 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e   the query plann
1c740 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67 75  er that the argu
1c750 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c  ment X is a bool
1c760 65 61 6e 20 76 61 6c 75 65 0a 20 20 74 68 61 74  ean value.  that
1c770 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65   is usually true
1c780 2e 20 5e 28 54 68 65 20 6c 69 6b 65 6c 79 28 58  . ^(The likely(X
1c790 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71  ) function is eq
1c7a0 75 69 76 61 6c 65 6e 74 0a 20 20 74 6f 20 5b 6c  uivalent.  to [l
1c7b0 69 6b 65 6c 69 68 6f 6f 64 5d 28 58 2c 30 2e 39  ikelihood](X,0.9
1c7c0 33 37 35 29 2e 29 5e 20 53 65 65 20 61 6c 73 6f  375).)^ See also
1c7d0 3a 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d 2e  : [unlikely(X)].
1c7e0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 61  .}..funcdef {loa
1c7f0 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 29 20 6c  d_extension(X) l
1c800 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c  oad_extension(X,
1c810 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1c820 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58  load_extension(X
1c830 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 6c 6f 61  ,Y) function loa
1c840 64 73 20 5b 53 51 4c 69 74 65 20 65 78 74 65 6e  ds [SQLite exten
1c850 73 69 6f 6e 73 5d 20 6f 75 74 20 6f 66 20 74 68  sions] out of th
1c860 65 20 73 68 61 72 65 64 0a 20 20 6c 69 62 72 61  e shared.  libra
1c870 72 79 20 66 69 6c 65 20 6e 61 6d 65 64 20 58 20  ry file named X 
1c880 75 73 69 6e 67 20 74 68 65 20 65 6e 74 72 79 20  using the entry 
1c890 70 6f 69 6e 74 20 59 2e 20 20 5e 54 68 65 20 72  point Y.  ^The r
1c8a0 65 73 75 6c 74 20 6f 66 20 6c 6f 61 64 5f 65 78  esult of load_ex
1c8b0 74 65 6e 73 69 6f 6e 28 29 0a 20 20 69 73 20 61  tension().  is a
1c8c0 6c 77 61 79 73 20 61 20 4e 55 4c 4c 2e 20 20 5e  lways a NULL.  ^
1c8d0 49 66 20 59 20 69 73 20 6f 6d 69 74 74 65 64 20  If Y is omitted 
1c8e0 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74  then the default
1c8f0 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 6e 61 6d   entry point nam
1c900 65 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 54 68  e is used..  ^Th
1c910 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
1c920 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 61 69 73  () function rais
1c930 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  es an exception 
1c940 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  if the extension
1c950 20 66 61 69 6c 73 20 74 6f 0a 20 20 6c 6f 61 64   fails to.  load
1c960 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 20 63   or initialize c
1c970 6f 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70 3e  orrectly...  <p>
1c980 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  ^The load_extens
1c990 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 77  ion() function w
1c9a0 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 20  ill fail if the 
1c9b0 65 78 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d 70  extension attemp
1c9c0 74 73 20 74 6f 20 0a 20 20 6d 6f 64 69 66 79 20  ts to .  modify 
1c9d0 6f 72 20 64 65 6c 65 74 65 20 61 6e 20 53 51 4c  or delete an SQL
1c9e0 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 63 6f 6c   function or col
1c9f0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
1ca00 20 20 5e 54 68 65 0a 20 20 65 78 74 65 6e 73 69    ^The.  extensi
1ca10 6f 6e 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66  on can add new f
1ca20 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c  unctions or coll
1ca30 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c  ating sequences,
1ca40 20 62 75 74 20 63 61 6e 6e 6f 74 0a 20 20 6d 6f   but cannot.  mo
1ca50 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 65  dify or delete e
1ca60 78 69 73 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  xisting function
1ca70 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  s or collating s
1ca80 65 71 75 65 6e 63 65 73 20 62 65 63 61 75 73 65  equences because
1ca90 0a 20 20 74 68 6f 73 65 20 66 75 6e 63 74 69 6f  .  those functio
1caa0 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61 74  ns and/or collat
1cab0 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 6d 69  ing sequences mi
1cac0 67 68 74 20 62 65 20 75 73 65 64 20 65 6c 73 65  ght be used else
1cad0 77 68 65 72 65 0a 20 20 69 6e 20 74 68 65 20 63  where.  in the c
1cae0 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67  urrently running
1caf0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20   SQL statement. 
1cb00 20 54 6f 20 6c 6f 61 64 20 61 6e 20 65 78 74 65   To load an exte
1cb10 6e 73 69 6f 6e 20 74 68 61 74 0a 20 20 63 68 61  nsion that.  cha
1cb20 6e 67 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  nges or deletes 
1cb30 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c  functions or col
1cb40 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
1cb50 2c 20 75 73 65 20 74 68 65 0a 20 20 5b 73 71 6c  , use the.  [sql
1cb60 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  ite3_load_extens
1cb70 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67  ion()] C-languag
1cb80 65 20 41 50 49 2e 3c 2f 70 3e 0a 0a 20 20 3c 70  e API.</p>..  <p
1cb90 3e 46 6f 72 20 73 65 63 75 72 69 74 79 20 72 65  >For security re
1cba0 61 73 6f 6e 73 2c 20 65 78 74 65 6e 73 69 6f 6e  asons, extension
1cbb0 20 6c 6f 61 64 65 64 20 69 73 20 74 75 72 6e 65   loaded is turne
1cbc0 64 20 6f 66 66 20 62 79 20 64 65 66 61 75 6c 74  d off by default
1cbd0 20 61 6e 64 20 6d 75 73 74 0a 20 20 62 65 20 65   and must.  be e
1cbe0 6e 61 62 6c 65 64 20 62 79 20 61 20 70 72 69 6f  nabled by a prio
1cbf0 72 20 63 61 6c 6c 20 74 6f 20 5b 73 71 6c 69 74  r call to [sqlit
1cc00 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65  e3_enable_load_e
1cc10 78 74 65 6e 73 69 6f 6e 28 29 5d 2e 3c 2f 70 3e  xtension()].</p>
1cc20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77  .}..funcdef {low
1cc30 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  er(X)} {} {.  ^T
1cc40 68 65 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63  he lower(X) func
1cc50 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63  tion returns a c
1cc60 6f 70 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20  opy of string X 
1cc70 77 69 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63  with all ASCII c
1cc80 68 61 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76  haracters.  conv
1cc90 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63  erted to lower c
1cca0 61 73 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75  ase.  ^The defau
1ccb0 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65  lt built-in lowe
1ccc0 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72  r() function wor
1ccd0 6b 73 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63  ks.  for ASCII c
1cce0 68 61 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20  haracters only. 
1ccf0 20 54 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76   To do case conv
1cd00 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41  ersions on non-A
1cd10 53 43 49 49 0a 20 20 63 68 61 72 61 63 74 65 72  SCII.  character
1cd20 73 2c 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20  s, load the ICU 
1cd30 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75  extension..}..fu
1cd40 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20  ncdef {ltrim(X) 
1cd50 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b  ltrim(X,Y)} {} {
1cd60 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c  .  ^The ltrim(X,
1cd70 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
1cd80 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
1cd90 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
1cda0 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
1cdb0 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
1cdc0 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74  pear in Y from t
1cdd0 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20  he left side of 
1cde0 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  X..  ^If the Y a
1cdf0 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
1ce00 65 64 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d  ed, ltrim(X) rem
1ce10 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d  oves spaces from
1ce20 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20   the left side. 
1ce30 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
1ce40 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d  f {max(X,Y,...)}
1ce50 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a   {*maxCoreFunc *
1ce60 6d 61 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66  max {max() SQL f
1ce70 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1ce80 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
1ce90 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e  t max() function
1cea0 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
1ceb0 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a  ument with the .
1cec0 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c    maximum value,
1ced0 20 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20   or return NULL 
1cee0 69 66 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20  if any argument 
1cef0 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65  is NULL. .  ^The
1cf00 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
1cf10 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73  max() function s
1cf20 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75  earches its argu
1cf30 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20  ments from left 
1cf40 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61  to right.  for a
1cf50 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  n argument that 
1cf60 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
1cf70 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  ing function and
1cf80 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61   uses that colla
1cf90 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20  ting.  function 
1cfa0 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63  for all string c
1cfb0 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66  omparisons.  ^If
1cfc0 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67   none of the arg
1cfd0 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a  uments to max().
1cfe0 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61    define a colla
1cff0 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74  ting function, t
1d000 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63  hen the BINARY c
1d010 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1d020 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 28 4e  n is used..  ^(N
1d030 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28  ote that <b>max(
1d040 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c  )</b> is a simpl
1d050 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a  e function when.
1d060 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f    it has 2 or mo
1d070 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74  re arguments but
1d080 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 0a   operates as an.
1d090 20 20 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c 20    [maxAggFunc | 
1d0a0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1d0b0 6f 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c  on] if given onl
1d0c0 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  y a single argum
1d0d0 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65  ent.)^.}..funcde
1d0e0 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d  f {min(X,Y,...)}
1d0f0 20 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20 2a   {*minCoreFunc *
1d100 6d 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20 66  min {min() SQL f
1d110 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1d120 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
1d130 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e  t min() function
1d140 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
1d150 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 0a 20  ument with the. 
1d160 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 0a   minimum value..
1d170 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67    ^The multi-arg
1d180 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63  ument min() func
1d190 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74  tion searches it
1d1a0 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d  s arguments from
1d1b0 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20   left to right. 
1d1c0 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74   for an argument
1d1d0 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 20   that defines a 
1d1e0 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
1d1f0 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74  on and uses that
1d200 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e   collating.  fun
1d210 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74  ction for all st
1d220 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73  ring comparisons
1d230 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .  ^If none of t
1d240 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  he arguments to 
1d250 6d 69 6e 28 29 0a 20 20 64 65 66 69 6e 65 20 61  min().  define a
1d260 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
1d270 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49  ion, then the BI
1d280 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66  NARY collating f
1d290 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e  unction is used.
1d2a0 0a 20 20 5e 28 4e 6f 74 65 20 74 68 61 74 20 3c  .  ^(Note that <
1d2b0 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61  b>min()</b> is a
1d2c0 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
1d2d0 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32   when.  it has 2
1d2e0 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e   or more argumen
1d2f0 74 73 20 62 75 74 20 6f 70 65 72 61 74 65 73 20  ts but operates 
1d300 61 73 20 61 6e 20 0a 20 20 5b 6d 69 6e 41 67 67  as an .  [minAgg
1d310 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65  Func | aggregate
1d320 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69   function] if gi
1d330 76 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e  ven.  only a sin
1d340 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e 0a  gle argument.)^.
1d350 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c  }..funcdef {null
1d360 69 66 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  if(X,Y)} {} {.  
1d370 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29  ^The nullif(X,Y)
1d380 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1d390 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75  s its first argu
1d3a0 6d 65 6e 74 20 69 66 20 74 68 65 20 61 72 67 75  ment if the argu
1d3b0 6d 65 6e 74 73 20 61 72 65 0a 20 20 64 69 66 66  ments are.  diff
1d3c0 65 72 65 6e 74 20 61 6e 64 20 4e 55 4c 4c 20 69  erent and NULL i
1d3d0 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20  f the arguments 
1d3e0 61 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20 5e  are the same.  ^
1d3f0 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20  The nullif(X,Y) 
1d400 66 75 6e 63 74 69 6f 6e 0a 20 20 73 65 61 72 63  function.  searc
1d410 68 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74  hes its argument
1d420 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  s from left to r
1d430 69 67 68 74 20 66 6f 72 20 61 6e 20 61 72 67 75  ight for an argu
1d440 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65  ment that define
1d450 73 20 61 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20  s a.  collating 
1d460 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65  function and use
1d470 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67  s that collating
1d480 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c   function for al
1d490 6c 20 73 74 72 69 6e 67 0a 20 20 63 6f 6d 70 61  l string.  compa
1d4a0 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 65 69  risons.  ^If nei
1d4b0 74 68 65 72 20 61 72 67 75 6d 65 6e 74 20 74 6f  ther argument to
1d4c0 20 6e 75 6c 6c 69 66 28 29 20 64 65 66 69 6e 65   nullif() define
1d4d0 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  s a collating fu
1d4e0 6e 63 74 69 6f 6e 0a 20 20 74 68 65 6e 20 74 68  nction.  then th
1d4f0 65 20 42 49 4e 41 52 59 20 69 73 20 75 73 65 64  e BINARY is used
1d500 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 70 72  ..}..funcdef {pr
1d510 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29  intf(FORMAT,...)
1d520 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20 70  } {} {.  ^(The p
1d530 72 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e  rintf(FORMAT,...
1d540 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77  ) SQL function w
1d550 6f 72 6b 73 20 6c 69 6b 65 20 74 68 65 20 5b 73  orks like the [s
1d560 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29  qlite3_mprintf()
1d570 5d 20 43 2d 6c 61 6e 67 75 61 67 65 0a 20 20 66  ] C-language.  f
1d580 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 20  unction and the 
1d590 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f  printf() functio
1d5a0 6e 20 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64  n from the stand
1d5b0 61 72 64 20 43 20 6c 69 62 72 61 72 79 2e 29 5e  ard C library.)^
1d5c0 0a 20 20 54 68 65 20 66 69 72 73 74 20 61 72 67  .  The first arg
1d5d0 75 6d 65 6e 74 20 69 73 20 61 20 66 6f 72 6d 61  ument is a forma
1d5e0 74 20 73 74 72 69 6e 67 20 74 68 61 74 20 73 70  t string that sp
1d5f0 65 63 69 66 69 65 73 20 68 6f 77 20 74 6f 20 63  ecifies how to c
1d600 6f 6e 73 74 72 75 63 74 20 74 68 65 20 6f 75 74  onstruct the out
1d610 70 75 74 0a 20 20 73 74 72 69 6e 67 20 75 73 69  put.  string usi
1d620 6e 67 20 76 61 6c 75 65 73 20 74 61 6b 65 6e 20  ng values taken 
1d630 66 72 6f 6d 20 73 75 62 73 65 71 75 65 6e 74 20  from subsequent 
1d640 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 49 66 20  arguments.  ^If 
1d650 74 68 65 20 46 4f 52 4d 41 54 20 61 72 67 75 6d  the FORMAT argum
1d660 65 6e 74 20 69 73 0a 20 20 6d 69 73 73 69 6e 67  ent is.  missing
1d670 20 6f 72 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   or NULL then th
1d680 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
1d690 2e 20 20 5e 54 68 65 20 25 6e 20 66 6f 72 6d 61  .  ^The %n forma
1d6a0 74 20 69 73 20 73 69 6c 65 6e 74 6c 79 20 69 67  t is silently ig
1d6b0 6e 6f 72 65 64 20 61 6e 64 0a 20 20 64 6f 65 73  nored and.  does
1d6c0 20 6e 6f 74 20 63 6f 6e 73 75 6d 65 20 61 6e 20   not consume an 
1d6d0 61 72 67 75 6d 65 6e 74 2e 20 20 5e 54 68 65 20  argument.  ^The 
1d6e0 25 70 20 66 6f 72 6d 61 74 20 69 73 20 61 6e 20  %p format is an 
1d6f0 61 6c 69 61 73 20 66 6f 72 20 25 58 2e 20 20 5e  alias for %X.  ^
1d700 54 68 65 20 25 7a 20 66 6f 72 6d 61 74 0a 20 20  The %z format.  
1d710 69 73 20 69 6e 74 65 72 63 68 61 6e 67 65 61 62  is interchangeab
1d720 6c 65 20 77 69 74 68 20 25 73 2e 20 20 5e 28 49  le with %s.  ^(I
1d730 66 20 74 68 65 72 65 20 61 72 65 20 74 6f 6f 20  f there are too 
1d740 66 65 77 20 61 72 67 75 6d 65 6e 74 73 20 69 6e  few arguments in
1d750 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6c 69   the argument li
1d760 73 74 2c 0a 20 20 6d 69 73 73 69 6e 67 20 61 72  st,.  missing ar
1d770 67 75 6d 65 6e 74 73 20 61 72 65 20 61 73 73 75  guments are assu
1d780 6d 65 64 20 74 6f 20 68 61 76 65 20 61 20 4e 55  med to have a NU
1d790 4c 4c 20 76 61 6c 75 65 2c 20 77 68 69 63 68 20  LL value, which 
1d7a0 69 73 20 74 72 61 6e 73 6c 61 74 65 64 20 69 6e  is translated in
1d7b0 74 6f 0a 20 20 30 20 6f 72 20 30 2e 30 20 66 6f  to.  0 or 0.0 fo
1d7c0 72 20 6e 75 6d 65 72 69 63 20 66 6f 72 6d 61 74  r numeric format
1d7d0 73 20 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74  s or an empty st
1d7e0 72 69 6e 67 20 66 6f 72 20 25 73 2e 29 5e 20 20  ring for %s.)^  
1d7f0 53 65 65 20 74 68 65 0a 20 20 5b 62 75 69 6c 74  See the.  [built
1d800 2d 69 6e 20 70 72 69 6e 74 66 28 29 5d 20 64 6f  -in printf()] do
1d810 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
1d820 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
1d830 6d 61 74 69 6f 6e 2e 0a 7d 0a 20 20 0a 0a 66 75  mation..}.  ..fu
1d840 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d  ncdef {quote(X)}
1d850 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f   {} {.  ^The quo
1d860 74 65 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  te(X) function r
1d870 65 74 75 72 6e 73 20 74 68 65 20 74 65 78 74 20  eturns the text 
1d880 6f 66 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61  of an SQL litera
1d890 6c 20 77 68 69 63 68 0a 20 20 69 73 20 74 68 65  l which.  is the
1d8a0 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20 61 72   value of its ar
1d8b0 67 75 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20  gument suitable 
1d8c0 66 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69 6e  for inclusion in
1d8d0 74 6f 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  to an SQL statem
1d8e0 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20  ent..  ^Strings 
1d8f0 61 72 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62  are surrounded b
1d900 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20  y single-quotes 
1d910 77 69 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20  with escapes on 
1d920 69 6e 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a  interior quotes.
1d930 20 20 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42    as needed.  ^B
1d940 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64  LOBs are encoded
1d950 20 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20   as hexadecimal 
1d960 6c 69 74 65 72 61 6c 73 2e 0a 20 20 5e 53 74 72  literals..  ^Str
1d970 69 6e 67 73 20 77 69 74 68 20 65 6d 62 65 64 64  ings with embedd
1d980 65 64 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72  ed NUL character
1d990 73 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 70 72  s cannot be repr
1d9a0 65 73 65 6e 74 65 64 20 61 73 20 73 74 72 69 6e  esented as strin
1d9b0 67 0a 20 20 6c 69 74 65 72 61 6c 73 20 69 6e 20  g.  literals in 
1d9c0 53 51 4c 20 61 6e 64 20 68 65 6e 63 65 20 74 68  SQL and hence th
1d9d0 65 20 72 65 74 75 72 6e 65 64 20 73 74 72 69 6e  e returned strin
1d9e0 67 20 6c 69 74 65 72 61 6c 20 69 73 20 74 72 75  g literal is tru
1d9f0 6e 63 61 74 65 64 20 70 72 69 6f 72 0a 20 20 74  ncated prior.  t
1da00 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55 4c 2e  o the first NUL.
1da10 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e  .}..funcdef {ran
1da20 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  dom()} {} {.  ^T
1da30 68 65 20 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63  he random() func
1da40 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 70  tion returns a p
1da50 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74  seudo-random int
1da60 65 67 65 72 0a 20 20 62 65 74 77 65 65 6e 20 2d  eger.  between -
1da70 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
1da80 38 30 38 20 61 6e 64 20 2b 39 32 32 33 33 37 32  808 and +9223372
1da90 30 33 36 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a  036854775807..}.
1daa0 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d  .funcdef {random
1dab0 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20  blob(N)} {} {.  
1dac0 5e 54 68 65 20 72 61 6e 64 6f 6d 62 6c 6f 62 28  ^The randomblob(
1dad0 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  N) function retu
1dae0 72 6e 20 61 6e 20 4e 2d 62 79 74 65 20 62 6c 6f  rn an N-byte blo
1daf0 62 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 73 65  b containing pse
1db00 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62 79 74  udo-random.  byt
1db10 65 73 2e 20 5e 49 66 20 4e 20 69 73 20 6c 65 73  es. ^If N is les
1db20 73 20 74 68 61 6e 20 31 20 74 68 65 6e 20 61 20  s than 1 then a 
1db30 31 2d 62 79 74 65 20 72 61 6e 64 6f 6d 20 62 6c  1-byte random bl
1db40 6f 62 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a  ob is returned..
1db50 0a 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70  .  <p>Hint:  app
1db60 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 67 65  lications can ge
1db70 6e 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20  nerate globally 
1db80 75 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69 65  unique identifie
1db90 72 73 0a 20 20 75 73 69 6e 67 20 74 68 69 73 20  rs.  using this 
1dba0 66 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74 68 65  function togethe
1dbb0 72 20 77 69 74 68 20 5b 68 65 78 28 29 5d 20 61  r with [hex()] a
1dbc0 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29  nd/or.  [lower()
1dbd0 5d 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e  ] like this:</p>
1dbe0 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  ..  <blockquote>
1dbf0 0a 20 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f  .  hex(randomblo
1dc00 62 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a  b(16))<br></br>.
1dc10 20 20 6c 6f 77 65 72 28 68 65 78 28 72 61 6e 64    lower(hex(rand
1dc20 6f 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c  omblob(16))).  <
1dc30 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a  /blockquote>.}..
1dc40 66 75 6e 63 64 65 66 20 7b 72 65 70 6c 61 63 65  funcdef {replace
1dc50 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20  (X,Y,Z)} {} {.  
1dc60 5e 54 68 65 20 72 65 70 6c 61 63 65 28 58 2c 59  ^The replace(X,Y
1dc70 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Z) function ret
1dc80 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f  urns a string fo
1dc90 72 6d 65 64 20 62 79 20 73 75 62 73 74 69 74 75  rmed by substitu
1dca0 74 69 6e 67 0a 20 20 73 74 72 69 6e 67 20 5a 20  ting.  string Z 
1dcb0 66 6f 72 20 65 76 65 72 79 20 6f 63 63 75 72 72  for every occurr
1dcc0 65 6e 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59  ence of string Y
1dcd0 20 69 6e 20 73 74 72 69 6e 67 20 58 2e 20 20 5e   in string X.  ^
1dce0 54 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20 20 63  The [BINARY].  c
1dcf0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
1dd00 65 20 69 73 20 75 73 65 64 20 66 6f 72 20 63 6f  e is used for co
1dd10 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20  mparisons.  ^If 
1dd20 59 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 20 20  Y is an empty.  
1dd30 73 74 72 69 6e 67 20 74 68 65 6e 20 72 65 74 75  string then retu
1dd40 72 6e 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 20  rn X unchanged. 
1dd50 20 5e 49 66 20 5a 20 69 73 20 6e 6f 74 20 69 6e   ^If Z is not in
1dd60 69 74 69 61 6c 6c 79 0a 20 20 61 20 73 74 72 69  itially.  a stri
1dd70 6e 67 2c 20 69 74 20 69 73 20 63 61 73 74 20 74  ng, it is cast t
1dd80 6f 20 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67  o a UTF-8 string
1dd90 20 70 72 69 6f 72 20 74 6f 20 70 72 6f 63 65 73   prior to proces
1dda0 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  sing..}..funcdef
1ddb0 20 7b 72 6f 75 6e 64 28 58 29 20 72 6f 75 6e 64   {round(X) round
1ddc0 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
1ddd0 68 65 20 72 6f 75 6e 64 28 58 2c 59 29 20 66 75  he round(X,Y) fu
1dde0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1ddf0 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
1de00 20 20 76 61 6c 75 65 20 58 20 72 6f 75 6e 64 65    value X rounde
1de10 64 20 74 6f 20 59 20 64 69 67 69 74 73 20 74 6f  d to Y digits to
1de20 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68   the right of th
1de30 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e  e decimal point.
1de40 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
1de50 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
1de60 2c 20 69 74 20 69 73 20 61 73 73 75 6d 65 64 20  , it is assumed 
1de70 74 6f 20 62 65 20 30 2e 0a 7d 0a 0a 66 75 6e 63  to be 0..}..func
1de80 64 65 66 20 7b 72 74 72 69 6d 28 58 29 20 72 74  def {rtrim(X) rt
1de90 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  rim(X,Y)} {} {. 
1dea0 20 5e 54 68 65 20 72 74 72 69 6d 28 58 2c 59 29   ^The rtrim(X,Y)
1deb0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1dec0 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  s a string forme
1ded0 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e  d by removing an
1dee0 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72  y and all.  char
1def0 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65  acters that appe
1df00 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65  ar in Y from the
1df10 20 72 69 67 68 74 20 73 69 64 65 20 6f 66 20 58   right side of X
1df20 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72  ..  ^If the Y ar
1df30 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65  gument is omitte
1df40 64 2c 20 72 74 72 69 6d 28 58 29 20 72 65 6d 6f  d, rtrim(X) remo
1df50 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20  ves spaces from 
1df60 74 68 65 20 72 69 67 68 74 0a 20 20 73 69 64 65  the right.  side
1df70 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
1df80 66 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d 20 7b  f {soundex(X)} {
1df90 7d 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75 6e 64  } {.  ^The sound
1dfa0 65 78 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  ex(X) function r
1dfb0 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
1dfc0 74 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 6e  that is the soun
1dfd0 64 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a 20 20  dex encoding .  
1dfe0 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e  of the string X.
1dff0 0a 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20 22  .  ^The string "
1e000 3f 30 30 30 22 20 69 73 20 72 65 74 75 72 6e 65  ?000" is returne
1e010 64 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e  d if the argumen
1e020 74 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63 6f 6e  t is NULL or con
1e030 74 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43 49 49  tains.  no ASCII
1e040 20 61 6c 70 68 61 62 65 74 69 63 20 63 68 61 72   alphabetic char
1e050 61 63 74 65 72 73 2e 0a 20 20 5e 28 54 68 69 73  acters..  ^(This
1e060 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69   function is omi
1e070 74 74 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65  tted from SQLite
1e080 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 49   by default..  I
1e090 74 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61  t is only availa
1e0a0 62 6c 65 20 69 66 20 74 68 65 20 5b 53 51 4c 49  ble if the [SQLI
1e0b0 54 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f 6d 70  TE_SOUNDEX] comp
1e0c0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a  ile-time option.
1e0d0 20 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 53    is used when S
1e0e0 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 2e 29  QLite is built.)
1e0f0 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ^.}..funcdef {sq
1e100 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  lite_compileopti
1e110 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20 7b 0a  on_get(N)} {} {.
1e120 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f    ^The sqlite_co
1e130 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
1e140 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  ) SQL function i
1e150 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75  s a wrapper arou
1e160 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65  nd the.  [sqlite
1e170 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
1e180 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e  get()] C/C++ fun
1e190 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73 20 72  ction..  ^This r
1e1a0 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74  outine returns t
1e1b0 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65 2d  he N-th compile-
1e1c0 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64  time option used
1e1d0 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65   to build SQLite
1e1e0 0a 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20 4e 20  .  or NULL if N 
1e1f0 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e  is out of range.
1e200 20 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20 5b    See also the [
1e210 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 20  compile_options 
1e220 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e 63  pragma]..}..func
1e230 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70  def {sqlite_comp
1e240 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58  ileoption_used(X
1e250 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
1e260 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74  qlite_compileopt
1e270 69 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c 20 66  ion_used() SQL f
1e280 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
1e290 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a  pper around the.
1e2a0 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69    [sqlite3_compi
1e2b0 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 5d  leoption_used()]
1e2c0 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e   C/C++ function.
1e2d0 0a 20 20 5e 57 68 65 6e 20 74 68 65 20 61 72 67  .  ^When the arg
1e2e0 75 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c 69 74  ument X to sqlit
1e2f0 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  e_compileoption_
1e300 75 73 65 64 28 58 29 20 69 73 20 61 20 73 74 72  used(X) is a str
1e310 69 6e 67 20 77 68 69 63 68 0a 20 20 69 73 20 74  ing which.  is t
1e320 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6d  he name of a com
1e330 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
1e340 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  , this routine r
1e350 65 74 75 72 6e 73 20 74 72 75 65 20 28 31 29 20  eturns true (1) 
1e360 6f 72 0a 20 20 66 61 6c 73 65 20 28 30 29 20 64  or.  false (0) d
1e370 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
1e380 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20  her or not that 
1e390 6f 70 74 69 6f 6e 20 77 61 73 20 75 73 65 64 20  option was used 
1e3a0 64 75 72 69 6e 67 20 74 68 65 0a 20 20 62 75 69  during the.  bui
1e3b0 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ld..}..funcdef {
1e3c0 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29  sqlite_offset(X)
1e3d0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
1e3e0 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29 20 66  lite_offset(X) f
1e3f0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1e400 74 68 65 20 62 79 74 65 20 6f 66 66 73 65 74 20  the byte offset 
1e410 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
1e420 20 20 66 69 6c 65 20 66 6f 72 20 74 68 65 20 62    file for the b
1e430 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
1e440 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 68 69 63  record from whic
1e450 68 20 76 61 6c 75 65 20 77 6f 75 6c 64 20 62 65  h value would be
1e460 20 72 65 61 64 2e 0a 20 20 49 66 20 58 20 69 73   read..  If X is
1e470 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 69 6e   not a column in
1e480 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
1e490 6c 65 2c 20 74 68 65 6e 20 73 71 6c 69 74 65 5f  le, then sqlite_
1e4a0 6f 66 66 73 65 74 28 58 29 20 72 65 74 75 72 6e  offset(X) return
1e4b0 73 0a 20 20 4e 55 4c 4c 2e 20 20 54 68 65 20 76  s.  NULL.  The v
1e4c0 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
1e4d0 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 58   sqlite_offset(X
1e4e0 29 20 6d 69 67 68 74 20 72 65 66 65 72 65 6e 63  ) might referenc
1e4f0 65 20 65 69 74 68 65 72 20 74 68 65 0a 20 20 6f  e either the.  o
1e500 72 69 67 69 6e 61 6c 20 74 61 62 6c 65 20 6f 72  riginal table or
1e510 20 61 6e 20 69 6e 64 65 78 2c 20 64 65 70 65 6e   an index, depen
1e520 64 69 6e 67 20 6f 6e 20 74 68 65 20 71 75 65 72  ding on the quer
1e530 79 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  y.  If the value
1e540 20 58 20 77 6f 75 6c 64 0a 20 20 6e 6f 72 6d 61   X would.  norma
1e550 6c 6c 79 20 62 65 20 65 78 74 72 61 63 74 65 64  lly be extracted
1e560 20 66 72 6f 6d 20 61 6e 20 69 6e 64 65 78 2c 20   from an index, 
1e570 74 68 65 20 73 71 6c 69 74 65 5f 6f 66 66 73 65  the sqlite_offse
1e580 74 28 58 29 20 72 65 74 75 72 6e 73 20 74 68 65  t(X) returns the
1e590 0a 20 20 6f 66 66 73 65 74 20 74 6f 20 74 68 65  .  offset to the
1e5a0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 69   corresponding i
1e5b0 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 20 49 66  ndex record.  If
1e5c0 20 74 68 65 20 76 61 6c 75 65 20 58 20 77 6f 75   the value X wou
1e5d0 6c 64 20 62 65 0a 20 20 65 78 74 72 61 63 74 65  ld be.  extracte
1e5e0 64 20 66 72 6f 6d 20 74 68 65 20 6f 72 69 67 69  d from the origi
1e5f0 6e 61 6c 20 74 61 62 6c 65 2c 20 74 68 65 6e 20  nal table, then 
1e600 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29  sqlite_offset(X)
1e610 20 72 65 74 75 72 6e 73 20 74 68 65 20 6f 66 66   returns the off
1e620 73 65 74 0a 20 20 74 6f 20 74 68 65 20 74 61 62  set.  to the tab
1e630 6c 65 20 72 65 63 6f 72 64 2e 0a 0a 20 20 3c 70  le record...  <p
1e640 3e 54 68 65 20 73 71 6c 69 74 65 5f 6f 66 66 73  >The sqlite_offs
1e650 65 74 28 58 29 20 53 51 4c 20 66 75 6e 63 74 69  et(X) SQL functi
1e660 6f 6e 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c  on is only avail
1e670 61 62 6c 65 20 69 66 20 53 51 4c 69 74 65 20 69  able if SQLite i
1e680 73 20 62 75 69 6c 74 0a 20 20 75 73 69 6e 67 20  s built.  using 
1e690 74 68 65 20 5b 2d 44 53 51 4c 49 54 45 5f 45 4e  the [-DSQLITE_EN
1e6a0 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f  ABLE_OFFSET_SQL_
1e6b0 46 55 4e 43 5d 20 63 6f 6d 70 69 6c 65 2d 74 69  FUNC] compile-ti
1e6c0 6d 65 20 6f 70 74 69 6f 6e 2e 0a 7d 0a 0a 66 75  me option..}..fu
1e6d0 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f  ncdef {sqlite_so
1e6e0 75 72 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a  urce_id()} {} {.
1e6f0 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f    ^The sqlite_so
1e700 75 72 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69  urce_id() functi
1e710 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
1e720 69 6e 67 20 74 68 61 74 20 69 64 65 6e 74 69 66  ing that identif
1e730 69 65 73 20 74 68 65 0a 20 20 73 70 65 63 69 66  ies the.  specif
1e740 69 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ic version of th
1e750 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68  e source code th
1e760 61 74 20 77 61 73 20 75 73 65 64 20 74 6f 20 62  at was used to b
1e770 75 69 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a  uild the SQLite.
1e780 20 20 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65    library.  ^The
1e790 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
1e7a0 20 62 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63   by sqlite_sourc
1e7b0 65 5f 69 64 28 29 20 69 73 0a 20 20 74 68 65 20  e_id() is.  the 
1e7c0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 74 68  date and time th
1e7d0 61 74 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f  at the source co
1e7e0 64 65 20 77 61 73 20 63 68 65 63 6b 65 64 20 69  de was checked i
1e7f0 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 20 20  n followed by.  
1e800 74 68 65 20 53 48 41 31 20 68 61 73 68 20 66 6f  the SHA1 hash fo
1e810 72 20 74 68 61 74 20 63 68 65 63 6b 2d 69 6e 2e  r that check-in.
1e820 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e    ^This function
1e830 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61   is.  an SQL wra
1e840 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
1e850 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69  [sqlite3_sourcei
1e860 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65  d()] C interface
1e870 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ..}..funcdef {sq
1e880 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20  lite_version()} 
1e890 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69  {} {.  ^The sqli
1e8a0 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e  te_version() fun
1e8b0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1e8c0 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67  e version string
1e8d0 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a   for the SQLite.
1e8e0 20 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 69    library that i
1e8f0 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69  s running.  ^Thi
1e900 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e  s function is an
1e910 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61   SQL.  wrapper a
1e920 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
1e930 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d  e3_libversion()]
1e940 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a   C-interface..}.
1e950 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72  .funcdef {substr
1e960 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58  (X,Y,Z) substr(X
1e970 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
1e980 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66   substr(X,Y,Z) f
1e990 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1e9a0 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69  a substring of i
1e9b0 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 74 68  nput string X th
1e9c0 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68  at begins.  with
1e9d0 20 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63   the Y-th charac
1e9e0 74 65 72 20 61 6e 64 20 77 68 69 63 68 20 69 73  ter and which is
1e9f0 20 5a 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f   Z characters lo
1ea00 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f  ng..  ^If Z is o
1ea10 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75 62 73  mitted then subs
1ea20 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20  tr(X,Y) returns 
1ea30 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 74  all characters t
1ea40 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20  hrough the end. 
1ea50 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58   of the string X
1ea60 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
1ea70 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65  the Y-th..  ^The
1ea80 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61   left-most chara
1ea90 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d  cter of X is num
1eaa0 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73  ber 1.  ^If Y is
1eab0 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e   negative.  then
1eac0 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61   the first chara
1ead0 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62 73  cter of the subs
1eae0 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62  tring is found b
1eaf0 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20  y counting from 
1eb00 74 68 65 0a 20 20 72 69 67 68 74 20 72 61 74 68  the.  right rath
1eb10 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74  er than the left
1eb20 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61  .  ^If Z is nega
1eb30 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20  tive then.  the 
1eb40 61 62 73 28 5a 29 20 63 68 61 72 61 63 74 65 72  abs(Z) character
1eb50 73 20 70 72 65 63 65 64 69 6e 67 20 74 68 65 20  s preceding the 
1eb60 59 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 61  Y-th character a
1eb70 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e  re returned..  ^
1eb80 49 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67  If X is a string
1eb90 20 74 68 65 6e 20 63 68 61 72 61 63 74 65 72 73   then characters
1eba0 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74   indices refer t
1ebb0 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a  o actual UTF-8 .
1ebc0 20 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e    characters.  ^
1ebd0 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74  If X is a BLOB t
1ebe0 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20  hen the indices 
1ebf0 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a  refer to bytes..
1ec00 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61  }..funcdef {tota
1ec10 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20  l_changes()} {} 
1ec20 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63  {.  ^The total_c
1ec30 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
1ec40 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
1ec50 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e  mber of row chan
1ec60 67 65 73 0a 20 20 63 61 75 73 65 64 20 62 79 20  ges.  caused by 
1ec70 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
1ec80 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65  r DELETE.  state
1ec90 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20  ments since the 
1eca0 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65  current database
1ecb0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20   connection was 
1ecc0 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20  opened..  ^This 
1ecd0 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
1ece0 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
1ecf0 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f   [sqlite3_total_
1ed00 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43  changes()].  C/C
1ed10 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a  ++ interface..}.
1ed20 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58  .funcdef {trim(X
1ed30 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20  ) trim(X,Y)} {} 
1ed40 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c  {.  ^The trim(X,
1ed50 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
1ed60 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
1ed70 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
1ed80 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
1ed90 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
1eda0 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62  pear in Y from b
1edb0 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20  oth ends of X.. 
1edc0 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d   ^If the Y argum
1edd0 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
1ede0 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20  trim(X) removes 
1edf0 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68  spaces from both
1ee00 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66   ends of X..}..f
1ee10 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58  uncdef {typeof(X
1ee20 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74  )} {} {.  ^The t
1ee30 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f  ypeof(X) functio
1ee40 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
1ee50 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ng that indicate
1ee60 73 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d  s the [datatype]
1ee70 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65 73   of.  the expres
1ee80 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20  sion X: "null", 
1ee90 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c  "integer", "real
1eea0 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62  ", "text", or "b
1eeb0 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lob"..}..funcdef
1eec0 20 7b 75 6e 6c 69 6b 65 6c 79 28 58 29 7d 20 7b   {unlikely(X)} {
1eed0 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b  } {.  ^The unlik
1eee0 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
1eef0 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
1ef00 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64  ment X unchanged
1ef10 2e 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c  ..  ^The unlikel
1ef20 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  y(X) function is
1ef30 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68   a no-op that th
1ef40 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1ef50 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61  .  optimizes awa
1ef60 79 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e  y so that it con
1ef70 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63  sumes no CPU cyc
1ef80 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d  les at.  run-tim
1ef90 65 20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69  e (that is, duri
1efa0 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c  ng calls to [sql
1efb0 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20  ite3_step()]).. 
1efc0 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66   ^The purpose of
1efd0 20 74 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29   the unlikely(X)
1efe0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20   function is to 
1eff0 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20  provide a hint. 
1f000 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c   to the query pl
1f010 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61  anner that the a
1f020 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62  rgument X is a b
1f030 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 74  oolean value.  t
1f040 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 6e  hat is usually n
1f050 6f 74 20 74 72 75 65 2e 20 5e 28 54 68 65 20 75  ot true. ^(The u
1f060 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74  nlikely(X) funct
1f070 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e  ion is equivalen
1f080 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f  t.  to [likeliho
1f090 6f 64 5d 28 58 2c 20 30 2e 30 36 32 35 29 2e 29  od](X, 0.0625).)
1f0a0 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e  ^.}..funcdef {un
1f0b0 69 63 6f 64 65 28 58 29 7d 20 7b 7d 20 7b 0a 20  icode(X)} {} {. 
1f0c0 20 5e 54 68 65 20 75 6e 69 63 6f 64 65 28 58 29   ^The unicode(X)
1f0d0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1f0e0 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 75 6e  s the numeric un
1f0f0 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74  icode code point
1f100 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1f110 6f 0a 20 20 74 68 65 20 66 69 72 73 74 20 63 68  o.  the first ch
1f120 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73  aracter of the s
1f130 74 72 69 6e 67 20 58 2e 20 20 49 66 20 74 68 65  tring X.  If the
1f140 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 75 6e 69   argument to uni
1f150 63 6f 64 65 28 58 29 20 69 73 20 6e 6f 74 20 61  code(X) is not a
1f160 20 73 74 72 69 6e 67 0a 20 20 74 68 65 6e 20 74   string.  then t
1f170 68 65 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64  he result is und
1f180 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64  efined..}..funcd
1f190 65 66 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d  ef {upper(X)} {}
1f1a0 20 7b 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28   {.  ^The upper(
1f1b0 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1f1c0 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e  rns a copy of in
1f1d0 70 75 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20  put string X in 
1f1e0 77 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77  which all .  low
1f1f0 65 72 2d 63 61 73 65 20 41 53 43 49 49 20 63 68  er-case ASCII ch
1f200 61 72 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e  aracters are con
1f210 76 65 72 74 65 64 20 74 6f 20 74 68 65 69 72 20  verted to their 
1f220 75 70 70 65 72 2d 63 61 73 65 20 65 71 75 69 76  upper-case equiv
1f230 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65  alent..}..funcde
1f240 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20  f {zeroblob(N)} 
1f250 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f  {} {.  ^The zero
1f260 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e  blob(N) function
1f270 20 72 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20   returns a BLOB 
1f280 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20  consisting of N 
1f290 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20  bytes of 0x00.. 
1f2a0 20 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20   SQLite manages 
1f2b0 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20  these zeroblobs 
1f2c0 76 65 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79  very efficiently
1f2d0 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e  .  Zeroblobs can
1f2e0 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65   be used to.  re
1f2f0 73 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20  serve space for 
1f300 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c  a BLOB that is l
1f310 61 74 65 72 20 77 72 69 74 74 65 6e 20 75 73 69  ater written usi
1f320 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62  ng .  [sqlite3_b
1f330 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63  lob_open() | inc
1f340 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f  remental BLOB I/
1f350 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20  O]..  ^This SQL 
1f360 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c  function is impl
1f370 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68  emented using th
1f380 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  e [sqlite3_resul
1f390 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20  t_zeroblob()].  
1f3a0 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65  routine from the
1f3b0 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
1f3c0 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  ..}.</tcl>..<p>T
1f3d0 68 65 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e  he core function
1f3e0 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72  s shown below ar
1f3f0 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64  e available by d
1f400 65 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75  efault. .[datefu
1f410 6e 63 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20  nc | Date &amp; 
1f420 54 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2c  Time functions],
1f430 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67 72  .[aggfunc | aggr
1f440 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d  egate functions]
1f450 2c 0a 5b 62 75 69 6c 74 69 6e 20 77 69 6e 64 6f  ,.[builtin windo
1f460 77 20 66 75 6e 63 74 69 6f 6e 73 7c 77 69 6e 64  w functions|wind
1f470 6f 77 20 66 75 6e 63 74 69 6f 6e 73 5d 2c 20 61  ow functions], a
1f480 6e 64 0a 5b 6a 73 6f 6e 31 20 7c 20 4a 53 4f 4e  nd.[json1 | JSON
1f490 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72 65 20   functions] are 
1f4a0 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70 61 72  documented separ
1f4b0 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70 6c 69  ately.  An.appli
1f4c0 63 61 74 69 6f 6e 20 6d 61 79 20 64 65 66 69 6e  cation may defin
1f4d0 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66 75 6e  e additional.fun
1f4e0 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69  ctions written i
1f4f0 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20 74 6f  n C and added to
1f500 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   the database en
1f510 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65 20 5b  gine using.the [
1f520 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
1f530 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49 2e 3c  unction()] API.<
1f540 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74 20 6c  /p>..<tcl>.set l
1f550 78 20 7b 7d 0a 66 6f 72 65 61 63 68 20 62 61 73  x {}.foreach bas
1f560 65 73 79 6e 74 61 78 20 5b 61 72 72 61 79 20 6e  esyntax [array n
1f570 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73 65 74  ames corefuncset
1f580 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 73  ] {.  foreach {s
1f590 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64  yntax keywords d
1f5a0 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63 73 65  esc} $corefuncse
1f5b0 74 28 24 62 61 73 65 73 79 6e 74 61 78 29 20 62  t($basesyntax) b
1f5c0 72 65 61 6b 0a 20 20 72 65 67 65 78 70 20 7b 5e  reak.  regexp {^
1f5d0 5b 61 2d 7a 5f 5d 2b 7d 20 24 62 61 73 65 73 79  [a-z_]+} $basesy
1f5e0 6e 74 61 78 20 66 72 61 67 6d 65 6e 74 0a 20 20  ntax fragment.  
1f5f0 66 6f 72 65 61 63 68 20 63 6f 72 65 73 79 6e 74  foreach coresynt
1f600 61 78 20 24 73 79 6e 74 61 78 20 7b 0a 20 20 20  ax $syntax {.   
1f610 20 6c 61 70 70 65 6e 64 20 6c 78 20 5b 6c 69 73   lappend lx [lis
1f620 74 20 24 66 72 61 67 6d 65 6e 74 20 24 63 6f 72  t $fragment $cor
1f630 65 73 79 6e 74 61 78 20 30 5d 0a 20 20 7d 0a 7d  esyntax 0].  }.}
1f640 0a 68 64 5f 6c 69 73 74 5f 6f 66 5f 6c 69 6e 6b  .hd_list_of_link
1f650 73 20 7b 7d 20 32 32 35 20 5b 6c 73 6f 72 74 20  s {} 225 [lsort 
1f660 2d 69 6e 64 65 78 20 31 20 24 6c 78 5d 0a 0a 68  -index 1 $lx]..h
1f670 64 5f 70 75 74 73 6e 6c 20 22 3c 68 72 20 63 6c  d_putsnl "<hr cl
1f680 61 73 73 3d 27 78 68 72 27 3e 22 0a 68 64 5f 70  ass='xhr'>".hd_p
1f690 75 74 73 6e 6c 20 22 3c 64 6c 3e 22 0a 66 6f 72  utsnl "<dl>".for
1f6a0 65 61 63 68 20 62 61 73 65 73 79 6e 74 61 78 20  each basesyntax 
1f6b0 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61  [lsort [array na
1f6c0 6d 65 73 20 63 6f 72 65 66 75 6e 63 73 65 74 5d  mes corefuncset]
1f6d0 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 73  ] {.  foreach {s
1f6e0 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64  yntax keywords d
1f6f0 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63 73 65  esc} $corefuncse
1f700 74 28 24 62 61 73 65 73 79 6e 74 61 78 29 20 62  t($basesyntax) b
1f710 72 65 61 6b 0a 20 20 72 65 67 73 75 62 20 2d 61  reak.  regsub -a
1f720 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67  ll {\s+} [string
1f730 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d 20 7b   trim $syntax] {
1f740 3c 62 72 20 2f 3e 7d 20 73 79 6e 74 61 78 0a 20  <br />} syntax. 
1f750 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28   regsub -all {\(
1f760 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e  ([^*)]+)\)} $syn
1f770 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29  tax {(<i>\1</i>)
1f780 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75  } syntax.  regsu
1f790 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74  b -all {,} $synt
1f7a0 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79  ax {</i>,<i>} sy
1f7b0 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61  ntax.  regsub -a
1f7c0 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69  ll {<i>\.\.\.</i
1f7d0 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d  >} $syntax {...}
1f7e0 20 73 79 6e 74 61 78 0a 20 20 72 65 67 65 78 70   syntax.  regexp
1f7f0 20 7b 5e 5b 61 2d 7a 5d 2b 7d 20 24 62 61 73 65   {^[a-z]+} $base
1f800 73 79 6e 74 61 78 20 66 72 61 67 6d 65 6e 74 0a  syntax fragment.
1f810 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $
1f820 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a  keywords]==0} {.
1f830 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a      regexp {[a-z
1f840 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d  _]+} $syntax nam
1f850 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e  e.    hd_fragmen
1f860 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22  t $name *$name "
1f870 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66 75  ${name}() SQL fu
1f880 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65  nction".  } else
1f890 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61 67 6e   {.    set fragn
1f8a0 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79  ame [lindex $key
1f8b0 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72 65 67  words 0].    reg
1f8c0 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d  sub -all {[^a-z]
1f8d0 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66  } $fragname {} f
1f8e0 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66  ragname.    hd_f
1f8f0 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d  ragment $fragnam
1f900 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65  e.    eval hd_ke
1f910 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67 20 6d  ywords [string m
1f920 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79  ap {\n { }} $key
1f930 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f  words].  }.  hd_
1f940 70 75 74 73 20 22 3c 64 74 3e 3c 70 3e 3c 62 3e  puts "<dt><p><b>
1f950 24 73 79 6e 74 61 78 3c 2f 62 3e 3c 2f 64 74 3e  $syntax</b></dt>
1f960 22 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 22  ".  hd_resolve "
1f970 3c 64 64 3e 3c 70 3e 24 64 65 73 63 3c 2f 64 64  <dd><p>$desc</dd
1f980 3e 5c 6e 22 0a 7d 0a 68 64 5f 70 75 74 73 6e 6c  >\n".}.hd_putsnl
1f990 20 22 3c 2f 64 6c 3e 22 0a 0a 23 23 23 23 23 23   "</dl>"..######
1f9a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9e0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1f9f0 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20   {Date And Time 
1fa00 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66  Functions} datef
1fa10 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 20 7b  unc {*datefunc {
1fa20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
1fa30 6e 63 74 69 6f 6e 73 7d 7d 0a 68 64 5f 6b 65 79  nctions}}.hd_key
1fa40 77 6f 72 64 73 20 7b 64 61 74 65 28 29 20 53 51  words {date() SQ
1fa50 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 74 69 6d  L function} {tim
1fa60 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
1fa70 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64  }.hd_keywords {d
1fa80 61 74 65 74 69 6d 65 28 29 20 53 51 4c 20 66 75  atetime() SQL fu
1fa90 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61 6e 64  nction} {juliand
1faa0 61 79 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  ay() SQL functio
1fab0 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  n}.hd_keywords {
1fac0 73 74 72 66 74 69 6d 65 28 29 20 53 51 4c 20 66  strftime() SQL f
1fad0 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c 3e 0a  unction}.</tcl>.
1fae0 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73 75 70 70  .<p>.SQLite supp
1faf0 6f 72 74 73 20 66 69 76 65 20 64 61 74 65 20 61  orts five date a
1fb00 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
1fb10 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f  s as follows:.</
1fb20 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c 69  p>..<p>.<ol>.<li
1fb30 3e 20 5e 28 3c 62 3e 64 61 74 65 28 3c 2f 62 3e  > ^(<b>date(</b>
1fb40 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
1fb50 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
1fb60 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
1fb70 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  b>)^ </li>.<li> 
1fb80 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c 69  ^(<b>time(</b><i
1fb90 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64  >timestring, mod
1fba0 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
1fbb0 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
1fbc0 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28  )^ </li>.<li> ^(
1fbd0 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c 2f 62 3e  <b>datetime(</b>
1fbe0 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
1fbf0 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
1fc00 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
1fc10 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  b>)^ </li>.<li> 
1fc20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64 61 79 28 3c  ^(<b>julianday(<
1fc30 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67  /b><i>timestring
1fc40 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
1fc50 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
1fc60 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c  )</b>)^ </li>.<l
1fc70 69 3e 20 5e 28 3c 62 3e 73 74 72 66 74 69 6d 65  i> ^(<b>strftime
1fc80 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c 20  (</b><i>format, 
1fc90 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
1fca0 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
1fcb0 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29  ...</i><b>)</b>)
1fcc0 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c  ^ </li>.</ol>..<
1fcd0 70 3e 0a 5e 41 6c 6c 20 66 69 76 65 20 64 61 74  p>.^All five dat
1fce0 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1fcf0 69 6f 6e 73 20 74 61 6b 65 20 61 20 74 69 6d 65  ions take a time
1fd00 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20 61 72   string as an ar
1fd10 67 75 6d 65 6e 74 2e 20 0a 5e 54 68 65 20 74 69  gument. .^The ti
1fd20 6d 65 20 73 74 72 69 6e 67 20 69 73 20 66 6f 6c  me string is fol
1fd30 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72  lowed by zero or
1fd40 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 2e   more modifiers.
1fd50 20 0a 5e 54 68 65 20 73 74 72 66 74 69 6d 65 28   .^The strftime(
1fd60 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20  ) function also 
1fd70 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74 20 73  takes a format s
1fd80 74 72 69 6e 67 20 61 73 20 69 74 73 20 66 69 72  tring as its fir
1fd90 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f 70  st argument..</p
1fda0 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74 65 20  >..<p>.The date 
1fdb0 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1fdc0 6e 73 20 75 73 65 20 61 20 73 75 62 73 65 74 20  ns use a subset 
1fdd0 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  of.[http://en.wi
1fde0 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
1fdf0 2f 49 53 4f 5f 38 36 30 31 20 7c 20 49 53 30 2d  /ISO_8601 | IS0-
1fe00 38 36 30 31 5d 20 64 61 74 65 20 61 6e 64 20 74  8601] date and t
1fe10 69 6d 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e 54 68  ime.formats..^Th
1fe20 65 20 64 61 74 65 28 29 20 66 75 6e 63 74 69 6f  e date() functio
1fe30 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61  n returns the da
1fe40 74 65 20 69 6e 20 74 68 69 73 20 66 6f 72 6d 61  te in this forma
1fe50 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44 2e 20 0a  t: YYYY-MM-DD. .
1fe60 5e 54 68 65 20 74 69 6d 65 28 29 20 66 75 6e 63  ^The time() func
1fe70 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1fe80 20 74 69 6d 65 20 61 73 20 48 48 3a 4d 4d 3a 53   time as HH:MM:S
1fe90 53 2e 20 0a 5e 54 68 65 20 64 61 74 65 74 69 6d  S. .^The datetim
1fea0 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  e() function ret
1feb0 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44  urns "YYYY-MM-DD
1fec0 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e 28 54   HH:MM:SS". .^(T
1fed0 68 65 20 6a 75 6c 69 61 6e 64 61 79 28 29 20 66  he julianday() f
1fee0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1fef0 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  the .[http://en.
1ff00 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1ff10 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20  ki/Julian_day | 
1ff20 4a 75 6c 69 61 6e 20 64 61 79 5d 20 2d 20 74 68  Julian day] - th
1ff30 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73  e.number of days
1ff40 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20 47   since noon in G
1ff50 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e 6f 76 65  reenwich on Nove
1ff60 6d 62 65 72 20 32 34 2c 20 34 37 31 34 20 42 2e  mber 24, 4714 B.
1ff70 43 2e 20 0a 28 5b 68 74 74 70 3a 2f 2f 65 6e 2e  C. .([http://en.
1ff80 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1ff90 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f 47 72 65  ki/Proleptic_Gre
1ffa0 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20  gorian_calendar 
1ffb0 7c 20 50 72 6f 6c 65 70 74 69 63 20 47 72 65 67  | Proleptic Greg
1ffc0 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d 29  orian calendar])
1ffd0 2e 29 5e 0a 5e 54 68 65 20 73 74 72 66 74 69 6d  .)^.^The strftim
1ffe0 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 74 75  e() routine retu
1fff0 72 6e 73 20 74 68 65 20 64 61 74 65 20 66 6f 72  rns the date for
20000 6d 61 74 74 65 64 20 61 63 63 6f 72 64 69 6e 67  matted according
20010 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d 61 74 20   to .the format 
20020 73 74 72 69 6e 67 20 73 70 65 63 69 66 69 65 64  string specified
20030 20 61 73 20 74 68 65 20 66 69 72 73 74 20 61 72   as the first ar
20040 67 75 6d 65 6e 74 2e 0a 5e 54 68 65 20 66 6f 72  gument..^The for
20050 6d 61 74 20 73 74 72 69 6e 67 20 73 75 70 70 6f  mat string suppo
20060 72 74 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d  rts the most com
20070 6d 6f 6e 20 73 75 62 73 74 69 74 75 74 69 6f 6e  mon substitution
20080 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 0a  s found in the .
20090 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f 75  [http://opengrou
200a0 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75 62 73  p.org/onlinepubs
200b0 2f 30 30 37 39 30 38 37 39 39 2f 78 73 68 2f 73  /007908799/xsh/s
200c0 74 72 66 74 69 6d 65 2e 68 74 6d 6c 20 7c 20 73  trftime.html | s
200d0 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69  trftime() functi
200e0 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65 20 73 74 61  on].from the sta
200f0 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 20  ndard C library 
20100 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73 75 62  plus two new sub
20110 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66 20 61  stitutions, %f a
20120 6e 64 20 25 4a 2e 0a 5e 28 54 68 65 20 66 6f 6c  nd %J..^(The fol
20130 6c 6f 77 69 6e 67 20 69 73 20 61 20 63 6f 6d 70  lowing is a comp
20140 6c 65 74 65 20 6c 69 73 74 20 6f 66 20 76 61 6c  lete list of val
20150 69 64 20 73 74 72 66 74 69 6d 65 28 29 20 73 75  id strftime() su
20160 62 73 74 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f 70  bstitutions:.</p
20170 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
20180 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30  <table border="0
20190 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30  " cellpadding="0
201a0 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30  " cellspacing="0
201b0 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64 20 77  ">.<tr><td><td w
201c0 69 64 74 68 3d 22 31 30 22 3e 3c 74 64 3e 3c 2f  idth="10"><td></
201d0 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25 64  tr>..<tr><td> %d
201e0 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66   <td><td> day of
201f0 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74 72 3e 3c   month: 00.<tr><
20200 74 64 3e 20 25 66 20 3c 74 64 3e 3c 74 64 3e 20  td> %f <td><td> 
20210 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e  fractional secon
20220 64 73 3a 20 53 53 2e 53 53 53 0a 3c 74 72 3e 3c  ds: SS.SSS.<tr><
20230 74 64 3e 20 25 48 20 3c 74 64 3e 3c 74 64 3e 20  td> %H <td><td> 
20240 68 6f 75 72 3a 20 30 30 2d 32 34 20 0a 3c 74 72  hour: 00-24 .<tr
20250 3e 3c 74 64 3e 20 25 6a 20 3c 74 64 3e 3c 74 64  ><td> %j <td><td
20260 3e 20 64 61 79 20 6f 66 20 79 65 61 72 3a 20 30  > day of year: 0
20270 30 31 2d 33 36 36 0a 3c 74 72 3e 3c 74 64 3e 20  01-366.<tr><td> 
20280 25 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c 69  %J <td><td> Juli
20290 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 0a 3c 74  an day number.<t
202a0 72 3e 3c 74 64 3e 20 25 6d 20 3c 74 64 3e 3c 74  r><td> %m <td><t
202b0 64 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d 31 32 0a  d> month: 01-12.
202c0 3c 74 72 3e 3c 74 64 3e 20 25 4d 20 3c 74 64 3e  <tr><td> %M <td>
202d0 3c 74 64 3e 20 6d 69 6e 75 74 65 3a 20 30 30 2d  <td> minute: 00-
202e0 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 73 20 3c  59.<tr><td> %s <
202f0 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 20  td><td> seconds 
20300 73 69 6e 63 65 20 31 39 37 30 2d 30 31 2d 30 31  since 1970-01-01
20310 0a 3c 74 72 3e 3c 74 64 3e 20 25 53 20 3c 74 64  .<tr><td> %S <td
20320 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 3a 20 30  ><td> seconds: 0
20330 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 77  0-59.<tr><td> %w
20340 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66   <td><td> day of
20350 20 77 65 65 6b 20 30 2d 36 20 77 69 74 68 20 53   week 0-6 with S
20360 75 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74 64  unday==0.<tr><td
20370 3e 20 25 57 20 3c 74 64 3e 3c 74 64 3e 20 77 65  > %W <td><td> we
20380 65 6b 20 6f 66 20 79 65 61 72 3a 20 30 30 2d 35  ek of year: 00-5
20390 33 0a 3c 74 72 3e 3c 74 64 3e 20 25 59 20 3c 74  3.<tr><td> %Y <t
203a0 64 3e 3c 74 64 3e 20 79 65 61 72 3a 20 30 30 30  d><td> year: 000
203b0 30 2d 39 39 39 39 0a 3c 74 72 3e 3c 74 64 3e 20  0-9999.<tr><td> 
203c0 25 25 20 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c 2f  %% <td><td> %.</
203d0 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
203e0 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28 4e 6f  ote>)^..<p>.^(No
203f0 74 69 63 65 20 74 68 61 74 20 61 6c 6c 20 6f 74  tice that all ot
20400 68 65 72 20 64 61 74 65 20 61 6e 64 20 74 69 6d  her date and tim
20410 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20  e functions can 
20420 62 65 20 65 78 70 72 65 73 73 65 64 0a 69 6e 20  be expressed.in 
20430 74 65 72 6d 73 20 6f 66 20 73 74 72 66 74 69 6d  terms of strftim
20440 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  e():.</p>..<bloc
20450 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62  kquote>.<table b
20460 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61  order="0" cellpa
20470 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70  dding="0" cellsp
20480 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c  acing="0">.<tr><
20490 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e 3c 2f  td><b>Function</
204a0 62 3e 3c 74 64 20 77 69 64 74 68 3d 22 33 30 22  b><td width="30"
204b0 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76 61 6c 65  ><td><b>Equivale
204c0 6e 74 20 73 74 72 66 74 69 6d 65 28 29 3c 2f 62  nt strftime()</b
204d0 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74  >.<tr><td>   dat
204e0 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e  e(...)      <td>
204f0 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27  <td>  strftime('
20500 25 59 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e 29 0a  %Y-%m-%d', ...).
20510 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69 6d 65 28  <tr><td>   time(
20520 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c 74  ...)      <td><t
20530 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 48  d>  strftime('%H
20540 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74  :%M:%S', ...).<t
20550 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 74 69 6d  r><td>   datetim
20560 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74 64 3e  e(...)  <td><td>
20570 20 20 73 74 72 66 74 69 6d 65 28 27 25 59 2d 25    strftime('%Y-%
20580 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 27 2c 20  m-%d %H:%M:%S', 
20590 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20  ...).<tr><td>   
205a0 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e 29 20 3c  julianday(...) <
205b0 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d  td><td>  strftim
205c0 65 28 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c 2f 74  e('%J', ...).</t
205d0 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  able>.</blockquo
205e0 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65 20 6f  te>)^..<p>.The o
205f0 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66 6f 72 20  nly reasons for 
20600 70 72 6f 76 69 64 69 6e 67 20 66 75 6e 63 74 69  providing functi
20610 6f 6e 73 20 6f 74 68 65 72 20 74 68 61 6e 20 73  ons other than s
20620 74 72 66 74 69 6d 65 28 29 20 69 73 0a 66 6f 72  trftime() is.for
20630 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 61 6e 64   convenience and
20640 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63 79 2e   for efficiency.
20650 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65 20  .</p>..<h3>Time 
20660 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70  Strings</h3>..<p
20670 3e 5e 28 41 20 74 69 6d 65 20 73 74 72 69 6e 67  >^(A time string
20680 20 63 61 6e 20 62 65 20 69 6e 20 61 6e 79 20 6f   can be in any o
20690 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
206a0 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c 6f  formats:</p>..<o
206b0 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d  l>.<li> <i>YYYY-
206c0 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  MM-DD</i>.<li> <
206d0 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a  i>YYYY-MM-DD HH:
206e0 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  MM</i>.<li> <i>Y
206f0 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
20700 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  SS</i>.<li> <i>Y
20710 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
20720 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
20730 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
20740 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
20750 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59  M</i>.<li> <i>YY
20760 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54  YY-MM-DD</i><b>T
20770 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c  </b><i>HH:MM:SS<
20780 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
20790 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f  -MM-DD</i><b>T</
207a0 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53  b><i>HH:MM:SS.SS
207b0 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48  S</i>.<li> <i>HH
207c0 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :MM</i>.<li> <i>
207d0 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69  HH:MM:SS</i>.<li
207e0 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53  > <i>HH:MM:SS.SS
207f0 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e 6f  S</i>.<li> <b>no
20800 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44 44  w</b>.<li> <i>DD
20810 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f 6f  DDDDDDDD</i>.</o
20820 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20 66 6f  l>)^..<p>.^In fo
20830 72 6d 61 74 73 20 35 20 74 68 72 6f 75 67 68 20  rmats 5 through 
20840 37 2c 20 74 68 65 20 22 54 22 20 69 73 20 61 20  7, the "T" is a 
20850 6c 69 74 65 72 61 6c 20 63 68 61 72 61 63 74 65  literal characte
20860 72 20 73 65 70 61 72 61 74 69 6e 67 20 0a 74 68  r separating .th
20870 65 20 64 61 74 65 20 61 6e 64 20 74 68 65 20 74  e date and the t
20880 69 6d 65 2c 20 61 73 20 72 65 71 75 69 72 65 64  ime, as required
20890 20 62 79 20 0a 5b 68 74 74 70 3a 2f 2f 77 77 77   by .[http://www
208a0 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f 54 45  .w3c.org/TR/NOTE
208b0 2d 64 61 74 65 74 69 6d 65 20 7c 20 49 53 4f 2d  -datetime | ISO-
208c0 38 36 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61 74 73  8601]. .^Formats
208d0 20 38 20 74 68 72 6f 75 67 68 20 31 30 20 74 68   8 through 10 th
208e0 61 74 20 73 70 65 63 69 66 79 20 6f 6e 6c 79 20  at specify only 
208f0 61 20 74 69 6d 65 20 61 73 73 75 6d 65 20 61 20  a time assume a 
20900 64 61 74 65 20 6f 66 20 0a 32 30 30 30 2d 30 31  date of .2000-01
20910 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31 31 2c 20  -01. Format 11, 
20920 74 68 65 20 73 74 72 69 6e 67 20 27 6e 6f 77 27  the string 'now'
20930 2c 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69  , is converted i
20940 6e 74 6f 20 74 68 65 20 0a 63 75 72 72 65 6e 74  nto the .current
20950 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 61   date and time a
20960 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  s obtained from 
20970 74 68 65 20 78 43 75 72 72 65 6e 74 54 69 6d 65  the xCurrentTime
20980 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68 65 20 5b   method.of the [
20990 73 71 6c 69 74 65 33 5f 76 66 73 5d 20 6f 62 6a  sqlite3_vfs] obj
209a0 65 63 74 20 69 6e 20 75 73 65 2e 0a 5e 54 68 65  ect in use..^The
209b0 20 27 6e 6f 77 27 20 61 72 67 75 6d 65 6e 74 20   'now' argument 
209c0 74 6f 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  to date and time
209d0 20 66 75 6e 63 74 69 6f 6e 73 20 61 6c 77 61 79   functions alway
209e0 73 20 72 65 74 75 72 6e 73 20 65 78 61 63 74 6c  s returns exactl
209f0 79 20 74 68 65 0a 73 61 6d 65 20 76 61 6c 75 65  y the.same value
20a00 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 69 6e   for multiple in
20a10 76 6f 63 61 74 69 6f 6e 73 20 77 69 74 68 69 6e  vocations within
20a20 20 74 68 65 20 73 61 6d 65 20 5b 73 71 6c 69 74   the same [sqlit
20a30 65 33 5f 73 74 65 70 28 29 5d 20 63 61 6c 6c 2e  e3_step()] call.
20a40 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b  .^[http://en.wik
20a50 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
20a60 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69 76  Coordinated_Univ
20a70 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55 6e 69  ersal_Time | Uni
20a80 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74  versal Coordinat
20a90 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d 20 69  ed Time (UTC)] i
20aa0 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d 61 74  s used. .^Format
20ab0 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68 74 74   12 is the .[htt
20ac0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
20ad0 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e  .org/wiki/Julian
20ae0 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61  _day | Julian da
20af0 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72 65 73  y number].expres
20b00 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74 69 6e  sed as a floatin
20b10 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 3c  g point value..<
20b20 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 6d 61 74 73  /p>..<p>.Formats
20b30 20 32 20 74 68 72 6f 75 67 68 20 31 30 20 6d 61   2 through 10 ma
20b40 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20  y be optionally 
20b50 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 74 69  followed by a ti
20b60 6d 65 7a 6f 6e 65 20 69 6e 64 69 63 61 74 6f 72  mezone indicator
20b70 20 6f 66 20 74 68 65 20 66 6f 72 6d 0a 22 3c 69   of the form."<i
20b80 3e 26 23 39 31 3b 2b 2d 26 23 39 33 3b 48 48 3a  >&#91;+-&#93;HH:
20b90 4d 4d 3c 2f 69 3e 22 20 6f 72 20 6a 75 73 74 20  MM</i>" or just 
20ba0 22 3c 69 3e 5a 3c 2f 69 3e 22 2e 20 20 54 68 65  "<i>Z</i>".  The
20bb0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
20bc0 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 55 54 43  unctions use UTC
20bd0 20 6f 72 20 22 7a 75 6c 75 22 0a 74 69 6d 65 20   or "zulu".time 
20be0 69 6e 74 65 72 6e 61 6c 6c 79 2c 20 61 6e 64 20  internally, and 
20bf0 73 6f 20 74 68 65 20 22 5a 22 20 73 75 66 66 69  so the "Z" suffi
20c00 78 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 41  x is a no-op.  A
20c10 6e 79 20 6e 6f 6e 2d 7a 65 72 6f 20 22 48 48 3a  ny non-zero "HH:
20c20 4d 4d 22 20 73 75 66 66 69 78 20 69 73 0a 73 75  MM" suffix is.su
20c30 62 74 72 61 63 74 65 64 20 66 72 6f 6d 20 74 68  btracted from th
20c40 65 20 69 6e 64 69 63 61 74 65 64 20 64 61 74 65  e indicated date
20c50 20 61 6e 64 20 74 69 6d 65 20 69 6e 20 6f 72 64   and time in ord
20c60 65 72 20 74 6f 20 63 6f 6d 70 75 74 65 20 7a 75  er to compute zu
20c70 6c 75 20 74 69 6d 65 2e 0a 46 6f 72 20 65 78 61  lu time..For exa
20c80 6d 70 6c 65 2c 20 61 6c 6c 20 6f 66 20 74 68 65  mple, all of the
20c90 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 69 6d 65 20   following time 
20ca0 73 74 72 69 6e 67 73 20 61 72 65 20 65 71 75 69  strings are equi
20cb0 76 61 6c 65 6e 74 3a 0a 3c 2f 70 3e 0a 0a 3c 62  valent:.</p>..<b
20cc0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 32 30 31 33 2d  lockquote>.2013-
20cd0 31 30 2d 30 37 20 30 38 3a 32 33 3a 31 39 2e 31  10-07 08:23:19.1
20ce0 32 30 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30  20<br>.2013-10-0
20cf0 37 54 30 38 3a 32 33 3a 31 39 2e 31 32 30 5a 3c  7T08:23:19.120Z<
20d00 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20 30  br>.2013-10-07 0
20d10 34 3a 32 33 3a 31 39 2e 31 32 30 2d 30 34 3a 30  4:23:19.120-04:0
20d20 30 3c 62 72 3e 0a 32 34 35 36 35 37 32 2e 38 34  0<br>.2456572.84
20d30 39 35 32 36 38 35 0a 3c 2f 62 6c 6f 63 6b 71 75  952685.</blockqu
20d40 6f 74 65 3e 0a 0a 3c 70 3e 0a 5e 28 49 6e 20 66  ote>..<p>.^(In f
20d50 6f 72 6d 61 74 73 20 34 2c 20 37 2c 20 61 6e 64  ormats 4, 7, and
20d60 20 31 30 2c 20 74 68 65 20 66 72 61 63 74 69 6f   10, the fractio
20d70 6e 61 6c 20 73 65 63 6f 6e 64 73 20 76 61 6c 75  nal seconds valu
20d80 65 20 53 53 2e 53 53 53 20 63 61 6e 20 68 61 76  e SS.SSS can hav
20d90 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 64 69  e.one or more di
20da0 67 69 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  gits following t
20db0 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
20dc0 2e 20 20 45 78 61 63 74 6c 79 20 74 68 72 65 65  .  Exactly three
20dd0 20 64 69 67 69 74 73 20 61 72 65 0a 73 68 6f 77   digits are.show
20de0 6e 20 69 6e 20 74 68 65 20 65 78 61 6d 70 6c 65  n in the example
20df0 73 20 62 65 63 61 75 73 65 20 6f 6e 6c 79 20 74  s because only t
20e00 68 65 20 66 69 72 73 74 20 74 68 72 65 65 20 64  he first three d
20e10 69 67 69 74 73 20 61 72 65 20 73 69 67 6e 69 66  igits are signif
20e20 69 63 61 6e 74 0a 74 6f 20 74 68 65 20 72 65 73  icant.to the res
20e30 75 6c 74 2c 20 62 75 74 20 74 68 65 20 69 6e 70  ult, but the inp
20e40 75 74 20 73 74 72 69 6e 67 20 63 61 6e 20 68 61  ut string can ha
20e50 76 65 20 66 65 77 65 72 20 6f 72 20 6d 6f 72 65  ve fewer or more
20e60 20 74 68 61 6e 20 74 68 72 65 65 20 64 69 67 69   than three digi
20e70 74 73 0a 61 6e 64 20 74 68 65 20 64 61 74 65 2f  ts.and the date/
20e80 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 77  time functions w
20e90 69 6c 6c 20 73 74 69 6c 6c 20 6f 70 65 72 61 74  ill still operat
20ea0 65 20 63 6f 72 72 65 63 74 6c 79 2e 29 5e 0a 53  e correctly.)^.S
20eb0 69 6d 69 6c 61 72 6c 79 2c 20 66 6f 72 6d 61 74  imilarly, format
20ec0 20 31 32 20 69 73 20 73 68 6f 77 6e 20 77 69 74   12 is shown wit
20ed0 68 20 31 30 20 73 69 67 6e 69 66 69 63 61 6e 74  h 10 significant
20ee0 20 64 69 67 69 74 73 2c 20 62 75 74 20 74 68 65   digits, but the
20ef0 20 64 61 74 65 2f 74 69 6d 65 0a 66 75 6e 63 74   date/time.funct
20f00 69 6f 6e 73 20 77 69 6c 6c 20 72 65 61 6c 6c 79  ions will really
20f10 20 61 63 63 65 70 74 20 61 73 20 6d 61 6e 79 20   accept as many 
20f20 6f 72 20 61 73 20 66 65 77 20 64 69 67 69 74 73  or as few digits
20f30 20 61 73 20 61 72 65 20 6e 65 63 65 73 73 61 72   as are necessar
20f40 79 20 74 6f 0a 72 65 70 72 65 73 65 6e 74 20 74  y to.represent t
20f50 68 65 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75  he Julian day nu
20f60 6d 62 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e  mber..</p>..<h3>
20f70 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33 3e 0a 0a  Modifiers</h3>..
20f80 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20 73 74 72  <p>^The time str
20f90 69 6e 67 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f  ing can be follo
20fa0 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d  wed by zero or m
20fb0 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 20 74 68  ore modifiers th
20fc0 61 74 20 0a 61 6c 74 65 72 20 64 61 74 65 20 61  at .alter date a
20fd0 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 45 61 63  nd/or time. ^Eac
20fe0 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20 61 20  h modifier.is a 
20ff0 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 74  transformation t
21000 68 61 74 20 69 73 20 61 70 70 6c 69 65 64 20 74  hat is applied t
21010 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c 75 65  o the time value
21020 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a 5e 4d   to its left..^M
21030 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 70 70  odifiers are app
21040 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74  lied from left t
21050 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72 20 69  o right; order i
21060 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e 28 54  s important..^(T
21070 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f 64  he available mod
21080 69 66 69 65 72 73 20 61 72 65 20 61 73 20 66 6f  ifiers are as fo
21090 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  llows.</p>..<ol>
210a0 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a 3c  .<li> NNN days.<
210b0 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c 6c  li> NNN hours.<l
210c0 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a 3c  i> NNN minutes.<
210d0 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65 63  li> NNN.NNNN sec
210e0 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f  onds.<li> NNN mo
210f0 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79 65  nths.<li> NNN ye
21100 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f  ars.<li> start o
21110 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74 61  f month.<li> sta
21120 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e 20  rt of year.<li> 
21130 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c 69  start of day.<li
21140 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69 3e  > weekday N.<li>
21150 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e 20   unixepoch.<li> 
21160 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20 75  localtime.<li> u
21170 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e  tc .</ol>)^..<p>
21180 5e 54 68 65 20 66 69 72 73 74 20 73 69 78 20 6d  ^The first six m
21190 6f 64 69 66 69 65 72 73 20 28 31 20 74 68 72 6f  odifiers (1 thro
211a0 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79 20 61  ugh 6) .simply a
211b0 64 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64  dd the specified
211c0 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20   amount of time 
211d0 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  to the date and 
211e0 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65 64 20  time .specified 
211f0 62 79 20 74 68 65 20 70 72 65 63 65 64 69 6e 67  by the preceding
21200 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e 64 20   timestring and 
21210 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 54 68 65 20  modifiers..^The 
21220 27 73 27 20 63 68 61 72 61 63 74 65 72 20 61 74  's' character at
21230 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
21240 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73 20 69  modifier names i
21250 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 4e 6f 74  s optional..^Not
21260 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d 6e 3b  e that "&plusmn;
21270 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f 72 6b  NNN months" work
21280 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67 20 74  s by rendering t
21290 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65  he original date
212a0 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59 2d 4d   into.the YYYY-M
212b0 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61 64 64  M-DD format, add
212c0 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d 6e 3b  ing the &plusmn;
212d0 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20 6d 6f  NNN to the MM mo
212e0 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65 6e 0a  nth value, then.
212f0 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68 65 20  normalizing the 
21300 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73 2c 20  result.  ^Thus, 
21310 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  for example, the
21320 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d 33 31   data 2001-03-31
21330 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27 2b 31   modified.by '+1
21340 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61 6c 6c   month' initiall
21350 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d 30 34  y yields 2001-04
21360 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c 20 6f  -31, but April o
21370 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79 73 0a  nly has 30 days.
21380 73 6f 20 74 68 65 20 64 61 74 65 20 69 73 20 6e  so the date is n
21390 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32 30 30  ormalized to 200
213a0 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73 69 6d  1-05-01.  ^A sim
213b0 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63 63 75  ilar effect occu
213c0 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72 69 67  rs when.the orig
213d0 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46 65 62  inal date is Feb
213e0 72 75 61 72 79 20 32 39 20 6f 66 20 61 20 6c 65  ruary 29 of a le
213f0 61 70 79 65 61 72 20 61 6e 64 20 74 68 65 20 6d  apyear and the m
21400 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c 75 73  odifier is.&plus
21410 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65 72 65  mn;N years where
21420 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c 74   N is not a mult
21430 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c 2f 70  iple of four.</p
21440 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74 61 72  >..<p>^The "star
21450 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72 73 20  t of" modifiers 
21460 28 37 20 74 68 72 6f 75 67 68 20 39 29 20 73 68  (7 through 9) sh
21470 69 66 74 20 74 68 65 20 64 61 74 65 20 62 61 63  ift the date bac
21480 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65 20 62  kwards .to the b
21490 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
214a0 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20 79  current month, y
214b0 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e 0a  ear or day.</p>.
214c0 0a 3c 70 3e 5e 28 54 68 65 20 22 77 65 65 6b 64  .<p>^(The "weekd
214d0 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76  ay" modifier adv
214e0 61 6e 63 65 73 20 74 68 65 20 64 61 74 65 20 66  ances the date f
214f0 6f 72 77 61 72 64 2c 20 69 66 20 6e 65 63 65 73  orward, if neces
21500 73 61 72 79 2c 0a 74 6f 20 74 68 65 20 6e 65 78  sary,.to the nex
21510 74 20 64 61 74 65 20 77 68 65 72 65 20 74 68 65  t date where the
21520 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65 72 20   weekday number 
21530 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69 73 20  is N. Sunday is 
21540 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31 2c 0a  0, Monday is 1,.
21550 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 29 5e 0a  and so forth.)^.
21560 5e 49 66 20 74 68 65 20 64 61 74 65 20 69 73 20  ^If the date is 
21570 61 6c 72 65 61 64 79 20 6f 6e 20 74 68 65 20 64  already on the d
21580 65 73 69 72 65 64 20 77 65 65 6b 64 61 79 2c 20  esired weekday, 
21590 74 68 65 20 22 77 65 65 6b 64 61 79 22 20 6d 6f  the "weekday" mo
215a0 64 69 66 69 65 72 0a 6c 65 61 76 65 73 20 74 68  difier.leaves th
215b0 65 20 64 61 74 65 20 75 6e 63 68 61 6e 67 65 64  e date unchanged
215c0 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  .  </p>..<p>^The
215d0 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
215e0 69 66 69 65 72 20 28 31 31 29 20 6f 6e 6c 79 20  ifier (11) only 
215f0 77 6f 72 6b 73 20 69 66 20 69 74 20 69 6d 6d 65  works if it imme
21600 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20  diately follows 
21610 0a 61 20 74 69 6d 65 73 74 72 69 6e 67 20 69 6e  .a timestring in
21620 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44 20   the DDDDDDDDDD 
21630 66 6f 72 6d 61 74 2e 20 0a 5e 54 68 69 73 20 6d  format. .^This m
21640 6f 64 69 66 69 65 72 20 63 61 75 73 65 73 20 74  odifier causes t
21650 68 65 20 44 44 44 44 44 44 44 44 44 44 20 74 6f  he DDDDDDDDDD to
21660 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
21670 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e  not .as a Julian
21680 20 64 61 79 20 6e 75 6d 62 65 72 20 61 73 20 69   day number as i
21690 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64  t normally would
216a0 20 62 65 2c 20 62 75 74 20 61 73 0a 5b 68 74 74   be, but as.[htt
216b0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
216c0 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78 5f 74  .org/wiki/Unix_t
216d0 69 6d 65 20 7c 20 55 6e 69 78 20 54 69 6d 65 5d  ime | Unix Time]
216e0 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65 72 20 6f   - the .number o
216f0 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  f seconds since 
21700 31 39 37 30 2e 20 20 49 66 20 74 68 65 20 22 75  1970.  If the "u
21710 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
21720 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c  er does not.foll
21730 6f 77 20 61 20 74 69 6d 65 73 74 72 69 6e 67 20  ow a timestring 
21740 6f 66 20 74 68 65 20 66 6f 72 6d 20 44 44 44 44  of the form DDDD
21750 44 44 44 44 44 44 20 77 68 69 63 68 20 65 78 70  DDDDDD which exp
21760 72 65 73 73 65 73 20 74 68 65 20 6e 75 6d 62 65  resses the numbe
21770 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r.of seconds sin
21780 63 65 20 31 39 37 30 20 6f 72 20 69 66 20 6f 74  ce 1970 or if ot
21790 68 65 72 20 6d 6f 64 69 66 69 65 72 73 0a 73 65  her modifiers.se
217a0 70 61 72 61 74 65 20 74 68 65 20 22 75 6e 69 78  parate the "unix
217b0 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20  epoch" modifier 
217c0 66 72 6f 6d 20 70 72 69 6f 72 20 44 44 44 44 44  from prior DDDDD
217d0 44 44 44 44 44 20 74 68 65 6e 20 74 68 65 0a 62  DDDDD then the.b
217e0 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66  ehavior is undef
217f0 69 6e 65 64 2e 0a 46 6f 72 20 53 51 4c 69 74 65  ined..For SQLite
21800 20 76 65 72 73 69 6f 6e 73 20 62 65 66 6f 72 65   versions before
21810 20 33 2e 31 36 2e 30 20 28 5b 64 61 74 65 6f 66   3.16.0 ([dateof
21820 3a 33 2e 31 36 2e 30 5d 29 2c 20 0a 74 68 65 20  :3.16.0]), .the 
21830 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69  "unixepoch" modi
21840 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  fier only works 
21850 66 6f 72 0a 64 61 74 65 73 20 62 65 74 77 65 65  for.dates betwee
21860 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a  n 0000-01-01 00:
21870 30 30 3a 30 30 20 61 6e 64 20 35 33 35 32 2d 31  00:00 and 5352-1
21880 31 2d 30 31 20 31 30 3a 35 32 3a 34 37 20 28 75  1-01 10:52:47 (u
21890 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20 2d 36 32  nix times.of -62
218a0 31 36 37 32 31 39 32 30 30 20 74 68 72 6f 75 67  167219200 throug
218b0 68 20 31 30 36 37 35 31 39 39 31 31 36 37 29 2e  h 106751991167).
218c0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
218d0 61 67 6d 65 6e 74 20 6c 6f 63 61 6c 74 69 6d 65  agment localtime
218e0 20 7b 6c 6f 63 61 6c 74 69 6d 65 20 6d 6f 64 69   {localtime modi
218f0 66 69 65 72 7d 20 7b 27 75 74 63 27 20 6d 6f 64  fier} {'utc' mod
21900 69 66 69 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  ifier}</tcl>.<p>
21910 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65 22  ^The "localtime"
21920 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29 20 61   modifier (12) a
21930 73 73 75 6d 65 73 20 74 68 65 20 74 69 6d 65 20  ssumes the time 
21940 73 74 72 69 6e 67 20 74 6f 20 69 74 73 20 6c 65  string to its le
21950 66 74 20 69 73 20 69 6e 0a 55 6e 69 76 65 72 73  ft is in.Univers
21960 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54  al Coordinated T
21970 69 6d 65 20 28 55 54 43 29 20 61 6e 64 20 61 64  ime (UTC) and ad
21980 6a 75 73 74 73 20 74 68 65 20 74 69 6d 65 0a 73  justs the time.s
21990 74 72 69 6e 67 20 73 6f 20 74 68 61 74 20 69 74  tring so that it
219a0 20 64 69 73 70 6c 61 79 73 20 6c 6f 63 61 6c 74   displays localt
219b0 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61 6c 74  ime.  If "localt
219c0 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61 20 74  ime".follows a t
219d0 69 6d 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ime that is not 
219e0 55 54 43 2c 20 74 68 65 6e 20 74 68 65 20 62 65  UTC, then the be
219f0 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69  havior is undefi
21a00 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75 74 63 22  ned..^(The "utc"
21a10 20 6d 6f 64 69 66 69 65 72 20 69 73 20 74 68 65   modifier is the
21a20 20 6f 70 70 6f 73 69 74 65 20 6f 66 20 22 6c 6f   opposite of "lo
21a30 63 61 6c 74 69 6d 65 22 2e 20 20 0a 22 75 74 63  caltime".  ."utc
21a40 22 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 74  " assumes that t
21a50 68 65 20 73 74 72 69 6e 67 0a 74 6f 20 69 74 73  he string.to its
21a60 20 6c 65 66 74 20 69 73 20 69 6e 20 74 68 65 20   left is in the 
21a70 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61  local timezone a
21a80 6e 64 20 61 64 6a 75 73 74 73 20 74 68 61 74 20  nd adjusts that 
21a90 73 74 72 69 6e 67 20 74 6f 20 62 65 20 69 6e 20  string to be in 
21aa0 55 54 43 2e 29 5e 0a 49 66 20 74 68 65 20 70 72  UTC.)^.If the pr
21ab0 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20 6e 6f  ior string is no
21ac0 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c 20  t in localtime, 
21ad0 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
21ae0 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e 64 65  of "utc" is.unde
21af0 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  fined.</p>..<h3>
21b00 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e  Examples</h3>..^
21b10 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
21b20 63 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e  current date.<p>
21b30 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45  ..<blockquote>SE
21b40 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 29  LECT date('now')
21b50 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ;</blockquote>)^
21b60 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
21b70 68 65 20 6c 61 73 74 20 64 61 79 20 6f 66 20 74  he last day of t
21b80 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68  he current month
21b90 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
21ba0 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27  te>SELECT date('
21bb0 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 6d  now','start of m
21bc0 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27  onth','+1 month'
21bd0 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c  ,'-1 day');.</bl
21be0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
21bf0 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61  p>Compute the da
21c00 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65  te and time give
21c10 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61  n a unix timesta
21c20 6d 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c 2f  mp 1092941466.</
21c30 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
21c40 0a 20 20 20 20 53 45 4c 45 43 54 20 64 61 74 65  .    SELECT date
21c50 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c  time(1092941466,
21c60 20 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c   'unixepoch');.<
21c70 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
21c80 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
21c90 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67   date and time g
21ca0 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65  iven a unix time
21cb0 73 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36  stamp 1092941466
21cc0 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74  , and .compensat
21cd0 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c  e for your local
21ce0 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a   timezone.</p>..
21cf0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
21d00 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31  ELECT datetime(1
21d10 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78  092941466, 'unix
21d20 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69  epoch', 'localti
21d30 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  me');.</blockquo
21d40 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
21d50 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ute the current 
21d60 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c  unix timestamp.<
21d70 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
21d80 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74  >.  SELECT strft
21d90 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b  ime('%s','now');
21da0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
21db0 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
21dc0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 79  he number of day
21dd0 73 20 73 69 6e 63 65 20 74 68 65 20 73 69 67 6e  s since the sign
21de0 69 6e 67 20 6f 66 20 74 68 65 20 55 53 20 44 65  ing of the US De
21df0 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64  claration.of Ind
21e00 65 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a  ependence.</p>..
21e10 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
21e20 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61 79 28  ELECT julianday(
21e30 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64  'now') - juliand
21e40 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34 27 29  ay('1776-07-04')
21e50 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
21e60 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
21e70 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  the number of se
21e80 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20 70 61  conds since a pa
21e90 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20  rticular moment 
21ea0 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62  in 2004:</p>..<b
21eb0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
21ec0 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73  ECT strftime('%s
21ed0 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72 66 74  ','now') - strft
21ee0 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34 2d 30  ime('%s','2004-0
21ef0 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27 29 3b  1-01 02:34:56');
21f00 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
21f10 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74 65 20  ..^(<p>.Compute 
21f20 74 68 65 20 64 61 74 65 20 6f 66 20 74 68 65 20  the date of the 
21f30 66 69 72 73 74 20 54 75 65 73 64 61 79 20 69 6e  first Tuesday in
21f40 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74 68 65   October.for the
21f50 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c   current year..<
21f60 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
21f70 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65 28  >.  SELECT date(
21f80 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20  'now','start of 
21f90 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73  year','+9 months
21fa0 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29 3b 0a  ','weekday 2');.
21fb0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
21fc0 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
21fd0 65 20 74 69 6d 65 20 73 69 6e 63 65 20 74 68 65  e time since the
21fe0 20 75 6e 69 78 20 65 70 6f 63 68 20 69 6e 20 73   unix epoch in s
21ff0 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74  econds .(like st
22000 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77  rftime('%s','now
22010 27 29 20 65 78 63 65 70 74 20 69 6e 63 6c 75 64  ') except includ
22020 65 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61  es fractional pa
22030 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  rt):</p>..<block
22040 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
22050 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27  (julianday('now'
22060 29 20 2d 20 32 34 34 30 35 38 37 2e 35 29 2a 38  ) - 2440587.5)*8
22070 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71  6400.0;.</blockq
22080 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76  uote>)^..<h3>Cav
22090 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c 2f 68  eats And Bugs</h
220a0 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75  3>..<p>The compu
220b0 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20  tation of local 
220c0 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68 65 61  time depends hea
220d0 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68 69 6d  vily on the whim
220e0 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e 73   .of politicians
220f0 20 61 6e 64 20 69 73 20 74 68 75 73 20 64 69 66   and is thus dif
22100 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20 63 6f  ficult to get co
22110 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c  rrect for .all l
22120 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68 69 73  ocales. ^In this
22130 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
22140 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20   the standard C 
22150 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74 69 6f  library .functio
22160 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20  n localtime_r() 
22170 69 73 20 75 73 65 64 20 74 6f 20 61 73 73 69 73  is used to assis
22180 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75 6c 61  t in the calcula
22190 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74  tion of .local t
221a0 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c 6f 63  ime.  ^(The .loc
221b0 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66 75 6e  altime_r() C fun
221c0 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f  ction normally o
221d0 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 79 65  nly works for ye
221e0 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39 37 30  ars.between 1970
221f0 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72 20 64   and 2037. For d
22200 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 69  ates outside thi
22210 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74 65 20  s range, SQLite 
22220 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 61 70  .attempts to map
22230 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f 20 61   the year into a
22240 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79 65 61  n equivalent yea
22250 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73 20 72  r within .this r
22260 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63 61 6c  ange, do the cal
22270 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  culation, then m
22280 61 70 20 74 68 65 20 79 65 61 72 20 62 61 63 6b  ap the year back
22290 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54  .)^</p>...<p>^(T
222a0 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f  hese functions o
222b0 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64 61 74  nly work for dat
222c0 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d  es between 0000-
222d0 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 0a 61  01-01 00:00:00.a
222e0 6e 64 20 39 39 39 39 2d 31 32 2d 33 31 20 32 33  nd 9999-12-31 23
222f0 3a 35 39 3a 35 39 20 28 6a 75 6c 69 61 6e 20 64  :59:59 (julian d
22300 61 79 20 6e 75 6d 62 65 72 73 20 31 37 32 31 30  ay numbers 17210
22310 35 39 2e 35 20 74 68 72 6f 75 67 68 20 35 33 37  59.5 through 537
22320 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72 20 64  3484.5).)^.For d
22330 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 61  ates outside tha
22340 74 20 72 61 6e 67 65 2c 20 74 68 65 20 72 65 73  t range, the res
22350 75 6c 74 73 20 6f 66 20 74 68 65 73 65 0a 66 75  ults of these.fu
22360 6e 63 74 69 6f 6e 73 20 61 72 65 20 75 6e 64 65  nctions are unde
22370 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e  fined.</p>..<p>N
22380 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73  on-Vista Windows
22390 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79 20   platforms only 
223a0 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65 74 20  support one set 
223b0 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20 0a 56  of DST rules. .V
223c0 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f 72  ista only suppor
223d0 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66 6f 72  ts two. Therefor
223e0 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c 61 74  e, on these plat
223f0 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69 63  forms, .historic
22400 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61 74 69  al DST calculati
22410 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e 63 6f  ons will be inco
22420 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78 61 6d  rrect. .For exam
22430 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53 2c 20  ple, in the US, 
22440 69 6e 20 32 30 30 37 20 74 68 65 20 44 53 54 20  in 2007 the DST 
22450 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e 20 0a  rules changed. .
22460 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77  Non-Vista Window
22470 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70 70 6c  s platforms appl
22480 79 20 74 68 65 20 6e 65 77 20 32 30 30 37 20 44  y the new 2007 D
22490 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c 6c  ST rules .to all
224a0 20 70 72 65 76 69 6f 75 73 20 79 65 61 72 73 20   previous years 
224b0 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61 20 64  as well. Vista d
224c0 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62 65 74  oes somewhat bet
224d0 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65 73 75  ter.getting resu
224e0 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61 63 6b  lts correct back
224f0 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e 20 74   to 1986, when t
22500 68 65 20 72 75 6c 65 73 20 77 65 72 65 20 61 6c  he rules were al
22510 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a  so changed.</p>.
22520 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61 6c  .<p>All internal
22530 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61 73   computations as
22540 73 75 6d 65 20 74 68 65 20 0a 5b 68 74 74 70 3a  sume the .[http:
22550 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
22560 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69 61  rg/wiki/Gregoria
22570 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47 72 65  n_calendar | Gre
22580 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d  gorian calendar]
22590 0a 73 79 73 74 65 6d 2e 20 20 49 74 20 69 73 20  .system.  It is 
225a0 61 6c 73 6f 20 61 73 73 75 6d 65 64 20 74 68 61  also assumed tha
225b0 74 20 65 76 65 72 79 0a 64 61 79 20 69 73 20 65  t every.day is e
225c0 78 61 63 74 6c 79 20 38 36 34 30 30 20 73 65 63  xactly 86400 sec
225d0 6f 6e 64 73 20 69 6e 20 64 75 72 61 74 69 6f 6e  onds in duration
225e0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
225f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22630 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
22640 69 6f 6e 20 7b 41 67 67 72 65 67 61 74 65 20 46  ion {Aggregate F
22650 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e  unctions} aggfun
22660 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 75 6e 73  c {*aggfunc}.uns
22670 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63  et -nocomplain c
22680 6f 72 65 66 75 6e 63 73 65 74 0a 0a 66 75 6e 63  orefuncset..func
22690 64 65 66 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61  def {avg(X)} {*a
226a0 76 67 20 7b 61 76 67 28 29 20 61 67 67 72 65 67  vg {avg() aggreg
226b0 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  ate function}} {
226c0 0a 20 20 5e 54 68 65 20 61 76 67 28 29 20 66 75  .  ^The avg() fu
226d0 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73  nction.  returns
226e0 20 74 68 65 20 61 76 65 72 61 67 65 20 76 61 6c   the average val
226f0 75 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  ue of all non-NU
22700 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68  LL <i>X</i> with
22710 69 6e 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e  in a.  group.  ^
22720 53 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20  String and BLOB 
22730 76 61 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e  values that do n
22740 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d  ot look like num
22750 62 65 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72  bers are.  inter
22760 70 72 65 74 65 64 20 61 73 20 30 2e 0a 20 20 5e  preted as 0..  ^
22770 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76  The result of av
22780 67 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20  g() is always a 
22790 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
227a0 61 6c 75 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a  alue as long as.
227b0 20 20 61 74 20 74 68 65 72 65 20 69 73 20 61 74    at there is at
227c0 20 6c 65 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e   least one non-N
227d0 55 4c 4c 20 69 6e 70 75 74 20 65 76 65 6e 20 69  ULL input even i
227e0 66 20 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61  f all.  inputs a
227f0 72 65 20 69 6e 74 65 67 65 72 73 2e 20 20 5e 54  re integers.  ^T
22800 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67  he result of avg
22810 28 29 20 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e  () is NULL if an
22820 64 20 6f 6e 6c 79 20 69 66 0a 20 20 74 68 65 72  d only if.  ther
22830 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
22840 4c 20 69 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66  L inputs.  .}..f
22850 75 6e 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29  uncdef {count(X)
22860 20 63 6f 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75   count(*)} {*cou
22870 6e 74 20 7b 63 6f 75 6e 74 28 29 20 61 67 67 72  nt {count() aggr
22880 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d  egate function}}
22890 20 7b 0a 20 20 5e 54 68 65 20 63 6f 75 6e 74 28   {.  ^The count(
228a0 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
228b0 72 6e 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66  rns.  a count of
228c0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74   the number of t
228d0 69 6d 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58  imes.  that <i>X
228e0 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  </i> is not NULL
228f0 20 69 6e 20 61 20 67 72 6f 75 70 2e 20 20 5e 54   in a group.  ^T
22900 68 65 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63  he count(*) func
22910 74 69 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20  tion.  (with no 
22920 61 72 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72  arguments) retur
22930 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns the total num
22940 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
22950 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e  he group..}..fun
22960 63 64 65 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63  cdef {group_conc
22970 61 74 28 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63  at(X) group_conc
22980 61 74 28 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72  at(X,Y)} {.  *gr
22990 6f 75 70 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75  oup_concat {grou
229a0 70 5f 63 6f 6e 63 61 74 28 29 20 61 67 67 72 65  p_concat() aggre
229b0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d  gate function}.}
229c0 20 7b 0a 20 20 5e 54 68 65 20 67 72 6f 75 70 5f   {.  ^The group_
229d0 63 6f 6e 63 61 74 28 29 20 66 75 6e 63 74 69 6f  concat() functio
229e0 6e 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74  n returns.  a st
229f0 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68  ring which is th
22a00 65 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20  e concatenation 
22a10 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  of.  all non-NUL
22a20 4c 20 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58  L values of <i>X
22a30 3c 2f 69 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d  </i>.  ^If param
22a40 65 74 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73  eter <i>Y</i> is
22a50 20 70 72 65 73 65 6e 74 20 74 68 65 6e 0a 20 20   present then.  
22a60 69 74 20 69 73 20 75 73 65 64 20 61 73 20 74 68  it is used as th
22a70 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65  e separator.  be
22a80 74 77 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20  tween instances 
22a90 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41  of <i>X</i>.  ^A
22aa0 20 63 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20   comma (",") is 
22ab0 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61  used as the sepa
22ac0 72 61 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c  rator.  if <i>Y<
22ad0 2f 69 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 20  /i> is omitted. 
22ae0 20 54 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   The order of th
22af0 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 65  e concatenated e
22b00 6c 65 6d 65 6e 74 73 20 69 73 0a 20 20 61 72 62  lements is.  arb
22b10 69 74 72 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64  itrary..}..funcd
22b20 65 66 20 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61  ef {max(X)} {*ma
22b30 78 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61  xAggFunc *agg_ma
22b40 78 20 7b 6d 61 78 28 29 20 61 67 67 72 65 67 61  x {max() aggrega
22b50 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  te function}} {.
22b60 20 20 5e 54 68 65 20 6d 61 78 28 29 20 61 67 67    ^The max() agg
22b70 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a  regate function.
22b80 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 61    returns the ma
22b90 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 61  ximum value of a
22ba0 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ll values in the
22bb0 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d   group..  ^The m
22bc0 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20  aximum value is 
22bd0 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 77  the value that w
22be0 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64  ould be returned
22bf0 20 6c 61 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52   last in an.  OR
22c00 44 45 52 20 42 59 20 6f 6e 20 74 68 65 20 73 61  DER BY on the sa
22c10 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67  me column.  ^Agg
22c20 72 65 67 61 74 65 20 6d 61 78 28 29 20 72 65 74  regate max() ret
22c30 75 72 6e 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20  urns NULL .  if 
22c40 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72  and only if ther
22c50 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
22c60 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  L values in the 
22c70 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65  group..}..funcde
22c80 66 20 7b 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e  f {min(X)} {*min
22c90 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e  AggFunc *agg_min
22ca0 20 7b 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74   {min() aggregat
22cb0 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  e function}} {. 
22cc0 20 5e 54 68 65 20 6d 69 6e 28 29 20 61 67 67 72   ^The min() aggr
22cd0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20  egate function. 
22ce0 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 69 6e   returns the min
22cf0 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61  imum non-NULL va
22d00 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65  lue of all value
22d10 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
22d20 20 20 5e 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76    ^The minimum v
22d30 61 6c 75 65 20 69 73 20 74 68 65 20 66 69 72 73  alue is the firs
22d40 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  t non-NULL value
22d50 20 74 68 61 74 20 77 6f 75 6c 64 20 61 70 70 65   that would appe
22d60 61 72 0a 20 20 69 6e 20 61 6e 20 4f 52 44 45 52  ar.  in an ORDER
22d70 20 42 59 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d   BY of the colum
22d80 6e 2e 0a 20 20 5e 41 67 67 72 65 67 61 74 65 20  n..  ^Aggregate 
22d90 6d 69 6e 28 29 20 72 65 74 75 72 6e 73 20 4e 55  min() returns NU
22da0 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  LL if and only i
22db0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e  f there are no n
22dc0 6f 6e 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73  on-NULL.  values
22dd0 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d   in the group..}
22de0 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58  ..funcdef {sum(X
22df0 29 20 74 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20  ) total(X)} {.  
22e00 2a 73 75 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74  *sumFunc *sum *t
22e10 6f 74 61 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67  otal.  {sum() ag
22e20 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
22e30 7d 0a 20 20 7b 74 6f 74 61 6c 28 29 20 61 67 67  }.  {total() agg
22e40 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
22e50 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28  .} {.  ^The sum(
22e60 29 20 61 6e 64 20 74 6f 74 61 6c 28 29 20 61 67  ) and total() ag
22e70 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
22e80 73 0a 20 20 72 65 74 75 72 6e 20 73 75 6d 20 6f  s.  return sum o
22e90 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  f all non-NULL v
22ea0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
22eb0 75 70 2e 0a 20 20 5e 49 66 20 74 68 65 72 65 20  up..  ^If there 
22ec0 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
22ed0 69 6e 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20  input rows then 
22ee0 73 75 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20  sum() returns.  
22ef0 4e 55 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29  NULL but total()
22f00 20 72 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20   returns 0.0..  
22f10 4e 55 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d  NULL is not norm
22f20 61 6c 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72  ally a helpful r
22f30 65 73 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75  esult for the su
22f40 6d 20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62  m of no rows.  b
22f50 75 74 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64  ut the SQL stand
22f60 61 72 64 20 72 65 71 75 69 72 65 73 20 69 74 20  ard requires it 
22f70 61 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20  and most other. 
22f80 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
22f90 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20  gines implement 
22fa0 73 75 6d 28 29 20 74 68 61 74 20 77 61 79 20 73  sum() that way s
22fb0 6f 20 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74  o SQLite does it
22fc0 20 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 77   in the.  same w
22fd0 61 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62  ay in order to b
22fe0 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20  e compatible.   
22ff0 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  The non-standard
23000 20 74 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f   total() functio
23010 6e 0a 20 20 69 73 20 70 72 6f 76 69 64 65 64 20  n.  is provided 
23020 61 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  as a convenient 
23030 77 61 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  way to work arou
23040 6e 64 20 74 68 69 73 20 64 65 73 69 67 6e 20 70  nd this design p
23050 72 6f 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20  roblem.  in the 
23060 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70  SQL language.</p
23070 3e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 72 65 73  >..  <p>^The res
23080 75 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69  ult of total() i
23090 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74  s always a float
230a0 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
230b0 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
230c0 66 20 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e  f sum() is an in
230d0 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 61  teger value if a
230e0 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75  ll non-NULL inpu
230f0 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e  ts are integers.
23100 0a 20 20 5e 49 66 20 61 6e 79 20 69 6e 70 75 74  .  ^If any input
23110 20 74 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69   to sum() is nei
23120 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
23130 6f 72 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e  or a NULL.  then
23140 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61   sum() returns a
23150 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
23160 76 61 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69  value.  which mi
23170 67 68 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78  ght be an approx
23180 69 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74  imation to the t
23190 72 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20  rue sum.</p>..  
231a0 3c 70 3e 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74  <p>^Sum() will t
231b0 68 72 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72  hrow an "integer
231c0 20 6f 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70   overflow" excep
231d0 74 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75  tion if all inpu
231e0 74 73 0a 20 20 61 72 65 20 69 6e 74 65 67 65 72  ts.  are integer
231f0 73 20 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20  s or NULL.  and 
23200 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66  an integer overf
23210 6c 6f 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e  low occurs at an
23220 79 20 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74  y point during t
23230 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a  he computation..
23240 20 20 5e 54 6f 74 61 6c 28 29 20 6e 65 76 65 72    ^Total() never
23250 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67   throws an integ
23260 65 72 20 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c  er overflow..}.<
23270 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e 0a 54 68 65 20  /tcl>...<p>.The 
23280 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
23290 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20  ons shown below 
232a0 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79  are available by
232b0 20 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74   default.  Addit
232c0 69 6f 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20  ional.aggregate 
232d0 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65  functions writte
232e0 6e 20 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64  n in C may be ad
232f0 64 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b  ded using the .[
23300 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
23310 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41  unction()]</a>.A
23320 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e  PI.</p>..<p>.^In
23330 20 61 6e 79 20 61 67 67 72 65 67 61 74 65 20 66   any aggregate f
23340 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b  unction that tak
23350 65 73 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  es a single argu
23360 6d 65 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d  ment, that argum
23370 65 6e 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65  ent.can be prece
23380 64 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f  ded by the keywo
23390 72 64 20 44 49 53 54 49 4e 43 54 2e 20 20 5e 49  rd DISTINCT.  ^I
233a0 6e 20 73 75 63 68 20 63 61 73 65 73 2c 20 64 75  n such cases, du
233b0 70 6c 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73  plicate.elements
233c0 20 61 72 65 20 66 69 6c 74 65 72 65 64 20 62 65   are filtered be
233d0 66 6f 72 65 20 62 65 69 6e 67 20 70 61 73 73 65  fore being passe
233e0 64 20 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65  d into the aggre
233f0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e  gate function..^
23400 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
23410 20 66 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74   function "count
23420 28 64 69 73 74 69 6e 63 74 20 58 29 22 20 77 69  (distinct X)" wi
23430 6c 6c 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ll return the nu
23440 6d 62 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74  mber.of distinct
23450 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d   values of colum
23460 6e 20 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74  n X instead of t
23470 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
23480 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75  of non-null.valu
23490 65 73 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a  es in column X..
234a0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74 20  </p>..<tcl>.set 
234b0 6c 78 20 7b 7d 0a 66 6f 72 65 61 63 68 20 62 61  lx {}.foreach ba
234c0 73 65 73 79 6e 74 61 78 20 5b 61 72 72 61 79 20  sesyntax [array 
234d0 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73 65  names corefuncse
234e0 74 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b  t] {.  foreach {
234f0 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20  syntax keywords 
23500 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63 73  desc} $corefuncs
23510 65 74 28 24 62 61 73 65 73 79 6e 74 61 78 29 20  et($basesyntax) 
23520 62 72 65 61 6b 0a 20 20 72 65 67 65 78 70 20 7b  break.  regexp {
23530 5e 5b 61 2d 7a 5f 5d 2b 7d 20 24 62 61 73 65 73  ^[a-z_]+} $bases
23540 79 6e 74 61 78 20 66 72 61 67 6d 65 6e 74 0a 20  yntax fragment. 
23550 20 66 6f 72 65 61 63 68 20 63 6f 72 65 73 79 6e   foreach coresyn
23560 74 61 78 20 24 73 79 6e 74 61 78 20 7b 0a 20 20  tax $syntax {.  
23570 20 20 6c 61 70 70 65 6e 64 20 6c 78 20 5b 6c 69    lappend lx [li
23580 73 74 20 24 66 72 61 67 6d 65 6e 74 20 24 63 6f  st $fragment $co
23590 72 65 73 79 6e 74 61 78 20 30 5d 0a 20 20 7d 0a  resyntax 0].  }.
235a0 7d 0a 68 64 5f 6c 69 73 74 5f 6f 66 5f 6c 69 6e  }.hd_list_of_lin
235b0 6b 73 20 7b 7d 20 32 32 35 20 5b 6c 73 6f 72 74  ks {} 225 [lsort
235c0 20 2d 69 6e 64 65 78 20 31 20 24 6c 78 5d 0a 0a   -index 1 $lx]..
235d0 68 64 5f 70 75 74 73 6e 6c 20 22 3c 68 72 20 63  hd_putsnl "<hr c
235e0 6c 61 73 73 3d 27 78 68 72 27 3e 22 0a 68 64 5f  lass='xhr'>".hd_
235f0 70 75 74 73 6e 6c 20 22 3c 64 6c 3e 22 0a 66 6f  putsnl "<dl>".fo
23600 72 65 61 63 68 20 62 61 73 65 73 79 6e 74 61 78  reach basesyntax
23610 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20 6e   [lsort [array n
23620 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73 65 74  ames corefuncset
23630 5d 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b  ]] {.  foreach {
23640 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20  syntax keywords 
23650 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63 73  desc} $corefuncs
23660 65 74 28 24 62 61 73 65 73 79 6e 74 61 78 29 20  et($basesyntax) 
23670 62 72 65 61 6b 0a 20 20 72 65 67 73 75 62 20 2d  break.  regsub -
23680 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e  all {\s+} [strin
23690 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d 20  g trim $syntax] 
236a0 7b 3c 62 72 20 2f 3e 7d 20 73 79 6e 74 61 78 0a  {<br />} syntax.
236b0 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c    regsub -all {\
236c0 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79  (([^*)]+)\)} $sy
236d0 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e  ntax {(<i>\1</i>
236e0 29 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73  )} syntax.  regs
236f0 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e  ub -all {,} $syn
23700 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73  tax {</i>,<i>} s
23710 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d  yntax.  regsub -
23720 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f  all {<i>\.\.\.</
23730 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e  i>} $syntax {...
23740 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 65 78  } syntax.  regex
23750 70 20 7b 5e 5b 61 2d 7a 5d 2b 7d 20 24 62 61 73  p {^[a-z]+} $bas
23760 65 73 79 6e 74 61 78 20 66 72 61 67 6d 65 6e 74  esyntax fragment
23770 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20  .  if {[llength 
23780 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b  $keywords]==0} {
23790 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61 2d  .    regexp {[a-
237a0 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61  z_]+} $syntax na
237b0 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65  me.    hd_fragme
237c0 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20  nt $name *$name 
237d0 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66  "${name}() SQL f
237e0 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73  unction".  } els
237f0 65 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61 67  e {.    set frag
23800 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65  name [lindex $ke
23810 79 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72 65  ywords 0].    re
23820 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a  gsub -all {[^a-z
23830 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20  ]} $fragname {} 
23840 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f  fragname.    hd_
23850 66 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e 61  fragment $fragna
23860 6d 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b  me.    eval hd_k
23870 65 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67 20  eywords [string 
23880 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65  map {\n { }} $ke
23890 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64  ywords].  }.  hd
238a0 5f 70 75 74 73 20 22 3c 64 74 3e 3c 70 3e 3c 62  _puts "<dt><p><b
238b0 3e 24 73 79 6e 74 61 78 3c 2f 62 3e 3c 2f 64 74  >$syntax</b></dt
238c0 3e 22 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20  >".  hd_resolve 
238d0 22 3c 64 64 3e 3c 70 3e 24 64 65 73 63 3c 2f 64  "<dd><p>$desc</d
238e0 64 3e 5c 6e 22 0a 7d 0a 68 64 5f 70 75 74 73 6e  d>\n".}.hd_putsn
238f0 6c 20 22 3c 2f 64 6c 3e 22 0a 0a 23 23 23 23 23  l "</dl>"..#####
23900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23940 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
23950 6e 20 49 4e 53 45 52 54 20 69 6e 73 65 72 74 20  n INSERT insert 
23960 7b 49 4e 53 45 52 54 20 2a 49 4e 53 45 52 54 73  {INSERT *INSERTs
23970 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
23980 6c 65 44 69 61 67 72 61 6d 20 69 6e 73 65 72 74  leDiagram insert
23990 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
239a0 3e 54 68 65 20 49 4e 53 45 52 54 20 73 74 61 74  >The INSERT stat
239b0 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e 20 74  ement comes in t
239c0 68 72 65 65 20 62 61 73 69 63 20 66 6f 72 6d 73  hree basic forms
239d0 2e 20 20 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e  .  .<ol>.<li><p>
239e0 3c 62 3e 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c  <b>INSERT INTO <
239f0 2f 62 3e 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 3c  /b><i>table</i><
23a00 62 3e 20 56 41 4c 55 45 53 28 2e 2e 2e 29 3b 3c  b> VALUES(...);<
23a10 2f 62 3e 0a 3c 70 3e 5e 54 68 65 20 66 69 72 73  /b>.<p>^The firs
23a20 74 20 66 6f 72 6d 20 28 77 69 74 68 20 74 68 65  t form (with the
23a30 20 22 56 41 4c 55 45 53 22 20 6b 65 79 77 6f 72   "VALUES" keywor
23a40 64 29 20 63 72 65 61 74 65 73 20 6f 6e 65 20 6f  d) creates one o
23a50 72 20 6d 6f 72 65 0a 6e 65 77 20 72 6f 77 73 20  r more.new rows 
23a60 69 6e 0a 61 6e 20 65 78 69 73 74 69 6e 67 20 74  in.an existing t
23a70 61 62 6c 65 2e 20 5e 49 66 20 74 68 65 20 3c 79  able. ^If the <y
23a80 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  yterm>column-nam
23a90 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74 20  e</yyterm> list 
23aa0 61 66 74 65 72 0a 3c 79 79 74 65 72 6d 3e 74 61  after.<yyterm>ta
23ab0 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ble-name</yyterm
23ac0 3e 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65  > is omitted the
23ad0 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  n the number.of 
23ae0 76 61 6c 75 65 73 20 69 6e 73 65 72 74 65 64 20  values inserted 
23af0 69 6e 74 6f 20 65 61 63 68 20 72 6f 77 0a 6d 75  into each row.mu
23b00 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
23b10 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
23b20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
23b30 61 62 6c 65 2e 20 5e 49 6e 20 74 68 69 73 20 63  able. ^In this c
23b40 61 73 65 0a 74 68 65 20 72 65 73 75 6c 74 20 6f  ase.the result o
23b50 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
23b60 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65   left-most expre
23b70 73 73 69 6f 6e 20 66 72 6f 6d 20 65 61 63 68 20  ssion from each 
23b80 74 65 72 6d 20 6f 66 0a 74 68 65 20 56 41 4c 55  term of.the VALU
23b90 45 53 20 6c 69 73 74 20 69 73 20 69 6e 73 65 72  ES list is inser
23ba0 74 65 64 20 69 6e 74 6f 20 74 68 65 20 6c 65 66  ted into the lef
23bb0 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f 66  t-most column of
23bc0 20 65 61 63 68 20 6e 65 77 20 72 6f 77 2c 0a 61   each new row,.a
23bd0 6e 64 20 73 6f 20 66 6f 72 74 68 20 66 6f 72 20  nd so forth for 
23be0 65 61 63 68 20 73 75 62 73 65 71 75 65 6e 74 20  each subsequent 
23bf0 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 49 66 20  expression. ^If 
23c00 61 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e  a <yyterm>column
23c10 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 6c  -name</yyterm>.l
23c20 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64  ist is specified
23c30 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  , then the numbe
23c40 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 65  r of values in e
23c50 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 0a  ach term of the.
23c60 56 41 4c 55 45 20 6c 69 73 74 20 6d 75 73 74 20  VALUE list must 
23c70 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72  match the number
23c80 20 6f 66 0a 73 70 65 63 69 66 69 65 64 20 63 6f   of.specified co
23c90 6c 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f 66 20  lumns. ^Each of 
23ca0 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e  the named column
23cb0 73 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f 77  s of the new row
23cc0 20 69 73 20 70 6f 70 75 6c 61 74 65 64 0a 77 69   is populated.wi
23cd0 74 68 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  th the results o
23ce0 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
23cf0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 56   corresponding V
23d00 41 4c 55 45 53 20 65 78 70 72 65 73 73 69 6f 6e  ALUES expression
23d10 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e 73  . ^Table.columns
23d20 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70   that do not app
23d30 65 61 72 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ear in the colum
23d40 6e 20 6c 69 73 74 20 61 72 65 20 70 6f 70 75 6c  n list are popul
23d50 61 74 65 64 20 77 69 74 68 20 74 68 65 20 0a 5b  ated with the .[
23d60 64 65 66 61 75 6c 74 20 63 6f 6c 75 6d 6e 20 76  default column v
23d70 61 6c 75 65 5d 20 28 73 70 65 63 69 66 69 65 64  alue] (specified
23d80 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
23d90 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
23da0 74 61 74 65 6d 65 6e 74 29 2c 20 6f 72 0a 77 69  tatement), or.wi
23db0 74 68 20 4e 55 4c 4c 20 69 66 20 6e 6f 20 5b 64  th NULL if no [d
23dc0 65 66 61 75 6c 74 20 76 61 6c 75 65 5d 20 69 73  efault value] is
23dd0 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 6c 69   specified...<li
23de0 3e 3c 70 3e 3c 62 3e 49 4e 53 45 52 54 20 49 4e  ><p><b>INSERT IN
23df0 54 4f 20 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 3c  TO </b><i>table<
23e00 2f 69 3e 3c 62 3e 20 53 45 4c 45 43 54 20 2e 2e  /i><b> SELECT ..
23e10 2e 3b 3c 2f 62 3e 0a 3c 70 3e 54 68 65 20 73 65  .;</b>.<p>The se
23e20 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65  cond form of the
23e30 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
23e40 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 5b 53 45  t contains a [SE
23e50 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a  LECT] statement.
23e60 69 6e 73 74 65 61 64 20 6f 66 20 61 20 56 41 4c  instead of a VAL
23e70 55 45 53 20 63 6c 61 75 73 65 2e 20 5e 41 20 6e  UES clause. ^A n
23e80 65 77 20 65 6e 74 72 79 20 69 73 20 69 6e 73 65  ew entry is inse
23e90 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61  rted into the ta
23ea0 62 6c 65 20 66 6f 72 20 65 61 63 68 0a 72 6f 77  ble for each.row
23eb0 20 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e 65   of data returne
23ec0 64 20 62 79 20 65 78 65 63 75 74 69 6e 67 20 74  d by executing t
23ed0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
23ee0 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c 75 6d  ent. ^If a colum
23ef0 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66  n-list is.specif
23f00 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20  ied, the number 
23f10 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
23f20 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
23f30 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74  SELECT must be t
23f40 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e  he same.as the n
23f50 75 6d 62 65 72 20 6f 66 20 69 74 65 6d 73 20 69  umber of items i
23f60 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c 69 73  n the column-lis
23f70 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  t. ^Otherwise, i
23f80 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74  f no column-list
23f90 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
23fa0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
23fb0 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
23fc0 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  lt of the SELECT
23fd0 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
23fe0 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e.as the number 
23ff0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
24000 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20 53 45  e table. ^Any SE
24010 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20  LECT statement, 
24020 69 6e 63 6c 75 64 69 6e 67 0a 5b 63 6f 6d 70 6f  including.[compo
24030 75 6e 64 20 53 45 4c 45 43 54 73 5d 20 61 6e 64  und SELECTs] and
24040 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
24050 74 73 20 77 69 74 68 20 5b 4f 52 44 45 52 20 42  ts with [ORDER B
24060 59 5d 20 61 6e 64 2f 6f 72 20 5b 4c 49 4d 49 54  Y] and/or [LIMIT
24070 5d 20 63 6c 61 75 73 65 73 2c 20 0a 6d 61 79 20  ] clauses, .may 
24080 62 65 20 75 73 65 64 20 69 6e 20 61 6e 20 49 4e  be used in an IN
24090 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  SERT statement o
240a0 66 20 74 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c 70  f this form...<p
240b0 3e 54 6f 20 61 76 6f 69 64 20 61 20 70 61 72 73  >To avoid a pars
240c0 69 6e 67 20 61 6d 62 69 67 75 69 74 79 2c 20 74  ing ambiguity, t
240d0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
240e0 65 6e 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79  ent should alway
240f0 73 0a 63 6f 6e 74 61 69 6e 20 61 20 57 48 45 52  s.contain a WHER
24100 45 20 63 6c 61 75 73 65 2c 20 65 76 65 6e 20 69  E clause, even i
24110 66 20 74 68 61 74 20 63 6c 61 75 73 65 20 69 73  f that clause is
24120 20 73 69 6d 70 6c 79 20 22 57 48 45 52 45 20 74   simply "WHERE t
24130 72 75 65 22 2c 0a 69 66 20 74 68 65 20 5b 75 70  rue",.if the [up
24140 73 65 72 74 2d 63 6c 61 75 73 65 5d 20 69 73 20  sert-clause] is 
24150 70 72 65 73 65 6e 74 2e 20 20 57 69 74 68 6f 75  present.  Withou
24160 74 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  t the WHERE clau
24170 73 65 2c 20 74 68 65 0a 70 61 72 73 65 72 20 64  se, the.parser d
24180 6f 65 73 20 6e 6f 74 20 6b 6e 6f 77 20 69 66 20  oes not know if 
24190 74 68 65 20 74 6f 6b 65 6e 20 22 4f 4e 22 20 69  the token "ON" i
241a0 73 20 70 61 72 74 20 6f 66 20 61 20 6a 6f 69 6e  s part of a join
241b0 20 63 6f 6e 73 74 72 61 69 6e 74 0a 6f 6e 20 74   constraint.on t
241c0 68 65 20 53 45 4c 45 43 54 2c 20 6f 72 20 74 68  he SELECT, or th
241d0 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
241e0 68 65 20 5b 75 70 73 65 72 74 2d 63 6c 61 75 73  he [upsert-claus
241f0 65 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 49  e]...<li><p><b>I
24200 4e 53 45 52 54 20 49 4e 54 4f 20 3c 2f 62 3e 3c  NSERT INTO </b><
24210 69 3e 74 61 62 6c 65 3c 2f 69 3e 3c 62 3e 20 44  i>table</i><b> D
24220 45 46 41 55 4c 54 20 56 41 4c 55 45 53 3b 3c 2f  EFAULT VALUES;</
24230 62 3e 0a 3c 70 3e 54 68 65 20 74 68 69 72 64 20  b>.<p>The third 
24240 66 6f 72 6d 20 6f 66 20 61 6e 20 49 4e 53 45 52  form of an INSER
24250 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 77  T statement is w
24260 69 74 68 20 44 45 46 41 55 4c 54 20 56 41 4c 55  ith DEFAULT VALU
24270 45 53 2e 0a 5e 28 54 68 65 20 49 4e 53 45 52 54  ES..^(The INSERT
24280 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56 41 4c   ... DEFAULT VAL
24290 55 45 53 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  UES statement in
242a0 73 65 72 74 73 20 61 20 73 69 6e 67 6c 65 20 6e  serts a single n
242b0 65 77 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 0a  ew row into the.
242c0 6e 61 6d 65 64 20 74 61 62 6c 65 2e 29 5e 20 5e  named table.)^ ^
242d0 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  Each column of t
242e0 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f  he new row is po
242f0 70 75 6c 61 74 65 64 20 77 69 74 68 20 69 74 73  pulated with its
24300 20 0a 5b 64 65 66 61 75 6c 74 20 76 61 6c 75 65   .[default value
24310 5d 2c 20 6f 72 20 77 69 74 68 20 61 20 4e 55 4c  ], or with a NUL
24320 4c 20 69 66 20 6e 6f 20 64 65 66 61 75 6c 74 20  L if no default 
24330 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69  value is specifi
24340 65 64 20 0a 61 73 20 70 61 72 74 20 6f 66 20 74  ed .as part of t
24350 68 65 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  he column defini
24360 74 69 6f 6e 20 69 6e 20 74 68 65 20 5b 43 52 45  tion in the [CRE
24370 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
24380 6d 65 6e 74 2e 0a 54 68 65 20 5b 75 70 73 65 72  ment..The [upser
24390 74 2d 63 6c 61 75 73 65 5d 20 69 73 20 6e 6f 74  t-clause] is not
243a0 20 73 75 70 70 6f 72 74 65 64 20 61 66 74 65 72   supported after
243b0 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 2e   DEFAULT VALUES.
243c0 0a 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 54 68  ..</ol>..<p>.^Th
243d0 65 20 69 6e 69 74 69 61 6c 20 22 49 4e 53 45 52  e initial "INSER
243e0 54 22 20 6b 65 79 77 6f 72 64 20 63 61 6e 20 62  T" keyword can b
243f0 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 22 52  e replaced by."R
24400 45 50 4c 41 43 45 22 20 6f 72 20 22 49 4e 53 45  EPLACE" or "INSE
24410 52 54 20 4f 52 20 3c 69 3e 61 63 74 69 6f 6e 3c  RT OR <i>action<
24420 2f 69 3e 22 20 74 6f 20 73 70 65 63 69 66 79 20  /i>" to specify 
24430 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63  an alternative.c
24440 6f 6e 73 74 72 61 69 6e 74 20 5b 4f 4e 20 43 4f  onstraint [ON CO
24450 4e 46 4c 49 43 54 7c 63 6f 6e 66 6c 69 63 74 20  NFLICT|conflict 
24460 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
24470 69 74 68 6d 5d 20 74 6f 20 75 73 65 20 64 75 72  ithm] to use dur
24480 69 6e 67 20 0a 74 68 61 74 20 6f 6e 65 20 49 4e  ing .that one IN
24490 53 45 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a 46 6f  SERT command..Fo
244a0 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r compatibility 
244b0 77 69 74 68 20 4d 79 53 51 4c 2c 20 5e 74 68 65  with MySQL, ^the
244c0 20 70 61 72 73 65 72 20 61 6c 6c 6f 77 73 20 74   parser allows t
244d0 68 65 20 75 73 65 20 6f 66 20 74 68 65 0a 73 69  he use of the.si
244e0 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c 61 20  ngle keyword <a 
244f0 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65 70 6c 61  href="lang_repla
24500 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c 41 43 45  ce.html">REPLACE
24510 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61 6c 69 61  </a> as an .alia
24520 73 20 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52  s for "INSERT OR
24530 20 52 45 50 4c 41 43 45 22 2e 0a 0a 3c 70 3e 5e   REPLACE"...<p>^
24540 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 3c  (The optional "<
24550 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69  i>schema-name</i
24560 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70 72 65 66 69  ><b>.</b>" prefi
24570 78 20 6f 6e 20 74 68 65 20 0a 3c 79 79 74 65 72  x on the .<yyter
24580 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79  m>table-name</yy
24590 74 65 72 6d 3e 0a 69 73 20 73 75 70 70 6f 72 74  term>.is support
245a0 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c  ed for top-level
245b0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
245c0 74 73 20 6f 6e 6c 79 2e 29 5e 20 20 5e 54 68 65  ts only.)^  ^The
245d0 20 74 61 62 6c 65 20 6e 61 6d 65 20 6d 75 73 74   table name must
245e0 20 62 65 0a 75 6e 71 75 61 6c 69 66 69 65 64 20   be.unqualified 
245f0 66 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74 65  for INSERT state
24600 6d 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75 72  ments that occur
24610 20 77 69 74 68 69 6e 20 5b 43 52 45 41 54 45 20   within [CREATE 
24620 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
24630 6e 74 73 2e 0a 5e 53 69 6d 69 6c 61 72 6c 79 2c  nts..^Similarly,
24640 20 74 68 65 20 22 44 45 46 41 55 4c 54 20 56 41   the "DEFAULT VA
24650 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68  LUES" form of th
24660 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  e INSERT stateme
24670 6e 74 20 69 73 20 73 75 70 70 6f 72 74 65 64 20  nt is supported 
24680 66 6f 72 0a 74 6f 70 2d 6c 65 76 65 6c 20 49 4e  for.top-level IN
24690 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20  SERT statements 
246a0 6f 6e 6c 79 20 61 6e 64 20 6e 6f 74 20 66 6f 72  only and not for
246b0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
246c0 74 73 20 77 69 74 68 69 6e 0a 74 72 69 67 67 65  ts within.trigge
246d0 72 73 2e 0a 3c 70 3e 0a 0a 3c 70 3e 54 68 65 20  rs..<p>..<p>The 
246e0 6f 70 74 69 6f 6e 61 6c 20 22 41 53 20 3c 79 79  optional "AS <yy
246f0 74 65 72 6d 3e 61 6c 69 61 73 3c 2f 79 79 74 65  term>alias</yyte
24700 72 6d 3e 22 20 70 68 72 61 73 65 20 70 72 6f 76  rm>" phrase prov
24710 69 64 65 73 20 61 6e 20 61 6c 74 65 72 6e 61 74  ides an alternat
24720 69 76 65 0a 6e 61 6d 65 20 66 6f 72 20 74 68 65  ive.name for the
24730 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63   table into whic
24740 68 20 63 6f 6e 74 65 6e 74 20 69 73 20 62 65 69  h content is bei
24750 6e 67 20 69 6e 73 65 72 74 65 64 2e 20 20 54 68  ng inserted.  Th
24760 65 20 61 6c 69 61 73 20 6e 61 6d 65 0a 63 61 6e  e alias name.can
24770 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20   be used within 
24780 57 48 45 52 45 20 61 6e 64 20 53 45 54 20 63 6c  WHERE and SET cl
24790 61 75 73 65 73 20 6f 66 20 74 68 65 20 5b 55 50  auses of the [UP
247a0 53 45 52 54 5d 2e 20 20 49 66 20 74 68 65 72 65  SERT].  If there
247b0 20 69 73 20 6e 6f 0a 5b 75 70 73 65 72 74 2d 63   is no.[upsert-c
247c0 6c 61 75 73 65 5d 2c 20 74 68 65 6e 20 74 68 65  lause], then the
247d0 20 3c 79 79 74 65 72 6d 3e 61 6c 69 61 73 3c 2f   <yyterm>alias</
247e0 79 79 74 65 72 6d 3e 20 69 73 20 70 6f 69 6e 74  yyterm> is point
247f0 6c 65 73 73 2c 20 62 75 74 20 61 6c 73 6f 0a 68  less, but also.h
24800 61 72 6d 6c 65 73 73 2e 0a 0a 3c 70 3e 53 65 65  armless...<p>See
24810 20 74 68 65 20 73 65 70 61 72 61 74 65 20 5b 55   the separate [U
24820 50 53 45 52 54 5d 20 64 6f 63 75 6d 65 6e 74 61  PSERT] documenta
24830 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 61 64 64  tion for the add
24840 69 74 69 6f 6e 61 6c 20 74 72 61 69 6c 69 6e 67  itional trailing
24850 0a 73 79 6e 74 61 78 20 74 68 61 74 20 63 61 6e  .syntax that can
24860 20 63 61 75 73 65 20 61 6e 20 49 4e 53 45 52 54   cause an INSERT
24870 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 6e   to behave as an
24880 20 55 50 44 41 54 45 20 69 66 20 74 68 65 20 49   UPDATE if the I
24890 4e 53 45 52 54 20 77 6f 75 6c 64 0a 6f 74 68 65  NSERT would.othe
248a0 72 77 69 73 65 20 76 69 6f 6c 61 74 65 20 61 20  rwise violate a 
248b0 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73 74  uniqueness const
248c0 72 61 69 6e 74 2e 20 20 54 68 65 20 5b 75 70 73  raint.  The [ups
248d0 65 72 74 20 63 6c 61 75 73 65 5d 20 69 73 20 6e  ert clause] is n
248e0 6f 74 0a 61 6c 6c 6f 77 65 64 20 6f 6e 20 61 6e  ot.allowed on an
248f0 20 22 49 4e 53 45 52 54 20 2e 2e 2e 20 44 45 46   "INSERT ... DEF
24900 41 55 4c 54 20 56 41 4c 55 45 53 22 2e 0a 0a 0a  AULT VALUES"....
24910 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
24920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24960 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 75 70 73  ####.Section ups
24970 65 72 74 20 55 50 53 45 52 54 20 7b 55 50 53 45  ert UPSERT {UPSE
24980 52 54 20 7b 75 70 73 65 72 74 20 63 6c 61 75 73  RT {upsert claus
24990 65 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  e}}..RecursiveBu
249a0 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70 73 65  bbleDiagram upse
249b0 72 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e  rt-clause.</tcl>
249c0 0a 0a 3c 70 3e 55 50 53 45 52 54 20 69 73 20 61  ..<p>UPSERT is a
249d0 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20   special syntax 
249e0 61 64 64 69 74 69 6f 6e 20 74 6f 20 5b 49 4e 53  addition to [INS
249f0 45 52 54 5d 20 74 68 61 74 20 63 61 75 73 65 73  ERT] that causes
24a00 20 74 68 65 0a 49 4e 53 45 52 54 20 74 6f 20 62   the.INSERT to b
24a10 65 68 61 76 65 20 61 73 20 61 6e 20 5b 55 50 44  ehave as an [UPD
24a20 41 54 45 5d 20 6f 72 20 61 20 6e 6f 2d 6f 70 20  ATE] or a no-op 
24a30 69 66 20 74 68 65 20 49 4e 53 45 52 54 20 77 6f  if the INSERT wo
24a40 75 6c 64 20 76 69 6f 6c 61 74 65 0a 61 20 75 6e  uld violate.a un
24a50 69 71 75 65 6e 65 73 73 20 63 6f 6e 73 74 72 61  iqueness constra
24a60 69 6e 74 2e 0a 55 50 53 45 52 54 20 69 73 20 6e  int..UPSERT is n
24a70 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e  ot standard SQL.
24a80 20 20 55 50 53 45 52 54 20 69 6e 20 53 51 4c 69    UPSERT in SQLi
24a90 74 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65 0a 73  te follows the.s
24aa0 79 6e 74 61 78 20 65 73 74 61 62 6c 69 73 68 65  yntax establishe
24ab0 64 20 62 79 20 50 6f 73 74 67 72 65 53 51 4c 2e  d by PostgreSQL.
24ac0 0a 55 50 53 45 52 54 20 73 79 6e 74 61 78 20 77  .UPSERT syntax w
24ad0 61 73 20 61 64 64 65 64 20 74 6f 20 53 51 4c 69  as added to SQLi
24ae0 74 65 20 77 69 74 68 20 76 65 72 73 69 6f 6e 20  te with version 
24af0 33 2e 32 34 2e 30 20 28 5b 64 61 74 65 6f 66 3a  3.24.0 ([dateof:
24b00 33 2e 32 34 2e 30 5d 29 2e 0a 0a 3c 70 3e 41 6e  3.24.0])...<p>An
24b10 20 55 50 53 45 52 54 20 69 73 20 61 6e 20 6f 72   UPSERT is an or
24b20 64 69 6e 61 72 79 20 5b 49 4e 53 45 52 54 5d 20  dinary [INSERT] 
24b30 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
24b40 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 74 68  s followed by.th
24b50 65 20 73 70 65 63 69 61 6c 20 4f 4e 20 43 4f 4e  e special ON CON
24b60 46 4c 49 43 54 20 63 6c 61 75 73 65 20 73 68 6f  FLICT clause sho
24b70 77 6e 20 61 62 6f 76 65 2e 0a 0a 3c 70 3e 54 68  wn above...<p>Th
24b80 65 20 73 79 6e 74 61 78 20 74 68 61 74 20 6f 63  e syntax that oc
24b90 63 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20  curs in between 
24ba0 74 68 65 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54  the "ON CONFLICT
24bb0 22 20 61 6e 64 20 22 44 4f 22 20 6b 65 79 77 6f  " and "DO" keywo
24bc0 72 64 73 0a 69 73 20 63 61 6c 6c 65 64 20 74 68  rds.is called th
24bd0 65 20 22 63 6f 6e 66 6c 69 63 74 20 74 61 72 67  e "conflict targ
24be0 65 74 22 2e 20 20 54 68 65 20 63 6f 6e 66 6c 69  et".  The confli
24bf0 63 74 20 74 61 72 67 65 74 20 73 70 65 63 69 66  ct target specif
24c00 69 65 73 20 61 20 73 70 65 63 69 66 69 63 0a 75  ies a specific.u
24c10 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73 74 72  niqueness constr
24c20 61 69 6e 74 20 74 68 61 74 20 77 69 6c 6c 20 74  aint that will t
24c30 72 69 67 67 65 72 20 74 68 65 20 75 70 73 65 72  rigger the upser
24c40 74 2e 20 20 54 68 65 20 63 6f 6e 66 6c 69 63 74  t.  The conflict
24c50 20 74 61 72 67 65 74 0a 69 73 20 72 65 71 75 69   target.is requi
24c60 72 65 64 20 66 6f 72 20 44 4f 20 55 50 44 41 54  red for DO UPDAT
24c70 45 20 75 70 73 65 72 74 73 2c 20 62 75 74 20 69  E upserts, but i
24c80 73 20 6f 70 74 69 6f 6e 61 6c 20 66 6f 72 20 44  s optional for D
24c90 4f 20 4e 4f 54 48 49 4e 47 2e 0a 41 20 44 4f 20  O NOTHING..A DO 
24ca0 4e 4f 54 48 49 4e 47 20 75 70 73 65 72 74 20 77  NOTHING upsert w
24cb0 69 74 68 6f 75 74 20 61 20 63 6f 6e 66 6c 69 63  ithout a conflic
24cc0 74 20 74 61 72 67 65 74 20 77 6f 72 6b 73 20 74  t target works t
24cd0 68 65 20 73 61 6d 65 20 61 73 20 61 6e 0a 5b 4f  he same as an.[O
24ce0 4e 20 43 4f 4e 46 4c 49 43 54 7c 49 4e 53 45 52  N CONFLICT|INSER
24cf0 54 20 4f 52 20 49 47 4e 4f 52 45 5d 2e 0a 0a 3c  T OR IGNORE]...<
24d00 70 3e 49 66 20 74 68 65 20 69 6e 73 65 72 74 20  p>If the insert 
24d10 6f 70 65 72 61 74 69 6f 6e 20 77 6f 75 6c 64 20  operation would 
24d20 63 61 75 73 65 20 74 68 65 20 75 6e 69 71 75 65  cause the unique
24d30 6e 65 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 20  ness constraint 
24d40 69 64 65 6e 74 69 66 69 65 64 0a 62 79 20 74 68  identified.by th
24d50 65 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65  e conflict-targe
24d60 74 20 63 6c 61 75 73 65 20 74 6f 20 66 61 69 6c  t clause to fail
24d70 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 73 65 72  , then the inser
24d80 74 20 69 73 20 6f 6d 69 74 74 65 64 20 61 6e 64  t is omitted and
24d90 0a 65 69 74 68 65 72 20 74 68 65 20 44 4f 20 4e  .either the DO N
24da0 4f 54 48 49 4e 47 20 6f 72 20 44 4f 20 55 50 44  OTHING or DO UPD
24db0 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  ATE operation is
24dc0 20 70 65 72 66 6f 72 6d 65 64 20 69 6e 73 74 65   performed inste
24dd0 61 64 2e 0a 49 6e 20 74 68 65 20 63 61 73 65 20  ad..In the case 
24de0 6f 66 20 61 20 6d 75 6c 74 69 2d 72 6f 77 20 69  of a multi-row i
24df0 6e 73 65 72 74 2c 20 74 68 69 73 20 64 65 63 69  nsert, this deci
24e00 73 69 6f 6e 20 69 73 20 6d 61 64 65 20 73 65 70  sion is made sep
24e10 61 72 61 74 65 6c 79 0a 66 6f 72 20 65 61 63 68  arately.for each
24e20 20 72 6f 77 20 6f 66 20 74 68 65 20 69 6e 73 65   row of the inse
24e30 72 74 2e 0a 0a 3c 70 3e 43 6f 6c 75 6d 6e 20 6e  rt...<p>Column n
24e40 61 6d 65 73 20 69 6e 20 74 68 65 20 65 78 70 72  ames in the expr
24e50 65 73 73 69 6f 6e 73 20 6f 66 20 61 20 44 4f 20  essions of a DO 
24e60 55 50 44 41 54 45 20 72 65 66 65 72 20 74 6f 20  UPDATE refer to 
24e70 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 75 6e 63  the original.unc
24e80 68 61 6e 67 65 64 20 76 61 6c 75 65 20 6f 66 20  hanged value of 
24e90 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 62 65 66 6f  the column, befo
24ea0 72 65 20 74 68 65 20 61 74 74 65 6d 70 74 65 64  re the attempted
24eb0 20 49 4e 53 45 52 54 2e 20 20 54 6f 20 75 73 65   INSERT.  To use
24ec0 20 74 68 65 0a 76 61 6c 75 65 20 74 68 61 74 20   the.value that 
24ed0 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
24ee0 69 6e 73 65 72 74 65 64 20 68 61 64 20 74 68 65  inserted had the
24ef0 20 63 6f 6e 73 74 72 61 69 6e 74 20 6e 6f 74 20   constraint not 
24f00 66 61 69 6c 65 64 2c 0a 61 64 64 20 74 68 65 20  failed,.add the 
24f10 73 70 65 63 69 61 6c 20 22 65 78 63 6c 75 64 65  special "exclude
24f20 64 2e 22 20 74 61 62 6c 65 20 71 75 61 6c 69 66  d." table qualif
24f30 69 65 72 20 74 6f 20 74 68 65 20 63 6f 6c 75 6d  ier to the colum
24f40 6e 20 6e 61 6d 65 2e 0a 0a 3c 70 3e 53 6f 6d 65  n name...<p>Some
24f50 20 65 78 61 6d 70 6c 65 73 20 77 69 6c 6c 20 68   examples will h
24f60 65 6c 70 20 69 6c 6c 75 73 74 72 61 74 65 20 74  elp illustrate t
24f70 68 65 20 64 69 66 66 65 72 65 6e 63 65 3a 0a 0a  he difference:..
24f80 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
24f90 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 76  >.CREATE TABLE v
24fa0 6f 63 61 62 75 6c 61 72 79 28 77 6f 72 64 20 54  ocabulary(word T
24fb0 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  EXT PRIMARY KEY,
24fc0 20 63 6f 75 6e 74 20 49 4e 54 20 44 45 46 41 55   count INT DEFAU
24fd0 4c 54 20 31 29 3b 0a 49 4e 53 45 52 54 20 49 4e  LT 1);.INSERT IN
24fe0 54 4f 20 76 6f 63 61 62 75 6c 61 72 79 28 77 6f  TO vocabulary(wo
24ff0 72 64 29 20 56 41 4c 55 45 53 28 27 6a 6f 76 69  rd) VALUES('jovi
25000 61 6c 27 29 0a 20 20 4f 4e 20 43 4f 4e 46 4c 49  al').  ON CONFLI
25010 43 54 28 77 6f 72 64 29 20 44 4f 20 55 50 44 41  CT(word) DO UPDA
25020 54 45 20 53 45 54 20 63 6f 75 6e 74 3d 63 6f 75  TE SET count=cou
25030 6e 74 2b 31 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  nt+1;.</pre></bl
25040 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
25050 65 20 75 70 73 65 72 74 20 61 62 6f 76 65 20 69  e upsert above i
25060 6e 73 65 72 74 73 20 74 68 65 20 6e 65 77 20 76  nserts the new v
25070 6f 63 61 62 75 6c 61 72 79 20 77 6f 72 64 20 22  ocabulary word "
25080 6a 6f 76 69 61 6c 22 20 69 66 20 74 68 61 74 0a  jovial" if that.
25090 77 6f 72 64 20 69 73 20 6e 6f 74 20 61 6c 72 65  word is not alre
250a0 61 64 79 20 69 6e 20 74 68 65 20 64 69 63 74 69  ady in the dicti
250b0 6f 6e 61 72 79 2c 20 6f 72 20 69 66 20 69 74 20  onary, or if it 
250c0 69 73 20 61 6c 72 65 61 64 79 20 69 6e 20 74 68  is already in th
250d0 65 0a 64 69 63 74 69 6f 6e 61 72 79 2c 20 69 74  e.dictionary, it
250e0 20 69 6e 63 72 65 6d 65 6e 74 73 20 74 68 65 20   increments the 
250f0 63 6f 75 6e 74 65 72 2e 20 20 54 68 65 20 22 63  counter.  The "c
25100 6f 75 6e 74 2b 31 22 20 65 78 70 72 65 73 73 69  ount+1" expressi
25110 6f 6e 0a 63 6f 75 6c 64 20 61 6c 73 6f 20 62 65  on.could also be
25120 20 77 72 69 74 74 65 6e 20 61 73 20 22 76 6f 63   written as "voc
25130 61 62 75 6c 61 72 79 2e 63 6f 75 6e 74 22 2e 20  abulary.count". 
25140 20 50 6f 73 74 67 72 65 53 51 4c 20 72 65 71 75   PostgreSQL requ
25150 69 72 65 73 20 74 68 65 0a 73 65 63 6f 6e 64 20  ires the.second 
25160 66 6f 72 6d 2c 20 62 75 74 20 53 51 4c 69 74 65  form, but SQLite
25170 20 61 63 63 65 70 74 73 20 65 69 74 68 65 72 2e   accepts either.
25180 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
25190 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
251a0 20 70 68 6f 6e 65 62 6f 6f 6b 28 6e 61 6d 65 20   phonebook(name 
251b0 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59  TEXT PRIMARY KEY
251c0 2c 20 70 68 6f 6e 65 6e 75 6d 62 65 72 20 54 45  , phonenumber TE
251d0 58 54 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  XT);.INSERT INTO
251e0 20 70 68 6f 6e 65 62 6f 6f 6b 28 6e 61 6d 65 2c   phonebook(name,
251f0 70 68 6f 6e 65 6e 75 6d 62 65 72 29 20 56 41 4c  phonenumber) VAL
25200 55 45 53 28 27 41 6c 69 63 65 27 2c 27 37 30 34  UES('Alice','704
25210 2d 35 35 35 2d 31 32 31 32 27 29 0a 20 20 4f 4e  -555-1212').  ON
25220 20 43 4f 4e 46 4c 49 43 54 28 6e 61 6d 65 29 20   CONFLICT(name) 
25230 44 4f 20 55 50 44 41 54 45 20 53 45 54 20 70 68  DO UPDATE SET ph
25240 6f 6e 65 6e 75 6d 62 65 72 3d 65 78 63 6c 75 64  onenumber=exclud
25250 65 64 2e 70 68 6f 6e 65 6e 75 6d 62 65 72 3b 0a  ed.phonenumber;.
25260 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
25270 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68 65 20 73  te>..<p>In the s
25280 65 63 6f 6e 64 20 65 78 61 6d 70 6c 65 2c 20 74  econd example, t
25290 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  he expression in
252a0 20 74 68 65 20 44 4f 20 55 50 44 41 54 45 20 63   the DO UPDATE c
252b0 6c 61 75 73 65 20 69 73 0a 6f 66 20 74 68 65 20  lause is.of the 
252c0 66 6f 72 6d 20 22 65 78 63 6c 75 64 65 64 2e 70  form "excluded.p
252d0 68 6f 6e 65 6e 75 6d 62 65 72 22 2e 20 20 54 68  honenumber".  Th
252e0 65 20 22 65 78 63 6c 75 64 65 64 2e 22 20 70 72  e "excluded." pr
252f0 65 66 69 78 20 63 61 75 73 65 73 20 74 68 65 0a  efix causes the.
25300 22 70 68 6f 6e 65 6e 75 6d 62 65 72 22 20 74 6f  "phonenumber" to
25310 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 76 61   refer to the va
25320 6c 75 65 20 66 6f 72 20 70 68 6f 6e 65 6e 75 6d  lue for phonenum
25330 62 65 72 20 74 68 61 74 20 77 6f 75 6c 64 20 68  ber that would h
25340 61 76 65 20 62 65 65 6e 0a 69 6e 73 65 72 74 65  ave been.inserte
25350 64 20 68 61 64 20 74 68 65 72 65 20 62 65 65 6e  d had there been
25360 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 2e 20 20 48   no conflict.  H
25370 65 6e 63 65 2c 20 74 68 65 20 65 66 66 65 63 74  ence, the effect
25380 20 6f 66 20 74 68 65 20 75 70 73 65 72 74 0a 69   of the upsert.i
25390 73 20 74 6f 20 69 6e 73 65 72 74 20 61 20 70 68  s to insert a ph
253a0 6f 6e 65 6e 75 6d 62 65 72 20 6f 66 20 41 6c 69  onenumber of Ali
253b0 63 65 20 69 66 20 6e 6f 6e 65 20 65 78 69 73 74  ce if none exist
253c0 73 2c 20 6f 72 20 74 6f 20 6f 76 65 72 77 72 69  s, or to overwri
253d0 74 65 0a 61 6e 79 20 70 72 69 6f 72 20 70 68 6f  te.any prior pho
253e0 6e 65 6e 75 6d 62 65 72 20 66 6f 72 20 41 6c 69  nenumber for Ali
253f0 63 65 20 77 69 74 68 20 74 68 65 20 6e 65 77 20  ce with the new 
25400 6f 6e 65 2e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68  one...<p>Note th
25410 61 74 20 74 68 65 20 44 4f 20 55 50 44 41 54 45  at the DO UPDATE
25420 20 63 6c 61 75 73 65 20 61 63 74 73 20 6f 6e 6c   clause acts onl
25430 79 20 6f 6e 20 74 68 65 20 73 69 6e 67 6c 65 20  y on the single 
25440 72 6f 77 0a 74 68 61 74 20 65 78 70 65 72 69 65  row.that experie
25450 6e 63 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61  nced the constra
25460 69 6e 74 20 65 72 72 6f 72 20 64 75 72 69 6e 67  int error during
25470 20 49 4e 53 45 52 54 2e 20 20 49 74 20 69 73 20   INSERT.  It is 
25480 6e 6f 74 0a 6e 65 63 65 73 73 61 72 79 20 74 6f  not.necessary to
25490 20 69 6e 63 6c 75 64 65 20 61 20 57 48 45 52 45   include a WHERE
254a0 20 63 6c 61 75 73 65 20 74 68 61 74 20 72 65 73   clause that res
254b0 74 72 69 63 74 69 6f 6e 73 20 74 68 65 20 61 63  trictions the ac
254c0 74 69 6f 6e 0a 74 6f 20 74 68 61 74 20 6f 6e 65  tion.to that one
254d0 20 72 6f 77 2e 20 20 54 68 65 20 6f 6e 6c 79 20   row.  The only 
254e0 75 73 65 20 66 6f 72 20 74 68 65 20 57 48 45 52  use for the WHER
254f0 45 20 63 6c 61 75 73 65 20 61 74 0a 74 68 65 20  E clause at.the 
25500 65 6e 64 20 6f 66 20 74 68 65 20 44 4f 20 55 50  end of the DO UP
25510 44 41 54 45 20 69 73 20 74 6f 20 6f 70 74 69 6f  DATE is to optio
25520 6e 61 6c 6c 79 20 63 68 61 6e 67 65 20 74 68 65  nally change the
25530 20 44 4f 20 55 50 44 41 54 45 0a 69 6e 74 6f 20   DO UPDATE.into 
25540 61 20 6e 6f 2d 6f 70 20 64 65 70 65 6e 64 69 6e  a no-op dependin
25550 67 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  g on the origina
25560 6c 20 61 6e 64 2f 6f 72 20 6e 65 77 20 76 61 6c  l and/or new val
25570 75 65 73 2e 0a 46 6f 72 20 65 78 61 6d 70 6c 65  ues..For example
25580 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
25590 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
255a0 45 20 70 68 6f 6e 65 62 6f 6f 6b 32 28 0a 20 20  E phonebook2(.  
255b0 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52  name TEXT PRIMAR
255c0 59 20 4b 45 59 2c 0a 20 20 70 68 6f 6e 65 6e 75  Y KEY,.  phonenu
255d0 6d 62 65 72 20 54 45 58 54 2c 0a 20 20 76 61 6c  mber TEXT,.  val
255e0 69 64 44 61 74 65 20 44 41 54 45 0a 29 3b 0a 49  idDate DATE.);.I
255f0 4e 53 45 52 54 20 49 4e 54 4f 20 70 68 6f 6e 65  NSERT INTO phone
25600 62 6f 6f 6b 32 28 6e 61 6d 65 2c 70 68 6f 6e 65  book2(name,phone
25610 6e 75 6d 62 65 72 2c 76 61 6c 69 64 44 61 74 65  number,validDate
25620 29 0a 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63  ).  VALUES('Alic
25630 65 27 2c 27 37 30 34 2d 35 35 35 2d 31 32 31 32  e','704-555-1212
25640 27 2c 27 32 30 31 38 2d 30 35 2d 30 38 27 29 0a  ','2018-05-08').
25650 20 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 6e 61    ON CONFLICT(na
25660 6d 65 29 20 44 4f 20 55 50 44 41 54 45 20 53 45  me) DO UPDATE SE
25670 54 0a 20 20 20 20 70 68 6f 6e 65 6e 75 6d 62 65  T.    phonenumbe
25680 72 3d 65 78 63 6c 75 64 65 64 2e 70 68 6f 6e 65  r=excluded.phone
25690 6e 75 6d 62 65 72 2c 0a 20 20 20 20 76 61 6c 69  number,.    vali
256a0 64 44 61 74 65 3d 65 78 63 6c 75 64 65 64 2e 76  dDate=excluded.v
256b0 61 6c 69 64 44 61 74 65 0a 20 20 57 48 45 52 45  alidDate.  WHERE
256c0 20 65 78 63 6c 75 64 65 64 2e 76 61 6c 69 64 44   excluded.validD
256d0 61 74 65 3e 70 68 6f 6e 65 62 6f 6f 6b 32 2e 76  ate>phonebook2.v
256e0 61 6c 69 64 44 61 74 65 3b 0a 3c 2f 70 72 65 3e  alidDate;.</pre>
256f0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
25700 70 3e 49 6e 20 74 68 69 73 20 6c 61 73 74 20 65  p>In this last e
25710 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 68 6f 6e  xample, the phon
25720 65 62 6f 6f 6b 32 20 65 6e 74 72 79 20 69 73 20  ebook2 entry is 
25730 6f 6e 6c 79 0a 75 70 64 61 74 65 64 20 69 66 20  only.updated if 
25740 74 68 65 20 76 61 6c 69 64 44 61 74 65 20 66 6f  the validDate fo
25750 72 20 74 68 65 20 6e 65 77 6c 79 20 69 6e 73 65  r the newly inse
25760 72 74 65 64 20 76 61 6c 75 65 20 69 73 0a 6e 65  rted value is.ne
25770 77 65 72 20 74 68 61 6e 20 74 68 65 20 65 6e 74  wer than the ent
25780 72 79 20 61 6c 72 65 61 64 79 20 69 6e 20 74 68  ry already in th
25790 65 20 74 61 62 6c 65 2e 20 20 49 66 20 74 68 65  e table.  If the
257a0 20 74 61 62 6c 65 20 61 6c 72 65 61 64 79 0a 63   table already.c
257b0 6f 6e 74 61 69 6e 73 20 61 6e 20 65 6e 74 72 79  ontains an entry
257c0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e   with the same n
257d0 61 6d 65 20 61 6e 64 20 61 20 63 75 72 72 65 6e  ame and a curren
257e0 74 20 76 61 6c 69 64 44 61 74 65 2c 0a 74 68 65  t validDate,.the
257f0 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  n the WHERE clau
25800 73 65 20 63 61 75 73 65 73 20 74 68 65 20 44 4f  se causes the DO
25810 20 55 50 44 41 54 45 20 74 6f 20 62 65 63 6f 6d   UPDATE to becom
25820 65 20 61 20 6e 6f 2d 6f 70 2e 0a 0a 3c 74 63 6c  e a no-op...<tcl
25830 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 70 61 72  >hd_fragment par
25840 73 65 61 6d 62 69 67 20 7b 55 50 53 45 52 54 20  seambig {UPSERT 
25850 70 61 72 73 69 6e 67 20 61 6d 62 69 67 75 69 74  parsing ambiguit
25860 79 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72  y}</tcl>.<h3>Par
25870 73 69 6e 67 20 41 6d 62 69 67 75 69 74 79 3c 2f  sing Ambiguity</
25880 68 33 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 65  h3>..<p>When the
25890 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d   [INSERT] statem
258a0 65 6e 74 20 74 6f 20 77 68 69 63 68 20 74 68 65  ent to which the
258b0 20 55 50 53 45 52 54 20 69 73 20 61 74 74 61 63   UPSERT is attac
258c0 68 65 64 0a 74 61 6b 65 73 20 69 74 73 20 76 61  hed.takes its va
258d0 6c 75 65 73 20 66 72 6f 6d 20 61 20 5b 53 45 4c  lues from a [SEL
258e0 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20  ECT] statement, 
258f0 74 68 65 72 65 20 69 73 20 61 20 70 6f 74 65 6e  there is a poten
25900 74 69 61 6c 0a 70 61 72 73 69 6e 67 20 61 6d 62  tial.parsing amb
25910 69 67 75 69 74 79 2e 20 20 54 68 65 20 70 61 72  iguity.  The par
25920 73 65 72 20 6d 69 67 68 74 20 6e 6f 74 20 62 65  ser might not be
25930 20 61 62 6c 65 20 74 6f 20 74 65 6c 6c 20 69 66   able to tell if
25940 20 74 68 65 0a 22 4f 4e 22 20 6b 65 79 77 6f 72   the."ON" keywor
25950 64 20 69 73 20 69 6e 74 72 6f 64 75 63 69 6e 67  d is introducing
25960 20 74 68 65 20 55 50 53 45 52 54 20 6f 72 20 69   the UPSERT or i
25970 66 20 69 74 20 69 73 20 74 68 65 20 4f 4e 20 63  f it is the ON c
25980 6c 61 75 73 65 0a 6f 66 20 61 20 6a 6f 69 6e 2e  lause.of a join.
25990 20 20 54 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64    To work around
259a0 20 74 68 69 73 2c 20 74 68 65 20 53 45 4c 45 43   this, the SELEC
259b0 54 20 73 74 61 74 65 6d 65 6e 74 20 73 68 6f 75  T statement shou
259c0 6c 64 20 61 6c 77 61 79 73 0a 69 6e 63 6c 75 64  ld always.includ
259d0 65 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  e a WHERE clause
259e0 2c 20 65 76 65 6e 20 69 66 20 74 68 61 74 20 57  , even if that W
259f0 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 6a  HERE clause is j
25a00 75 73 74 0a 22 57 48 45 52 45 20 74 72 75 65 22  ust."WHERE true"
25a10 2e 0a 0a 3c 70 3e 41 6d 62 69 67 75 6f 75 73 20  ...<p>Ambiguous 
25a20 75 73 65 20 6f 66 20 4f 4e 3a 0a 0a 3c 62 6c 6f  use of ON:..<blo
25a30 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 49 4e  ckquote><pre>.IN
25a40 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c  SERT INTO t1 SEL
25a50 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 0a 4f 4e  ECT * FROM t2.ON
25a60 20 43 4f 4e 46 4c 49 43 54 28 78 29 20 44 4f 20   CONFLICT(x) DO 
25a70 55 50 44 41 54 45 20 53 45 54 20 79 3d 65 78 63  UPDATE SET y=exc
25a80 6c 75 64 65 64 2e 79 3b 0a 3c 2f 70 72 65 3e 3c  luded.y;.</pre><
25a90 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
25aa0 3e 41 6d 62 69 67 75 69 74 79 20 72 65 73 6f 6c  >Ambiguity resol
25ab0 76 65 64 20 75 73 69 6e 67 20 61 20 57 48 45 52  ved using a WHER
25ac0 45 20 63 6c 61 75 73 65 3a 0a 0a 3c 62 6c 6f 63  E clause:..<bloc
25ad0 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 49 4e 53  kquote><pre>.INS
25ae0 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45  ERT INTO t1 SELE
25af0 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 3c 66 6f  CT * FROM t2 <fo
25b00 6e 74 20 63 6f 6c 6f 72 3d 22 62 6c 75 65 22 3e  nt color="blue">
25b10 57 48 45 52 45 20 74 72 75 65 3c 2f 66 6f 6e 74  WHERE true</font
25b20 3e 0a 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 78 29  >.ON CONFLICT(x)
25b30 20 44 4f 20 55 50 44 41 54 45 20 53 45 54 20 79   DO UPDATE SET y
25b40 3d 65 78 63 6c 75 64 65 64 2e 79 3b 0a 3c 2f 70  =excluded.y;.</p
25b50 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
25b60 0a 0a 3c 68 33 3e 4c 69 6d 69 74 61 74 69 6f 6e  ..<h3>Limitation
25b70 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 55 50 53 45 52  s</h3>..<p>UPSER
25b80 54 20 64 6f 65 73 20 6e 6f 74 20 63 75 72 72 65  T does not curre
25b90 6e 74 6c 79 20 77 6f 72 6b 20 66 6f 72 20 5b 76  ntly work for [v
25ba0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e 0a  irtual tables]..
25bb0 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
25bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25bd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25be0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25bf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25c00 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
25c10 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
25c20 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63  se} conflict {{c
25c30 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7d 20  onflict clause} 
25c40 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a  {ON CONFLICT}}..
25c50 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
25c60 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74 2d  iagram conflict-
25c70 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  clause.</tcl>..<
25c80 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  p>The ON CONFLIC
25c90 54 20 63 6c 61 75 73 65 20 69 73 20 61 0a 6e 6f  T clause is a.no
25ca0 6e 2d 73 74 61 6e 64 61 72 64 20 65 78 74 65 6e  n-standard exten
25cb0 73 69 6f 6e 20 73 70 65 63 69 66 69 63 20 74 6f  sion specific to
25cc0 20 53 51 4c 69 74 65 20 0a 74 68 61 74 20 63 61   SQLite .that ca
25cd0 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61 6e 79  n appear in many
25ce0 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61   other SQL comma
25cf0 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76 65 6e  nds..It is given
25d00 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e   its own section
25d10 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e   in this documen
25d20 74 20 62 65 63 61 75 73 65 20 69 74 20 69 73 20  t because it is 
25d30 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74 61 6e  not.part of stan
25d40 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74 68 65  dard SQL and the
25d50 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74  refore might not
25d60 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70   be familiar.</p
25d70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e  >..<p>The ON CON
25d80 46 4c 49 43 54 20 63 6c 61 75 73 65 20 64 65 73  FLICT clause des
25d90 63 72 69 62 65 64 20 68 65 72 65 20 68 61 73 20  cribed here has 
25da0 62 65 65 6e 20 61 20 70 61 72 74 20 6f 66 0a 53  been a part of.S
25db0 51 4c 69 74 65 20 73 69 6e 63 65 20 62 65 66 6f  QLite since befo
25dc0 72 65 20 76 65 72 73 69 6f 6e 20 33 2e 30 2e 30  re version 3.0.0
25dd0 20 28 5b 64 61 74 65 6f 66 3a 33 2e 30 2e 30 5d   ([dateof:3.0.0]
25de0 29 2e 20 20 54 68 65 20 70 68 72 61 73 65 0a 22  ).  The phrase."
25df0 4f 4e 26 6e 62 73 70 3b 43 4f 4e 46 4c 49 43 54  ON&nbsp;CONFLICT
25e00 22 20 69 73 20 61 6c 73 6f 20 70 61 72 74 20 6f  " is also part o
25e10 66 20 5b 55 50 53 45 52 54 5d 2c 20 77 68 69 63  f [UPSERT], whic
25e20 68 20 69 73 20 61 6e 20 65 78 74 65 6e 73 69 6f  h is an extensio
25e30 6e 0a 74 6f 20 5b 49 4e 53 45 52 54 5d 20 61 64  n.to [INSERT] ad
25e40 64 65 64 20 69 6e 20 76 65 72 73 69 6f 6e 20 33  ded in version 3
25e50 2e 32 34 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33  .24.0 ([dateof:3
25e60 2e 32 34 2e 30 5d 29 2e 20 20 44 6f 20 6e 6f 74  .24.0]).  Do not
25e70 0a 63 6f 6e 66 75 73 65 20 74 68 65 73 65 20 74  .confuse these t
25e80 77 6f 20 73 65 70 61 72 61 74 65 20 75 73 65 73  wo separate uses
25e90 20 6f 66 20 74 68 65 20 22 4f 4e 26 6e 62 73 70   of the "ON&nbsp
25ea0 3b 43 4f 4e 46 4c 49 43 54 22 20 70 68 72 61 73  ;CONFLICT" phras
25eb0 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e 74  e...<p>^The synt
25ec0 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f  ax for the ON CO
25ed0 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73  NFLICT clause is
25ee0 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 20   as shown above 
25ef0 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20 54  for.the CREATE T
25f00 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e  ABLE command.  ^
25f10 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20 61  For the INSERT a
25f20 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e  nd.UPDATE comman
25f30 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 73  ds, the keywords
25f40 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61   "ON CONFLICT" a
25f50 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 20 22  re replaced by "
25f60 4f 52 22 20 73 6f 20 74 68 61 74 0a 74 68 65 20  OR" so that.the 
25f70 73 79 6e 74 61 78 20 72 65 61 64 73 20 6d 6f 72  syntax reads mor
25f80 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46 6f  e naturally.  Fo
25f90 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65  r example, inste
25fa0 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e  ad of."INSERT ON
25fb0 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45   CONFLICT IGNORE
25fc0 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45 52  " we have "INSER
25fd0 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68  T OR IGNORE"..Th
25fe0 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e 67  e keywords chang
25ff0 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69 6e  e but the meanin
26000 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65 20  g of the clause 
26010 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74 68  is the same.eith
26020 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e  er way.</p>..<p>
26030 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
26040 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20 74  clause applies t
26050 6f 20 5b 55 4e 49 51 55 45 5d 2c 20 5b 4e 4f 54  o [UNIQUE], [NOT
26060 20 4e 55 4c 4c 5d 2c 0a 5b 43 48 45 43 4b 5d 2c   NULL],.[CHECK],
26070 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b 45   and [PRIMARY KE
26080 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a  Y] constraints..
26090 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
260a0 61 6c 67 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e  algorithm does n
260b0 6f 74 0a 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52  ot.apply to [FOR
260c0 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61  EIGN KEY constra
260d0 69 6e 74 73 5d 2e 0a 54 68 65 72 65 20 61 72 65  ints]..There are
260e0 20 66 69 76 65 20 63 6f 6e 66 6c 69 63 74 20 72   five conflict r
260f0 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
26100 74 68 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c  thm choices:.ROL
26110 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41  LBACK, ABORT, FA
26120 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20  IL, IGNORE, and 
26130 52 45 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65  REPLACE..^The de
26140 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72  fault conflict r
26150 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
26160 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 20 54  thm is ABORT.  T
26170 68 69 73 0a 69 73 20 77 68 61 74 20 74 68 65 79  his.is what they
26180 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e   mean:</p>..<dl>
26190 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b  .<dt><b>ROLLBACK
261a0 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
261b0 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69  > ^When an appli
261c0 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  cable constraint
261d0 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
261e0 73 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a  s, the ROLLBACK.
261f0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
26200 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20  ithm aborts the 
26210 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
26220 65 6d 65 6e 74 20 77 69 74 68 0a 61 6e 20 53 51  ement with.an SQ
26230 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
26240 65 72 72 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20  error and rolls 
26250 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  back the current
26260 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49   transaction..^I
26270 66 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  f no transaction
26280 20 69 73 0a 61 63 74 69 76 65 20 28 6f 74 68 65   is.active (othe
26290 72 20 74 68 61 6e 20 74 68 65 20 69 6d 70 6c 69  r than the impli
262a0 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74  ed transaction t
262b0 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20 6f  hat is created o
262c0 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29  n every.command)
262d0 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41   then the ROLLBA
262e0 43 4b 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  CK resolution al
262f0 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20 74 68  gorithm works th
26300 65 20 73 61 6d 65 20 61 73 20 74 68 65 0a 41 42  e same as the.AB
26310 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f  ORT algorithm.</
26320 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e  p></dd>..<dt><b>
26330 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  ABORT</b></dt>.<
26340 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20  dd><p> ^When an 
26350 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74  applicable const
26360 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
26370 6f 63 63 75 72 73 2c 20 74 68 65 20 41 42 4f 52  occurs, the ABOR
26380 54 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  T.resolution alg
26390 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68  orithm aborts th
263a0 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74  e current SQL st
263b0 61 74 65 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20  atement.with an 
263c0 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
263d0 54 20 65 72 72 6f 72 20 61 6e 64 20 62 61 63 6b  T error and back
263e0 73 20 6f 75 74 20 61 6e 79 20 63 68 61 6e 67 65  s out any change
263f0 73 0a 6d 61 64 65 20 62 79 20 74 68 65 20 63 75  s.made by the cu
26400 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d  rrent SQL statem
26410 65 6e 74 3b 20 62 75 74 20 63 68 61 6e 67 65 73  ent; but changes
26420 20 63 61 75 73 65 64 0a 62 79 20 70 72 69 6f 72   caused.by prior
26430 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
26440 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
26450 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 72 65 20  transaction are 
26460 70 72 65 73 65 72 76 65 64 20 61 6e 64 20 74 68  preserved and th
26470 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65  e.transaction re
26480 6d 61 69 6e 73 20 61 63 74 69 76 65 2e 0a 54 68  mains active..Th
26490 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  is is the defaul
264a0 74 20 62 65 68 61 76 69 6f 72 20 61 6e 64 20 74  t behavior and t
264b0 68 65 20 62 65 68 61 76 69 6f 72 20 73 70 65 63  he behavior spec
264c0 69 66 69 65 64 20 62 79 20 74 68 65 20 53 51 4c  ified by the SQL
264d0 0a 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c 2f  .standard.</p></
264e0 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c  dd>..<dt><b>FAIL
264f0 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
26500 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69  > ^When an appli
26510 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  cable constraint
26520 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
26530 73 2c 20 74 68 65 20 46 41 49 4c 0a 72 65 73 6f  s, the FAIL.reso
26540 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
26550 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72 72   aborts the curr
26560 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ent SQL statemen
26570 74 20 77 69 74 68 20 61 6e 0a 53 51 4c 49 54 45  t with an.SQLITE
26580 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f  _CONSTRAINT erro
26590 72 2e 20 20 5e 42 75 74 20 74 68 65 20 46 41 49  r.  ^But the FAI
265a0 4c 20 72 65 73 6f 6c 75 74 69 6f 6e 20 64 6f 65  L resolution doe
265b0 73 20 6e 6f 74 0a 62 61 63 6b 20 6f 75 74 20 70  s not.back out p
265c0 72 69 6f 72 20 63 68 61 6e 67 65 73 20 6f 66 20  rior changes of 
265d0 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
265e0 74 20 74 68 61 74 20 66 61 69 6c 65 64 20 6e 6f  t that failed no
265f0 72 20 64 6f 65 73 0a 69 74 20 65 6e 64 20 74 68  r does.it end th
26600 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  e transaction..^
26610 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20  For example, if 
26620 61 6e 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d  an UPDATE.statem
26630 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ent encountered 
26640 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
26650 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30  lation on the 10
26660 30 74 68 20 72 6f 77 20 74 68 61 74 0a 69 74 20  0th row that.it 
26670 61 74 74 65 6d 70 74 73 20 74 6f 20 75 70 64 61  attempts to upda
26680 74 65 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72  te, then the fir
26690 73 74 20 39 39 20 72 6f 77 20 63 68 61 6e 67 65  st 99 row change
266a0 73 20 61 72 65 20 70 72 65 73 65 72 76 65 64 0a  s are preserved.
266b0 62 75 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  but changes to r
266c0 6f 77 73 20 31 30 30 20 61 6e 64 20 62 65 79 6f  ows 100 and beyo
266d0 6e 64 20 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c  nd never occur.<
266e0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 46 41 49 4c  /p>..<p>The FAIL
266f0 20 62 65 68 61 76 69 6f 72 20 6f 6e 6c 79 20 77   behavior only w
26700 6f 72 6b 73 20 66 6f 72 20 75 6e 69 71 75 65 6e  orks for uniquen
26710 65 73 73 2c 20 4e 4f 54 20 4e 55 4c 4c 2c 20 61  ess, NOT NULL, a
26720 6e 64 20 43 48 45 43 4b 20 0a 63 6f 6e 73 74 72  nd CHECK .constr
26730 61 69 6e 74 73 2e 20 20 41 20 5b 66 6f 72 65 69  aints.  A [forei
26740 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
26750 74 5d 20 76 69 6f 6c 61 74 69 6f 6e 20 63 61 75  t] violation cau
26760 73 65 73 20 61 6e 20 41 42 4f 52 54 2e 0a 3c 2f  ses an ABORT..</
26770 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e  p></dd>..<dt><b>
26780 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a  IGNORE</b></dt>.
26790 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e  <dd><p> ^When an
267a0 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73   applicable cons
267b0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
267c0 20 6f 63 63 75 72 73 2c 20 0a 74 68 65 20 49 47   occurs, .the IG
267d0 4e 4f 52 45 20 72 65 73 6f 6c 75 74 69 6f 6e 20  NORE resolution 
267e0 61 6c 67 6f 72 69 74 68 6d 20 73 6b 69 70 73 20  algorithm skips 
267f0 74 68 65 20 6f 6e 65 20 72 6f 77 20 74 68 61 74  the one row that
26800 20 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f   contains.the co
26810 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
26820 6f 6e 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73  on and continues
26830 20 70 72 6f 63 65 73 73 69 6e 67 20 73 75 62 73   processing subs
26840 65 71 75 65 6e 74 20 72 6f 77 73 0a 6f 66 20 74  equent rows.of t
26850 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
26860 20 61 73 20 69 66 20 6e 6f 74 68 69 6e 67 20 77   as if nothing w
26870 65 6e 74 20 77 72 6f 6e 67 2e 0a 4f 74 68 65 72  ent wrong..Other
26880 20 72 6f 77 73 20 62 65 66 6f 72 65 20 61 6e 64   rows before and
26890 20 61 66 74 65 72 20 74 68 65 20 72 6f 77 20 74   after the row t
268a0 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68  hat.contained th
268b0 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
268c0 6c 61 74 69 6f 6e 20 61 72 65 20 69 6e 73 65 72  lation are inser
268d0 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 0a 6e  ted or updated.n
268e0 6f 72 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72  ormally. ^No err
268f0 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 66  or is returned f
26900 6f 72 20 75 6e 69 71 75 65 6e 65 73 73 2c 20 4e  or uniqueness, N
26910 4f 54 20 4e 55 4c 4c 2c 20 61 6e 64 0a 55 4e 49  OT NULL, and.UNI
26920 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 65  QUE constraint e
26930 72 72 6f 72 73 20 77 68 65 6e 20 74 68 65 20 49  rrors when the I
26940 47 4e 4f 52 45 20 63 6f 6e 66 6c 69 63 74 20 72  GNORE conflict r
26950 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69  esolution.algori
26960 74 68 6d 20 69 73 20 75 73 65 64 2e 20 20 5e 48  thm is used.  ^H
26970 6f 77 65 76 65 72 2c 20 74 68 65 20 49 47 4e 4f  owever, the IGNO
26980 52 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  RE conflict reso
26990 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d  lution.algorithm
269a0 20 77 6f 72 6b 73 20 6c 69 6b 65 20 41 42 4f 52   works like ABOR
269b0 54 20 66 6f 72 20 5b 66 6f 72 65 69 67 6e 20 6b  T for [foreign k
269c0 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 5d 20 65  ey constraint] e
269d0 72 72 6f 72 73 2e 0a 3c 2f 70 3e 0a 3c 2f 64 64  rrors..</p>.</dd
269e0 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43  >..<dt><b>REPLAC
269f0 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  E</b></dt>.<dd><
26a00 70 3e 20 5e 57 68 65 6e 20 61 20 5b 55 4e 49 51  p> ^When a [UNIQ
26a10 55 45 5d 20 6f 72 20 5b 50 52 49 4d 41 52 59 20  UE] or [PRIMARY 
26a20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 20  KEY] constraint 
26a30 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
26a40 2c 20 0a 74 68 65 20 52 45 50 4c 41 43 45 20 61  , .the REPLACE a
26a50 6c 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74 65 73  lgorithm.deletes
26a60 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f   pre-existing ro
26a70 77 73 20 74 68 61 74 20 61 72 65 20 63 61 75 73  ws that are caus
26a80 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69  ing the constrai
26a90 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70 72 69  nt violation.pri
26aa0 6f 72 20 74 6f 20 69 6e 73 65 72 74 69 6e 67 20  or to inserting 
26ab0 6f 72 20 75 70 64 61 74 69 6e 67 20 74 68 65 20  or updating the 
26ac0 63 75 72 72 65 6e 74 20 72 6f 77 20 61 6e 64 20  current row and 
26ad0 74 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74  the command cont
26ae0 69 6e 75 65 73 20 0a 65 78 65 63 75 74 69 6e 67  inues .executing
26af0 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61   normally..^If a
26b00 20 5b 4e 4f 54 20 4e 55 4c 4c 5d 20 63 6f 6e 73   [NOT NULL] cons
26b10 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
26b20 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50   occurs, the REP
26b30 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 0a 72 65  LACE conflict.re
26b40 73 6f 6c 75 74 69 6f 6e 20 72 65 70 6c 61 63 65  solution replace
26b50 73 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65  s the NULL value
26b60 20 77 69 74 68 0a 74 68 65 20 64 65 66 61 75 6c   with.the defaul
26b70 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68 61 74  t value for that
26b80 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66 20 74   column, or if t
26b90 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f  he column has no
26ba0 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c 20   default.value, 
26bb0 74 68 65 6e 20 74 68 65 20 41 42 4f 52 54 20 61  then the ABORT a
26bc0 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
26bd0 2e 0a 5e 49 66 20 61 20 5b 43 48 45 43 4b 20 63  ..^If a [CHECK c
26be0 6f 6e 73 74 72 61 69 6e 74 5d 20 6f 72 20 5b 66  onstraint] or [f
26bf0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
26c00 72 61 69 6e 74 5d 20 76 69 6f 6c 61 74 69 6f 6e  raint] violation
26c10 20 6f 63 63 75 72 73 2c 20 0a 74 68 65 20 52 45   occurs, .the RE
26c20 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72  PLACE conflict r
26c30 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
26c40 74 68 6d 20 77 6f 72 6b 73 20 6c 69 6b 65 20 41  thm works like A
26c50 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57  BORT.</p>..<p>^W
26c60 68 65 6e 20 74 68 65 20 52 45 50 4c 41 43 45 20  hen the REPLACE 
26c70 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
26c80 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64 65 6c  ion strategy del
26c90 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f 72 64  etes rows in ord
26ca0 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20 61 20  er to.satisfy a 
26cb0 63 6f 6e 73 74 72 61 69 6e 74 2c 20 5b 43 52 45  constraint, [CRE
26cc0 41 54 45 20 54 52 49 47 47 45 52 20 7c 20 64 65  ATE TRIGGER | de
26cd0 6c 65 74 65 20 74 72 69 67 67 65 72 73 5d 20 66  lete triggers] f
26ce0 69 72 65 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ire if and only 
26cf0 69 66 0a 5b 72 65 63 75 72 73 69 76 65 5f 74 72  if.[recursive_tr
26d00 69 67 67 65 72 73 20 70 72 61 67 6d 61 20 7c 20  iggers pragma | 
26d10 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
26d20 72 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2e  rs] are enabled.
26d30 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 73  </p>..<p>^The [s
26d40 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f  qlite3_update_ho
26d50 6f 6b 20 7c 20 75 70 64 61 74 65 20 68 6f 6f 6b  ok | update hook
26d60 5d 20 69 73 20 6e 6f 74 20 69 6e 76 6f 6b 65 64  ] is not invoked
26d70 20 66 6f 72 20 72 6f 77 73 20 74 68 61 74 0a 61   for rows that.a
26d80 72 65 20 64 65 6c 65 74 65 64 20 62 79 20 74 68  re deleted by th
26d90 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69  e REPLACE confli
26da0 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74  ct resolution st
26db0 72 61 74 65 67 79 2e 20 20 5e 4e 6f 72 20 64 6f  rategy.  ^Nor do
26dc0 65 73 0a 52 45 50 4c 41 43 45 20 69 6e 63 72 65  es.REPLACE incre
26dd0 6d 65 6e 74 20 74 68 65 20 5b 73 71 6c 69 74 65  ment the [sqlite
26de0 33 5f 63 68 61 6e 67 65 73 20 7c 20 63 68 61 6e  3_changes | chan
26df0 67 65 20 63 6f 75 6e 74 65 72 5d 2e 0a 54 68 65  ge counter]..The
26e00 20 65 78 63 65 70 74 69 6f 6e 61 6c 20 62 65 68   exceptional beh
26e10 61 76 69 6f 72 73 20 64 65 66 69 6e 65 64 20 69  aviors defined i
26e20 6e 20 74 68 69 73 20 70 61 72 61 67 72 61 70 68  n this paragraph
26e30 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 0a 69   might change .i
26e40 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c 65 61  n a future relea
26e50 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c  se.</p>.</dl>..<
26e60 70 3e 5e 54 68 65 20 61 6c 67 6f 72 69 74 68 6d  p>^The algorithm
26e70 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
26e80 65 20 4f 52 20 63 6c 61 75 73 65 20 6f 66 20 61  e OR clause of a
26e90 6e 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  n INSERT or UPDA
26ea0 54 45 0a 6f 76 65 72 72 69 64 65 73 20 61 6e 79  TE.overrides any
26eb0 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69   algorithm speci
26ec0 66 69 65 64 20 69 6e 20 61 20 43 52 45 41 54 45  fied in a CREATE
26ed0 20 54 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f 20 61   TABLE..^If no a
26ee0 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63  lgorithm is spec
26ef0 69 66 69 65 64 20 61 6e 79 77 68 65 72 65 2c 20  ified anywhere, 
26f00 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69  the ABORT algori
26f10 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e  thm is used.</p>
26f20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
26f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26f60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26f70 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52  ######.Section R
26f80 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78 20 52  EINDEX reindex R
26f90 45 49 4e 44 45 58 0a 0a 52 65 63 75 72 73 69 76  EINDEX..Recursiv
26fa0 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  eBubbleDiagram r
26fb0 65 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63  eindex-stmt.</tc
26fc0 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 49 4e  l>..<p>^The REIN
26fd0 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  DEX command is u
26fe0 73 65 64 20 74 6f 20 64 65 6c 65 74 65 20 61 6e  sed to delete an
26ff0 64 20 72 65 63 72 65 61 74 65 20 69 6e 64 69 63  d recreate indic
27000 65 73 20 66 72 6f 6d 20 73 63 72 61 74 63 68 2e  es from scratch.
27010 0a 54 68 69 73 20 69 73 20 75 73 65 66 75 6c 20  .This is useful 
27020 77 68 65 6e 20 74 68 65 20 64 65 66 69 6e 69 74  when the definit
27030 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74 69  ion of a collati
27040 6f 6e 20 73 65 71 75 65 6e 63 65 20 68 61 73 20  on sequence has 
27050 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c  changed..</p>..<
27060 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e 44 45  p>^If the REINDE
27070 58 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74  X keyword is not
27080 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63   followed by a c
27090 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63  ollation-sequenc
270a0 65 20 6f 72 20 64 61 74 61 62 61 73 65 20 0a 6f  e or database .o
270b0 62 6a 65 63 74 20 69 64 65 6e 74 69 66 69 65 72  bject identifier
270c0 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63  , then all indic
270d0 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68  es in all attach
270e0 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72 65  ed databases are
270f0 20 72 65 62 75 69 6c 74 2e 0a 0a 3c 70 3e 5e 49   rebuilt...<p>^I
27100 66 20 74 68 65 20 52 45 49 4e 44 45 58 20 6b 65  f the REINDEX ke
27110 79 77 6f 72 64 20 69 73 20 66 6f 6c 6c 6f 77 65  yword is followe
27120 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  d by a collation
27130 2d 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 2c 20  -sequence name, 
27140 74 68 65 6e 0a 61 6c 6c 20 69 6e 64 69 63 65 73  then.all indices
27150 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64   in all attached
27160 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74 20   databases that 
27170 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20 63 6f  use the named co
27180 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
27190 73 0a 61 72 65 20 72 65 63 72 65 61 74 65 64 2e  s.are recreated.
271a0 20 0a 0a 3c 70 3e 5e 4f 72 2c 20 69 66 20 74 68   ..<p>^Or, if th
271b0 65 20 61 72 67 75 6d 65 6e 74 20 61 74 74 61 63  e argument attac
271c0 68 65 64 20 74 6f 20 74 68 65 20 52 45 49 4e 44  hed to the REIND
271d0 45 58 20 69 64 65 6e 74 69 66 69 65 73 20 61 20  EX identifies a 
271e0 73 70 65 63 69 66 69 63 20 0a 64 61 74 61 62 61  specific .databa
271f0 73 65 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 61  se table, then a
27200 6c 6c 20 69 6e 64 69 63 65 73 20 61 74 74 61 63  ll indices attac
27210 68 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  hed to the datab
27220 61 73 65 20 74 61 62 6c 65 20 61 72 65 20 72 65  ase table are re
27230 62 75 69 6c 74 2e 20 0a 5e 49 66 20 69 74 20 69  built. .^If it i
27240 64 65 6e 74 69 66 69 65 73 20 61 20 73 70 65 63  dentifies a spec
27250 69 66 69 63 20 64 61 74 61 62 61 73 65 20 69 6e  ific database in
27260 64 65 78 2c 20 74 68 65 6e 20 6a 75 73 74 20 74  dex, then just t
27270 68 61 74 20 69 6e 64 65 78 20 69 73 20 72 65 63  hat index is rec
27280 72 65 61 74 65 64 2e 0a 0a 3c 70 3e 5e 46 6f 72  reated...<p>^For
27290 20 61 20 63 6f 6d 6d 61 6e 64 20 6f 66 20 74 68   a command of th
272a0 65 20 66 6f 72 6d 20 22 52 45 49 4e 44 45 58 20  e form "REINDEX 
272b0 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 22 2c 20 61 20  <i>name</i>", a 
272c0 6d 61 74 63 68 0a 61 67 61 69 6e 73 74 20 3c 79  match.against <y
272d0 79 74 65 72 6d 3e 63 6f 6c 6c 61 74 69 6f 6e 2d  yterm>collation-
272e0 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 74 61  name</yyterm> ta
272f0 6b 65 73 20 70 72 65 63 65 64 65 6e 63 65 20 6f  kes precedence o
27300 76 65 72 20 61 20 6d 61 74 63 68 0a 61 67 61 69  ver a match.agai
27310 6e 73 74 20 3c 79 79 74 65 72 6d 3e 69 6e 64 65  nst <yyterm>inde
27320 78 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  x-name</yyterm> 
27330 6f 72 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65  or <yyterm>table
27340 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 2e 0a  -name</yyterm>..
27350 54 68 69 73 20 61 6d 62 69 67 75 69 74 79 20 69  This ambiguity i
27360 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6d 61 79  n the syntax may
27370 20 62 65 20 61 76 6f 69 64 65 64 20 62 79 20 61   be avoided by a
27380 6c 77 61 79 73 20 73 70 65 63 69 66 79 69 6e 67  lways specifying
27390 20 61 0a 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d   a.<yyterm>schem
273a0 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  a-name</yyterm> 
273b0 77 68 65 6e 20 72 65 69 6e 64 65 78 69 6e 67 20  when reindexing 
273c0 61 20 73 70 65 63 69 66 69 63 20 74 61 62 6c 65  a specific table
273d0 20 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c 74 63 6c   or index...<tcl
273e0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
273f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27430 23 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c 41 43  #.Section REPLAC
27440 45 20 72 65 70 6c 61 63 65 20 52 45 50 4c 41 43  E replace REPLAC
27450 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  E..</tcl>..<p>^T
27460 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d 61  he REPLACE comma
27470 6e 64 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66  nd is an alias f
27480 6f 72 20 74 68 65 20 22 5b 4f 4e 20 43 4f 4e 46  or the "[ON CONF
27490 4c 49 43 54 20 7c 20 49 4e 53 45 52 54 20 4f 52  LICT | INSERT OR
274a0 20 52 45 50 4c 41 43 45 5d 22 0a 76 61 72 69 61   REPLACE]".varia
274b0 6e 74 20 6f 66 20 74 68 65 20 5b 49 4e 53 45 52  nt of the [INSER
274c0 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68  T] command.  .Th
274d0 69 73 20 61 6c 69 61 73 20 69 73 20 70 72 6f 76  is alias is prov
274e0 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74 69  ided for compati
274f0 62 69 6c 69 74 79 20 6f 74 68 65 72 20 53 51 4c  bility other SQL
27500 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
27510 73 2e 20 20 53 65 65 20 74 68 65 20 0a 5b 49 4e  s.  See the .[IN
27520 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f  SERT] command do
27530 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
27540 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
27550 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c  mation.</p>  ..<
27560 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
27570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27590 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
275a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
275b0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 57 49  ####.Section {WI
275c0 54 48 20 63 6c 61 75 73 65 7d 20 77 69 74 68 20  TH clause} with 
275d0 7b 7b 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  {{common table e
275e0 78 70 72 65 73 73 69 6f 6e 73 7d 20 57 49 54 48  xpressions} WITH
275f0 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
27600 6c 65 44 69 61 67 72 61 6d 20 77 69 74 68 2d 63  leDiagram with-c
27610 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  lause.</tcl>..<p
27620 3e 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78  >Common Table Ex
27630 70 72 65 73 73 69 6f 6e 73 20 6f 72 20 43 54 45  pressions or CTE
27640 73 20 61 63 74 20 6c 69 6b 65 20 74 65 6d 70 6f  s act like tempo
27650 72 61 72 79 20 5b 76 69 65 77 73 5d 20 74 68 61  rary [views] tha
27660 74 20 65 78 69 73 74 0a 6f 6e 6c 79 20 66 6f 72  t exist.only for
27670 20 74 68 65 20 64 75 72 61 74 69 6f 6e 20 6f 66   the duration of
27680 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74   a single SQL st
27690 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 72 65 20  atement.  There 
276a0 61 72 65 20 74 77 6f 20 6b 69 6e 64 73 20 6f 66  are two kinds of
276b0 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  .common table ex
276c0 70 72 65 73 73 69 6f 6e 73 3a 20 22 6f 72 64 69  pressions: "ordi
276d0 6e 61 72 79 22 20 61 6e 64 20 22 72 65 63 75 72  nary" and "recur
276e0 73 69 76 65 22 2e 20 4f 72 64 69 6e 61 72 79 20  sive". Ordinary 
276f0 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  .common table ex
27700 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68 65  pressions are he
27710 6c 70 66 75 6c 20 66 6f 72 20 6d 61 6b 69 6e 67  lpful for making
27720 0a 71 75 65 72 69 65 73 20 65 61 73 69 65 72 20  .queries easier 
27730 74 6f 20 75 6e 64 65 72 73 74 61 6e 64 20 62 79  to understand by
27740 20 66 61 63 74 6f 72 69 6e 67 0a 73 75 62 71 75   factoring.subqu
27750 65 72 69 65 73 20 6f 75 74 20 6f 66 20 74 68 65  eries out of the
27760 20 6d 61 69 6e 20 53 51 4c 20 73 74 61 74 65 6d   main SQL statem
27770 65 6e 74 2e 0a 52 65 63 75 72 73 69 76 65 20 63  ent..Recursive c
27780 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
27790 65 73 73 69 6f 6e 73 0a 70 72 6f 76 69 64 65 20  essions.provide 
277a0 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 64  the ability to d
277b0 6f 20 68 69 65 72 61 72 63 68 69 63 61 6c 20 6f  o hierarchical o
277c0 72 0a 72 65 63 75 72 73 69 76 65 20 71 75 65 72  r.recursive quer
277d0 69 65 73 20 6f 66 20 74 72 65 65 73 20 61 6e 64  ies of trees and
277e0 20 67 72 61 70 68 73 2c 20 61 20 63 61 70 61 62   graphs, a capab
277f0 69 6c 69 74 79 0a 74 68 61 74 20 69 73 20 6e 6f  ility.that is no
27800 74 20 6f 74 68 65 72 77 69 73 65 20 61 76 61 69  t otherwise avai
27810 6c 61 62 6c 65 20 69 6e 20 74 68 65 20 53 51 4c  lable in the SQL
27820 20 6c 61 6e 67 75 61 67 65 2e 0a 0a 3c 70 3e 41   language...<p>A
27830 6c 6c 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ll common table 
27840 65 78 70 72 65 73 73 69 6f 6e 73 20 28 6f 72 64  expressions (ord
27850 69 6e 61 72 79 20 61 6e 64 20 72 65 63 75 72 73  inary and recurs
27860 69 76 65 29 20 61 72 65 20 0a 63 72 65 61 74 65  ive) are .create
27870 64 20 62 79 20 70 72 65 70 65 6e 64 69 6e 67 20  d by prepending 
27880 61 20 57 49 54 48 20 63 6c 61 75 73 65 20 69 6e  a WITH clause in
27890 20 66 72 6f 6e 74 20 6f 66 20 61 20 5b 53 45 4c   front of a [SEL
278a0 45 43 54 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20  ECT], [INSERT], 
278b0 5b 44 45 4c 45 54 45 5d 2c 0a 6f 72 20 5b 55 50  [DELETE],.or [UP
278c0 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  DATE] statement.
278d0 20 20 41 20 73 69 6e 67 6c 65 20 57 49 54 48 20    A single WITH 
278e0 63 6c 61 75 73 65 20 63 61 6e 20 73 70 65 63 69  clause can speci
278f0 66 79 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 63  fy one or more.c
27900 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
27910 65 73 73 69 6f 6e 73 2c 20 73 6f 6d 65 20 6f 66  essions, some of
27920 20 77 68 69 63 68 20 61 72 65 20 6f 72 64 69 6e   which are ordin
27930 61 72 79 20 61 6e 64 20 73 6f 6d 65 20 6f 66 20  ary and some of 
27940 77 68 69 63 68 0a 61 72 65 20 72 65 63 75 72 73  which.are recurs
27950 69 76 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ive...<tcl>hd_fr
27960 61 67 6d 65 6e 74 20 6f 72 64 69 6e 61 72 79 63  agment ordinaryc
27970 74 65 20 7b 6f 72 64 69 6e 61 72 79 20 63 6f 6d  te {ordinary com
27980 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
27990 73 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  sions}</tcl>.<h3
279a0 3e 4f 72 64 69 6e 61 72 79 20 43 6f 6d 6d 6f 6e  >Ordinary Common
279b0 20 54 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f   Table Expressio
279c0 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 6e 20 6f  ns</h3>..<p>An o
279d0 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74  rdinary common t
279e0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20  able expression 
279f0 77 6f 72 6b 73 20 61 73 20 69 66 20 69 74 20 77  works as if it w
27a00 65 72 65 20 61 20 5b 76 69 65 77 5d 20 74 68 61  ere a [view] tha
27a10 74 0a 65 78 69 73 74 73 20 66 6f 72 20 74 68 65  t.exists for the
27a20 20 64 75 72 61 74 69 6f 6e 20 6f 66 20 61 20 73   duration of a s
27a30 69 6e 67 6c 65 20 73 74 61 74 65 6d 65 6e 74 2e  ingle statement.
27a40 20 20 4f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f    Ordinary commo
27a50 6e 20 74 61 62 6c 65 0a 65 78 70 72 65 73 73 69  n table.expressi
27a60 6f 6e 73 20 61 72 65 20 75 73 65 66 75 6c 20 66  ons are useful f
27a70 6f 72 20 66 61 63 74 6f 72 69 6e 67 20 6f 75 74  or factoring out
27a80 20 73 75 62 71 75 65 72 69 65 73 20 61 6e 64 20   subqueries and 
27a90 6d 61 6b 69 6e 67 20 74 68 65 20 6f 76 65 72 61  making the overa
27aa0 6c 6c 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ll.SQL statement
27ab0 20 65 61 73 69 65 72 20 74 6f 20 72 65 61 64 20   easier to read 
27ac0 61 6e 64 20 75 6e 64 65 72 73 74 61 6e 64 2e 0a  and understand..
27ad0 0a 3c 70 3e 41 20 57 49 54 48 20 63 6c 61 75 73  .<p>A WITH claus
27ae0 65 20 63 61 6e 20 63 6f 6e 74 61 69 6e 20 6f 72  e can contain or
27af0 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
27b00 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ble expressions 
27b10 65 76 65 6e 20 69 66 0a 69 74 20 69 6e 63 6c 75  even if.it inclu
27b20 64 65 73 20 74 68 65 20 52 45 43 55 52 53 49 56  des the RECURSIV
27b30 45 20 6b 65 79 77 6f 72 64 2e 20 20 54 68 65 20  E keyword.  The 
27b40 75 73 65 20 6f 66 20 52 45 43 55 52 53 49 56 45  use of RECURSIVE
27b50 20 64 6f 65 73 20 6e 6f 74 20 66 6f 72 63 65 0a   does not force.
27b60 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
27b70 72 65 73 73 69 6f 6e 73 20 74 6f 20 62 65 20 72  ressions to be r
27b80 65 63 75 72 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e  ecursive...<tcl>
27b90 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 63  .hd_fragment rec
27ba0 75 72 73 69 76 65 63 74 65 20 7b 72 65 63 75 72  ursivecte {recur
27bb0 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  sive common tabl
27bc0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 20 5c  e expressions} \
27bd0 0a 7b 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d  .{recursive comm
27be0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
27bf0 69 6f 6e 7d 20 7b 72 65 63 75 72 73 69 76 65 20  ion} {recursive 
27c00 71 75 65 72 79 7d 0a 3c 2f 74 63 6c 3e 0a 3c 68  query}.</tcl>.<h
27c10 33 3e 52 65 63 75 72 73 69 76 65 20 43 6f 6d 6d  3>Recursive Comm
27c20 6f 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73 73  on Table Express
27c30 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20  ions</h3>..<p>A 
27c40 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e  recursive common
27c50 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
27c60 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  n can be used to
27c70 20 77 72 69 74 65 20 61 20 71 75 65 72 79 20 74   write a query t
27c80 68 61 74 0a 77 61 6c 6b 73 20 61 20 74 72 65 65  hat.walks a tree
27c90 20 6f 72 20 67 72 61 70 68 2e 20 20 41 20 72 65   or graph.  A re
27ca0 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74  cursive common t
27cb0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20  able expression 
27cc0 68 61 73 20 74 68 65 20 73 61 6d 65 0a 62 61 73  has the same.bas
27cd0 69 63 20 73 79 6e 74 61 78 20 61 73 20 61 6e 20  ic syntax as an 
27ce0 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20  ordinary common 
27cf0 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
27d00 2c 20 62 75 74 20 77 69 74 68 20 74 68 65 20 66  , but with the f
27d10 6f 6c 6c 6f 77 69 6e 67 0a 61 64 64 69 74 69 6f  ollowing.additio
27d20 6e 61 6c 20 66 65 61 74 75 72 65 73 3a 0a 0a 3c  nal features:..<
27d30 6f 6c 3e 0a 3c 6c 69 3e 20 54 68 65 20 22 5b 73  ol>.<li> The "[s
27d40 65 6c 65 63 74 2d 73 74 6d 74 5d 22 0a 20 20 20  elect-stmt]".   
27d50 20 20 6d 75 73 74 20 62 65 20 61 20 5b 63 6f 6d    must be a [com
27d60 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d 20 77 68  pound select] wh
27d70 65 72 65 20 74 68 65 20 72 69 67 68 74 2d 6d 6f  ere the right-mo
27d80 73 74 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65  st [compound-ope
27d90 72 61 74 6f 72 5d 20 69 73 0a 20 20 20 20 20 65  rator] is.     e
27da0 69 74 68 65 72 20 55 4e 49 4f 4e 20 6f 72 20 55  ither UNION or U
27db0 4e 49 4f 4e 20 41 4c 4c 2e 0a 3c 6c 69 3e 20 54  NION ALL..<li> T
27dc0 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 6f  he table named o
27dd0 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  n the left-hand 
27de0 73 69 64 65 20 6f 66 20 74 68 65 20 41 53 20 6b  side of the AS k
27df0 65 79 77 6f 72 64 20 6d 75 73 74 20 61 70 70 65  eyword must appe
27e00 61 72 0a 20 20 20 20 20 65 78 61 63 74 6c 79 20  ar.     exactly 
27e10 6f 6e 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  once in the FROM
27e20 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 72   clause of the r
27e30 69 67 68 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54  ight-most SELECT
27e40 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 20 20 20   statement.     
27e50 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  of the compound 
27e60 73 65 6c 65 63 74 2c 20 61 6e 64 20 6e 6f 77 68  select, and nowh
27e70 65 72 65 20 65 6c 73 65 2e 0a 3c 6c 69 3e 20 54  ere else..<li> T
27e80 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 53 45  he right-most SE
27e90 4c 45 43 54 20 6f 66 20 74 68 65 20 63 6f 6d 70  LECT of the comp
27ea0 6f 75 6e 64 20 73 65 6c 65 63 74 20 6d 75 73 74  ound select must
27eb0 20 6e 6f 74 20 6d 61 6b 65 20 75 73 65 20 6f 66   not make use of
27ec0 0a 20 20 20 20 20 5b 41 67 67 72 65 67 61 74 65  .     [Aggregate
27ed0 20 46 75 6e 63 74 69 6f 6e 73 7c 61 67 67 72 65   Functions|aggre
27ee0 67 61 74 65 5d 20 6f 72 20 5b 77 69 6e 64 6f 77  gate] or [window
27ef0 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 0a 3c 2f 6f   functions]..</o
27f00 6c 3e 0a 0a 3c 70 3e 54 6f 20 70 75 74 20 69 74  l>..<p>To put it
27f10 20 61 6e 6f 74 68 65 72 20 77 61 79 2c 20 61 20   another way, a 
27f20 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e  recursive common
27f30 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
27f40 6e 20 6d 75 73 74 0a 6c 6f 6f 6b 20 6c 69 6b 65  n must.look like
27f50 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a   the following:.
27f60 0a 3c 74 63 6c 3e 52 65 63 75 72 73 69 76 65 42  .<tcl>RecursiveB
27f70 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 63  ubbleDiagram rec
27f80 75 72 73 69 76 65 2d 63 74 65 3c 2f 74 63 6c 3e  ursive-cte</tcl>
27f90 0a 0a 3c 70 3e 43 61 6c 6c 20 74 68 65 20 74 61  ..<p>Call the ta
27fa0 62 6c 65 20 6e 61 6d 65 64 20 62 79 20 74 68 65  ble named by the
27fb0 20 5b 63 74 65 2d 74 61 62 6c 65 2d 6e 61 6d 65   [cte-table-name
27fc0 5d 20 69 6e 20 61 20 72 65 63 75 72 73 69 76 65  ] in a recursive
27fd0 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  .common table ex
27fe0 70 72 65 73 73 69 6f 6e 20 74 68 65 20 22 72 65  pression the "re
27ff0 63 75 72 73 69 76 65 20 74 61 62 6c 65 22 2e 0a  cursive table"..
28000 49 6e 20 74 68 65 20 5b 72 65 63 75 72 73 69 76  In the [recursiv
28010 65 2d 63 74 65 5d 20 62 75 62 62 6c 65 20 64 69  e-cte] bubble di
28020 61 67 72 61 6d 20 61 62 6f 76 65 2c 20 74 68 65  agram above, the
28030 20 72 65 63 75 72 73 69 76 65 0a 74 61 62 6c 65   recursive.table
28040 20 6d 75 73 74 20 61 70 70 65 61 72 20 65 78 61   must appear exa
28050 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65  ctly once in the
28060 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
28070 74 68 65 20 0a 3c 79 79 74 65 72 6d 3e 72 65 63  the .<yyterm>rec
28080 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79  ursive-select</y
28090 79 74 65 72 6d 3e 0a 61 6e 64 20 6d 75 73 74 20  yterm>.and must 
280a0 6e 6f 74 20 61 70 70 65 61 72 20 61 6e 79 77 68  not appear anywh
280b0 65 72 65 20 65 6c 73 65 20 69 6e 20 65 69 74 68  ere else in eith
280c0 65 72 20 74 68 65 0a 3c 79 79 74 65 72 6d 3e 69  er the.<yyterm>i
280d0 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79  nitial-select</y
280e0 79 74 65 72 6d 3e 20 6f 72 20 74 68 65 0a 3c 79  yterm> or the.<y
280f0 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76 65 2d  yterm>recursive-
28100 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 2c  select</yyterm>,
28110 20 69 6e 63 6c 75 64 69 6e 67 20 73 75 62 71 75   including subqu
28120 65 72 69 65 73 2e 0a 54 68 65 20 3c 79 79 74 65  eries..The <yyte
28130 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63  rm>initial-selec
28140 74 3c 2f 79 79 74 65 72 6d 3e 20 6d 61 79 20 62  t</yyterm> may b
28150 65 0a 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65  e.a [compound se
28160 6c 65 63 74 5d 2c 20 62 75 74 20 69 74 20 6d 61  lect], but it ma
28170 79 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61 6e  y not include an
28180 20 4f 52 44 45 52 20 42 59 2c 20 4c 49 4d 49 54   ORDER BY, LIMIT
28190 2c 20 6f 72 20 4f 46 46 53 45 54 2e 0a 54 68 65  , or OFFSET..The
281a0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
281b0 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70  t must be a simp
281c0 6c 65 20 73 65 6c 65 63 74 2c 20 6e 6f 74 20 61  le select, not a
281d0 20 63 6f 6d 70 6f 75 6e 64 2e 20 20 54 68 65 0a   compound.  The.
281e0 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
281f0 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20 69   is allowed to i
28200 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44 45 52 20  nclude an ORDER 
28210 42 59 2c 20 4c 49 4d 49 54 2c 20 61 6e 64 2f 6f  BY, LIMIT, and/o
28220 72 20 4f 46 46 53 45 54 2e 0a 0a 3c 70 3e 54 68  r OFFSET...<p>Th
28230 65 20 62 61 73 69 63 20 61 6c 67 6f 72 69 74 68  e basic algorith
28240 6d 20 66 6f 72 20 63 6f 6d 70 75 74 69 6e 67 20  m for computing 
28250 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
28260 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
28270 6c 65 0a 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73  le.is as follows
28280 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 52 75 6e  :..<ol>.<li> Run
28290 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e 69   the <yyterm>ini
282a0 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74  tial-select</yyt
282b0 65 72 6d 3e 20 61 6e 64 20 61 64 64 20 74 68 65  erm> and add the
282c0 20 72 65 73 75 6c 74 73 20 74 6f 20 61 20 71 75   results to a qu
282d0 65 75 65 2e 0a 3c 6c 69 3e 20 57 68 69 6c 65 20  eue..<li> While 
282e0 74 68 65 20 71 75 65 75 65 20 69 73 20 6e 6f 74  the queue is not
282f0 20 65 6d 70 74 79 3a 0a 3c 6f 6c 20 74 79 70 65   empty:.<ol type
28300 3d 22 61 22 3e 0a 3c 6c 69 3e 20 45 78 74 72 61  ="a">.<li> Extra
28310 63 74 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  ct a single row 
28320 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65 2e 0a  from the queue..
28330 3c 6c 69 3e 20 49 6e 73 65 72 74 20 74 68 61 74  <li> Insert that
28340 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e 74 6f   single row into
28350 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
28360 61 62 6c 65 0a 3c 6c 69 3e 20 50 72 65 74 65 6e  able.<li> Preten
28370 64 20 74 68 61 74 20 74 68 65 20 73 69 6e 67 6c  d that the singl
28380 65 20 72 6f 77 20 6a 75 73 74 20 65 78 74 72 61  e row just extra
28390 63 74 65 64 20 69 73 20 74 68 65 20 6f 6e 6c 79  cted is the only
283a0 0a 20 20 20 20 20 72 6f 77 20 69 6e 20 74 68 65  .     row in the
283b0 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
283c0 20 61 6e 64 20 72 75 6e 20 74 68 65 20 72 65 63   and run the rec
283d0 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 0a 20  ursive-select,. 
283e0 20 20 20 20 61 64 64 69 6e 67 20 61 6c 6c 20 72      adding all r
283f0 65 73 75 6c 74 73 20 74 6f 20 74 68 65 20 71 75  esults to the qu
28400 65 75 65 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 6f 6c 3e  eue..</ol>.</ol>
28410 0a 0a 3c 70 3e 54 68 65 20 62 61 73 69 63 20 70  ..<p>The basic p
28420 72 6f 63 65 64 75 72 65 20 61 62 6f 76 65 20 6d  rocedure above m
28430 61 79 20 6d 6f 64 69 66 69 65 64 20 62 79 20 74  ay modified by t
28440 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64  he following add
28450 69 74 69 6f 6e 61 6c 20 72 75 6c 65 73 3a 0a 0a  itional rules:..
28460 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 49  <ul>.<li><p>.  I
28470 66 20 61 20 55 4e 49 4f 4e 20 6f 70 65 72 61 74  f a UNION operat
28480 6f 72 20 63 6f 6e 6e 65 63 74 73 20 74 68 65 20  or connects the 
28490 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d  <yyterm>initial-
284a0 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20  select</yyterm> 
284b0 77 69 74 68 20 74 68 65 0a 20 20 3c 79 79 74 65  with the.  <yyte
284c0 72 6d 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c  rm>recursive-sel
284d0 65 63 74 3c 2f 79 79 74 65 72 6d 3e 2c 20 74 68  ect</yyterm>, th
284e0 65 6e 20 6f 6e 6c 79 20 61 64 64 20 72 6f 77 73  en only add rows
284f0 20 74 6f 20 74 68 65 20 71 75 65 75 65 20 69 66   to the queue if
28500 20 0a 20 20 6e 6f 20 69 64 65 6e 74 69 63 61 6c   .  no identical
28510 20 72 6f 77 20 68 61 73 0a 20 20 62 65 65 6e 20   row has.  been 
28520 70 72 65 76 69 6f 75 73 6c 79 20 61 64 64 65 64  previously added
28530 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20   to the queue.  
28540 52 65 70 65 61 74 65 64 20 72 6f 77 73 20 61 72  Repeated rows ar
28550 65 20 64 69 73 63 61 72 64 65 64 20 62 65 66 6f  e discarded befo
28560 72 65 20 62 65 69 6e 67 0a 20 20 61 64 64 65 64  re being.  added
28570 20 74 6f 20 74 68 65 20 71 75 65 75 65 20 65 76   to the queue ev
28580 65 6e 20 69 66 20 74 68 65 20 72 65 70 65 61 74  en if the repeat
28590 65 64 20 72 6f 77 73 20 68 61 76 65 20 61 6c 72  ed rows have alr
285a0 65 61 64 79 20 62 65 65 6e 20 65 78 74 72 61 63  eady been extrac
285b0 74 65 64 0a 20 20 66 72 6f 6d 20 74 68 65 20 71  ted.  from the q
285c0 75 65 75 65 20 62 79 20 74 68 65 20 72 65 63 75  ueue by the recu
285d0 72 73 69 6f 6e 20 73 74 65 70 2e 20 20 49 66 20  rsion step.  If 
285e0 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 20  the operator is 
285f0 55 4e 49 4f 4e 20 41 4c 4c 2c 0a 20 20 74 68 65  UNION ALL,.  the
28600 6e 20 61 6c 6c 20 72 6f 77 73 20 67 65 6e 65 72  n all rows gener
28610 61 74 65 64 20 62 79 20 62 6f 74 68 20 74 68 65  ated by both the
28620 20 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c   <yyterm>initial
28630 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e  -select</yyterm>
28640 20 61 6e 64 20 74 68 65 0a 20 20 3c 79 79 74 65   and the.  <yyte
28650 72 6d 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c  rm>recursive-sel
28660 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 61 72 65  ect</yyterm> are
28670 20 61 6c 77 61 79 73 20 61 64 64 65 64 20 74 6f   always added to
28680 20 74 68 65 20 71 75 65 75 65 20 65 76 65 6e 20   the queue even 
28690 69 66 0a 20 20 74 68 65 79 20 61 72 65 20 72 65  if.  they are re
286a0 70 65 61 74 73 2e 0a 20 20 57 68 65 6e 20 64 65  peats..  When de
286b0 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 72  termining if a r
286c0 6f 77 20 69 73 20 72 65 70 65 61 74 65 64 2c 20  ow is repeated, 
286d0 4e 55 4c 4c 20 76 61 6c 75 65 73 20 63 6f 6d 70  NULL values comp
286e0 61 72 65 0a 20 20 65 71 75 61 6c 20 74 6f 20 6f  are.  equal to o
286f0 6e 65 20 61 6e 6f 74 68 65 72 20 61 6e 64 20 6e  ne another and n
28700 6f 74 20 65 71 75 61 6c 20 74 6f 20 61 6e 79 20  ot equal to any 
28710 6f 74 68 65 72 20 76 61 6c 75 65 2e 0a 3c 6c 69  other value..<li
28720 3e 3c 70 3e 0a 20 20 54 68 65 20 4c 49 4d 49 54  ><p>.  The LIMIT
28730 20 63 6c 61 75 73 65 2c 20 69 66 20 70 72 65 73   clause, if pres
28740 65 6e 74 2c 20 64 65 74 65 72 6d 69 6e 65 73 20  ent, determines 
28750 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
28760 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a  er of rows that.
28770 20 20 77 69 6c 6c 20 65 76 65 72 20 62 65 20 61    will ever be a
28780 64 64 65 64 20 74 6f 20 74 68 65 20 72 65 63 75  dded to the recu
28790 72 73 69 76 65 20 74 61 62 6c 65 20 69 6e 20 73  rsive table in s
287a0 74 65 70 20 32 62 2e 0a 20 20 4f 6e 63 65 20 74  tep 2b..  Once t
287b0 68 65 20 6c 69 6d 69 74 20 69 73 20 72 65 61 63  he limit is reac
287c0 68 65 64 2c 20 74 68 65 20 72 65 63 75 72 73 69  hed, the recursi
287d0 6f 6e 20 73 74 6f 70 73 2e 0a 20 20 41 20 6c 69  on stops..  A li
287e0 6d 69 74 20 6f 66 20 7a 65 72 6f 20 6d 65 61 6e  mit of zero mean
287f0 73 20 74 68 61 74 20 6e 6f 20 72 6f 77 73 20 61  s that no rows a
28800 72 65 20 65 76 65 72 20 61 64 64 65 64 20 74 6f  re ever added to
28810 20 74 68 65 0a 20 20 72 65 63 75 72 73 69 76 65   the.  recursive
28820 20 74 61 62 6c 65 2c 20 61 6e 64 20 61 20 6e 65   table, and a ne
28830 67 61 74 69 76 65 20 6c 69 6d 69 74 20 6d 65 61  gative limit mea
28840 6e 73 20 61 6e 20 75 6e 6c 69 6d 69 74 65 64 20  ns an unlimited 
28850 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 20  number of rows. 
28860 20 6d 61 79 20 62 65 20 61 64 64 65 64 20 74 6f   may be added to
28870 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
28880 61 62 6c 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  able..<li><p>.  
28890 54 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73  The OFFSET claus
288a0 65 2c 20 69 66 20 69 74 20 69 73 20 70 72 65 73  e, if it is pres
288b0 65 6e 74 20 61 6e 64 20 68 61 73 20 61 20 70 6f  ent and has a po
288c0 73 69 74 69 76 65 20 76 61 6c 75 65 20 4e 2c 20  sitive value N, 
288d0 70 72 65 76 65 6e 74 73 20 74 68 65 0a 20 20 66  prevents the.  f
288e0 69 72 73 74 20 4e 20 72 6f 77 73 20 66 72 6f 6d  irst N rows from
288f0 20 62 65 69 6e 67 20 61 64 64 65 64 20 74 6f 20   being added to 
28900 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61  the recursive ta
28910 62 6c 65 2e 0a 20 20 54 68 65 20 66 69 72 73 74  ble..  The first
28920 20 4e 20 72 6f 77 73 20 61 72 65 20 73 74 69 6c   N rows are stil
28930 6c 20 70 72 6f 63 65 73 73 65 64 0a 20 20 62 79  l processed.  by
28940 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 72 65 63   the <yyterm>rec
28950 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79  ursive-select</y
28960 79 74 65 72 6d 3e 20 26 6d 64 61 73 68 3b 20 74  yterm> &mdash; t
28970 68 65 79 0a 20 20 6a 75 73 74 20 61 72 65 20 6e  hey.  just are n
28980 6f 74 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  ot added to the 
28990 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e  recursive table.
289a0 20 20 52 6f 77 73 20 61 72 65 20 6e 6f 74 20 63    Rows are not c
289b0 6f 75 6e 74 65 64 20 74 6f 77 61 72 64 0a 20 20  ounted toward.  
289c0 66 75 6c 66 69 6c 6c 69 6e 67 20 74 68 65 20 4c  fulfilling the L
289d0 49 4d 49 54 20 75 6e 74 69 6c 20 61 6c 6c 20 4f  IMIT until all O
289e0 46 46 53 45 54 20 72 6f 77 73 20 68 61 76 65 20  FFSET rows have 
289f0 62 65 65 6e 20 73 6b 69 70 70 65 64 2e 0a 3c 6c  been skipped..<l
28a00 69 3e 3c 70 3e 0a 20 20 49 66 20 61 6e 20 4f 52  i><p>.  If an OR
28a10 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
28a20 20 70 72 65 73 65 6e 74 2c 20 69 74 20 64 65 74   present, it det
28a30 65 72 6d 69 6e 65 73 20 74 68 65 20 6f 72 64 65  ermines the orde
28a40 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a  r in which rows.
28a50 20 20 61 72 65 20 65 78 74 72 61 63 74 65 64 20    are extracted 
28a60 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20 69  from the queue i
28a70 6e 20 73 74 65 70 20 32 61 2e 20 20 49 66 20 74  n step 2a.  If t
28a80 68 65 72 65 20 69 73 20 6e 6f 20 4f 52 44 45 52  here is no ORDER
28a90 20 42 59 20 63 6c 61 75 73 65 2c 0a 20 20 74 68   BY clause,.  th
28aa0 65 6e 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20  en the order in 
28ab0 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20 65  which rows are e
28ac0 78 74 72 61 63 74 65 64 20 69 73 20 75 6e 64 65  xtracted is unde
28ad0 66 69 6e 65 64 2e 20 20 28 49 6e 20 74 68 65 20  fined.  (In the 
28ae0 63 75 72 72 65 6e 74 0a 20 20 69 6d 70 6c 65 6d  current.  implem
28af0 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 71 75  entation, the qu
28b00 65 75 65 20 62 65 63 6f 6d 65 73 20 61 20 46 49  eue becomes a FI
28b10 46 4f 20 69 66 20 74 68 65 20 4f 52 44 45 52 20  FO if the ORDER 
28b20 42 59 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69  BY clause is omi
28b30 74 74 65 64 2c 0a 20 20 62 75 74 20 61 70 70 6c  tted,.  but appl
28b40 69 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20  ications should 
28b50 6e 6f 74 20 64 65 70 65 6e 64 20 6f 6e 20 74 68  not depend on th
28b60 61 74 20 66 61 63 74 20 73 69 6e 63 65 20 69 74  at fact since it
28b70 20 6d 69 67 68 74 20 63 68 61 6e 67 65 2e 29 0a   might change.).
28b80 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  </ul>..<tcl>hd_f
28b90 72 61 67 6d 65 6e 74 20 72 63 65 78 31 3c 2f 74  ragment rcex1</t
28ba0 63 6c 3e 0a 3c 68 34 3e 52 65 63 75 72 73 69 76  cl>.<h4>Recursiv
28bb0 65 20 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73  e Query Examples
28bc0 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f  </h4>..<p>The fo
28bd0 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79 20 72 65  llowing query re
28be0 74 75 72 6e 73 20 61 6c 6c 20 69 6e 74 65 67 65  turns all intege
28bf0 72 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  rs between 1 and
28c00 20 31 30 30 30 30 30 30 3a 0a 0a 3c 62 6c 6f 63   1000000:..<bloc
28c10 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
28c20 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 63 6e  H RECURSIVE.  cn
28c30 74 28 78 29 20 41 53 20 28 56 41 4c 55 45 53 28  t(x) AS (VALUES(
28c40 31 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c  1) UNION ALL SEL
28c50 45 43 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e 74  ECT x+1 FROM cnt
28c60 20 57 48 45 52 45 20 78 3c 31 30 30 30 30 30 30   WHERE x<1000000
28c70 29 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20  ).SELECT x FROM 
28c80 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  cnt;.</pre></blo
28c90 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6e  ckquote>..<p>Con
28ca0 73 69 64 65 72 20 68 6f 77 20 74 68 69 73 20 71  sider how this q
28cb0 75 65 72 79 20 77 6f 72 6b 73 2e 20 20 54 68 65  uery works.  The
28cc0 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 0a   initial-select.
28cd0 72 75 6e 73 20 66 69 72 73 74 20 61 6e 64 20 72  runs first and r
28ce0 65 74 75 72 6e 73 20 61 20 73 69 6e 67 6c 65 20  eturns a single 
28cf0 72 6f 77 0a 77 69 74 68 20 61 20 73 69 6e 67 6c  row.with a singl
28d00 65 20 63 6f 6c 75 6d 6e 20 22 31 22 2e 20 20 54  e column "1".  T
28d10 68 69 73 20 6f 6e 65 20 72 6f 77 20 69 73 20 61  his one row is a
28d20 64 64 65 64 20 74 6f 20 74 68 65 20 71 75 65 75  dded to the queu
28d30 65 2e 20 20 49 6e 0a 73 74 65 70 20 32 61 2c 20  e.  In.step 2a, 
28d40 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20  that one row is 
28d50 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20 74  extracted from t
28d60 68 65 20 71 75 65 75 65 20 61 6e 64 20 61 64 64  he queue and add
28d70 65 64 20 74 6f 20 22 63 6e 74 22 2e 0a 54 68 65  ed to "cnt"..The
28d80 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  n the recursive-
28d90 73 65 6c 65 63 74 20 69 73 20 72 75 6e 20 69 6e  select is run in
28da0 20 61 63 63 6f 72 64 61 6e 63 65 20 77 69 74 68   accordance with
28db0 20 73 74 65 70 20 32 63 20 67 65 6e 65 72 61 74   step 2c generat
28dc0 69 6e 67 0a 61 20 73 69 6e 67 6c 65 20 6e 65 77  ing.a single new
28dd0 20 72 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20   row with value 
28de0 22 32 22 20 74 6f 20 61 64 64 20 74 6f 20 74 68  "2" to add to th
28df0 65 20 71 75 65 75 65 2e 20 20 54 68 65 20 71 75  e queue.  The qu
28e00 65 75 65 20 73 74 69 6c 6c 0a 68 61 73 20 6f 6e  eue still.has on
28e10 65 20 72 6f 77 2c 20 73 6f 20 73 74 65 70 20 32  e row, so step 2
28e20 20 72 65 70 65 61 74 73 2e 20 20 54 68 65 20 22   repeats.  The "
28e30 32 22 20 72 6f 77 20 69 73 20 65 78 74 72 61 63  2" row is extrac
28e40 74 65 64 20 61 6e 64 20 61 64 64 65 64 20 74 6f  ted and added to
28e50 20 74 68 65 0a 72 65 63 75 72 73 69 76 65 20 74   the.recursive t
28e60 61 62 6c 65 20 62 79 20 73 74 65 70 73 20 32 61  able by steps 2a
28e70 20 61 6e 64 20 32 62 2e 20 20 54 68 65 6e 20 74   and 2b.  Then t
28e80 68 65 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e  he row containin
28e90 67 20 32 20 69 73 20 75 73 65 64 20 0a 61 73 20  g 2 is used .as 
28ea0 69 66 20 69 74 20 77 65 72 65 20 74 68 65 20 63  if it were the c
28eb0 6f 6d 70 6c 65 74 65 20 63 6f 6e 74 65 6e 74 20  omplete content 
28ec0 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65  of the recursive
28ed0 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 0a   table and the .
28ee0 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
28ef0 20 69 73 20 72 75 6e 20 61 67 61 69 6e 2c 20 72   is run again, r
28f00 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 72 6f  esulting in a ro
28f10 77 20 77 69 74 68 20 76 61 6c 75 65 20 22 33 22  w with value "3"
28f20 20 62 65 69 6e 67 20 61 64 64 65 64 0a 74 6f 20   being added.to 
28f30 74 68 65 20 71 75 65 75 65 2e 20 20 54 68 69 73  the queue.  This
28f40 20 72 65 70 65 61 74 73 20 39 39 39 39 39 39 20   repeats 999999 
28f50 74 69 6d 65 73 20 75 6e 74 69 6c 20 66 69 6e 61  times until fina
28f60 6c 6c 79 20 61 74 20 73 74 65 70 20 32 61 20 74  lly at step 2a t
28f70 68 65 0a 6f 6e 6c 79 20 76 61 6c 75 65 20 6f 6e  he.only value on
28f80 20 74 68 65 20 71 75 65 75 65 20 69 73 20 61 20   the queue is a 
28f90 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20 31  row containing 1
28fa0 30 30 30 30 30 30 2e 20 20 54 68 61 74 20 72 6f  000000.  That ro
28fb0 77 20 69 73 0a 65 78 74 72 61 63 74 65 64 20 61  w is.extracted a
28fc0 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  nd added to the 
28fd0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e  recursive table.
28fe0 20 20 42 75 74 20 74 68 69 73 20 74 69 6d 65 2c    But this time,
28ff0 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73   the.WHERE claus
29000 65 20 63 61 75 73 65 73 20 74 68 65 20 72 65 63  e causes the rec
29010 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 74 6f  ursive-select to
29020 20 72 65 74 75 72 6e 20 6e 6f 20 72 6f 77 73 2c   return no rows,
29030 20 73 6f 20 74 68 65 0a 71 75 65 75 65 20 72 65   so the.queue re
29040 6d 61 69 6e 73 20 65 6d 70 74 79 20 61 6e 64 20  mains empty and 
29050 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74  the recursion st
29060 6f 70 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f 70 74 69  ops...<p><b>Opti
29070 6d 69 7a 61 74 69 6f 6e 20 6e 6f 74 65 3a 3c 2f  mization note:</
29080 62 3e 0a 49 6e 20 74 68 65 20 64 69 73 63 75 73  b>.In the discus
29090 73 69 6f 6e 20 61 62 6f 76 65 2c 20 73 74 61 74  sion above, stat
290a0 65 6d 65 6e 74 73 20 6c 69 6b 65 20 22 69 6e 73  ements like "ins
290b0 65 72 74 20 74 68 65 20 72 6f 77 20 69 6e 74 6f  ert the row into
290c0 0a 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74  .the recursive t
290d0 61 62 6c 65 22 20 73 68 6f 75 6c 64 20 62 65 20  able" should be 
290e0 75 6e 64 65 72 73 74 6f 6f 64 20 63 6f 6e 63 65  understood conce
290f0 70 74 75 61 6c 6c 79 2c 20 6e 6f 74 20 6c 69 74  ptually, not lit
29100 65 72 61 6c 6c 79 2e 0a 49 74 20 73 6f 75 6e 64  erally..It sound
29110 73 20 61 73 20 69 66 20 53 51 4c 69 74 65 20 69  s as if SQLite i
29120 73 20 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 61  s accumulating a
29130 20 68 75 67 65 20 74 61 62 6c 65 0a 63 6f 6e 74   huge table.cont
29140 61 69 6e 69 6e 67 20 6f 6e 65 20 6d 69 6c 6c 69  aining one milli
29150 6f 6e 20 72 6f 77 73 2c 20 74 68 65 6e 20 67 6f  on rows, then go
29160 69 6e 67 20 62 61 63 6b 20 61 6e 64 20 73 63 61  ing back and sca
29170 6e 6e 69 6e 67 20 74 68 61 74 20 74 61 62 6c 65  nning that table
29180 0a 66 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f 74  .from top to bot
29190 74 6f 6d 20 74 6f 20 67 65 6e 65 72 61 74 65 20  tom to generate 
291a0 74 68 65 20 72 65 73 75 6c 74 2e 20 20 57 68 61  the result.  Wha
291b0 74 20 72 65 61 6c 6c 79 20 68 61 70 70 65 6e 73  t really happens
291c0 0a 69 73 20 74 68 61 74 20 74 68 65 20 71 75 65  .is that the que
291d0 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 73 65 65  ry optimizer see
291e0 73 20 74 68 61 74 20 76 61 6c 75 65 73 20 69 6e  s that values in
291f0 20 74 68 65 0a 22 63 6e 74 22 20 72 65 63 75 72   the."cnt" recur
29200 73 69 76 65 20 74 61 62 6c 65 20 61 72 65 20 6f  sive table are o
29210 6e 6c 79 20 75 73 65 64 20 6f 6e 63 65 2e 20 20  nly used once.  
29220 53 6f 20 61 73 20 65 61 63 68 20 72 6f 77 20 69  So as each row i
29230 73 20 61 64 64 65 64 20 74 6f 0a 74 68 65 20 72  s added to.the r
29240 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2c 20  ecursive table, 
29250 74 68 61 74 20 72 6f 77 20 69 73 20 69 6d 6d 65  that row is imme
29260 64 69 61 74 65 6c 79 20 72 65 74 75 72 6e 65 64  diately returned
29270 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
29280 74 68 65 20 6d 61 69 6e 0a 53 45 4c 45 43 54 20  the main.SELECT 
29290 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68  statement and th
292a0 65 6e 20 64 69 73 63 61 72 64 65 64 2e 20 20 53  en discarded.  S
292b0 51 4c 69 74 65 20 64 6f 65 73 20 3c 65 6d 3e 6e  QLite does <em>n
292c0 6f 74 3c 2f 65 6d 3e 20 61 63 63 75 6d 75 6c 61  ot</em> accumula
292d0 74 65 0a 61 20 74 65 6d 70 6f 72 61 72 79 20 74  te.a temporary t
292e0 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
292f0 61 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 2e 20  a million rows. 
29300 20 56 65 72 79 20 6c 69 74 74 6c 65 20 6d 65 6d   Very little mem
29310 6f 72 79 20 69 73 0a 6e 65 65 64 65 64 20 74 6f  ory is.needed to
29320 20 72 75 6e 20 74 68 65 20 61 62 6f 76 65 20 65   run the above e
29330 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65 76 65 72  xample.  However
29340 2c 20 69 66 20 74 68 65 20 65 78 61 6d 70 6c 65  , if the example
29350 20 68 61 64 20 75 73 65 64 0a 55 4e 49 4f 4e 20   had used.UNION 
29360 69 6e 73 74 65 61 64 20 6f 66 20 55 4e 49 4f 4e  instead of UNION
29370 20 41 4c 4c 2c 20 74 68 65 6e 20 53 51 4c 69 74   ALL, then SQLit
29380 65 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 64  e would have had
29390 20 74 6f 20 6b 65 65 70 20 61 72 6f 75 6e 64 0a   to keep around.
293a0 61 6c 6c 20 70 72 65 76 69 6f 75 73 6c 79 20 67  all previously g
293b0 65 6e 65 72 61 74 65 64 20 63 6f 6e 74 65 6e 74  enerated content
293c0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65   in order to che
293d0 63 6b 20 66 6f 72 20 64 75 70 6c 69 63 61 74 65  ck for duplicate
293e0 73 2e 0a 46 6f 72 20 74 68 69 73 20 72 65 61 73  s..For this reas
293f0 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20  on, programmers 
29400 73 68 6f 75 6c 64 20 73 74 72 69 76 65 20 74 6f  should strive to
29410 20 75 73 65 20 55 4e 49 4f 4e 20 41 4c 4c 20 69   use UNION ALL i
29420 6e 73 74 65 61 64 0a 6f 66 20 55 4e 49 4f 4e 20  nstead.of UNION 
29430 77 68 65 6e 20 66 65 61 73 69 62 6c 65 2e 0a 0a  when feasible...
29440 3c 70 3e 48 65 72 65 20 69 73 20 61 20 76 61 72  <p>Here is a var
29450 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 70 72  iation on the pr
29460 65 76 69 6f 75 73 20 65 78 61 6d 70 6c 65 3a 0a  evious example:.
29470 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
29480 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56  e>.WITH RECURSIV
29490 45 0a 20 20 63 6e 74 28 78 29 20 41 53 20 28 0a  E.  cnt(x) AS (.
294a0 20 20 20 20 20 53 45 4c 45 43 54 20 31 0a 20 20       SELECT 1.  
294b0 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20     UNION ALL.   
294c0 20 20 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f    SELECT x+1 FRO
294d0 4d 20 63 6e 74 0a 20 20 20 20 20 20 4c 49 4d 49  M cnt.      LIMI
294e0 54 20 31 30 30 30 30 30 30 0a 20 20 29 0a 53 45  T 1000000.  ).SE
294f0 4c 45 43 54 20 78 20 46 52 4f 4d 20 63 6e 74 3b  LECT x FROM cnt;
29500 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
29510 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61  ote>..<p>There a
29520 72 65 20 74 77 6f 20 64 69 66 66 65 72 65 6e 63  re two differenc
29530 65 73 20 69 6e 20 74 68 69 73 20 76 61 72 69 61  es in this varia
29540 74 69 6f 6e 2e 20 20 54 68 65 20 69 6e 69 74 69  tion.  The initi
29550 61 6c 2d 73 65 6c 65 63 74 20 69 73 0a 22 53 45  al-select is."SE
29560 4c 45 43 54 20 31 22 20 69 6e 73 74 65 61 64 20  LECT 1" instead 
29570 6f 66 20 22 56 41 4c 55 45 53 28 31 29 22 2e 20  of "VALUES(1)". 
29580 20 42 75 74 20 74 68 6f 73 65 20 61 72 65 20 6a   But those are j
29590 75 73 74 20 64 69 66 66 65 72 65 6e 74 0a 73 79  ust different.sy
295a0 6e 74 61 78 65 73 20 66 6f 72 20 73 61 79 69 6e  ntaxes for sayin
295b0 67 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  g exactly the sa
295c0 6d 65 20 74 68 69 6e 67 2e 20 20 54 68 65 20 6f  me thing.  The o
295d0 74 68 65 72 20 63 68 61 6e 67 65 20 69 73 20 74  ther change is t
295e0 68 61 74 20 74 68 65 0a 72 65 63 75 72 73 69 6f  hat the.recursio
295f0 6e 20 69 73 20 73 74 6f 70 70 65 64 20 62 79 20  n is stopped by 
29600 61 20 4c 49 4d 49 54 20 72 61 74 68 65 72 20 74  a LIMIT rather t
29610 68 61 6e 20 61 20 57 48 45 52 45 20 63 6c 61 75  han a WHERE clau
29620 73 65 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a  se.  The use of.
29630 4c 49 4d 49 54 20 6d 65 61 6e 73 20 74 68 61 74  LIMIT means that
29640 20 77 68 65 6e 20 74 68 65 20 6f 6e 65 2d 6d 69   when the one-mi
29650 6c 6c 69 6f 6e 74 68 20 72 6f 77 20 69 73 20 61  llionth row is a
29660 64 64 65 64 20 74 6f 20 74 68 65 20 22 63 6e 74  dded to the "cnt
29670 22 20 74 61 62 6c 65 0a 28 61 6e 64 20 72 65 74  " table.(and ret
29680 75 72 6e 65 64 20 62 79 20 74 68 65 20 6d 61 69  urned by the mai
29690 6e 20 53 45 4c 45 43 54 2c 20 74 68 61 6e 6b 73  n SELECT, thanks
296a0 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 6f 70   to the query op
296b0 74 69 6d 69 7a 65 72 29 0a 74 68 65 6e 20 74 68  timizer).then th
296c0 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f 70  e recursion stop
296d0 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 72 65  s immediately re
296e0 67 61 72 64 6c 65 73 73 20 6f 66 20 68 6f 77 20  gardless of how 
296f0 6d 61 6e 79 20 72 6f 77 73 20 6d 69 67 68 74 20  many rows might 
29700 62 65 0a 6c 65 66 74 20 69 6e 20 74 68 65 20 71  be.left in the q
29710 75 65 75 65 2e 20 20 4f 6e 20 6d 6f 72 65 20 63  ueue.  On more c
29720 6f 6d 70 6c 65 78 20 71 75 65 72 69 65 73 2c 20  omplex queries, 
29730 69 74 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73  it can sometimes
29740 20 62 65 0a 64 69 66 66 69 63 75 6c 74 20 74 6f   be.difficult to
29750 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65   ensure that the
29760 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 77 69   WHERE clause wi
29770 6c 6c 20 65 76 65 6e 74 75 61 6c 6c 79 20 63 61  ll eventually ca
29780 75 73 65 20 74 68 65 0a 71 75 65 75 65 20 74 6f  use the.queue to
29790 20 64 72 61 69 6e 20 61 6e 64 20 74 68 65 20 72   drain and the r
297a0 65 63 75 72 73 69 6f 6e 20 74 6f 20 74 65 72 6d  ecursion to term
297b0 69 6e 61 74 65 2e 20 20 42 75 74 20 74 68 65 20  inate.  But the 
297c0 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 77 69 6c  LIMIT clause wil
297d0 6c 0a 61 6c 77 61 79 73 20 73 74 6f 70 20 74 68  l.always stop th
297e0 65 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 53 6f  e recursion.  So
297f0 20 69 74 20 69 73 20 67 6f 6f 64 20 70 72 61 63   it is good prac
29800 74 69 63 65 20 74 6f 20 61 6c 77 61 79 73 20 69  tice to always i
29810 6e 63 6c 75 64 65 20 61 0a 4c 49 4d 49 54 20 63  nclude a.LIMIT c
29820 6c 61 75 73 65 20 61 73 20 61 20 73 61 66 65 74  lause as a safet
29830 79 20 69 66 20 61 6e 20 75 70 70 65 72 20 62 6f  y if an upper bo
29840 75 6e 64 20 6f 6e 20 74 68 65 20 73 69 7a 65 20  und on the size 
29850 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  of the recursion
29860 20 0a 69 73 20 6b 6e 6f 77 6e 2e 0a 0a 3c 74 63   .is known...<tc
29870 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63  l>hd_fragment rc
29880 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 48 69  ex2</tcl>.<h4>Hi
29890 65 72 61 72 63 68 69 63 61 6c 20 51 75 65 72 79  erarchical Query
298a0 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a   Examples</h4>..
298b0 3c 70 3e 43 6f 6e 73 69 64 65 72 20 61 20 74 61  <p>Consider a ta
298c0 62 6c 65 20 74 68 61 74 20 64 65 73 63 72 69 62  ble that describ
298d0 65 73 20 74 68 65 20 6d 65 6d 62 65 72 73 20 6f  es the members o
298e0 66 20 61 6e 20 6f 72 67 61 6e 69 7a 61 74 69 6f  f an organizatio
298f0 6e 20 61 73 0a 77 65 6c 6c 20 61 73 20 74 68 65  n as.well as the
29900 20 63 68 61 69 6e 2d 6f 66 2d 63 6f 6d 6d 61 6e   chain-of-comman
29910 64 20 77 69 74 68 69 6e 20 74 68 61 74 20 6f 72  d within that or
29920 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 0a 3c 62 6c  ganization:..<bl
29930 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
29940 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 67 28  REATE TABLE org(
29950 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49  .  name TEXT PRI
29960 4d 41 52 59 20 4b 45 59 2c 0a 20 20 62 6f 73 73  MARY KEY,.  boss
29970 20 54 45 58 54 20 52 45 46 45 52 45 4e 43 45 53   TEXT REFERENCES
29980 20 6f 72 67 2c 0a 20 20 68 65 69 67 68 74 20 49   org,.  height I
29990 4e 54 2c 0a 20 20 2d 2d 20 6f 74 68 65 72 20 63  NT,.  -- other c
299a0 6f 6e 74 65 6e 74 20 6f 6d 69 74 74 65 64 0a 29  ontent omitted.)
299b0 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
299c0 75 6f 74 65 3e 0a 0a 3c 70 3e 45 76 65 72 79 20  uote>..<p>Every 
299d0 6d 65 6d 62 65 72 20 69 6e 20 74 68 65 20 6f 72  member in the or
299e0 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61 73 20 61  ganization has a
299f0 20 6e 61 6d 65 2c 20 61 6e 64 20 6d 6f 73 74 20   name, and most 
29a00 6d 65 6d 62 65 72 73 20 68 61 76 65 0a 61 20 73  members have.a s
29a10 69 6e 67 6c 65 20 62 6f 73 73 2e 20 20 28 54 68  ingle boss.  (Th
29a20 65 20 68 65 61 64 20 6f 66 20 74 68 65 20 77 68  e head of the wh
29a30 6f 6c 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e  ole organization
29a40 20 68 61 73 20 61 20 4e 55 4c 4c 0a 22 62 6f 73   has a NULL."bos
29a50 73 22 20 66 69 65 6c 64 2e 29 20 54 68 65 20 72  s" field.) The r
29a60 6f 77 73 20 6f 66 20 74 68 65 20 22 6f 72 67 22  ows of the "org"
29a70 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 74 72   table form a tr
29a80 65 65 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20  ee...<p>Here is 
29a90 61 20 71 75 65 72 79 20 74 68 61 74 20 63 6f 6d  a query that com
29aa0 70 75 74 65 73 20 74 68 65 20 61 76 65 72 61 67  putes the averag
29ab0 65 20 68 65 69 67 68 74 20 6f 76 65 72 20 65 76  e height over ev
29ac0 65 72 79 6f 6e 65 0a 69 6e 20 41 6c 69 63 65 27  eryone.in Alice'
29ad0 73 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 2c 20  s organization, 
29ae0 69 6e 63 6c 75 64 69 6e 67 20 41 6c 69 63 65 3a  including Alice:
29af0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
29b00 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49  re>.WITH RECURSI
29b10 56 45 0a 20 20 77 6f 72 6b 73 5f 66 6f 72 5f 61  VE.  works_for_a
29b20 6c 69 63 65 28 6e 29 20 41 53 20 28 0a 20 20 20  lice(n) AS (.   
29b30 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27 29   VALUES('Alice')
29b40 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 53  .    UNION.    S
29b50 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
29b60 6f 72 67 2c 20 77 6f 72 6b 73 5f 66 6f 72 5f 61  org, works_for_a
29b70 6c 69 63 65 0a 20 20 20 20 20 57 48 45 52 45 20  lice.     WHERE 
29b80 6f 72 67 2e 62 6f 73 73 3d 77 6f 72 6b 73 5f 66  org.boss=works_f
29b90 6f 72 5f 61 6c 69 63 65 2e 6e 0a 20 20 29 0a 53  or_alice.n.  ).S
29ba0 45 4c 45 43 54 20 61 76 67 28 68 65 69 67 68 74  ELECT avg(height
29bb0 29 20 46 52 4f 4d 20 6f 72 67 0a 20 57 48 45 52  ) FROM org. WHER
29bc0 45 20 6f 72 67 2e 6e 61 6d 65 20 49 4e 20 77 6f  E org.name IN wo
29bd0 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 3b 0a 3c  rks_for_alice;.<
29be0 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
29bf0 65 3e 0a 0a 3c 70 3e 54 68 65 20 6e 65 78 74 20  e>..<p>The next 
29c00 65 78 61 6d 70 6c 65 20 75 73 65 73 20 74 77 6f  example uses two
29c10 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65   .common table e
29c20 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20  xpressions in a 
29c30 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75  single WITH clau
29c40 73 65 2e 20 20 0a 54 68 65 20 66 6f 6c 6c 6f 77  se.  .The follow
29c50 69 6e 67 20 74 61 62 6c 65 20 72 65 63 6f 72 64  ing table record
29c60 73 20 61 20 66 61 6d 69 6c 79 20 74 72 65 65 3a  s a family tree:
29c70 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
29c80 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
29c90 20 66 61 6d 69 6c 79 28 0a 20 20 6e 61 6d 65 20   family(.  name 
29ca0 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59  TEXT PRIMARY KEY
29cb0 2c 0a 20 20 6d 6f 6d 20 54 45 58 54 20 52 45 46  ,.  mom TEXT REF
29cc0 45 52 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c 0a  ERENCES family,.
29cd0 20 20 64 61 64 20 54 45 58 54 20 52 45 46 45 52    dad TEXT REFER
29ce0 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c 0a 20 20  ENCES family,.  
29cf0 62 6f 72 6e 20 44 41 54 45 54 49 4d 45 2c 0a 20  born DATETIME,. 
29d00 20 64 69 65 64 20 44 41 54 45 54 49 4d 45 2c 20   died DATETIME, 
29d10 2d 2d 20 4e 55 4c 4c 20 69 66 20 73 74 69 6c 6c  -- NULL if still
29d20 20 61 6c 69 76 65 0a 20 20 2d 2d 20 6f 74 68 65   alive.  -- othe
29d30 72 20 63 6f 6e 74 65 6e 74 0a 29 3b 0a 3c 2f 70  r content.);.</p
29d40 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
29d50 0a 0a 3c 70 3e 54 68 65 20 22 66 61 6d 69 6c 79  ..<p>The "family
29d60 22 20 74 61 62 6c 65 20 69 73 20 73 69 6d 69 6c  " table is simil
29d70 61 72 20 74 6f 20 74 68 65 20 65 61 72 6c 69 65  ar to the earlie
29d80 72 20 22 6f 72 67 22 20 74 61 62 6c 65 20 65 78  r "org" table ex
29d90 63 65 70 74 20 74 68 61 74 20 0a 6e 6f 77 20 74  cept that .now t
29da0 68 65 72 65 20 61 72 65 20 74 77 6f 20 70 61 72  here are two par
29db0 65 6e 74 73 20 74 6f 20 65 61 63 68 20 6d 65 6d  ents to each mem
29dc0 62 65 72 2e 0a 57 65 20 77 61 6e 74 20 74 6f 20  ber..We want to 
29dd0 6b 6e 6f 77 20 61 6c 6c 20 6c 69 76 69 6e 67 20  know all living 
29de0 61 6e 63 65 73 74 6f 72 73 20 6f 66 20 41 6c 69  ancestors of Ali
29df0 63 65 2c 20 66 72 6f 6d 20 6f 6c 64 65 73 74 20  ce, from oldest 
29e00 74 6f 20 79 6f 75 6e 67 65 73 74 2e 0a 41 6e 20  to youngest..An 
29e10 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20  ordinary common 
29e20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
29e30 2c 20 22 70 61 72 65 6e 74 5f 6f 66 22 2c 20 69  , "parent_of", i
29e40 73 20 64 65 66 69 6e 65 64 20 66 69 72 73 74 2e  s defined first.
29e50 20 20 54 68 61 74 0a 6f 72 64 69 6e 61 72 79 20    That.ordinary 
29e60 43 54 45 20 69 73 20 61 20 76 69 65 77 20 74 68  CTE is a view th
29e70 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  at can be used t
29e80 6f 20 66 69 6e 64 20 61 6c 6c 20 70 61 72 65 6e  o find all paren
29e90 74 73 20 6f 66 20 61 6e 79 0a 69 6e 64 69 76 69  ts of any.indivi
29ea0 64 75 61 6c 2e 20 20 54 68 61 74 20 6f 72 64 69  dual.  That ordi
29eb0 6e 61 72 79 20 43 54 45 20 69 73 20 74 68 65 6e  nary CTE is then
29ec0 20 75 73 65 64 20 69 6e 20 74 68 65 20 22 61 6e   used in the "an
29ed0 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 22  cestor_of_alice"
29ee0 0a 72 65 63 75 72 73 69 76 65 20 43 54 45 2e 20  .recursive CTE. 
29ef0 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20 43   The recursive C
29f00 54 45 20 69 73 20 74 68 65 6e 20 75 73 65 64 20  TE is then used 
29f10 69 6e 20 74 68 65 20 66 69 6e 61 6c 20 71 75 65  in the final que
29f20 72 79 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ry:..<blockquote
29f30 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55  ><pre>.WITH RECU
29f40 52 53 49 56 45 0a 20 20 70 61 72 65 6e 74 5f 6f  RSIVE.  parent_o
29f50 66 28 6e 61 6d 65 2c 20 70 61 72 65 6e 74 29 20  f(name, parent) 
29f60 41 53 0a 20 20 20 20 28 53 45 4c 45 43 54 20 6e  AS.    (SELECT n
29f70 61 6d 65 2c 20 6d 6f 6d 20 46 52 4f 4d 20 66 61  ame, mom FROM fa
29f80 6d 69 6c 79 20 55 4e 49 4f 4e 20 53 45 4c 45 43  mily UNION SELEC
29f90 54 20 6e 61 6d 65 2c 20 64 61 64 20 46 52 4f 4d  T name, dad FROM
29fa0 20 66 61 6d 69 6c 79 29 2c 0a 20 20 61 6e 63 65   family),.  ance
29fb0 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 28 6e 61  stor_of_alice(na
29fc0 6d 65 29 20 41 53 0a 20 20 20 20 28 53 45 4c 45  me) AS.    (SELE
29fd0 43 54 20 70 61 72 65 6e 74 20 46 52 4f 4d 20 70  CT parent FROM p
29fe0 61 72 65 6e 74 5f 6f 66 20 57 48 45 52 45 20 6e  arent_of WHERE n
29ff0 61 6d 65 3d 27 41 6c 69 63 65 27 0a 20 20 20 20  ame='Alice'.    
2a000 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 20   UNION ALL.     
2a010 53 45 4c 45 43 54 20 70 61 72 65 6e 74 20 46 52  SELECT parent FR
2a020 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20 4a 4f 49  OM parent_of JOI
2a030 4e 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c  N ancestor_of_al
2a040 69 63 65 20 55 53 49 4e 47 28 6e 61 6d 65 29 29  ice USING(name))
2a050 0a 53 45 4c 45 43 54 20 66 61 6d 69 6c 79 2e 6e  .SELECT family.n
2a060 61 6d 65 20 46 52 4f 4d 20 61 6e 63 65 73 74 6f  ame FROM ancesto
2a070 72 5f 6f 66 5f 61 6c 69 63 65 2c 20 66 61 6d 69  r_of_alice, fami
2a080 6c 79 0a 20 57 48 45 52 45 20 61 6e 63 65 73 74  ly. WHERE ancest
2a090 6f 72 5f 6f 66 5f 61 6c 69 63 65 2e 6e 61 6d 65  or_of_alice.name
2a0a0 3d 66 61 6d 69 6c 79 2e 6e 61 6d 65 0a 20 20 20  =family.name.   
2a0b0 41 4e 44 20 64 69 65 64 20 49 53 20 4e 55 4c 4c  AND died IS NULL
2a0c0 0a 20 4f 52 44 45 52 20 42 59 20 62 6f 72 6e 3b  . ORDER BY born;
2a0d0 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
2a0e0 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ote>..<tcl>hd_fr
2a0f0 61 67 6d 65 6e 74 20 72 63 65 78 33 3c 2f 74 63  agment rcex3</tc
2a100 6c 3e 0a 3c 68 34 3e 51 75 65 72 69 65 73 20 41  l>.<h4>Queries A
2a110 67 61 69 6e 73 74 20 41 20 47 72 61 70 68 3c 2f  gainst A Graph</
2a120 68 34 3e 0a 0a 3c 70 3e 41 20 76 65 72 73 69 6f  h4>..<p>A versio
2a130 6e 20 63 6f 6e 74 72 6f 6c 20 73 79 73 74 65 6d  n control system
2a140 20 28 56 43 53 29 20 77 69 6c 6c 20 74 79 70 69   (VCS) will typi
2a150 63 61 6c 6c 79 20 73 74 6f 72 65 20 74 68 65 20  cally store the 
2a160 65 76 6f 6c 76 69 6e 67 0a 76 65 72 73 69 6f 6e  evolving.version
2a170 73 20 6f 66 20 61 20 70 72 6f 6a 65 63 74 20 61  s of a project a
2a180 73 20 61 20 64 69 72 65 63 74 65 64 20 61 63 79  s a directed acy
2a190 63 6c 69 63 20 67 72 61 70 68 20 28 44 41 47 29  clic graph (DAG)
2a1a0 2e 20 20 43 61 6c 6c 20 65 61 63 68 0a 76 65 72  .  Call each.ver
2a1b0 73 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 6a  sion of the proj
2a1c0 65 63 74 20 61 20 22 63 68 65 63 6b 69 6e 22 2e  ect a "checkin".
2a1d0 20 20 41 20 73 69 6e 67 6c 65 0a 63 68 65 63 6b    A single.check
2a1e0 69 6e 20 63 61 6e 20 68 61 76 65 20 7a 65 72 6f  in can have zero
2a1f0 20 6f 72 20 6d 6f 72 65 20 70 61 72 65 6e 74 73   or more parents
2a200 2e 20 20 4d 6f 73 74 20 63 68 65 63 6b 69 6e 73  .  Most checkins
2a210 20 28 65 78 63 65 70 74 20 74 68 65 0a 66 69 72   (except the.fir
2a220 73 74 29 20 68 61 76 65 20 61 20 73 69 6e 67 6c  st) have a singl
2a230 65 20 70 61 72 65 6e 74 2c 20 62 75 74 20 69 6e  e parent, but in
2a240 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 6d   the case of a m
2a250 65 72 67 65 2c 20 61 20 63 68 65 63 6b 69 6e 0a  erge, a checkin.
2a260 6d 69 67 68 74 20 68 61 76 65 20 74 77 6f 20 6f  might have two o
2a270 72 20 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20  r three or more 
2a280 70 61 72 65 6e 74 73 2e 20 20 41 20 73 63 68 65  parents.  A sche
2a290 6d 61 20 74 6f 20 6b 65 65 70 20 74 72 61 63 6b  ma to keep track
2a2a0 20 6f 66 0a 63 68 65 63 6b 69 6e 73 20 61 6e 64   of.checkins and
2a2b0 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   the order in wh
2a2c0 69 63 68 20 74 68 65 79 20 6f 63 63 75 72 20 6d  ich they occur m
2a2d0 69 67 68 74 20 6c 6f 6f 6b 20 73 6f 6d 65 74 68  ight look someth
2a2e0 69 6e 67 20 6c 69 6b 65 0a 74 68 69 73 3a 0a 0a  ing like.this:..
2a2f0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
2a300 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 63  >.CREATE TABLE c
2a310 68 65 63 6b 69 6e 28 0a 20 20 69 64 20 49 4e 54  heckin(.  id INT
2a320 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
2a330 2c 0a 20 20 6d 74 69 6d 65 20 49 4e 54 45 47 45  ,.  mtime INTEGE
2a340 52 20 2d 2d 20 74 69 6d 65 73 74 61 6d 70 20 77  R -- timestamp w
2a350 68 65 6e 20 74 68 69 73 20 63 68 65 63 6b 69 6e  hen this checkin
2a360 20 6f 63 63 75 72 72 65 64 0a 29 3b 0a 43 52 45   occurred.);.CRE
2a370 41 54 45 20 54 41 42 4c 45 20 64 65 72 69 76 65  ATE TABLE derive
2a380 64 66 72 6f 6d 28 0a 20 20 78 66 72 6f 6d 20 49  dfrom(.  xfrom I
2a390 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20  NTEGER NOT NULL 
2a3a0 52 45 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b  REFERENCES check
2a3b0 69 6e 2c 20 2d 2d 20 70 61 72 65 6e 74 20 63 68  in, -- parent ch
2a3c0 65 63 6b 69 6e 0a 20 20 78 74 6f 20 49 4e 54 45  eckin.  xto INTE
2a3d0 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45 46  GER NOT NULL REF
2a3e0 45 52 45 4e 43 45 53 20 63 68 65 63 6b 69 6e 2c  ERENCES checkin,
2a3f0 20 20 20 2d 2d 20 64 65 72 69 76 65 64 20 63 68     -- derived ch
2a400 65 63 6b 69 6e 0a 20 20 50 52 49 4d 41 52 59 20  eckin.  PRIMARY 
2a410 4b 45 59 28 78 66 72 6f 6d 2c 78 74 6f 29 0a 29  KEY(xfrom,xto).)
2a420 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58 20 64  ;.CREATE INDEX d
2a430 65 72 69 76 65 64 66 72 6f 6d 5f 62 61 63 6b 20  erivedfrom_back 
2a440 4f 4e 20 64 65 72 69 76 65 64 66 72 6f 6d 28 78  ON derivedfrom(x
2a450 74 6f 2c 78 66 72 6f 6d 29 3b 0a 3c 2f 70 72 65  to,xfrom);.</pre
2a460 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
2a470 3c 70 3e 54 68 69 73 20 67 72 61 70 68 20 69 73  <p>This graph is
2a480 20 61 63 79 63 6c 69 63 2e 20 20 41 6e 64 20 77   acyclic.  And w
2a490 65 20 61 73 73 75 6d 65 20 74 68 61 74 20 74 68  e assume that th
2a4a0 65 20 6d 74 69 6d 65 20 6f 66 20 65 76 65 72 79  e mtime of every
2a4b0 0a 63 68 69 6c 64 20 63 68 65 63 6b 69 6e 20 69  .child checkin i
2a4c0 73 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20 74  s no less than t
2a4d0 68 65 20 6d 74 69 6d 65 20 6f 66 20 61 6c 6c 20  he mtime of all 
2a4e0 69 74 73 20 70 61 72 65 6e 74 73 2e 20 20 42 75  its parents.  Bu
2a4f0 74 0a 75 6e 6c 69 6b 65 20 74 68 65 20 65 61 72  t.unlike the ear
2a500 6c 69 65 72 20 65 78 61 6d 70 6c 65 73 2c 20 74  lier examples, t
2a510 68 69 73 20 67 72 61 70 68 20 6d 69 67 68 74 20  his graph might 
2a520 68 61 76 65 20 6d 75 6c 74 69 70 6c 65 20 70 61  have multiple pa
2a530 74 68 73 20 6f 66 0a 64 69 66 66 65 72 69 6e 67  ths of.differing
2a540 20 6c 65 6e 67 74 68 73 20 62 65 74 77 65 65 6e   lengths between
2a550 20 61 6e 79 20 74 77 6f 20 63 68 65 63 6b 69 6e   any two checkin
2a560 73 2e 0a 0a 3c 70 3e 57 65 20 77 61 6e 74 20 74  s...<p>We want t
2a570 6f 20 6b 6e 6f 77 20 74 68 65 20 74 77 65 6e 74  o know the twent
2a580 79 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e  y most recent an
2a590 63 65 73 74 6f 72 73 20 69 6e 20 74 69 6d 65 20  cestors in time 
2a5a0 28 6f 75 74 20 6f 66 0a 74 68 65 20 74 68 6f 75  (out of.the thou
2a5b0 73 61 6e 64 73 20 61 6e 64 20 74 68 6f 75 73 61  sands and thousa
2a5c0 6e 64 73 20 6f 66 20 61 6e 63 65 73 74 6f 72 73  nds of ancestors
2a5d0 20 69 6e 20 74 68 65 20 77 68 6f 6c 65 20 44 41   in the whole DA
2a5e0 47 29 20 66 6f 72 0a 63 68 65 63 6b 69 6e 20 22  G) for.checkin "
2a5f0 40 42 41 53 45 4c 49 4e 45 22 2e 20 20 28 41 20  @BASELINE".  (A 
2a600 71 75 65 72 79 20 73 69 6d 69 6c 61 72 20 74 6f  query similar to
2a610 20 74 68 69 73 20 69 73 20 75 73 65 64 0a 62 79   this is used.by
2a620 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 68 74   the <a href="ht
2a630 74 70 3a 2f 2f 77 77 77 2e 66 6f 73 73 69 6c 2d  tp://www.fossil-
2a640 73 63 6d 2e 6f 72 67 2f 22 3e 46 6f 73 73 69 6c  scm.org/">Fossil
2a650 3c 2f 61 3e 20 56 43 53 20 74 6f 0a 73 68 6f 77  </a> VCS to.show
2a660 20 74 68 65 20 4e 20 6d 6f 73 74 20 72 65 63 65   the N most rece
2a670 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 6f 66 20  nt ancestors of 
2a680 61 20 63 68 65 63 6b 2e 20 20 46 6f 72 20 65 78  a check.  For ex
2a690 61 6d 70 6c 65 3a 0a 3c 61 20 68 72 65 66 3d 22  ample:.<a href="
2a6a0 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74  http://www.sqlit
2a6b0 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65 6c 69  e.org/src/timeli
2a6c0 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33 30 22  ne?p=trunk&n=30"
2a6d0 3e 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69  >http://www.sqli
2a6e0 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65 6c  te.org/src/timel
2a6f0 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33 30  ine?p=trunk&n=30
2a700 3c 2f 61 3e 2e 29 0a 0a 3c 62 6c 6f 63 6b 71 75  </a>.)..<blockqu
2a710 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52  ote><pre>.WITH R
2a720 45 43 55 52 53 49 56 45 0a 20 20 61 6e 63 65 73  ECURSIVE.  ances
2a730 74 6f 72 28 69 64 2c 6d 74 69 6d 65 29 20 41 53  tor(id,mtime) AS
2a740 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 69 64   (.    SELECT id
2a750 2c 20 6d 74 69 6d 65 20 46 52 4f 4d 20 63 68 65  , mtime FROM che
2a760 63 6b 69 6e 20 57 48 45 52 45 20 69 64 3d 40 42  ckin WHERE id=@B
2a770 41 53 45 4c 49 4e 45 0a 20 20 20 20 55 4e 49 4f  ASELINE.    UNIO
2a780 4e 0a 20 20 20 20 53 45 4c 45 43 54 20 64 65 72  N.    SELECT der
2a790 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f 6d 2c 20  ivedfrom.xfrom, 
2a7a0 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 0a 20 20  checkin.mtime.  
2a7b0 20 20 20 20 46 52 4f 4d 20 61 6e 63 65 73 74 6f      FROM ancesto
2a7c0 72 2c 20 64 65 72 69 76 65 64 66 72 6f 6d 2c 20  r, derivedfrom, 
2a7d0 63 68 65 63 6b 69 6e 0a 20 20 20 20 20 57 48 45  checkin.     WHE
2a7e0 52 45 20 61 6e 63 65 73 74 6f 72 2e 69 64 3d 64  RE ancestor.id=d
2a7f0 65 72 69 76 65 64 66 72 6f 6d 2e 78 74 6f 0a 20  erivedfrom.xto. 
2a800 20 20 20 20 20 20 41 4e 44 20 63 68 65 63 6b 69        AND checki
2a810 6e 2e 69 64 3d 64 65 72 69 76 65 64 66 72 6f 6d  n.id=derivedfrom
2a820 2e 78 66 72 6f 6d 0a 20 20 20 20 20 4f 52 44 45  .xfrom.     ORDE
2a830 52 20 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74 69  R BY checkin.mti
2a840 6d 65 20 44 45 53 43 0a 20 20 20 20 20 4c 49 4d  me DESC.     LIM
2a850 49 54 20 32 30 0a 20 20 29 0a 53 45 4c 45 43 54  IT 20.  ).SELECT
2a860 20 2a 20 46 52 4f 4d 20 63 68 65 63 6b 69 6e 20   * FROM checkin 
2a870 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72 20 55 53  JOIN ancestor US
2a880 49 4e 47 28 69 64 29 3b 0a 3c 2f 70 72 65 3e 3c  ING(id);.</pre><
2a890 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
2a8a0 3e 0a 54 68 65 20 22 4f 52 44 45 52 20 42 59 20  >.The "ORDER BY 
2a8b0 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 20 44 45  checkin.mtime DE
2a8c0 53 43 22 20 74 65 72 6d 20 69 6e 20 74 68 65 20  SC" term in the 
2a8d0 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
2a8e0 20 6d 61 6b 65 73 0a 74 68 65 20 71 75 65 72 79   makes.the query
2a8f0 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74 65 72   run much faster
2a900 20 62 79 20 70 72 65 76 65 6e 74 69 6e 67 20 69   by preventing i
2a910 74 20 66 72 6f 6d 20 66 6f 6c 6c 6f 77 69 6e 67  t from following
2a920 0a 62 72 61 6e 63 68 65 73 20 74 68 61 74 20 6d  .branches that m
2a930 65 72 67 65 20 63 68 65 63 6b 69 6e 73 0a 66 72  erge checkins.fr
2a940 6f 6d 20 6c 6f 6e 67 20 61 67 6f 2e 20 20 54 68  om long ago.  Th
2a950 65 20 4f 52 44 45 52 20 42 59 20 66 6f 72 63 65  e ORDER BY force
2a960 73 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  s the recursive-
2a970 73 65 6c 65 63 74 20 74 6f 20 66 6f 63 75 73 0a  select to focus.
2a980 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  on the most rece
2a990 6e 74 20 63 68 65 63 6b 69 6e 73 2c 20 74 68 65  nt checkins, the
2a9a0 20 6f 6e 65 73 20 77 65 20 77 61 6e 74 2e 20 20   ones we want.  
2a9b0 57 69 74 68 6f 75 74 20 74 68 65 20 4f 52 44 45  Without the ORDE
2a9c0 52 20 42 59 0a 6f 6e 20 74 68 65 20 72 65 63 75  R BY.on the recu
2a9d0 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 6f 6e  rsive-select, on
2a9e0 65 20 77 6f 75 6c 64 20 62 65 20 66 6f 72 63 65  e would be force
2a9f0 64 20 74 6f 20 63 6f 6d 70 75 74 65 20 74 68 65  d to compute the
2aa00 20 63 6f 6d 70 6c 65 74 65 20 73 65 74 20 6f 66   complete set of
2aa10 0a 74 68 6f 75 73 61 6e 64 73 20 6f 66 20 61 6e  .thousands of an
2aa20 63 65 73 74 6f 72 73 2c 20 73 6f 72 74 20 74 68  cestors, sort th
2aa30 65 6d 20 61 6c 6c 20 62 79 20 6d 74 69 6d 65 2c  em all by mtime,
2aa40 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 74   then take the t
2aa50 6f 70 20 74 77 65 6e 74 79 2e 0a 54 68 65 20 4f  op twenty..The O
2aa60 52 44 45 52 20 42 59 20 65 73 73 65 6e 74 69 61  RDER BY essentia
2aa70 6c 6c 79 20 73 65 74 73 20 75 70 20 61 20 70 72  lly sets up a pr
2aa80 69 6f 72 69 74 79 20 71 75 65 75 65 20 74 68 61  iority queue tha
2aa90 74 0a 66 6f 72 63 65 73 20 74 68 65 20 72 65 63  t.forces the rec
2aaa0 75 72 73 69 76 65 20 71 75 65 72 79 20 74 6f 20  ursive query to 
2aab0 6c 6f 6f 6b 20 61 74 20 74 68 65 20 6d 6f 73 74  look at the most
2aac0 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f 72   recent ancestor
2aad0 73 20 66 69 72 73 74 2c 0a 61 6c 6c 6f 77 69 6e  s first,.allowin
2aae0 67 20 74 68 65 20 75 73 65 20 6f 66 20 61 20 4c  g the use of a L
2aaf0 49 4d 49 54 20 63 6c 61 75 73 65 20 74 6f 20 72  IMIT clause to r
2ab00 65 73 74 72 69 63 74 20 74 68 65 20 73 63 6f 70  estrict the scop
2ab10 65 20 6f 66 20 74 68 65 0a 71 75 65 72 79 20 74  e of the.query t
2ab20 6f 20 6a 75 73 74 20 74 68 65 20 63 68 65 63 6b  o just the check
2ab30 69 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74 2e  ins of interest.
2ab40 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
2ab50 6e 74 20 77 69 74 68 6f 72 64 65 72 62 79 3c 2f  nt withorderby</
2ab60 74 63 6c 3e 0a 3c 68 34 3e 43 6f 6e 74 72 6f 6c  tcl>.<h4>Control
2ab70 6c 69 6e 67 20 44 65 70 74 68 2d 46 69 72 73 74  ling Depth-First
2ab80 20 56 65 72 73 75 73 20 42 72 65 61 64 74 68 2d   Versus Breadth-
2ab90 46 69 72 73 74 20 53 65 61 72 63 68 20 4f 66 20  First Search Of 
2aba0 61 20 54 72 65 65 0a 55 73 69 6e 67 20 4f 52 44  a Tree.Using ORD
2abb0 45 52 20 42 59 3c 2f 68 34 3e 0a 0a 3c 70 3e 41  ER BY</h4>..<p>A
2abc0 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  n ORDER BY claus
2abd0 65 20 6f 6e 20 74 68 65 20 72 65 63 75 72 73 69  e on the recursi
2abe0 76 65 2d 73 65 6c 65 63 74 20 63 61 6e 20 62 65  ve-select can be
2abf0 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
2ac00 0a 77 68 65 74 68 65 72 20 74 68 65 20 73 65 61  .whether the sea
2ac10 72 63 68 20 6f 66 20 61 20 74 72 65 65 20 69 73  rch of a tree is
2ac20 20 64 65 70 74 68 2d 66 69 72 73 74 20 6f 72 20   depth-first or 
2ac30 62 72 65 61 64 74 68 2d 66 69 72 73 74 2e 20 20  breadth-first.  
2ac40 54 6f 0a 69 6c 6c 75 73 74 72 61 74 65 2c 20 77  To.illustrate, w
2ac50 65 20 77 69 6c 6c 20 75 73 65 20 61 20 76 61 72  e will use a var
2ac60 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 22 6f  iation on the "o
2ac70 72 67 22 20 74 61 62 6c 65 20 66 72 6f 6d 20 61  rg" table from a
2ac80 6e 20 65 78 61 6d 70 6c 65 0a 61 62 6f 76 65 2c  n example.above,
2ac90 20 77 69 74 68 6f 75 74 20 74 68 65 20 22 68 65   without the "he
2aca0 69 67 68 74 22 20 63 6f 6c 75 6d 6e 2c 20 61 6e  ight" column, an
2acb0 64 20 77 69 74 68 20 73 6f 6d 65 20 72 65 61 6c  d with some real
2acc0 20 64 61 74 61 20 69 6e 73 65 72 74 65 64 3a 0a   data inserted:.
2acd0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
2ace0 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
2acf0 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54 45 58 54  org(.  name TEXT
2ad00 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20   PRIMARY KEY,.  
2ad10 62 6f 73 73 20 54 45 58 54 20 52 45 46 45 52 45  boss TEXT REFERE
2ad20 4e 43 45 53 20 6f 72 67 0a 29 20 57 49 54 48 4f  NCES org.) WITHO
2ad30 55 54 20 52 4f 57 49 44 3b 0a 49 4e 53 45 52 54  UT ROWID;.INSERT
2ad40 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53   INTO org VALUES
2ad50 28 27 41 6c 69 63 65 27 2c 4e 55 4c 4c 29 3b 0a  ('Alice',NULL);.
2ad60 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20  INSERT INTO org 
2ad70 56 41 4c 55 45 53 28 27 42 6f 62 27 2c 27 41 6c  VALUES('Bob','Al
2ad80 69 63 65 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e  ice');.INSERT IN
2ad90 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 43  TO org VALUES('C
2ada0 69 6e 64 79 27 2c 27 41 6c 69 63 65 27 29 3b 0a  indy','Alice');.
2adb0 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20  INSERT INTO org 
2adc0 56 41 4c 55 45 53 28 27 44 61 76 65 27 2c 27 42  VALUES('Dave','B
2add0 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54  ob');.INSERT INT
2ade0 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 45 6d  O org VALUES('Em
2adf0 6d 61 27 2c 27 42 6f 62 27 29 3b 0a 49 4e 53 45  ma','Bob');.INSE
2ae00 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55  RT INTO org VALU
2ae10 45 53 28 27 46 72 65 64 27 2c 27 43 69 6e 64 79  ES('Fred','Cindy
2ae20 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20  ');.INSERT INTO 
2ae30 6f 72 67 20 56 41 4c 55 45 53 28 27 47 61 69 6c  org VALUES('Gail
2ae40 27 2c 27 43 69 6e 64 79 27 29 3b 0a 3c 2f 70 72  ','Cindy');.</pr
2ae50 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
2ae60 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20 71 75  .<p>Here is a qu
2ae70 65 72 79 20 74 6f 20 73 68 6f 77 20 74 68 65 20  ery to show the 
2ae80 74 72 65 65 20 73 74 72 75 63 74 75 72 65 20 69  tree structure i
2ae90 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69 72 73  n a breadth-firs
2aea0 74 20 70 61 74 74 65 72 6e 3a 0a 0a 3c 62 6c 6f  t pattern:..<blo
2aeb0 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49  ckquote><pre>.WI
2aec0 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 75  TH RECURSIVE.  u
2aed0 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61 6d 65 2c  nder_alice(name,
2aee0 6c 65 76 65 6c 29 20 41 53 20 28 0a 20 20 20 20  level) AS (.    
2aef0 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 30  VALUES('Alice',0
2af00 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a  ).    UNION ALL.
2af10 20 20 20 20 53 45 4c 45 43 54 20 6f 72 67 2e 6e      SELECT org.n
2af20 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c 69 63 65  ame, under_alice
2af30 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20 20 20 46  .level+1.      F
2af40 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20 75 6e 64  ROM org JOIN und
2af50 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f 72 67 2e  er_alice ON org.
2af60 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c 69 63 65  boss=under_alice
2af70 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52 44 45 52  .name.     ORDER
2af80 20 42 59 20 32 0a 20 20 29 0a 53 45 4c 45 43 54   BY 2.  ).SELECT
2af90 20 73 75 62 73 74 72 28 27 2e 2e 2e 2e 2e 2e 2e   substr('.......
2afa0 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33 29 20  ...',1,level*3) 
2afb0 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 75 6e 64  || name FROM und
2afc0 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e  er_alice;.</pre>
2afd0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
2afe0 70 3e 54 68 65 20 22 4f 52 44 45 52 20 42 59 20  p>The "ORDER BY 
2aff0 32 22 20 28 77 68 69 63 68 20 6d 65 61 6e 73 20  2" (which means 
2b000 74 68 65 20 73 61 6d 65 20 61 73 20 22 4f 52 44  the same as "ORD
2b010 45 52 20 42 59 20 75 6e 64 65 72 5f 61 6c 69 63  ER BY under_alic
2b020 65 2e 6c 65 76 65 6c 2b 31 22 29 0a 63 61 75 73  e.level+1").caus
2b030 65 73 20 68 69 67 68 65 72 20 6c 65 76 65 6c 73  es higher levels
2b040 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a 61   in the organiza
2b050 74 69 6f 6e 20 63 68 61 72 74 20 28 77 69 74 68  tion chart (with
2b060 20 73 6d 61 6c 6c 65 72 20 22 6c 65 76 65 6c 22   smaller "level"
2b070 20 76 61 6c 75 65 73 29 0a 74 6f 20 62 65 20 70   values).to be p
2b080 72 6f 63 65 73 73 65 64 20 66 69 72 73 74 2c 20  rocessed first, 
2b090 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 62  resulting in a b
2b0a0 72 65 61 64 74 68 2d 66 69 72 73 74 20 73 65 61  readth-first sea
2b0b0 72 63 68 2e 20 20 54 68 65 20 6f 75 74 70 75 74  rch.  The output
2b0c0 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74   is:..<blockquot
2b0d0 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65 0a 2e 2e  e><pre>.Alice...
2b0e0 2e 42 6f 62 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e  .Bob....Cindy...
2b0f0 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45  ....Dave.......E
2b100 6d 6d 61 0a 2e 2e 2e 2e 2e 2e 46 72 65 64 0a 2e  mma.......Fred..
2b110 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72 65 3e  .....Gail.</pre>
2b120 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
2b130 70 3e 42 75 74 20 69 66 20 77 65 20 63 68 61 6e  p>But if we chan
2b140 67 65 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  ge the ORDER BY 
2b150 63 6c 61 75 73 65 20 74 6f 20 61 64 64 20 74 68  clause to add th
2b160 65 20 22 44 45 53 43 22 20 6d 6f 64 69 66 69 65  e "DESC" modifie
2b170 72 2c 20 74 68 61 74 20 77 69 6c 6c 0a 63 61 75  r, that will.cau
2b180 73 65 20 6c 6f 77 65 72 20 6c 65 76 65 6c 73 20  se lower levels 
2b190 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a 61 74  in the organizat
2b1a0 69 6f 6e 20 28 77 69 74 68 20 6c 61 72 67 65 72  ion (with larger
2b1b0 20 22 6c 65 76 65 6c 22 20 76 61 6c 75 65 73 29   "level" values)
2b1c0 20 74 6f 20 62 65 0a 70 72 6f 63 65 73 73 65 64   to be.processed
2b1d0 20 66 69 72 73 74 20 62 79 20 74 68 65 20 72 65   first by the re
2b1e0 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20  cursive-select, 
2b1f0 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 64  resulting in a d
2b200 65 70 74 68 2d 66 69 72 73 74 20 73 65 61 72 63  epth-first searc
2b210 68 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  h:..<blockquote>
2b220 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
2b230 53 49 56 45 0a 20 20 75 6e 64 65 72 5f 61 6c 69  SIVE.  under_ali
2b240 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c 29 20 41  ce(name,level) A
2b250 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27  S (.    VALUES('
2b260 41 6c 69 63 65 27 2c 30 29 0a 20 20 20 20 55 4e  Alice',0).    UN
2b270 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45  ION ALL.    SELE
2b280 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e 64  CT org.name, und
2b290 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31  er_alice.level+1
2b2a0 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f 72 67 20  .      FROM org 
2b2b0 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c 69 63 65  JOIN under_alice
2b2c0 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d 75 6e 64   ON org.boss=und
2b2d0 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a 20 20  er_alice.name.  
2b2e0 20 20 20 4f 52 44 45 52 20 42 59 20 32 20 3c 62     ORDER BY 2 <b
2b2f0 3e 44 45 53 43 3c 2f 62 3e 0a 20 20 29 0a 53 45  >DESC</b>.  ).SE
2b300 4c 45 43 54 20 73 75 62 73 74 72 28 27 2e 2e 2e  LECT substr('...
2b310 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c  .......',1,level
2b320 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d  *3) || name FROM
2b330 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f   under_alice;.</
2b340 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
2b350 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74  >..<p>The output
2b360 20 6f 66 20 74 68 69 73 20 72 65 76 69 73 65 64   of this revised
2b370 20 71 75 65 72 79 20 69 73 3a 0a 0a 3c 62 6c 6f   query is:..<blo
2b380 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c  ckquote><pre>.Al
2b390 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 2e 2e  ice....Bob......
2b3a0 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61  .Dave.......Emma
2b3b0 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e  ....Cindy.......
2b3c0 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a  Fred.......Gail.
2b3d0 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
2b3e0 74 65 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 65  te>..<p>When the
2b3f0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2b400 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
2b410 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73   the recursive-s
2b420 65 6c 65 63 74 2c 20 74 68 65 0a 71 75 65 75 65  elect, the.queue
2b430 20 62 65 68 61 76 65 73 20 61 73 20 61 20 46 49   behaves as a FI
2b440 46 4f 2c 20 77 68 69 63 68 20 72 65 73 75 6c 74  FO, which result
2b450 73 20 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66  s in a breadth-f
2b460 69 72 73 74 20 73 65 61 72 63 68 2e 0a 0a 0a 3c  irst search....<
2b470 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2b480 6d 61 6e 64 65 6c 62 72 6f 74 20 7b 63 6f 6d 70  mandelbrot {comp
2b490 75 74 65 20 74 68 65 20 4d 61 6e 64 65 6c 62 72  ute the Mandelbr
2b4a0 6f 74 20 73 65 74 7d 3c 2f 74 63 6c 3e 0a 3c 68  ot set}</tcl>.<h
2b4b0 34 3e 4f 75 74 6c 61 6e 64 69 73 68 20 52 65 63  4>Outlandish Rec
2b4c0 75 72 73 69 76 65 20 51 75 65 72 79 20 45 78 61  ursive Query Exa
2b4d0 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54  mples</h4>..<p>T
2b4e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65  he following que
2b4f0 72 79 20 63 6f 6d 70 75 74 65 73 20 61 6e 20 61  ry computes an a
2b500 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 6f 66 20  pproximation of 
2b510 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 53  the Mandelbrot S
2b520 65 74 0a 61 6e 64 20 6f 75 74 70 75 74 73 20 74  et.and outputs t
2b530 68 65 20 72 65 73 75 6c 74 20 61 73 20 41 53 43  he result as ASC
2b540 49 49 2d 61 72 74 3a 0a 0a 3c 62 6c 6f 63 6b 71  II-art:..<blockq
2b550 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20  uote><pre>.WITH 
2b560 52 45 43 55 52 53 49 56 45 0a 20 20 78 61 78 69  RECURSIVE.  xaxi
2b570 73 28 78 29 20 41 53 20 28 56 41 4c 55 45 53 28  s(x) AS (VALUES(
2b580 2d 32 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20  -2.0) UNION ALL 
2b590 53 45 4c 45 43 54 20 78 2b 30 2e 30 35 20 46 52  SELECT x+0.05 FR
2b5a0 4f 4d 20 78 61 78 69 73 20 57 48 45 52 45 20 78  OM xaxis WHERE x
2b5b0 26 6c 74 3b 31 2e 32 29 2c 0a 20 20 79 61 78 69  &lt;1.2),.  yaxi
2b5c0 73 28 79 29 20 41 53 20 28 56 41 4c 55 45 53 28  s(y) AS (VALUES(
2b5d0 2d 31 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20  -1.0) UNION ALL 
2b5e0 53 45 4c 45 43 54 20 79 2b 30 2e 31 20 46 52 4f  SELECT y+0.1 FRO
2b5f0 4d 20 79 61 78 69 73 20 57 48 45 52 45 20 79 26  M yaxis WHERE y&
2b600 6c 74 3b 31 2e 30 29 2c 0a 20 20 6d 28 69 74 65  lt;1.0),.  m(ite
2b610 72 2c 20 63 78 2c 20 63 79 2c 20 78 2c 20 79 29  r, cx, cy, x, y)
2b620 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54   AS (.    SELECT
2b630 20 30 2c 20 78 2c 20 79 2c 20 30 2e 30 2c 20 30   0, x, y, 0.0, 0
2b640 2e 30 20 46 52 4f 4d 20 78 61 78 69 73 2c 20 79  .0 FROM xaxis, y
2b650 61 78 69 73 0a 20 20 20 20 55 4e 49 4f 4e 20 41  axis.    UNION A
2b660 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 69 74  LL.    SELECT it
2b670 65 72 2b 31 2c 20 63 78 2c 20 63 79 2c 20 78 2a  er+1, cx, cy, x*
2b680 78 2d 79 2a 79 20 2b 20 63 78 2c 20 32 2e 30 2a  x-y*y + cx, 2.0*
2b690 78 2a 79 20 2b 20 63 79 20 46 52 4f 4d 20 6d 20  x*y + cy FROM m 
2b6a0 0a 20 20 20 20 20 57 48 45 52 45 20 28 78 2a 78  .     WHERE (x*x
2b6b0 20 2b 20 79 2a 79 29 20 26 6c 74 3b 20 34 2e 30   + y*y) &lt; 4.0
2b6c0 20 41 4e 44 20 69 74 65 72 26 6c 74 3b 32 38 0a   AND iter&lt;28.
2b6d0 20 20 29 2c 0a 20 20 6d 32 28 69 74 65 72 2c 20    ),.  m2(iter, 
2b6e0 63 78 2c 20 63 79 29 20 41 53 20 28 0a 20 20 20  cx, cy) AS (.   
2b6f0 20 53 45 4c 45 43 54 20 6d 61 78 28 69 74 65 72   SELECT max(iter
2b700 29 2c 20 63 78 2c 20 63 79 20 46 52 4f 4d 20 6d  ), cx, cy FROM m
2b710 20 47 52 4f 55 50 20 42 59 20 63 78 2c 20 63 79   GROUP BY cx, cy
2b720 0a 20 20 29 2c 0a 20 20 61 28 74 29 20 41 53 20  .  ),.  a(t) AS 
2b730 28 0a 20 20 20 20 53 45 4c 45 43 54 20 67 72 6f  (.    SELECT gro
2b740 75 70 5f 63 6f 6e 63 61 74 28 20 73 75 62 73 74  up_concat( subst
2b750 72 28 27 20 2e 2b 2a 23 27 2c 20 31 2b 6d 69 6e  r(' .+*#', 1+min
2b760 28 69 74 65 72 2f 37 2c 34 29 2c 20 31 29 2c 20  (iter/7,4), 1), 
2b770 27 27 29 20 0a 20 20 20 20 46 52 4f 4d 20 6d 32  '') .    FROM m2
2b780 20 47 52 4f 55 50 20 42 59 20 63 79 0a 20 20 29   GROUP BY cy.  )
2b790 0a 53 45 4c 45 43 54 20 67 72 6f 75 70 5f 63 6f  .SELECT group_co
2b7a0 6e 63 61 74 28 72 74 72 69 6d 28 74 29 2c 78 27  ncat(rtrim(t),x'
2b7b0 30 61 27 29 20 46 52 4f 4d 20 61 3b 0a 3c 2f 70  0a') FROM a;.</p
2b7c0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
2b7d0 0a 0a 3c 70 3e 49 6e 20 74 68 69 73 20 71 75 65  ..<p>In this que
2b7e0 72 79 2c 20 74 68 65 20 22 78 61 78 69 73 22 20  ry, the "xaxis" 
2b7f0 61 6e 64 20 22 79 61 78 69 73 22 20 43 54 45 73  and "yaxis" CTEs
2b800 20 64 65 66 69 6e 65 20 74 68 65 20 67 72 69 64   define the grid
2b810 20 6f 66 20 70 6f 69 6e 74 73 20 66 6f 72 0a 77   of points for.w
2b820 68 69 63 68 20 74 68 65 20 4d 61 6e 64 65 6c 62  hich the Mandelb
2b830 72 6f 74 20 53 65 74 20 77 69 6c 6c 20 62 65 20  rot Set will be 
2b840 61 70 70 72 6f 78 69 6d 61 74 65 64 2e 20 20 45  approximated.  E
2b850 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 0a 22  ach row in the."
2b860 6d 28 69 74 65 72 2c 63 78 2c 63 79 2c 78 2c 79  m(iter,cx,cy,x,y
2b870 29 22 20 43 54 45 20 6d 65 61 6e 73 20 74 68 61  )" CTE means tha
2b880 74 20 61 66 74 65 72 20 22 69 74 65 72 22 20 69  t after "iter" i
2b890 74 65 72 61 74 69 6f 6e 73 2c 20 74 68 65 20 4d  terations, the M
2b8a0 61 6e 64 65 6c 62 72 6f 74 0a 69 74 65 72 61 74  andelbrot.iterat
2b8b0 69 6f 6e 20 73 74 61 72 74 69 6e 67 20 61 74 20  ion starting at 
2b8c0 63 78 2c 63 79 20 68 61 73 20 72 65 61 63 68 65  cx,cy has reache
2b8d0 64 20 70 6f 69 6e 74 20 78 2c 79 2e 20 20 54 68  d point x,y.  Th
2b8e0 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72  e number of iter
2b8f0 61 74 69 6f 6e 73 0a 69 6e 20 74 68 69 73 20 65  ations.in this e
2b900 78 61 6d 70 6c 65 20 69 73 20 6c 69 6d 69 74 65  xample is limite
2b910 64 20 74 6f 20 32 38 20 28 77 68 69 63 68 20 73  d to 28 (which s
2b920 65 76 65 72 65 6c 79 20 6c 69 6d 69 74 73 20 74  everely limits t
2b930 68 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 6f 66  he resolution of
2b940 0a 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e  .the computation
2b950 2c 20 62 75 74 20 69 73 20 73 75 66 66 69 63 69  , but is suffici
2b960 65 6e 74 20 66 6f 72 20 6c 6f 77 2d 72 65 73 6f  ent for low-reso
2b970 6c 75 74 69 6f 6e 20 41 53 43 49 49 2d 61 72 74  lution ASCII-art
2b980 20 6f 75 74 70 75 74 29 2e 0a 54 68 65 20 22 6d   output)..The "m
2b990 32 28 69 74 65 72 2c 63 78 2c 63 79 29 22 20 43  2(iter,cx,cy)" C
2b9a0 54 45 20 68 6f 6c 64 73 20 74 68 65 20 6d 61 78  TE holds the max
2b9b0 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 69  imum number of i
2b9c0 74 65 72 61 74 69 6f 6e 73 20 72 65 61 63 68 65  terations reache
2b9d0 64 20 77 68 65 6e 0a 73 74 61 72 74 69 6e 67 20  d when.starting 
2b9e0 61 74 20 70 6f 69 6e 74 20 63 78 2c 63 79 2e 0a  at point cx,cy..
2b9f0 46 69 6e 61 6c 6c 79 2c 20 65 61 63 68 20 72 6f  Finally, each ro
2ba00 77 20 69 6e 20 74 68 65 20 22 61 28 74 29 22 20  w in the "a(t)" 
2ba10 43 54 45 20 68 6f 6c 64 73 20 61 20 73 74 72 69  CTE holds a stri
2ba20 6e 67 20 0a 77 68 69 63 68 20 69 73 20 61 20 73  ng .which is a s
2ba30 69 6e 67 6c 65 20 6c 69 6e 65 20 6f 66 20 74 68  ingle line of th
2ba40 65 20 6f 75 74 70 75 74 20 41 53 43 49 49 2d 61  e output ASCII-a
2ba50 72 74 2e 0a 54 68 65 20 53 45 4c 45 43 54 20 73  rt..The SELECT s
2ba60 74 61 74 65 6d 65 6e 74 20 61 74 20 74 68 65 20  tatement at the 
2ba70 65 6e 64 20 6a 75 73 74 20 71 75 65 72 69 65 73  end just queries
2ba80 20 74 68 65 20 22 61 22 20 43 54 45 20 74 6f 0a   the "a" CTE to.
2ba90 72 65 74 72 69 65 76 65 20 61 6c 6c 20 6c 69 6e  retrieve all lin
2baa0 65 73 20 6f 66 20 41 53 43 49 49 2d 61 72 74 2c  es of ASCII-art,
2bab0 20 6f 6e 65 20 62 79 20 6f 6e 65 2e 0a 0a 3c 70   one by one...<p
2bac0 3e 52 75 6e 6e 69 6e 67 20 74 68 65 20 71 75 65  >Running the que
2bad0 72 79 20 61 62 6f 76 65 20 69 6e 20 61 6e 20 53  ry above in an S
2bae0 51 4c 69 74 65 20 5b 63 6f 6d 6d 61 6e 64 2d 6c  QLite [command-l
2baf0 69 6e 65 20 73 68 65 6c 6c 5d 20 72 65 73 75 6c  ine shell] resul
2bb00 74 73 0a 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  ts.in the follow
2bb10 69 6e 67 20 6f 75 74 70 75 74 3a 0a 0a 3c 62 6c  ing output:..<bl
2bb20 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 20  ockquote><pre>. 
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb50 20 20 20 2e 2e 2e 2e 23 0a 20 20 20 20 20 20 20     ....#.       
2bb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb70 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23 2a              ..#*
2bb80 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bba0 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e 0a 20 20      ..+####+..  
2bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbc0 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e            ......
2bbd0 2e 2b 23 23 23 23 2e 2e 2e 2e 20 20 20 2b 0a 20  .+####....   +. 
2bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbf0 20 20 20 20 20 20 20 20 20 20 2e 2e 23 23 2b 2a            ..##+*
2bc00 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 2b 2b 2b  ##########+.++++
2bc10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bc20 20 20 20 20 20 20 20 20 20 20 20 2e 2b 2e 23 23             .+.##
2bc30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bc40 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
2bc50 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23   .............+#
2bc60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bc70 23 23 2b 2e 2b 0a 20 20 20 20 20 20 20 20 20 20  ##+.+.          
2bc80 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e 2e 2e      ..++..#.....
2bc90 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  *###############
2bca0 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20  ######+..       
2bcb0 20 20 20 20 20 20 2e 2e 2e 2b 23 23 23 23 23 23        ...+######
2bcc0 23 2b 2b 23 23 23 23 23 23 23 23 23 23 23 23 23  #++#############
2bcd0 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20  ##########..    
2bce0 20 20 20 20 20 20 2e 2e 2e 2e 2b 2a 23 23 23 23        ....+*####
2bcf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bd00 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20 23  ############.. #
2bd10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bd20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bd30 23 23 23 23 23 23 23 23 23 23 23 23 2e 2e 2e 0a  ############....
2bd40 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2b 2a            ....+*
2bd50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bd60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bd70 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2e  ..             .
2bd80 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23 23 23 23  ..+#######++####
2bd90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bda0 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20 20 20  ###..           
2bdb0 20 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e 2e 2e 2a     ..++..#.....*
2bdc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bdd0 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20  #####+..        
2bde0 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e        ..........
2bdf0 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23 23 23 23  ...+############
2be00 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20 20 20 20  #######+.+.     
2be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be20 20 20 20 20 20 2e 2b 2e 23 23 23 23 23 23 23 23       .+.########
2be30 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20  ##########+..   
2be40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be50 20 20 20 20 20 20 20 20 2e 2e 23 23 2b 2a 23 23          ..##+*##
2be60 23 23 23 23 23 23 23 23 2b 2e 2b 2b 2b 2b 0a 20  ########+.++++. 
2be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be80 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e             .....
2be90 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20 20 20 2b 0a  ..+####....   +.
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2beb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bec0 20 2e 2e 2b 23 23 23 23 2b 2e 0a 20 20 20 20 20   ..+####+..     
2bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
2bef0 23 2a 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 20  #*...           
2bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf10 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 23 0a 20           ....#. 
2bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf40 20 20 20 2b 2e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c     +..</pre></bl
2bf50 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e  ockquote>..<tcl>
2bf60 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 75 64 6f  hd_fragment sudo
2bf70 6b 75 20 7b 73 6f 6c 76 65 20 53 75 64 6f 6b 75  ku {solve Sudoku
2bf80 20 70 75 7a 7a 6c 65 73 7d 20 3c 2f 74 63 6c 3e   puzzles} </tcl>
2bf90 0a 3c 70 3e 54 68 69 73 20 6e 65 78 74 20 71 75  .<p>This next qu
2bfa0 65 72 79 20 73 6f 6c 76 65 73 20 61 20 53 75 64  ery solves a Sud
2bfb0 6f 6b 75 20 70 75 7a 7a 6c 65 2e 20 20 54 68 65  oku puzzle.  The
2bfc0 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 70 75   state of the pu
2bfd0 7a 7a 6c 65 20 69 73 0a 64 65 66 69 6e 65 64 20  zzle is.defined 
2bfe0 62 79 20 61 6e 20 38 31 2d 63 68 61 72 61 63 74  by an 81-charact
2bff0 65 72 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64  er string formed
2c000 20 62 79 20 72 65 61 64 69 6e 67 20 65 6e 74 72   by reading entr
2c010 69 65 73 20 66 72 6f 6d 20 74 68 65 0a 70 75 7a  ies from the.puz
2c020 7a 6c 65 20 62 6f 78 20 72 6f 77 20 62 79 20 72  zle box row by r
2c030 6f 77 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ow from left to 
2c040 72 69 67 68 74 20 61 6e 64 20 74 68 65 6e 20 66  right and then f
2c050 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f 74 74 6f  rom top to botto
2c060 6d 2e 0a 42 6c 61 6e 6b 20 73 71 75 61 72 65 73  m..Blank squares
2c070 20 69 6e 20 74 68 65 20 70 75 7a 7a 6c 65 20 61   in the puzzle a
2c080 72 65 20 64 65 6e 6f 74 65 64 20 62 79 20 61 20  re denoted by a 
2c090 22 2e 22 20 63 68 61 72 61 63 74 65 72 2e 20 20  "." character.  
2c0a0 0a 54 68 75 73 20 74 68 65 20 69 6e 70 75 74 20  .Thus the input 
2c0b0 73 74 72 69 6e 67 3a 0a 0a 3c 62 6c 6f 63 6b 71  string:..<blockq
2c0c0 75 6f 74 65 3e 0a 35 33 2e 2e 37 2e 2e 2e 2e 36  uote>.53..7....6
2c0d0 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36  ..195....98....6
2c0e0 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e 33  .8...6...34..8.3
2c0f0 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e  ..17...2...6.6..
2c100 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e 2e  ..28....419..5..
2c110 2e 2e 38 2e 2e 37 39 0a 3c 2f 62 6c 6f 63 6b 71  ..8..79.</blockq
2c120 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 72 72 65 73  uote>..<p>Corres
2c130 70 6f 6e 64 73 20 74 6f 20 61 20 70 75 7a 7a 6c  ponds to a puzzl
2c140 65 20 6c 69 6b 65 20 74 68 69 73 3a 0a 0a 3c 62  e like this:..<b
2c150 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
2c160 65 20 62 6f 72 64 65 72 3d 22 31 22 20 63 65 6c  e border="1" cel
2c170 6c 70 61 64 64 69 6e 67 3d 22 35 22 3e 0a 3c 74  lpadding="5">.<t
2c180 72 3e 3c 74 64 3e 35 3c 74 64 3e 33 3c 74 64 3e  r><td>5<td>3<td>
2c190 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64 3e 20   <td> <td>7<td> 
2c1a0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 0a 3c  <td> <td> <td>.<
2c1b0 74 72 3e 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64  tr><td>6<td> <td
2c1c0 3e 20 3c 74 64 3e 31 3c 74 64 3e 39 3c 74 64 3e  > <td>1<td>9<td>
2c1d0 35 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 0a  5<td> <td> <td>.
2c1e0 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 39 3c 74  <tr><td> <td>9<t
2c1f0 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>8<td> <td> <td
2c200 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e  > <td> <td>6<td>
2c210 0a 3c 74 72 3e 3c 74 64 3e 38 3c 74 64 3e 20 3c  .<tr><td>8<td> <
2c220 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 3c 74  td> <td> <td>6<t
2c230 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
2c240 3e 33 0a 3c 74 72 3e 3c 74 64 3e 34 3c 74 64 3e  >3.<tr><td>4<td>
2c250 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64 3e 20   <td> <td>8<td> 
2c260 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>3<td> <td> <
2c270 74 64 3e 31 0a 3c 74 72 3e 3c 74 64 3e 37 3c 74  td>1.<tr><td>7<t
2c280 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
2c290 3e 32 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >2<td> <td> <td>
2c2a0 20 3c 74 64 3e 36 0a 3c 74 72 3e 3c 74 64 3e 20   <td>6.<tr><td> 
2c2b0 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>6<td> <td> <
2c2c0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 32 3c 74  td> <td> <td>2<t
2c2d0 64 3e 38 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e  d>8<td>.<tr><td>
2c2e0 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 34   <td> <td> <td>4
2c2f0 3c 74 64 3e 31 3c 74 64 3e 39 3c 74 64 3e 20 3c  <td>1<td>9<td> <
2c300 74 64 3e 20 3c 74 64 3e 35 0a 3c 74 72 3e 3c 74  td> <td>5.<tr><t
2c310 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
2c320 3e 20 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e  > <td>8<td> <td>
2c330 20 3c 74 64 3e 37 3c 74 64 3e 39 0a 3c 2f 74 61   <td>7<td>9.</ta
2c340 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  ble>.</blockquot
2c350 65 3e 0a 0a 3c 70 3e 54 68 69 73 20 69 73 20 74  e>..<p>This is t
2c360 68 65 20 71 75 65 72 79 20 74 68 61 74 20 73 6f  he query that so
2c370 6c 76 65 73 20 74 68 65 20 70 75 7a 7a 6c 65 3a  lves the puzzle:
2c380 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
2c390 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49  re>.WITH RECURSI
2c3a0 56 45 0a 20 20 69 6e 70 75 74 28 73 75 64 29 20  VE.  input(sud) 
2c3b0 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28  AS (.    VALUES(
2c3c0 27 35 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31 39 35  '53..7....6..195
2c3d0 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e  ....98....6.8...
2c3e0 36 2e 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31 37 2e  6...34..8.3..17.
2c3f0 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32 38 2e  ..2...6.6....28.
2c400 2e 2e 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e  ...419..5....8..
2c410 37 39 27 29 0a 20 20 29 2c 0a 20 20 64 69 67 69  79').  ),.  digi
2c420 74 73 28 7a 2c 20 6c 70 29 20 41 53 20 28 0a 20  ts(z, lp) AS (. 
2c430 20 20 20 56 41 4c 55 45 53 28 27 31 27 2c 20 31     VALUES('1', 1
2c440 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 20  ).    UNION ALL 
2c450 53 45 4c 45 43 54 0a 20 20 20 20 43 41 53 54 28  SELECT.    CAST(
2c460 6c 70 2b 31 20 41 53 20 54 45 58 54 29 2c 20 6c  lp+1 AS TEXT), l
2c470 70 2b 31 20 46 52 4f 4d 20 64 69 67 69 74 73 20  p+1 FROM digits 
2c480 57 48 45 52 45 20 6c 70 26 6c 74 3b 39 0a 20 20  WHERE lp&lt;9.  
2c490 29 2c 0a 20 20 78 28 73 2c 20 69 6e 64 29 20 41  ),.  x(s, ind) A
2c4a0 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 73  S (.    SELECT s
2c4b0 75 64 2c 20 69 6e 73 74 72 28 73 75 64 2c 20 27  ud, instr(sud, '
2c4c0 2e 27 29 20 46 52 4f 4d 20 69 6e 70 75 74 0a 20  .') FROM input. 
2c4d0 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20     UNION ALL.   
2c4e0 20 53 45 4c 45 43 54 0a 20 20 20 20 20 20 73 75   SELECT.      su
2c4f0 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31  bstr(s, 1, ind-1
2c500 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72  ) || z || substr
2c510 28 73 2c 20 69 6e 64 2b 31 29 2c 0a 20 20 20 20  (s, ind+1),.    
2c520 20 20 69 6e 73 74 72 28 20 73 75 62 73 74 72 28    instr( substr(
2c530 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c 20  s, 1, ind-1) || 
2c540 7a 20 7c 7c 20 73 75 62 73 74 72 28 73 2c 20 69  z || substr(s, i
2c550 6e 64 2b 31 29 2c 20 27 2e 27 20 29 0a 20 20 20  nd+1), '.' ).   
2c560 20 20 46 52 4f 4d 20 78 2c 20 64 69 67 69 74 73    FROM x, digits
2c570 20 41 53 20 7a 0a 20 20 20 20 57 48 45 52 45 20   AS z.    WHERE 
2c580 69 6e 64 3e 30 0a 20 20 20 20 20 20 41 4e 44 20  ind>0.      AND 
2c590 4e 4f 54 20 45 58 49 53 54 53 20 28 0a 20 20 20  NOT EXISTS (.   
2c5a0 20 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20           SELECT 
2c5b0 31 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1.              
2c5c0 46 52 4f 4d 20 64 69 67 69 74 73 20 41 53 20 6c  FROM digits AS l
2c5d0 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 57  p.             W
2c5e0 48 45 52 45 20 7a 2e 7a 20 3d 20 73 75 62 73 74  HERE z.z = subst
2c5f0 72 28 73 2c 20 28 28 69 6e 64 2d 31 29 2f 39 29  r(s, ((ind-1)/9)
2c600 2a 39 20 2b 20 6c 70 2c 20 31 29 0a 20 20 20 20  *9 + lp, 1).    
2c610 20 20 20 20 20 20 20 20 20 20 20 20 4f 52 20 7a              OR z
2c620 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c 20 28  .z = substr(s, (
2c630 28 69 6e 64 2d 31 29 25 39 29 20 2b 20 28 6c 70  (ind-1)%9) + (lp
2c640 2d 31 29 2a 39 20 2b 20 31 2c 20 31 29 0a 20 20  -1)*9 + 1, 1).  
2c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 52                OR
2c660 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c   z.z = substr(s,
2c670 20 28 28 28 69 6e 64 2d 31 29 2f 33 29 20 25 20   (((ind-1)/3) % 
2c680 33 29 20 2a 20 33 0a 20 20 20 20 20 20 20 20 20  3) * 3.         
2c690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b                 +
2c6a0 20 28 28 69 6e 64 2d 31 29 2f 32 37 29 20 2a 20   ((ind-1)/27) * 
2c6b0 32 37 20 2b 20 6c 70 0a 20 20 20 20 20 20 20 20  27 + lp.        
2c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6d0 2b 20 28 28 6c 70 2d 31 29 20 2f 20 33 29 20 2a  + ((lp-1) / 3) *
2c6e0 20 36 2c 20 31 29 0a 20 20 20 20 20 20 20 20 20   6, 1).         
2c6f0 29 0a 20 20 29 0a 53 45 4c 45 43 54 20 73 20 46  ).  ).SELECT s F
2c700 52 4f 4d 20 78 20 57 48 45 52 45 20 69 6e 64 3d  ROM x WHERE ind=
2c710 30 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  0;.</pre></block
2c720 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22  quote>..<p>The "
2c730 69 6e 70 75 74 22 20 43 54 45 20 64 65 66 69 6e  input" CTE defin
2c740 65 73 20 74 68 65 20 69 6e 70 75 74 20 70 75 7a  es the input puz
2c750 7a 6c 65 2e 0a 54 68 65 20 22 64 69 67 69 74 73  zle..The "digits
2c760 22 20 43 54 45 20 64 65 66 69 6e 65 73 20 61 20  " CTE defines a 
2c770 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73  table that holds
2c780 20 61 6c 6c 20 64 69 67 69 74 73 20 62 65 74 77   all digits betw
2c790 65 65 6e 20 31 20 61 6e 64 20 39 2e 0a 54 68 65  een 1 and 9..The
2c7a0 20 77 6f 72 6b 20 6f 66 20 73 6f 6c 76 69 6e 67   work of solving
2c7b0 20 74 68 65 20 70 75 7a 7a 6c 65 20 69 73 20 75   the puzzle is u
2c7c0 6e 64 65 72 74 61 6b 65 6e 20 62 79 20 74 68 65  ndertaken by the
2c7d0 20 22 78 22 20 43 54 45 2e 0a 41 6e 20 65 6e 74   "x" CTE..An ent
2c7e0 72 79 20 69 6e 20 78 28 73 2c 69 6e 64 29 20 6d  ry in x(s,ind) m
2c7f0 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 38 31  eans that the 81
2c800 2d 63 68 61 72 61 63 74 65 72 20 73 74 72 69 6e  -character strin
2c810 67 20 22 73 22 20 69 73 20 61 20 76 61 6c 69 64  g "s" is a valid
2c820 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 28  .sudoku puzzle (
2c830 69 74 20 68 61 73 20 6e 6f 20 63 6f 6e 66 6c 69  it has no confli
2c840 63 74 73 29 20 61 6e 64 20 74 68 61 74 20 74 68  cts) and that th
2c850 65 20 66 69 72 73 74 20 75 6e 6b 6e 6f 77 6e 20  e first unknown 
2c860 63 68 61 72 61 63 74 65 72 0a 69 73 20 61 74 20  character.is at 
2c870 70 6f 73 69 74 69 6f 6e 20 22 69 6e 64 22 2c 20  position "ind", 
2c880 6f 72 20 69 6e 64 3d 3d 30 20 69 66 20 61 6c 6c  or ind==0 if all
2c890 20 63 68 61 72 61 63 74 65 72 20 70 6f 73 69 74   character posit
2c8a0 69 6f 6e 73 20 61 72 65 20 66 69 6c 6c 65 64 20  ions are filled 
2c8b0 69 6e 2e 0a 54 68 65 20 67 6f 61 6c 2c 20 74 68  in..The goal, th
2c8c0 65 6e 2c 20 69 73 20 74 6f 20 63 6f 6d 70 75 74  en, is to comput
2c8d0 65 20 65 6e 74 72 69 65 73 20 66 6f 72 20 22 78  e entries for "x
2c8e0 22 20 77 69 74 68 20 61 6e 20 22 69 6e 64 22 20  " with an "ind" 
2c8f0 6f 66 20 30 2e 0a 0a 3c 70 3e 54 68 65 20 73 6f  of 0...<p>The so
2c900 6c 76 65 72 20 77 6f 72 6b 73 20 62 79 20 61 64  lver works by ad
2c910 64 69 6e 67 20 6e 65 77 20 65 6e 74 72 69 65 73  ding new entries
2c920 20 74 6f 20 74 68 65 20 22 78 22 20 72 65 63 75   to the "x" recu
2c930 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 47 69 76  rsive table..Giv
2c940 65 6e 20 70 72 69 6f 72 20 65 6e 74 72 69 65 73  en prior entries
2c950 2c 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  , the recursive-
2c960 73 65 6c 65 63 74 20 74 72 69 65 73 20 74 6f 20  select tries to 
2c970 66 69 6c 6c 20 69 6e 20 61 20 73 69 6e 67 6c 65  fill in a single
2c980 20 6e 65 77 0a 70 6f 73 69 74 69 6f 6e 20 77 69   new.position wi
2c990 74 68 20 61 6c 6c 20 76 61 6c 75 65 73 20 62 65  th all values be
2c9a0 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20 74 68  tween 1 and 9 th
2c9b0 61 74 20 61 63 74 75 61 6c 6c 79 20 77 6f 72 6b  at actually work
2c9c0 20 69 6e 20 74 68 61 74 0a 70 6f 73 69 74 69 6f   in that.positio
2c9d0 6e 2e 20 20 54 68 65 20 63 6f 6d 70 6c 69 63 61  n.  The complica
2c9e0 74 65 64 20 22 4e 4f 54 20 45 58 49 53 54 53 22  ted "NOT EXISTS"
2c9f0 20 73 75 62 71 75 65 72 79 20 69 73 20 74 68 65   subquery is the
2ca00 20 6d 61 67 69 63 20 74 68 61 74 0a 66 69 67 75   magic that.figu
2ca10 72 65 73 20 6f 75 74 20 77 68 65 74 68 65 72 20  res out whether 
2ca20 6f 72 20 6e 6f 74 20 65 61 63 68 20 63 61 6e 64  or not each cand
2ca30 69 64 61 74 65 20 22 73 22 20 73 74 72 69 6e 67  idate "s" string
2ca40 20 69 73 20 61 20 76 61 6c 69 64 0a 73 75 64 6f   is a valid.sudo
2ca50 6b 75 20 70 75 7a 7a 6c 65 20 6f 72 20 6e 6f 74  ku puzzle or not
2ca60 2e 0a 0a 3c 70 3e 54 68 65 20 66 69 6e 61 6c 20  ...<p>The final 
2ca70 61 6e 73 77 65 72 20 69 73 20 66 6f 75 6e 64 20  answer is found 
2ca80 62 79 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61  by looking for a
2ca90 20 73 74 72 69 6e 67 20 77 69 74 68 20 69 6e 64   string with ind
2caa0 3d 3d 30 2e 0a 49 66 20 74 68 65 20 6f 72 69 67  ==0..If the orig
2cab0 69 6e 61 6c 20 73 75 64 6f 6b 75 20 70 72 6f 62  inal sudoku prob
2cac0 6c 65 6d 20 64 69 64 20 6e 6f 74 20 68 61 76 65  lem did not have
2cad0 20 61 20 75 6e 69 71 75 65 20 73 6f 6c 75 74 69   a unique soluti
2cae0 6f 6e 2c 20 74 68 65 6e 0a 74 68 65 20 71 75 65  on, then.the que
2caf0 72 79 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 61  ry will return a
2cb00 6c 6c 20 70 6f 73 73 69 62 6c 65 20 73 6f 6c 75  ll possible solu
2cb10 74 69 6f 6e 73 2e 20 20 49 66 20 74 68 65 20 6f  tions.  If the o
2cb20 72 69 67 69 6e 61 6c 20 70 72 6f 62 6c 65 6d 0a  riginal problem.
2cb30 77 61 73 20 75 6e 73 6f 6c 76 61 62 6c 65 2c 20  was unsolvable, 
2cb40 74 68 65 6e 20 6e 6f 20 72 6f 77 73 20 77 69 6c  then no rows wil
2cb50 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 20  l be returned.  
2cb60 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68  In this case, th
2cb70 65 20 75 6e 69 71 75 65 0a 61 6e 73 77 65 72 20  e unique.answer 
2cb80 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  is:..<blockquote
2cb90 3e 0a 35 33 34 36 37 38 39 31 32 36 37 32 31 39  >.53467891267219
2cba0 35 33 34 38 31 39 38 33 34 32 35 36 37 38 35 39  5348198342567859
2cbb0 37 36 31 34 32 33 34 32 36 38 35 33 37 39 31 37  7614234268537917
2cbc0 31 33 39 32 34 38 35 36 39 36 31 35 33 37 32 38  1392485696153728
2cbd0 34 32 38 37 34 31 39 36 33 35 33 34 35 32 38 36  4287419635345286
2cbe0 31 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  179.</blockquote
2cbf0 3e 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c 75 74 69  >..<p>The soluti
2cc00 6f 6e 20 77 61 73 20 63 6f 6d 70 75 74 65 64 20  on was computed 
2cc10 69 6e 20 6c 65 73 73 20 74 68 61 6e 20 33 30 30  in less than 300
2cc20 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 6f 6e   milliseconds on
2cc30 20 61 20 6d 6f 64 65 72 6e 0a 77 6f 72 6b 73 74   a modern.workst
2cc40 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 4c 69 6d 69  ation...<h3>Limi
2cc50 74 61 74 69 6f 6e 73 20 41 6e 64 20 43 61 76 65  tations And Cave
2cc60 61 74 73 3c 2f 68 33 3e 0a 0a 3c 75 6c 3e 0a 3c  ats</h3>..<ul>.<
2cc70 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49 54 48 20  li><p>.The WITH 
2cc80 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65  clause cannot be
2cc90 20 75 73 65 64 20 77 69 74 68 69 6e 20 61 20 5b   used within a [
2cca0 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 2e  CREATE TRIGGER].
2ccb0 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49 54  .<li><p>.The WIT
2ccc0 48 20 63 6c 61 75 73 65 20 6d 75 73 74 20 61 70  H clause must ap
2ccd0 70 65 61 72 20 61 74 20 74 68 65 20 62 65 67 69  pear at the begi
2cce0 6e 6e 69 6e 67 20 6f 66 20 61 20 74 6f 70 2d 6c  nning of a top-l
2ccf0 65 76 65 6c 20 5b 53 45 4c 45 43 54 5d 20 73 74  evel [SELECT] st
2cd00 61 74 65 6d 65 6e 74 0a 6f 72 20 61 74 20 74 68  atement.or at th
2cd10 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61  e beginning of a
2cd20 20 73 75 62 71 75 65 72 79 2e 20 20 54 68 65 20   subquery.  The 
2cd30 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 6e  WITH clause cann
2cd40 6f 74 20 62 65 20 70 72 65 70 65 6e 64 65 64 20  ot be prepended 
2cd50 74 6f 0a 74 68 65 20 73 65 63 6f 6e 64 20 6f 72  to.the second or
2cd60 20 73 75 62 73 65 71 75 65 6e 74 20 53 45 4c 45   subsequent SELE
2cd70 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20  CT statement of 
2cd80 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65  a [compound sele
2cd90 63 74 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65  ct]..<li><p>.The
2cda0 20 53 51 4c 3a 31 39 39 39 20 73 70 65 63 20 72   SQL:1999 spec r
2cdb0 65 71 75 69 72 65 73 20 74 68 61 74 20 74 68 65  equires that the
2cdc0 20 52 45 43 55 52 53 49 56 45 20 6b 65 79 77 6f   RECURSIVE keywo
2cdd0 72 64 20 66 6f 6c 6c 6f 77 20 57 49 54 48 20 69  rd follow WITH i
2cde0 6e 20 61 6e 79 0a 57 49 54 48 20 63 6c 61 75 73  n any.WITH claus
2cdf0 65 20 74 68 61 74 20 69 6e 63 6c 75 64 65 73 20  e that includes 
2ce00 61 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d  a recursive comm
2ce10 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
2ce20 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c 20 66  ion.  However, f
2ce30 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  or.compatibility
2ce40 20 77 69 74 68 20 53 71 6c 53 65 72 76 65 72 20   with SqlServer 
2ce50 61 6e 64 20 4f 72 61 63 6c 65 2c 20 53 51 4c 69  and Oracle, SQLi
2ce60 74 65 20 64 6f 65 73 20 6e 6f 74 20 65 6e 66 6f  te does not enfo
2ce70 72 63 65 20 74 68 69 73 20 72 75 6c 65 2e 0a 3c  rce this rule..<
2ce80 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  /ul>..<tcl>.####
2ce90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ceb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ced0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
2cee0 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c 65 63  ion SELECT selec
2cef0 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72 79 7d  t {SELECT query}
2cf00 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
2cf10 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74 2d  eDiagram select-
2cf20 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70  stmt.</tcl>...<p
2cf30 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74 61 74  >The SELECT stat
2cf40 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  ement is used to
2cf50 20 71 75 65 72 79 20 74 68 65 20 64 61 74 61 62   query the datab
2cf60 61 73 65 2e 20 20 54 68 65 0a 72 65 73 75 6c 74  ase.  The.result
2cf70 20 6f 66 20 61 20 53 45 4c 45 43 54 20 69 73 20   of a SELECT is 
2cf80 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77  zero or more row
2cf90 73 20 6f 66 20 64 61 74 61 20 77 68 65 72 65 20  s of data where 
2cfa0 65 61 63 68 20 72 6f 77 0a 68 61 73 20 61 20 66  each row.has a f
2cfb0 69 78 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 63  ixed number of c
2cfc0 6f 6c 75 6d 6e 73 2e 20 20 41 20 53 45 4c 45 43  olumns.  A SELEC
2cfd0 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  T statement does
2cfe0 20 6e 6f 74 20 6d 61 6b 65 0a 61 6e 79 20 63 68   not make.any ch
2cff0 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74  anges to the dat
2d000 61 62 61 73 65 2e 0a 0a 3c 70 3e 54 68 65 20 22  abase...<p>The "
2d010 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22 20 73  [select-stmt]" s
2d020 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20 61 62  yntax diagram ab
2d030 6f 76 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ove attempts to 
2d040 73 68 6f 77 20 61 73 20 6d 75 63 68 20 6f 66 20  show as much of 
2d050 74 68 65 0a 53 45 4c 45 43 54 20 73 74 61 74 65  the.SELECT state
2d060 6d 65 6e 74 20 73 79 6e 74 61 78 20 61 73 20 70  ment syntax as p
2d070 6f 73 73 69 62 6c 65 20 69 6e 20 61 20 73 69 6e  ossible in a sin
2d080 67 6c 65 20 64 69 61 67 72 61 6d 2c 20 62 65 63  gle diagram, bec
2d090 61 75 73 65 20 73 6f 6d 65 20 72 65 61 64 65 72  ause some reader
2d0a0 73 0a 66 69 6e 64 20 74 68 61 74 20 68 65 6c 70  s.find that help
2d0b0 66 75 6c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ful.  The follow
2d0c0 69 6e 67 20 22 5b 66 61 63 74 6f 72 65 64 2d 73  ing "[factored-s
2d0d0 65 6c 65 63 74 2d 73 74 6d 74 5d 22 20 69 73 20  elect-stmt]" is 
2d0e0 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 73  an alternative.s
2d0f0 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20 74  yntax diagrams t
2d100 68 61 74 20 65 78 70 72 65 73 73 65 73 20 74 68  hat expresses th
2d110 65 20 73 61 6d 65 20 73 79 6e 74 61 78 20 62 75  e same syntax bu
2d120 74 20 74 72 69 65 73 20 74 6f 20 62 72 65 61 6b  t tries to break
2d130 20 74 68 65 20 73 79 6e 74 61 78 20 0a 64 6f 77   the syntax .dow
2d140 6e 20 69 6e 74 6f 20 73 6d 61 6c 6c 65 72 20 63  n into smaller c
2d150 68 75 6e 6b 73 2e 0a 0a 3c 74 63 6c 3e 0a 52 65  hunks...<tcl>.Re
2d160 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
2d170 67 72 61 6d 20 2d 2d 69 6e 69 74 69 61 6c 6c 79  gram --initially
2d180 2d 68 69 64 64 65 6e 20 66 61 63 74 6f 72 65 64  -hidden factored
2d190 2d 73 65 6c 65 63 74 2d 73 74 6d 74 20 73 65 6c  -select-stmt sel
2d1a0 65 63 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a  ect-core.</tcl>.
2d1b0 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68  .<p>Note that th
2d1c0 65 72 65 20 61 72 65 20 70 61 74 68 73 20 74 68  ere are paths th
2d1d0 72 6f 75 67 68 20 74 68 65 20 73 79 6e 74 61 78  rough the syntax
2d1e0 20 64 69 61 67 72 61 6d 73 20 74 68 61 74 0a 61   diagrams that.a
2d1f0 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 69  re not allowed i
2d200 6e 20 70 72 61 63 74 69 63 65 2e 20 20 53 6f 6d  n practice.  Som
2d210 65 20 65 78 61 6d 70 6c 65 73 3a 0a 3c 75 6c 3e  e examples:.<ul>
2d220 0a 3c 6c 69 3e 41 20 5b 56 41 4c 55 45 53 5d 20  .<li>A [VALUES] 
2d230 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20 74 68  clause can be th
2d240 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
2d250 69 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53  in a [compound S
2d260 45 4c 45 43 54 5d 0a 20 20 20 20 74 68 61 74 20  ELECT].    that 
2d270 75 73 65 73 20 61 20 5b 57 49 54 48 5d 20 63 6c  uses a [WITH] cl
2d280 61 75 73 65 2c 20 62 75 74 20 61 20 5b 73 69 6d  ause, but a [sim
2d290 70 6c 65 20 53 45 4c 45 43 54 5d 20 74 68 61 74  ple SELECT] that
2d2a0 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a 20 20 20   consists of.   
2d2b0 20 6a 75 73 74 20 61 20 5b 56 41 4c 55 45 53 5d   just a [VALUES]
2d2c0 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62   clause cannot b
2d2d0 65 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20  e preceded by a 
2d2e0 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 2e 0a 3c  [WITH] clause..<
2d2f0 6c 69 3e 54 68 65 20 5b 57 49 54 48 5d 20 63 6c  li>The [WITH] cl
2d300 61 75 73 65 20 6d 75 73 74 20 6f 63 63 75 72 20  ause must occur 
2d310 6f 6e 20 74 68 65 20 66 69 72 73 74 20 53 45 4c  on the first SEL
2d320 45 43 54 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75  ECT of a [compou
2d330 6e 64 20 53 45 4c 45 43 54 5d 2e 0a 20 20 20 20  nd SELECT]..    
2d340 49 74 20 63 61 6e 6e 6f 74 20 66 6f 6c 6c 6f 77  It cannot follow
2d350 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65   a [compound-ope
2d360 72 61 74 6f 72 5d 2e 0a 3c 2f 75 6c 3e 0a 54 68  rator]..</ul>.Th
2d370 65 73 65 20 61 6e 64 20 6f 74 68 65 72 20 73 69  ese and other si
2d380 6d 69 6c 61 72 20 73 79 6e 74 61 78 20 72 65 73  milar syntax res
2d390 74 72 69 63 74 69 6f 6e 73 20 61 72 65 20 64 65  trictions are de
2d3a0 73 63 72 69 62 65 64 20 69 6e 20 74 68 65 20 74  scribed in the t
2d3b0 65 78 74 2e 0a 0a 3c 70 3e 54 68 65 20 53 45 4c  ext...<p>The SEL
2d3c0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
2d3d0 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d 70 6c 69   the most compli
2d3e0 63 61 74 65 64 20 63 6f 6d 6d 61 6e 64 20 69 6e  cated command in
2d3f0 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   the SQL languag
2d400 65 2e 0a 54 6f 20 6d 61 6b 65 20 74 68 65 20 64  e..To make the d
2d410 65 73 63 72 69 70 74 69 6f 6e 20 65 61 73 69 65  escription easie
2d420 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c 20 73 6f 6d  r to follow, som
2d430 65 20 6f 66 20 74 68 65 20 70 61 73 73 61 67 65  e of the passage
2d440 73 20 62 65 6c 6f 77 20 64 65 73 63 72 69 62 65  s below describe
2d450 0a 74 68 65 20 77 61 79 20 74 68 65 20 64 61 74  .the way the dat
2d460 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 61 20  a returned by a 
2d470 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2d480 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61   is determined a
2d490 73 20 61 20 73 65 72 69 65 73 20 6f 66 0a 73 74  s a series of.st
2d4a0 65 70 73 2e 20 49 74 20 69 73 20 69 6d 70 6f 72  eps. It is impor
2d4b0 74 61 6e 74 20 74 6f 20 6b 65 65 70 20 69 6e 20  tant to keep in 
2d4c0 6d 69 6e 64 20 74 68 61 74 20 74 68 69 73 20 69  mind that this i
2d4d0 73 20 70 75 72 65 6c 79 20 69 6c 6c 75 73 74 72  s purely illustr
2d4e0 61 74 69 76 65 20 2d 0a 69 6e 20 70 72 61 63 74  ative -.in pract
2d4f0 69 63 65 20 6e 65 69 74 68 65 72 20 53 51 4c 69  ice neither SQLi
2d500 74 65 20 6e 6f 72 20 61 6e 79 20 6f 74 68 65 72  te nor any other
2d510 20 53 51 4c 20 65 6e 67 69 6e 65 20 69 73 20 72   SQL engine is r
2d520 65 71 75 69 72 65 64 20 74 6f 20 66 6f 6c 6c 6f  equired to follo
2d530 77 20 0a 74 68 69 73 20 6f 72 20 61 6e 79 20 6f  w .this or any o
2d540 74 68 65 72 20 73 70 65 63 69 66 69 63 20 70 72  ther specific pr
2d550 6f 63 65 73 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ocess...<tcl>hd_
2d560 66 72 61 67 6d 65 6e 74 20 73 69 6d 70 6c 65 73  fragment simples
2d570 65 6c 65 63 74 20 7b 73 69 6d 70 6c 65 20 53 45  elect {simple SE
2d580 4c 45 43 54 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  LECT}</tcl>.<h3>
2d590 53 69 6d 70 6c 65 20 53 65 6c 65 63 74 20 50 72  Simple Select Pr
2d5a0 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e 0a 0a 3c  ocessing</h3>..<
2d5b0 70 3e 54 68 65 20 63 6f 72 65 20 6f 66 20 61 20  p>The core of a 
2d5c0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2d5d0 20 69 73 20 61 20 22 73 69 6d 70 6c 65 20 53 45   is a "simple SE
2d5e0 4c 45 43 54 22 20 73 68 6f 77 6e 20 62 79 20 74  LECT" shown by t
2d5f0 68 65 0a 5b 73 65 6c 65 63 74 2d 63 6f 72 65 5d  he.[select-core]
2d600 20 61 6e 64 20 5b 73 69 6d 70 6c 65 2d 73 65 6c   and [simple-sel
2d610 65 63 74 2d 73 74 6d 74 5d 20 73 79 6e 74 61 78  ect-stmt] syntax
2d620 20 64 69 61 67 72 61 6d 73 20 62 65 6c 6f 77 2e   diagrams below.
2d630 20 20 0a 49 6e 20 70 72 61 63 74 69 63 65 2c 20    .In practice, 
2d640 6d 6f 73 74 20 53 45 4c 45 43 54 20 73 74 61 74  most SELECT stat
2d650 65 6d 65 6e 74 73 20 61 72 65 20 73 69 6d 70 6c  ements are simpl
2d660 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2d670 6e 74 73 2e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75  nts...<tcl>.Recu
2d680 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
2d690 61 6d 20 73 69 6d 70 6c 65 2d 73 65 6c 65 63 74  am simple-select
2d6a0 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d 63 6f 72  -stmt select-cor
2d6b0 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 47 65 6e  e.</tcl>..<p>Gen
2d6c0 65 72 61 74 69 6e 67 20 74 68 65 20 72 65 73 75  erating the resu
2d6d0 6c 74 73 20 6f 66 20 61 20 73 69 6d 70 6c 65 20  lts of a simple 
2d6e0 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74  SELECT.statement
2d6f0 20 69 73 20 70 72 65 73 65 6e 74 65 64 20 61 73   is presented as
2d700 20 61 20 66 6f 75 72 20 73 74 65 70 20 70 72 6f   a four step pro
2d710 63 65 73 73 20 69 6e 20 74 68 65 20 64 65 73 63  cess in the desc
2d720 72 69 70 74 69 6f 6e 20 62 65 6c 6f 77 3a 0a 0a  ription below:..
2d730 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  <ol>.  <li> <p>[
2d740 46 52 4f 4d 20 63 6c 61 75 73 65 5d 20 70 72 6f  FROM clause] pro
2d750 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70  cessing: The inp
2d760 75 74 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ut data for the 
2d770 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73  simple SELECT is
2d780 0a 20 20 20 20 20 20 20 64 65 74 65 72 6d 69 6e  .       determin
2d790 65 64 2e 20 54 68 65 20 69 6e 70 75 74 20 64 61  ed. The input da
2d7a0 74 61 20 69 73 20 65 69 74 68 65 72 20 69 6d 70  ta is either imp
2d7b0 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65  licitly a single
2d7c0 20 72 6f 77 20 77 69 74 68 20 30 0a 20 20 20 20   row with 0.    
2d7d0 20 20 20 63 6f 6c 75 6d 6e 73 20 28 69 66 20 74     columns (if t
2d7e0 68 65 72 65 20 69 73 20 6e 6f 20 46 52 4f 4d 20  here is no FROM 
2d7f0 63 6c 61 75 73 65 29 20 6f 72 20 69 73 20 64 65  clause) or is de
2d800 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
2d810 46 52 4f 4d 0a 20 20 20 20 20 20 20 63 6c 61 75  FROM.       clau
2d820 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 57  se..  <li> <p>[W
2d830 48 45 52 45 20 63 6c 61 75 73 65 5d 20 70 72 6f  HERE clause] pro
2d840 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70  cessing: The inp
2d850 75 74 20 64 61 74 61 20 69 73 20 66 69 6c 74 65  ut data is filte
2d860 72 65 64 20 75 73 69 6e 67 20 74 68 65 20 57 48  red using the WH
2d870 45 52 45 0a 20 20 20 20 20 20 20 63 6c 61 75 73  ERE.       claus
2d880 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 0a  e expression.  .
2d890 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f 55 50    <li> <p>[GROUP
2d8a0 20 42 59 7c 47 52 4f 55 50 20 42 59 2c 20 48 41   BY|GROUP BY, HA
2d8b0 56 49 4e 47 20 61 6e 64 20 72 65 73 75 6c 74 2d  VING and result-
2d8c0 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f  column expressio
2d8d0 6e 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 0a  n] processing: .
2d8e0 20 20 20 20 20 20 20 54 68 65 20 73 65 74 20 6f         The set o
2d8f0 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 69 73  f result rows is
2d900 20 63 6f 6d 70 75 74 65 64 20 62 79 20 61 67 67   computed by agg
2d910 72 65 67 61 74 69 6e 67 20 74 68 65 20 64 61 74  regating the dat
2d920 61 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a 20  a according to. 
2d930 20 20 20 20 20 20 61 6e 79 20 47 52 4f 55 50 20        any GROUP 
2d940 42 59 20 63 6c 61 75 73 65 20 61 6e 64 20 63 61  BY clause and ca
2d950 6c 63 75 6c 61 74 69 6e 67 20 74 68 65 20 72 65  lculating the re
2d960 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65 73 73  sult-set express
2d970 69 6f 6e 73 20 66 6f 72 20 74 68 65 0a 20 20 20  ions for the.   
2d980 20 20 20 20 72 6f 77 73 20 6f 66 20 74 68 65 20      rows of the 
2d990 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64  filtered input d
2d9a0 61 74 61 73 65 74 2e 20 20 0a 20 20 3c 6c 69 3e  ataset.  .  <li>
2d9b0 20 3c 70 3e 5b 44 49 53 54 49 4e 43 54 7c 44 49   <p>[DISTINCT|DI
2d9c0 53 54 49 4e 43 54 2f 41 4c 4c 20 6b 65 79 77 6f  STINCT/ALL keywo
2d9d0 72 64 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20  rd] processing: 
2d9e0 49 66 20 74 68 65 20 71 75 65 72 79 20 69 73 20  If the query is 
2d9f0 61 20 22 53 45 4c 45 43 54 0a 20 20 20 20 20 20  a "SELECT.      
2da00 20 44 49 53 54 49 4e 43 54 22 20 71 75 65 72 79   DISTINCT" query
2da10 2c 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  , duplicate rows
2da20 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f   are removed fro
2da30 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73  m the set of res
2da40 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c 3e 0a  ult rows..</ol>.
2da50 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 74 77  .<p>There are tw
2da60 6f 20 74 79 70 65 73 20 6f 66 20 73 69 6d 70 6c  o types of simpl
2da70 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2da80 6e 74 20 2d 20 61 67 67 72 65 67 61 74 65 20 61  nt - aggregate a
2da90 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72 65 67 61 74  nd .non-aggregat
2daa0 65 20 71 75 65 72 69 65 73 2e 20 5e 41 20 73 69  e queries. ^A si
2dab0 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
2dac0 65 6d 65 6e 74 20 69 73 20 61 6e 20 61 67 67 72  ement is an aggr
2dad0 65 67 61 74 65 20 71 75 65 72 79 20 69 66 0a 69  egate query if.i
2dae0 74 20 63 6f 6e 74 61 69 6e 73 20 65 69 74 68 65  t contains eithe
2daf0 72 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61  r a GROUP BY cla
2db00 75 73 65 20 6f 72 20 6f 6e 65 20 6f 72 20 6d 6f  use or one or mo
2db10 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
2db20 63 74 69 6f 6e 73 0a 69 6e 20 74 68 65 20 72 65  ctions.in the re
2db30 73 75 6c 74 2d 73 65 74 2e 20 5e 4f 74 68 65 72  sult-set. ^Other
2db40 77 69 73 65 2c 20 69 66 20 61 20 73 69 6d 70 6c  wise, if a simpl
2db50 65 20 53 45 4c 45 43 54 20 63 6f 6e 74 61 69 6e  e SELECT contain
2db60 73 20 6e 6f 20 61 67 67 72 65 67 61 74 65 0a 66  s no aggregate.f
2db70 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52  unctions or a GR
2db80 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2c 20 69  OUP BY clause, i
2db90 74 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65  t is a non-aggre
2dba0 67 61 74 65 20 71 75 65 72 79 2e 0a 0a 3c 70 3e  gate query...<p>
2dbb0 3c 62 3e 31 2e 20 44 65 74 65 72 6d 69 6e 61 74  <b>1. Determinat
2dbc0 69 6f 6e 20 6f 66 20 69 6e 70 75 74 20 64 61 74  ion of input dat
2dbd0 61 20 28 46 52 4f 4d 20 63 6c 61 75 73 65 20 70  a (FROM clause p
2dbe0 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a  rocessing).</b>.
2dbf0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2dc00 20 66 72 6f 6d 63 6c 61 75 73 65 3c 2f 74 63 6c   fromclause</tcl
2dc10 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72  >.<tcl>hd_keywor
2dc20 64 73 20 7b 46 52 4f 4d 20 63 6c 61 75 73 65 7d  ds {FROM clause}
2dc30 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 69  </tcl>..<p>The i
2dc40 6e 70 75 74 20 64 61 74 61 20 75 73 65 64 20 62  nput data used b
2dc50 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  y a simple SELEC
2dc60 54 20 71 75 65 72 79 20 69 73 20 61 20 73 65 74  T query is a set
2dc70 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77   of <i>N</i> row
2dc80 73 20 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f 69 3e  s .each <i>M</i>
2dc90 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 2e 0a 0a   columns wide...
2dca0 3c 70 3e 5e 28 49 66 20 74 68 65 20 46 52 4f 4d  <p>^(If the FROM
2dcb0 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74   clause is omitt
2dcc0 65 64 20 66 72 6f 6d 20 61 20 73 69 6d 70 6c 65  ed from a simple
2dcd0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2dce0 74 2c 20 74 68 65 6e 20 74 68 65 20 0a 69 6e 70  t, then the .inp
2dcf0 75 74 20 64 61 74 61 20 69 73 20 69 6d 70 6c 69  ut data is impli
2dd00 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65 20 72  citly a single r
2dd10 6f 77 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e 73 20  ow zero columns 
2dd20 77 69 64 65 29 5e 20 28 69 2e 65 2e 20 3c 69 3e  wide)^ (i.e. <i>
2dd30 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69 3e 4d  N</i>=1 and.<i>M
2dd40 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49 66 20  </i>=0)...<p>If 
2dd50 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  a FROM clause is
2dd60 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20   specified, the 
2dd70 64 61 74 61 20 6f 6e 20 77 68 69 63 68 20 61 20  data on which a 
2dd80 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 71 75  simple SELECT qu
2dd90 65 72 79 0a 6f 70 65 72 61 74 65 73 20 63 6f 6d  ery.operates com
2dda0 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6e 65 20  es from the one 
2ddb0 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 6f  or more tables o
2ddc0 72 20 73 75 62 71 75 65 72 69 65 73 20 28 53 45  r subqueries (SE
2ddd0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 0a  LECT statements.
2dde0 69 6e 20 70 61 72 65 6e 74 68 65 73 69 73 29 20  in parenthesis) 
2ddf0 73 70 65 63 69 66 69 65 64 20 66 6f 6c 6c 6f 77  specified follow
2de00 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b 65 79  ing the FROM key
2de10 77 6f 72 64 2e 20 5e 41 20 73 75 62 71 75 65 72  word. ^A subquer
2de20 79 20 73 70 65 63 69 66 69 65 64 0a 69 6e 20 74  y specified.in t
2de30 68 65 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65  he <yyterm>table
2de40 2d 6f 72 2d 73 75 62 71 75 65 72 79 3c 2f 79 79  -or-subquery</yy
2de50 74 65 72 6d 3e 20 66 6f 6c 6c 6f 77 69 6e 67 20  term> following 
2de60 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
2de70 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53 45 4c  in a .simple SEL
2de80 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
2de90 0a 68 61 6e 64 6c 65 64 20 61 73 20 69 66 20 69  .handled as if i
2dea0 74 20 77 61 73 20 61 20 74 61 62 6c 65 20 63 6f  t was a table co
2deb0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64 61 74  ntaining the dat
2dec0 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 65 78  a returned by ex
2ded0 65 63 75 74 69 6e 67 20 74 68 65 0a 73 75 62 71  ecuting the.subq
2dee0 75 65 72 79 20 73 74 61 74 65 6d 65 6e 74 2e 20  uery statement. 
2def0 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20  ^Each column of 
2df00 74 68 65 20 73 75 62 71 75 65 72 79 20 68 61 73  the subquery has
2df10 20 74 68 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e 7c   the.[collation|
2df20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
2df30 63 65 5d 20 61 6e 64 20 5b 61 66 66 69 6e 69 74  ce] and [affinit
2df40 79 5d 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  y] of the corres
2df50 70 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69  ponding expressi
2df60 6f 6e 0a 69 6e 20 74 68 65 20 73 75 62 71 75 65  on.in the subque
2df70 72 79 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  ry statement...<
2df80 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20 6f  p>^If there is o
2df90 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 74 61 62  nly a single tab
2dfa0 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
2dfb0 6e 20 74 68 65 20 46 52 4f 4d 0a 63 6c 61 75 73  n the FROM.claus
2dfc0 65 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 70 75  e, then the inpu
2dfd0 74 20 64 61 74 61 20 75 73 65 64 20 62 79 20 74  t data used by t
2dfe0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
2dff0 65 6e 74 20 69 73 20 74 68 65 20 63 6f 6e 74 65  ent is the conte
2e000 6e 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 64  nts of the.named
2e010 20 74 61 62 6c 65 2e 20 5e 49 66 20 74 68 65 72   table. ^If ther
2e020 65 20 69 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f  e is more than o
2e030 6e 65 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ne table or subq
2e040 75 65 72 79 20 69 6e 20 46 52 4f 4d 20 63 6c 61  uery in FROM cla
2e050 75 73 65 0a 74 68 65 6e 20 74 68 65 20 63 6f 6e  use.then the con
2e060 74 65 6e 74 73 20 6f 66 20 61 6c 6c 20 74 61 62  tents of all tab
2e070 6c 65 73 20 61 6e 64 2f 6f 72 20 73 75 62 71 75  les and/or subqu
2e080 65 72 69 65 73 0a 61 72 65 20 6a 6f 69 6e 65 64  eries.are joined
2e090 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 64   into a single d
2e0a0 61 74 61 73 65 74 20 66 6f 72 20 74 68 65 20 73  ataset for the s
2e0b0 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
2e0c0 74 65 6d 65 6e 74 20 74 6f 20 6f 70 65 72 61 74  tement to operat
2e0d0 65 20 6f 6e 2e 0a 45 78 61 63 74 6c 79 20 68 6f  e on..Exactly ho
2e0e0 77 20 74 68 65 20 64 61 74 61 20 69 73 20 63 6f  w the data is co
2e0f0 6d 62 69 6e 65 64 20 64 65 70 65 6e 64 73 20 6f  mbined depends o
2e100 6e 20 74 68 65 20 73 70 65 63 69 66 69 63 20 5b  n the specific [
2e110 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 5d 20 61  join-operator] a
2e120 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61  nd.[join-constra
2e130 69 6e 74 5d 20 75 73 65 64 20 74 6f 20 63 6f 6e  int] used to con
2e140 6e 65 63 74 20 74 68 65 20 74 61 62 6c 65 73 20  nect the tables 
2e150 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 74 6f  or subqueries to
2e160 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c 20  gether...<p>All 
2e170 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69 74 65 20  joins in SQLite 
2e180 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65  are based on the
2e190 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
2e1a0 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61  ct of the left a
2e1b0 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 64 61  nd.right-hand da
2e1c0 74 61 73 65 74 73 2e 20 5e 54 68 65 20 63 6f 6c  tasets. ^The col
2e1d0 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 61 72 74  umns of the cart
2e1e0 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64 61  esian product da
2e1f0 74 61 73 65 74 20 61 72 65 2c 20 69 6e 20 0a 6f  taset are, in .o
2e200 72 64 65 72 2c 20 61 6c 6c 20 74 68 65 20 63 6f  rder, all the co
2e210 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65 66  lumns of the lef
2e220 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20 66  t-hand dataset f
2e230 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20 74  ollowed by all t
2e240 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68  he columns.of th
2e250 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  e right-hand dat
2e260 61 73 65 74 2e 20 5e 54 68 65 72 65 20 69 73 20  aset. ^There is 
2e270 61 20 72 6f 77 20 69 6e 20 74 68 65 20 63 61 72  a row in the car
2e280 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64  tesian product d
2e290 61 74 61 73 65 74 0a 66 6f 72 6d 65 64 20 62 79  ataset.formed by
2e2a0 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61 63 68 20   combining each 
2e2b0 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69  unique combinati
2e2c0 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66 72 6f 6d  on of a row from
2e2d0 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 0a   the left-hand .
2e2e0 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 64  and right-hand d
2e2f0 61 74 61 73 65 74 73 2e 20 5e 28 49 6e 20 6f 74  atasets. ^(In ot
2e300 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
2e310 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61  e left-hand data
2e320 73 65 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a  set consists of.
2e330 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  <i>N<sub><small>
2e340 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  left</small></su
2e350 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20 0a  b></i> rows of .
2e360 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  <i>M<sub><small>
2e370 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  left</small></su
2e380 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20  b></i> columns, 
2e390 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d 68 61  and the right-ha
2e3a0 6e 64 20 64 61 74 61 73 65 74 20 6f 66 0a 3c 69  nd dataset of.<i
2e3b0 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69  >N<sub><small>ri
2e3c0 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62  ght</small></sub
2e3d0 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 0a 3c 69  ></i> rows of.<i
2e3e0 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69  >M<sub><small>ri
2e3f0 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62  ght</small></sub
2e400 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20 74  ></i> columns, t
2e410 68 65 6e 20 74 68 65 20 63 61 72 74 65 73 69 61  hen the cartesia
2e420 6e 20 70 72 6f 64 75 63 74 20 69 73 20 61 0a 64  n product is a.d
2e430 61 74 61 73 65 74 20 6f 66 20 0a 3c 69 3e 4e 3c  ataset of .<i>N<
2e440 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c  sub><small>left<
2e450 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 26 74 69  /small></sub>&ti
2e460 6d 65 73 3b 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c  mes;N<sub><small
2e470 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f  >right</small></
2e480 73 75 62 3e 3c 2f 69 3e 0a 72 6f 77 73 2c 20 65  sub></i>.rows, e
2e490 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 0a  ach containing .
2e4a0 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  <i>M<sub><small>
2e4b0 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  left</small></su
2e4c0 62 3e 2b 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  b>+M<sub><small>
2e4d0 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  right</small></s
2e4e0 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2e  ub></i> columns.
2e4f0 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6a  )^..<p>^If the j
2e500 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73 20  oin-operator is 
2e510 22 43 52 4f 53 53 20 4a 4f 49 4e 22 2c 20 22 49  "CROSS JOIN", "I
2e520 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49  NNER JOIN", "JOI
2e530 4e 22 20 6f 72 20 61 20 63 6f 6d 6d 61 0a 28 22  N" or a comma.("
2e540 2c 22 29 20 61 6e 64 20 74 68 65 72 65 20 69 73  ,") and there is
2e550 20 6e 6f 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20   no ON or USING 
2e560 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
2e570 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6a   result of the j
2e580 6f 69 6e 20 69 73 0a 73 69 6d 70 6c 79 20 74 68  oin is.simply th
2e590 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
2e5a0 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20  uct of the left 
2e5b0 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 64  and right-hand d
2e5c0 61 74 61 73 65 74 73 2e 20 0a 49 66 20 6a 6f 69  atasets. .If joi
2e5d0 6e 2d 6f 70 65 72 61 74 6f 72 20 64 6f 65 73 20  n-operator does 
2e5e0 68 61 76 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47  have ON or USING
2e5f0 20 63 6c 61 75 73 65 73 2c 20 74 68 6f 73 65 20   clauses, those 
2e600 61 72 65 20 68 61 6e 64 6c 65 64 20 61 63 63 6f  are handled acco
2e610 72 64 69 6e 67 20 74 6f 0a 74 68 65 20 66 6f 6c  rding to.the fol
2e620 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20 70 6f  lowing bullet po
2e630 69 6e 74 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  ints:..<ul>.  <l
2e640 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 72 65  i> <p>^(If there
2e650 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61 75 73 65   is an ON clause
2e660 20 74 68 65 6e 20 74 68 65 20 4f 4e 20 65 78 70   then the ON exp
2e670 72 65 73 73 69 6f 6e 20 69 73 0a 20 20 20 20 20  ression is.     
2e680 20 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20    evaluated for 
2e690 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20  each row of the 
2e6a0 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
2e6b0 74 20 61 73 20 61 20 0a 20 20 20 20 20 20 20 5b  t as a .       [
2e6c0 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
2e6d0 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66  on]. Only rows f
2e6e0 6f 72 20 77 68 69 63 68 20 74 68 65 20 65 78 70  or which the exp
2e6f0 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
2e700 73 20 74 6f 20 0a 20 20 20 20 20 20 20 74 72 75  s to .       tru
2e710 65 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 66  e are included f
2e720 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74 2e  rom the dataset.
2e730 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 49  )^..  <li> <p>^I
2e740 66 20 74 68 65 72 65 20 69 73 20 61 20 55 53 49  f there is a USI
2e750 4e 47 20 63 6c 61 75 73 65 0a 20 20 20 20 20 20  NG clause.      
2e760 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68   then each of th
2e770 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 73  e column names s
2e780 70 65 63 69 66 69 65 64 20 6d 75 73 74 20 65 78  pecified must ex
2e790 69 73 74 20 69 6e 20 74 68 65 20 64 61 74 61 73  ist in the datas
2e7a0 65 74 73 20 74 6f 20 0a 20 20 20 20 20 20 20 62  ets to .       b
2e7b0 6f 74 68 20 74 68 65 20 6c 65 66 74 20 61 6e 64  oth the left and
2e7c0 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 6a 6f   right of the jo
2e7d0 69 6e 2d 6f 70 65 72 61 74 6f 72 2e 20 5e 28 46  in-operator. ^(F
2e7e0 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66 20  or each pair of 
2e7f0 6e 61 6d 65 64 0a 20 20 20 20 20 20 20 63 6f 6c  named.       col
2e800 75 6d 6e 73 2c 20 74 68 65 20 65 78 70 72 65 73  umns, the expres
2e810 73 69 6f 6e 20 22 6c 68 73 2e 58 20 3d 20 72 68  sion "lhs.X = rh
2e820 73 2e 58 22 20 69 73 20 65 76 61 6c 75 61 74 65  s.X" is evaluate
2e830 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
2e840 66 0a 20 20 20 20 20 20 20 74 68 65 20 63 61 72  f.       the car
2e850 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 61  tesian product a
2e860 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70  s a [boolean exp
2e870 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72  ression]. Only r
2e880 6f 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20  ows for which.  
2e890 20 20 20 20 20 61 6c 6c 20 73 75 63 68 20 65 78       all such ex
2e8a0 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61  pressions evalua
2e8b0 74 65 73 20 74 6f 20 74 72 75 65 20 61 72 65 20  tes to true are 
2e8c0 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68  included from th
2e8d0 65 0a 20 20 20 20 20 20 20 72 65 73 75 6c 74 20  e.       result 
2e8e0 73 65 74 2e 29 5e 20 5e 57 68 65 6e 20 63 6f 6d  set.)^ ^When com
2e8f0 70 61 72 69 6e 67 20 76 61 6c 75 65 73 20 61 73  paring values as
2e900 20 61 20 72 65 73 75 6c 74 20 6f 66 20 61 20 55   a result of a U
2e910 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65  SING clause, the
2e920 0a 20 20 20 20 20 20 20 6e 6f 72 6d 61 6c 20 72  .       normal r
2e930 75 6c 65 73 20 66 6f 72 20 68 61 6e 64 6c 69 6e  ules for handlin
2e940 67 20 61 66 66 69 6e 69 74 69 65 73 2c 20 63 6f  g affinities, co
2e950 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2e960 73 20 61 6e 64 20 4e 55 4c 4c 0a 20 20 20 20 20  s and NULL.     
2e970 20 20 76 61 6c 75 65 73 20 69 6e 20 63 6f 6d 70    values in comp
2e980 61 72 69 73 6f 6e 73 20 61 70 70 6c 79 2e 20 5e  arisons apply. ^
2e990 54 68 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20  The column from 
2e9a0 74 68 65 20 64 61 74 61 73 65 74 20 6f 6e 20 74  the dataset on t
2e9b0 68 65 0a 20 20 20 20 20 20 20 6c 65 66 74 2d 68  he.       left-h
2e9c0 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65 20  and side of the 
2e9d0 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73  join-operator is
2e9e0 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62   considered to b
2e9f0 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61  e on the left-ha
2ea00 6e 64 0a 20 20 20 20 20 20 20 73 69 64 65 20 6f  nd.       side o
2ea10 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
2ea20 20 6f 70 65 72 61 74 6f 72 20 28 3d 29 20 66 6f   operator (=) fo
2ea30 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
2ea40 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 20  f collation .   
2ea50 20 20 20 20 73 65 71 75 65 6e 63 65 20 61 6e 64      sequence and
2ea60 20 61 66 66 69 6e 69 74 79 20 70 72 65 63 65 64   affinity preced
2ea70 65 6e 63 65 2e 0a 0a 20 20 20 20 20 20 20 3c 70  ence...       <p
2ea80 3e 5e 46 6f 72 20 65 61 63 68 20 70 61 69 72 20  >^For each pair 
2ea90 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74  of columns ident
2eaa0 69 66 69 65 64 20 62 79 20 61 20 55 53 49 4e 47  ified by a USING
2eab0 20 63 6c 61 75 73 65 2c 20 74 68 65 20 63 6f 6c   clause, the col
2eac0 75 6d 6e 0a 20 20 20 20 20 20 20 66 72 6f 6d 20  umn.       from 
2ead0 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64  the right-hand d
2eae0 61 74 61 73 65 74 20 69 73 20 6f 6d 69 74 74 65  ataset is omitte
2eaf0 64 20 66 72 6f 6d 20 74 68 65 20 6a 6f 69 6e 65  d from the joine
2eb00 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68 69 73  d dataset. ^This
2eb10 20 0a 20 20 20 20 20 20 20 69 73 20 74 68 65 20   .       is the 
2eb20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20  only difference 
2eb30 62 65 74 77 65 65 6e 20 61 20 55 53 49 4e 47 20  between a USING 
2eb40 63 6c 61 75 73 65 20 61 6e 64 20 69 74 73 20 65  clause and its e
2eb50 71 75 69 76 61 6c 65 6e 74 20 4f 4e 0a 20 20 20  quivalent ON.   
2eb60 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a      constraint..
2eb70 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20  .  <li> <p>^(If 
2eb80 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77  the NATURAL keyw
2eb90 6f 72 64 20 69 73 20 69 6e 20 74 68 65 20 6a 6f  ord is in the jo
2eba0 69 6e 2d 6f 70 65 72 61 74 6f 72 20 74 68 65 6e  in-operator then
2ebb0 20 61 6e 0a 20 20 20 20 20 20 20 69 6d 70 6c 69   an.       impli
2ebc0 63 69 74 20 55 53 49 4e 47 20 63 6c 61 75 73 65  cit USING clause
2ebd0 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65   is added to the
2ebe0 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74   join-constraint
2ebf0 73 2e 20 54 68 65 20 69 6d 70 6c 69 63 69 74 0a  s. The implicit.
2ec00 20 20 20 20 20 20 20 55 53 49 4e 47 20 63 6c 61         USING cla
2ec10 75 73 65 20 63 6f 6e 74 61 69 6e 73 20 65 61 63  use contains eac
2ec20 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  h of the column 
2ec30 6e 61 6d 65 73 20 74 68 61 74 20 61 70 70 65 61  names that appea
2ec40 72 20 69 6e 20 62 6f 74 68 0a 20 20 20 20 20 20  r in both.      
2ec50 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
2ec60 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 64  ght-hand input d
2ec70 61 74 61 73 65 74 73 2e 29 5e 20 5e 49 66 20 74  atasets.)^ ^If t
2ec80 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
2ec90 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 69 6e  t-hand.       in
2eca0 70 75 74 20 64 61 74 61 73 65 74 73 20 66 65 61  put datasets fea
2ecb0 74 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20 63  ture no common c
2ecc0 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 74 68 65  olumn names, the
2ecd0 6e 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65  n the NATURAL ke
2ece0 79 77 6f 72 64 0a 20 20 20 20 20 20 20 68 61 73  yword.       has
2ecf0 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68   no effect on th
2ed00 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
2ed10 20 6a 6f 69 6e 2e 20 5e 41 20 55 53 49 4e 47 20   join. ^A USING 
2ed20 6f 72 20 4f 4e 20 63 6c 61 75 73 65 20 6d 61 79  or ON clause may
2ed30 0a 20 20 20 20 20 20 20 6e 6f 74 20 62 65 20 61  .       not be a
2ed40 64 64 65 64 20 74 6f 20 61 20 6a 6f 69 6e 20 74  dded to a join t
2ed50 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
2ed60 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72  e NATURAL keywor
2ed70 64 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28  d...  <li> <p>^(
2ed80 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72  If the join-oper
2ed90 61 74 6f 72 20 69 73 20 61 20 22 4c 45 46 54 20  ator is a "LEFT 
2eda0 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46 54 20 4f  JOIN" or "LEFT O
2edb0 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65 6e  UTER JOIN", then
2edc0 0a 20 20 20 20 20 20 20 61 66 74 65 72 0a 20 20  .       after.  
2edd0 20 20 20 20 20 74 68 65 20 4f 4e 20 6f 72 20 55       the ON or U
2ede0 53 49 4e 47 20 66 69 6c 74 65 72 69 6e 67 20 63  SING filtering c
2edf0 6c 61 75 73 65 73 20 68 61 76 65 20 62 65 65 6e  lauses have been
2ee00 20 61 70 70 6c 69 65 64 2c 20 61 6e 20 65 78 74   applied, an ext
2ee10 72 61 20 72 6f 77 20 69 73 20 0a 20 20 20 20 20  ra row is .     
2ee20 20 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6f    added to the o
2ee30 75 74 70 75 74 20 66 6f 72 20 65 61 63 68 20 72  utput for each r
2ee40 6f 77 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  ow in the origin
2ee50 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20 69 6e 70  al left-hand inp
2ee60 75 74 20 0a 20 20 20 20 20 20 20 64 61 74 61 73  ut .       datas
2ee70 65 74 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  et that correspo
2ee80 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77 73 20 61  nds to no rows a
2ee90 74 20 61 6c 6c 20 69 6e 20 74 68 65 20 63 6f 6d  t all in the com
2eea0 70 6f 73 69 74 65 0a 20 20 20 20 20 20 20 64 61  posite.       da
2eeb0 74 61 73 65 74 20 28 69 66 20 61 6e 79 29 2e 29  taset (if any).)
2eec0 5e 20 5e 54 68 65 20 61 64 64 65 64 20 72 6f 77  ^ ^The added row
2eed0 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20 76  s contain NULL v
2eee0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6c  alues in the col
2eef0 75 6d 6e 73 0a 20 20 20 20 20 20 20 74 68 61 74  umns.       that
2ef00 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20   would normally 
2ef10 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73 20 63  contain values c
2ef20 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 72  opied from the r
2ef30 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 0a  ight-hand input.
2ef40 20 20 20 20 20 20 20 64 61 74 61 73 65 74 2e 20         dataset. 
2ef50 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 57 68   .</ul>..<p>^(Wh
2ef60 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20 74 77 6f  en more than two
2ef70 20 74 61 62 6c 65 73 20 61 72 65 20 6a 6f 69 6e   tables are join
2ef80 65 64 20 74 6f 67 65 74 68 65 72 20 61 73 20 70  ed together as p
2ef90 61 72 74 20 6f 66 20 61 20 46 52 4f 4d 20 63 6c  art of a FROM cl
2efa0 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69 6e 20 6f  ause,.the join o
2efb0 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70 72  perations are pr
2efc0 6f 63 65 73 73 65 64 20 69 6e 20 6f 72 64 65 72  ocessed in order
2efd0 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
2efe0 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 0a 77  ght. In other .w
2eff0 6f 72 64 73 2c 20 74 68 65 20 46 52 4f 4d 20 63  ords, the FROM c
2f000 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e 2d 6f 70  lause (A join-op
2f010 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43  -1 B join-op-2 C
2f020 29 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 73  ) is computed as
2f030 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20   .((A join-op-1 
2f040 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 2e  B) join-op-2 C).
2f050 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
2f060 6d 65 6e 74 20 63 72 6f 73 73 6a 6f 69 6e 20 7b  ment crossjoin {
2f070 74 72 65 61 74 73 20 74 68 65 20 43 52 4f 53 53  treats the CROSS
2f080 20 4a 4f 49 4e 20 6f 70 65 72 61 74 6f 72 20 73   JOIN operator s
2f090 70 65 63 69 61 6c 6c 79 7d 3c 2f 74 63 6c 3e 0a  pecially}</tcl>.
2f0a0 3c 70 3e 3c 62 3e 53 69 64 65 20 6e 6f 74 65 3a  <p><b>Side note:
2f0b0 20 53 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e   Special handlin
2f0c0 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 2e  g of CROSS JOIN.
2f0d0 3c 2f 62 3e 0a 5e 54 68 65 72 65 20 69 73 20 6e  </b>.^There is n
2f0e0 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  o difference bet
2f0f0 77 65 65 6e 20 74 68 65 20 22 49 4e 4e 45 52 20  ween the "INNER 
2f100 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e  JOIN", "JOIN" an
2f110 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65 72 61  d "," join.opera
2f120 74 6f 72 73 2e 20 54 68 65 79 20 61 72 65 20 63  tors. They are c
2f130 6f 6d 70 6c 65 74 65 6c 79 20 69 6e 74 65 72 63  ompletely interc
2f140 68 61 6e 67 65 61 62 6c 65 20 69 6e 20 53 51 4c  hangeable in SQL
2f150 69 74 65 2e 0a 5e 28 54 68 65 20 22 43 52 4f 53  ite..^(The "CROS
2f160 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20 6f 70 65  S JOIN" join ope
2f170 72 61 74 6f 72 20 70 72 6f 64 75 63 65 73 20 74  rator produces t
2f180 68 65 20 73 61 6d 65 20 72 65 73 75 6c 74 20 61  he same result a
2f190 73 20 74 68 65 20 0a 22 49 4e 4e 45 52 20 4a 4f  s the ."INNER JO
2f1a0 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20  IN", "JOIN" and 
2f1b0 22 2c 22 20 6f 70 65 72 61 74 6f 72 73 29 5e 2c  "," operators)^,
2f1c0 20 62 75 74 20 69 73 20 0a 5b 43 52 4f 53 53 20   but is .[CROSS 
2f1d0 4a 4f 49 4e 7c 68 61 6e 64 6c 65 64 20 64 69 66  JOIN|handled dif
2f1e0 66 65 72 65 6e 74 6c 79 20 62 79 20 74 68 65 20  ferently by the 
2f1f0 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 5d  query optimizer]
2f200 0a 69 6e 20 74 68 61 74 20 69 74 20 70 72 65 76  .in that it prev
2f210 65 6e 74 73 20 74 68 65 20 71 75 65 72 79 20 6f  ents the query o
2f220 70 74 69 6d 69 7a 65 72 20 66 72 6f 6d 20 72 65  ptimizer from re
2f230 6f 72 64 65 72 69 6e 67 0a 74 68 65 20 74 61 62  ordering.the tab
2f240 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2e  les in the join.
2f250 20 20 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e    An application
2f260 20 70 72 6f 67 72 61 6d 6d 65 72 20 63 61 6e 20   programmer can 
2f270 75 73 65 20 74 68 65 20 43 52 4f 53 53 20 4a 4f  use the CROSS JO
2f280 49 4e 20 0a 6f 70 65 72 61 74 6f 72 20 74 6f 20  IN .operator to 
2f290 64 69 72 65 63 74 6c 79 20 69 6e 66 6c 75 65 6e  directly influen
2f2a0 63 65 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d  ce the algorithm
2f2b0 20 74 68 61 74 20 69 73 20 63 68 6f 73 65 6e 20   that is chosen 
2f2c0 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0a 74 68 65  to implement.the
2f2d0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2f2e0 74 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67 20  t.  Avoid using 
2f2f0 43 52 4f 53 53 20 4a 4f 49 4e 20 65 78 63 65 70  CROSS JOIN excep
2f300 74 20 69 6e 20 73 70 65 63 69 66 69 63 20 73 69  t in specific si
2f310 74 75 61 74 69 6f 6e 73 20 0a 77 68 65 72 65 20  tuations .where 
2f320 6d 61 6e 75 61 6c 20 63 6f 6e 74 72 6f 6c 20 6f  manual control o
2f330 66 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  f the query opti
2f340 6d 69 7a 65 72 20 69 73 20 64 65 73 69 72 65 64  mizer is desired
2f350 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67 0a 43  .  Avoid using.C
2f360 52 4f 53 53 20 4a 4f 49 4e 20 65 61 72 6c 79 20  ROSS JOIN early 
2f370 69 6e 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65  in the developme
2f380 6e 74 20 6f 66 20 61 6e 20 61 70 70 6c 69 63 61  nt of an applica
2f390 74 69 6f 6e 20 61 73 20 64 6f 69 6e 67 20 73 6f  tion as doing so
2f3a0 20 69 73 0a 61 20 3c 61 20 68 72 65 66 3d 22 68   is.a <a href="h
2f3b0 74 74 70 3a 2f 2f 63 32 2e 63 6f 6d 2f 63 67 69  ttp://c2.com/cgi
2f3c0 2f 77 69 6b 69 3f 50 72 65 6d 61 74 75 72 65 4f  /wiki?PrematureO
2f3d0 70 74 69 6d 69 7a 61 74 69 6f 6e 22 3e 70 72 65  ptimization">pre
2f3e0 6d 61 74 75 72 65 0a 6f 70 74 69 6d 69 7a 61 74  mature.optimizat
2f3f0 69 6f 6e 3c 2f 61 3e 2e 20 20 54 68 65 20 73 70  ion</a>.  The sp
2f400 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 6f  ecial handling o
2f410 66 20 43 52 4f 53 53 20 4a 4f 49 4e 20 69 73 20  f CROSS JOIN is 
2f420 61 6e 20 53 51 4c 69 74 65 2d 73 70 65 63 69 66  an SQLite-specif
2f430 69 63 0a 66 65 61 74 75 72 65 20 61 6e 64 20 69  ic.feature and i
2f440 73 20 6e 6f 74 20 61 20 70 61 72 74 20 6f 66 20  s not a part of 
2f450 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 20 20  standard SQL..  
2f460 20 20 20 20 20 0a 0a 3c 74 63 6c 3e 68 64 5f 66       ..<tcl>hd_f
2f470 72 61 67 6d 65 6e 74 20 77 68 65 72 65 63 6c 61  ragment wherecla
2f480 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68  use</tcl>.<tcl>h
2f490 64 5f 6b 65 79 77 6f 72 64 73 20 7b 57 48 45 52  d_keywords {WHER
2f4a0 45 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a  E clause}</tcl>.
2f4b0 3c 70 3e 3c 62 3e 32 2e 20 57 48 45 52 45 20 63  <p><b>2. WHERE c
2f4c0 6c 61 75 73 65 20 66 69 6c 74 65 72 69 6e 67 2e  lause filtering.
2f4d0 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61 20  </b>..<p>^(If a 
2f4e0 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20  WHERE clause is 
2f4f0 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 57  specified, the W
2f500 48 45 52 45 20 65 78 70 72 65 73 73 69 6f 6e 20  HERE expression 
2f510 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72  is evaluated for
2f520 20 0a 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68   .each row in th
2f530 65 20 69 6e 70 75 74 20 64 61 74 61 20 61 73 20  e input data as 
2f540 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  a [boolean expre
2f550 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77  ssion]. Only row
2f560 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a  s for which the.
2f570 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70  WHERE clause exp
2f580 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
2f590 73 20 74 6f 20 74 72 75 65 20 61 72 65 20 69 6e  s to true are in
2f5a0 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20  cluded from the 
2f5b0 64 61 74 61 73 65 74 20 62 65 66 6f 72 65 0a 63  dataset before.c
2f5c0 6f 6e 74 69 6e 75 69 6e 67 2e 29 5e 20 20 52 6f  ontinuing.)^  Ro
2f5d0 77 73 20 61 72 65 20 65 78 63 6c 75 64 65 64 20  ws are excluded 
2f5e0 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20  from the result 
2f5f0 69 66 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  if the WHERE cla
2f600 75 73 65 0a 65 76 61 6c 75 61 74 65 73 20 74 6f  use.evaluates to
2f610 20 65 69 74 68 65 72 20 66 61 6c 73 65 20 6f 72   either false or
2f620 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 46 6f 72 20 61   NULL...<p>For a
2f630 20 4a 4f 49 4e 20 6f 72 20 49 4e 4e 45 52 20 4a   JOIN or INNER J
2f640 4f 49 4e 20 6f 72 20 43 52 4f 53 53 20 4a 4f 49  OIN or CROSS JOI
2f650 4e 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 64  N, there is no d
2f660 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
2f670 6e 20 0a 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  n .a constraint 
2f680 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
2f690 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 61  e WHERE clause a
2f6a0 6e 64 20 6f 6e 65 20 69 6e 20 74 68 65 20 4f 4e  nd one in the ON
2f6b0 20 63 6c 61 75 73 65 2e 20 20 48 6f 77 65 76 65   clause.  Howeve
2f6c0 72 2c 0a 66 6f 72 20 61 20 4c 45 46 54 20 4a 4f  r,.for a LEFT JO
2f6d0 49 4e 20 6f 72 20 4c 45 46 54 20 4f 55 54 45 52  IN or LEFT OUTER
2f6e0 20 4a 4f 49 4e 2c 20 74 68 65 20 64 69 66 66 65   JOIN, the diffe
2f6f0 72 65 6e 63 65 20 69 73 20 76 65 72 79 20 69 6d  rence is very im
2f700 70 6f 72 74 61 6e 74 2e 20 20 0a 49 6e 20 61 20  portant.  .In a 
2f710 4c 45 46 54 20 4a 4f 49 4e 2c 0a 74 68 65 20 65  LEFT JOIN,.the e
2f720 78 74 72 61 20 4e 55 4c 4c 20 72 6f 77 20 66 6f  xtra NULL row fo
2f730 72 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  r the right-hand
2f740 20 74 61 62 6c 65 20 69 73 20 61 64 64 65 64 20   table is added 
2f750 61 66 74 65 72 20 4f 4e 20 63 6c 61 75 73 65 20  after ON clause 
2f760 70 72 6f 63 65 73 73 69 6e 67 0a 62 75 74 20 62  processing.but b
2f770 65 66 6f 72 65 20 57 48 45 52 45 20 63 6c 61 75  efore WHERE clau
2f780 73 65 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20  se processing.  
2f790 41 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 66 20  A constraint of 
2f7a0 74 68 65 20 66 6f 72 6d 20 22 6c 65 66 74 2e 78  the form "left.x
2f7b0 3d 72 69 67 68 74 2e 79 22 0a 69 6e 20 61 6e 20  =right.y".in an 
2f7c0 4f 4e 20 63 6c 61 75 73 65 20 77 69 6c 6c 20 74  ON clause will t
2f7d0 68 65 72 65 66 6f 72 65 20 61 6c 6c 6f 77 20 74  herefore allow t
2f7e0 68 72 6f 75 67 68 20 74 68 65 20 61 64 64 65 64  hrough the added
2f7f0 20 61 6c 6c 2d 4e 55 4c 4c 20 72 6f 77 73 20 6f   all-NULL rows o
2f800 66 20 74 68 65 0a 72 69 67 68 74 20 74 61 62 6c  f the.right tabl
2f810 65 2e 20 20 42 75 74 20 69 66 20 74 68 61 74 20  e.  But if that 
2f820 73 61 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  same constraint 
2f830 69 73 20 69 6e 20 74 68 65 20 57 48 45 52 45 20  is in the WHERE 
2f840 63 6c 61 75 73 65 20 61 20 4e 55 4c 4c 20 69 6e  clause a NULL in
2f850 0a 22 72 69 67 68 74 2e 79 22 20 77 69 6c 6c 20  ."right.y" will 
2f860 70 72 65 76 65 6e 74 20 74 68 65 20 65 78 70 72  prevent the expr
2f870 65 73 73 69 6f 6e 20 22 6c 65 66 74 2e 78 3d 72  ession "left.x=r
2f880 69 67 68 74 2e 79 22 20 66 72 6f 6d 20 62 65 69  ight.y" from bei
2f890 6e 67 20 74 72 75 65 2c 20 61 6e 64 0a 74 68 75  ng true, and.thu
2f8a0 73 20 65 78 63 6c 75 64 65 20 74 68 61 74 20 72  s exclude that r
2f8b0 6f 77 20 66 72 6f 6d 20 74 68 65 20 6f 75 74 70  ow from the outp
2f8c0 75 74 2e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20 47 65  ut...<p><b>3. Ge
2f8d0 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  neration of the 
2f8e0 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
2f8f0 77 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f  ws.</b>.<tcl>hd_
2f900 66 72 61 67 6d 65 6e 74 20 72 65 73 75 6c 74 73  fragment results
2f910 65 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64  et</tcl>.<tcl>hd
2f920 5f 6b 65 79 77 6f 72 64 73 20 7b 72 65 73 75 6c  _keywords {resul
2f930 74 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e  t-set expression
2f940 73 7d 20 7b 47 52 4f 55 50 20 42 59 7d 3c 2f 74  s} {GROUP BY}</t
2f950 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68 65  cl>..<p>Once the
2f960 20 69 6e 70 75 74 20 64 61 74 61 20 66 72 6f 6d   input data from
2f970 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
2f980 20 68 61 73 20 62 65 65 6e 20 66 69 6c 74 65 72   has been filter
2f990 65 64 20 62 79 20 74 68 65 0a 57 48 45 52 45 20  ed by the.WHERE 
2f9a0 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f  clause expressio
2f9b0 6e 20 28 69 66 20 61 6e 79 29 2c 20 74 68 65 20  n (if any), the 
2f9c0 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
2f9d0 77 73 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c  ws for the simpl
2f9e0 65 20 0a 53 45 4c 45 43 54 20 61 72 65 20 63 61  e .SELECT are ca
2f9f0 6c 63 75 6c 61 74 65 64 2e 20 45 78 61 63 74 6c  lculated. Exactl
2fa00 79 20 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f  y how this is do
2fa10 6e 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68  ne depends on wh
2fa20 65 74 68 65 72 20 74 68 65 20 73 69 6d 70 6c 65  ether the simple
2fa30 20 0a 53 45 4c 45 43 54 20 69 73 20 61 6e 20 61   .SELECT is an a
2fa40 67 67 72 65 67 61 74 65 20 6f 72 20 6e 6f 6e 2d  ggregate or non-
2fa50 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 2c  aggregate query,
2fa60 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20   and whether or 
2fa70 6e 6f 74 20 61 20 47 52 4f 55 50 0a 42 59 20 63  not a GROUP.BY c
2fa80 6c 61 75 73 65 20 77 61 73 20 73 70 65 63 69 66  lause was specif
2fa90 69 65 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 6c 69  ied...<p> The li
2faa0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
2fab0 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 53 45  s between the SE
2fac0 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65  LECT and FROM ke
2fad0 79 77 6f 72 64 73 20 69 73 20 6b 6e 6f 77 6e 20  ywords is known 
2fae0 61 73 0a 74 68 65 20 72 65 73 75 6c 74 20 65 78  as.the result ex
2faf0 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 20 20  pression list.  
2fb00 5e 49 66 20 61 20 72 65 73 75 6c 74 20 65 78 70  ^If a result exp
2fb10 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 73  ression is the s
2fb20 70 65 63 69 61 6c 20 65 78 70 72 65 73 73 69 6f  pecial expressio
2fb30 6e 0a 22 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63  n."*" then all c
2fb40 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e  olumns in the in
2fb50 70 75 74 20 64 61 74 61 20 61 72 65 20 73 75 62  put data are sub
2fb60 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68 61  stituted for tha
2fb70 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e  t one expression
2fb80 2e 0a 5e 28 49 66 20 74 68 65 20 65 78 70 72 65  ..^(If the expre
2fb90 73 73 69 6f 6e 20 69 73 20 74 68 65 20 61 6c 69  ssion is the ali
2fba0 61 73 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72  as of a table or
2fbb0 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
2fbc0 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 66 6f 6c   FROM clause.fol
2fbd0 6c 6f 77 65 64 20 62 79 20 22 2e 2a 22 20 74 68  lowed by ".*" th
2fbe0 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 66  en all columns f
2fbf0 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 74 61  rom the named ta
2fc00 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
2fc10 61 72 65 0a 73 75 62 73 74 69 74 75 74 65 64 20  are.substituted 
2fc20 66 6f 72 20 74 68 65 20 73 69 6e 67 6c 65 20 65  for the single e
2fc30 78 70 72 65 73 73 69 6f 6e 2e 29 5e 20 5e 28 49  xpression.)^ ^(I
2fc40 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f  t is an error to
2fc50 20 75 73 65 20 61 20 22 2a 22 20 6f 72 0a 22 61   use a "*" or."a
2fc60 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69  lias.*" expressi
2fc70 6f 6e 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78  on in any contex
2fc80 74 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72  t other than a r
2fc90 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
2fca0 20 6c 69 73 74 2e 29 5e 0a 5e 28 49 74 20 69 73   list.)^.^(It is
2fcb0 20 61 6c 73 6f 20 61 6e 20 65 72 72 6f 72 20 74   also an error t
2fcc0 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72 20 22  o use a "*" or "
2fcd0 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73  alias.*" express
2fce0 69 6f 6e 20 69 6e 20 61 20 73 69 6d 70 6c 65 20  ion in a simple 
2fcf0 53 45 4c 45 43 54 0a 71 75 65 72 79 20 74 68 61  SELECT.query tha
2fd00 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  t does not have 
2fd10 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 29 5e  a FROM clause.)^
2fd20 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 6e 75 6d 62  ..<p> ^(The numb
2fd30 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
2fd40 20 74 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e   the rows return
2fd50 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53  ed by a simple S
2fd60 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a  ELECT statement.
2fd70 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  is equal to the 
2fd80 6e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73  number of expres
2fd90 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73  sions in the res
2fda0 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  ult expression l
2fdb0 69 73 74 20 61 66 74 65 72 0a 73 75 62 73 74 69  ist after.substi
2fdc0 74 75 74 69 6f 6e 20 6f 66 20 2a 20 61 6e 64 20  tution of * and 
2fdd0 61 6c 69 61 73 2e 2a 20 65 78 70 72 65 73 73 69  alias.* expressi
2fde0 6f 6e 73 2e 29 5e 20 45 61 63 68 20 72 65 73 75  ons.)^ Each resu
2fdf0 6c 74 20 72 6f 77 20 69 73 20 63 61 6c 63 75 6c  lt row is calcul
2fe00 61 74 65 64 20 62 79 0a 65 76 61 6c 75 61 74 69  ated by.evaluati
2fe10 6e 67 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ng the expressio
2fe20 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
2fe30 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
2fe40 20 77 69 74 68 20 72 65 73 70 65 63 74 20 74 6f   with respect to
2fe50 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a.single row of
2fe60 20 69 6e 70 75 74 20 64 61 74 61 20 6f 72 2c 20   input data or, 
2fe70 66 6f 72 20 61 67 67 72 65 67 61 74 65 20 71 75  for aggregate qu
2fe80 65 72 69 65 73 2c 20 77 69 74 68 20 72 65 73 70  eries, with resp
2fe90 65 63 74 20 74 6f 20 61 20 67 72 6f 75 70 0a 6f  ect to a group.o
2fea0 66 20 72 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20 20  f rows...<ul>.  
2feb0 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53  <li><p>^If the S
2fec0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
2fed0 69 73 20 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67 72  is <b>a non-aggr
2fee0 65 67 61 74 65 20 71 75 65 72 79 3c 2f 62 3e 2c  egate query</b>,
2fef0 20 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20   then .    each 
2ff00 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
2ff10 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  e result express
2ff20 69 6f 6e 20 6c 69 73 74 20 69 73 20 65 76 61 6c  ion list is eval
2ff30 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  uated for each r
2ff40 6f 77 20 69 6e 0a 20 20 20 20 74 68 65 20 64 61  ow in.    the da
2ff50 74 61 73 65 74 20 66 69 6c 74 65 72 65 64 20 62  taset filtered b
2ff60 79 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  y the WHERE clau
2ff70 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49  se...  <li><p>^I
2ff80 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  f the SELECT sta
2ff90 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20  tement is <b>an 
2ffa0 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
2ffb0 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50 0a  without a GROUP.
2ffc0 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73      BY</b> claus
2ffd0 65 2c 20 74 68 65 6e 20 65 61 63 68 20 61 67 67  e, then each agg
2ffe0 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2fff0 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d  n in the result-
30000 73 65 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c  set is .    eval
30010 75 61 74 65 64 20 6f 6e 63 65 20 61 63 72 6f 73  uated once acros
30020 73 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  s the entire dat
30030 61 73 65 74 2e 20 5e 45 61 63 68 20 6e 6f 6e 2d  aset. ^Each non-
30040 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
30050 73 69 6f 6e 0a 20 20 20 20 69 6e 20 74 68 65 20  sion.    in the 
30060 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20 65 76  result-set is ev
30070 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72  aluated once for
30080 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20   an arbitrarily 
30090 73 65 6c 65 63 74 65 64 20 72 6f 77 20 6f 66 0a  selected row of.
300a0 20 20 20 20 74 68 65 20 64 61 74 61 73 65 74 2e      the dataset.
300b0 20 5e 54 68 65 20 73 61 6d 65 20 61 72 62 69 74   ^The same arbit
300c0 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20  rarily selected 
300d0 72 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  row is used for 
300e0 65 61 63 68 0a 20 20 20 20 6e 6f 6e 2d 61 67 67  each.    non-agg
300f0 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
30100 6e 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 64  n. ^Or, if the d
30110 61 74 61 73 65 74 20 63 6f 6e 74 61 69 6e 73 20  ataset contains 
30120 7a 65 72 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20  zero rows, then 
30130 0a 20 20 20 20 65 61 63 68 20 6e 6f 6e 2d 61 67  .    each non-ag
30140 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
30150 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  on is evaluated 
30160 61 67 61 69 6e 73 74 20 61 20 72 6f 77 20 63 6f  against a row co
30170 6e 73 69 73 74 69 6e 67 0a 20 20 20 20 65 6e 74  nsisting.    ent
30180 69 72 65 6c 79 20 6f 66 20 4e 55 4c 4c 20 76 61  irely of NULL va
30190 6c 75 65 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54 68  lues...   <p>^Th
301a0 65 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  e single row of 
301b0 72 65 73 75 6c 74 2d 73 65 74 20 64 61 74 61 20  result-set data 
301c0 63 72 65 61 74 65 64 20 62 79 20 65 76 61 6c 75  created by evalu
301d0 61 74 69 6e 67 20 74 68 65 20 61 67 67 72 65 67  ating the aggreg
301e0 61 74 65 0a 20 20 20 20 61 6e 64 20 6e 6f 6e 2d  ate.    and non-
301f0 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
30200 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73  sions in the res
30210 75 6c 74 2d 73 65 74 20 66 6f 72 6d 73 20 74 68  ult-set forms th
30220 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 0a 20  e result of an. 
30230 20 20 20 61 67 67 72 65 67 61 74 65 20 71 75 65     aggregate que
30240 72 79 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f  ry without a GRO
30250 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20 5e 41  UP BY clause. ^A
30260 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n aggregate quer
30270 79 20 77 69 74 68 6f 75 74 20 61 0a 20 20 20 20  y without a.    
30280 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
30290 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 65  always returns e
302a0 78 61 63 74 6c 79 20 6f 6e 65 20 72 6f 77 20 6f  xactly one row o
302b0 66 20 64 61 74 61 2c 20 65 76 65 6e 20 69 66 20  f data, even if 
302c0 74 68 65 72 65 20 61 72 65 0a 20 20 20 20 7a 65  there are.    ze
302d0 72 6f 20 72 6f 77 73 20 6f 66 20 69 6e 70 75 74  ro rows of input
302e0 20 64 61 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c 70   data...  <li><p
302f0 3e 5e 28 49 66 20 74 68 65 20 53 45 4c 45 43 54  >^(If the SELECT
30300 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62   statement is <b
30310 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75  >an aggregate qu
30320 65 72 79 20 77 69 74 68 20 61 20 47 52 4f 55 50  ery with a GROUP
30330 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75  .    BY</b> clau
30340 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20 6f 66  se, then each of
30350 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73   the expressions
30360 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
30370 72 74 20 6f 66 20 74 68 65 0a 20 20 20 20 47 52  rt of the.    GR
30380 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 69 73  OUP BY clause is
30390 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
303a0 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 64  ach row of the d
303b0 61 74 61 73 65 74 2e 20 45 61 63 68 20 72 6f 77  ataset. Each row
303c0 0a 20 20 20 20 69 73 20 74 68 65 6e 20 61 73 73  .    is then ass
303d0 69 67 6e 65 64 20 74 6f 20 61 20 22 67 72 6f 75  igned to a "grou
303e0 70 22 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  p" based on the 
303f0 72 65 73 75 6c 74 73 3b 20 72 6f 77 73 20 66 6f  results; rows fo
30400 72 20 77 68 69 63 68 0a 20 20 20 20 74 68 65 20  r which.    the 
30410 72 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75  results of evalu
30420 61 74 69 6e 67 20 74 68 65 20 47 52 4f 55 50 20  ating the GROUP 
30430 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  BY expressions a
30440 72 65 20 74 68 65 20 73 61 6d 65 20 67 65 74 0a  re the same get.
30450 20 20 20 20 61 73 73 69 67 6e 65 64 20 74 6f 20      assigned to 
30460 74 68 65 20 73 61 6d 65 20 67 72 6f 75 70 2e 29  the same group.)
30470 5e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f  ^ ^For the purpo
30480 73 65 73 20 6f 66 20 67 72 6f 75 70 69 6e 67 20  ses of grouping 
30490 72 6f 77 73 2c 20 4e 55 4c 4c 20 0a 20 20 20 20  rows, NULL .    
304a0 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
304b0 64 65 72 65 64 20 65 71 75 61 6c 2e 20 5e 54 68  dered equal. ^Th
304c0 65 20 75 73 75 61 6c 20 72 75 6c 65 73 20 66 6f  e usual rules fo
304d0 72 20 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65 6c  r [collation|sel
304e0 65 63 74 69 6e 67 20 61 0a 20 20 20 20 63 6f 6c  ecting a.    col
304f0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d  lation sequence]
30500 20 77 69 74 68 20 77 68 69 63 68 20 74 6f 20 63   with which to c
30510 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61 6c 75  ompare text valu
30520 65 73 20 61 70 70 6c 79 20 77 68 65 6e 20 65 76  es apply when ev
30530 61 6c 75 61 74 69 6e 67 0a 20 20 20 20 65 78 70  aluating.    exp
30540 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52  ressions in a GR
30550 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20 20  OUP BY clause.  
30560 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73  ^The expressions
30570 20 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59   in the GROUP BY
30580 20 63 6c 61 75 73 65 0a 20 20 20 20 64 6f 20 3c   clause.    do <
30590 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65  em>not</em> have
305a0 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 69 6f   to be expressio
305b0 6e 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69  ns that appear i
305c0 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 5e 54  n the result. ^T
305d0 68 65 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f  he.    expressio
305e0 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59  ns in a GROUP BY
305f0 20 63 6c 61 75 73 65 20 6d 61 79 20 6e 6f 74 20   clause may not 
30600 62 65 20 61 67 67 72 65 67 61 74 65 20 65 78 70  be aggregate exp
30610 72 65 73 73 69 6f 6e 73 2e 0a 0a 20 20 20 20 3c  ressions...    <
30620 70 3e 5e 28 49 66 20 61 20 48 41 56 49 4e 47 20  p>^(If a HAVING 
30630 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
30640 69 65 64 2c 20 69 74 20 69 73 20 65 76 61 6c 75  ied, it is evalu
30650 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61  ated once for ea
30660 63 68 20 67 72 6f 75 70 20 0a 20 20 20 20 6f 66  ch group .    of
30670 20 72 6f 77 73 20 61 73 20 61 20 5b 62 6f 6f 6c   rows as a [bool
30680 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e  ean expression].
30690 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f   If the result o
306a0 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
306b0 0a 20 20 20 20 48 41 56 49 4e 47 20 63 6c 61 75  .    HAVING clau
306c0 73 65 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  se is false, the
306d0 20 67 72 6f 75 70 20 69 73 20 64 69 73 63 61 72   group is discar
306e0 64 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20 48  ded.)^ ^If the H
306f0 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 0a  AVING clause is.
30700 20 20 20 20 61 6e 20 61 67 67 72 65 67 61 74 65      an aggregate
30710 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20   expression, it 
30720 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 63 72  is evaluated acr
30730 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20  oss all rows in 
30740 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 0a 20  the group. ^If. 
30750 20 20 20 61 20 48 41 56 49 4e 47 20 63 6c 61 75     a HAVING clau
30760 73 65 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72  se is a non-aggr
30770 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
30780 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
30790 64 20 77 69 74 68 20 72 65 73 70 65 63 74 0a 20  d with respect. 
307a0 20 20 20 74 6f 20 61 6e 20 61 72 62 69 74 72 61     to an arbitra
307b0 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f  rily selected ro
307c0 77 20 66 72 6f 6d 20 74 68 65 20 67 72 6f 75 70  w from the group
307d0 2e 20 20 5e 54 68 65 20 48 41 56 49 4e 47 20 65  .  ^The HAVING e
307e0 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 0a 20 20  xpression may.  
307f0 20 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65    refer to value
30800 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61 74  s, even aggregat
30810 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61  e functions, tha
30820 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65  t are not in the
30830 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20   result.</p>..  
30840 20 20 3c 70 3e 5e 45 61 63 68 20 65 78 70 72 65    <p>^Each expre
30850 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73  ssion in the res
30860 75 6c 74 2d 73 65 74 20 69 73 20 74 68 65 6e 20  ult-set is then 
30870 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
30880 6f 72 20 65 61 63 68 0a 20 20 20 20 67 72 6f 75  or each.    grou
30890 70 20 6f 66 20 72 6f 77 73 2e 20 5e 49 66 20 74  p of rows. ^If t
308a0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
308b0 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 65 78   an aggregate ex
308c0 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20  pression, it is 
308d0 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 61  .    evaluated a
308e0 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69  cross all rows i
308f0 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 4f 74  n the group. ^Ot
30900 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 20 65  herwise, it is e
30910 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74  valuated against
30920 0a 20 20 20 20 61 20 73 69 6e 67 6c 65 20 61 72  .    a single ar
30930 62 69 74 72 61 72 69 6c 79 20 63 68 6f 73 65 6e  bitrarily chosen
30940 20 72 6f 77 20 66 72 6f 6d 20 77 69 74 68 69 6e   row from within
30950 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 20   the group. ^If 
30960 74 68 65 72 65 20 69 73 20 6d 6f 72 65 0a 20 20  there is more.  
30970 20 20 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61    than one non-a
30980 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
30990 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ion in the resul
309a0 74 2d 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 20  t-set, then all 
309b0 73 75 63 68 0a 20 20 20 20 65 78 70 72 65 73 73  such.    express
309c0 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74  ions are evaluat
309d0 65 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20  ed for the same 
309e0 72 6f 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61  row...    <p>^Ea
309f0 63 68 20 67 72 6f 75 70 20 6f 66 20 69 6e 70 75  ch group of inpu
30a00 74 20 64 61 74 61 73 65 74 20 72 6f 77 73 20 63  t dataset rows c
30a10 6f 6e 74 72 69 62 75 74 65 73 20 61 20 73 69 6e  ontributes a sin
30a20 67 6c 65 20 72 6f 77 20 74 6f 20 74 68 65 20 0a  gle row to the .
30a30 20 20 20 20 73 65 74 20 6f 66 20 72 65 73 75 6c      set of resul
30a40 74 20 72 6f 77 73 2e 20 5e 53 75 62 6a 65 63 74  t rows. ^Subject
30a50 20 74 6f 20 66 69 6c 74 65 72 69 6e 67 20 61 73   to filtering as
30a60 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
30a70 65 20 44 49 53 54 49 4e 43 54 0a 20 20 20 20 6b  e DISTINCT.    k
30a80 65 79 77 6f 72 64 2c 20 74 68 65 20 6e 75 6d 62  eyword, the numb
30a90 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72  er of rows retur
30aa0 6e 65 64 20 62 79 20 61 6e 20 61 67 67 72 65 67  ned by an aggreg
30ab0 61 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61  ate query with a
30ac0 20 47 52 4f 55 50 0a 20 20 20 20 42 59 20 63 6c   GROUP.    BY cl
30ad0 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d 65  ause is the same
30ae0 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   as the number o
30af0 66 20 67 72 6f 75 70 73 20 6f 66 20 72 6f 77 73  f groups of rows
30b00 20 70 72 6f 64 75 63 65 64 20 62 79 20 61 70 70   produced by app
30b10 6c 79 69 6e 67 0a 20 20 20 20 74 68 65 20 47 52  lying.    the GR
30b20 4f 55 50 20 42 59 20 61 6e 64 20 48 41 56 49 4e  OUP BY and HAVIN
30b30 47 20 63 6c 61 75 73 65 73 20 74 6f 20 74 68 65  G clauses to the
30b40 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20   filtered input 
30b50 64 61 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a  dataset..</ul>..
30b60 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
30b70 20 62 61 72 65 61 67 67 20 7b 62 61 72 65 20 61   bareagg {bare a
30b80 67 67 72 65 67 61 74 65 20 74 65 72 6d 73 7d 3c  ggregate terms}<
30b90 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 53 69 64 65  /tcl>.<p><b>Side
30ba0 20 6e 6f 74 65 3a 20 42 61 72 65 20 63 6f 6c 75   note: Bare colu
30bb0 6d 6e 73 20 69 6e 20 61 6e 20 61 67 67 72 65 67  mns in an aggreg
30bc0 61 74 65 20 71 75 65 72 69 65 73 2e 3c 2f 62 3e  ate queries.</b>
30bd0 0a 54 68 65 20 75 73 75 61 6c 20 63 61 73 65 20  .The usual case 
30be0 69 73 20 74 68 61 74 20 61 6c 6c 20 63 6f 6c 75  is that all colu
30bf0 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 61 6e 20 61  mn names in an a
30c00 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 61  ggregate query a
30c10 72 65 20 65 69 74 68 65 72 0a 61 72 67 75 6d 65  re either.argume
30c20 6e 74 73 20 74 6f 20 5b 61 67 67 66 75 6e 63 7c  nts to [aggfunc|
30c30 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
30c40 6f 6e 73 5d 20 6f 72 20 65 6c 73 65 20 61 70 70  ons] or else app
30c50 65 61 72 20 69 6e 20 74 68 65 20 47 52 4f 55 50  ear in the GROUP
30c60 20 42 59 20 63 6c 61 75 73 65 2e 0a 41 20 72 65   BY clause..A re
30c70 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 77 68 69 63  sult column whic
30c80 68 20 63 6f 6e 74 61 69 6e 73 20 61 20 63 6f 6c  h contains a col
30c90 75 6d 6e 20 6e 61 6d 65 20 74 68 61 74 20 69 73  umn name that is
30ca0 20 6e 6f 74 20 77 69 74 68 69 6e 20 61 6e 0a 61   not within an.a
30cb0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
30cc0 6e 20 61 6e 64 20 74 68 61 74 20 64 6f 65 73 20  n and that does 
30cd0 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68  not appear in th
30ce0 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
30cf0 65 20 28 69 66 0a 6f 6e 65 20 65 78 69 73 74 73  e (if.one exists
30d00 29 20 69 73 20 63 61 6c 6c 65 64 20 61 20 22 62  ) is called a "b
30d10 61 72 65 22 20 63 6f 6c 75 6d 6e 2e 0a 45 78 61  are" column..Exa
30d20 6d 70 6c 65 3a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  mple:.<blockquot
30d30 65 3e 3c 70 72 65 3e 0a 53 45 4c 45 43 54 20 61  e><pre>.SELECT a
30d40 2c 20 62 2c 20 73 75 6d 28 63 29 20 46 52 4f 4d  , b, sum(c) FROM
30d50 20 74 61 62 31 20 47 52 4f 55 50 20 42 59 20 61   tab1 GROUP BY a
30d60 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
30d70 75 6f 74 65 3e 0a 3c 70 3e 49 6e 20 74 68 65 20  uote>.<p>In the 
30d80 71 75 65 72 79 20 61 62 6f 76 65 2c 20 74 68 65  query above, the
30d90 20 22 61 22 20 63 6f 6c 75 6d 6e 20 69 73 20 70   "a" column is p
30da0 61 72 74 20 6f 66 20 74 68 65 20 47 52 4f 55 50  art of the GROUP
30db0 20 42 59 20 63 6c 61 75 73 65 0a 61 6e 64 20 73   BY clause.and s
30dc0 6f 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68  o each row of th
30dd0 65 20 6f 75 74 70 75 74 20 63 6f 6e 74 61 69 6e  e output contain
30de0 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 64 69 73  s one of the dis
30df0 74 69 6e 63 74 20 76 61 6c 75 65 73 20 66 6f 72  tinct values for
30e00 0a 22 61 22 2e 20 20 54 68 65 20 22 63 22 20 63  ."a".  The "c" c
30e10 6f 6c 75 6d 6e 20 69 73 20 63 6f 6e 74 61 69 6e  olumn is contain
30e20 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 5b 73  ed within the [s
30e30 75 6d 28 29 5d 20 61 67 67 72 65 67 61 74 65 20  um()] aggregate 
30e40 66 75 6e 63 74 69 6f 6e 0a 61 6e 64 20 73 6f 20  function.and so 
30e50 74 68 61 74 20 6f 75 74 70 75 74 20 63 6f 6c 75  that output colu
30e60 6d 6e 20 69 73 20 74 68 65 20 73 75 6d 20 6f 66  mn is the sum of
30e70 20 61 6c 6c 20 22 63 22 20 76 61 6c 75 65 73 20   all "c" values 
30e80 69 6e 20 72 6f 77 73 20 74 68 61 74 0a 68 61 76  in rows that.hav
30e90 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
30ea0 20 66 6f 72 20 22 61 22 2e 20 20 42 75 74 20 77   for "a".  But w
30eb0 68 61 74 20 69 73 20 74 68 65 20 72 65 73 75 6c  hat is the resul
30ec0 74 20 6f 66 20 74 68 65 20 62 61 72 65 20 0a 63  t of the bare .c
30ed0 6f 6c 75 6d 6e 20 22 62 22 3f 20 54 68 65 20 61  olumn "b"? The a
30ee0 6e 73 77 65 72 20 69 73 20 74 68 61 74 20 74 68  nswer is that th
30ef0 65 20 22 62 22 20 72 65 73 75 6c 74 20 77 69 6c  e "b" result wil
30f00 6c 20 62 65 20 74 68 65 0a 76 61 6c 75 65 20 66  l be the.value f
30f10 6f 72 20 22 62 22 20 69 6e 20 6f 6e 65 20 6f 66  or "b" in one of
30f20 20 74 68 65 20 69 6e 70 75 74 20 72 6f 77 73 20   the input rows 
30f30 74 68 61 74 20 66 6f 72 6d 20 74 68 65 20 61 67  that form the ag
30f40 67 72 65 67 61 74 65 2e 0a 54 68 65 20 70 72 6f  gregate..The pro
30f50 62 6c 65 6d 20 69 73 20 74 68 61 74 20 79 6f 75  blem is that you
30f60 20 75 73 75 61 6c 6c 79 20 64 6f 20 6e 6f 74 20   usually do not 
30f70 6b 6e 6f 77 20 77 68 69 63 68 20 69 6e 70 75 74  know which input
30f80 20 72 6f 77 20 69 73 20 75 73 65 64 0a 74 6f 20   row is used.to 
30f90 63 6f 6d 70 75 74 65 20 22 62 22 2c 20 61 6e 64  compute "b", and
30fa0 20 73 6f 20 69 6e 20 6d 61 6e 79 20 63 61 73 65   so in many case
30fb0 73 20 74 68 65 20 76 61 6c 75 65 20 66 6f 72 20  s the value for 
30fc0 22 62 22 20 69 73 20 75 6e 64 65 66 69 6e 65 64  "b" is undefined
30fd0 2e 0a 3c 2f 70 3e 0a 3c 70 3e 0a 53 70 65 63 69  ..</p>.<p>.Speci
30fe0 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 63  al processing oc
30ff0 63 75 72 73 20 6f 63 63 75 72 73 20 77 68 65 6e  curs occurs when
31000 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 66   the aggregate f
31010 75 6e 63 74 69 6f 6e 20 69 73 20 0a 65 69 74 68  unction is .eith
31020 65 72 20 5b 6d 61 78 41 67 67 46 75 6e 63 7c 6d  er [maxAggFunc|m
31030 69 6e 28 29 5d 20 6f 72 20 5b 6d 69 6e 41 67 67  in()] or [minAgg
31040 46 75 6e 63 7c 6d 61 78 28 29 5d 2e 20 20 45 78  Func|max()].  Ex
31050 61 6d 70 6c 65 3a 0a 3c 62 6c 6f 63 6b 71 75 6f  ample:.<blockquo
31060 74 65 3e 3c 70 72 65 3e 0a 53 45 4c 45 43 54 20  te><pre>.SELECT 
31070 61 2c 20 62 2c 20 6d 61 78 28 63 29 20 46 52 4f  a, b, max(c) FRO
31080 4d 20 74 61 62 31 20 47 52 4f 55 50 20 42 59 20  M tab1 GROUP BY 
31090 61 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  a;.</pre></block
310a0 71 75 6f 74 65 3e 0a 57 68 65 6e 20 74 68 65 20  quote>.When the 
310b0 5b 6d 61 78 41 67 67 46 75 6e 63 7c 6d 69 6e 28  [maxAggFunc|min(
310c0 29 5d 20 6f 72 20 5b 6d 69 6e 41 67 67 46 75 6e  )] or [minAggFun
310d0 63 7c 6d 61 78 28 29 5d 20 61 67 67 72 65 67 61  c|max()] aggrega
310e0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 0a 61 72  te functions .ar
310f0 65 20 75 73 65 64 20 69 6e 20 61 6e 20 61 67 67  e used in an agg
31100 72 65 67 61 74 65 20 71 75 65 72 79 2c 20 61 6c  regate query, al
31110 6c 20 62 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69  l bare columns i
31120 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
31130 20 0a 74 61 6b 65 20 76 61 6c 75 65 73 20 66 72   .take values fr
31140 6f 6d 20 74 68 65 20 69 6e 70 75 74 0a 72 6f 77  om the input.row
31150 20 77 68 69 63 68 20 61 6c 73 6f 20 63 6f 6e 74   which also cont
31160 61 69 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d  ains the minimum
31170 20 6f 72 20 6d 61 78 69 6d 75 6d 2e 20 20 53 6f   or maximum.  So
31180 20 69 6e 20 74 68 65 20 71 75 65 72 79 0a 61 62   in the query.ab
31190 6f 76 65 2c 20 74 68 65 20 76 61 6c 75 65 20 6f  ove, the value o
311a0 66 20 74 68 65 20 22 62 22 20 63 6f 6c 75 6d 6e  f the "b" column
311b0 20 69 6e 20 74 68 65 20 6f 75 74 70 75 74 20 77   in the output w
311c0 69 6c 6c 20 62 65 20 74 68 65 20 76 61 6c 75 65  ill be the value
311d0 20 6f 66 0a 74 68 65 20 22 62 22 20 63 6f 6c 75   of.the "b" colu
311e0 6d 6e 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20  mn in the input 
311f0 72 6f 77 20 74 68 61 74 20 68 61 73 20 74 68 65  row that has the
31200 20 6c 61 72 67 65 73 74 20 22 63 22 20 76 61 6c   largest "c" val
31210 75 65 2e 0a 54 68 65 72 65 20 69 73 20 73 74 69  ue..There is sti
31220 6c 6c 20 61 6e 20 61 6d 62 69 67 75 69 74 79 20  ll an ambiguity 
31230 69 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 6f  if two or more o
31240 66 20 74 68 65 20 69 6e 70 75 74 20 72 6f 77 73  f the input rows
31250 20 68 61 76 65 20 74 68 65 0a 73 61 6d 65 20 6d   have the.same m
31260 69 6e 69 6d 75 6d 20 6f 72 20 6d 61 78 69 6d 75  inimum or maximu
31270 6d 20 76 61 6c 75 65 20 6f 72 20 69 66 20 74 68  m value or if th
31280 65 20 71 75 65 72 79 20 63 6f 6e 74 61 69 6e 73  e query contains
31290 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 0a 6d   more than one.m
312a0 69 6e 28 29 20 61 6e 64 2f 6f 72 20 6d 61 78 28  in() and/or max(
312b0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
312c0 74 69 6f 6e 2e 20 4f 6e 6c 79 20 74 68 65 20 62  tion. Only the b
312d0 75 69 6c 74 2d 69 6e 20 5b 6d 69 6e 41 67 67 46  uilt-in [minAggF
312e0 75 6e 63 7c 6d 69 6e 28 29 5d 20 0a 61 6e 64 20  unc|min()] .and 
312f0 5b 6d 61 78 41 67 67 46 75 6e 63 7c 6d 61 78 28  [maxAggFunc|max(
31300 29 5d 20 66 75 6e 63 74 69 6f 6e 73 20 77 6f 72  )] functions wor
31310 6b 20 74 68 69 73 20 77 61 79 2e 0a 3c 2f 70 3e  k this way..</p>
31320 0a 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76  ..<p><b>4. Remov
31330 61 6c 20 6f 66 20 64 75 70 6c 69 63 61 74 65 20  al of duplicate 
31340 72 6f 77 73 20 28 44 49 53 54 49 4e 43 54 20 70  rows (DISTINCT p
31350 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a  rocessing).</b>.
31360 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
31370 20 64 69 73 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a   distinct</tcl>.
31380 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
31390 20 7b 44 49 53 54 49 4e 43 54 7d 3c 2f 74 63 6c   {DISTINCT}</tcl
313a0 3e 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66 20 74 68  >..<p>^One of th
313b0 65 20 41 4c 4c 20 6f 72 20 44 49 53 54 49 4e 43  e ALL or DISTINC
313c0 54 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 66  T keywords may f
313d0 6f 6c 6c 6f 77 20 74 68 65 20 53 45 4c 45 43 54  ollow the SELECT
313e0 20 6b 65 79 77 6f 72 64 20 69 6e 20 61 20 0a 73   keyword in a .s
313f0 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
31400 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65 20  tement. ^If the 
31410 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73  simple SELECT is
31420 20 61 20 53 45 4c 45 43 54 20 41 4c 4c 2c 20 74   a SELECT ALL, t
31430 68 65 6e 20 74 68 65 0a 65 6e 74 69 72 65 20 73  hen the.entire s
31440 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
31450 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 62  s are returned b
31460 79 20 74 68 65 20 53 45 4c 45 43 54 2e 20 5e 49  y the SELECT. ^I
31470 66 20 6e 65 69 74 68 65 72 20 41 4c 4c 20 6f 72  f neither ALL or
31480 0a 44 49 53 54 49 4e 43 54 20 61 72 65 20 70 72  .DISTINCT are pr
31490 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20  esent, then the 
314a0 62 65 68 61 76 69 6f 72 20 69 73 20 61 73 20 69  behavior is as i
314b0 66 20 41 4c 4c 20 77 65 72 65 20 73 70 65 63 69  f ALL were speci
314c0 66 69 65 64 2e 20 0a 5e 49 66 20 74 68 65 20 73  fied. .^If the s
314d0 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20  imple SELECT is 
314e0 61 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43  a SELECT DISTINC
314f0 54 2c 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74  T, then duplicat
31500 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76  e rows are remov
31510 65 64 0a 66 72 6f 6d 20 74 68 65 20 73 65 74 20  ed.from the set 
31520 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 62  of result rows b
31530 65 66 6f 72 65 20 69 74 20 69 73 20 72 65 74 75  efore it is retu
31540 72 6e 65 64 2e 20 5e 46 6f 72 20 74 68 65 20 70  rned. ^For the p
31550 75 72 70 6f 73 65 73 20 6f 66 0a 64 65 74 65 63  urposes of.detec
31560 74 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72  ting duplicate r
31570 6f 77 73 2c 20 74 77 6f 20 4e 55 4c 4c 20 76 61  ows, two NULL va
31580 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
31590 72 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e  red to be equal.
315a0 20 5e 54 68 65 0a 5b 68 6f 77 20 63 6f 6c 6c 61   ^The.[how colla
315b0 74 69 6f 6e 20 69 73 20 64 65 74 65 72 6d 69 6e  tion is determin
315c0 65 64 7c 75 73 75 61 6c 20 72 75 6c 65 73 5d 20  ed|usual rules] 
315d0 61 70 70 6c 79 20 66 6f 72 20 73 65 6c 65 63 74  apply for select
315e0 69 6e 67 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 0a  ing a collation.
315f0 73 65 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d 70  sequence to comp
31600 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73 2e  are text values.
31610 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66 72 61 67 6d  ..<tcl>.hd_fragm
31620 65 6e 74 20 63 6f 6d 70 6f 75 6e 64 20 7b 63 6f  ent compound {co
31630 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 7d 20 7b  mpound select} {
31640 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 7d 20  compound query} 
31650 7b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  {compound SELECT
31660 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  } {compound SELE
31670 43 54 73 7d 0a 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  CTs}.</tcl>.<h3>
31680 43 6f 6d 70 6f 75 6e 64 20 53 65 6c 65 63 74 20  Compound Select 
31690 53 74 61 74 65 6d 65 6e 74 73 3c 2f 68 33 3e 0a  Statements</h3>.
316a0 0a 3c 70 3e 54 77 6f 20 6f 72 20 6d 6f 72 65 20  .<p>Two or more 
316b0 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20  [simple SELECT] 
316c0 73 74 61 74 65 6d 65 6e 74 73 20 6d 61 79 20 62  statements may b
316d0 65 20 63 6f 6e 6e 65 63 74 65 64 20 74 6f 67 65  e connected toge
316e0 74 68 65 72 20 74 6f 20 66 6f 72 6d 0a 61 20 63  ther to form.a c
316f0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 75  ompound SELECT u
31700 73 69 6e 67 20 74 68 65 20 55 4e 49 4f 4e 2c 20  sing the UNION, 
31710 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e 54 45 52  UNION ALL, INTER
31720 53 45 43 54 20 6f 72 20 45 58 43 45 50 54 20 6f  SECT or EXCEPT o
31730 70 65 72 61 74 6f 72 2c 0a 61 73 20 73 68 6f 77  perator,.as show
31740 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n by the followi
31750 6e 67 20 64 69 61 67 72 61 6d 3a 0a 0a 3c 74 63  ng diagram:..<tc
31760 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  l>.RecursiveBubb
31770 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f 75  leDiagram compou
31780 6e 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 0a 3c  nd-select-stmt.<
31790 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20  /tcl>..<p>^In a 
317a0 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c  compound SELECT,
317b0 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74   all the constit
317c0 75 65 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73  uent SELECTs mus
317d0 74 20 72 65 74 75 72 6e 20 74 68 65 20 73 61 6d  t return the sam
317e0 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  e .number of res
317f0 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 5e 41 73  ult columns. ^As
31800 20 74 68 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20   the components 
31810 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  of a compound SE
31820 4c 45 43 54 20 6d 75 73 74 0a 62 65 20 73 69 6d  LECT must.be sim
31830 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
31840 6d 65 6e 74 73 2c 20 74 68 65 79 20 6d 61 79 20  ments, they may 
31850 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 5b 4f 52 44  not contain [ORD
31860 45 52 20 42 59 5d 20 6f 72 20 5b 4c 49 4d 49 54  ER BY] or [LIMIT
31870 5d 20 63 6c 61 75 73 65 73 2e 0a 5e 5b 4f 52 44  ] clauses..^[ORD
31880 45 52 20 42 59 5d 20 61 6e 64 20 5b 4c 49 4d 49  ER BY] and [LIMI
31890 54 5d 20 63 6c 61 75 73 65 73 20 6d 61 79 20 6f  T] clauses may o
318a0 6e 6c 79 20 6f 63 63 75 72 20 61 74 20 74 68 65  nly occur at the
318b0 20 65 6e 64 20 6f 66 20 74 68 65 20 65 6e 74 69   end of the enti
318c0 72 65 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45  re compound.SELE
318d0 43 54 2c 20 61 6e 64 20 74 68 65 6e 20 6f 6e 6c  CT, and then onl
318e0 79 20 69 66 20 74 68 65 20 66 69 6e 61 6c 20 65  y if the final e
318f0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 63 6f  lement of the co
31900 6d 70 6f 75 6e 64 20 69 73 20 6e 6f 74 20 61 20  mpound is not a 
31910 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73 65 2e  [VALUES] clause.
31920 0a 0a 3c 70 3e 5e 41 20 63 6f 6d 70 6f 75 6e 64  ..<p>^A compound
31930 20 53 45 4c 45 43 54 20 63 72 65 61 74 65 64 20   SELECT created 
31940 75 73 69 6e 67 20 55 4e 49 4f 4e 20 41 4c 4c 20  using UNION ALL 
31950 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73  operator returns
31960 20 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72   all the rows.fr
31970 6f 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f  om the SELECT to
31980 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65   the left of the
31990 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61   UNION ALL opera
319a0 74 6f 72 2c 20 61 6e 64 20 61 6c 6c 20 74 68 65  tor, and all the
319b0 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53   rows.from the S
319c0 45 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69 67  ELECT to the rig
319d0 68 74 20 6f 66 20 69 74 2e 20 5e 54 68 65 20 55  ht of it. ^The U
319e0 4e 49 4f 4e 20 6f 70 65 72 61 74 6f 72 20 77 6f  NION operator wo
319f0 72 6b 73 20 74 68 65 20 73 61 6d 65 20 77 61 79  rks the same way
31a00 20 61 73 0a 55 4e 49 4f 4e 20 41 4c 4c 2c 20 65   as.UNION ALL, e
31a10 78 63 65 70 74 20 74 68 61 74 20 64 75 70 6c 69  xcept that dupli
31a20 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65  cate rows are re
31a30 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 66  moved from the f
31a40 69 6e 61 6c 20 72 65 73 75 6c 74 20 73 65 74 2e  inal result set.
31a50 0a 5e 54 68 65 20 49 4e 54 45 52 53 45 43 54 20  .^The INTERSECT 
31a60 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73  operator returns
31a70 20 74 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f   the intersectio
31a80 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  n of the results
31a90 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64   of the left and
31aa0 0a 72 69 67 68 74 20 53 45 4c 45 43 54 73 2e 20  .right SELECTs. 
31ab0 20 5e 54 68 65 20 45 58 43 45 50 54 20 6f 70 65   ^The EXCEPT ope
31ac0 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68  rator returns th
31ad0 65 20 73 75 62 73 65 74 20 6f 66 20 72 6f 77 73  e subset of rows
31ae0 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
31af0 0a 6c 65 66 74 20 53 45 4c 45 43 54 20 74 68 61  .left SELECT tha
31b00 74 20 61 72 65 20 6e 6f 74 20 61 6c 73 6f 20 72  t are not also r
31b10 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 72  eturned by the r
31b20 69 67 68 74 2d 68 61 6e 64 20 53 45 4c 45 43 54  ight-hand SELECT
31b30 2e 20 5e 44 75 70 6c 69 63 61 74 65 0a 72 6f 77  . ^Duplicate.row
31b40 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72  s are removed fr
31b50 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  om the results o
31b60 66 20 49 4e 54 45 52 53 45 43 54 20 61 6e 64 20  f INTERSECT and 
31b70 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 73  EXCEPT operators
31b80 20 62 65 66 6f 72 65 20 74 68 65 0a 72 65 73 75   before the.resu
31b90 6c 74 20 73 65 74 20 69 73 20 72 65 74 75 72 6e  lt set is return
31ba0 65 64 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68 65  ed...<p>^For the
31bb0 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74   purposes of det
31bc0 65 72 6d 69 6e 69 6e 67 20 64 75 70 6c 69 63 61  ermining duplica
31bd0 74 65 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20  te rows for the 
31be0 72 65 73 75 6c 74 73 20 6f 66 20 63 6f 6d 70 6f  results of compo
31bf0 75 6e 64 0a 53 45 4c 45 43 54 20 6f 70 65 72 61  und.SELECT opera
31c00 74 6f 72 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65  tors, NULL value
31c10 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
31c20 20 65 71 75 61 6c 20 74 6f 20 6f 74 68 65 72 20   equal to other 
31c30 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 0a  NULL values and.
31c40 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c  distinct from al
31c50 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  l non-NULL value
31c60 73 2e 20 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6f  s. ^The collatio
31c70 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20  n sequence used 
31c80 74 6f 20 63 6f 6d 70 61 72 65 20 0a 74 77 6f 20  to compare .two 
31c90 74 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64  text values is d
31ca0 65 74 65 72 6d 69 6e 65 64 20 61 73 20 69 66 20  etermined as if 
31cb0 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  the columns of t
31cc0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
31cd0 74 2d 68 61 6e 64 0a 53 45 4c 45 43 54 20 73 74  t-hand.SELECT st
31ce0 61 74 65 6d 65 6e 74 73 20 77 65 72 65 20 74 68  atements were th
31cf0 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
31d00 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f  -hand operands o
31d10 66 20 74 68 65 20 65 71 75 61 6c 73 20 28 3d 29  f the equals (=)
31d20 0a 6f 70 65 72 61 74 6f 72 2c 20 65 78 63 65 70  .operator, excep
31d30 74 20 74 68 61 74 20 67 72 65 61 74 65 72 20 70  t that greater p
31d40 72 65 63 65 64 65 6e 63 65 20 69 73 20 6e 6f 74  recedence is not
31d50 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20 63   assigned to a c
31d60 6f 6c 6c 61 74 69 6f 6e 20 0a 73 65 71 75 65 6e  ollation .sequen
31d70 63 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74  ce specified wit
31d80 68 20 74 68 65 20 70 6f 73 74 66 69 78 20 43 4f  h the postfix CO
31d90 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 2e 20  LLATE operator. 
31da0 5e 4e 6f 20 61 66 66 69 6e 69 74 79 0a 74 72 61  ^No affinity.tra
31db0 6e 73 66 6f 72 6d 61 74 69 6f 6e 73 20 61 72 65  nsformations are
31dc0 20 61 70 70 6c 69 65 64 20 74 6f 20 61 6e 79 20   applied to any 
31dd0 76 61 6c 75 65 73 20 77 68 65 6e 20 63 6f 6d 70  values when comp
31de0 61 72 69 6e 67 20 72 6f 77 73 20 61 73 20 70 61  aring rows as pa
31df0 72 74 20 6f 66 20 61 0a 63 6f 6d 70 6f 75 6e 64  rt of a.compound
31e00 20 53 45 4c 45 43 54 2e 20 0a 0a 3c 70 3e 5e 28   SELECT. ..<p>^(
31e10 57 68 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f  When three or mo
31e20 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  re simple SELECT
31e30 73 20 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 20  s are connected 
31e40 69 6e 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 20  into a compound 
31e50 53 45 4c 45 43 54 2c 0a 74 68 65 79 20 67 72 6f  SELECT,.they gro
31e60 75 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  up from left to 
31e70 72 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20  right. In other 
31e80 77 6f 72 64 73 2c 20 69 66 20 22 41 22 2c 20 22  words, if "A", "
31e90 42 22 20 61 6e 64 20 22 43 22 20 61 72 65 20 61  B" and "C" are a
31ea0 6c 6c 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  ll.simple SELECT
31eb0 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 28 41 20   statements, (A 
31ec0 6f 70 20 42 20 6f 70 20 43 29 20 69 73 20 70 72  op B op C) is pr
31ed0 6f 63 65 73 73 65 64 20 61 73 20 28 28 41 20 6f  ocessed as ((A o
31ee0 70 20 42 29 20 6f 70 20 43 29 2e 29 5e 0a 0a 3c  p B) op C).)^..<
31ef0 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
31f00 67 6d 65 6e 74 20 6f 72 64 65 72 62 79 20 7b 6f  gment orderby {o
31f10 72 64 65 72 20 62 79 7d 20 7b 4f 52 44 45 52 20  rder by} {ORDER 
31f20 42 59 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  BY}</tcl>.<h3>Th
31f30 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
31f40 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20  e</h3>..<p>If a 
31f50 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
31f60 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 6d 6f   that returns mo
31f70 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20  re than one row 
31f80 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 6e  does not have an
31f90 0a 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65  .ORDER BY clause
31fa0 2c 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77  , the order in w
31fb0 68 69 63 68 20 74 68 65 20 72 6f 77 73 20 61 72  hich the rows ar
31fc0 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e  e returned is un
31fd0 64 65 66 69 6e 65 64 2e 0a 4f 72 2c 20 69 66 20  defined..Or, if 
31fe0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
31ff0 6e 74 20 64 6f 65 73 20 68 61 76 65 20 61 6e 20  nt does have an 
32000 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
32010 20 74 68 65 6e 20 74 68 65 20 6c 69 73 74 20 6f   then the list o
32020 66 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 61 74  f.expressions at
32030 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 4f 52  tached to the OR
32040 44 45 52 20 42 59 20 64 65 74 65 72 6d 69 6e 65  DER BY determine
32050 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   the order in wh
32060 69 63 68 20 72 6f 77 73 0a 61 72 65 20 72 65 74  ich rows.are ret
32070 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65  urned to the use
32080 72 2e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 20 5b 63  r...<p>.^In a [c
32090 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 20  ompound SELECT] 
320a0 73 74 61 74 65 6d 65 6e 74 2c 20 6f 6e 6c 79 20  statement, only 
320b0 74 68 65 20 6c 61 73 74 20 6f 72 20 72 69 67 68  the last or righ
320c0 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53  t-most [simple S
320d0 45 4c 45 43 54 5d 0a 6d 61 79 20 68 61 76 65 20  ELECT].may have 
320e0 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an ORDER BY clau
320f0 73 65 2e 20 5e 54 68 61 74 20 4f 52 44 45 52 20  se. ^That ORDER 
32100 42 59 20 63 6c 61 75 73 65 20 77 69 6c 6c 20 61  BY clause will a
32110 70 70 6c 79 20 61 63 72 6f 73 73 20 61 6c 6c 20  pply across all 
32120 65 6c 65 6d 65 6e 74 73 20 6f 66 0a 74 68 65 20  elements of.the 
32130 63 6f 6d 70 6f 75 6e 64 2e 20 5e 49 66 20 74 68  compound. ^If th
32140 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 65 6c 65  e right-most ele
32150 6d 65 6e 74 20 6f 66 20 61 20 5b 63 6f 6d 70 6f  ment of a [compo
32160 75 6e 64 20 53 45 4c 45 43 54 5d 20 69 73 20 61  und SELECT] is a
32170 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73 65   [VALUES] clause
32180 2c 0a 74 68 65 6e 20 6e 6f 20 4f 52 44 45 52 20  ,.then no ORDER 
32190 42 59 20 63 6c 61 75 73 65 20 69 73 20 61 6c 6c  BY clause is all
321a0 6f 77 65 64 20 6f 6e 20 74 68 61 74 20 73 74 61  owed on that sta
321b0 74 65 6d 65 6e 74 2e 0a 0a 0a 3c 70 3e 5e 52 6f  tement....<p>^Ro
321c0 77 73 20 61 72 65 20 66 69 72 73 74 20 73 6f 72  ws are first sor
321d0 74 65 64 20 62 61 73 65 64 20 6f 6e 20 74 68 65  ted based on the
321e0 20 72 65 73 75 6c 74 73 20 6f 66 0a 65 76 61 6c   results of.eval
321f0 75 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d  uating the left-
32200 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20  most expression 
32210 69 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  in the ORDER BY 
32220 6c 69 73 74 2c 20 74 68 65 6e 20 74 69 65 73 20  list, then ties 
32230 61 72 65 20 62 72 6f 6b 65 6e 0a 62 79 20 65 76  are broken.by ev
32240 61 6c 75 61 74 69 6e 67 20 74 68 65 20 73 65 63  aluating the sec
32250 6f 6e 64 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78  ond left-most ex
32260 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 73 6f 20  pression and so 
32270 6f 6e 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e  on. The order in
32280 20 77 68 69 63 68 0a 74 77 6f 20 72 6f 77 73 20   which.two rows 
32290 66 6f 72 20 77 68 69 63 68 20 61 6c 6c 20 4f 52  for which all OR
322a0 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
322b0 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 65  ns evaluate to e
322c0 71 75 61 6c 20 76 61 6c 75 65 73 20 61 72 65 0a  qual values are.
322d0 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65  returned is unde
322e0 66 69 6e 65 64 2e 20 5e 45 61 63 68 20 4f 52 44  fined. ^Each ORD
322f0 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
32300 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c   may be optional
32310 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 6f  ly followed.by o
32320 6e 65 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72  ne of the keywor
32330 64 73 20 41 53 43 20 28 73 6d 61 6c 6c 65 72 20  ds ASC (smaller 
32340 76 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72  values are retur
32350 6e 65 64 20 66 69 72 73 74 29 20 6f 72 20 44 45  ned first) or DE
32360 53 43 20 28 6c 61 72 67 65 72 0a 76 61 6c 75 65  SC (larger.value
32370 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 66  s are returned f
32380 69 72 73 74 29 2e 20 5e 49 66 20 6e 65 69 74 68  irst). ^If neith
32390 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 20 61  er ASC or DESC a
323a0 72 65 20 73 70 65 63 69 66 69 65 64 2c 20 72 6f  re specified, ro
323b0 77 73 0a 61 72 65 20 73 6f 72 74 65 64 20 69 6e  ws.are sorted in
323c0 20 61 73 63 65 6e 64 69 6e 67 20 28 73 6d 61 6c   ascending (smal
323d0 6c 65 72 20 76 61 6c 75 65 73 20 66 69 72 73 74  ler values first
323e0 29 20 6f 72 64 65 72 20 62 79 20 64 65 66 61 75  ) order by defau
323f0 6c 74 2e 0a 0a 3c 70 3e 45 61 63 68 20 4f 52 44  lt...<p>Each ORD
32400 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
32410 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73   is processed as
32420 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
32430 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  ol>.<li><p>^If t
32440 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
32450 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73  ession is a cons
32460 74 61 6e 74 20 69 6e 74 65 67 65 72 20 4b 20 74  tant integer K t
32470 68 65 6e 20 74 68 65 0a 65 78 70 72 65 73 73 69  hen the.expressi
32480 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  on is considered
32490 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
324a0 65 20 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e K-th column of
324b0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a   the result set.
324c0 28 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 75 6d  (columns are num
324d0 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  bered from left 
324e0 74 6f 20 72 69 67 68 74 20 73 74 61 72 74 69 6e  to right startin
324f0 67 20 77 69 74 68 20 31 29 2e 0a 0a 3c 6c 69 3e  g with 1)...<li>
32500 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52  <p>^If the ORDER
32510 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
32520 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  s an identifier 
32530 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
32540 20 74 6f 0a 74 68 65 20 61 6c 69 61 73 20 6f 66   to.the alias of
32550 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 75 74 70   one of the outp
32560 75 74 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e  ut columns, then
32570 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
32580 69 73 20 63 6f 6e 73 69 64 65 72 65 64 0a 61 6e  is considered.an
32590 20 61 6c 69 61 73 20 66 6f 72 20 74 68 61 74 20   alias for that 
325a0 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e  column...<li><p>
325b0 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74  ^Otherwise, if t
325c0 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
325d0 65 73 73 69 6f 6e 20 69 73 20 61 6e 79 20 6f 74  ession is any ot
325e0 68 65 72 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  her expression, 
325f0 69 74 20 0a 69 73 20 65 76 61 6c 75 61 74 65 64  it .is evaluated
32600 20 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e 65   and the returne
32610 64 20 76 61 6c 75 65 20 75 73 65 64 20 74 6f 20  d value used to 
32620 6f 72 64 65 72 20 74 68 65 20 6f 75 74 70 75 74  order the output
32630 20 72 6f 77 73 2e 20 5e 49 66 0a 74 68 65 20 53   rows. ^If.the S
32640 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
32650 69 73 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  is a simple SELE
32660 43 54 2c 20 74 68 65 6e 20 61 6e 20 4f 52 44 45  CT, then an ORDE
32670 52 20 42 59 20 6d 61 79 20 63 6f 6e 74 61 69 6e  R BY may contain
32680 20 61 6e 79 0a 61 72 62 69 74 72 61 72 79 20 65   any.arbitrary e
32690 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e 48 6f 77  xpressions. ^How
326a0 65 76 65 72 2c 20 69 66 20 74 68 65 20 53 45 4c  ever, if the SEL
326b0 45 43 54 20 69 73 20 61 20 63 6f 6d 70 6f 75 6e  ECT is a compoun
326c0 64 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 0a 4f  d SELECT, then.O
326d0 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
326e0 6f 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ons that are not
326f0 20 61 6c 69 61 73 65 73 20 74 6f 20 6f 75 74 70   aliases to outp
32700 75 74 20 63 6f 6c 75 6d 6e 73 20 6d 75 73 74 20  ut columns must 
32710 62 65 20 65 78 61 63 74 6c 79 0a 74 68 65 20 73  be exactly.the s
32720 61 6d 65 20 61 73 20 61 6e 20 65 78 70 72 65 73  ame as an expres
32730 73 69 6f 6e 20 75 73 65 64 20 61 73 20 61 6e 20  sion used as an 
32740 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 2e 0a 3c  output column..<
32750 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68  /ol>..<p>^For th
32760 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 73 6f  e purposes of so
32770 72 74 69 6e 67 20 72 6f 77 73 2c 20 76 61 6c 75  rting rows, valu
32780 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20  es are compared 
32790 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 0a  in the same way.
327a0 61 73 20 66 6f 72 20 5b 63 6f 6d 70 61 72 69 73  as for [comparis
327b0 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 5d 2e  on expressions].
327c0 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   The collation s
327d0 65 71 75 65 6e 63 65 20 75 73 65 64 20 74 6f 20  equence used to 
327e0 63 6f 6d 70 61 72 65 0a 74 77 6f 20 74 65 78 74  compare.two text
327f0 20 76 61 6c 75 65 73 20 69 73 20 64 65 74 65 72   values is deter
32800 6d 69 6e 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73  mined as follows
32810 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  :..<ol>.  <li><p
32820 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42  >^If the ORDER B
32830 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
32840 61 73 73 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61  assigned a colla
32850 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73  tion sequence us
32860 69 6e 67 0a 20 20 74 68 65 20 70 6f 73 74 66 69  ing.  the postfi
32870 78 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  x [COLLATE opera
32880 74 6f 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 73  tor], then the s
32890 70 65 63 69 66 69 65 64 20 63 6f 6c 6c 61 74 69  pecified collati
328a0 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 0a 20  on sequence is. 
328b0 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e   used..  <li><p>
328c0 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74  ^Otherwise, if t
328d0 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
328e0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 61 6c 69  ession is an ali
328f0 61 73 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73  as to an express
32900 69 6f 6e 0a 20 20 74 68 61 74 20 68 61 73 20 62  ion.  that has b
32910 65 65 6e 20 61 73 73 69 67 6e 65 64 20 61 20 63  een assigned a c
32920 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
32930 65 20 75 73 69 6e 67 20 74 68 65 20 70 6f 73 74  e using the post
32940 66 69 78 20 0a 20 20 5b 43 4f 4c 4c 41 54 45 20  fix .  [COLLATE 
32950 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20  operator], then 
32960 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
32970 71 75 65 6e 63 65 20 61 73 73 69 67 6e 65 64 20  quence assigned 
32980 74 6f 20 74 68 65 20 61 6c 69 61 73 65 64 0a 20  to the aliased. 
32990 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
329a0 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f  sed..  <li><p>^O
329b0 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68 65  therwise, if the
329c0 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
329d0 73 69 6f 6e 20 69 73 20 61 20 63 6f 6c 75 6d 6e  sion is a column
329e0 20 6f 72 20 61 6e 20 61 6c 69 61 73 20 6f 66 0a   or an alias of.
329f0 20 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20    an expression 
32a00 74 68 61 74 20 69 73 20 61 20 63 6f 6c 75 6d 6e  that is a column
32a10 2c 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75  , then the defau
32a20 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
32a30 75 65 6e 63 65 20 66 6f 72 0a 20 20 74 68 65 20  uence for.  the 
32a40 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 20  column is used. 
32a50 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72  .  <li><p>^Other
32a60 77 69 73 65 2c 20 74 68 65 20 5b 42 49 4e 41 52  wise, the [BINAR
32a70 59 5d 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  Y] collation seq
32a80 75 65 6e 63 65 20 69 73 20 75 73 65 64 2e 0a 3c  uence is used..<
32a90 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61 20 5b 63  /ol>..<p>In a [c
32aa0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 20  ompound SELECT] 
32ab0 73 74 61 74 65 6d 65 6e 74 2c 20 61 6c 6c 20 4f  statement, all O
32ac0 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
32ad0 6f 6e 73 20 61 72 65 20 68 61 6e 64 6c 65 64 0a  ons are handled.
32ae0 61 73 20 61 6c 69 61 73 65 73 20 66 6f 72 20 6f  as aliases for o
32af0 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ne of the result
32b00 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
32b10 63 6f 6d 70 6f 75 6e 64 2e 0a 5e 28 49 66 20 61  compound..^(If a
32b20 6e 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  n ORDER BY expre
32b30 73 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6e 20  ssion is not an 
32b40 69 6e 74 65 67 65 72 20 61 6c 69 61 73 2c 20 74  integer alias, t
32b50 68 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72 63  hen SQLite searc
32b60 68 65 73 0a 74 68 65 20 6c 65 66 74 2d 6d 6f 73  hes.the left-mos
32b70 74 20 53 45 4c 45 43 54 20 69 6e 20 74 68 65 20  t SELECT in the 
32b80 63 6f 6d 70 6f 75 6e 64 20 66 6f 72 20 61 20 72  compound for a r
32b90 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61  esult column tha
32ba0 74 20 6d 61 74 63 68 65 73 20 65 69 74 68 65 72  t matches either
32bb0 0a 74 68 65 20 73 65 63 6f 6e 64 20 6f 72 20 74  .the second or t
32bc0 68 69 72 64 20 72 75 6c 65 73 20 61 62 6f 76 65  hird rules above
32bd0 2e 20 49 66 20 61 20 6d 61 74 63 68 20 69 73 20  . If a match is 
32be0 66 6f 75 6e 64 2c 20 74 68 65 20 73 65 61 72 63  found, the searc
32bf0 68 20 73 74 6f 70 73 20 61 6e 64 0a 74 68 65 20  h stops and.the 
32c00 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 68 61  expression is ha
32c10 6e 64 6c 65 64 20 61 73 20 61 6e 20 61 6c 69 61  ndled as an alia
32c20 73 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74  s for the result
32c30 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 74 20   column that it 
32c40 68 61 73 20 62 65 65 6e 0a 6d 61 74 63 68 65 64  has been.matched
32c50 20 61 67 61 69 6e 73 74 2e 20 4f 74 68 65 72 77   against. Otherw
32c60 69 73 65 2c 20 74 68 65 20 6e 65 78 74 20 53 45  ise, the next SE
32c70 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69 67 68  LECT to the righ
32c80 74 20 69 73 20 74 72 69 65 64 2c 20 61 6e 64 20  t is tried, and 
32c90 73 6f 20 6f 6e 2e 29 5e 0a 5e 49 66 20 6e 6f 20  so on.)^.^If no 
32ca0 6d 61 74 63 68 69 6e 67 20 65 78 70 72 65 73 73  matching express
32cb0 69 6f 6e 20 63 61 6e 20 62 65 20 66 6f 75 6e 64  ion can be found
32cc0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 63   in the result c
32cd0 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 79 0a 63 6f  olumns of any.co
32ce0 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54  nstituent SELECT
32cf0 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  , it is an error
32d00 2e 20 5e 45 61 63 68 20 74 65 72 6d 20 6f 66 20  . ^Each term of 
32d10 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
32d20 75 73 65 20 69 73 0a 70 72 6f 63 65 73 73 65 64  use is.processed
32d30 20 73 65 70 61 72 61 74 65 6c 79 20 61 6e 64 20   separately and 
32d40 6d 61 79 20 62 65 20 6d 61 74 63 68 65 64 20 61  may be matched a
32d50 67 61 69 6e 73 74 20 72 65 73 75 6c 74 20 63 6f  gainst result co
32d60 6c 75 6d 6e 73 20 66 72 6f 6d 20 64 69 66 66 65  lumns from diffe
32d70 72 65 6e 74 0a 53 45 4c 45 43 54 20 73 74 61 74  rent.SELECT stat
32d80 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
32d90 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63  mpound.</p>..<tc
32da0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69  l>hd_fragment li
32db0 6d 69 74 6f 66 66 73 65 74 20 7b 4c 49 4d 49 54  mitoffset {LIMIT
32dc0 7d 20 7b 4f 46 46 53 45 54 7d 3c 2f 74 63 6c 3e  } {OFFSET}</tcl>
32dd0 0a 3c 68 33 3e 54 68 65 20 4c 49 4d 49 54 20 63  .<h3>The LIMIT c
32de0 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  lause</h3>..<p>^
32df0 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  The LIMIT clause
32e00 20 69 73 20 75 73 65 64 20 74 6f 20 70 6c 61 63   is used to plac
32e10 65 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64  e an upper bound
32e20 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
32e30 66 20 72 6f 77 73 0a 72 65 74 75 72 6e 65 64 20  f rows.returned 
32e40 62 79 20 74 68 65 20 65 6e 74 69 72 65 20 53 45  by the entire SE
32e50 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
32e60 0a 3c 70 3e 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f  .<p>^In a [compo
32e70 75 6e 64 20 53 45 4c 45 43 54 5d 2c 20 6f 6e 6c  und SELECT], onl
32e80 79 20 74 68 65 0a 6c 61 73 74 20 6f 72 20 72 69  y the.last or ri
32e90 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65  ght-most [simple
32ea0 20 53 45 4c 45 43 54 5d 20 6d 61 79 20 63 6f 6e   SELECT] may con
32eb0 74 61 69 6e 20 61 20 4c 49 4d 49 54 20 63 6c 61  tain a LIMIT cla
32ec0 75 73 65 2e 20 20 0a 5e 49 6e 20 61 20 5b 63 6f  use.  .^In a [co
32ed0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2c 20  mpound SELECT], 
32ee0 0a 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73  .the LIMIT claus
32ef0 65 20 61 70 70 6c 69 65 73 20 74 6f 20 74 68 65  e applies to the
32f00 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e 64   entire compound
32f10 2c 20 6e 6f 74 20 6a 75 73 74 20 74 68 65 20 66  , not just the f
32f20 69 6e 61 6c 20 53 45 4c 45 43 54 2e 0a 5e 49 66  inal SELECT..^If
32f30 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20   the right-most 
32f40 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20  [simple SELECT] 
32f50 69 73 20 61 20 5b 56 41 4c 55 45 53 20 63 6c 61  is a [VALUES cla
32f60 75 73 65 5d 20 74 68 65 6e 20 6e 6f 20 4c 49 4d  use] then no LIM
32f70 49 54 20 63 6c 61 75 73 65 0a 69 73 20 61 6c 6c  IT clause.is all
32f80 6f 77 65 64 2e 0a 0a 3c 70 3e 5e 41 6e 79 20 73  owed...<p>^Any s
32f90 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e  calar expression
32fa0 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20   may be used in 
32fb0 74 68 65 20 0a 4c 49 4d 49 54 20 63 6c 61 75 73  the .LIMIT claus
32fc0 65 2c 20 73 6f 20 6c 6f 6e 67 20 61 73 20 69 74  e, so long as it
32fd0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 6e   evaluates to an
32fe0 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 76 61   integer or a va
32ff0 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 0a  lue that can be.
33000 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65  losslessly conve
33010 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
33020 65 72 2e 20 5e 49 66 20 74 68 65 20 65 78 70 72  er. ^If the expr
33030 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
33040 20 74 6f 20 61 20 4e 55 4c 4c 20 0a 76 61 6c 75   to a NULL .valu
33050 65 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 76  e or any other v
33060 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74  alue that cannot
33070 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63   be losslessly c
33080 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
33090 6e 74 65 67 65 72 2c 20 61 6e 0a 65 72 72 6f 72  nteger, an.error
330a0 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 49   is returned. ^I
330b0 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72  f the LIMIT expr
330c0 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
330d0 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76   to a negative v
330e0 61 6c 75 65 2c 0a 74 68 65 6e 20 74 68 65 72 65  alue,.then there
330f0 20 69 73 20 6e 6f 20 75 70 70 65 72 20 62 6f 75   is no upper bou
33100 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72  nd on the number
33110 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65   of rows returne
33120 64 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74  d. ^Otherwise, t
33130 68 65 0a 53 45 4c 45 43 54 20 72 65 74 75 72 6e  he.SELECT return
33140 73 20 74 68 65 20 66 69 72 73 74 20 4e 20 72 6f  s the first N ro
33150 77 73 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74  ws of its result
33160 20 73 65 74 20 6f 6e 6c 79 2c 20 77 68 65 72 65   set only, where
33170 20 4e 20 69 73 20 74 68 65 20 76 61 6c 75 65 0a   N is the value.
33180 74 68 61 74 20 74 68 65 20 4c 49 4d 49 54 20 65  that the LIMIT e
33190 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
331a0 74 65 73 20 74 6f 2e 20 5e 4f 72 2c 20 69 66 20  tes to. ^Or, if 
331b0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
331c0 6d 65 6e 74 20 77 6f 75 6c 64 0a 72 65 74 75 72  ment would.retur
331d0 6e 20 6c 65 73 73 20 74 68 61 6e 20 4e 20 72 6f  n less than N ro
331e0 77 73 20 77 69 74 68 6f 75 74 20 61 20 4c 49 4d  ws without a LIM
331f0 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  IT clause, then 
33200 74 68 65 20 65 6e 74 69 72 65 20 72 65 73 75 6c  the entire resul
33210 74 20 73 65 74 20 69 73 0a 72 65 74 75 72 6e 65  t set is.returne
33220 64 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 65 78 70  d. ..<p>^The exp
33230 72 65 73 73 69 6f 6e 20 61 74 74 61 63 68 65 64  ression attached
33240 20 74 6f 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c   to the optional
33250 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20 74   OFFSET clause t
33260 68 61 74 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 61  hat may follow a
33270 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 75  .LIMIT clause mu
33280 73 74 20 61 6c 73 6f 20 65 76 61 6c 75 61 74 65  st also evaluate
33290 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   to an integer, 
332a0 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  or a value that 
332b0 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c  can be.losslessl
332c0 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
332d0 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 61  n integer. ^If a
332e0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 68 61 73  n expression has
332f0 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73   an OFFSET claus
33300 65 2c 0a 74 68 65 6e 20 74 68 65 20 66 69 72 73  e,.then the firs
33310 74 20 4d 20 72 6f 77 73 20 61 72 65 20 6f 6d 69  t M rows are omi
33320 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  tted from the re
33330 73 75 6c 74 20 73 65 74 20 72 65 74 75 72 6e 65  sult set returne
33340 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 0a  d by the SELECT.
33350 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68  statement and th
33360 65 20 6e 65 78 74 20 4e 20 72 6f 77 73 20 61 72  e next N rows ar
33370 65 20 72 65 74 75 72 6e 65 64 2c 20 77 68 65 72  e returned, wher
33380 65 20 4d 20 61 6e 64 20 4e 20 61 72 65 20 74 68  e M and N are th
33390 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a 74 68  e values that.th
333a0 65 20 4f 46 46 53 45 54 20 61 6e 64 20 4c 49 4d  e OFFSET and LIM
333b0 49 54 20 63 6c 61 75 73 65 73 20 65 76 61 6c 75  IT clauses evalu
333c0 61 74 65 20 74 6f 2c 20 72 65 73 70 65 63 74 69  ate to, respecti
333d0 76 65 6c 79 2e 20 5e 4f 72 2c 20 69 66 20 74 68  vely. ^Or, if th
333e0 65 20 53 45 4c 45 43 54 0a 77 6f 75 6c 64 20 72  e SELECT.would r
333f0 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e 20  eturn less than 
33400 4d 2b 4e 20 72 6f 77 73 20 69 66 20 69 74 20 64  M+N rows if it d
33410 69 64 20 6e 6f 74 20 68 61 76 65 20 61 20 4c 49  id not have a LI
33420 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  MIT clause, then
33430 20 74 68 65 0a 66 69 72 73 74 20 4d 20 72 6f 77   the.first M row
33440 73 20 61 72 65 20 73 6b 69 70 70 65 64 20 61 6e  s are skipped an
33450 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20  d the remaining 
33460 72 6f 77 73 20 28 69 66 20 61 6e 79 29 20 61 72  rows (if any) ar
33470 65 20 72 65 74 75 72 6e 65 64 2e 20 5e 49 66 20  e returned. ^If 
33480 74 68 65 0a 4f 46 46 53 45 54 20 63 6c 61 75 73  the.OFFSET claus
33490 65 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  e evaluates to a
334a0 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c   negative value,
334b0 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 72 65   the results are
334c0 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 66 20   the same as if 
334d0 69 74 0a 68 61 64 20 65 76 61 6c 75 61 74 65 64  it.had evaluated
334e0 20 74 6f 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 49   to zero...<p>^I
334f0 6e 73 74 65 61 64 20 6f 66 20 61 20 73 65 70 61  nstead of a sepa
33500 72 61 74 65 20 4f 46 46 53 45 54 20 63 6c 61 75  rate OFFSET clau
33510 73 65 2c 20 74 68 65 20 4c 49 4d 49 54 20 63 6c  se, the LIMIT cl
33520 61 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79  ause may specify
33530 20 74 77 6f 0a 73 63 61 6c 61 72 20 65 78 70 72   two.scalar expr
33540 65 73 73 69 6f 6e 73 20 73 65 70 61 72 61 74 65  essions separate
33550 64 20 62 79 20 61 20 63 6f 6d 6d 61 2e 20 5e 49  d by a comma. ^I
33560 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65  n this case, the
33570 20 66 69 72 73 74 20 65 78 70 72 65 73 73 69 6f   first expressio
33580 6e 0a 69 73 20 75 73 65 64 20 61 73 20 74 68 65  n.is used as the
33590 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69   OFFSET expressi
335a0 6f 6e 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e  on and the secon
335b0 64 20 61 73 20 74 68 65 20 4c 49 4d 49 54 20 65  d as the LIMIT e
335c0 78 70 72 65 73 73 69 6f 6e 2e 0a 54 68 69 73 20  xpression..This 
335d0 69 73 20 63 6f 75 6e 74 65 72 2d 69 6e 74 75 69  is counter-intui
335e0 74 69 76 65 2c 20 61 73 20 77 68 65 6e 20 75 73  tive, as when us
335f0 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20 63  ing the OFFSET c
33600 6c 61 75 73 65 20 74 68 65 20 73 65 63 6f 6e 64  lause the second
33610 20 6f 66 0a 74 68 65 20 74 77 6f 20 65 78 70 72   of.the two expr
33620 65 73 73 69 6f 6e 73 20 69 73 20 74 68 65 20 4f  essions is the O
33630 46 46 53 45 54 20 61 6e 64 20 74 68 65 20 66 69  FFSET and the fi
33640 72 73 74 20 74 68 65 20 4c 49 4d 49 54 2e 20 0a  rst the LIMIT. .
33650 54 68 69 73 20 72 65 76 65 72 73 61 6c 20 6f 66  This reversal of
33660 20 74 68 65 20 6f 66 66 73 65 74 20 61 6e 64 20   the offset and 
33670 6c 69 6d 69 74 20 69 73 20 69 6e 74 65 6e 74 69  limit is intenti
33680 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61 78 69 6d 69  onal.- it maximi
33690 7a 65 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  zes compatibilit
336a0 79 20 77 69 74 68 20 6f 74 68 65 72 20 53 51 4c  y with other SQL
336b0 20 64 61 74 61 62 61 73 65 20 73 79 73 74 65 6d   database system
336c0 73 2e 0a 48 6f 77 65 76 65 72 2c 20 74 6f 20 61  s..However, to a
336d0 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20  void confusion, 
336e0 70 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20  programmers are 
336f0 73 74 72 6f 6e 67 6c 79 20 65 6e 63 6f 75 72 61  strongly encoura
33700 67 65 64 20 74 6f 20 75 73 65 0a 74 68 65 20 66  ged to use.the f
33710 6f 72 6d 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  orm of the LIMIT
33720 20 63 6c 61 75 73 65 20 74 68 61 74 20 75 73 65   clause that use
33730 73 20 74 68 65 20 22 4f 46 46 53 45 54 22 20 6b  s the "OFFSET" k
33740 65 79 77 6f 72 64 20 61 6e 64 20 61 76 6f 69 64  eyword and avoid
33750 0a 75 73 69 6e 67 20 61 20 4c 49 4d 49 54 20 63  .using a LIMIT c
33760 6c 61 75 73 65 20 77 69 74 68 20 61 20 63 6f 6d  lause with a com
33770 6d 61 2d 73 65 70 61 72 61 74 65 64 20 6f 66 66  ma-separated off
33780 73 65 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  set...<tcl>hd_fr
33790 61 67 6d 65 6e 74 20 76 61 6c 75 65 73 20 7b 56  agment values {V
337a0 41 4c 55 45 53 20 63 6c 61 75 73 65 7d 20 56 41  ALUES clause} VA
337b0 4c 55 45 53 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  LUES</tcl>.<h3>T
337c0 68 65 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  he VALUES clause
337d0 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20  </h3>..<p>^(The 
337e0 70 68 72 61 73 65 20 22 56 41 4c 55 45 53 28 3c  phrase "VALUES(<
337f0 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f 69 3e 29  i>expr-list</i>)
33800 22 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65  " means the same
33810 20 74 68 69 6e 67 0a 61 73 20 22 53 45 4c 45 43   thing.as "SELEC
33820 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f  T <i>expr-list</
33830 69 3e 22 2e 29 5e 20 20 5e 28 54 68 65 20 70 68  i>".)^  ^(The ph
33840 72 61 73 65 0a 22 56 41 4c 55 45 53 28 3c 69 3e  rase."VALUES(<i>
33850 65 78 70 72 2d 6c 69 73 74 2d 31 3c 2f 69 3e 29  expr-list-1</i>)
33860 2c 2e 2e 2e 2c 28 3c 69 3e 65 78 70 72 2d 6c 69  ,...,(<i>expr-li
33870 73 74 2d 4e 3c 2f 69 3e 29 22 20 6d 65 61 6e 73  st-N</i>)" means
33880 20 74 68 65 20 73 61 6d 65 0a 74 68 69 6e 67 20   the same.thing 
33890 61 73 20 22 53 45 4c 45 43 54 20 3c 69 3e 65 78  as "SELECT <i>ex
338a0 70 72 2d 6c 69 73 74 2d 31 3c 2f 69 3e 20 55 4e  pr-list-1</i> UN
338b0 49 4f 4e 20 41 4c 4c 20 2e 2e 2e 20 55 4e 49 4f  ION ALL ... UNIO
338c0 4e 20 41 4c 4c 0a 53 45 4c 45 43 54 20 3c 69 3e  N ALL.SELECT <i>
338d0 65 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 22  expr-list-N</i>"
338e0 2e 29 5e 20 20 42 6f 74 68 20 66 6f 72 6d 73 20  .)^  Both forms 
338f0 61 72 65 20 74 68 65 20 73 61 6d 65 2c 20 65 78  are the same, ex
33900 63 65 70 74 20 74 68 61 74 0a 74 68 65 20 6e 75  cept that.the nu
33910 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73  mber of SELECT s
33920 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 61 20 63  tatements in a c
33930 6f 6d 70 6f 75 6e 64 20 69 73 20 6c 69 6d 69 74  ompound is limit
33940 65 64 20 62 79 0a 5b 53 51 4c 49 54 45 5f 4c 49  ed by.[SQLITE_LI
33950 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c  MIT_COMPOUND_SEL
33960 45 43 54 5d 20 77 68 65 72 65 61 73 20 74 68 65  ECT] whereas the
33970 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
33980 69 6e 20 61 0a 56 41 4c 55 45 53 20 63 6c 61 75  in a.VALUES clau
33990 73 65 20 68 61 73 20 6e 6f 20 61 72 62 69 74 72  se has no arbitr
339a0 61 72 79 20 6c 69 6d 69 74 2e 0a 0a 3c 70 3e 54  ary limit...<p>T
339b0 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 72 65  here are some re
339c0 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68  strictions on th
339d0 65 20 75 73 65 20 6f 66 20 61 20 56 41 4c 55 45  e use of a VALUE
339e0 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 61 72  S clause that ar
339f0 65 0a 6e 6f 74 20 73 68 6f 77 6e 20 6f 6e 20 74  e.not shown on t
33a00 68 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  he syntax diagra
33a10 6d 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  ms:..<ul>.<li><p
33a20 3e 0a 5e 41 20 56 41 4c 55 45 53 20 63 6c 61 75  >.^A VALUES clau
33a30 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 6c  se cannot be fol
33a40 6c 6f 77 65 64 20 62 79 20 5b 4f 52 44 45 52 20  lowed by [ORDER 
33a50 42 59 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41  BY]...<li><p>.^A
33a60 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 63   VALUES clause c
33a70 61 6e 6e 6f 74 20 62 65 20 66 6f 6c 6c 6f 77 65  annot be followe
33a80 64 20 62 79 20 5b 4c 49 4d 49 54 5d 2e 0a 3c 2f  d by [LIMIT]..</
33a90 75 6c 3e 0a 0a 0a 3c 68 33 3e 54 68 65 20 57 49  ul>...<h3>The WI
33aa0 54 48 20 43 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a  TH Clause</h3>..
33ab0 3c 70 3e 5e 53 45 4c 45 43 54 20 73 74 61 74 65  <p>^SELECT state
33ac0 6d 65 6e 74 73 20 6d 61 79 20 62 65 20 6f 70 74  ments may be opt
33ad0 69 6f 6e 61 6c 6c 79 20 70 72 65 63 65 64 65 64  ionally preceded
33ae0 20 62 79 20 61 20 73 69 6e 67 6c 65 0a 5b 57 49   by a single.[WI
33af0 54 48 20 63 6c 61 75 73 65 5d 20 74 68 61 74 20  TH clause] that 
33b00 64 65 66 69 6e 65 73 20 6f 6e 65 20 6f 72 20 6d  defines one or m
33b10 6f 72 65 20 5b 63 6f 6d 6d 6f 6e 20 74 61 62 6c  ore [common tabl
33b20 65 20 65 78 70 72 65 73 73 69 6f 6e 73 5d 0a 66  e expressions].f
33b30 6f 72 20 75 73 65 20 77 69 74 68 69 6e 20 74 68  or use within th
33b40 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
33b50 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  nt...<tcl>hd_fra
33b60 67 6d 65 6e 74 20 74 61 62 66 75 6e 63 31 20 7b  gment tabfunc1 {
33b70 74 61 62 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e  table-valued fun
33b80 63 74 69 6f 6e 73 20 69 6e 20 74 68 65 20 46 52  ctions in the FR
33b90 4f 4d 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e  OM clause}</tcl>
33ba0 0a 3c 68 33 3e 54 61 62 6c 65 2d 76 61 6c 75 65  .<h3>Table-value
33bb0 64 20 46 75 6e 63 74 69 6f 6e 73 20 49 6e 20 54  d Functions In T
33bc0 68 65 20 46 52 4f 4d 20 43 6c 61 75 73 65 3c 2f  he FROM Clause</
33bd0 68 33 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72 74 75  h3>..<p>A [virtu
33be0 61 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63  al table] that c
33bf0 6f 6e 74 61 69 6e 73 20 5b 68 69 64 64 65 6e 20  ontains [hidden 
33c00 63 6f 6c 75 6d 6e 73 5d 20 63 61 6e 20 62 65 20  columns] can be 
33c10 75 73 65 64 20 6c 69 6b 65 0a 61 20 5b 74 61 62  used like.a [tab
33c20 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e 63 74 69  le-valued functi
33c30 6f 6e 5d 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  on] in the FROM 
33c40 63 6c 61 75 73 65 2e 20 20 54 68 65 20 61 72 67  clause.  The arg
33c50 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 0a 74 61  uments to the.ta
33c60 62 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e 63 74  ble-valued funct
33c70 69 6f 6e 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ion become const
33c80 72 61 69 6e 74 73 20 6f 6e 20 74 68 65 20 48 49  raints on the HI
33c90 44 44 45 4e 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a  DDEN columns of.
33ca0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
33cb0 65 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 20 69  e.  Additional i
33cc0 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 20 62  nformation can b
33cd0 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 5b  e found in the.[
33ce0 74 61 62 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e  table-valued fun
33cf0 63 74 69 6f 6e 73 7c 76 69 72 74 75 61 6c 20 74  ctions|virtual t
33d00 61 62 6c 65 20 64 6f 63 75 6d 65 6e 74 61 74 69  able documentati
33d10 6f 6e 5d 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  on]...<tcl>.####
33d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33d60 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
33d70 6f 6e 20 55 50 44 41 54 45 20 75 70 64 61 74 65  on UPDATE update
33d80 20 7b 55 50 44 41 54 45 20 2a 55 50 44 41 54 45   {UPDATE *UPDATE
33d90 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  s}..RecursiveBub
33da0 62 6c 65 44 69 61 67 72 61 6d 20 75 70 64 61 74  bleDiagram updat
33db0 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  e-stmt.</tcl>..<
33dc0 70 3e 5e 41 6e 20 55 50 44 41 54 45 20 73 74 61  p>^An UPDATE sta
33dd0 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74  tement is used t
33de0 6f 20 6d 6f 64 69 66 79 20 61 20 73 75 62 73 65  o modify a subse
33df0 74 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  t of the values 
33e00 73 74 6f 72 65 64 20 69 6e 20 0a 7a 65 72 6f 20  stored in .zero 
33e10 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20  or more rows of 
33e20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
33e30 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  le identified by
33e40 20 74 68 65 20 0a 5b 71 75 61 6c 69 66 69 65 64   the .[qualified
33e50 2d 74 61 62 6c 65 2d 6e 61 6d 65 5d 20 73 70 65  -table-name] spe
33e60 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
33e70 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
33e80 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20  tement...<p>^If 
33e90 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
33ea0 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 68 61  ment does not ha
33eb0 76 65 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  ve a WHERE claus
33ec0 65 2c 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74  e, all rows in t
33ed0 68 65 0a 74 61 62 6c 65 20 61 72 65 20 6d 6f 64  he.table are mod
33ee0 69 66 69 65 64 20 62 79 20 74 68 65 20 55 50 44  ified by the UPD
33ef0 41 54 45 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ATE. ^Otherwise,
33f00 20 74 68 65 20 55 50 44 41 54 45 20 61 66 66 65   the UPDATE affe
33f10 63 74 73 20 6f 6e 6c 79 20 74 68 6f 73 65 0a 72  cts only those.r
33f20 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
33f30 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 0a 5b  e WHERE clause.[
33f40 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
33f50 6f 6e 7c 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  on|boolean expre
33f60 73 73 69 6f 6e 20 69 73 20 74 72 75 65 5d 2e 20  ssion is true]. 
33f70 5e 49 74 20 69 73 20 6e 6f 74 20 61 6e 20 65 72  ^It is not an er
33f80 72 6f 72 20 69 66 20 74 68 65 0a 57 48 45 52 45  ror if the.WHERE
33f90 20 63 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f 74   clause does not
33fa0 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74 72 75   evaluate to tru
33fb0 65 20 66 6f 72 20 61 6e 79 20 72 6f 77 20 69 6e  e for any row in
33fc0 20 74 68 65 20 74 61 62 6c 65 20 2d 20 74 68 69   the table - thi
33fd0 73 20 6a 75 73 74 0a 6d 65 61 6e 73 20 74 68 61  s just.means tha
33fe0 74 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  t the UPDATE sta
33ff0 74 65 6d 65 6e 74 20 61 66 66 65 63 74 73 20 7a  tement affects z
34000 65 72 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e 54 68  ero rows...<p>Th
34010 65 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 20  e modifications 
34020 6d 61 64 65 20 74 6f 20 65 61 63 68 20 72 6f 77  made to each row
34030 20 61 66 66 65 63 74 65 64 20 62 79 20 61 6e 20   affected by an 
34040 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
34050 20 61 72 65 0a 64 65 74 65 72 6d 69 6e 65 64 20   are.determined 
34060 62 79 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61  by the list of a
34070 73 73 69 67 6e 6d 65 6e 74 73 20 66 6f 6c 6c 6f  ssignments follo
34080 77 69 6e 67 20 74 68 65 20 53 45 54 20 6b 65 79  wing the SET key
34090 77 6f 72 64 2e 20 45 61 63 68 0a 61 73 73 69 67  word. Each.assig
340a0 6e 6d 65 6e 74 20 73 70 65 63 69 66 69 65 73 20  nment specifies 
340b0 61 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e  a <yyterm>column
340c0 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 74  -name</yyterm> t
340d0 6f 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68  o the left of th
340e0 65 20 0a 65 71 75 61 6c 73 20 73 69 67 6e 20 61  e .equals sign a
340f0 6e 64 20 61 20 73 63 61 6c 61 72 20 65 78 70 72  nd a scalar expr
34100 65 73 73 69 6f 6e 20 74 6f 20 74 68 65 20 72 69  ession to the ri
34110 67 68 74 2e 20 0a 5e 46 6f 72 20 65 61 63 68 20  ght. .^For each 
34120 61 66 66 65 63 74 65 64 20 72 6f 77 2c 20 74 68  affected row, th
34130 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 0a  e named columns.
34140 61 72 65 20 73 65 74 20 74 6f 20 74 68 65 20 76  are set to the v
34150 61 6c 75 65 73 20 66 6f 75 6e 64 20 62 79 20 65  alues found by e
34160 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 63 6f  valuating the co
34170 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 63 61 6c  rresponding scal
34180 61 72 20 0a 65 78 70 72 65 73 73 69 6f 6e 73 2e  ar .expressions.
34190 20 5e 49 66 20 61 20 73 69 6e 67 6c 65 20 63 6f   ^If a single co
341a0 6c 75 6d 6e 2d 6e 61 6d 65 20 61 70 70 65 61 72  lumn-name appear
341b0 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  s more than once
341c0 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0a   in the list of.
341d0 61 73 73 69 67 6e 6d 65 6e 74 20 65 78 70 72 65  assignment expre
341e0 73 73 69 6f 6e 73 2c 20 61 6c 6c 20 62 75 74 20  ssions, all but 
341f0 74 68 65 20 72 69 67 68 74 6d 6f 73 74 20 6f 63  the rightmost oc
34200 63 75 72 72 65 6e 63 65 20 69 73 20 69 67 6e 6f  currence is igno
34210 72 65 64 2e 20 5e 43 6f 6c 75 6d 6e 73 0a 74 68  red. ^Columns.th
34220 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72  at do not appear
34230 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20   in the list of 
34240 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20  assignments are 
34250 6c 65 66 74 20 75 6e 6d 6f 64 69 66 69 65 64 2e  left unmodified.
34260 20 5e 54 68 65 20 73 63 61 6c 61 72 0a 65 78 70   ^The scalar.exp
34270 72 65 73 73 69 6f 6e 73 20 6d 61 79 20 72 65 66  ressions may ref
34280 65 72 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66  er to columns of
34290 20 74 68 65 20 72 6f 77 20 62 65 69 6e 67 20 75   the row being u
342a0 70 64 61 74 65 64 2e 20 5e 49 6e 20 74 68 69 73  pdated. ^In this
342b0 20 63 61 73 65 20 61 6c 6c 0a 73 63 61 6c 61 72   case all.scalar
342c0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65   expressions are
342d0 20 65 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72   evaluated befor
342e0 65 20 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74  e any assignment
342f0 73 20 61 72 65 20 6d 61 64 65 2e 0a 0a 3c 70 3e  s are made...<p>
34300 42 65 67 69 6e 6e 69 6e 67 20 69 6e 20 53 51 4c  Beginning in SQL
34310 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 31  ite [version 3.1
34320 35 2e 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e  5.0] ([dateof:3.
34330 31 35 2e 30 5d 29 2c 20 61 6e 20 61 73 73 69 67  15.0]), an assig
34340 6e 6d 65 6e 74 20 69 6e 0a 74 68 65 20 53 45 54  nment in.the SET
34350 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20 61   clause can be a
34360 20 0a 5b 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 2d 6c   .[column-name-l
34370 69 73 74 7c 70 61 72 65 6e 74 68 65 73 69 7a 65  ist|parenthesize
34380 64 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e  d list of column
34390 20 6e 61 6d 65 73 5d 20 6f 6e 20 74 68 65 20 6c   names] on the l
343a0 65 66 74 20 61 6e 64 20 61 0a 5b 72 6f 77 20 76  eft and a.[row v
343b0 61 6c 75 65 5d 20 6f 66 20 74 68 65 20 73 61 6d  alue] of the sam
343c0 65 20 73 69 7a 65 20 6f 6e 20 74 68 65 20 72 69  e size on the ri
343d0 67 68 74 2e 0a 0a 0a 3c 70 3e 5e 54 68 65 20 6f  ght....<p>^The o
343e0 70 74 69 6f 6e 61 6c 20 22 4f 52 20 3c 69 3e 61  ptional "OR <i>a
343f0 63 74 69 6f 6e 3c 2f 69 3e 22 20 63 6f 6e 66 6c  ction</i>" confl
34400 69 63 74 20 63 6c 61 75 73 65 20 74 68 61 74 20  ict clause that 
34410 66 6f 6c 6c 6f 77 73 20 74 68 65 0a 55 50 44 41  follows the.UPDA
34420 54 45 20 6b 65 79 77 6f 72 64 20 61 6c 6c 6f 77  TE keyword allow
34430 73 20 74 68 65 20 75 73 65 72 20 74 6f 20 6e 6f  s the user to no
34440 6d 69 6e 61 74 65 20 61 20 73 70 65 63 69 66 69  minate a specifi
34450 63 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e  c.constraint con
34460 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
34470 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73   algorithm to us
34480 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e  e during this on
34490 65 20 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64  e UPDATE command
344a0 2e 0a 52 65 66 65 72 20 74 6f 20 74 68 65 20 73  ..Refer to the s
344b0 65 63 74 69 6f 6e 20 65 6e 74 69 74 6c 65 64 20  ection entitled 
344c0 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f  [ON CONFLICT] fo
344d0 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
344e0 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 52  ormation...<h3>R
344f0 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 55  estrictions on U
34500 50 44 41 54 45 20 53 74 61 74 65 6d 65 6e 74 73  PDATE Statements
34510 20 57 69 74 68 69 6e 20 43 52 45 41 54 45 20 54   Within CREATE T
34520 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e  RIGGER</h3>..<p>
34530 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64  The following ad
34540 64 69 74 69 6f 6e 61 6c 20 73 79 6e 74 61 78 20  ditional syntax 
34550 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70  restrictions app
34560 6c 79 20 74 6f 20 55 50 44 41 54 45 20 73 74 61  ly to UPDATE sta
34570 74 65 6d 65 6e 74 73 20 74 68 61 74 0a 6f 63 63  tements that.occ
34580 75 72 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f  ur within the bo
34590 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54 45 20  dy of a [CREATE 
345a0 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
345b0 6e 74 2e 20 20 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  nt.  ..<ul>.  <l
345c0 69 3e 3c 70 3e 5e 54 68 65 20 3c 79 79 74 65 72  i><p>^The <yyter
345d0 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79  m>table-name</yy
345e0 74 65 72 6d 3e 20 73 70 65 63 69 66 69 65 64 20  term> specified 
345f0 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 55 50  as part of an UP
34600 44 41 54 45 20 0a 20 20 20 20 20 20 73 74 61 74  DATE .      stat
34610 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20  ement within.   
34620 20 20 20 61 20 74 72 69 67 67 65 72 20 62 6f 64     a trigger bod
34630 79 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c  y must be unqual
34640 69 66 69 65 64 2e 20 5e 28 49 6e 20 6f 74 68 65  ified. ^(In othe
34650 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20  r words, the.   
34660 20 20 20 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d     <i>schema-nam
34670 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72  e</i><b>.</b> pr
34680 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c  efix on the tabl
34690 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 55 50  e name of the UP
346a0 44 41 54 45 20 69 73 0a 20 20 20 20 20 20 6e 6f  DATE is.      no
346b0 74 20 61 6c 6c 6f 77 65 64 20 77 69 74 68 69 6e  t allowed within
346c0 20 74 72 69 67 67 65 72 73 2e 29 5e 20 5e 55 6e   triggers.)^ ^Un
346d0 6c 65 73 73 20 74 68 65 20 74 61 62 6c 65 20 74  less the table t
346e0 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
346f0 67 65 72 0a 20 20 20 20 20 20 69 73 20 61 74 74  ger.      is att
34700 61 63 68 65 64 20 69 73 20 69 6e 20 74 68 65 20  ached is in the 
34710 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74  TEMP database, t
34720 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 75  he table being u
34730 70 64 61 74 65 64 20 62 79 20 74 68 65 0a 20 20  pdated by the.  
34740 20 20 20 20 74 72 69 67 67 65 72 20 70 72 6f 67      trigger prog
34750 72 61 6d 20 6d 75 73 74 20 72 65 73 69 64 65 20  ram must reside 
34760 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  in the same data
34770 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49 66 20  base as it. ^If 
34780 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20 20 20  the table.      
34790 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
347a0 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64  gger is attached
347b0 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20   is in the TEMP 
347c0 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74  database, then t
347d0 68 65 0a 20 20 20 20 20 20 75 6e 71 75 61 6c 69  he.      unquali
347e0 66 69 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  fied name of the
347f0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64   table being upd
34800 61 74 65 64 20 69 73 20 72 65 73 6f 6c 76 65 64  ated is resolved
34810 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
34820 0a 20 20 20 20 20 20 61 73 20 69 74 20 69 73 20  .      as it is 
34830 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20  for a top-level 
34840 73 74 61 74 65 6d 65 6e 74 20 28 62 79 20 73 65  statement (by se
34850 61 72 63 68 69 6e 67 20 66 69 72 73 74 20 74 68  arching first th
34860 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c  e TEMP database,
34870 0a 20 20 20 20 20 20 74 68 65 6e 20 74 68 65 20  .      then the 
34880 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74  main database, t
34890 68 65 6e 20 61 6e 79 20 6f 74 68 65 72 20 64 61  hen any other da
348a0 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 20 6f  tabases in the o
348b0 72 64 65 72 20 74 68 65 79 20 77 65 72 65 0a 20  rder they were. 
348c0 20 20 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a       attached)..
348d0 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 49  .  <li><p>^The I
348e0 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f  NDEXED BY and NO
348f0 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65  T INDEXED clause
34900 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65  s are not allowe
34910 64 20 6f 6e 20 55 50 44 41 54 45 0a 20 20 20 20  d on UPDATE.    
34920 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74    statements wit
34930 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70  hin triggers.</p
34940 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65  >..  <li><p>^The
34950 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52   LIMIT and ORDER
34960 20 42 59 20 63 6c 61 75 73 65 73 20 66 6f 72 20   BY clauses for 
34970 55 50 44 41 54 45 20 61 72 65 20 75 6e 73 75 70  UPDATE are unsup
34980 70 6f 72 74 65 64 20 77 69 74 68 69 6e 0a 20 20  ported within.  
34990 20 20 20 20 74 72 69 67 67 65 72 73 2c 20 72 65      triggers, re
349a0 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
349b0 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
349c0 6f 6e 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c  ons used to buil
349d0 64 20 53 51 4c 69 74 65 2e 0a 3c 2f 75 6c 3e 0a  d SQLite..</ul>.
349e0 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49  .<h3>Optional LI
349f0 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59  MIT and ORDER BY
34a00 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c   Clauses</h3>..<
34a10 70 3e 5e 28 49 66 20 53 51 4c 69 74 65 20 69 73  p>^(If SQLite is
34a20 20 62 75 69 6c 74 20 77 69 74 68 20 74 68 65 20   built with the 
34a30 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  [SQLITE_ENABLE_U
34a40 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
34a50 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  IT].compile-time
34a60 20 6f 70 74 69 6f 6e 20 74 68 65 6e 20 74 68 65   option then the
34a70 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 55   syntax of the U
34a80 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
34a90 69 73 20 65 78 74 65 6e 64 65 64 0a 77 69 74 68  is extended.with
34aa0 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20   optional ORDER 
34ab0 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61  BY and LIMIT cla
34ac0 75 73 65 73 29 5e 20 61 73 20 66 6f 6c 6c 6f 77  uses)^ as follow
34ad0 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62  s:</p>..<tcl>Bub
34ae0 62 6c 65 44 69 61 67 72 61 6d 20 75 70 64 61 74  bleDiagram updat
34af0 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f  e-stmt-limited</
34b00 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20  tcl>..<p>^If an 
34b10 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
34b20 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63 6c 61   has a LIMIT cla
34b30 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d  use, the maximum
34b40 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
34b50 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 75 70 64  that.will be upd
34b60 61 74 65 64 20 69 73 20 66 6f 75 6e 64 20 62 79  ated is found by
34b70 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
34b80 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70  accompanying exp
34b90 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61 73 74  ression and cast
34ba0 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74  ing.it to an int
34bb0 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 41 20 6e  eger value. ^A n
34bc0 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 69 73  egative value is
34bd0 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
34be0 22 6e 6f 20 6c 69 6d 69 74 22 2e 0a 0a 3c 70 3e  "no limit"...<p>
34bf0 5e 49 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78  ^If the LIMIT ex
34c00 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
34c10 65 73 20 74 6f 20 6e 6f 6e 2d 6e 65 67 61 74 69  es to non-negati
34c20 76 65 20 76 61 6c 75 65 20 3c 69 3e 4e 3c 2f 69  ve value <i>N</i
34c30 3e 20 61 6e 64 20 74 68 65 0a 55 50 44 41 54 45  > and the.UPDATE
34c40 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61   statement has a
34c50 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  n ORDER BY claus
34c60 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73  e, then all rows
34c70 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20 75   that would be u
34c80 70 64 61 74 65 64 20 69 6e 0a 74 68 65 20 61 62  pdated in.the ab
34c90 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
34ca0 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f  IT clause are so
34cb0 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  rted according t
34cc0 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 61  o the ORDER BY a
34cd0 6e 64 20 74 68 65 0a 66 69 72 73 74 20 3c 69 3e  nd the.first <i>
34ce0 4e 3c 2f 69 3e 20 75 70 64 61 74 65 64 2e 20 5e  N</i> updated. ^
34cf0 28 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73  (If the UPDATE s
34d00 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 68 61  tatement also ha
34d10 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75  s an OFFSET clau
34d20 73 65 2c 0a 74 68 65 6e 20 69 74 20 69 73 20 73  se,.then it is s
34d30 69 6d 69 6c 61 72 6c 79 20 65 76 61 6c 75 61 74  imilarly evaluat
34d40 65 64 20 61 6e 64 20 63 61 73 74 20 74 6f 20 61  ed and cast to a
34d50 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  n integer value.
34d60 20 49 66 20 74 68 65 20 4f 46 46 53 45 54 0a 65   If the OFFSET.e
34d70 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
34d80 74 65 73 20 74 6f 20 61 20 6e 6f 6e 2d 6e 65 67  tes to a non-neg
34d90 61 74 69 76 65 20 76 61 6c 75 65 20 3c 69 3e 4d  ative value <i>M
34da0 3c 2f 69 3e 2c 20 74 68 65 6e 20 74 68 65 20 66  </i>, then the f
34db0 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f  irst <i>M</i>.ro
34dc0 77 73 20 61 72 65 20 73 6b 69 70 70 65 64 20 61  ws are skipped a
34dd0 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  nd the following
34de0 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 75   <i>N</i> rows u
34df0 70 64 61 74 65 64 20 69 6e 73 74 65 61 64 2e 29  pdated instead.)
34e00 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 50  ^..<p>^If the UP
34e10 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  DATE statement h
34e20 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63  as no ORDER BY c
34e30 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20  lause, then all 
34e40 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c 64 20  rows that.would 
34e50 62 65 20 75 70 64 61 74 65 64 20 69 6e 20 74 68  be updated in th
34e60 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65  e absence of the
34e70 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72   LIMIT clause ar
34e80 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e 20 61  e assembled in a
34e90 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72 64 65  n.arbitrary orde
34ea0 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79 69 6e  r before applyin
34eb0 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20  g the LIMIT and 
34ec0 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73 20 74  OFFSET clauses t
34ed0 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 77 68 69  o determine .whi
34ee0 63 68 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20  ch are actually 
34ef0 75 70 64 61 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54  updated...<p>^(T
34f00 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
34f10 73 65 20 6f 6e 20 61 6e 20 55 50 44 41 54 45 20  se on an UPDATE 
34f20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
34f30 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d  d only to determ
34f40 69 6e 65 20 77 68 69 63 68 0a 72 6f 77 73 20 66  ine which.rows f
34f50 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20 4c  all within the L
34f60 49 4d 49 54 2e 20 54 68 65 20 6f 72 64 65 72 20  IMIT. The order 
34f70 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72  in which rows ar
34f80 65 20 6d 6f 64 69 66 69 65 64 20 69 73 20 61 72  e modified is ar
34f90 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e  bitrary.and is n
34fa0 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64 20 62 79  ot influenced by
34fb0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
34fc0 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 0a 23  ause.)^..<tcl>.#
34fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35010 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
35020 63 74 69 6f 6e 20 56 41 43 55 55 4d 20 76 61 63  ction VACUUM vac
35030 75 75 6d 20 56 41 43 55 55 4d 0a 0a 52 65 63 75  uum VACUUM..Recu
35040 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
35050 61 6d 20 76 61 63 75 75 6d 2d 73 74 6d 74 0a 3c  am vacuum-stmt.<
35060 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20 54 68 65  /tcl>..<p>.  The
35070 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
35080 72 65 62 75 69 6c 64 73 20 74 68 65 20 64 61 74  rebuilds the dat
35090 61 62 61 73 65 20 66 69 6c 65 2c 20 72 65 70 61  abase file, repa
350a0 63 6b 69 6e 67 20 69 74 20 69 6e 74 6f 20 61 20  cking it into a 
350b0 6d 69 6e 69 6d 61 6c 0a 20 20 61 6d 6f 75 6e 74  minimal.  amount
350c0 20 6f 66 20 64 69 73 6b 20 73 70 61 63 65 2e 20   of disk space. 
350d0 54 68 65 72 65 20 61 72 65 20 73 65 76 65 72 61  There are severa
350e0 6c 20 0a 20 20 72 65 61 73 6f 6e 73 20 61 6e 20  l .  reasons an 
350f0 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 69 67 68  application migh
35100 74 20 64 6f 20 74 68 69 73 3a 0a 0a 3c 75 6c 3e  t do this:..<ul>
35110 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 55 6e 6c  .  <li> <p> ^Unl
35120 65 73 73 20 53 51 4c 69 74 65 20 69 73 20 72 75  ess SQLite is ru
35130 6e 6e 69 6e 67 20 69 6e 20 22 61 75 74 6f 5f 76  nning in "auto_v
35140 61 63 75 75 6d 3d 46 55 4c 4c 22 20 6d 6f 64 65  acuum=FULL" mode
35150 2c 20 77 68 65 6e 20 61 20 6c 61 72 67 65 0a 20  , when a large. 
35160 20 20 20 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61      amount of da
35170 74 61 20 69 73 20 64 65 6c 65 74 65 64 20 66 72  ta is deleted fr
35180 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
35190 66 69 6c 65 20 69 74 20 6c 65 61 76 65 73 20 62  file it leaves b
351a0 65 68 69 6e 64 20 65 6d 70 74 79 0a 20 20 20 20  ehind empty.    
351b0 20 73 70 61 63 65 2c 20 6f 72 20 22 66 72 65 65   space, or "free
351c0 22 20 64 61 74 61 62 61 73 65 20 70 61 67 65 73  " database pages
351d0 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 74 68 65  . This means the
351e0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
351f0 69 67 68 74 0a 20 20 20 20 20 62 65 20 6c 61 72  ight.     be lar
35200 67 65 72 20 74 68 61 6e 20 73 74 72 69 63 74 6c  ger than strictl
35210 79 20 6e 65 63 65 73 73 61 72 79 2e 20 5e 52 75  y necessary. ^Ru
35220 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 74 6f 20  nning VACUUM to 
35230 72 65 62 75 69 6c 64 20 74 68 65 20 0a 20 20 20  rebuild the .   
35240 20 20 64 61 74 61 62 61 73 65 20 72 65 63 6c 61    database recla
35250 69 6d 73 20 74 68 69 73 20 73 70 61 63 65 20 61  ims this space a
35260 6e 64 20 72 65 64 75 63 65 73 20 74 68 65 20 73  nd reduces the s
35270 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ize of the datab
35280 61 73 65 20 66 69 6c 65 2e 0a 0a 20 20 3c 6c 69  ase file...  <li
35290 3e 20 3c 70 3e 20 5e 46 72 65 71 75 65 6e 74 20  > <p> ^Frequent 
352a0 69 6e 73 65 72 74 73 2c 20 75 70 64 61 74 65 73  inserts, updates
352b0 2c 20 61 6e 64 20 64 65 6c 65 74 65 73 20 63 61  , and deletes ca
352c0 6e 20 63 61 75 73 65 20 74 68 65 20 64 61 74 61  n cause the data
352d0 62 61 73 65 20 66 69 6c 65 0a 20 20 20 20 20 74  base file.     t
352e0 6f 20 62 65 63 6f 6d 65 20 66 72 61 67 6d 65 6e  o become fragmen
352f0 74 65 64 20 2d 20 77 68 65 72 65 20 64 61 74 61  ted - where data
35300 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 74 61   for a single ta
35310 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
35320 73 63 61 74 74 65 72 65 64 20 0a 20 20 20 20 20  scattered .     
35330 61 72 6f 75 6e 64 20 74 68 65 20 64 61 74 61 62  around the datab
35340 61 73 65 20 66 69 6c 65 2e 20 5e 52 75 6e 6e 69  ase file. ^Runni
35350 6e 67 20 56 41 43 55 55 4d 20 65 6e 73 75 72 65  ng VACUUM ensure
35360 73 20 74 68 61 74 20 65 61 63 68 20 74 61 62 6c  s that each tabl
35370 65 20 61 6e 64 0a 20 20 20 20 20 69 6e 64 65 78  e and.     index
35380 20 69 73 20 6c 61 72 67 65 6c 79 20 73 74 6f 72   is largely stor
35390 65 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 20  ed contiguously 
353a0 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
353b0 61 73 65 20 66 69 6c 65 2e 20 5e 49 6e 20 73 6f  ase file. ^In so
353c0 6d 65 0a 20 20 20 20 20 63 61 73 65 73 2c 20 56  me.     cases, V
353d0 41 43 55 55 4d 20 6d 61 79 20 61 6c 73 6f 20 72  ACUUM may also r
353e0 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72  educe the number
353f0 20 6f 66 20 70 61 72 74 69 61 6c 6c 79 20 66 69   of partially fi
35400 6c 6c 65 64 20 70 61 67 65 73 20 69 6e 0a 20 20  lled pages in.  
35410 20 20 20 74 68 65 20 64 61 74 61 62 61 73 65 2c     the database,
35420 20 72 65 64 75 63 69 6e 67 20 74 68 65 20 73 69   reducing the si
35430 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
35440 73 65 20 66 69 6c 65 20 66 75 72 74 68 65 72 2e  se file further.
35450 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 57 68 65  ..  <li> <p> Whe
35460 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 64 65 6c  n content is del
35470 65 74 65 64 20 66 72 6f 6d 20 61 6e 20 53 51 4c  eted from an SQL
35480 69 74 65 20 64 61 74 61 62 61 73 65 2c 20 74 68  ite database, th
35490 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74  e content is not
354a0 0a 20 20 20 20 20 75 73 75 61 6c 6c 79 20 65 72  .     usually er
354b0 61 73 65 64 20 62 75 74 20 72 61 74 68 65 72 20  ased but rather 
354c0 74 68 65 20 73 70 61 63 65 20 75 73 65 64 20 74  the space used t
354d0 6f 20 68 6f 6c 64 20 74 68 65 20 63 6f 6e 74 65  o hold the conte
354e0 6e 74 20 69 73 20 6d 61 72 6b 65 64 20 61 73 0a  nt is marked as.
354f0 20 20 20 20 20 62 65 69 6e 67 20 61 76 61 69 6c       being avail
35500 61 62 6c 65 20 66 6f 72 20 72 65 75 73 65 2e 20  able for reuse. 
35510 20 54 68 69 73 20 63 61 6e 20 61 6c 6c 6f 77 20   This can allow 
35520 64 65 6c 65 74 65 64 20 63 6f 6e 74 65 6e 74 20  deleted content 
35530 74 6f 20 62 65 20 72 65 63 6f 76 65 72 65 64 0a  to be recovered.
35540 20 20 20 20 20 62 79 20 61 20 68 61 63 6b 65 72       by a hacker
35550 20 6f 72 20 62 79 20 66 6f 72 65 6e 73 69 63 20   or by forensic 
35560 61 6e 61 6c 79 73 69 73 2e 20 20 52 75 6e 6e 69  analysis.  Runni
35570 6e 67 20 56 41 43 55 55 4d 20 77 69 6c 6c 20 63  ng VACUUM will c
35580 6c 65 61 6e 20 74 68 65 20 64 61 74 61 62 61 73  lean the databas
35590 65 0a 20 20 20 20 20 6f 66 20 61 6c 6c 20 74 72  e.     of all tr
355a0 61 63 65 73 20 6f 66 20 64 65 6c 65 74 65 64 20  aces of deleted 
355b0 63 6f 6e 74 65 6e 74 2c 20 74 68 75 73 20 70 72  content, thus pr
355c0 65 76 65 6e 74 69 6e 67 20 61 6e 20 61 64 76 65  eventing an adve
355d0 72 73 61 72 79 20 66 72 6f 6d 20 72 65 63 6f 76  rsary from recov
355e0 65 72 69 6e 67 0a 20 20 20 20 20 64 65 6c 65 74  ering.     delet
355f0 65 64 20 63 6f 6e 74 65 6e 74 2e 20 20 55 73 69  ed content.  Usi
35600 6e 67 20 56 41 43 55 55 4d 20 69 6e 20 74 68 69  ng VACUUM in thi
35610 73 20 77 61 79 20 69 73 20 61 6e 20 61 6c 74 65  s way is an alte
35620 72 6e 61 74 69 76 65 20 74 6f 20 73 65 74 74 69  rnative to setti
35630 6e 67 0a 20 20 20 20 20 5b 50 52 41 47 4d 41 20  ng.     [PRAGMA 
35640 73 65 63 75 72 65 5f 64 65 6c 65 74 65 3d 4f 4e  secure_delete=ON
35650 5d 2e 20 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20  ]. ..  <li> <p> 
35660 5e 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 65 20 64  ^Normally, the d
35670 61 74 61 62 61 73 65 20 5b 70 61 67 65 5f 73 69  atabase [page_si
35680 7a 65 5d 20 61 6e 64 20 77 68 65 74 68 65 72 20  ze] and whether 
35690 6f 72 20 6e 6f 74 20 74 68 65 20 64 61 74 61 62  or not the datab
356a0 61 73 65 0a 20 20 20 20 20 73 75 70 70 6f 72 74  ase.     support
356b0 73 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  s [auto_vacuum] 
356c0 6d 75 73 74 20 62 65 20 63 6f 6e 66 69 67 75 72  must be configur
356d0 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 64 61  ed before the da
356e0 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 0a 20  tabase file is. 
356f0 20 20 20 20 61 63 74 75 61 6c 6c 79 20 63 72 65      actually cre
35700 61 74 65 64 2e 20 5e 48 6f 77 65 76 65 72 2c 20  ated. ^However, 
35710 77 68 65 6e 20 6e 6f 74 20 69 6e 20 5b 77 72 69  when not in [wri
35720 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d 6f  te-ahead log] mo
35730 64 65 2c 20 74 68 65 20 0a 20 20 20 20 20 5b 70  de, the .     [p
35740 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 2f 6f 72  age_size] and/or
35750 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70   [auto_vacuum] p
35760 72 6f 70 65 72 74 69 65 73 20 6f 66 20 61 6e 20  roperties of an 
35770 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
35780 65 20 6d 61 79 20 62 65 0a 20 20 20 20 20 63 68  e may be.     ch
35790 61 6e 67 65 64 20 62 79 20 75 73 69 6e 67 20 74  anged by using t
357a0 68 65 20 5b 70 61 67 65 5f 73 69 7a 65 20 70 72  he [page_size pr
357b0 61 67 6d 61 7c 70 61 67 65 5f 73 69 7a 65 5d 20  agma|page_size] 
357c0 20 61 6e 64 2f 6f 72 20 0a 20 20 20 20 20 5b 61   and/or .     [a
357d0 75 74 6f 5f 76 61 63 75 75 6d 7c 70 72 61 67 6d  uto_vacuum|pragm
357e0 61 20 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70  a auto_vacuum] p
357f0 72 61 67 6d 61 73 20 61 6e 64 20 74 68 65 6e 20  ragmas and then 
35800 69 6d 6d 65 64 69 61 74 65 6c 79 20 56 41 43 55  immediately VACU
35810 55 4d 69 6e 67 0a 20 20 20 20 20 74 68 65 20 64  UMing.     the d
35820 61 74 61 62 61 73 65 2e 20 5e 57 68 65 6e 20 69  atabase. ^When i
35830 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  n [write-ahead l
35840 6f 67 5d 20 6d 6f 64 65 2c 20 6f 6e 6c 79 20 74  og] mode, only t
35850 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  he [auto_vacuum]
35860 0a 20 20 20 20 20 73 75 70 70 6f 72 74 20 70 72  .     support pr
35870 6f 70 65 72 74 79 20 63 61 6e 20 62 65 20 63 68  operty can be ch
35880 61 6e 67 65 64 20 75 73 69 6e 67 20 56 41 43 55  anged using VACU
35890 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 42  UM..</ul>..<p>^B
358a0 79 20 64 65 66 61 75 6c 74 2c 20 56 41 43 55 55  y default, VACUU
358b0 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 6c  M only works onl
358c0 79 20 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  y on the main da
358d0 74 61 62 61 73 65 2e 0a 5e 5b 41 54 54 41 43 48  tabase..^[ATTACH
358e0 7c 41 74 74 61 63 68 65 64 20 64 61 74 61 62 61  |Attached databa
358f0 73 65 73 5d 20 63 61 6e 20 62 65 20 76 61 63 75  ses] can be vacu
35900 75 6d 65 64 20 62 79 20 61 70 70 65 6e 64 69 6e  umed by appendin
35910 67 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  g the appropriat
35920 65 0a 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61  e.<yyterm>schema
35930 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 74  -name</yyterm> t
35940 6f 20 74 68 65 20 56 41 43 55 55 4d 20 73 74 61  o the VACUUM sta
35950 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 3c 62 3e 43  tement...<p><b>C
35960 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 57 61 72  ompatibility War
35970 6e 69 6e 67 3a 3c 2f 62 3e 20 54 68 65 20 61 62  ning:</b> The ab
35980 69 6c 69 74 79 20 74 6f 20 76 61 63 75 75 6d 20  ility to vacuum 
35990 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
359a0 65 73 20 77 61 73 0a 61 64 64 65 64 20 69 6e 20  es was.added in 
359b0 5b 76 65 72 73 69 6f 6e 20 33 2e 31 35 2e 30 5d  [version 3.15.0]
359c0 20 28 5b 64 61 74 65 6f 66 3a 33 2e 31 35 2e 30   ([dateof:3.15.0
359d0 5d 29 2e 20 20 50 72 69 6f 72 20 74 6f 20 74 68  ]).  Prior to th
359e0 61 74 2c 20 61 20 0a 3c 79 79 74 65 72 6d 3e 73  at, a .<yyterm>s
359f0 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65  chema-name</yyte
35a00 72 6d 3e 20 61 64 64 65 64 20 74 6f 20 74 68 65  rm> added to the
35a10 0a 56 41 43 55 55 4d 20 73 74 61 74 65 6d 65 6e  .VACUUM statemen
35a20 74 20 77 6f 75 6c 64 20 62 65 20 73 69 6c 65 6e  t would be silen
35a30 74 6c 79 20 69 67 6e 6f 72 65 64 20 61 6e 64 20  tly ignored and 
35a40 74 68 65 20 22 6d 61 69 6e 22 20 73 63 68 65 6d  the "main" schem
35a50 61 20 77 6f 75 6c 64 20 62 65 0a 76 61 63 75 75  a would be.vacuu
35a60 6d 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  med.</p>..<tcl>h
35a70 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 63 75 75  d_fragment vacuu
35a80 6d 69 6e 74 6f 20 7b 56 41 43 55 55 4d 20 49 4e  minto {VACUUM IN
35a90 54 4f 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 56 41  TO}</tcl>.<h3>VA
35aa0 43 55 55 4d 20 77 69 74 68 20 61 6e 20 49 4e 54  CUUM with an INT
35ab0 4f 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c  O clause</h3>..<
35ac0 70 3e 5e 49 66 20 74 68 65 20 49 4e 54 4f 20 63  p>^If the INTO c
35ad0 6c 61 75 73 65 20 69 73 20 69 6e 63 6c 75 64 65  lause is include
35ae0 64 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 69 67  d, then the orig
35af0 69 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 69  inal database fi
35b00 6c 65 20 69 73 0a 75 6e 63 68 61 6e 67 65 64 20  le is.unchanged 
35b10 61 6e 64 20 61 20 6e 65 77 20 64 61 74 61 62 61  and a new databa
35b20 73 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  se is created in
35b30 20 74 68 65 20 66 69 6c 65 6e 61 6d 65 20 67 69   the filename gi
35b40 76 65 6e 20 62 79 20 74 68 65 0a 61 72 67 75 6d  ven by the.argum
35b50 65 6e 74 20 74 6f 20 74 68 65 20 49 4e 54 4f 20  ent to the INTO 
35b60 63 6c 61 75 73 65 2e 20 20 54 68 65 20 6e 65 77  clause.  The new
35b70 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 63   database will c
35b80 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65 0a  ontain the same.
35b90 6c 6f 67 69 63 61 6c 20 63 6f 6e 74 65 6e 74 20  logical content 
35ba0 61 73 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  as the original 
35bb0 64 61 74 61 62 61 73 65 2c 20 66 75 6c 6c 79 20  database, fully 
35bc0 76 61 63 75 75 6d 65 64 2e 0a 0a 3c 70 3e 0a 54  vacuumed...<p>.T
35bd0 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
35be0 64 20 77 69 74 68 20 61 6e 20 49 4e 54 4f 20 63  d with an INTO c
35bf0 6c 61 75 73 65 20 69 73 20 61 6e 20 61 6c 74 65  lause is an alte
35c00 72 6e 61 74 69 76 65 20 74 6f 20 74 68 65 0a 5b  rnative to the.[
35c10 62 61 63 6b 75 70 20 41 50 49 5d 20 66 6f 72 20  backup API] for 
35c20 67 65 6e 65 72 61 74 69 6e 67 20 62 61 63 6b 75  generating backu
35c30 70 20 63 6f 70 69 65 73 20 6f 66 20 61 20 6c 69  p copies of a li
35c40 76 65 20 64 61 74 61 62 61 73 65 2e 0a 54 68 65  ve database..The
35c50 20 61 64 76 61 6e 74 61 67 65 20 6f 66 20 75 73   advantage of us
35c60 69 6e 67 20 56 41 43 55 55 4d 20 49 4e 54 4f 20  ing VACUUM INTO 
35c70 69 73 20 74 68 61 74 20 74 68 65 20 72 65 73 75  is that the resu
35c80 6c 74 69 6e 67 20 62 61 63 6b 75 70 0a 64 61 74  lting backup.dat
35c90 61 62 61 73 65 20 69 73 20 6d 69 6e 69 6d 61 6c  abase is minimal
35ca0 20 69 6e 20 73 69 7a 65 20 61 6e 64 20 68 65 6e   in size and hen
35cb0 63 65 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66  ce the amount of
35cc0 20 66 69 6c 65 73 79 73 74 65 6d 0a 49 2f 4f 20   filesystem.I/O 
35cd0 6d 61 79 20 62 65 20 72 65 64 75 63 65 64 2e 20  may be reduced. 
35ce0 20 41 6c 73 6f 2c 20 61 6c 6c 20 64 65 6c 65 74   Also, all delet
35cf0 65 64 20 63 6f 6e 74 65 6e 74 20 69 73 20 70 75  ed content is pu
35d00 72 67 65 64 20 66 72 6f 6d 20 74 68 65 0a 62 61  rged from the.ba
35d10 63 6b 75 70 2c 20 6c 65 61 76 69 6e 67 20 62 65  ckup, leaving be
35d20 68 69 6e 64 20 6e 6f 20 66 6f 72 65 6e 73 69 63  hind no forensic
35d30 20 74 72 61 63 65 73 2e 20 20 4f 6e 20 74 68 65   traces.  On the
35d40 20 6f 74 68 65 72 20 68 61 6e 64 2c 0a 74 68 65   other hand,.the
35d50 20 5b 62 61 63 6b 75 70 20 41 50 49 5d 20 75 73   [backup API] us
35d60 65 73 20 66 65 77 65 72 20 43 50 55 20 63 79 63  es fewer CPU cyc
35d70 6c 65 73 20 61 6e 64 20 63 61 6e 20 62 65 20 65  les and can be e
35d80 78 65 63 75 74 65 64 0a 69 6e 63 72 65 6d 65 6e  xecuted.incremen
35d90 74 61 6c 6c 79 2e 0a 0a 3c 70 3e 0a 5e 54 68 65  tally...<p>.^The
35da0 20 66 69 6c 65 6e 61 6d 65 20 69 6e 20 74 68 65   filename in the
35db0 20 49 4e 54 4f 20 63 6c 61 75 73 65 20 63 61 6e   INTO clause can
35dc0 20 62 65 20 61 6e 20 61 72 62 69 74 72 61 72 79   be an arbitrary
35dd0 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 0a   SQL expression.
35de0 74 68 61 74 20 65 76 61 6c 75 61 74 65 73 20 74  that evaluates t
35df0 6f 20 61 20 73 74 72 69 6e 67 2e 0a 5e 54 68 65  o a string..^The
35e00 20 66 69 6c 65 20 6e 61 6d 65 64 20 62 79 20 74   file named by t
35e10 68 65 20 49 4e 54 4f 20 63 6c 61 75 73 65 20 6d  he INTO clause m
35e20 75 73 74 20 6e 6f 74 20 70 72 65 76 69 6f 75 73  ust not previous
35e30 6c 79 20 65 78 69 73 74 2c 20 6f 72 0a 65 6c 73  ly exist, or.els
35e40 65 20 69 74 20 6d 75 73 74 20 62 65 20 61 6e 20  e it must be an 
35e50 65 6d 70 74 79 20 66 69 6c 65 2c 20 6f 72 20 74  empty file, or t
35e60 68 65 20 56 41 43 55 55 4d 20 49 4e 54 4f 20 63  he VACUUM INTO c
35e70 6f 6d 6d 61 6e 64 20 77 69 6c 6c 0a 66 61 69 6c  ommand will.fail
35e80 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 0a   with an error..
35e90 0a 3c 70 3e 0a 5e 54 68 65 20 61 72 67 75 6d 65  .<p>.^The argume
35ea0 6e 74 20 74 6f 20 49 4e 54 4f 20 63 61 6e 20 62  nt to INTO can b
35eb0 65 20 61 20 5b 55 52 49 20 66 69 6c 65 6e 61 6d  e a [URI filenam
35ec0 65 5d 20 69 66 20 55 52 49 20 66 69 6c 65 6e 61  e] if URI filena
35ed0 6d 65 73 0a 61 72 65 20 65 6e 61 62 6c 65 64 2e  mes.are enabled.
35ee0 0a 55 52 4c 20 66 69 6c 65 6e 61 6d 65 73 20 61  .URL filenames a
35ef0 72 65 20 65 6e 61 62 6c 65 64 20 69 66 20 61 6e  re enabled if an
35f00 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  y of the followi
35f10 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 3c 75 6c  ng are true:.<ul
35f20 3e 0a 3c 6c 69 3e 20 54 68 65 20 53 51 4c 69 74  >.<li> The SQLit
35f30 65 20 6c 69 62 72 61 72 79 20 77 61 73 20 63 6f  e library was co
35f40 6d 70 69 6c 65 64 20 77 69 74 68 20 5b 2d 44 53  mpiled with [-DS
35f50 51 4c 49 54 45 5f 55 53 45 5f 55 52 49 3d 31 5d  QLITE_USE_URI=1]
35f60 2e 0a 3c 6c 69 3e 20 54 68 65 20 5b 73 71 6c 69  ..<li> The [sqli
35f70 74 65 33 5f 63 6f 6e 66 69 67 5d 28 5b 53 51 4c  te3_config]([SQL
35f80 49 54 45 5f 43 4f 4e 46 49 47 5f 55 52 49 5d 2c  ITE_CONFIG_URI],
35f90 31 29 20 69 6e 74 65 72 66 61 63 65 73 20 77 61  1) interfaces wa
35fa0 73 0a 20 20 20 20 20 69 6e 76 6f 6b 65 64 20 61  s.     invoked a
35fb0 74 20 73 74 61 72 74 2d 74 69 6d 65 2e 0a 3c 6c  t start-time..<l
35fc0 69 3e 20 54 68 65 20 5b 64 61 74 61 62 61 73 65  i> The [database
35fd0 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 74 68 61   connection] tha
35fe0 74 20 69 73 20 72 75 6e 6e 69 6e 67 20 74 68 65  t is running the
35ff0 20 56 41 43 55 55 4d 20 49 4e 54 4f 0a 20 20 20   VACUUM INTO.   
36000 20 20 73 74 61 74 65 6d 65 6e 74 20 77 61 73 20    statement was 
36010 6f 72 69 67 69 6e 61 6c 6c 79 20 6f 70 65 6e 65  originally opene
36020 64 20 75 73 69 6e 67 20 74 68 65 0a 20 20 20 20  d using the.    
36030 20 5b 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 55 52   [SQLITE_OPEN_UR
36040 49 5d 20 66 6c 61 67 2e 0a 3c 2f 75 6c 3e 0a 0a  I] flag..</ul>..
36050 3c 70 3e 0a 54 68 65 20 56 41 43 55 55 4d 20 49  <p>.The VACUUM I
36060 4e 54 4f 20 63 6f 6d 6d 61 6e 64 20 69 73 20 74  NTO command is t
36070 72 61 6e 73 61 63 74 69 6f 6e 61 6c 20 69 6e 20  ransactional in 
36080 74 68 65 20 73 65 6e 73 65 20 74 68 61 74 0a 74  the sense that.t
36090 68 65 20 67 65 6e 65 72 61 74 65 64 20 6f 75 74  he generated out
360a0 70 75 74 20 64 61 74 61 62 61 73 65 20 69 73 20  put database is 
360b0 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 73 6e 61  a consistent sna
360c0 70 73 68 6f 74 20 6f 66 20 74 68 65 0a 6f 72 69  pshot of the.ori
360d0 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65 2e 20  ginal database. 
360e0 20 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65   However, if the
360f0 20 56 41 43 55 55 4d 20 49 4e 54 4f 20 63 6f 6d   VACUUM INTO com
36100 6d 61 6e 64 20 69 73 0a 69 6e 74 65 72 72 75 70  mand is.interrup
36110 74 65 64 20 62 79 20 61 20 75 6e 70 6c 61 6e 6e  ted by a unplann
36120 65 64 20 73 68 75 74 64 6f 77 6e 20 6f 72 20 70  ed shutdown or p
36130 6f 77 65 72 20 6c 6f 73 65 2c 20 74 68 65 6e 0a  ower lose, then.
36140 74 68 65 20 67 65 6e 65 72 61 74 65 64 20 6f 75  the generated ou
36150 74 70 75 74 20 64 61 74 61 62 61 73 65 20 6d 69  tput database mi
36160 67 68 74 20 62 65 20 69 6e 63 6f 6d 70 6c 65 74  ght be incomplet
36170 65 20 61 6e 64 20 63 6f 72 72 75 70 74 2e 0a 41  e and corrupt..A
36180 6c 73 6f 2c 20 53 51 4c 69 74 65 20 64 6f 65 73  lso, SQLite does
36190 20 6e 6f 74 20 69 6e 76 6f 6b 65 20 66 73 79 6e   not invoke fsyn
361a0 63 28 29 20 6f 72 20 46 6c 75 73 68 46 69 6c 65  c() or FlushFile
361b0 42 75 66 66 65 72 73 28 29 0a 6f 6e 20 74 68 65  Buffers().on the
361c0 20 67 65 6e 65 72 61 74 65 64 20 64 61 74 61 62   generated datab
361d0 61 73 65 20 74 6f 20 65 6e 73 75 72 65 20 74 68  ase to ensure th
361e0 61 74 20 69 74 20 68 61 73 20 72 65 61 63 68 65  at it has reache
361f0 64 0a 6e 6f 6e 2d 76 6f 6c 61 74 69 6c 65 20 73  d.non-volatile s
36200 74 6f 72 61 67 65 20 62 65 66 6f 72 65 20 63 6f  torage before co
36210 6d 70 6c 65 74 69 6e 67 2e 0a 0a 0a 3c 74 63 6c  mpleting....<tcl
36220 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 68 6f 77  >hd_fragment how
36230 76 61 63 75 75 6d 77 6f 72 6b 73 20 7b 68 6f 77  vacuumworks {how
36240 20 76 61 63 75 75 6d 20 77 6f 72 6b 73 7d 3c 2f   vacuum works}</
36250 74 63 6c 3e 0a 3c 68 33 3e 48 6f 77 20 56 41 43  tcl>.<h3>How VAC
36260 55 55 4d 20 77 6f 72 6b 73 3c 2f 68 33 3e 0a 0a  UUM works</h3>..
36270 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
36280 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 62 79 20  ommand works by 
36290 63 6f 70 79 69 6e 67 20 74 68 65 20 63 6f 6e 74  copying the cont
362a0 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61  ents of the data
362b0 62 61 73 65 20 69 6e 74 6f 0a 61 20 74 65 6d 70  base into.a temp
362c0 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20 66  orary database f
362d0 69 6c 65 20 61 6e 64 20 74 68 65 6e 20 6f 76 65  ile and then ove
362e0 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69  rwriting the ori
362f0 67 69 6e 61 6c 20 77 69 74 68 20 74 68 65 20 0a  ginal with the .
36300 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
36310 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 2e 20  temporary file. 
36320 5e 57 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e  ^When overwritin
36330 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 2c 20  g the original, 
36340 61 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e  a rollback.journ
36350 61 6c 20 6f 72 20 5b 77 72 69 74 65 2d 61 68 65  al or [write-ahe
36360 61 64 20 6c 6f 67 5d 20 57 41 4c 20 66 69 6c 65  ad log] WAL file
36370 20 69 73 20 75 73 65 64 20 6a 75 73 74 20 61 73   is used just as
36380 20 69 74 20 77 6f 75 6c 64 20 62 65 20 66 6f 72   it would be for
36390 20 61 6e 79 0a 6f 74 68 65 72 20 64 61 74 61 62   any.other datab
363a0 61 73 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ase transaction.
363b0 20 5e 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61   ^This means tha
363c0 74 20 77 68 65 6e 20 56 41 43 55 55 4d 69 6e 67  t when VACUUMing
363d0 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a 61 73   a database, .as
363e0 20 6d 75 63 68 20 61 73 20 74 77 69 63 65 20 74   much as twice t
363f0 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6f  he size of the o
36400 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65  riginal database
36410 20 66 69 6c 65 20 69 73 20 72 65 71 75 69 72 65   file is require
36420 64 20 69 6e 20 66 72 65 65 0a 64 69 73 6b 20 73  d in free.disk s
36430 70 61 63 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 56  pace...<p>^The V
36440 41 43 55 55 4d 20 49 4e 54 4f 20 63 6f 6d 6d 61  ACUUM INTO comma
36450 6e 64 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d  nd works the sam
36460 65 20 77 61 79 20 65 78 63 65 70 74 20 74 68 61  e way except tha
36470 74 20 69 74 20 75 73 65 73 20 74 68 65 20 66 69  t it uses the fi
36480 6c 65 0a 6e 61 6d 65 64 20 6f 6e 20 74 68 65 20  le.named on the 
36490 49 4e 54 4f 20 63 6c 61 75 73 65 20 69 6e 20 70  INTO clause in p
364a0 6c 61 63 65 20 6f 66 20 74 68 65 20 74 65 6d 70  lace of the temp
364b0 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20 61  orary database a
364c0 6e 64 20 6f 6d 69 74 73 20 74 68 65 0a 73 74 65  nd omits the.ste
364d0 70 20 6f 66 20 63 6f 70 79 69 6e 67 20 74 68 65  p of copying the
364e0 20 76 61 63 75 75 6d 65 64 20 64 61 74 61 62 61   vacuumed databa
364f0 73 65 20 62 61 63 6b 20 6f 76 65 72 20 74 6f 70  se back over top
36500 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
36510 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 5e   database...<p>^
36520 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  The VACUUM comma
36530 6e 64 20 6d 61 79 20 63 68 61 6e 67 65 20 74 68  nd may change th
36540 65 20 5b 52 4f 57 49 44 20 7c 20 52 4f 57 49 44  e [ROWID | ROWID
36550 73 5d 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  s] of entries in
36560 20 61 6e 79 0a 74 61 62 6c 65 73 20 74 68 61 74   any.tables that
36570 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 61 6e 20   do not have an 
36580 65 78 70 6c 69 63 69 74 20 5b 49 4e 54 45 47 45  explicit [INTEGE
36590 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a  R PRIMARY KEY]..
365a0 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 56 41 43 55  </p>..<p>^A VACU
365b0 55 4d 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20  UM will fail if 
365c0 74 68 65 72 65 20 69 73 20 61 6e 20 6f 70 65 6e  there is an open
365d0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
365e0 74 68 65 20 64 61 74 61 62 61 73 65 0a 63 6f 6e  the database.con
365f0 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20  nection that is 
36600 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 72 75  attempting to ru
36610 6e 20 74 68 65 20 56 41 43 55 55 4d 2e 20 20 5e  n the VACUUM.  ^
36620 55 6e 66 69 6e 61 6c 69 7a 65 64 20 53 51 4c 0a  Unfinalized SQL.
36630 73 74 61 74 65 6d 65 6e 74 73 20 74 79 70 69 63  statements typic
36640 61 6c 6c 79 20 68 6f 6c 64 20 61 20 72 65 61 64  ally hold a read
36650 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 70 65   transaction ope
36660 6e 2c 20 73 6f 20 74 68 65 20 56 41 43 55 55 4d  n, so the VACUUM
36670 0a 6d 69 67 68 74 20 66 61 69 6c 20 69 66 20 74  .might fail if t
36680 68 65 72 65 20 61 72 65 20 75 6e 66 69 6e 61 6c  here are unfinal
36690 69 7a 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65  ized SQL stateme
366a0 6e 74 73 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  nts on the same 
366b0 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 5e 56 41 43  connection..^VAC
366c0 55 55 4d 20 28 62 75 74 20 6e 6f 74 20 56 41 43  UUM (but not VAC
366d0 55 55 4d 20 49 4e 54 4f 29 20 69 73 20 61 20 77  UUM INTO) is a w
366e0 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 61  rite operation a
366f0 6e 64 20 73 6f 20 69 66 20 61 6e 6f 74 68 65 72  nd so if another
36700 0a 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63  .database connec
36710 74 69 6f 6e 20 69 73 20 68 6f 6c 64 69 6e 67 20  tion is holding 
36720 61 20 6c 6f 63 6b 20 74 68 61 74 20 70 72 65 76  a lock that prev
36730 65 6e 74 73 20 77 72 69 74 65 73 2c 20 74 68 65  ents writes, the
36740 6e 0a 74 68 65 20 56 41 43 55 55 4d 20 77 69 6c  n.the VACUUM wil
36750 6c 20 66 61 69 6c 2e 0a 0a 3c 70 3e 5e 28 41 6e  l fail...<p>^(An
36760 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20   alternative to 
36770 75 73 69 6e 67 20 74 68 65 20 56 41 43 55 55 4d  using the VACUUM
36780 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72 65 63 6c   command to.recl
36790 61 69 6d 20 73 70 61 63 65 20 61 66 74 65 72 20  aim space after 
367a0 64 61 74 61 20 68 61 73 20 62 65 65 6e 20 64 65  data has been de
367b0 6c 65 74 65 64 20 69 73 20 61 75 74 6f 2d 76 61  leted is auto-va
367c0 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c  cuum mode, enabl
367d0 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b 61 75  ed using.the [au
367e0 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67 6d  to_vacuum] pragm
367f0 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61 75 74 6f  a.)^ ^When [auto
36800 5f 76 61 63 75 75 6d 5d 20 69 73 20 65 6e 61 62  _vacuum] is enab
36810 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61  led for a databa
36820 73 65 0a 66 72 65 65 20 70 61 67 65 73 20 6d 61  se.free pages ma
36830 79 20 62 65 20 72 65 63 6c 61 69 6d 65 64 20 61  y be reclaimed a
36840 66 74 65 72 20 64 65 6c 65 74 69 6e 67 20 64 61  fter deleting da
36850 74 61 2c 20 63 61 75 73 69 6e 67 20 74 68 65 20  ta, causing the 
36860 66 69 6c 65 20 74 6f 20 73 68 72 69 6e 6b 2c 0a  file to shrink,.
36870 77 69 74 68 6f 75 74 20 72 65 62 75 69 6c 64 69  without rebuildi
36880 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  ng the entire da
36890 74 61 62 61 73 65 20 75 73 69 6e 67 20 56 41 43  tabase using VAC
368a0 55 55 4d 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20  UUM.  ^However, 
368b0 75 73 69 6e 67 0a 5b 61 75 74 6f 5f 76 61 63 75  using.[auto_vacu
368c0 75 6d 5d 20 63 61 6e 20 6c 65 61 64 20 74 6f 20  um] can lead to 
368d0 65 78 74 72 61 20 64 61 74 61 62 61 73 65 20 66  extra database f
368e0 69 6c 65 20 66 72 61 67 6d 65 6e 74 61 74 69 6f  ile fragmentatio
368f0 6e 2e 20 20 5e 41 6e 64 20 5b 61 75 74 6f 5f 76  n.  ^And [auto_v
36900 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20  acuum].does not 
36910 63 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c 6c  compact partiall
36920 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 6f  y filled pages o
36930 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  f the database a
36940 73 20 56 41 43 55 55 4d 20 64 6f 65 73 2e 0a 0a  s VACUUM does...
36950 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </p>...<tcl>.###
36960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
36970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
36980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
36990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
369a0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
369b0 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20 42 59 7d  ion {INDEXED BY}
369c0 20 69 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e 44   indexedby {{IND
369d0 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e  EXED BY} {NOT IN
369e0 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a  DEXED}}..</tcl>.
369f0 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20  <p>^The INDEXED 
36a00 42 59 20 70 68 72 61 73 65 20 66 6f 72 63 65 73  BY phrase forces
36a10 20 74 68 65 20 5b 53 51 4c 69 74 65 20 71 75 65   the [SQLite que
36a20 72 79 20 70 6c 61 6e 6e 65 72 5d 20 74 6f 20 75  ry planner] to u
36a30 73 65 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20  se a.particular 
36a40 6e 61 6d 65 64 20 69 6e 64 65 78 20 6f 6e 20 61  named index on a
36a50 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 53 45 4c 45   [DELETE], [SELE
36a60 43 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d  CT], or [UPDATE]
36a70 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20   statement..The 
36a80 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
36a90 65 20 69 73 20 61 6e 20 53 51 4c 69 74 65 20 65  e is an SQLite e
36aa0 78 74 65 6e 73 69 6f 6e 20 61 6e 64 0a 69 73 20  xtension and.is 
36ab0 6e 6f 74 20 70 6f 72 74 61 62 6c 65 20 74 6f 20  not portable to 
36ac0 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61  other SQL databa
36ad0 73 65 20 65 6e 67 69 6e 65 73 2e 3c 2f 70 3e 0a  se engines.</p>.
36ae0 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65  .<tcl>.Recursive
36af0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75  BubbleDiagram qu
36b00 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61  alified-table-na
36b10 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  me.</tcl>..<p>^T
36b20 68 65 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  he "INDEXED BY <
36b30 79 79 74 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d  yyterm>index-nam
36b40 65 3c 2f 79 79 74 65 72 6d 3e 22 20 70 68 72 61  e</yyterm>" phra
36b50 73 65 20 73 70 65 63 69 66 69 65 73 20 0a 74 68  se specifies .th
36b60 61 74 20 74 68 65 20 6e 61 6d 65 64 20 69 6e 64  at the named ind
36b70 65 78 0a 6d 75 73 74 20 62 65 20 75 73 65 64 20  ex.must be used 
36b80 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b  in order to look
36b90 20 75 70 20 76 61 6c 75 65 73 20 6f 6e 20 74 68   up values on th
36ba0 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c  e preceding tabl
36bb0 65 2e 0a 5e 49 66 20 3c 79 79 74 65 72 6d 3e 69  e..^If <yyterm>i
36bc0 6e 64 65 78 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  ndex-name</yyter
36bd0 6d 3e 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  m> does not exis
36be0 74 20 6f 72 20 63 61 6e 6e 6f 74 20 62 65 20 75  t or cannot be u
36bf0 73 65 64 20 0a 66 6f 72 20 74 68 65 20 71 75 65  sed .for the que
36c00 72 79 2c 20 74 68 65 6e 20 74 68 65 20 70 72 65  ry, then the pre
36c10 70 61 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  paration of the 
36c20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 61  SQL statement fa
36c30 69 6c 73 2e 0a 5e 28 54 68 65 20 22 4e 4f 54 20  ils..^(The "NOT 
36c40 49 4e 44 45 58 45 44 22 20 63 6c 61 75 73 65 20  INDEXED" clause 
36c50 73 70 65 63 69 66 69 65 73 20 74 68 61 74 20 6e  specifies that n
36c60 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c 20 62 65  o index shall be
36c70 20 75 73 65 64 20 77 68 65 6e 0a 61 63 63 65 73   used when.acces
36c80 73 69 6e 67 20 74 68 65 20 70 72 65 63 65 64 69  sing the precedi
36c90 6e 67 20 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64  ng table, includ
36ca0 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e 64 69  ing implied indi
36cb0 63 65 73 20 63 72 65 61 74 65 20 62 79 0a 55 4e  ces create by.UN
36cc0 49 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59  IQUE and PRIMARY
36cd0 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73   KEY constraints
36ce0 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20  .  However, the 
36cf0 5b 72 6f 77 69 64 5d 0a 63 61 6e 20 73 74 69 6c  [rowid].can stil
36d00 6c 20 62 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f  l be used to loo
36d10 6b 20 75 70 20 65 6e 74 72 69 65 73 20 65 76 65  k up entries eve
36d20 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45  n when "NOT INDE
36d30 58 45 44 22 20 69 73 20 73 70 65 63 69 66 69 65  XED" is specifie
36d40 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d  d.)^</p>..<p>Som
36d50 65 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65  e SQL database e
36d60 6e 67 69 6e 65 73 20 70 72 6f 76 69 64 65 20 6e  ngines provide n
36d70 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22 68 69 6e  on-standard "hin
36d80 74 22 20 6d 65 63 68 61 6e 69 73 6d 73 20 77 68  t" mechanisms wh
36d90 69 63 68 0a 63 61 6e 20 62 65 20 75 73 65 64 20  ich.can be used 
36da0 74 6f 20 67 69 76 65 20 74 68 65 20 71 75 65 72  to give the quer
36db0 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75 65  y optimizer clue
36dc0 73 20 61 62 6f 75 74 20 77 68 61 74 20 69 6e 64  s about what ind
36dd0 69 63 65 73 20 69 74 20 73 68 6f 75 6c 64 0a 75  ices it should.u
36de0 73 65 20 66 6f 72 20 61 20 70 61 72 74 69 63 75  se for a particu
36df0 6c 61 72 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  lar statement.  
36e00 54 68 65 20 49 4e 44 45 58 20 42 59 20 63 6c 61  The INDEX BY cla
36e10 75 73 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73  use of SQLite is
36e20 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61   .<em>not</em> a
36e30 20 68 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69   hinting mechani
36e40 73 6d 20 61 6e 64 20 69 74 20 73 68 6f 75 6c 64  sm and it should
36e50 20 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73 20   not be used as 
36e60 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58  such..^The INDEX
36e70 45 44 20 42 59 20 63 6c 61 75 73 65 20 64 6f 65  ED BY clause doe
36e80 73 20 6e 6f 74 20 67 69 76 65 20 74 68 65 20 6f  s not give the o
36e90 70 74 69 6d 69 7a 65 72 20 68 69 6e 74 73 20 61  ptimizer hints a
36ea0 62 6f 75 74 20 77 68 69 63 68 20 69 6e 64 65 78  bout which index
36eb0 0a 74 6f 20 75 73 65 3b 20 69 74 20 67 69 76 65  .to use; it give
36ec0 73 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  s the optimizer 
36ed0 61 20 72 65 71 75 69 72 65 6d 65 6e 74 20 6f 66  a requirement of
36ee0 20 77 68 69 63 68 20 69 6e 64 65 78 20 74 6f 20   which index to 
36ef0 75 73 65 2e 0a 5e 49 66 20 74 68 65 20 71 75 65  use..^If the que
36f00 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20  ry optimizer is 
36f10 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68  unable to use th
36f20 65 20 69 6e 64 65 78 20 73 70 65 63 69 66 69 65  e index specifie
36f30 64 20 62 79 20 74 68 65 0a 49 4e 44 45 58 20 42  d by the.INDEX B
36f40 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
36f50 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20 66 61  he query will fa
36f60 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  il with an error
36f70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e  .</p>..<p>The IN
36f80 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
36f90 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20  is <em>not</em> 
36fa0 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
36fb0 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20 70   in tuning.the p
36fc0 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20  erformance of a 
36fd0 71 75 65 72 79 2e 20 20 54 68 65 20 69 6e 74 65  query.  The inte
36fe0 6e 74 20 6f 66 20 74 68 65 20 49 4e 44 45 58 45  nt of the INDEXE
36ff0 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 74  D BY clause is.t
37000 6f 20 72 61 69 73 65 20 61 20 72 75 6e 2d 74 69  o raise a run-ti
37010 6d 65 20 65 72 72 6f 72 20 69 66 20 61 20 73 63  me error if a sc
37020 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 73 75 63  hema change, suc
37030 68 20 61 73 20 64 72 6f 70 70 69 6e 67 20 6f 72  h as dropping or
37040 0a 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64  .creating an ind
37050 65 78 2c 20 63 61 75 73 65 73 20 74 68 65 20 71  ex, causes the q
37060 75 65 72 79 20 70 6c 61 6e 20 66 6f 72 20 61 20  uery plan for a 
37070 74 69 6d 65 2d 73 65 6e 73 69 74 69 76 65 20 71  time-sensitive q
37080 75 65 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20  uery.to change. 
37090 20 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20   The INDEXED BY 
370a0 63 6c 61 75 73 65 20 69 73 20 64 65 73 69 67 6e  clause is design
370b0 65 64 20 74 6f 20 68 65 6c 70 20 64 65 74 65 63  ed to help detec
370c0 74 0a 75 6e 64 65 73 69 72 61 62 6c 65 20 71 75  t.undesirable qu
370d0 65 72 79 20 70 6c 61 6e 20 63 68 61 6e 67 65 73  ery plan changes
370e0 20 64 75 72 69 6e 67 20 72 65 67 72 65 73 73 69   during regressi
370f0 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 41 70 70 6c  on testing..Appl
37100 69 63 61 74 69 6f 6e 20 0a 64 65 76 65 6c 6f 70  ication .develop
37110 65 72 73 20 61 72 65 20 61 64 6d 6f 6e 69 73 68  ers are admonish
37120 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c 6c 20 75  ed to omit all u
37130 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59  se of INDEXED BY
37140 20 64 75 72 69 6e 67 0a 61 70 70 6c 69 63 61 74   during.applicat
37150 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69 6d 70 6c  ion design, impl
37160 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 65 73 74  ementation, test
37170 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69 6e 67 2e  ing, and tuning.
37180 20 20 49 66 0a 49 4e 44 45 58 45 44 20 42 59 20    If.INDEXED BY 
37190 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 61 74  is to be used at
371a0 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75 6c 64 20   all, it should 
371b0 62 65 20 69 6e 73 65 72 74 65 64 20 61 74 20 74  be inserted at t
371c0 68 65 20 76 65 72 79 0a 65 6e 64 20 6f 66 20 74  he very.end of t
371d0 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 70  he development p
371e0 72 6f 63 65 73 73 20 77 68 65 6e 20 22 6c 6f 63  rocess when "loc
371f0 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20 64 65 73  king down" a des
37200 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 65  ign.</p>..<h3>Se
37210 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c 6f  e Also:</h3>..<o
37220 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 71  l>.<li><p>The [q
37230 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63 68 65  uery planner che
37240 63 6b 6c 69 73 74 5d 20 64 65 73 63 72 69 62 65  cklist] describe
37250 73 20 73 74 65 70 73 20 74 68 61 74 20 61 70 70  s steps that app
37260 6c 69 63 61 74 69 6f 6e 0a 64 65 76 65 6c 6f 70  lication.develop
37270 65 72 73 20 73 68 6f 75 6c 64 20 66 6f 6c 6c 6f  ers should follo
37280 77 69 6e 67 20 74 6f 20 68 65 6c 70 20 72 65 73  wing to help res
37290 6f 6c 76 65 20 71 75 65 72 79 20 70 6c 61 6e 6e  olve query plann
372a0 65 72 20 70 72 6f 62 6c 65 6d 73 2e 0a 4e 6f 74  er problems..Not
372b0 69 63 65 20 74 68 65 20 74 68 61 74 20 74 68 65  ice the that the
372c0 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20   use of INDEXED 
372d0 42 59 20 69 73 20 61 20 6c 61 73 74 20 72 65 73  BY is a last res
372e0 6f 72 74 2c 20 74 6f 20 62 65 20 75 73 65 64 20  ort, to be used 
372f0 6f 6e 6c 79 0a 77 68 65 6e 20 61 6c 6c 20 6f 74  only.when all ot
37300 68 65 72 20 6d 65 61 73 75 72 65 73 20 66 61 69  her measures fai
37310 6c 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5b  l.</p>..<li><p>[
37320 75 70 6c 75 73 63 6f 6e 74 72 6f 6c 7c 54 68 65  upluscontrol|The
37330 20 75 6e 61 72 79 20 22 2b 22 20 6f 70 65 72 61   unary "+" opera
37340 74 6f 72 5d 0a 63 61 6e 20 62 65 20 75 73 65 64  tor].can be used
37350 20 74 6f 20 64 69 73 71 75 61 6c 69 66 79 20 74   to disqualify t
37360 65 72 6d 73 20 69 6e 20 74 68 65 20 57 48 45 52  erms in the WHER
37370 45 20 63 6c 61 75 73 65 20 66 72 6f 6d 20 75 73  E clause from us
37380 65 20 62 79 20 69 6e 64 69 63 65 73 2e 0a 43 61  e by indices..Ca
37390 72 65 66 75 6c 20 75 73 65 20 6f 66 20 75 6e 61  reful use of una
373a0 72 79 20 2b 20 63 61 6e 20 73 6f 6d 65 74 69 6d  ry + can sometim
373b0 65 73 20 68 65 6c 70 20 70 72 65 76 65 6e 74 20  es help prevent 
373c0 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  the query planne
373d0 72 20 66 72 6f 6d 0a 63 68 6f 6f 73 69 6e 67 20  r from.choosing 
373e0 61 20 70 6f 6f 72 20 69 6e 64 65 78 20 77 69 74  a poor index wit
373f0 68 6f 75 74 20 72 65 73 74 72 69 63 74 69 6e 67  hout restricting
37400 20 69 74 20 74 6f 20 75 73 69 6e 67 20 6f 6e 65   it to using one
37410 20 73 70 65 63 69 66 69 63 20 69 6e 64 65 78 2e   specific index.
37420 0a 43 61 72 65 66 75 6c 20 70 6c 61 63 65 6d 65  .Careful placeme
37430 6e 74 20 6f 66 20 75 6e 61 72 79 20 2b 20 6f 70  nt of unary + op
37440 65 72 61 74 6f 72 73 20 69 73 20 61 20 62 65 74  erators is a bet
37450 74 65 72 20 6d 65 74 68 6f 64 20 66 6f 72 20 63  ter method for c
37460 6f 6e 74 72 6f 6c 6c 69 6e 67 20 0a 77 68 69 63  ontrolling .whic
37470 68 20 69 6e 64 69 63 65 73 20 61 72 65 20 75 73  h indices are us
37480 65 64 20 62 79 20 61 20 71 75 65 72 79 2e 3c 2f  ed by a query.</
37490 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b  p>..<li><p>The [
374a0 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
374b0 74 75 73 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74  tus()] C/C++ int
374c0 65 72 66 61 63 65 20 74 6f 67 65 74 68 65 72 20  erface together 
374d0 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45  with the.[SQLITE
374e0 5f 53 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c  _STMTSTATUS_FULL
374f0 53 43 41 4e 5f 53 54 45 50 5d 20 61 6e 64 20 5b  SCAN_STEP] and [
37500 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
37510 53 5f 53 4f 52 54 5d 20 76 65 72 62 73 0a 63 61  S_SORT] verbs.ca
37520 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 74  n be used to det
37530 65 63 74 20 61 74 20 72 75 6e 2d 74 69 6d 65 20  ect at run-time 
37540 77 68 65 6e 20 61 6e 20 53 51 4c 20 73 74 61 74  when an SQL stat
37550 65 6d 65 6e 74 20 69 73 20 6e 6f 74 0a 6d 61 6b  ement is not.mak
37560 69 6e 67 20 65 66 66 65 63 74 69 76 65 20 75 73  ing effective us
37570 65 20 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 4d  e of indices.  M
37580 61 6e 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  any applications
37590 20 6d 61 79 20 70 72 65 66 65 72 20 74 6f 0a 75   may prefer to.u
375a0 73 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  se the [sqlite3_
375b0 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 69  stmt_status()] i
375c0 6e 74 65 72 66 61 63 65 20 74 6f 20 64 65 74 65  nterface to dete
375d0 63 74 20 69 6e 64 65 78 20 6d 69 73 75 73 65 0a  ct index misuse.
375e0 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  rather than the 
375f0 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
37600 65 20 64 65 73 63 72 69 62 65 64 20 68 65 72 65  e described here
37610 2e 3c 2f 70 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63  .</p>.</ol>..<tc
37620 6c 3e 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c  l>.set keyword_l
37630 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20  ist [lsort {.   
37640 41 42 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a  ABORT.   ACTION.
37650 20 20 20 41 44 44 0a 20 20 20 41 46 54 45 52 0a     ADD.   AFTER.
37660 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a     ALL.   ALTER.
37670 20 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e     ANALYZE.   AN
37680 44 0a 20 20 20 41 53 0a 20 20 20 41 53 43 0a 20  D.   AS.   ASC. 
37690 20 20 41 54 54 41 43 48 0a 20 20 20 41 55 54 4f    ATTACH.   AUTO
376a0 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46  INCREMENT.   BEF
376b0 4f 52 45 0a 20 20 20 42 45 47 49 4e 0a 20 20 20  ORE.   BEGIN.   
376c0 42 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20  BETWEEN.   BY.  
376d0 20 43 41 53 43 41 44 45 0a 20 20 20 43 41 53 45   CASCADE.   CASE
376e0 0a 20 20 20 43 41 53 54 0a 20 20 20 43 48 45 43  .   CAST.   CHEC
376f0 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20  K.   COLLATE.   
37700 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54  COLUMN.   COMMIT
37710 0a 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20  .   CONFLICT.   
37720 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52  CONSTRAINT.   CR
37730 45 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20  EATE.   CROSS.  
37740 20 43 55 52 52 45 4e 54 0a 20 20 20 43 55 52 52   CURRENT.   CURR
37750 45 4e 54 5f 44 41 54 45 0a 20 20 20 43 55 52 52  ENT_DATE.   CURR
37760 45 4e 54 5f 54 49 4d 45 0a 20 20 20 43 55 52 52  ENT_TIME.   CURR
37770 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a 20 20  ENT_TIMESTAMP.  
37780 20 44 41 54 41 42 41 53 45 0a 20 20 20 44 45 46   DATABASE.   DEF
37790 41 55 4c 54 0a 20 20 20 44 45 46 45 52 52 45 44  AULT.   DEFERRED
377a0 0a 20 20 20 44 45 46 45 52 52 41 42 4c 45 0a 20  .   DEFERRABLE. 
377b0 20 20 44 45 4c 45 54 45 0a 20 20 20 44 45 53 43    DELETE.   DESC
377c0 0a 20 20 20 44 45 54 41 43 48 0a 20 20 20 44 49  .   DETACH.   DI
377d0 53 54 49 4e 43 54 0a 20 20 20 44 4f 0a 20 20 20  STINCT.   DO.   
377e0 44 52 4f 50 0a 20 20 20 45 4e 44 0a 20 20 20 45  DROP.   END.   E
377f0 41 43 48 0a 20 20 20 45 4c 53 45 0a 20 20 20 45  ACH.   ELSE.   E
37800 53 43 41 50 45 0a 20 20 20 45 58 43 45 50 54 0a  SCAPE.   EXCEPT.
37810 20 20 20 45 58 43 4c 55 53 49 56 45 0a 20 20 20     EXCLUSIVE.   
37820 45 58 43 4c 55 44 45 0a 20 20 20 45 58 49 53 54  EXCLUDE.   EXIST
37830 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a 20 20 20  S.   EXPLAIN.   
37840 46 41 49 4c 0a 20 20 20 46 49 4c 54 45 52 0a 20  FAIL.   FILTER. 
37850 20 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20 20 46    FOLLOWING.   F
37860 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20 20  OR.   FOREIGN.  
37870 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20   FROM.   FULL.  
37880 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55 50 0a 20   GLOB.   GROUP. 
37890 20 20 47 52 4f 55 50 53 0a 20 20 20 48 41 56 49    GROUPS.   HAVI
378a0 4e 47 0a 20 20 20 49 46 0a 20 20 20 49 47 4e 4f  NG.   IF.   IGNO
378b0 52 45 0a 20 20 20 49 4d 4d 45 44 49 41 54 45 0a  RE.   IMMEDIATE.
378c0 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20     IN.   INDEX. 
378d0 20 20 49 4e 44 45 58 45 44 0a 20 20 20 49 4e 49    INDEXED.   INI
378e0 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45 52 0a  TIALLY.   INNER.
378f0 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49 4e 53     INSERT.   INS
37900 54 45 41 44 0a 20 20 20 49 4e 54 45 52 53 45 43  TEAD.   INTERSEC
37910 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49 53 0a  T.   INTO.   IS.
37920 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49     ISNULL.   JOI
37930 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45 46 54  N.   KEY.   LEFT
37940 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49 4d 49  .   LIKE.   LIMI
37950 54 0a 20 20 20 4d 41 54 43 48 0a 20 20 20 4e 41  T.   MATCH.   NA
37960 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e  TURAL.   NO.   N
37970 4f 54 0a 20 20 20 4e 4f 54 48 49 4e 47 0a 20 20  OT.   NOTHING.  
37980 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c   NOTNULL.   NULL
37990 0a 20 20 20 4f 46 0a 20 20 20 4f 46 46 53 45 54  .   OF.   OFFSET
379a0 0a 20 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20  .   ON.   OR.   
379b0 4f 52 44 45 52 0a 20 20 20 4f 54 48 45 52 53 0a  ORDER.   OTHERS.
379c0 20 20 20 4f 55 54 45 52 0a 20 20 20 4f 56 45 52     OUTER.   OVER
379d0 0a 20 20 20 50 41 52 54 49 54 49 4f 4e 0a 20 20  .   PARTITION.  
379e0 20 50 4c 41 4e 0a 20 20 20 50 52 41 47 4d 41 0a   PLAN.   PRAGMA.
379f0 20 20 20 50 52 45 43 45 44 49 4e 47 0a 20 20 20     PRECEDING.   
37a00 50 52 49 4d 41 52 59 0a 20 20 20 51 55 45 52 59  PRIMARY.   QUERY
37a10 0a 20 20 20 52 41 49 53 45 0a 20 20 20 52 41 4e  .   RAISE.   RAN
37a20 47 45 0a 20 20 20 52 45 43 55 52 53 49 56 45 0a  GE.   RECURSIVE.
37a30 20 20 20 52 45 46 45 52 45 4e 43 45 53 0a 20 20     REFERENCES.  
37a40 20 52 45 47 45 58 50 0a 20 20 20 52 45 49 4e 44   REGEXP.   REIND
37a50 45 58 0a 20 20 20 52 45 4c 45 41 53 45 0a 20 20  EX.   RELEASE.  
37a60 20 52 45 4e 41 4d 45 0a 20 20 20 52 45 50 4c 41   RENAME.   REPLA
37a70 43 45 0a 20 20 20 52 45 53 54 52 49 43 54 0a 20