Documentation Source Text

Hex Artifact Content
Login

Artifact abda5d2d7526a8581f2c1f0a63581ec89e65887ff3d598fcce49b0739d6a74f1:


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 20   {rename table} 
0f00: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
0f10: 20 20 20 7b 41 4c 54 45 52 20 54 41 42 4c 45 20     {ALTER TABLE 
0f20: 52 45 4e 41 4d 45 20 64 6f 63 75 6d 65 6e 74 61  RENAME documenta
0f30: 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  tion}</tcl>.<h3>
0f40: 41 4c 54 45 52 20 54 41 42 4c 45 20 52 45 4e 41  ALTER TABLE RENA
0f50: 4d 45 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28 54  ME</h3>..<p> ^(T
0f60: 68 65 20 52 45 4e 41 4d 45 20 54 4f 20 73 79 6e  he RENAME TO syn
0f70: 74 61 78 20 63 68 61 6e 67 65 73 20 74 68 65 20  tax changes the 
0f80: 6e 61 6d 65 20 6f 66 20 3c 79 79 74 65 72 6d 3e  name of <yyterm>
0f90: 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  table-name</yyte
0fa0: 72 6d 3e 0a 74 6f 20 3c 79 79 74 65 72 6d 3e 6e  rm>.to <yyterm>n
0fb0: 65 77 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79  ew-table-name</y
0fc0: 79 74 65 72 6d 3e 2e 29 5e 0a 54 68 69 73 20 63  yterm>.)^.This c
0fd0: 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e 6f 74 20 62  ommand .cannot b
0fe0: 65 20 75 73 65 64 20 74 6f 20 6d 6f 76 65 20 61  e used to move a
0ff0: 20 74 61 62 6c 65 20 62 65 74 77 65 65 6e 20 61   table between a
1000: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1010: 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65 6e 61 6d  s, only to renam
1020: 65 20 0a 61 20 74 61 62 6c 65 20 77 69 74 68 69  e .a table withi
1030: 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
1040: 61 73 65 2e 0a 5e 49 66 20 74 68 65 20 74 61 62  ase..^If the tab
1050: 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64  le being renamed
1060: 20 68 61 73 20 74 72 69 67 67 65 72 73 20 6f 72   has triggers or
1070: 20 69 6e 64 69 63 65 73 2c 20 74 68 65 6e 20 74   indices, then t
1080: 68 65 73 65 20 72 65 6d 61 69 6e 0a 61 74 74 61  hese remain.atta
1090: 63 68 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c  ched to the tabl
10a0: 65 20 61 66 74 65 72 20 69 74 20 68 61 73 20 62  e after it has b
10b0: 65 65 6e 20 72 65 6e 61 6d 65 64 2e 0a 0a 3c 62  een renamed...<b
10c0: 6c 6f 63 6b 71 75 6f 74 65 20 73 74 79 6c 65 3d  lockquote style=
10d0: 27 62 61 63 6b 67 72 6f 75 6e 64 2d 63 6f 6c 6f  'background-colo
10e0: 72 3a 20 23 66 66 64 30 64 30 3b 27 3e 0a 3c 62  r: #ffd0d0;'>.<b
10f0: 3e 43 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 4e  >Compatibility N
1100: 6f 74 65 3a 3c 2f 62 3e 0a 54 68 65 20 62 65 68  ote:</b>.The beh
1110: 61 76 69 6f 72 20 6f 66 20 41 4c 54 45 52 20 54  avior of ALTER T
1120: 41 42 4c 45 20 77 68 65 6e 20 72 65 6e 61 6d 69  ABLE when renami
1130: 6e 67 20 61 20 74 61 62 6c 65 20 77 61 73 20 65  ng a table was e
1140: 6e 68 61 6e 63 65 64 0a 69 6e 20 76 65 72 73 69  nhanced.in versi
1150: 6f 6e 73 20 33 2e 32 35 2e 30 20 28 5b 64 61 74  ons 3.25.0 ([dat
1160: 65 6f 66 3a 33 2e 32 35 2e 30 5d 29 20 61 6e 64  eof:3.25.0]) and
1170: 20 33 2e 32 36 2e 30 20 28 5b 64 61 74 65 6f 66   3.26.0 ([dateof
1180: 3a 33 2e 32 36 2e 30 5d 29 0a 69 6e 20 6f 72 64  :3.26.0]).in ord
1190: 65 72 20 74 6f 20 63 61 72 72 79 20 74 68 65 20  er to carry the 
11a0: 72 65 6e 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  rename operation
11b0: 20 66 6f 72 77 61 72 64 20 69 6e 74 6f 20 74 72   forward into tr
11c0: 69 67 67 65 72 73 20 61 6e 64 0a 76 69 65 77 73  iggers and.views
11d0: 20 74 68 61 74 20 72 65 66 65 72 65 6e 63 65 20   that reference 
11e0: 74 68 65 20 72 65 6e 61 6d 65 64 20 74 61 62 6c  the renamed tabl
11f0: 65 2e 20 20 54 68 69 73 20 69 73 20 63 6f 6e 73  e.  This is cons
1200: 69 64 65 72 65 64 20 61 6e 0a 69 6d 70 72 6f 76  idered an.improv
1210: 65 6d 65 6e 74 2e 20 41 70 70 6c 69 63 61 74 69  ement. Applicati
1220: 6f 6e 73 20 74 68 61 74 20 64 65 70 65 6e 64 20  ons that depend 
1230: 6f 6e 20 74 68 65 20 6f 6c 64 65 72 20 28 61 6e  on the older (an
1240: 64 0a 61 72 67 75 61 62 6c 79 20 62 75 67 67 79  d.arguably buggy
1250: 29 20 62 65 68 61 76 69 6f 72 20 63 61 6e 20 75  ) behavior can u
1260: 73 65 20 74 68 65 0a 5b 50 52 41 47 4d 41 20 6c  se the.[PRAGMA l
1270: 65 67 61 63 79 5f 61 6c 74 65 72 5f 74 61 62 6c  egacy_alter_tabl
1280: 65 3d 4f 4e 5d 20 73 74 61 74 65 6d 65 6e 74 20  e=ON] statement 
1290: 6f 72 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 44  or the.[SQLITE_D
12a0: 42 43 4f 4e 46 49 47 5f 4c 45 47 41 43 59 5f 41  BCONFIG_LEGACY_A
12b0: 4c 54 45 52 5f 54 41 42 4c 45 5d 20 63 6f 6e 66  LTER_TABLE] conf
12c0: 69 67 75 72 61 74 69 6f 6e 20 70 61 72 61 6d 65  iguration parame
12d0: 74 65 72 0a 6f 6e 20 5b 73 71 6c 69 74 65 33 5f  ter.on [sqlite3_
12e0: 64 62 5f 63 6f 6e 66 69 67 28 29 5d 20 69 6e 74  db_config()] int
12f0: 65 72 66 61 63 65 20 74 6f 20 6d 61 6b 65 20 41  erface to make A
1300: 4c 54 45 52 20 54 41 42 4c 45 20 52 45 4e 41 4d  LTER TABLE RENAM
1310: 45 0a 62 65 68 61 76 65 20 61 73 20 69 74 20 64  E.behave as it d
1320: 69 64 20 70 72 69 6f 72 20 74 6f 20 76 65 72 73  id prior to vers
1330: 69 6f 6e 20 33 2e 32 35 2e 30 2e 0a 3c 2f 62 6c  ion 3.25.0..</bl
1340: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 42  ockquote>..<p>.B
1350: 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 72 65  eginning with re
1360: 6c 65 61 73 65 20 33 2e 32 35 2e 30 20 28 5b 64  lease 3.25.0 ([d
1370: 61 74 65 6f 66 3a 33 2e 32 35 2e 30 5d 29 2c 20  ateof:3.25.0]), 
1380: 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68  references to th
1390: 65 20 74 61 62 6c 65 0a 77 69 74 68 69 6e 20 74  e table.within t
13a0: 72 69 67 67 65 72 20 62 6f 64 69 65 73 20 61 6e  rigger bodies an
13b0: 64 20 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f  d view definitio
13c0: 6e 73 20 61 72 65 20 61 6c 73 6f 20 72 65 6e 61  ns are also rena
13d0: 6d 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 50  med..</p>..<p> P
13e0: 72 69 6f 72 20 74 6f 20 76 65 72 73 69 6f 6e 20  rior to version 
13f0: 33 2e 32 36 2e 30 20 28 5b 64 61 74 65 6f 66 3a  3.26.0 ([dateof:
1400: 33 2e 32 36 2e 30 5d 29 2c 20 46 4f 52 45 49 47  3.26.0]), FOREIG
1410: 4e 20 4b 45 59 20 72 65 66 65 72 65 6e 63 65 73  N KEY references
1420: 0a 74 6f 20 61 20 74 61 62 6c 65 20 74 68 61 74  .to a table that
1430: 20 69 73 20 72 65 6e 61 6d 65 64 20 77 65 72 65   is renamed were
1440: 20 6f 6e 6c 79 20 65 64 69 74 65 64 20 69 66 20   only edited if 
1450: 74 68 65 0a 5b 50 52 41 47 4d 41 20 66 6f 72 65  the.[PRAGMA fore
1460: 69 67 6e 5f 6b 65 79 73 3d 4f 4e 5d 2c 20 6f 72  ign_keys=ON], or
1470: 20 69 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 20   in other words 
1480: 69 66 0a 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20  if.[foreign key 
1490: 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 77 65 72  constraints] wer
14a0: 65 20 62 65 67 69 6e 20 65 6e 66 6f 72 63 65 64  e begin enforced
14b0: 2e 20 20 57 69 74 68 0a 5b 50 52 41 47 4d 41 20  .  With.[PRAGMA 
14c0: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3d 4f 46 46  foreign_keys=OFF
14d0: 5d 2c 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  ], FOREIGN KEY c
14e0: 6f 6e 73 74 72 61 69 6e 74 73 20 77 6f 75 6c 64  onstraints would
14f0: 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 0a   not be changed.
1500: 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  when the table t
1510: 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  hat the foreign 
1520: 6b 65 79 20 72 65 66 65 72 72 65 64 20 74 6f 20  key referred to 
1530: 28 74 68 65 20 22 5b 70 61 72 65 6e 74 20 74 61  (the "[parent ta
1540: 62 6c 65 5d 22 29 0a 77 61 73 20 72 65 6e 61 6d  ble]").was renam
1550: 65 64 2e 20 20 42 65 67 69 6e 6e 69 6e 67 20 77  ed.  Beginning w
1560: 69 74 68 20 76 65 72 73 69 6f 6e 20 33 2e 32 36  ith version 3.26
1570: 2e 30 2c 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  .0, FOREIGN KEY 
1580: 63 6f 6e 73 74 72 61 69 6e 74 73 0a 61 72 65 20  constraints.are 
1590: 61 6c 77 61 79 73 20 63 6f 6e 76 65 72 74 65 64  always converted
15a0: 20 77 68 65 6e 20 61 20 74 61 62 6c 65 20 69 73   when a table is
15b0: 20 72 65 6e 61 6d 65 64 2c 20 75 6e 6c 65 73 73   renamed, unless
15c0: 20 74 68 65 0a 5b 50 52 41 47 4d 41 20 6c 65 67   the.[PRAGMA leg
15d0: 61 63 79 5f 61 6c 74 65 72 5f 74 61 62 6c 65 3d  acy_alter_table=
15e0: 4f 4e 5d 20 73 65 74 74 69 6e 67 20 69 73 20 65  ON] setting is e
15f0: 6e 67 61 67 65 64 2e 20 20 54 68 65 20 66 6f 6c  ngaged.  The fol
1600: 6c 6f 77 69 6e 67 0a 74 61 62 6c 65 20 73 75 6d  lowing.table sum
1610: 6d 61 72 69 65 73 20 74 68 65 20 64 69 66 66 65  maries the diffe
1620: 72 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  rence:</p>..<blo
1630: 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
1640: 62 6f 72 64 65 72 3d 22 31 22 20 63 65 6c 6c 70  border="1" cellp
1650: 61 64 64 69 6e 67 3d 22 32 22 20 63 65 6c 6c 73  adding="2" cells
1660: 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e  pacing="0">.<tr>
1670: 0a 3c 74 68 3e 50 52 41 47 4d 41 20 66 6f 72 65  .<th>PRAGMA fore
1680: 69 67 6e 5f 6b 65 79 73 0a 3c 74 68 3e 50 52 41  ign_keys.<th>PRA
1690: 47 4d 41 20 6c 65 67 61 63 79 5f 61 6c 74 65 72  GMA legacy_alter
16a0: 5f 74 61 62 6c 65 0a 3c 74 68 3e 5b 70 61 72 65  _table.<th>[pare
16b0: 6e 74 20 74 61 62 6c 65 7c 50 61 72 65 6e 74 20  nt table|Parent 
16c0: 54 61 62 6c 65 5d 0a 72 65 66 65 72 65 6e 63 65  Table].reference
16d0: 73 20 61 72 65 20 75 70 64 61 74 65 64 0a 3c 74  s are updated.<t
16e0: 68 3e 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  h>SQLite version
16f0: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22  .<tr><td align="
1700: 63 65 6e 74 65 72 22 3e 4f 66 66 3c 74 64 20 61  center">Off<td a
1710: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4f 66  lign="center">Of
1720: 66 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  f<td align="cent
1730: 65 72 22 3e 4e 6f 3c 74 64 20 61 6c 69 67 6e 3d  er">No<td align=
1740: 22 63 65 6e 74 65 72 22 3e 26 6c 74 3b 20 33 2e  "center">&lt; 3.
1750: 32 36 2e 30 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  26.0.<tr><td ali
1760: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4f 66 66 3c  gn="center">Off<
1770: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
1780: 22 3e 4f 66 66 3c 74 64 20 61 6c 69 67 6e 3d 22  ">Off<td align="
1790: 63 65 6e 74 65 72 22 3e 59 65 73 3c 74 64 20 61  center">Yes<td a
17a0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 26 67  lign="center">&g
17b0: 74 3b 3d 20 33 2e 32 36 2e 30 0a 3c 74 72 3e 3c  t;= 3.26.0.<tr><
17c0: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
17d0: 22 3e 4f 6e 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ">On<td align="c
17e0: 65 6e 74 65 72 22 3e 4f 66 66 3c 74 64 20 61 6c  enter">Off<td al
17f0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 59 65 73  ign="center">Yes
1800: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
1810: 72 22 3e 61 6c 6c 0a 3c 74 72 3e 3c 74 64 20 61  r">all.<tr><td a
1820: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4f 66  lign="center">Of
1830: 66 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  f<td align="cent
1840: 65 72 22 3e 4f 6e 3c 74 64 20 61 6c 69 67 6e 3d  er">On<td align=
1850: 22 63 65 6e 74 65 72 22 3e 4e 6f 3c 74 64 20 61  "center">No<td a
1860: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 61 6c  lign="center">al
1870: 6c 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  l.<tr><td align=
1880: 22 63 65 6e 74 65 72 22 3e 4f 6e 3c 74 64 20 61  "center">On<td a
1890: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4f 6e  lign="center">On
18a0: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
18b0: 72 22 3e 59 65 73 3c 74 64 20 61 6c 69 67 6e 3d  r">Yes<td align=
18c0: 22 63 65 6e 74 65 72 22 3e 61 6c 6c 0a 3c 2f 74  "center">all.</t
18d0: 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  able>.</blockquo
18e0: 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  te>..<tcl>hd_fra
18f0: 67 6d 65 6e 74 20 61 6c 74 65 72 74 61 62 6d 76  gment altertabmv
1900: 63 6f 6c 20 7b 41 4c 54 45 52 20 54 41 42 4c 45  col {ALTER TABLE
1910: 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 7d 20   RENAME COLUMN} 
1920: 7b 72 65 6e 61 6d 65 20 63 6f 6c 75 6d 6e 7d 3c  {rename column}<
1930: 2f 74 63 6c 3e 0a 3c 68 33 3e 41 4c 54 45 52 20  /tcl>.<h3>ALTER 
1940: 54 41 42 4c 45 20 52 45 4e 41 4d 45 20 43 4f 4c  TABLE RENAME COL
1950: 55 4d 4e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 54 68  UMN</h3>..<p> Th
1960: 65 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20  e RENAME COLUMN 
1970: 54 4f 20 73 79 6e 74 61 78 20 63 68 61 6e 67 65  TO syntax change
1980: 73 20 74 68 65 0a 3c 79 79 74 65 72 6d 3e 63 6f  s the.<yyterm>co
1990: 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  lumn-name</yyter
19a0: 6d 3e 20 6f 66 20 74 61 62 6c 65 20 3c 79 79 74  m> of table <yyt
19b0: 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  erm>table-name</
19c0: 79 79 74 65 72 6d 3e 0a 69 6e 74 6f 20 3c 79 79  yyterm>.into <yy
19d0: 74 65 72 6d 3e 6e 65 77 2d 63 6f 6c 75 6d 6e 2d  term>new-column-
19e0: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 2e 20 20  name</yyterm>.  
19f0: 54 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  The column name 
1a00: 69 73 20 63 68 61 6e 67 65 64 20 62 6f 74 68 0a  is changed both.
1a10: 77 69 74 68 69 6e 20 74 68 65 20 74 61 62 6c 65  within the table
1a20: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 74 73 65   definition itse
1a30: 6c 66 20 61 6e 64 20 61 6c 73 6f 20 77 69 74 68  lf and also with
1a40: 69 6e 20 61 6c 6c 20 69 6e 64 65 78 65 73 2c 20  in all indexes, 
1a50: 74 72 69 67 67 65 72 73 2c 0a 61 6e 64 20 76 69  triggers,.and vi
1a60: 65 77 73 20 74 68 61 74 20 72 65 66 65 72 65 6e  ews that referen
1a70: 63 65 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20  ce the column.  
1a80: 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  If the column na
1a90: 6d 65 20 63 68 61 6e 67 65 20 77 6f 75 6c 64 0a  me change would.
1aa0: 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 6d 61  result in a sema
1ab0: 6e 74 69 63 20 61 6d 62 69 67 75 69 74 79 20 69  ntic ambiguity i
1ac0: 6e 20 61 20 74 72 69 67 67 65 72 20 6f 72 20 76  n a trigger or v
1ad0: 69 65 77 2c 20 74 68 65 6e 20 74 68 65 20 52 45  iew, then the RE
1ae0: 4e 41 4d 45 0a 43 4f 4c 55 4d 4e 20 66 61 69 6c  NAME.COLUMN fail
1af0: 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20  s with an error 
1b00: 61 6e 64 20 6e 6f 20 63 68 61 6e 67 65 73 20 61  and no changes a
1b10: 72 65 20 61 70 70 6c 69 65 64 2e 0a 0a 3c 74 63  re applied...<tc
1b20: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 61 6c  l>hd_fragment al
1b30: 74 65 72 74 61 62 61 64 64 63 6f 6c 20 7b 41 4c  tertabaddcol {AL
1b40: 54 45 52 20 54 41 42 4c 45 20 41 44 44 20 43 4f  TER TABLE ADD CO
1b50: 4c 55 4d 4e 7d 20 7b 61 64 64 20 63 6f 6c 75 6d  LUMN} {add colum
1b60: 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 41 4c 54  n}</tcl>.<h3>ALT
1b70: 45 52 20 54 41 42 4c 45 20 41 44 44 20 43 4f 4c  ER TABLE ADD COL
1b80: 55 4d 4e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 54  UMN</h3>..<p> ^T
1b90: 68 65 20 41 44 44 20 43 4f 4c 55 4d 4e 20 73 79  he ADD COLUMN sy
1ba0: 6e 74 61 78 0a 69 73 20 75 73 65 64 20 74 6f 20  ntax.is used to 
1bb0: 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
1bc0: 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20   to an existing 
1bd0: 74 61 62 6c 65 2e 0a 5e 54 68 65 20 6e 65 77 20  table..^The new 
1be0: 63 6f 6c 75 6d 6e 20 69 73 20 61 6c 77 61 79 73  column is always
1bf0: 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65   appended to the
1c00: 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 69 73 74   end of the list
1c10: 20 6f 66 20 65 78 69 73 74 69 6e 67 20 63 6f 6c   of existing col
1c20: 75 6d 6e 73 2e 0a 54 68 65 20 5b 63 6f 6c 75 6d  umns..The [colum
1c30: 6e 2d 64 65 66 5d 20 72 75 6c 65 20 64 65 66 69  n-def] rule defi
1c40: 6e 65 73 20 74 68 65 20 63 68 61 72 61 63 74 65  nes the characte
1c50: 72 69 73 74 69 63 73 20 6f 66 20 74 68 65 20 6e  ristics of the n
1c60: 65 77 20 63 6f 6c 75 6d 6e 2e 0a 5e 28 54 68 65  ew column..^(The
1c70: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 6d 61 79 20   new column may 
1c80: 74 61 6b 65 20 61 6e 79 20 6f 66 20 74 68 65 20  take any of the 
1c90: 66 6f 72 6d 73 20 70 65 72 6d 69 73 73 69 62 6c  forms permissibl
1ca0: 65 20 69 6e 20 61 20 5b 43 52 45 41 54 45 20 54  e in a [CREATE T
1cb0: 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 2c  ABLE].statement,
1cc0: 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77   with the follow
1cd0: 69 6e 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ing restrictions
1ce0: 3a 29 5e 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68  :)^.<ul>.<li>^Th
1cf0: 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74  e column may not
1d00: 20 68 61 76 65 20 61 20 50 52 49 4d 41 52 59 20   have a PRIMARY 
1d10: 4b 45 59 20 6f 72 20 55 4e 49 51 55 45 20 63 6f  KEY or UNIQUE co
1d20: 6e 73 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c  nstraint.</li>.<
1d30: 6c 69 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d  li>^The column m
1d40: 61 79 20 6e 6f 74 20 68 61 76 65 20 61 20 64 65  ay not have a de
1d50: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 43  fault value of C
1d60: 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52  URRENT_TIME, CUR
1d70: 52 45 4e 54 5f 44 41 54 45 2c 20 0a 20 20 20 20  RENT_DATE, .    
1d80: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
1d90: 50 2c 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73  P, or an express
1da0: 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68 65 73  ion in parenthes
1db0: 65 73 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 49 66  es.</li>.<li>^If
1dc0: 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
1dd0: 74 72 61 69 6e 74 20 69 73 20 73 70 65 63 69 66  traint is specif
1de0: 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ied, then the co
1df0: 6c 75 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61  lumn must have a
1e00: 0a 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c  .    default val
1e10: 75 65 20 6f 74 68 65 72 20 74 68 61 6e 20 4e 55  ue other than NU
1e20: 4c 4c 2e 0a 3c 6c 69 3e 5e 49 66 20 5b 66 6f 72  LL..<li>^If [for
1e30: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
1e40: 69 6e 74 73 5d 20 61 72 65 20 5b 66 6f 72 65 69  ints] are [forei
1e50: 67 6e 5f 6b 65 79 73 20 70 72 61 67 6d 61 20 7c  gn_keys pragma |
1e60: 20 65 6e 61 62 6c 65 64 5d 20 61 6e 64 0a 20 20   enabled] and.  
1e70: 20 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20    a column with 
1e80: 61 20 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63  a [foreign-key-c
1e90: 6c 61 75 73 65 20 7c 20 52 45 46 45 52 45 4e 43  lause | REFERENC
1ea0: 45 53 20 63 6c 61 75 73 65 5d 0a 20 20 20 20 69  ES clause].    i
1eb0: 73 20 61 64 64 65 64 2c 20 74 68 65 20 63 6f 6c  s added, the col
1ec0: 75 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 20  umn must have a 
1ed0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  default value of
1ee0: 20 4e 55 4c 4c 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70   NULL..</ul>..<p
1ef0: 3e 5e 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74  >^Note also that
1f00: 20 77 68 65 6e 20 61 64 64 69 6e 67 20 61 20 5b   when adding a [
1f10: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
1f20: 5d 2c 20 74 68 65 20 43 48 45 43 4b 20 63 6f 6e  ], the CHECK con
1f30: 73 74 72 61 69 6e 74 0a 69 73 20 6e 6f 74 20 74  straint.is not t
1f40: 65 73 74 65 64 20 61 67 61 69 6e 73 74 20 70 72  ested against pr
1f50: 65 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20 6f  eexisting rows o
1f60: 66 20 74 68 65 20 74 61 62 6c 65 2e 0a 5e 54 68  f the table..^Th
1f70: 69 73 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e  is can result in
1f80: 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f   a table that co
1f90: 6e 74 61 69 6e 73 20 64 61 74 61 20 74 68 61 74  ntains data that
1fa0: 0a 69 73 20 69 6e 20 76 69 6f 6c 61 74 69 6f 6e  .is in violation
1fb0: 20 6f 66 20 74 68 65 20 43 48 45 43 4b 20 63 6f   of the CHECK co
1fc0: 6e 73 74 72 61 69 6e 74 2e 20 20 46 75 74 75 72  nstraint.  Futur
1fd0: 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  e versions of SQ
1fe0: 4c 69 74 65 20 6d 69 67 68 74 0a 63 68 61 6e 67  Lite might.chang
1ff0: 65 20 74 6f 20 76 61 6c 69 64 61 74 65 20 43 48  e to validate CH
2000: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ECK constraints 
2010: 61 73 20 74 68 65 79 20 61 72 65 20 61 64 64 65  as they are adde
2020: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 41  d.</p>..<p>The A
2030: 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61  LTER TABLE comma
2040: 6e 64 20 77 6f 72 6b 73 20 62 79 20 6d 6f 64 69  nd works by modi
2050: 66 79 69 6e 67 20 74 68 65 20 53 51 4c 20 74 65  fying the SQL te
2060: 78 74 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  xt of the schema
2070: 0a 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 5b  .stored in the [
2080: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
2090: 62 6c 65 5d 2e 0a 4e 6f 20 63 68 61 6e 67 65 73  ble]..No changes
20a0: 20 61 72 65 20 6d 61 64 65 20 74 6f 20 74 61 62   are made to tab
20b0: 6c 65 20 63 6f 6e 74 65 6e 74 2e 0a 42 65 63 61  le content..Beca
20c0: 75 73 65 20 6f 66 20 74 68 69 73 2c 0a 74 68 65  use of this,.the
20d0: 20 65 78 65 63 75 74 69 6f 6e 20 74 69 6d 65 20   execution time 
20e0: 6f 66 20 74 68 65 20 41 4c 54 45 52 20 54 41 42  of the ALTER TAB
20f0: 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e  LE command is in
2100: 64 65 70 65 6e 64 65 6e 74 20 6f 66 0a 74 68 65  dependent of.the
2110: 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61 20   amount of data 
2120: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54  in the table.  T
2130: 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63  he ALTER TABLE c
2140: 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 61 73 20 71  ommand runs as q
2150: 75 69 63 6b 6c 79 0a 6f 6e 20 61 20 74 61 62 6c  uickly.on a tabl
2160: 65 20 77 69 74 68 20 31 30 20 6d 69 6c 6c 69 6f  e with 10 millio
2170: 6e 20 72 6f 77 73 20 61 73 20 69 74 20 64 6f 65  n rows as it doe
2180: 73 20 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74  s on a table wit
2190: 68 20 31 20 72 6f 77 2e 0a 3c 2f 70 3e 0a 0a 3c  h 1 row..</p>..<
21a0: 70 3e 41 66 74 65 72 20 41 44 44 20 43 4f 4c 55  p>After ADD COLU
21b0: 4d 4e 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20  MN has been run 
21c0: 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2c 20 74  on a database, t
21d0: 68 61 74 20 64 61 74 61 62 61 73 65 20 77 69 6c  hat database wil
21e0: 6c 20 6e 6f 74 0a 62 65 20 72 65 61 64 61 62 6c  l not.be readabl
21f0: 65 20 62 79 20 53 51 4c 69 74 65 20 76 65 72 73  e by SQLite vers
2200: 69 6f 6e 20 33 2e 31 2e 33 20 28 5b 64 61 74 65  ion 3.1.3 ([date
2210: 6f 66 3a 33 2e 31 2e 33 5d 29 20 61 6e 64 20 65  of:3.1.3]) and e
2220: 61 72 6c 69 65 72 2e 3c 2f 70 3e 0a 0a 3c 74 63  arlier.</p>..<tc
2230: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 74  l>hd_fragment ot
2240: 68 65 72 61 6c 74 65 72 20 7b 67 65 6e 65 72 61  heralter {genera
2250: 6c 69 7a 65 64 20 41 4c 54 45 52 20 54 41 42 4c  lized ALTER TABL
2260: 45 20 70 72 6f 63 65 64 75 72 65 7d 3c 2f 74 63  E procedure}</tc
2270: 6c 3e 0a 3c 68 33 3e 4d 61 6b 69 6e 67 20 4f 74  l>.<h3>Making Ot
2280: 68 65 72 20 4b 69 6e 64 73 20 4f 66 20 54 61 62  her Kinds Of Tab
2290: 6c 65 20 53 63 68 65 6d 61 20 43 68 61 6e 67 65  le Schema Change
22a0: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 54 68 65 20  s</h3>..<p> The 
22b0: 6f 6e 6c 79 20 73 63 68 65 6d 61 20 61 6c 74 65  only schema alte
22c0: 72 69 6e 67 20 63 6f 6d 6d 61 6e 64 73 20 64 69  ring commands di
22d0: 72 65 63 74 6c 79 20 73 75 70 70 6f 72 74 65 64  rectly supported
22e0: 20 62 79 20 53 51 4c 69 74 65 20 61 72 65 20 74   by SQLite are t
22f0: 68 65 0a 22 5b 72 65 6e 61 6d 65 20 74 61 62 6c  he."[rename tabl
2300: 65 5d 22 2c 20 22 5b 72 65 6e 61 6d 65 20 63 6f  e]", "[rename co
2310: 6c 75 6d 6e 5d 22 2c 20 61 6e 64 20 22 5b 61 64  lumn]", and "[ad
2320: 64 20 63 6f 6c 75 6d 6e 5d 22 20 63 6f 6d 6d 61  d column]" comma
2330: 6e 64 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 2e  nds shown above.
2340: 20 20 0a 48 6f 77 65 76 65 72 2c 20 61 70 70 6c    .However, appl
2350: 69 63 61 74 69 6f 6e 73 0a 63 61 6e 20 6d 61 6b  ications.can mak
2360: 65 20 6f 74 68 65 72 20 61 72 62 69 74 72 61 72  e other arbitrar
2370: 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  y changes to the
2380: 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 74 61 62   format of a tab
2390: 6c 65 20 75 73 69 6e 67 20 61 20 73 69 6d 70 6c  le using a simpl
23a0: 65 0a 73 65 71 75 65 6e 63 65 20 6f 66 20 6f 70  e.sequence of op
23b0: 65 72 61 74 69 6f 6e 73 2e 0a 54 68 65 20 73 74  erations..The st
23c0: 65 70 73 20 74 6f 20 6d 61 6b 65 20 61 72 62 69  eps to make arbi
23d0: 74 72 61 72 79 20 63 68 61 6e 67 65 73 20 74 6f  trary changes to
23e0: 20 74 68 65 20 73 63 68 65 6d 61 20 64 65 73 69   the schema desi
23f0: 67 6e 20 6f 66 20 73 6f 6d 65 20 74 61 62 6c 65  gn of some table
2400: 20 58 0a 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77   X.are as follow
2410: 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e  s:..<ol>.<li><p>
2420: 0a 49 66 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  .If foreign key 
2430: 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
2440: 65 6e 61 62 6c 65 64 2c 20 64 69 73 61 62 6c 65  enabled, disable
2450: 20 74 68 65 6d 20 75 73 69 6e 67 20 5b 50 52 41   them using [PRA
2460: 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73  GMA foreign_keys
2470: 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  =OFF]...<li><p>.
2480: 53 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  Start a transact
2490: 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 52 65  ion...<li><p>.Re
24a0: 6d 65 6d 62 65 72 20 74 68 65 20 66 6f 72 6d 61  member the forma
24b0: 74 20 6f 66 20 61 6c 6c 20 69 6e 64 65 78 65 73  t of all indexes
24c0: 2c 20 74 72 69 67 67 65 72 73 2c 20 61 6e 64 20  , triggers, and 
24d0: 76 69 65 77 73 20 61 73 73 6f 63 69 61 74 65 64  views associated
24e0: 20 77 69 74 68 20 74 61 62 6c 65 20 58 2e 0a 54   with table X..T
24f0: 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
2500: 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64 20 69  will be needed i
2510: 6e 20 73 74 65 70 20 38 20 62 65 6c 6f 77 2e 20  n step 8 below. 
2520: 20 4f 6e 65 20 77 61 79 20 74 6f 20 64 6f 20 74   One way to do t
2530: 68 69 73 20 69 73 0a 74 6f 20 72 75 6e 20 61 20  his is.to run a 
2540: 71 75 65 72 79 20 6c 69 6b 65 20 74 68 65 20 66  query like the f
2550: 6f 6c 6c 6f 77 69 6e 67 3a 0a 53 45 4c 45 43 54  ollowing:.SELECT
2560: 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f 4d 20   type, sql FROM 
2570: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
2580: 45 52 45 20 74 62 6c 5f 6e 61 6d 65 3d 27 58 27  ERE tbl_name='X'
2590: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55 73 65 20 5b  ...<li><p>.Use [
25a0: 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 74 6f  CREATE TABLE] to
25b0: 20 63 6f 6e 73 74 72 75 63 74 20 61 20 6e 65 77   construct a new
25c0: 20 74 61 62 6c 65 20 22 6e 65 77 5f 58 22 20 74   table "new_X" t
25d0: 68 61 74 20 69 73 20 69 6e 20 74 68 65 20 64 65  hat is in the de
25e0: 73 69 72 65 64 0a 72 65 76 69 73 65 64 20 66 6f  sired.revised fo
25f0: 72 6d 61 74 20 6f 66 20 74 61 62 6c 65 20 58 2e  rmat of table X.
2600: 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74    Make sure that
2610: 20 74 68 65 20 6e 61 6d 65 20 22 6e 65 77 5f 58   the name "new_X
2620: 22 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6c 6c 69  " does not colli
2630: 64 65 0a 77 69 74 68 20 61 6e 79 20 65 78 69 73  de.with any exis
2640: 74 69 6e 67 20 74 61 62 6c 65 20 6e 61 6d 65 2c  ting table name,
2650: 20 6f 66 20 63 6f 75 72 73 65 2e 0a 0a 3c 6c 69   of course...<li
2660: 3e 3c 70 3e 0a 54 72 61 6e 73 66 65 72 20 63 6f  ><p>.Transfer co
2670: 6e 74 65 6e 74 20 66 72 6f 6d 20 58 20 69 6e 74  ntent from X int
2680: 6f 20 6e 65 77 5f 58 20 75 73 69 6e 67 20 61 20  o new_X using a 
2690: 73 74 61 74 65 6d 65 6e 74 0a 6c 69 6b 65 3a 20  statement.like: 
26a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 6e 65 77 5f  INSERT INTO new_
26b0: 58 20 53 45 4c 45 43 54 20 2e 2e 2e 20 46 52 4f  X SELECT ... FRO
26c0: 4d 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 44 72  M X...<li><p>.Dr
26d0: 6f 70 20 74 68 65 20 6f 6c 64 20 74 61 62 6c 65  op the old table
26e0: 20 58 3a 20 20 5b 44 52 4f 50 20 54 41 42 4c 45   X:  [DROP TABLE
26f0: 20 7c 20 44 52 4f 50 20 54 41 42 4c 45 20 58 5d   | DROP TABLE X]
2700: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 43 68 61 6e 67  ...<li><p>.Chang
2710: 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 6e 65  e the name of ne
2720: 77 5f 58 20 74 6f 20 58 20 75 73 69 6e 67 3a 20  w_X to X using: 
2730: 41 4c 54 45 52 20 54 41 42 4c 45 20 6e 65 77 5f  ALTER TABLE new_
2740: 58 20 52 45 4e 41 4d 45 20 54 4f 20 58 2e 0a 0a  X RENAME TO X...
2750: 3c 6c 69 3e 3c 70 3e 0a 55 73 65 20 5b 43 52 45  <li><p>.Use [CRE
2760: 41 54 45 20 49 4e 44 45 58 5d 2c 20 5b 43 52 45  ATE INDEX], [CRE
2770: 41 54 45 20 54 52 49 47 47 45 52 5d 2c 20 61 6e  ATE TRIGGER], an
2780: 64 20 5b 43 52 45 41 54 45 20 56 49 45 57 5d 0a  d [CREATE VIEW].
2790: 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74 20 69  to reconstruct i
27a0: 6e 64 65 78 65 73 2c 20 74 72 69 67 67 65 72 73  ndexes, triggers
27b0: 2c 20 61 6e 64 20 76 69 65 77 73 0a 61 73 73 6f  , and views.asso
27c0: 63 69 61 74 65 64 20 77 69 74 68 20 74 61 62 6c  ciated with tabl
27d0: 65 20 58 2e 20 20 50 65 72 68 61 70 73 20 75 73  e X.  Perhaps us
27e0: 65 20 74 68 65 20 6f 6c 64 20 66 6f 72 6d 61 74  e the old format
27f0: 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 73   of the triggers
2800: 2c 0a 69 6e 64 65 78 65 73 2c 20 61 6e 64 20 76  ,.indexes, and v
2810: 69 65 77 73 20 73 61 76 65 64 20 66 72 6f 6d 20  iews saved from 
2820: 73 74 65 70 20 33 20 61 62 6f 76 65 20 61 73 20  step 3 above as 
2830: 61 20 67 75 69 64 65 2c 20 6d 61 6b 69 6e 67 20  a guide, making 
2840: 63 68 61 6e 67 65 73 0a 61 73 20 61 70 70 72 6f  changes.as appro
2850: 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 61  priate for the a
2860: 6c 74 65 72 61 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e  lteration...<li>
2870: 3c 70 3e 49 66 20 61 6e 79 20 76 69 65 77 73 20  <p>If any views 
2880: 72 65 66 65 72 20 74 6f 20 74 61 62 6c 65 20 58  refer to table X
2890: 20 69 6e 20 61 20 77 61 79 20 74 68 61 74 20 69   in a way that i
28a0: 73 20 61 66 66 65 63 74 65 64 20 62 79 20 74 68  s affected by th
28b0: 65 0a 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2c  e.schema change,
28c0: 20 74 68 65 6e 20 64 72 6f 70 20 74 68 6f 73 65   then drop those
28d0: 20 76 69 65 77 73 20 75 73 69 6e 67 20 5b 44 52   views using [DR
28e0: 4f 50 20 56 49 45 57 5d 20 61 6e 64 20 72 65 63  OP VIEW] and rec
28f0: 72 65 61 74 65 20 74 68 65 6d 0a 77 69 74 68 20  reate them.with 
2900: 77 68 61 74 65 76 65 72 20 63 68 61 6e 67 65 73  whatever changes
2910: 20 61 72 65 20 6e 65 63 65 73 73 61 72 79 20 74   are necessary t
2920: 6f 20 61 63 63 6f 6d 6d 6f 64 61 74 65 20 74 68  o accommodate th
2930: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 0a  e schema change.
2940: 75 73 69 6e 67 20 5b 43 52 45 41 54 45 20 56 49  using [CREATE VI
2950: 45 57 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49 66  EW]...<li><p>.If
2960: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2970: 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 6f 72  straints were or
2980: 69 67 69 6e 61 6c 6c 79 20 65 6e 61 62 6c 65 64  iginally enabled
2990: 0a 74 68 65 6e 20 72 75 6e 20 5b 50 52 41 47 4d  .then run [PRAGM
29a0: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68  A foreign_key_ch
29b0: 65 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74  eck] to verify t
29c0: 68 61 74 20 74 68 65 20 73 63 68 65 6d 61 0a 63  hat the schema.c
29d0: 68 61 6e 67 65 20 64 69 64 20 6e 6f 74 20 62 72  hange did not br
29e0: 65 61 6b 20 61 6e 79 20 66 6f 72 65 69 67 6e 20  eak any foreign 
29f0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  key constraints.
2a00: 0a 0a 0a 3c 6c 69 3e 3c 70 3e 0a 43 6f 6d 6d 69  ...<li><p>.Commi
2a10: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
2a20: 6e 20 73 74 61 72 74 65 64 20 69 6e 20 73 74 65  n started in ste
2a30: 70 20 32 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49 66  p 2...<li><p>.If
2a40: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 63 6f   foreign keys co
2a50: 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 6f  nstraints were o
2a60: 72 69 67 69 6e 61 6c 6c 79 20 65 6e 61 62 6c 65  riginally enable
2a70: 64 2c 20 72 65 65 6e 61 62 6c 65 20 74 68 65 6d  d, reenable them
2a80: 20 6e 6f 77 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63   now..</ol>..<tc
2a90: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61  l>hd_fragment ca
2aa0: 75 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 3c 70 3e 0a  ution</tcl>.<p>.
2ab0: 3c 62 3e 43 61 75 74 69 6f 6e 3a 3c 2f 62 3e 0a  <b>Caution:</b>.
2ac0: 54 61 6b 65 20 63 61 72 65 20 74 6f 20 66 6f 6c  Take care to fol
2ad0: 6c 6f 77 20 74 68 65 20 70 72 6f 63 65 64 75 72  low the procedur
2ae0: 65 20 61 62 6f 76 65 20 70 72 65 63 69 73 65 6c  e above precisel
2af0: 79 2e 20 20 54 68 65 20 62 6f 78 65 73 20 62 65  y.  The boxes be
2b00: 6c 6f 77 0a 73 75 6d 6d 61 72 69 7a 65 20 74 77  low.summarize tw
2b10: 6f 20 70 72 6f 63 65 64 75 72 65 73 20 66 6f 72  o procedures for
2b20: 20 6d 6f 64 69 66 79 69 6e 67 20 61 20 74 61 62   modifying a tab
2b30: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20  le definition.  
2b40: 41 74 20 66 69 72 73 74 0a 67 6c 61 6e 63 65 2c  At first.glance,
2b50: 20 74 68 65 79 20 62 6f 74 68 20 61 70 70 65 61   they both appea
2b60: 72 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20  r to accomplish 
2b70: 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20  the same thing. 
2b80: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 0a 70 72   However, the.pr
2b90: 6f 63 65 64 75 72 65 20 6f 6e 20 74 68 65 20 72  ocedure on the r
2ba0: 69 67 68 74 20 64 6f 65 73 20 6e 6f 74 20 61 6c  ight does not al
2bb0: 77 61 79 73 20 77 6f 72 6b 2c 20 65 73 70 65 63  ways work, espec
2bc0: 69 61 6c 6c 79 20 77 69 74 68 20 74 68 65 0a 65  ially with the.e
2bd0: 6e 68 61 6e 63 65 64 20 5b 72 65 6e 61 6d 65 20  nhanced [rename 
2be0: 74 61 62 6c 65 5d 20 63 61 70 61 62 69 6c 69 74  table] capabilit
2bf0: 69 65 73 20 61 64 64 65 64 20 62 79 20 76 65 72  ies added by ver
2c00: 73 69 6f 6e 73 20 33 2e 32 35 2e 30 20 61 6e 64  sions 3.25.0 and
2c10: 0a 33 2e 32 36 2e 30 2e 20 20 49 6e 20 74 68 65  .3.26.0.  In the
2c20: 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 20 74 68   procedure on th
2c30: 65 20 72 69 67 68 74 2c 20 74 68 65 20 69 6e 69  e right, the ini
2c40: 74 69 61 6c 20 72 65 6e 61 6d 65 20 6f 66 20 74  tial rename of t
2c50: 68 65 0a 74 61 62 6c 65 20 74 6f 20 61 20 74 65  he.table to a te
2c60: 6d 70 6f 72 61 72 79 20 6e 61 6d 65 20 6d 69 67  mporary name mig
2c70: 68 74 20 63 6f 72 72 75 70 74 20 72 65 66 65 72  ht corrupt refer
2c80: 65 6e 63 65 73 20 74 6f 20 74 68 61 74 20 74 61  ences to that ta
2c90: 62 6c 65 20 69 6e 0a 74 72 69 67 67 65 72 73 2c  ble in.triggers,
2ca0: 20 76 69 65 77 73 2c 20 61 6e 64 20 66 6f 72 65   views, and fore
2cb0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
2cc0: 6e 74 73 2e 20 20 54 68 65 20 73 61 66 65 20 70  nts.  The safe p
2cd0: 72 6f 63 65 64 75 72 65 20 6f 6e 0a 74 68 65 20  rocedure on.the 
2ce0: 6c 65 66 74 20 63 6f 6e 73 74 72 75 63 74 73 20  left constructs 
2cf0: 74 68 65 20 72 65 76 69 73 65 64 20 74 61 62 6c  the revised tabl
2d00: 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 75 73 69  e definition usi
2d10: 6e 67 20 61 20 6e 65 77 20 74 65 6d 70 6f 72 61  ng a new tempora
2d20: 72 79 0a 6e 61 6d 65 2c 20 74 68 65 6e 20 72 65  ry.name, then re
2d30: 6e 61 6d 65 73 20 74 68 65 20 74 61 62 6c 65 20  names the table 
2d40: 69 6e 74 6f 20 69 74 73 20 66 69 6e 61 6c 20 6e  into its final n
2d50: 61 6d 65 2c 20 77 68 69 63 68 20 64 6f 65 73 20  ame, which does 
2d60: 6e 6f 74 20 62 72 65 61 6b 0a 6c 69 6e 6b 73 2e  not break.links.
2d70: 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c  ..<center>.<tabl
2d80: 65 20 62 6f 72 64 65 72 3d 22 31 22 20 63 65 6c  e border="1" cel
2d90: 6c 70 61 64 64 69 6e 67 3d 22 31 30 22 20 63 65  lpadding="10" ce
2da0: 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c  llspacing="0">.<
2db0: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
2dc0: 74 6f 70 22 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 43  top">.<ol>.<li>C
2dd0: 72 65 61 74 65 20 6e 65 77 20 74 61 62 6c 65 0a  reate new table.
2de0: 3c 6c 69 3e 43 6f 70 79 20 64 61 74 61 0a 3c 6c  <li>Copy data.<l
2df0: 69 3e 44 72 6f 70 20 6f 6c 64 20 74 61 62 6c 65  i>Drop old table
2e00: 0a 3c 6c 69 3e 52 65 6e 61 6d 65 20 6e 65 77 20  .<li>Rename new 
2e10: 69 6e 74 6f 20 6f 6c 64 0a 3c 2f 6f 6c 3e 0a 3c  into old.</ol>.<
2e20: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
2e30: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 52 65 6e 61 6d 65  .<ol>.<li>Rename
2e40: 20 6f 6c 64 20 74 61 62 6c 65 0a 3c 6c 69 3e 43   old table.<li>C
2e50: 72 65 61 74 65 20 6e 65 77 20 74 61 62 6c 65 0a  reate new table.
2e60: 3c 6c 69 3e 43 6f 70 79 20 64 61 74 61 0a 3c 6c  <li>Copy data.<l
2e70: 69 3e 44 72 6f 70 20 6f 6c 64 20 74 61 62 6c 65  i>Drop old table
2e80: 0a 3c 2f 6f 6c 3e 0a 3c 74 72 3e 0a 3c 74 68 3e  .</ol>.<tr>.<th>
2e90: 26 75 61 72 72 3b 3c 62 72 3e 43 6f 72 72 65 63  &uarr;<br>Correc
2ea0: 74 0a 3c 74 68 3e 26 75 61 72 72 3b 3c 62 72 3e  t.<th>&uarr;<br>
2eb0: 49 6e 63 6f 72 72 65 63 74 0a 3c 2f 74 61 62 6c  Incorrect.</tabl
2ec0: 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70  e>.</center>..<p
2ed0: 3e 54 68 65 20 31 32 2d 73 74 65 70 20 5b 67 65  >The 12-step [ge
2ee0: 6e 65 72 61 6c 69 7a 65 64 20 41 4c 54 45 52 20  neralized ALTER 
2ef0: 54 41 42 4c 45 20 70 72 6f 63 65 64 75 72 65 5d  TABLE procedure]
2f00: 0a 61 62 6f 76 65 20 77 69 6c 6c 20 77 6f 72 6b  .above will work
2f10: 20 65 76 65 6e 20 69 66 20 74 68 65 0a 73 63 68   even if the.sch
2f20: 65 6d 61 20 63 68 61 6e 67 65 20 63 61 75 73 65  ema change cause
2f30: 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f  s the informatio
2f40: 6e 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  n stored in the 
2f50: 74 61 62 6c 65 20 74 6f 20 63 68 61 6e 67 65 2e  table to change.
2f60: 0a 53 6f 20 74 68 65 20 66 75 6c 6c 20 31 32 2d  .So the full 12-
2f70: 73 74 65 70 20 70 72 6f 63 65 64 75 72 65 20 61  step procedure a
2f80: 62 6f 76 65 20 69 73 20 61 70 70 72 6f 70 72 69  bove is appropri
2f90: 61 74 65 20 66 6f 72 20 64 72 6f 70 70 69 6e 67  ate for dropping
2fa0: 20 61 20 63 6f 6c 75 6d 6e 2c 0a 63 68 61 6e 67   a column,.chang
2fb0: 69 6e 67 20 74 68 65 20 6f 72 64 65 72 20 6f 66  ing the order of
2fc0: 20 63 6f 6c 75 6d 6e 73 2c 20 61 64 64 69 6e 67   columns, adding
2fd0: 20 6f 72 20 72 65 6d 6f 76 69 6e 67 20 61 20 55   or removing a U
2fe0: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
2ff0: 0a 6f 72 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  .or PRIMARY KEY,
3000: 20 61 64 64 69 6e 67 20 43 48 45 43 4b 20 6f 72   adding CHECK or
3010: 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f 72 20   FOREIGN KEY or 
3020: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
3030: 69 6e 74 73 2c 0a 6f 72 20 63 68 61 6e 67 69 6e  ints,.or changin
3040: 67 20 74 68 65 20 64 61 74 61 74 79 70 65 20 66  g the datatype f
3050: 6f 72 20 61 20 63 6f 6c 75 6d 6e 2c 20 66 6f 72  or a column, for
3060: 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65 76   example.  Howev
3070: 65 72 2c 20 61 20 73 69 6d 70 6c 65 72 0a 61 6e  er, a simpler.an
3080: 64 20 66 61 73 74 65 72 20 70 72 6f 63 65 64 75  d faster procedu
3090: 72 65 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c  re can optionall
30a0: 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a 73 6f  y be used for.so
30b0: 6d 65 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  me changes that 
30c0: 64 6f 20 6e 6f 20 61 66 66 65 63 74 20 74 68 65  do no affect the
30d0: 20 6f 6e 2d 64 69 73 6b 20 63 6f 6e 74 65 6e 74   on-disk content
30e0: 20 69 6e 20 61 6e 79 20 77 61 79 2e 0a 54 68 65   in any way..The
30f0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 69 6d 70 6c   following simpl
3100: 65 72 20 70 72 6f 63 65 64 75 72 65 20 69 73 20  er procedure is 
3110: 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
3120: 72 65 6d 6f 76 69 6e 67 0a 43 48 45 43 4b 20 6f  removing.CHECK o
3130: 72 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f 72  r FOREIGN KEY or
3140: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
3150: 61 69 6e 74 73 2c 0a 6f 72 20 61 64 64 69 6e 67  aints,.or adding
3160: 2c 20 72 65 6d 6f 76 69 6e 67 2c 20 6f 72 20 63  , removing, or c
3170: 68 61 6e 67 69 6e 67 20 64 65 66 61 75 6c 74 20  hanging default 
3180: 76 61 6c 75 65 73 20 6f 6e 0a 61 20 63 6f 6c 75  values on.a colu
3190: 6d 6e 2e 0a 0a 3c 6f 6c 3e 0a 3c 6c 49 3e 3c 70  mn...<ol>.<lI><p
31a0: 3e 20 53 74 61 72 74 20 61 20 74 72 61 6e 73 61  > Start a transa
31b0: 63 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20  ction...<li><p> 
31c0: 52 75 6e 20 5b 50 52 41 47 4d 41 20 73 63 68 65  Run [PRAGMA sche
31d0: 6d 61 5f 76 65 72 73 69 6f 6e 5d 20 74 6f 20 64  ma_version] to d
31e0: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 63 75 72  etermine the cur
31f0: 72 65 6e 74 20 73 63 68 65 6d 61 0a 76 65 72 73  rent schema.vers
3200: 69 6f 6e 20 6e 75 6d 62 65 72 2e 20 20 54 68 69  ion number.  Thi
3210: 73 20 6e 75 6d 62 65 72 20 77 69 6c 6c 20 62 65  s number will be
3220: 20 6e 65 65 64 65 64 20 66 6f 72 20 73 74 65 70   needed for step
3230: 20 36 20 62 65 6c 6f 77 2e 0a 0a 3c 6c 69 3e 3c   6 below...<li><
3240: 70 3e 20 41 63 74 69 76 61 74 65 20 73 63 68 65  p> Activate sche
3250: 6d 61 20 65 64 69 74 69 6e 67 20 75 73 69 6e 67  ma editing using
3260: 20 0a 5b 50 52 41 47 4d 41 20 77 72 69 74 61 62   .[PRAGMA writab
3270: 6c 65 5f 73 63 68 65 6d 61 20 7c 20 50 52 41 47  le_schema | PRAG
3280: 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
3290: 6d 61 3d 4f 4e 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e  ma=ON]...<li><p>
32a0: 20 52 75 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d   Run an [UPDATE]
32b0: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 63 68   statement to ch
32c0: 61 6e 67 65 20 74 68 65 20 64 65 66 69 6e 69 74  ange the definit
32d0: 69 6f 6e 20 6f 66 20 74 61 62 6c 65 20 58 0a 69  ion of table X.i
32e0: 6e 20 74 68 65 20 5b 73 71 6c 69 74 65 5f 6d 61  n the [sqlite_ma
32f0: 73 74 65 72 20 74 61 62 6c 65 5d 3a 20 0a 55 50  ster table]: .UP
3300: 44 41 54 45 20 73 71 6c 69 74 65 5f 6d 61 73 74  DATE sqlite_mast
3310: 65 72 20 53 45 54 20 73 71 6c 3d 2e 2e 2e 20 57  er SET sql=... W
3320: 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65  HERE type='table
3330: 27 20 41 4e 44 20 6e 61 6d 65 3d 27 58 27 3b 0a  ' AND name='X';.
3340: 3c 70 3e 3c 65 6d 3e 43 61 75 74 69 6f 6e 3a 3c  <p><em>Caution:<
3350: 2f 65 6d 3e 20 20 4d 61 6b 69 6e 67 20 61 20 63  /em>  Making a c
3360: 68 61 6e 67 65 20 74 6f 20 74 68 65 20 73 71 6c  hange to the sql
3370: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
3380: 20 6c 69 6b 65 20 74 68 69 73 20 77 69 6c 6c 0a   like this will.
3390: 72 65 6e 64 65 72 20 74 68 65 20 64 61 74 61 62  render the datab
33a0: 61 73 65 20 63 6f 72 72 75 70 74 20 61 6e 64 20  ase corrupt and 
33b0: 75 6e 72 65 61 64 61 62 6c 65 20 69 66 20 74 68  unreadable if th
33c0: 65 20 63 68 61 6e 67 65 20 63 6f 6e 74 61 69 6e  e change contain
33d0: 73 0a 61 20 73 79 6e 74 61 78 20 65 72 72 6f 72  s.a syntax error
33e0: 2e 20 20 49 74 20 69 73 20 73 75 67 67 65 73 74  .  It is suggest
33f0: 65 64 20 74 68 61 74 20 63 61 72 65 66 75 6c 20  ed that careful 
3400: 74 65 73 74 69 6e 67 20 6f 66 20 74 68 65 20 55  testing of the U
3410: 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20  PDATE.statement 
3420: 62 65 20 64 6f 6e 65 20 6f 6e 20 61 20 73 65 70  be done on a sep
3430: 61 72 61 74 65 20 62 6c 61 6e 6b 20 64 61 74 61  arate blank data
3440: 62 61 73 65 20 70 72 69 6f 72 20 74 6f 20 75 73  base prior to us
3450: 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64 61 74 61  ing it on.a data
3460: 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  base containing 
3470: 69 6d 70 6f 72 74 61 6e 74 20 64 61 74 61 2e 0a  important data..
3480: 0a 3c 6c 69 3e 3c 70 3e 20 49 66 20 74 68 65 20  .<li><p> If the 
3490: 63 68 61 6e 67 65 20 74 6f 20 74 61 62 6c 65 20  change to table 
34a0: 58 20 61 6c 73 6f 20 61 66 66 65 63 74 73 20 6f  X also affects o
34b0: 74 68 65 72 20 74 61 62 6c 65 73 20 6f 72 20 69  ther tables or i
34c0: 6e 64 65 78 65 73 20 6f 72 0a 74 72 69 67 67 65  ndexes or.trigge
34d0: 72 73 20 61 72 65 20 76 69 65 77 73 20 77 69 74  rs are views wit
34e0: 68 69 6e 20 73 63 68 65 6d 61 2c 20 74 68 65 6e  hin schema, then
34f0: 20 72 75 6e 20 5b 55 50 44 41 54 45 5d 20 73 74   run [UPDATE] st
3500: 61 74 65 6d 65 6e 74 73 20 74 6f 20 6d 6f 64 69  atements to modi
3510: 66 79 0a 74 68 6f 73 65 20 6f 74 68 65 72 20 74  fy.those other t
3520: 61 62 6c 65 73 20 69 6e 64 65 78 65 73 20 61 6e  ables indexes an
3530: 64 20 76 69 65 77 73 20 74 6f 6f 2e 20 20 46 6f  d views too.  Fo
3540: 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 74 68  r example, if th
3550: 65 20 6e 61 6d 65 20 6f 66 0a 61 20 63 6f 6c 75  e name of.a colu
3560: 6d 6e 20 63 68 61 6e 67 65 73 2c 20 61 6c 6c 20  mn changes, all 
3570: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
3580: 74 72 61 69 6e 74 73 2c 20 74 72 69 67 67 65 72  traints, trigger
3590: 73 2c 20 69 6e 64 65 78 65 73 2c 20 61 6e 64 0a  s, indexes, and.
35a0: 76 69 65 77 73 20 74 68 61 74 20 72 65 66 65 72  views that refer
35b0: 20 74 6f 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20   to that column 
35c0: 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64  must be modified
35d0: 2e 0a 3c 70 3e 3c 65 6d 3e 43 61 75 74 69 6f 6e  ..<p><em>Caution
35e0: 3a 3c 2f 65 6d 3e 20 20 4f 6e 63 65 20 61 67 61  :</em>  Once aga
35f0: 69 6e 2c 20 6d 61 6b 69 6e 67 20 63 68 61 6e 67  in, making chang
3600: 65 73 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  es to the sqlite
3610: 5f 6d 61 73 74 65 72 20 0a 74 61 62 6c 65 20 6c  _master .table l
3620: 69 6b 65 20 74 68 69 73 20 77 69 6c 6c 20 72 65  ike this will re
3630: 6e 64 65 72 20 74 68 65 20 64 61 74 61 62 61 73  nder the databas
3640: 65 20 63 6f 72 72 75 70 74 20 61 6e 64 20 75 6e  e corrupt and un
3650: 72 65 61 64 61 62 6c 65 20 69 66 20 74 68 65 20  readable if the 
3660: 0a 63 68 61 6e 67 65 20 63 6f 6e 74 61 69 6e 73  .change contains
3670: 20 61 6e 20 65 72 72 6f 72 2e 20 20 43 61 72 65   an error.  Care
3680: 66 75 6c 6c 79 20 74 65 73 74 20 74 68 69 73 20  fully test this 
3690: 65 6e 74 69 72 65 20 70 72 6f 63 65 64 75 72 65  entire procedure
36a0: 0a 6f 6e 20 61 20 73 65 70 61 72 61 74 65 20 74  .on a separate t
36b0: 65 73 74 20 64 61 74 61 62 61 73 65 20 70 72 69  est database pri
36c0: 6f 72 20 74 6f 20 75 73 69 6e 67 20 69 74 20 6f  or to using it o
36d0: 6e 0a 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e  n.a database con
36e0: 74 61 69 6e 69 6e 67 20 69 6d 70 6f 72 74 61 6e  taining importan
36f0: 74 20 64 61 74 61 20 61 6e 64 2f 6f 72 20 6d 61  t data and/or ma
3700: 6b 65 20 62 61 63 6b 75 70 20 63 6f 70 69 65 73  ke backup copies
3710: 20 6f 66 0a 69 6d 70 6f 72 74 61 6e 74 20 64 61   of.important da
3720: 74 61 62 61 73 65 73 20 70 72 69 6f 72 20 74 6f  tabases prior to
3730: 20 72 75 6e 6e 69 6e 67 20 74 68 69 73 20 70 72   running this pr
3740: 6f 63 65 64 75 72 65 2e 0a 0a 3c 6c 69 3e 3c 70  ocedure...<li><p
3750: 3e 20 49 6e 63 72 65 6d 65 6e 74 20 74 68 65 20  > Increment the 
3760: 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e  schema version n
3770: 75 6d 62 65 72 20 75 73 69 6e 67 0a 5b 50 52 41  umber using.[PRA
3780: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
3790: 6f 6e 20 7c 20 50 52 41 47 4d 41 20 73 63 68 65  on | PRAGMA sche
37a0: 6d 61 5f 76 65 72 73 69 6f 6e 3d 58 5d 20 77 68  ma_version=X] wh
37b0: 65 72 65 20 58 20 69 73 20 6f 6e 65 0a 6d 6f 72  ere X is one.mor
37c0: 65 20 74 68 61 6e 20 74 68 65 20 6f 6c 64 20 73  e than the old s
37d0: 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75  chema version nu
37e0: 6d 62 65 72 20 66 6f 75 6e 64 20 69 6e 20 73 74  mber found in st
37f0: 65 70 20 32 20 61 62 6f 76 65 2e 0a 0a 3c 6c 69  ep 2 above...<li
3800: 3e 3c 70 3e 20 44 69 73 61 62 6c 65 20 73 63 68  ><p> Disable sch
3810: 65 6d 61 20 65 64 69 74 69 6e 67 20 75 73 69 6e  ema editing usin
3820: 67 20 0a 5b 50 52 41 47 4d 41 20 77 72 69 74 61  g .[PRAGMA writa
3830: 62 6c 65 5f 73 63 68 65 6d 61 20 7c 20 50 52 41  ble_schema | PRA
3840: 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
3850: 65 6d 61 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69 3e 3c  ema=OFF]...<li><
3860: 70 3e 20 28 4f 70 74 69 6f 6e 61 6c 29 20 52 75  p> (Optional) Ru
3870: 6e 20 5b 50 52 41 47 4d 41 20 69 6e 74 65 67 72  n [PRAGMA integr
3880: 69 74 79 5f 63 68 65 63 6b 5d 20 74 6f 20 76 65  ity_check] to ve
3890: 72 69 66 79 20 74 68 61 74 20 74 68 65 0a 73 63  rify that the.sc
38a0: 68 65 6d 61 20 63 68 61 6e 67 65 73 20 64 69 64  hema changes did
38b0: 20 6e 6f 74 20 64 61 6d 61 67 65 20 74 68 65 20   not damage the 
38c0: 64 61 74 61 62 61 73 65 2e 0a 0a 3c 6c 69 3e 3c  database...<li><
38d0: 70 3e 20 43 6f 6d 6d 69 74 20 74 68 65 20 74 72  p> Commit the tr
38e0: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65  ansaction starte
38f0: 64 20 6f 6e 20 73 74 65 70 20 31 20 61 62 6f 76  d on step 1 abov
3900: 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 66 20  e..</ol>..<p>If 
3910: 73 6f 6d 65 20 66 75 74 75 72 65 20 76 65 72 73  some future vers
3920: 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 61 64  ion of SQLite ad
3930: 64 73 20 6e 65 77 20 41 4c 54 45 52 20 54 41 42  ds new ALTER TAB
3940: 4c 45 20 63 61 70 61 62 69 6c 69 74 69 65 73 2c  LE capabilities,
3950: 20 0a 74 68 6f 73 65 20 63 61 70 61 62 69 6c 69   .those capabili
3960: 74 69 65 73 20 77 69 6c 6c 20 76 65 72 79 20 6c  ties will very l
3970: 69 6b 65 6c 79 20 75 73 65 20 6f 6e 65 20 6f 66  ikely use one of
3980: 20 74 68 65 20 74 77 6f 20 70 72 6f 63 65 64 75   the two procedu
3990: 72 65 73 0a 6f 75 74 6c 69 6e 65 64 20 61 62 6f  res.outlined abo
39a0: 76 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ve...<tcl>hd_fra
39b0: 67 6d 65 6e 74 20 61 6c 74 65 72 74 61 62 6c 65  gment altertable
39c0: 69 73 68 61 72 64 20 7b 77 68 79 20 41 4c 54 45  ishard {why ALTE
39d0: 52 20 54 41 42 4c 45 20 69 73 20 73 6f 20 64 69  R TABLE is so di
39e0: 66 66 69 63 75 6c 74 7d 3c 2f 74 63 6c 3e 0a 3c  fficult}</tcl>.<
39f0: 68 33 3e 57 68 79 20 41 4c 54 45 52 20 54 41 42  h3>Why ALTER TAB
3a00: 4c 45 20 69 73 20 73 75 63 68 20 61 20 70 72 6f  LE is such a pro
3a10: 62 6c 65 6d 20 66 6f 72 20 53 51 4c 69 74 65 3c  blem for SQLite<
3a20: 2f 68 33 3e 0a 0a 3c 70 3e 4d 6f 73 74 20 53 51  /h3>..<p>Most SQ
3a30: 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
3a40: 65 73 20 73 74 6f 72 65 20 74 68 65 20 73 63 68  es store the sch
3a50: 65 6d 61 20 61 6c 72 65 61 64 79 20 70 61 72 73  ema already pars
3a60: 65 64 20 69 6e 74 6f 0a 76 61 72 69 6f 75 73 20  ed into.various 
3a70: 73 79 73 74 65 6d 20 74 61 62 6c 65 73 2e 20 20  system tables.  
3a80: 4f 6e 20 74 68 6f 73 65 20 64 61 74 61 62 61 73  On those databas
3a90: 65 20 65 6e 67 69 6e 65 73 2c 20 41 4c 54 45 52  e engines, ALTER
3aa0: 20 54 41 42 4c 45 20 6d 65 72 65 6c 79 20 0a 68   TABLE merely .h
3ab0: 61 73 20 74 6f 20 6d 61 6b 65 20 6d 6f 64 69 66  as to make modif
3ac0: 69 63 61 74 69 6f 6e 73 20 74 6f 20 74 68 65 20  ications to the 
3ad0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 79  corresponding sy
3ae0: 73 74 65 6d 20 74 61 62 6c 65 73 2e 0a 0a 3c 70  stem tables...<p
3af0: 3e 53 51 4c 69 74 65 20 69 73 20 64 69 66 66 65  >SQLite is diffe
3b00: 72 65 6e 74 20 69 6e 20 74 68 61 74 20 69 74 20  rent in that it 
3b10: 73 74 6f 72 65 73 20 74 68 65 20 73 63 68 65 6d  stores the schem
3b20: 61 0a 69 6e 20 74 68 65 20 5b 73 71 6c 69 74 65  a.in the [sqlite
3b30: 5f 6d 61 73 74 65 72 5d 20 74 61 62 6c 65 20 61  _master] table a
3b40: 73 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 74  s the original t
3b50: 65 78 74 20 6f 66 20 74 68 65 20 43 52 45 41 54  ext of the CREAT
3b60: 45 0a 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  E.statements tha
3b70: 74 20 64 65 66 69 6e 65 20 74 68 65 20 73 63 68  t define the sch
3b80: 65 6d 61 2e 20 20 48 65 6e 63 65 20 41 4c 54 45  ema.  Hence ALTE
3b90: 52 20 54 41 42 4c 45 20 6e 65 65 64 73 0a 74 6f  R TABLE needs.to
3ba0: 20 72 65 76 69 73 65 20 74 68 65 20 74 65 78 74   revise the text
3bb0: 20 6f 66 20 74 68 65 20 43 52 45 41 54 45 20 73   of the CREATE s
3bc0: 74 61 74 65 6d 65 6e 74 2e 20 20 44 6f 69 6e 67  tatement.  Doing
3bd0: 0a 73 6f 20 63 61 6e 20 62 65 20 74 72 69 63 6b  .so can be trick
3be0: 79 20 66 6f 72 20 63 65 72 74 61 69 6e 20 22 63  y for certain "c
3bf0: 72 65 61 74 69 76 65 22 20 73 63 68 65 6d 61 20  reative" schema 
3c00: 64 65 73 69 67 6e 73 2e 0a 0a 3c 70 3e 54 68 65  designs...<p>The
3c10: 20 53 51 4c 69 74 65 20 61 70 70 72 6f 61 63 68   SQLite approach
3c20: 20 6f 66 20 73 74 6f 72 69 6e 67 20 74 68 65 20   of storing the 
3c30: 73 63 68 65 6d 61 20 61 73 20 74 65 78 74 20 68  schema as text h
3c40: 61 73 20 61 64 76 61 6e 74 61 67 65 73 0a 66 6f  as advantages.fo
3c50: 72 20 61 6e 20 65 6d 62 65 64 64 65 64 20 72 65  r an embedded re
3c60: 6c 61 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73  lational databas
3c70: 65 2e 20 20 46 6f 72 20 6f 6e 65 2c 20 69 74 20  e.  For one, it 
3c80: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 73  means that the.s
3c90: 63 68 65 6d 61 20 74 61 6b 65 73 20 75 70 20 6c  chema takes up l
3ca0: 65 73 73 20 73 70 61 63 65 20 69 6e 20 74 68 65  ess space in the
3cb0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
3cc0: 20 54 68 69 73 20 69 73 20 69 6d 70 6f 72 74 61   This is importa
3cd0: 6e 74 0a 73 69 6e 63 65 20 61 20 63 6f 6d 6d 6f  nt.since a commo
3ce0: 6e 20 53 51 4c 69 74 65 20 75 73 61 67 65 20 70  n SQLite usage p
3cf0: 61 74 74 65 72 6e 20 69 73 20 74 6f 20 68 61 76  attern is to hav
3d00: 65 20 6d 61 6e 79 20 73 6d 61 6c 6c 2c 0a 73 65  e many small,.se
3d10: 70 61 72 61 74 65 20 64 61 74 61 62 61 73 65 20  parate database 
3d20: 66 69 6c 65 73 20 69 6e 73 74 65 61 64 20 6f 66  files instead of
3d30: 20 70 75 74 74 69 6e 67 20 65 76 65 72 79 74 68   putting everyth
3d40: 69 6e 67 20 69 6e 20 6f 6e 65 0a 62 69 67 20 67  ing in one.big g
3d50: 6c 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20 66  lobal database f
3d60: 69 6c 65 2c 20 77 68 69 63 68 20 69 73 20 74 68  ile, which is th
3d70: 65 20 75 73 75 61 6c 20 61 70 70 72 6f 61 63 68  e usual approach
3d80: 20 66 6f 72 20 63 6c 69 65 6e 74 2f 73 65 72 76   for client/serv
3d90: 65 72 0a 64 61 74 61 62 61 73 65 20 65 6e 67 69  er.database engi
3da0: 6e 65 73 2e 0a 53 69 6e 63 65 20 74 68 65 20 73  nes..Since the s
3db0: 63 68 65 6d 61 20 69 73 20 64 75 70 6c 69 63 61  chema is duplica
3dc0: 74 65 64 20 69 6e 20 65 61 63 68 20 73 65 70 61  ted in each sepa
3dd0: 72 61 74 65 20 64 61 74 61 62 61 73 65 20 66 69  rate database fi
3de0: 6c 65 2c 20 69 74 20 69 73 0a 69 6d 70 6f 72 74  le, it is.import
3df0: 61 6e 74 20 74 6f 20 6b 65 65 70 20 74 68 65 20  ant to keep the 
3e00: 73 63 68 65 6d 61 20 72 65 70 72 65 73 65 6e 74  schema represent
3e10: 61 74 69 6f 6e 20 63 6f 6d 70 61 63 74 2e 0a 0a  ation compact...
3e20: 3c 70 3e 53 74 6f 72 69 6e 67 20 74 68 65 20 73  <p>Storing the s
3e30: 63 68 65 6d 61 20 61 73 20 74 65 78 74 20 72 61  chema as text ra
3e40: 74 68 65 72 20 74 68 61 6e 20 61 73 20 70 61 72  ther than as par
3e50: 73 65 64 20 74 61 62 6c 65 73 20 61 6c 73 6f 0a  sed tables also.
3e60: 67 69 76 65 20 66 6c 65 78 69 62 69 6c 69 74 79  give flexibility
3e70: 20 74 6f 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   to the implemen
3e80: 74 61 74 69 6f 6e 2e 20 20 53 69 6e 63 65 20 74  tation.  Since t
3e90: 68 65 20 69 6e 74 65 72 6e 61 6c 20 70 61 72 73  he internal pars
3ea0: 65 0a 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20  e.of the schema 
3eb0: 69 73 20 72 65 67 65 6e 65 72 61 74 65 64 20 65  is regenerated e
3ec0: 61 63 68 20 74 69 6d 65 20 74 68 65 20 64 61 74  ach time the dat
3ed0: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2c  abase is opened,
3ee0: 20 74 68 65 0a 69 6e 74 65 72 6e 61 6c 20 72 65   the.internal re
3ef0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
3f00: 74 68 65 20 73 63 68 65 6d 61 20 63 61 6e 20 63  the schema can c
3f10: 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 72  hange from one r
3f20: 65 6c 65 61 73 65 0a 74 6f 20 74 68 65 20 6e 65  elease.to the ne
3f30: 78 74 2e 20 20 54 68 69 73 20 69 73 20 69 6d 70  xt.  This is imp
3f40: 6f 72 74 61 6e 74 2c 20 61 73 20 73 6f 6d 65 74  ortant, as somet
3f50: 69 6d 65 73 20 6e 65 77 20 66 65 61 74 75 72 65  imes new feature
3f60: 73 20 72 65 71 75 69 72 65 0a 65 6e 68 61 6e 63  s require.enhanc
3f70: 65 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 69 6e  ements to the in
3f80: 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 72 65  ternal schema re
3f90: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 43  presentation.  C
3fa0: 68 61 6e 67 69 6e 67 20 74 68 65 0a 69 6e 74 65  hanging the.inte
3fb0: 72 6e 61 6c 20 73 63 68 65 6d 61 20 72 65 70 72  rnal schema repr
3fc0: 65 73 65 6e 74 61 74 69 6f 6e 20 77 6f 75 6c 64  esentation would
3fd0: 20 62 65 20 6d 75 63 68 20 6d 6f 72 65 20 64 69   be much more di
3fe0: 66 66 69 63 75 6c 74 20 69 66 20 74 68 65 0a 73  fficult if the.s
3ff0: 63 68 65 6d 61 20 72 65 70 72 65 73 65 6e 74 61  chema representa
4000: 74 69 6f 6e 20 77 61 73 20 65 78 70 6f 73 65 64  tion was exposed
4010: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
4020: 20 66 69 6c 65 2e 20 20 53 6f 2c 20 69 6e 20 6f   file.  So, in o
4030: 74 68 65 72 0a 77 6f 72 64 73 2c 20 73 74 6f 72  ther.words, stor
4040: 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61 20 61  ing the schema a
4050: 73 20 74 65 78 74 20 68 65 6c 70 73 20 6d 61 69  s text helps mai
4060: 6e 74 61 69 6e 20 62 61 63 6b 77 61 72 64 73 20  ntain backwards 
4070: 0a 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c 20  .compatibility, 
4080: 61 6e 64 20 68 65 6c 70 73 20 65 6e 73 75 72 65  and helps ensure
4090: 20 74 68 61 74 20 6f 6c 64 65 72 20 64 61 74 61   that older data
40a0: 62 61 73 65 20 66 69 6c 65 73 20 63 61 6e 20 62  base files can b
40b0: 65 0a 72 65 61 64 20 61 6e 64 20 77 72 69 74 74  e.read and writt
40c0: 65 6e 20 62 79 20 6e 65 77 65 72 20 76 65 72 73  en by newer vers
40d0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e 0a  ions of SQLite..
40e0: 0a 3c 70 3e 53 74 6f 72 69 6e 67 20 74 68 65 20  .<p>Storing the 
40f0: 73 63 68 65 6d 61 20 61 20 74 65 78 74 20 61 6c  schema a text al
4100: 73 6f 20 6d 61 6b 65 73 20 74 68 65 20 0a 5b 53  so makes the .[S
4110: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 66  QLite database f
4120: 69 6c 65 20 66 6f 72 6d 61 74 5d 20 65 61 73 69  ile format] easi
4130: 65 72 20 74 6f 20 64 65 66 69 6e 65 2c 20 64 6f  er to define, do
4140: 63 75 6d 65 6e 74 2c 20 61 6e 64 20 0a 75 6e 64  cument, and .und
4150: 65 72 73 74 61 6e 64 2e 20 54 68 69 73 20 68 65  erstand. This he
4160: 6c 70 73 20 6d 61 6b 65 20 53 51 4c 69 74 65 20  lps make SQLite 
4170: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 61  database files a
4180: 0a 5b 72 65 63 6f 6d 6d 65 6e 64 65 64 20 73 74  .[recommended st
4190: 6f 72 61 67 65 20 66 6f 72 6d 61 74 5d 20 66 6f  orage format] fo
41a0: 72 20 6c 6f 6e 67 2d 74 65 72 6d 20 61 72 63 68  r long-term arch
41b0: 69 76 69 6e 67 20 6f 66 20 64 61 74 61 2e 0a 0a  iving of data...
41c0: 3c 70 3e 54 68 65 20 64 6f 77 6e 73 69 64 65 20  <p>The downside 
41d0: 6f 66 20 73 74 6f 72 69 6e 67 20 73 63 68 65 6d  of storing schem
41e0: 61 20 61 20 74 65 78 74 20 69 73 20 74 68 61 74  a a text is that
41f0: 20 69 74 20 63 61 6e 20 6d 61 6b 65 0a 74 68 65   it can make.the
4200: 20 73 63 68 65 6d 61 20 74 72 69 63 6b 79 20 74   schema tricky t
4210: 6f 20 6d 6f 64 69 66 79 2e 20 20 41 6e 64 20 66  o modify.  And f
4220: 6f 72 20 74 68 61 74 20 72 65 61 73 6f 6e 2c 20  or that reason, 
4230: 74 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 0a  the ALTER TABLE.
4240: 73 75 70 70 6f 72 74 20 69 6e 20 53 51 4c 69 74  support in SQLit
4250: 65 20 68 61 73 20 74 72 61 64 69 74 69 6f 6e 61  e has traditiona
4260: 6c 6c 79 20 6c 61 67 67 65 64 20 62 65 68 69 6e  lly lagged behin
4270: 64 20 6f 74 68 65 72 20 53 51 4c 0a 64 61 74 61  d other SQL.data
4280: 62 61 73 65 20 65 6e 67 69 6e 65 73 20 74 68 61  base engines tha
4290: 74 20 73 74 6f 72 65 20 74 68 65 69 72 20 73 63  t store their sc
42a0: 68 65 6d 61 73 20 61 73 20 70 61 72 73 65 64 20  hemas as parsed 
42b0: 73 79 73 74 65 6d 20 74 61 62 6c 65 73 0a 74 68  system tables.th
42c0: 61 74 20 61 72 65 20 65 61 73 69 65 72 20 74 6f  at are easier to
42d0: 20 6d 6f 64 69 66 79 2e 0a 0a 0a 0a 3c 74 63 6c   modify.....<tcl
42e0: 3e 0a 23 20 20 4f 6e 65 20 6f 66 20 74 68 65 20  >.#  One of the 
42f0: 72 65 61 73 6f 6e 73 20 74 68 61 74 0a 23 20 53  reasons that.# S
4300: 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 63  QLite does not c
4310: 75 72 72 65 6e 74 6c 79 20 73 75 70 70 6f 72 74  urrently support
4320: 20 6d 6f 72 65 20 41 4c 54 45 52 20 54 41 42 4c   more ALTER TABL
4330: 45 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 69  E capabilities i
4340: 73 20 74 68 61 74 0a 23 20 74 68 65 20 70 72 6f  s that.# the pro
4350: 63 65 64 75 72 65 20 73 68 6f 77 6e 20 61 62 6f  cedure shown abo
4360: 76 65 20 69 73 20 64 69 66 66 69 63 75 6c 74 20  ve is difficult 
4370: 74 6f 20 61 75 74 6f 6d 61 74 65 20 66 6f 72 20  to automate for 
4380: 61 6e 20 61 72 62 69 74 72 61 72 79 20 73 63 68  an arbitrary sch
4390: 65 6d 61 2e 0a 23 20 50 61 72 74 69 63 75 6c 61  ema..# Particula
43a0: 72 6c 79 20 74 72 6f 75 62 6c 65 73 6f 6d 65 20  rly troublesome 
43b0: 61 72 65 61 73 20 61 72 65 20 69 64 65 6e 74 69  areas are identi
43c0: 66 79 69 6e 67 20 61 6c 6c 20 76 69 65 77 73 20  fying all views 
43d0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
43e0: 23 20 74 61 62 6c 65 20 58 20 69 6e 20 73 74 65  # table X in ste
43f0: 70 20 31 20 61 6e 64 20 63 72 65 61 74 69 6e 67  p 1 and creating
4400: 20 6e 65 77 20 76 69 65 77 73 20 61 6e 64 20 74   new views and t
4410: 72 69 67 67 65 72 73 20 74 68 61 74 20 61 72 65  riggers that are
4420: 20 63 6f 6d 70 61 74 69 62 6c 65 0a 23 20 77 69   compatible.# wi
4430: 74 68 20 74 68 65 20 61 6c 74 65 72 65 64 20 73  th the altered s
4440: 63 68 65 6d 61 20 66 6f 72 20 74 61 62 6c 65 20  chema for table 
4450: 58 20 69 6e 20 73 74 65 70 20 36 2e 20 20 49 74  X in step 6.  It
4460: 20 69 73 20 61 20 74 72 69 63 6b 79 20 62 75 74   is a tricky but
4470: 20 73 6f 6c 76 61 62 6c 65 0a 23 20 70 72 6f 62   solvable.# prob
4480: 6c 65 6d 20 74 6f 20 63 72 65 61 74 65 20 63 6f  lem to create co
4490: 64 65 20 74 68 61 74 20 77 69 6c 6c 20 70 65 72  de that will per
44a0: 66 6f 72 6d 20 74 68 65 20 73 74 65 70 73 20 61  form the steps a
44b0: 62 6f 76 65 20 0a 23 20 66 6f 72 20 22 72 65 61  bove .# for "rea
44c0: 73 6f 6e 61 62 6c 65 22 20 73 63 68 65 6d 61 73  sonable" schemas
44d0: 20 63 6f 6d 6d 6f 6e 6c 79 20 66 6f 75 6e 64 20   commonly found 
44e0: 69 6e 20 70 72 61 63 74 69 63 65 2e 20 20 0a 23  in practice.  .#
44f0: 20 42 75 74 20 74 68 65 72 65 20 65 78 69 73 74   But there exist
4500: 20 6d 61 6c 65 76 6f 6c 65 6e 74 20 73 63 68 65   malevolent sche
4510: 6d 61 73 20 66 6f 72 20 77 68 69 63 68 0a 23 20  mas for which.# 
4520: 74 68 65 73 65 20 73 74 65 70 73 20 61 72 65 20  these steps are 
4530: 6d 61 64 64 65 6e 69 6e 67 6c 79 20 64 69 66 66  maddeningly diff
4540: 69 63 75 6c 74 20 74 6f 20 64 6f 20 63 6f 72 72  icult to do corr
4550: 65 63 74 6c 79 2e 20 20 52 61 74 68 65 72 20 74  ectly.  Rather t
4560: 68 61 6e 20 63 72 65 61 74 65 0a 23 20 41 4c 54  han create.# ALT
4570: 45 52 20 54 41 42 4c 45 20 66 65 61 74 75 72 65  ER TABLE feature
4580: 73 20 74 68 61 74 20 77 6f 72 6b 20 63 6f 72 72  s that work corr
4590: 65 63 74 6c 79 20 39 39 2e 39 25 20 6f 66 20 74  ectly 99.9% of t
45a0: 68 65 20 74 69 6d 65 20 62 75 74 20 70 6f 73 73  he time but poss
45b0: 69 62 6c 79 0a 23 20 63 6f 72 72 75 70 74 20 74  ibly.# corrupt t
45c0: 68 65 20 73 63 68 65 6d 61 20 6f 6e 20 74 68 65  he schema on the
45d0: 20 6f 74 68 65 72 20 30 2e 31 25 2c 20 74 68 65   other 0.1%, the
45e0: 20 53 51 4c 69 74 65 20 64 65 76 65 6c 6f 70 65   SQLite develope
45f0: 72 73 20 68 61 76 65 20 64 65 63 69 64 65 64 0a  rs have decided.
4600: 23 20 74 6f 20 70 75 73 68 20 74 68 65 20 70 72  # to push the pr
4610: 6f 62 6c 65 6d 20 69 6e 74 6f 20 74 68 65 20 61  oblem into the a
4620: 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69  pplication domai
4630: 6e 2c 20 77 68 65 72 65 20 69 74 20 69 73 20 6d  n, where it is m
4640: 75 63 68 20 65 61 73 69 65 72 0a 23 20 74 6f 20  uch easier.# to 
4650: 73 6f 6c 76 65 2e 0a 3c 2f 74 63 6c 3e 0a 0a 0a  solve..</tcl>...
4660: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
4670: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46b0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 4e  ####.Section {AN
46c0: 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65 20 41  ALYZE} analyze A
46d0: 4e 41 4c 59 5a 45 0a 0a 52 65 63 75 72 73 69 76  NALYZE..Recursiv
46e0: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
46f0: 6e 61 6c 79 7a 65 2d 73 74 6d 74 0a 3c 2f 74 63  nalyze-stmt.</tc
4700: 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 4e 41  l>..<p> ^The ANA
4710: 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67 61 74  LYZE command gat
4720: 68 65 72 73 20 73 74 61 74 69 73 74 69 63 73 20  hers statistics 
4730: 61 62 6f 75 74 20 74 61 62 6c 65 73 20 61 6e 64  about tables and
4740: 0a 69 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f  .indices and sto
4750: 72 65 73 20 74 68 65 20 63 6f 6c 6c 65 63 74 65  res the collecte
4760: 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e  d information.in
4770: 20 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65   [internal table
4780: 73 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  s] of the databa
4790: 73 65 20 77 68 65 72 65 20 74 68 65 20 71 75 65  se where the que
47a0: 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 61 6e  ry optimizer can
47b0: 0a 61 63 63 65 73 73 20 74 68 65 20 69 6e 66 6f  .access the info
47c0: 72 6d 61 74 69 6f 6e 20 61 6e 64 20 75 73 65 20  rmation and use 
47d0: 69 74 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65 20  it to help make 
47e0: 62 65 74 74 65 72 20 71 75 65 72 79 20 70 6c 61  better query pla
47f0: 6e 6e 69 6e 67 20 63 68 6f 69 63 65 73 2e 0a 5e  nning choices..^
4800: 49 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20  If no arguments 
4810: 61 72 65 20 67 69 76 65 6e 2c 20 61 6c 6c 20 61  are given, all a
4820: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
4830: 73 20 61 72 65 0a 61 6e 61 6c 79 7a 65 64 2e 20  s are.analyzed. 
4840: 20 5e 49 66 20 61 20 73 63 68 65 6d 61 20 6e 61   ^If a schema na
4850: 6d 65 20 69 73 20 67 69 76 65 6e 20 61 73 20 74  me is given as t
4860: 68 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 65  he argument, the
4870: 6e 20 61 6c 6c 20 74 61 62 6c 65 73 0a 61 6e 64  n all tables.and
4880: 20 69 6e 64 69 63 65 73 20 69 6e 20 74 68 61 74   indices in that
4890: 20 6f 6e 65 20 64 61 74 61 62 61 73 65 20 61 72   one database ar
48a0: 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20 0a 5e 49  e analyzed.  .^I
48b0: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
48c0: 73 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20  s a table name, 
48d0: 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20 74  then only that t
48e0: 61 62 6c 65 20 61 6e 64 20 74 68 65 0a 69 6e 64  able and the.ind
48f0: 69 63 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ices associated 
4900: 77 69 74 68 20 74 68 61 74 20 74 61 62 6c 65 20  with that table 
4910: 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20 5e  are analyzed.  ^
4920: 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 0a  If the argument.
4930: 69 73 20 61 6e 20 69 6e 64 65 78 20 6e 61 6d 65  is an index name
4940: 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61 74  , then only that
4950: 20 6f 6e 65 20 69 6e 64 65 78 20 69 73 20 61 6e   one index is an
4960: 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  alyzed.</p>..<p>
4970: 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 69 6d   ^The default im
4980: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74 6f  plementation sto
4990: 72 65 73 20 61 6c 6c 20 73 74 61 74 69 73 74 69  res all statisti
49a0: 63 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a 74  cs in a single.t
49b0: 61 62 6c 65 20 6e 61 6d 65 64 20 22 5b 73 71 6c  able named "[sql
49c0: 69 74 65 5f 73 74 61 74 31 5d 22 2e 20 20 5e 49  ite_stat1]".  ^I
49d0: 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70  f SQLite is comp
49e0: 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a 5b 53  iled with the.[S
49f0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
4a00: 54 33 5d 20 6f 70 74 69 6f 6e 20 61 6e 64 20 77  T3] option and w
4a10: 69 74 68 6f 75 74 20 74 68 65 20 5b 53 51 4c 49  ithout the [SQLI
4a20: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d  TE_ENABLE_STAT4]
4a30: 0a 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64  .option, then ad
4a40: 64 69 74 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72  ditional histogr
4a50: 61 6d 20 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65  am data is.colle
4a60: 63 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 20  cted and stored 
4a70: 69 6e 20 5b 73 71 6c 69 74 65 5f 73 74 61 74 33  in [sqlite_stat3
4a80: 5d 2e 0a 20 5e 49 66 20 53 51 4c 69 74 65 20 69  ].. ^If SQLite i
4a90: 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  s compiled with 
4aa0: 74 68 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42  the.[SQLITE_ENAB
4ab0: 4c 45 5f 53 54 41 54 34 5d 20 6f 70 74 69 6f 6e  LE_STAT4] option
4ac0: 2c 20 74 68 65 6e 20 61 64 64 69 74 69 6f 6e 61  , then additiona
4ad0: 6c 20 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61  l histogram data
4ae0: 20 69 73 0a 63 6f 6c 6c 65 63 74 65 64 20 61 6e   is.collected an
4af0: 64 20 73 74 6f 72 65 64 20 69 6e 20 5b 73 71 6c  d stored in [sql
4b00: 69 74 65 5f 73 74 61 74 34 5d 2e 0a 4f 6c 64 65  ite_stat4]..Olde
4b10: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
4b20: 4c 69 74 65 20 77 6f 75 6c 64 20 6d 61 6b 65 20  Lite would make 
4b30: 75 73 65 20 6f 66 20 74 68 65 20 5b 73 71 6c 69  use of the [sqli
4b40: 74 65 5f 73 74 61 74 32 5d 20 74 61 62 6c 65 0a  te_stat2] table.
4b50: 77 68 65 6e 20 63 6f 6d 70 69 6c 65 64 20 77 69  when compiled wi
4b60: 74 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  th [SQLITE_ENABL
4b70: 45 5f 53 54 41 54 32 5d 20 62 75 74 20 61 6c 6c  E_STAT2] but all
4b80: 20 72 65 63 65 6e 74 20 76 65 72 73 69 6f 6e 73   recent versions
4b90: 20 6f 66 0a 53 51 4c 69 74 65 20 69 67 6e 6f 72   of.SQLite ignor
4ba0: 65 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  e the sqlite_sta
4bb0: 74 32 20 74 61 62 6c 65 2e 0a 46 75 74 75 72 65  t2 table..Future
4bc0: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6d 61   enhancements ma
4bd0: 79 20 63 72 65 61 74 65 0a 61 64 64 69 74 69 6f  y create.additio
4be0: 6e 61 6c 20 5b 69 6e 74 65 72 6e 61 6c 20 74 61  nal [internal ta
4bf0: 62 6c 65 73 5d 20 77 69 74 68 20 74 68 65 20 73  bles] with the s
4c00: 61 6d 65 20 6e 61 6d 65 20 70 61 74 74 65 72 6e  ame name pattern
4c10: 20 65 78 63 65 70 74 20 77 69 74 68 0a 66 69 6e   except with.fin
4c20: 61 6c 20 64 69 67 69 74 20 6c 61 72 67 65 72 20  al digit larger 
4c30: 74 68 61 6e 20 22 34 22 2e 0a 41 6c 6c 20 6f 66  than "4"..All of
4c40: 20 74 68 65 73 65 20 74 61 62 6c 65 73 20 61 72   these tables ar
4c50: 65 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 72  e collectively r
4c60: 65 66 65 72 72 65 64 20 74 6f 20 61 73 20 22 73  eferred to as "s
4c70: 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73  tatistics tables
4c80: 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68  "..</p>..<p> ^Th
4c90: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
4ca0: 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c   statistics tabl
4cb0: 65 73 20 63 61 6e 20 62 65 20 71 75 65 72 69 65  es can be querie
4cc0: 64 20 75 73 69 6e 67 20 5b 53 45 4c 45 43 54 5d  d using [SELECT]
4cd0: 0a 61 6e 64 20 63 61 6e 20 62 65 20 63 68 61 6e  .and can be chan
4ce0: 67 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44  ged using the [D
4cf0: 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d  ELETE], [INSERT]
4d00: 2c 20 61 6e 64 20 5b 55 50 44 41 54 45 5d 20 63  , and [UPDATE] c
4d10: 6f 6d 6d 61 6e 64 73 2e 0a 5e 28 54 68 65 20 5b  ommands..^(The [
4d20: 44 52 4f 50 20 54 41 42 4c 45 5d 20 63 6f 6d 6d  DROP TABLE] comm
4d30: 61 6e 64 20 77 6f 72 6b 73 20 6f 6e 20 73 74 61  and works on sta
4d40: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 0a 61  tistics tables.a
4d50: 73 20 6f 66 20 53 51 4c 69 74 65 20 76 65 72 73  s of SQLite vers
4d60: 69 6f 6e 20 33 2e 37 2e 39 2e 29 5e 20 28 5b 64  ion 3.7.9.)^ ([d
4d70: 61 74 65 6f 66 3a 33 2e 37 2e 39 5d 29 0a 5e 54  ateof:3.7.9]).^T
4d80: 68 65 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d  he [ALTER TABLE]
4d90: 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f   command does no
4da0: 74 20 77 6f 72 6b 20 6f 6e 20 73 74 61 74 69 73  t work on statis
4db0: 74 69 63 73 20 74 61 62 6c 65 73 2e 0a 41 70 70  tics tables..App
4dc0: 72 6f 70 72 69 61 74 65 20 63 61 72 65 20 73 68  ropriate care sh
4dd0: 6f 75 6c 64 20 62 65 20 75 73 65 64 20 77 68 65  ould be used whe
4de0: 6e 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 63  n changing the c
4df0: 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 73 74  ontent of the st
4e00: 61 74 69 73 74 69 63 73 0a 74 61 62 6c 65 73 20  atistics.tables 
4e10: 61 73 20 69 6e 76 61 6c 69 64 20 63 6f 6e 74 65  as invalid conte
4e20: 6e 74 20 63 61 6e 20 63 61 75 73 65 20 53 51 4c  nt can cause SQL
4e30: 69 74 65 20 74 6f 20 73 65 6c 65 63 74 20 69 6e  ite to select in
4e40: 65 66 66 69 63 69 65 6e 74 0a 71 75 65 72 79 20  efficient.query 
4e50: 70 6c 61 6e 73 2e 20 20 47 65 6e 65 72 61 6c 6c  plans.  Generall
4e60: 79 20 73 70 65 61 6b 69 6e 67 2c 20 6f 6e 65 20  y speaking, one 
4e70: 73 68 6f 75 6c 64 20 6e 6f 74 20 6d 6f 64 69 66  should not modif
4e80: 79 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  y the content of
4e90: 0a 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20  .the statistics 
4ea0: 74 61 62 6c 65 73 20 62 79 20 61 6e 79 20 6d 65  tables by any me
4eb0: 63 68 61 6e 69 73 6d 20 6f 74 68 65 72 20 74 68  chanism other th
4ec0: 61 6e 20 69 6e 76 6f 6b 69 6e 67 20 74 68 65 0a  an invoking the.
4ed0: 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 2e  ANALYZE command.
4ee0: 20 20 0a 53 65 65 20 22 5b 4d 61 6e 75 61 6c 20    .See "[Manual 
4ef0: 43 6f 6e 74 72 6f 6c 20 4f 66 20 51 75 65 72 79  Control Of Query
4f00: 20 50 6c 61 6e 73 20 55 73 69 6e 67 20 53 51 4c   Plans Using SQL
4f10: 49 54 45 5f 53 54 41 54 20 54 61 62 6c 65 73 5d  ITE_STAT Tables]
4f20: 22 20 66 6f 72 0a 66 75 72 74 68 65 72 20 69 6e  " for.further in
4f30: 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a  formation.</p>..
4f40: 3c 70 3e 20 5e 53 74 61 74 69 73 74 69 63 73 20  <p> ^Statistics 
4f50: 67 61 74 68 65 72 65 64 20 62 79 20 41 4e 41 4c  gathered by ANAL
4f60: 59 5a 45 20 61 72 65 20 6e 6f 74 20 61 75 74 6f  YZE are not auto
4f70: 6d 61 74 69 63 61 6c 6c 79 20 75 70 64 61 74 65  matically update
4f80: 64 20 61 73 0a 74 68 65 20 63 6f 6e 74 65 6e 74  d as.the content
4f90: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
4fa0: 20 63 68 61 6e 67 65 73 2e 20 20 49 66 20 74 68   changes.  If th
4fb0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
4fc0: 20 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65   database.change
4fd0: 73 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 2c  s significantly,
4fe0: 20 6f 72 20 69 66 20 74 68 65 20 64 61 74 61 62   or if the datab
4ff0: 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ase schema chang
5000: 65 73 2c 20 74 68 65 6e 20 6f 6e 65 20 73 68 6f  es, then one sho
5010: 75 6c 64 0a 63 6f 6e 73 69 64 65 72 20 72 65 72  uld.consider rer
5020: 75 6e 6e 69 6e 67 20 74 68 65 20 41 4e 41 4c 59  unning the ANALY
5030: 5a 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 6f 72  ZE command in or
5040: 64 65 72 20 74 6f 20 75 70 64 61 74 65 20 74 68  der to update th
5050: 65 20 73 74 61 74 69 73 74 69 63 73 2e 3c 2f 70  e statistics.</p
5060: 3e 0a 0a 3c 70 3e 20 54 68 65 20 71 75 65 72 79  >..<p> The query
5070: 20 70 6c 61 6e 6e 65 72 20 6c 6f 61 64 73 20 74   planner loads t
5080: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
5090: 65 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62  e statistics tab
50a0: 6c 65 73 0a 69 6e 74 6f 20 6d 65 6d 6f 72 79 20  les.into memory 
50b0: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
50c0: 69 73 20 72 65 61 64 2e 20 20 5e 48 65 6e 63 65  is read.  ^Hence
50d0: 2c 20 77 68 65 6e 20 61 6e 20 61 70 70 6c 69 63  , when an applic
50e0: 61 74 69 6f 6e 0a 63 68 61 6e 67 65 73 20 74 68  ation.changes th
50f0: 65 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62  e statistics tab
5100: 6c 65 73 20 64 69 72 65 63 74 6c 79 2c 20 53 51  les directly, SQ
5110: 4c 69 74 65 20 77 69 6c 6c 20 6e 6f 74 20 69 6d  Lite will not im
5120: 6d 65 64 69 61 74 65 6c 79 0a 6e 6f 74 69 63 65  mediately.notice
5130: 20 74 68 65 20 63 68 61 6e 67 65 73 2e 20 5e 41   the changes. ^A
5140: 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63 61  n application.ca
5150: 6e 20 66 6f 72 63 65 20 74 68 65 20 71 75 65 72  n force the quer
5160: 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20 72 65 72  y planner to rer
5170: 65 61 64 20 74 68 65 20 73 74 61 74 69 73 74 69  ead the statisti
5180: 63 73 20 74 61 62 6c 65 73 20 62 79 20 72 75 6e  cs tables by run
5190: 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c 59 5a 45 20  ning.<b>ANALYZE 
51a0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62  sqlite_master</b
51b0: 3e 2e 20 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  >. </p>..<tcl>hd
51c0: 5f 66 72 61 67 6d 65 6e 74 20 61 75 74 6f 61 6e  _fragment autoan
51d0: 61 6c 79 7a 65 20 7b 61 75 74 6f 6d 61 74 69 63  alyze {automatic
51e0: 61 6c 6c 79 20 72 75 6e 6e 69 6e 67 20 41 4e 41  ally running ANA
51f0: 4c 59 5a 45 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e  LYZE}</tcl>.<h2>
5200: 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 52 75  Automatically Ru
5210: 6e 6e 69 6e 67 20 41 4e 41 4c 59 5a 45 3c 2f 68  nning ANALYZE</h
5220: 32 3e 0a 0a 3c 70 3e 54 68 65 20 5b 50 52 41 47  2>..<p>The [PRAG
5230: 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 20 63 6f 6d  MA optimize] com
5240: 6d 61 6e 64 20 77 69 6c 6c 20 61 75 74 6f 6d 61  mand will automa
5250: 74 69 63 61 6c 6c 79 20 72 75 6e 20 41 4e 41 4c  tically run ANAL
5260: 59 5a 45 20 6f 6e 20 69 6e 64 69 76 69 64 75 61  YZE on individua
5270: 6c 0a 74 61 62 6c 65 73 20 6f 6e 20 61 6e 20 61  l.tables on an a
5280: 73 2d 6e 65 65 64 65 64 20 62 61 73 69 73 2e 20  s-needed basis. 
5290: 20 54 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64   The recommended
52a0: 20 70 72 61 63 74 69 63 65 20 69 73 20 66 6f 72   practice is for
52b0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 74 6f   applications.to
52c0: 20 69 6e 76 6f 6b 65 20 74 68 65 20 5b 50 52 41   invoke the [PRA
52d0: 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 20 73 74  GMA optimize] st
52e0: 61 74 65 6d 65 6e 74 20 6a 75 73 74 20 62 65 66  atement just bef
52f0: 6f 72 65 20 63 6c 6f 73 69 6e 67 20 65 61 63 68  ore closing each
5300: 20 64 61 74 61 62 61 73 65 0a 63 6f 6e 6e 65 63   database.connec
5310: 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61  tion.</p>..<p>Ea
5320: 63 68 20 53 51 4c 69 74 65 20 5b 64 61 74 61 62  ch SQLite [datab
5330: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20  ase connection] 
5340: 72 65 63 6f 72 64 73 20 63 61 73 65 73 20 77 68  records cases wh
5350: 65 6e 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  en the query pla
5360: 6e 6e 65 72 20 77 6f 75 6c 64 0a 62 65 6e 65 66  nner would.benef
5370: 69 74 20 66 72 6f 6d 20 68 61 76 69 6e 67 20 61  it from having a
5380: 63 63 75 72 61 74 65 20 72 65 73 75 6c 74 73 20  ccurate results 
5390: 6f 66 20 41 4e 41 4c 59 5a 45 20 61 74 20 68 61  of ANALYZE at ha
53a0: 6e 64 2e 20 20 54 68 65 73 65 20 72 65 63 6f 72  nd.  These recor
53b0: 64 73 0a 61 72 65 20 68 65 6c 64 20 69 6e 20 6d  ds.are held in m
53c0: 65 6d 6f 72 79 20 61 6e 64 20 61 63 63 75 6d 75  emory and accumu
53d0: 6c 61 74 65 20 6f 76 65 72 20 74 68 65 20 6c 69  late over the li
53e0: 66 65 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  fe of a database
53f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 54 68 65   connection..The
5400: 20 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a   [PRAGMA optimiz
5410: 65 5d 20 63 6f 6d 6d 61 6e 64 20 6c 6f 6f 6b 73  e] command looks
5420: 20 61 74 20 74 68 6f 73 65 20 72 65 63 6f 72 64   at those record
5430: 73 20 61 6e 64 20 72 75 6e 73 20 41 4e 41 4c 59  s and runs ANALY
5440: 5a 45 20 6f 6e 20 6f 6e 6c 79 0a 74 68 6f 73 65  ZE on only.those
5450: 20 74 61 62 6c 65 73 20 66 6f 72 20 77 68 69 63   tables for whic
5460: 68 20 6e 65 77 20 6f 72 20 75 70 64 61 74 65 64  h new or updated
5470: 20 41 4e 41 4c 59 5a 45 20 64 61 74 61 20 73 65   ANALYZE data se
5480: 65 6d 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65  ems likely to be
5490: 20 75 73 65 66 75 6c 2e 0a 49 6e 20 6d 6f 73 74   useful..In most
54a0: 20 63 61 73 65 73 20 5b 50 52 41 47 4d 41 20 6f   cases [PRAGMA o
54b0: 70 74 69 6d 69 7a 65 5d 20 77 69 6c 6c 20 6e 6f  ptimize] will no
54c0: 74 20 72 75 6e 20 41 4e 41 4c 59 5a 45 2c 20 62  t run ANALYZE, b
54d0: 75 74 20 69 74 20 77 69 6c 6c 20 6f 63 63 61 73  ut it will occas
54e0: 69 6f 6e 61 6c 6c 79 0a 64 6f 20 73 6f 20 65 69  ionally.do so ei
54f0: 74 68 65 72 20 66 6f 72 20 74 61 62 6c 65 73 20  ther for tables 
5500: 74 68 61 74 20 68 61 76 65 20 6e 65 76 65 72 20  that have never 
5510: 62 65 66 6f 72 65 20 62 65 65 6e 20 61 6e 61 6c  before been anal
5520: 79 7a 65 64 2c 20 6f 72 20 66 6f 72 20 74 61 62  yzed, or for tab
5530: 6c 65 73 0a 74 68 61 74 20 68 61 76 65 20 67 72  les.that have gr
5540: 6f 77 6e 20 73 69 67 6e 69 66 69 63 61 6e 74 6c  own significantl
5550: 79 20 73 69 6e 63 65 20 74 68 65 79 20 77 65 72  y since they wer
5560: 65 20 6c 61 73 74 20 61 6e 61 6c 79 7a 65 64 2e  e last analyzed.
5570: 3c 2f 70 3e 0a 0a 3c 70 3e 53 69 6e 63 65 20 74  </p>..<p>Since t
5580: 68 65 20 61 63 74 69 6f 6e 73 20 6f 66 20 5b 50  he actions of [P
5590: 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 20  RAGMA optimize] 
55a0: 61 72 65 20 64 65 74 65 72 6d 69 6e 65 64 20 74  are determined t
55b0: 6f 20 73 6f 6d 65 20 65 78 74 65 6e 74 20 62 79  o some extent by
55c0: 0a 70 72 69 6f 72 20 71 75 65 72 69 65 73 20 74  .prior queries t
55d0: 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 65 76  hat have been ev
55e0: 61 6c 75 61 74 65 64 20 6f 6e 20 74 68 65 20 73  aluated on the s
55f0: 61 6d 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ame database con
5600: 6e 65 63 74 69 6f 6e 2c 20 69 74 0a 69 73 20 72  nection, it.is r
5610: 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74 20  ecommended that 
5620: 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65  [PRAGMA optimize
5630: 5d 20 62 65 20 64 65 66 65 72 72 65 64 20 75 6e  ] be deferred un
5640: 74 69 6c 20 74 68 65 20 64 61 74 61 62 61 73 65  til the database
5650: 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 69 73 20 63   connection.is c
5660: 6c 6f 73 69 6e 67 20 61 6e 64 20 68 61 73 20 74  losing and has t
5670: 68 75 73 20 68 61 64 20 61 6e 20 6f 70 70 6f 72  hus had an oppor
5680: 74 75 6e 69 74 79 20 74 6f 20 61 63 63 75 6d 75  tunity to accumu
5690: 6c 61 74 65 20 61 73 20 6d 75 63 68 20 75 73 61  late as much usa
56a0: 67 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61  ge information.a
56b0: 73 20 70 6f 73 73 69 62 6c 65 2e 20 20 49 74 20  s possible.  It 
56c0: 69 73 20 61 6c 73 6f 20 72 65 61 73 6f 6e 61 62  is also reasonab
56d0: 6c 65 20 74 6f 20 73 65 74 20 61 20 74 69 6d 65  le to set a time
56e0: 72 20 74 6f 20 72 75 6e 20 5b 50 52 41 47 4d 41  r to run [PRAGMA
56f0: 20 6f 70 74 69 6d 69 7a 65 5d 0a 65 76 65 72 79   optimize].every
5700: 20 66 65 77 20 68 6f 75 72 73 2c 20 6f 72 20 65   few hours, or e
5710: 76 65 72 79 20 66 65 77 20 64 61 79 73 2c 20 66  very few days, f
5720: 6f 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  or database conn
5730: 65 63 74 69 6f 6e 73 20 74 68 61 74 20 73 74 61  ections that sta
5740: 79 20 6f 70 65 6e 0a 66 6f 72 20 61 20 6c 6f 6e  y open.for a lon
5750: 67 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  g time.</p>..<p>
5760: 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61  Applications tha
5770: 74 20 64 65 73 69 72 65 20 6d 6f 72 65 20 63 6f  t desire more co
5780: 6e 74 72 6f 6c 20 63 61 6e 20 72 75 6e 20 5b 50  ntrol can run [P
5790: 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 28 30  RAGMA optimize(0
57a0: 78 30 33 29 5d 20 74 6f 20 0a 6f 62 74 61 69 6e  x03)] to .obtain
57b0: 20 61 20 6c 69 73 74 20 6f 66 20 41 4e 41 4c 59   a list of ANALY
57c0: 5a 45 20 63 6f 6d 6d 61 6e 64 73 20 74 68 61 74  ZE commands that
57d0: 20 53 51 4c 69 74 65 20 74 68 69 6e 6b 73 20 61   SQLite thinks a
57e0: 72 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 74  re appropriate t
57f0: 6f 20 72 75 6e 2c 0a 62 75 74 20 77 69 74 68 6f  o run,.but witho
5800: 75 74 20 61 63 74 75 61 6c 6c 79 20 72 75 6e 6e  ut actually runn
5810: 69 6e 67 20 74 68 6f 73 65 20 63 6f 6d 6d 61 6e  ing those comman
5820: 64 73 2e 20 20 49 66 20 74 68 65 20 72 65 74 75  ds.  If the retu
5830: 72 6e 65 64 20 73 65 74 20 69 73 20 0a 6e 6f 6e  rned set is .non
5840: 2d 65 6d 70 74 79 2c 20 74 68 65 20 61 70 70 6c  -empty, the appl
5850: 69 63 61 74 69 6f 6e 20 63 61 6e 20 74 68 65 6e  ication can then
5860: 20 6d 61 6b 65 20 61 20 64 65 63 69 73 69 6f 6e   make a decision
5870: 20 61 62 6f 75 74 20 77 68 65 74 68 65 72 20 6f   about whether o
5880: 72 20 6e 6f 74 0a 74 6f 20 72 75 6e 20 74 68 65  r not.to run the
5890: 20 73 75 67 67 65 73 74 65 64 20 41 4e 41 4c 59   suggested ANALY
58a0: 5a 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 70 65 72  ZE commands, per
58b0: 68 61 70 73 20 61 66 74 65 72 20 70 72 6f 6d 70  haps after promp
58c0: 74 69 6e 67 20 74 68 65 20 75 73 65 72 0a 66 6f  ting the user.fo
58d0: 72 20 67 75 69 64 61 6e 63 65 2e 3c 2f 70 3e 0a  r guidance.</p>.
58e0: 0a 3c 70 3e 54 68 65 20 5b 50 52 41 47 4d 41 20  .<p>The [PRAGMA 
58f0: 6f 70 74 69 6d 69 7a 65 5d 20 63 6f 6d 6d 61 6e  optimize] comman
5900: 64 20 77 61 73 20 66 69 72 73 74 20 69 6e 74 72  d was first intr
5910: 6f 64 75 63 65 64 20 77 69 74 68 20 0a 53 51 4c  oduced with .SQL
5920: 69 74 65 20 33 2e 31 38 2e 30 20 28 5b 64 61 74  ite 3.18.0 ([dat
5930: 65 6f 66 3a 33 2e 31 38 2e 30 5d 29 20 61 6e 64  eof:3.18.0]) and
5940: 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20   is a no-op for 
5950: 61 6c 6c 20 70 72 69 6f 72 20 72 65 6c 65 61 73  all prior releas
5960: 65 73 0a 6f 66 20 53 51 4c 69 74 65 2e 3c 2f 70  es.of SQLite.</p
5970: 3e 0a 0a 3c 68 32 3e 41 6e 74 69 63 69 70 61 74  >..<h2>Anticipat
5980: 65 64 20 46 75 74 75 72 65 20 45 6e 68 61 6e 63  ed Future Enhanc
5990: 65 6d 65 6e 74 73 3c 2f 68 32 3e 0a 0a 3c 70 3e  ements</h2>..<p>
59a0: 41 6c 6c 20 65 78 69 73 74 69 6e 67 20 76 65 72  All existing ver
59b0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
59c0: 64 6f 20 61 20 66 75 6c 6c 20 74 61 62 6c 65 20  do a full table 
59d0: 73 63 61 6e 20 66 6f 72 20 41 4e 41 4c 59 5a 45  scan for ANALYZE
59e0: 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 73  .  This can be.s
59f0: 6c 6f 77 20 66 6f 72 20 6d 75 6c 74 69 2d 67 69  low for multi-gi
5a00: 67 61 62 79 74 65 20 61 6e 64 20 6c 61 72 67 65  gabyte and large
5a10: 72 20 64 61 74 61 62 61 73 65 73 2e 20 20 46 75  r databases.  Fu
5a20: 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
5a30: 20 53 51 4c 69 74 65 20 6d 69 67 68 74 0a 75 73   SQLite might.us
5a40: 65 20 72 61 6e 64 6f 6d 20 73 61 6d 70 6c 69 6e  e random samplin
5a50: 67 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 20  g rather than a 
5a60: 66 75 6c 6c 20 74 61 62 6c 65 20 73 63 61 6e 20  full table scan 
5a70: 74 6f 20 6f 62 74 61 69 6e 20 65 73 74 69 6d 61  to obtain estima
5a80: 74 65 73 20 66 6f 72 20 74 68 65 0a 64 61 74 61  tes for the.data
5a90: 62 61 73 65 20 73 68 61 70 65 2c 20 65 73 70 65  base shape, espe
5aa0: 63 69 61 6c 6c 79 20 6f 6e 20 6c 61 72 67 65 72  cially on larger
5ab0: 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 72 65   tables.  The re
5ac0: 73 75 6c 74 73 20 77 6f 75 6c 64 20 61 70 70 72  sults would appr
5ad0: 6f 78 69 6d 61 74 65 2c 20 62 75 74 20 0a 77 69  oximate, but .wi
5ae0: 6c 6c 20 62 65 20 63 6c 6f 73 65 20 65 6e 6f 75  ll be close enou
5af0: 67 68 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  gh for query pla
5b00: 6e 6e 69 6e 67 20 70 75 72 70 6f 73 65 73 2e 20  nning purposes. 
5b10: 20 41 73 20 6f 66 20 32 30 31 37 2d 30 33 2d 32   As of 2017-03-2
5b20: 30 2c 20 74 68 69 73 0a 63 6f 6e 63 65 70 74 20  0, this.concept 
5b30: 68 61 73 20 62 65 65 6e 20 74 65 73 74 65 64 20  has been tested 
5b40: 69 6e 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20  in experimental 
5b50: 62 72 61 6e 63 68 65 73 20 61 6e 64 20 61 70 70  branches and app
5b60: 65 61 72 73 20 74 6f 20 77 6f 72 6b 20 77 65 6c  ears to work wel
5b70: 6c 2c 20 62 75 74 0a 68 61 73 20 6e 6f 74 20 62  l, but.has not b
5b80: 65 65 6e 20 66 6f 6c 64 65 64 20 69 6e 74 6f 20  een folded into 
5b90: 61 6e 20 6f 66 66 69 63 69 61 6c 20 72 65 6c 65  an official rele
5ba0: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ase.</p>..<tcl>.
5bb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5bc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5bd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5be0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5bf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
5c00: 65 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44  ection {ATTACH D
5c10: 41 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 20  ATABASE} attach 
5c20: 7b 61 74 74 61 63 68 65 64 20 2a 41 54 54 41 43  {attached *ATTAC
5c30: 48 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  H}..RecursiveBub
5c40: 62 6c 65 44 69 61 67 72 61 6d 20 61 74 74 61 63  bleDiagram attac
5c50: 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  h-stmt.</tcl>..<
5c60: 70 3e 20 5e 54 68 65 20 41 54 54 41 43 48 20 44  p> ^The ATTACH D
5c70: 41 54 41 42 41 53 45 20 73 74 61 74 65 6d 65 6e  ATABASE statemen
5c80: 74 20 61 64 64 73 20 61 6e 6f 74 68 65 72 20 64  t adds another d
5c90: 61 74 61 62 61 73 65 20 0a 66 69 6c 65 20 74 6f  atabase .file to
5ca0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 5b 64 61   the current [da
5cb0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
5cc0: 6e 5d 2e 20 0a 44 61 74 61 62 61 73 65 20 66 69  n]. .Database fi
5cd0: 6c 65 73 20 74 68 61 74 20 77 65 72 65 20 70 72  les that were pr
5ce0: 65 76 69 6f 75 73 6c 79 20 61 74 74 61 63 68 65  eviously attache
5cf0: 64 20 63 61 6e 20 62 65 20 72 65 6d 6f 76 65 64  d can be removed
5d00: 20 75 73 69 6e 67 0a 74 68 65 20 5b 44 45 54 41   using.the [DETA
5d10: 43 48 20 44 41 54 41 42 41 53 45 5d 20 63 6f 6d  CH DATABASE] com
5d20: 6d 61 6e 64 2e 0a 0a 3c 70 3e 5e 54 68 65 20 66  mand...<p>^The f
5d30: 69 6c 65 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ilename for the 
5d40: 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 20 61  database to be a
5d50: 74 74 61 63 68 65 64 20 69 73 20 74 68 65 20 76  ttached is the v
5d60: 61 6c 75 65 20 6f 66 0a 74 68 65 20 65 78 70 72  alue of.the expr
5d70: 65 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75  ession that occu
5d80: 72 73 20 62 65 66 6f 72 65 20 74 68 65 20 41 53  rs before the AS
5d90: 20 6b 65 79 77 6f 72 64 2e 0a 5e 54 68 65 20 66   keyword..^The f
5da0: 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  ilename of the d
5db0: 61 74 61 62 61 73 65 20 66 6f 6c 6c 6f 77 73 20  atabase follows 
5dc0: 74 68 65 20 73 61 6d 65 20 73 65 6d 61 6e 74 69  the same semanti
5dd0: 63 73 20 61 73 20 74 68 65 0a 66 69 6c 65 6e 61  cs as the.filena
5de0: 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 5b  me argument to [
5df0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 5d 20  sqlite3_open()] 
5e00: 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65  and [sqlite3_ope
5e10: 6e 5f 76 32 28 29 5d 3b 20 74 68 65 0a 73 70 65  n_v2()]; the.spe
5e20: 63 69 61 6c 20 6e 61 6d 65 20 22 5b 3a 6d 65 6d  cial name "[:mem
5e30: 6f 72 79 3a 5d 22 20 72 65 73 75 6c 74 73 20 69  ory:]" results i
5e40: 6e 20 61 6e 20 5b 69 6e 2d 6d 65 6d 6f 72 79 20  n an [in-memory 
5e50: 64 61 74 61 62 61 73 65 5d 20 61 6e 64 20 61 6e  database] and an
5e60: 0a 65 6d 70 74 79 20 73 74 72 69 6e 67 20 72 65  .empty string re
5e70: 73 75 6c 74 73 20 69 6e 20 61 20 6e 65 77 20 74  sults in a new t
5e80: 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61 73  emporary databas
5e90: 65 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65  e..^The filename
5ea0: 20 61 72 67 75 6d 65 6e 74 20 63 61 6e 20 62 65   argument can be
5eb0: 20 61 20 5b 55 52 49 20 66 69 6c 65 6e 61 6d 65   a [URI filename
5ec0: 5d 20 69 66 20 55 52 49 20 66 69 6c 65 6e 61 6d  ] if URI filenam
5ed0: 65 20 70 72 6f 63 65 73 73 69 6e 67 0a 69 73 20  e processing.is 
5ee0: 65 6e 61 62 6c 65 20 6f 6e 20 74 68 65 20 64 61  enable on the da
5ef0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
5f00: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  n.  The default 
5f10: 62 65 68 61 76 69 6f 72 20 69 73 20 66 6f 72 0a  behavior is for.
5f20: 55 52 49 20 66 69 6c 65 6e 61 6d 65 73 20 74 6f  URI filenames to
5f30: 20 62 65 20 64 69 73 61 62 6c 65 64 2c 20 68 6f   be disabled, ho
5f40: 77 65 76 65 72 20 74 68 61 74 20 6d 69 67 68 74  wever that might
5f50: 20 63 68 61 6e 67 65 20 69 6e 20 61 20 66 75 74   change in a fut
5f60: 75 72 65 20 72 65 6c 65 61 73 65 0a 6f 66 20 53  ure release.of S
5f70: 51 4c 69 74 65 2c 20 73 6f 20 61 70 70 6c 69 63  QLite, so applic
5f80: 61 74 69 6f 6e 20 64 65 76 65 6c 6f 70 65 72 73  ation developers
5f90: 20 61 72 65 20 61 64 76 69 73 65 64 20 74 6f 20   are advised to 
5fa0: 70 6c 61 6e 20 61 63 63 6f 72 64 69 6e 67 6c 79  plan accordingly
5fb0: 2e 0a 0a 3c 70 3e 54 68 65 20 6e 61 6d 65 20 74  ...<p>The name t
5fc0: 68 61 74 20 6f 63 63 75 72 73 20 61 66 74 65 72  hat occurs after
5fd0: 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64 20   the AS keyword 
5fe0: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
5ff0: 68 65 20 64 61 74 61 62 61 73 65 0a 75 73 65 64  he database.used
6000: 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53   internally by S
6010: 51 4c 69 74 65 2e 0a 5e 54 68 65 20 73 63 68 65  QLite..^The sche
6020: 6d 61 2d 6e 61 6d 65 73 20 27 6d 61 69 6e 27 20  ma-names 'main' 
6030: 61 6e 64 20 0a 27 74 65 6d 70 27 20 72 65 66 65  and .'temp' refe
6040: 72 20 74 6f 20 74 68 65 20 6d 61 69 6e 20 64 61  r to the main da
6050: 74 61 62 61 73 65 20 61 6e 64 20 74 68 65 20 64  tabase and the d
6060: 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
6070: 20 0a 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c   .temporary tabl
6080: 65 73 2e 20 20 5e 54 68 65 20 6d 61 69 6e 20 61  es.  ^The main a
6090: 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  nd temp database
60a0: 73 20 63 61 6e 6e 6f 74 20 62 65 20 61 74 74 61  s cannot be atta
60b0: 63 68 65 64 20 6f 72 0a 64 65 74 61 63 68 65 64  ched or.detached
60c0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 61 62  .</p>..<p> ^(Tab
60d0: 6c 65 73 20 69 6e 20 61 6e 20 61 74 74 61 63 68  les in an attach
60e0: 65 64 20 64 61 74 61 62 61 73 65 20 63 61 6e 20  ed database can 
60f0: 62 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 75  be referred to u
6100: 73 69 6e 67 20 74 68 65 20 73 79 6e 74 61 78 20  sing the syntax 
6110: 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 2e  .<i>schema-name.
6120: 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29  table-name</i>.)
6130: 5e 20 20 5e 49 66 20 74 68 65 20 6e 61 6d 65 20  ^  ^If the name 
6140: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  of the table is 
6150: 75 6e 69 71 75 65 0a 61 63 72 6f 73 73 20 61 6c  unique.across al
6160: 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
6170: 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 69  ases and the mai
6180: 6e 20 61 6e 64 20 74 65 6d 70 20 64 61 74 61 62  n and temp datab
6190: 61 73 65 73 2c 20 74 68 65 6e 20 74 68 65 0a 3c  ases, then the.<
61a0: 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69  i>schema-name</i
61b0: 3e 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20  > prefix is not 
61c0: 72 65 71 75 69 72 65 64 2e 20 20 5e 49 66 20 74  required.  ^If t
61d0: 77 6f 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  wo or more table
61e0: 73 20 69 6e 0a 64 69 66 66 65 72 65 6e 74 20 64  s in.different d
61f0: 61 74 61 62 61 73 65 73 20 68 61 76 65 20 74 68  atabases have th
6200: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20  e same name and 
6210: 74 68 65 20 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e  the .<i>schema-n
6220: 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69  ame</i> prefix i
6230: 73 20 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61 20  s not used on a 
6240: 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 2c  table reference,
6250: 20 74 68 65 6e 20 74 68 65 0a 74 61 62 6c 65 20   then the.table 
6260: 63 68 6f 73 65 6e 20 69 73 20 74 68 65 20 6f 6e  chosen is the on
6270: 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
6280: 65 20 74 68 61 74 20 77 61 73 20 6c 65 61 73 74  e that was least
6290: 20 72 65 63 65 6e 74 6c 79 20 61 74 74 61 63 68   recently attach
62a0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72  ed.</p>..<p>.^Tr
62b0: 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f 6c  ansactions invol
62c0: 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61 74  ving multiple at
62d0: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
62e0: 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73 73   are atomic,.ass
62f0: 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20 6d  uming that the m
6300: 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
6310: 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22  not "[:memory:]"
6320: 20 61 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72 6e   and the .[journ
6330: 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74 20  al_mode] is not 
6340: 5b 57 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68 65  [WAL].  ^(If the
6350: 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65 20 69   main.database i
6360: 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72 20  s ":memory:" or 
6370: 69 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d  if the journal_m
6380: 6f 64 65 20 69 73 20 57 41 4c 2c 20 74 68 65 6e  ode is WAL, then
6390: 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63   .transactions c
63a0: 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 61 74  ontinue to be at
63b0: 6f 6d 69 63 20 77 69 74 68 69 6e 20 65 61 63 68  omic within each
63c0: 20 69 6e 64 69 76 69 64 75 61 6c 0a 64 61 74 61   individual.data
63d0: 62 61 73 65 20 66 69 6c 65 2e 20 42 75 74 20 69  base file. But i
63e0: 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75  f the host compu
63f0: 74 65 72 20 63 72 61 73 68 65 73 20 69 6e 20 74  ter crashes in t
6400: 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20 5b  he middle.of a [
6410: 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20 74 77  COMMIT] where tw
6420: 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74 61 62 61  o or more databa
6430: 73 65 20 66 69 6c 65 73 20 61 72 65 20 75 70 64  se files are upd
6440: 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68  ated,.some of th
6450: 6f 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20  ose files might 
6460: 67 65 74 20 74 68 65 20 63 68 61 6e 67 65 73 20  get the changes 
6470: 77 68 65 72 65 20 6f 74 68 65 72 73 0a 6d 69 67  where others.mig
6480: 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a  ht not.)^.</p>..
6490: 3c 70 3e 20 5e 54 68 65 72 65 20 69 73 20 61 20  <p> ^There is a 
64a0: 6c 69 6d 69 74 2c 20 73 65 74 20 75 73 69 6e 67  limit, set using
64b0: 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28   [sqlite3_limit(
64c0: 29 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45 5f  )] and .[SQLITE_
64d0: 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d 2c  LIMIT_ATTACHED],
64e0: 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
64f0: 66 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74  f databases that
6500: 20 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61 6e   can be.simultan
6510: 65 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64 20  eously attached 
6520: 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61  to a single data
6530: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
6540: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
6550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6590: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
65a0: 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53  ion {BEGIN TRANS
65b0: 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74  ACTION} transact
65c0: 69 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d  ion {*BEGIN COMM
65d0: 49 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 52 65  IT ROLLBACK}..Re
65e0: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
65f0: 67 72 61 6d 20 62 65 67 69 6e 2d 73 74 6d 74 0a  gram begin-stmt.
6600: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
6610: 69 61 67 72 61 6d 20 63 6f 6d 6d 69 74 2d 73 74  iagram commit-st
6620: 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  mt.RecursiveBubb
6630: 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61  leDiagram rollba
6640: 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ck-stmt.</tcl>..
6650: 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67 65 73 20  <p>.^No changes 
6660: 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
6670: 68 65 20 64 61 74 61 62 61 73 65 20 65 78 63 65  he database exce
6680: 70 74 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  pt within a tran
6690: 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79 20 63 6f  saction..^Any co
66a0: 6d 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e 67  mmand that chang
66b0: 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  es the database 
66c0: 28 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79 20  (basically, any 
66d0: 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65  SQL command.othe
66e0: 72 20 74 68 61 6e 20 5b 53 45 4c 45 43 54 5d 29  r than [SELECT])
66f0: 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
6700: 6c 6c 79 20 73 74 61 72 74 20 61 20 74 72 61 6e  lly start a tran
6710: 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20 69  saction if.one i
6720: 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69 6e  s not already in
6730: 20 65 66 66 65 63 74 2e 20 20 5e 41 75 74 6f 6d   effect.  ^Autom
6740: 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 65 64  atically started
6750: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 72   transactions.ar
6760: 65 20 63 6f 6d 6d 69 74 74 65 64 20 77 68 65 6e  e committed when
6770: 20 74 68 65 20 6c 61 73 74 20 71 75 65 72 79 20   the last query 
6780: 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a  finishes..</p>..
6790: 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e  <p>.^Transaction
67a0: 73 20 63 61 6e 20 62 65 20 73 74 61 72 74 65 64  s can be started
67b0: 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69 6e 67 20   manually using 
67c0: 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e  the BEGIN.comman
67d0: 64 2e 20 20 5e 28 53 75 63 68 20 74 72 61 6e 73  d.  ^(Such trans
67e0: 61 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79 20  actions usually 
67f0: 70 65 72 73 69 73 74 20 75 6e 74 69 6c 20 74 68  persist until th
6800: 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20 6f 72  e next.COMMIT or
6810: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
6820: 64 2e 20 20 42 75 74 20 61 20 74 72 61 6e 73 61  d.  But a transa
6830: 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f 20  ction will also 
6840: 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74 68 65  .ROLLBACK if the
6850: 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   database is clo
6860: 73 65 64 20 6f 72 20 69 66 20 61 6e 20 65 72 72  sed or if an err
6870: 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64 20 74 68  or occurs.and th
6880: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66 6c  e ROLLBACK confl
6890: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
68a0: 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63  lgorithm is spec
68b0: 69 66 69 65 64 2e 29 5e 0a 53 65 65 20 74 68 65  ified.)^.See the
68c0: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
68d0: 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46 4c 49  n the [ON CONFLI
68e0: 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72 20 61  CT].clause for a
68f0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
6900: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
6910: 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69 63  ROLLBACK.conflic
6920: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
6930: 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70  orithm..</p>..<p
6940: 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41 43 54 49  >.^END TRANSACTI
6950: 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66  ON is an alias f
6960: 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a  or COMMIT..</p>.
6970: 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61 63 74 69  .<p> ^(Transacti
6980: 6f 6e 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  ons created usin
6990: 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54  g BEGIN...COMMIT
69a0: 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 29 5e 0a   do not nest.)^.
69b0: 5e 46 6f 72 20 6e 65 73 74 65 64 20 74 72 61 6e  ^For nested tran
69c0: 73 61 63 74 69 6f 6e 73 2c 20 75 73 65 20 74 68  sactions, use th
69d0: 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 61 6e  e [SAVEPOINT] an
69e0: 64 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f 6d 6d  d [RELEASE] comm
69f0: 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20 53 41  ands..The "TO SA
6a00: 56 45 50 4f 49 4e 54 20 3c 79 79 74 65 72 6d 3e  VEPOINT <yyterm>
6a10: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 22 20 63  name</yyterm>" c
6a20: 6c 61 75 73 65 20 6f 66 20 74 68 65 20 52 4f 4c  lause of the ROL
6a30: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 73 68  LBACK command sh
6a40: 6f 77 6e 0a 69 6e 20 74 68 65 20 73 79 6e 74 61  own.in the synta
6a50: 78 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65 20  x diagram above 
6a60: 69 73 20 6f 6e 6c 79 20 61 70 70 6c 69 63 61 62  is only applicab
6a70: 6c 65 20 74 6f 20 5b 53 41 56 45 50 4f 49 4e 54  le to [SAVEPOINT
6a80: 5d 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  ].transactions. 
6a90: 20 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20   ^An attempt to 
6aa0: 69 6e 76 6f 6b 65 20 74 68 65 20 42 45 47 49 4e  invoke the BEGIN
6ab0: 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e 0a   command within.
6ac0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69  a transaction wi
6ad0: 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20  ll fail with an 
6ae0: 65 72 72 6f 72 2c 20 72 65 67 61 72 64 6c 65 73  error, regardles
6af0: 73 20 6f 66 20 77 68 65 74 68 65 72 0a 74 68 65  s of whether.the
6b00: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73   transaction was
6b10: 20 73 74 61 72 74 65 64 20 62 79 20 5b 53 41 56   started by [SAV
6b20: 45 50 4f 49 4e 54 5d 20 6f 72 20 61 20 70 72 69  EPOINT] or a pri
6b30: 6f 72 20 42 45 47 49 4e 2e 0a 5e 54 68 65 20 43  or BEGIN..^The C
6b40: 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 61 6e  OMMIT command an
6b50: 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  d the ROLLBACK c
6b60: 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 74  ommand without t
6b70: 68 65 20 54 4f 20 63 6c 61 75 73 65 0a 77 6f 72  he TO clause.wor
6b80: 6b 20 74 68 65 20 73 61 6d 65 20 6f 6e 20 5b 53  k the same on [S
6b90: 41 56 45 50 4f 49 4e 54 5d 20 74 72 61 6e 73 61  AVEPOINT] transa
6ba0: 63 74 69 6f 6e 73 20 61 73 20 74 68 65 79 20 64  ctions as they d
6bb0: 6f 20 77 69 74 68 20 74 72 61 6e 73 61 63 74 69  o with transacti
6bc0: 6f 6e 73 0a 73 74 61 72 74 65 64 20 62 79 20 42  ons.started by B
6bd0: 45 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  EGIN.</p>..<tcl>
6be0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6d 6d 65  hd_fragment imme
6bf0: 64 69 61 74 65 20 7b 42 45 47 49 4e 20 49 4d 4d  diate {BEGIN IMM
6c00: 45 44 49 41 54 45 7d 20 7b 42 45 47 49 4e 20 45  EDIATE} {BEGIN E
6c10: 58 43 4c 55 53 49 56 45 7d 3c 2f 74 63 6c 3e 0a  XCLUSIVE}</tcl>.
6c20: 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e  <p>.^Transaction
6c30: 73 20 63 61 6e 20 62 65 20 64 65 66 65 72 72 65  s can be deferre
6c40: 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72  d, immediate, or
6c50: 20 65 78 63 6c 75 73 69 76 65 2e 20 20 0a 5e 54   exclusive.  .^T
6c60: 68 65 20 64 65 66 61 75 6c 74 20 74 72 61 6e 73  he default trans
6c70: 61 63 74 69 6f 6e 20 62 65 68 61 76 69 6f 72 20  action behavior 
6c80: 69 73 20 64 65 66 65 72 72 65 64 2e 0a 5e 44 65  is deferred..^De
6c90: 66 65 72 72 65 64 20 6d 65 61 6e 73 20 74 68 61  ferred means tha
6ca0: 74 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61  t no locks are a
6cb0: 63 71 75 69 72 65 64 0a 6f 6e 20 74 68 65 20 64  cquired.on the d
6cc0: 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68  atabase until th
6cd0: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69  e database is fi
6ce0: 72 73 74 20 61 63 63 65 73 73 65 64 2e 20 20 5e  rst accessed.  ^
6cf0: 54 68 75 73 20 77 69 74 68 20 61 0a 64 65 66 65  Thus with a.defe
6d00: 72 72 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  rred transaction
6d10: 2c 20 74 68 65 20 42 45 47 49 4e 20 73 74 61 74  , the BEGIN stat
6d20: 65 6d 65 6e 74 20 69 74 73 65 6c 66 20 64 6f 65  ement itself doe
6d30: 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65  s nothing to the
6d40: 0a 66 69 6c 65 73 79 73 74 65 6d 2e 20 20 5e 4c  .filesystem.  ^L
6d50: 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61 63 71  ocks.are not acq
6d60: 75 69 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20  uired until the 
6d70: 66 69 72 73 74 20 72 65 61 64 20 6f 72 20 77 72  first read or wr
6d80: 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ite operation.  
6d90: 5e 54 68 65 20 66 69 72 73 74 20 72 65 61 64 0a  ^The first read.
6da0: 6f 70 65 72 61 74 69 6f 6e 20 61 67 61 69 6e 73  operation agains
6db0: 74 20 61 20 64 61 74 61 62 61 73 65 20 63 72 65  t a database cre
6dc0: 61 74 65 73 20 61 20 5b 53 48 41 52 45 44 5d 20  ates a [SHARED] 
6dd0: 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20 66 69 72  lock and the fir
6de0: 73 74 0a 77 72 69 74 65 20 6f 70 65 72 61 74 69  st.write operati
6df0: 6f 6e 20 63 72 65 61 74 65 73 20 61 20 5b 52 45  on creates a [RE
6e00: 53 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20 20 20  SERVED] lock.   
6e10: 5e 42 65 63 61 75 73 65 20 74 68 65 20 61 63 71  ^Because the acq
6e20: 75 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b  uisition of.lock
6e30: 73 20 69 73 20 64 65 66 65 72 72 65 64 20 75 6e  s is deferred un
6e40: 74 69 6c 20 74 68 65 79 20 61 72 65 20 6e 65 65  til they are nee
6e50: 64 65 64 2c 20 69 74 20 69 73 20 70 6f 73 73 69  ded, it is possi
6e60: 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72  ble that another
6e70: 0a 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65  .thread or proce
6e80: 73 73 20 63 6f 75 6c 64 20 63 72 65 61 74 65 20  ss could create 
6e90: 61 20 73 65 70 61 72 61 74 65 20 74 72 61 6e 73  a separate trans
6ea0: 61 63 74 69 6f 6e 20 61 6e 64 20 77 72 69 74 65  action and write
6eb0: 20 74 6f 0a 74 68 65 20 64 61 74 61 62 61 73 65   to.the database
6ec0: 20 61 66 74 65 72 20 74 68 65 20 42 45 47 49 4e   after the BEGIN
6ed0: 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   on the current 
6ee0: 74 68 72 65 61 64 20 68 61 73 20 65 78 65 63 75  thread has execu
6ef0: 74 65 64 2e 0a 5e 49 66 20 74 68 65 20 74 72 61  ted..^If the tra
6f00: 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6d 6d 65  nsaction is imme
6f10: 64 69 61 74 65 2c 20 74 68 65 6e 20 5b 52 45 53  diate, then [RES
6f20: 45 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61 72 65  ERVED] locks.are
6f30: 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c   acquired on all
6f40: 20 64 61 74 61 62 61 73 65 73 20 61 73 20 73 6f   databases as so
6f50: 6f 6e 20 61 73 20 74 68 65 20 42 45 47 49 4e 20  on as the BEGIN 
6f60: 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65 63 75  command is.execu
6f70: 74 65 64 2c 20 77 69 74 68 6f 75 74 20 77 61 69  ted, without wai
6f80: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 64 61 74  ting for the.dat
6f90: 61 62 61 73 65 20 74 6f 20 62 65 20 75 73 65 64  abase to be used
6fa0: 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45 47 49  .  ^After a BEGI
6fb0: 4e 20 49 4d 4d 45 44 49 41 54 45 2c 20 0a 6e 6f  N IMMEDIATE, .no
6fc0: 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73 65   other [database
6fd0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77 69 6c   connection] wil
6fe0: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69  l be able to wri
6ff0: 74 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  te to the databa
7000: 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47 49 4e  se or.do a BEGIN
7010: 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20 42 45   IMMEDIATE or BE
7020: 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e 20 20  GIN EXCLUSIVE.  
7030: 5e 4f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73  ^Other processes
7040: 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a 74 6f   can continue.to
7050: 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 64   read from the d
7060: 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76 65 72  atabase, however
7070: 2e 20 20 5e 41 6e 20 65 78 63 6c 75 73 69 76 65  .  ^An exclusive
7080: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 75   transaction cau
7090: 73 65 73 0a 5b 45 58 43 4c 55 53 49 56 45 5d 20  ses.[EXCLUSIVE] 
70a0: 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61 63 71 75  locks to be acqu
70b0: 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61  ired on all data
70c0: 62 61 73 65 73 2e 20 20 5e 41 66 74 65 72 20 61  bases.  ^After a
70d0: 20 42 45 47 49 4e 0a 45 58 43 4c 55 53 49 56 45   BEGIN.EXCLUSIVE
70e0: 2c 20 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61  , no other [data
70f0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
7100: 20 65 78 63 65 70 74 20 66 6f 72 20 5b 72 65 61   except for [rea
7110: 64 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 5d 0a 63  d_uncommitted].c
7120: 6f 6e 6e 65 63 74 69 6f 6e 73 20 77 69 6c 6c 20  onnections will 
7130: 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20  be able to read 
7140: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
7150: 20 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e 65 63   no other connec
7160: 74 69 6f 6e 20 77 69 74 68 6f 75 74 0a 65 78 63  tion without.exc
7170: 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  eption will be a
7180: 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74 68 65  ble to write the
7190: 20 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20   database until 
71a0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
71b0: 69 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70  is.complete..</p
71c0: 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d 70 6c  >..<p>.^(An impl
71d0: 69 63 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  icit transaction
71e0: 20 28 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   (a transaction 
71f0: 74 68 61 74 20 69 73 20 73 74 61 72 74 65 64 20  that is started 
7200: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c 0a 6e  automatically,.n
7210: 6f 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ot a transaction
7220: 20 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49   started by BEGI
7230: 4e 29 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 20  N) is committed 
7240: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
7250: 65 6e 0a 74 68 65 20 6c 61 73 74 20 61 63 74 69  en.the last acti
7260: 76 65 20 73 74 61 74 65 6d 65 6e 74 20 66 69 6e  ve statement fin
7270: 69 73 68 65 73 2e 20 20 41 20 73 74 61 74 65 6d  ishes.  A statem
7280: 65 6e 74 20 66 69 6e 69 73 68 65 73 20 77 68 65  ent finishes whe
7290: 6e 20 69 74 73 0a 70 72 65 70 61 72 65 64 20 73  n its.prepared s
72a0: 74 61 74 65 6d 65 6e 74 20 69 73 20 5b 73 71 6c  tatement is [sql
72b0: 69 74 65 33 5f 72 65 73 65 74 28 29 20 7c 20 72  ite3_reset() | r
72c0: 65 73 65 74 5d 20 6f 72 0a 5b 73 71 6c 69 74 65  eset] or.[sqlite
72d0: 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c 20 66  3_finalize() | f
72e0: 69 6e 61 6c 69 7a 65 64 5d 2e 20 20 41 6e 20 6f  inalized].  An o
72f0: 70 65 6e 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f  pen [sqlite3_blo
7300: 62 5d 20 75 73 65 64 20 66 6f 72 0a 69 6e 63 72  b] used for.incr
7310: 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f  emental BLOB I/O
7320: 20 63 6f 75 6e 74 73 20 61 73 20 61 6e 20 75 6e   counts as an un
7330: 66 69 6e 69 73 68 65 64 20 73 74 61 74 65 6d 65  finished stateme
7340: 6e 74 2e 20 20 54 68 65 20 5b 73 71 6c 69 74 65  nt.  The [sqlite
7350: 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73 68 65 73  3_blob].finishes
7360: 20 77 68 65 6e 20 69 74 20 69 73 20 5b 73 71 6c   when it is [sql
7370: 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28  ite3_blob_close(
7380: 29 20 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e 0a 3c  ) | closed].)^.<
7390: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 65 78  /p>..<p>.^The ex
73a0: 70 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20 63 6f  plicit COMMIT co
73b0: 6d 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d 65 64  mmand runs immed
73c0: 69 61 74 65 6c 79 2c 20 65 76 65 6e 20 69 66 20  iately, even if 
73d0: 74 68 65 72 65 20 61 72 65 0a 70 65 6e 64 69 6e  there are.pendin
73e0: 67 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65  g [SELECT] state
73f0: 6d 65 6e 74 73 2e 20 20 5e 48 6f 77 65 76 65 72  ments.  ^However
7400: 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 20 70  , if there are p
7410: 65 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f 70 65  ending.write ope
7420: 72 61 74 69 6f 6e 73 2c 20 74 68 65 20 43 4f 4d  rations, the COM
7430: 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c  MIT command.will
7440: 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72   fail with an er
7450: 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54 45  ror code [SQLITE
7460: 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70  _BUSY]..</p>..<p
7470: 3e 0a 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  >.^An attempt to
7480: 20 65 78 65 63 75 74 65 20 43 4f 4d 4d 49 54 20   execute COMMIT 
7490: 6d 69 67 68 74 20 61 6c 73 6f 20 72 65 73 75 6c  might also resul
74a0: 74 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54 45 5f  t in an [SQLITE_
74b0: 42 55 53 59 5d 20 72 65 74 75 72 6e 20 63 6f 64  BUSY] return cod
74c0: 65 0a 69 66 20 61 6e 20 61 6e 6f 74 68 65 72 20  e.if an another 
74d0: 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73  thread or proces
74e0: 73 20 68 61 73 20 61 20 5b 73 68 61 72 65 64 20  s has a [shared 
74f0: 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64 61 74  lock] on the dat
7500: 61 62 61 73 65 0a 74 68 61 74 20 70 72 65 76 65  abase.that preve
7510: 6e 74 65 64 20 74 68 65 20 64 61 74 61 62 61 73  nted the databas
7520: 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 70 64  e from being upd
7530: 61 74 65 64 2e 20 20 5e 57 68 65 6e 20 43 4f 4d  ated.  ^When COM
7540: 4d 49 54 20 66 61 69 6c 73 20 69 6e 20 74 68 69  MIT fails in thi
7550: 73 0a 77 61 79 2c 20 74 68 65 20 74 72 61 6e 73  s.way, the trans
7560: 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61  action remains a
7570: 63 74 69 76 65 20 61 6e 64 20 74 68 65 20 43 4f  ctive and the CO
7580: 4d 4d 49 54 20 63 61 6e 20 62 65 20 72 65 74 72  MMIT can be retr
7590: 69 65 64 20 6c 61 74 65 72 0a 61 66 74 65 72 20  ied later.after 
75a0: 74 68 65 20 72 65 61 64 65 72 20 68 61 73 20 68  the reader has h
75b0: 61 64 20 61 20 63 68 61 6e 63 65 20 74 6f 20 63  ad a chance to c
75c0: 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  lear..</p>..<p>.
75d0: 49 6e 20 76 65 72 79 20 6f 6c 64 20 76 65 72 73  In very old vers
75e0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 28  ions of SQLite (
75f0: 62 65 66 6f 72 65 20 76 65 72 73 69 6f 6e 20 33  before version 3
7600: 2e 37 2e 31 31 20 2d 20 5b 64 61 74 65 6f 66 3a  .7.11 - [dateof:
7610: 33 2e 37 2e 31 31 5d 29 0a 74 68 65 20 52 4f 4c  3.7.11]).the ROL
7620: 4c 42 41 43 4b 20 77 69 6c 6c 20 66 61 69 6c 20  LBACK will fail 
7630: 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f  with an error co
7640: 64 65 20 0a 5b 53 51 4c 49 54 45 5f 42 55 53 59  de .[SQLITE_BUSY
7650: 5d 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  ] if there are a
7660: 6e 79 20 70 65 6e 64 69 6e 67 20 71 75 65 72 69  ny pending queri
7670: 65 73 2e 20 20 5e 49 6e 20 6d 6f 72 65 20 72 65  es.  ^In more re
7680: 63 65 6e 74 0a 76 65 72 73 69 6f 6e 73 20 6f 66  cent.versions of
7690: 20 53 51 4c 69 74 65 2c 20 74 68 65 20 52 4f 4c   SQLite, the ROL
76a0: 4c 42 41 43 4b 20 77 69 6c 6c 20 70 72 6f 63 65  LBACK will proce
76b0: 65 64 20 61 6e 64 20 70 65 6e 64 69 6e 67 20 73  ed and pending s
76c0: 74 61 74 65 6d 65 6e 74 73 0a 77 69 6c 6c 20 6f  tatements.will o
76d0: 66 74 65 6e 20 62 65 20 61 62 6f 72 74 65 64 2c  ften be aborted,
76e0: 20 63 61 75 73 69 6e 67 20 74 68 65 6d 20 74 6f   causing them to
76f0: 20 72 65 74 75 72 6e 20 61 6e 20 5b 53 51 4c 49   return an [SQLI
7700: 54 45 5f 41 42 4f 52 54 5d 20 6f 72 0a 5b 53 51  TE_ABORT] or.[SQ
7710: 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
7720: 41 43 4b 5d 20 65 72 72 6f 72 2e 0a 5e 49 6e 20  ACK] error..^In 
7730: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
7740: 2e 38 2e 38 20 28 5b 64 61 74 65 6f 66 3a 33 2e  .8.8 ([dateof:3.
7750: 38 2e 38 5d 29 20 61 6e 64 20 6c 61 74 65 72 2c  8.8]) and later,
7760: 0a 61 20 70 65 6e 64 69 6e 67 20 72 65 61 64 20  .a pending read 
7770: 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 66 75  will continue fu
7780: 6e 63 74 69 6f 6e 69 6e 67 0a 61 66 74 65 72 20  nctioning.after 
7790: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 61 73 20  the ROLLBACK as 
77a0: 6c 6f 6e 67 20 61 73 20 74 68 65 20 52 4f 4c 4c  long as the ROLL
77b0: 42 41 43 4b 20 64 6f 65 73 20 6e 6f 74 20 6d 6f  BACK does not mo
77c0: 64 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73  dify the databas
77d0: 65 0a 73 63 68 65 6d 61 2e 0a 3c 2f 70 3e 0a 0a  e.schema..</p>..
77e0: 3c 70 3e 0a 49 66 20 5b 50 52 41 47 4d 41 20 6a  <p>.If [PRAGMA j
77f0: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20  ournal_mode] is 
7800: 73 65 74 20 74 6f 20 4f 46 46 20 28 74 68 75 73  set to OFF (thus
7810: 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65 20 72   disabling the r
7820: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a  ollback journal.
7830: 66 69 6c 65 29 20 74 68 65 6e 20 74 68 65 20 62  file) then the b
7840: 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 52  ehavior of the R
7850: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
7860: 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 3c 2f  is undefined..</
7870: 70 3e 0a 0a 3c 68 33 3e 52 65 73 70 6f 6e 73 65  p>..<h3>Response
7880: 20 54 6f 20 45 72 72 6f 72 73 20 57 69 74 68 69   To Errors Withi
7890: 6e 20 41 20 54 72 61 6e 73 61 63 74 69 6f 6e 3c  n A Transaction<
78a0: 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28 49 66 20 63  /h3>..<p> ^(If c
78b0: 65 72 74 61 69 6e 20 6b 69 6e 64 73 20 6f 66 20  ertain kinds of 
78c0: 65 72 72 6f 72 73 20 6f 63 63 75 72 20 77 69 74  errors occur wit
78d0: 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
78e0: 6e 2c 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69  n, the.transacti
78f0: 6f 6e 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f  on may or may no
7900: 74 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  t be rolled back
7910: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20   automatically. 
7920: 20 54 68 65 0a 65 72 72 6f 72 73 20 74 68 61 74   The.errors that
7930: 20 63 61 6e 20 63 61 75 73 65 20 61 6e 20 61 75   can cause an au
7940: 74 6f 6d 61 74 69 63 20 72 6f 6c 6c 62 61 63 6b  tomatic rollback
7950: 20 69 6e 63 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c   include:</p>..<
7960: 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45  ul>.<li> [SQLITE
7970: 5f 46 55 4c 4c 5d 3a 20 64 61 74 61 62 61 73 65  _FULL]: database
7980: 20 6f 72 20 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c   or disk full.<l
7990: 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52  i> [SQLITE_IOERR
79a0: 5d 3a 20 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f  ]: disk I/O erro
79b0: 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 42  r.<li> [SQLITE_B
79c0: 55 53 59 5d 3a 20 64 61 74 61 62 61 73 65 20 69  USY]: database i
79d0: 6e 20 75 73 65 20 62 79 20 61 6e 6f 74 68 65 72  n use by another
79e0: 20 70 72 6f 63 65 73 73 0a 3c 6c 69 3e 20 5b 53   process.<li> [S
79f0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75  QLITE_NOMEM]: ou
7a00: 74 20 6f 72 20 6d 65 6d 6f 72 79 0a 3c 2f 75 6c  t or memory.</ul
7a10: 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c  >)^..<p>.^For al
7a20: 6c 20 6f 66 20 74 68 65 73 65 20 65 72 72 6f 72  l of these error
7a30: 73 2c 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70  s, SQLite attemp
7a40: 74 73 20 74 6f 20 75 6e 64 6f 20 6a 75 73 74 20  ts to undo just 
7a50: 74 68 65 20 6f 6e 65 20 73 74 61 74 65 6d 65 6e  the one statemen
7a60: 74 0a 69 74 20 77 61 73 20 77 6f 72 6b 69 6e 67  t.it was working
7a70: 20 6f 6e 20 61 6e 64 20 6c 65 61 76 65 20 63 68   on and leave ch
7a80: 61 6e 67 65 73 20 66 72 6f 6d 20 70 72 69 6f 72  anges from prior
7a90: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
7aa0: 69 6e 20 74 68 65 0a 73 61 6d 65 20 74 72 61 6e  in the.same tran
7ab0: 73 61 63 74 69 6f 6e 20 69 6e 74 61 63 74 20 61  saction intact a
7ac0: 6e 64 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68  nd continue with
7ad0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
7ae0: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 0a 64 65  .  ^However, .de
7af0: 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 73  pending on the s
7b00: 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 65  tatement being e
7b10: 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
7b20: 20 70 6f 69 6e 74 20 61 74 20 77 68 69 63 68 20   point at which 
7b30: 74 68 65 0a 65 72 72 6f 72 20 6f 63 63 75 72 73  the.error occurs
7b40: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 6e 65  , it might be ne
7b50: 63 65 73 73 61 72 79 20 66 6f 72 20 53 51 4c 69  cessary for SQLi
7b60: 74 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  te to rollback a
7b70: 6e 64 0a 63 61 6e 63 65 6c 20 74 68 65 20 65 6e  nd.cancel the en
7b80: 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tire transaction
7b90: 2e 20 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69  .  ^An applicati
7ba0: 6f 6e 20 63 61 6e 20 74 65 6c 6c 20 77 68 69 63  on can tell whic
7bb0: 68 0a 63 6f 75 72 73 65 20 6f 66 20 61 63 74 69  h.course of acti
7bc0: 6f 6e 20 53 51 4c 69 74 65 20 74 6f 6f 6b 20 62  on SQLite took b
7bd0: 79 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c  y using the.[sql
7be0: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
7bf0: 6d 69 74 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67  mit()] C-languag
7c00: 65 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  e interface.</p>
7c10: 0a 0a 3c 70 3e 49 74 20 69 73 20 72 65 63 6f 6d  ..<p>It is recom
7c20: 6d 65 6e 64 65 64 20 74 68 61 74 20 61 70 70 6c  mended that appl
7c30: 69 63 61 74 69 6f 6e 73 20 72 65 73 70 6f 6e 64  ications respond
7c40: 20 74 6f 20 74 68 65 20 65 72 72 6f 72 73 0a 6c   to the errors.l
7c50: 69 73 74 65 64 20 61 62 6f 76 65 20 62 79 20 65  isted above by e
7c60: 78 70 6c 69 63 69 74 6c 79 20 69 73 73 75 69 6e  xplicitly issuin
7c70: 67 20 61 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  g a ROLLBACK com
7c80: 6d 61 6e 64 2e 20 20 5e 49 66 20 74 68 65 20 0a  mand.  ^If the .
7c90: 74 72 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20  transaction has 
7ca0: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 72 6f 6c  already been rol
7cb0: 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74  led back automat
7cc0: 69 63 61 6c 6c 79 0a 62 79 20 74 68 65 20 65 72  ically.by the er
7cd0: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2c 20 74 68  ror response, th
7ce0: 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
7cf0: 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69  command will fai
7d00: 6c 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 2c  l with an.error,
7d10: 20 62 75 74 20 6e 6f 20 68 61 72 6d 20 69 73 20   but no harm is 
7d20: 63 61 75 73 65 64 20 62 79 20 74 68 69 73 2e 3c  caused by this.<
7d30: 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75 72 65 20 76  /p>..<p>Future v
7d40: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
7d50: 65 20 6d 61 79 20 65 78 74 65 6e 64 20 74 68 65  e may extend the
7d60: 20 6c 69 73 74 20 6f 66 20 65 72 72 6f 72 73 20   list of errors 
7d70: 77 68 69 63 68 0a 6d 69 67 68 74 20 63 61 75 73  which.might caus
7d80: 65 20 61 75 74 6f 6d 61 74 69 63 20 74 72 61 6e  e automatic tran
7d90: 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b  saction rollback
7da0: 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f  .  Future versio
7db0: 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67  ns of.SQLite mig
7dc0: 68 74 20 63 68 61 6e 67 65 20 74 68 65 20 65 72  ht change the er
7dd0: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2e 20 20 49  ror response.  I
7de0: 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 77 65  n particular, we
7df0: 20 6d 61 79 0a 63 68 6f 6f 73 65 20 74 6f 20 73   may.choose to s
7e00: 69 6d 70 6c 69 66 79 20 74 68 65 20 69 6e 74 65  implify the inte
7e10: 72 66 61 63 65 20 69 6e 20 66 75 74 75 72 65 20  rface in future 
7e20: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
7e30: 74 65 20 62 79 0a 63 61 75 73 69 6e 67 20 74 68  te by.causing th
7e40: 65 20 65 72 72 6f 72 73 20 61 62 6f 76 65 20 74  e errors above t
7e50: 6f 20 66 6f 72 63 65 20 61 6e 20 75 6e 63 6f 6e  o force an uncon
7e60: 64 69 74 69 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63  ditional rollbac
7e70: 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  k.</p>..<tcl>.##
7e80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7e90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7ea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7eb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7ec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
7ed0: 63 74 69 6f 6e 20 7b 53 41 56 45 50 4f 49 4e 54  ction {SAVEPOINT
7ee0: 7d 20 73 61 76 65 70 6f 69 6e 74 20 7b 53 41 56  } savepoint {SAV
7ef0: 45 50 4f 49 4e 54 20 52 45 4c 45 41 53 45 7d 0a  EPOINT RELEASE}.
7f00: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
7f10: 44 69 61 67 72 61 6d 20 73 61 76 65 70 6f 69 6e  Diagram savepoin
7f20: 74 2d 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65  t-stmt.Recursive
7f30: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65  BubbleDiagram re
7f40: 6c 65 61 73 65 2d 73 74 6d 74 0a 52 65 63 75 72  lease-stmt.Recur
7f50: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
7f60: 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a  m rollback-stmt.
7f70: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 53 41 56  </tcl>..<p> ^SAV
7f80: 45 50 4f 49 4e 54 73 20 61 72 65 20 61 20 6d 65  EPOINTs are a me
7f90: 74 68 6f 64 20 6f 66 20 63 72 65 61 74 69 6e 67  thod of creating
7fa0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 73   transactions, s
7fb0: 69 6d 69 6c 61 72 20 74 6f 0a 5b 42 45 47 49 4e  imilar to.[BEGIN
7fc0: 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49 54 5d 2c 20  ] and [COMMIT], 
7fd0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
7fe0: 53 41 56 45 50 4f 49 4e 54 20 61 6e 64 20 52 45  SAVEPOINT and RE
7ff0: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 73 0a 61  LEASE commands.a
8000: 72 65 20 6e 61 6d 65 64 20 61 6e 64 20 6d 61 79  re named and may
8010: 20 62 65 20 6e 65 73 74 65 64 2e 3c 2f 70 3e 0a   be nested.</p>.
8020: 0a 3c 70 3e 20 5e 54 68 65 20 53 41 56 45 50 4f  .<p> ^The SAVEPO
8030: 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72  INT command star
8040: 74 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61 63  ts a new transac
8050: 74 69 6f 6e 20 77 69 74 68 20 61 20 6e 61 6d 65  tion with a name
8060: 2e 0a 5e 54 68 65 20 74 72 61 6e 73 61 63 74 69  ..^The transacti
8070: 6f 6e 20 6e 61 6d 65 73 20 6e 65 65 64 20 6e 6f  on names need no
8080: 74 20 62 65 20 75 6e 69 71 75 65 2e 0a 5e 28 41  t be unique..^(A
8090: 20 53 41 56 45 50 4f 49 4e 54 20 63 61 6e 20 62   SAVEPOINT can b
80a0: 65 20 73 74 61 72 74 65 64 20 65 69 74 68 65 72  e started either
80b0: 20 77 69 74 68 69 6e 20 6f 72 20 6f 75 74 73 69   within or outsi
80c0: 64 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e 5d 2e  de of.a [BEGIN].
80d0: 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e 20 20 5e  ..[COMMIT].)^  ^
80e0: 28 57 68 65 6e 20 61 20 53 41 56 45 50 4f 49 4e  (When a SAVEPOIN
80f0: 54 20 69 73 20 74 68 65 20 6f 75 74 65 72 2d 6d  T is the outer-m
8100: 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 0a 61 6e  ost savepoint.an
8110: 64 20 69 74 20 69 73 20 6e 6f 74 20 77 69 74 68  d it is not with
8120: 69 6e 20 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b  in a [BEGIN]...[
8130: 43 4f 4d 4d 49 54 5d 20 74 68 65 6e 20 74 68 65  COMMIT] then the
8140: 20 62 65 68 61 76 69 6f 72 20 69 73 20 74 68 65   behavior is the
8150: 0a 73 61 6d 65 20 61 73 20 42 45 47 49 4e 20 44  .same as BEGIN D
8160: 45 46 45 52 52 45 44 20 54 52 41 4e 53 41 43 54  EFERRED TRANSACT
8170: 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ION.)^</p>..<p>^
8180: 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  The ROLLBACK TO 
8190: 63 6f 6d 6d 61 6e 64 20 72 65 76 65 72 74 73 20  command reverts 
81a0: 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
81b0: 20 64 61 74 61 62 61 73 65 20 62 61 63 6b 20 74   database back t
81c0: 6f 20 77 68 61 74 0a 69 74 20 77 61 73 20 6a 75  o what.it was ju
81d0: 73 74 20 61 66 74 65 72 20 74 68 65 20 63 6f 72  st after the cor
81e0: 72 65 73 70 6f 6e 64 69 6e 67 20 53 41 56 45 50  responding SAVEP
81f0: 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65 20 74 68 61  OINT.  ^Note tha
8200: 74 20 75 6e 6c 69 6b 65 20 74 68 61 74 0a 70 6c  t unlike that.pl
8210: 61 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63  ain [ROLLBACK] c
8220: 6f 6d 6d 61 6e 64 20 28 77 69 74 68 6f 75 74 20  ommand (without 
8230: 74 68 65 20 54 4f 20 6b 65 79 77 6f 72 64 29 20  the TO keyword) 
8240: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  the ROLLBACK TO 
8250: 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20 6e 6f 74  command.does not
8260: 20 63 61 6e 63 65 6c 20 74 68 65 20 74 72 61 6e   cancel the tran
8270: 73 61 63 74 69 6f 6e 2e 20 20 5e 49 6e 73 74 65  saction.  ^Inste
8280: 61 64 20 6f 66 20 63 61 6e 63 65 6c 6c 69 6e 67  ad of cancelling
8290: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
82a0: 2c 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54  ,.the ROLLBACK T
82b0: 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 73 74 61 72  O command restar
82c0: 74 73 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ts the transacti
82d0: 6f 6e 20 61 67 61 69 6e 20 61 74 20 74 68 65 20  on again at the 
82e0: 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41 6c 6c 20  beginning..^All 
82f0: 69 6e 74 65 72 76 65 6e 69 6e 67 20 53 41 56 45  intervening SAVE
8300: 50 4f 49 4e 54 73 20 61 72 65 20 63 61 6e 63 65  POINTs are cance
8310: 6c 65 64 2c 20 68 6f 77 65 76 65 72 2e 3c 2f 70  led, however.</p
8320: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41  >..<p>^The RELEA
8330: 53 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6c 69  SE command is li
8340: 6b 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 66 6f  ke a [COMMIT] fo
8350: 72 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 5e  r a SAVEPOINT..^
8360: 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  The RELEASE comm
8370: 61 6e 64 20 63 61 75 73 65 73 20 61 6c 6c 20 73  and causes all s
8380: 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 20 74  avepoints back t
8390: 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20  o and including 
83a0: 74 68 65 20 0a 6d 6f 73 74 20 72 65 63 65 6e 74  the .most recent
83b0: 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20   savepoint with 
83c0: 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20  a matching name 
83d0: 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 20 66 72  to be removed fr
83e0: 6f 6d 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74  om the .transact
83f0: 69 6f 6e 20 73 74 61 63 6b 2e 20 20 5e 54 68 65  ion stack.  ^The
8400: 20 52 45 4c 45 41 53 45 20 6f 66 20 61 6e 20 69   RELEASE of an i
8410: 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e  nner transaction
8420: 0a 64 6f 65 73 20 6e 6f 74 20 63 61 75 73 65 20  .does not cause 
8430: 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 62  any changes to b
8440: 65 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68 65  e written to the
8450: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 3b 20   database file; 
8460: 69 74 20 6d 65 72 65 6c 79 0a 72 65 6d 6f 76 65  it merely.remove
8470: 73 20 73 61 76 65 70 6f 69 6e 74 73 20 66 72 6f  s savepoints fro
8480: 6d 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  m the transactio
8490: 6e 20 73 74 61 63 6b 20 73 75 63 68 20 74 68 61  n stack such tha
84a0: 74 20 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e 67 65  t it is.no longe
84b0: 72 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 52 4f  r possible to RO
84c0: 4c 4c 42 41 43 4b 20 54 4f 20 74 68 6f 73 65 20  LLBACK TO those 
84d0: 73 61 76 65 70 6f 69 6e 74 73 2e 0a 5e 49 66 20  savepoints..^If 
84e0: 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  a RELEASE comman
84f0: 64 20 72 65 6c 65 61 73 65 73 20 74 68 65 20 6f  d releases the o
8500: 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69  utermost savepoi
8510: 6e 74 2c 20 73 6f 0a 74 68 61 74 20 74 68 65 20  nt, so.that the 
8520: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
8530: 6b 20 62 65 63 6f 6d 65 73 20 65 6d 70 74 79 2c  k becomes empty,
8540: 20 74 68 65 6e 20 52 45 4c 45 41 53 45 20 69 73   then RELEASE is
8550: 20 74 68 65 20 73 61 6d 65 0a 61 73 20 5b 43 4f   the same.as [CO
8560: 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b 43 4f 4d  MMIT]..^The [COM
8570: 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79  MIT] command may
8580: 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 6c 65   be used to rele
8590: 61 73 65 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e  ase all savepoin
85a0: 74 73 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74 68  ts and.commit th
85b0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 76  e transaction ev
85c0: 65 6e 20 69 66 20 74 68 65 20 74 72 61 6e 73 61  en if the transa
85d0: 63 74 69 6f 6e 20 77 61 73 20 6f 72 69 67 69 6e  ction was origin
85e0: 61 6c 6c 79 20 73 74 61 72 74 65 64 0a 62 79 20  ally started.by 
85f0: 61 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d  a SAVEPOINT comm
8600: 61 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61  and instead of a
8610: 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64   [BEGIN] command
8620: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68  .</p>..<p>^If th
8630: 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65  e savepoint-name
8640: 20 69 6e 20 61 20 52 45 4c 45 41 53 45 20 63 6f   in a RELEASE co
8650: 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6d  mmand does not m
8660: 61 74 63 68 20 61 6e 79 0a 73 61 76 65 70 6f 69  atch any.savepoi
8670: 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  nt currently in 
8680: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
8690: 73 74 61 63 6b 2c 20 74 68 65 6e 20 6e 6f 20 73  stack, then no s
86a0: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 0a 72 65  avepoints are.re
86b0: 6c 65 61 73 65 64 2c 20 74 68 65 20 64 61 74 61  leased, the data
86c0: 62 61 73 65 20 69 73 20 75 6e 63 68 61 6e 67 65  base is unchange
86d0: 64 2c 20 61 6e 64 20 74 68 65 20 52 45 4c 45 41  d, and the RELEA
86e0: 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72  SE command retur
86f0: 6e 73 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e  ns.an error.</p>
8700: 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
8710: 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63  an inner transac
8720: 74 69 6f 6e 20 6d 69 67 68 74 20 63 6f 6d 6d 69  tion might commi
8730: 74 20 28 75 73 69 6e 67 20 74 68 65 20 52 45 4c  t (using the REL
8740: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 29 0a 62 75  EASE command).bu
8750: 74 20 74 68 65 6e 20 6c 61 74 65 72 20 68 61 76  t then later hav
8760: 65 20 69 74 73 20 77 6f 72 6b 20 75 6e 64 6f 6e  e its work undon
8770: 65 20 62 79 20 61 20 52 4f 4c 4c 42 41 43 4b 20  e by a ROLLBACK 
8780: 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61 6e  in an outer tran
8790: 73 61 63 74 69 6f 6e 2e 0a 5e 41 20 70 6f 77 65  saction..^A powe
87a0: 72 20 66 61 69 6c 75 72 65 20 6f 72 20 70 72 6f  r failure or pro
87b0: 67 72 61 6d 20 63 72 61 73 68 20 6f 72 20 4f 53  gram crash or OS
87c0: 20 63 72 61 73 68 20 77 69 6c 6c 20 63 61 75 73   crash will caus
87d0: 65 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74  e the outer-most
87e0: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20  .transaction to 
87f0: 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f 69 6e  rollback, undoin
8800: 67 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68  g all changes th
8810: 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  at have occurred
8820: 20 77 69 74 68 69 6e 0a 74 68 61 74 20 6f 75 74   within.that out
8830: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  er transaction, 
8840: 65 76 65 6e 20 63 68 61 6e 67 65 73 20 74 68 61  even changes tha
8850: 74 20 68 61 76 65 20 73 75 70 70 6f 73 65 64 6c  t have supposedl
8860: 79 20 62 65 65 6e 20 22 63 6f 6d 6d 69 74 74 65  y been "committe
8870: 64 22 0a 62 79 20 74 68 65 20 52 45 4c 45 41 53  d".by the RELEAS
8880: 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 43 6f 6e  E command.  ^Con
8890: 74 65 6e 74 20 69 73 20 6e 6f 74 20 61 63 74 75  tent is not actu
88a0: 61 6c 6c 79 20 63 6f 6d 6d 69 74 74 65 64 20 6f  ally committed o
88b0: 6e 20 74 68 65 20 64 69 73 6b 20 0a 75 6e 74 69  n the disk .unti
88c0: 6c 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20  l the outermost 
88d0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d  transaction comm
88e0: 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  its.</p>..<p>The
88f0: 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 20 77  re are several w
8900: 61 79 73 20 6f 66 20 74 68 69 6e 6b 69 6e 67 20  ays of thinking 
8910: 61 62 6f 75 74 20 74 68 65 20 52 45 4c 45 41 53  about the RELEAS
8920: 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a 0a  E command:</p>..
8930: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f 6d  <ul>.<li><p>.Som
8940: 65 20 70 65 6f 70 6c 65 20 76 69 65 77 20 52 45  e people view RE
8950: 4c 45 41 53 45 20 61 73 20 74 68 65 20 65 71 75  LEASE as the equ
8960: 69 76 61 6c 65 6e 74 20 6f 66 20 43 4f 4d 4d 49  ivalent of COMMI
8970: 54 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e  T for a SAVEPOIN
8980: 54 2e 0a 54 68 69 73 20 69 73 20 61 6e 20 61 63  T..This is an ac
8990: 63 65 70 74 61 62 6c 65 20 70 6f 69 6e 74 20 6f  ceptable point o
89a0: 66 20 76 69 65 77 20 61 73 20 6c 6f 6e 67 20 61  f view as long a
89b0: 73 20 6f 6e 65 20 72 65 6d 65 6d 62 65 72 73 20  s one remembers 
89c0: 74 68 61 74 20 74 68 65 0a 63 68 61 6e 67 65 73  that the.changes
89d0: 20 63 6f 6d 6d 69 74 74 65 64 20 62 79 20 61 6e   committed by an
89e0: 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69   inner transacti
89f0: 6f 6e 20 6d 69 67 68 74 20 6c 61 74 65 72 20 62  on might later b
8a00: 65 20 75 6e 64 6f 6e 65 20 62 79 20 61 0a 72 6f  e undone by a.ro
8a10: 6c 6c 62 61 63 6b 20 69 6e 20 61 6e 20 6f 75 74  llback in an out
8a20: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c  er transaction.<
8a30: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
8a40: 3e 0a 41 6e 6f 74 68 65 72 20 76 69 65 77 20 6f  >.Another view o
8a50: 66 20 52 45 4c 45 41 53 45 20 69 73 20 74 68 61  f RELEASE is tha
8a60: 74 20 69 74 20 6d 65 72 67 65 73 20 61 20 6e 61  t it merges a na
8a70: 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  med transaction 
8a80: 69 6e 74 6f 20 69 74 73 0a 70 61 72 65 6e 74 20  into its.parent 
8a90: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 6f 20  transaction, so 
8aa0: 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20 74  that the named t
8ab0: 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 69  ransaction and i
8ac0: 74 73 20 70 61 72 65 6e 74 20 62 65 63 6f 6d 65  ts parent become
8ad0: 0a 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61  .the same transa
8ae0: 63 74 69 6f 6e 2e 20 20 41 66 74 65 72 20 52 45  ction.  After RE
8af0: 4c 45 41 53 45 2c 20 74 68 65 20 6e 61 6d 65 64  LEASE, the named
8b00: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
8b10: 20 69 74 73 20 70 61 72 65 6e 74 0a 77 69 6c 6c   its parent.will
8b20: 20 63 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c 62   commit or rollb
8b30: 61 63 6b 20 74 6f 67 65 74 68 65 72 2c 20 77 68  ack together, wh
8b40: 61 74 65 76 65 72 20 74 68 65 69 72 20 66 61 74  atever their fat
8b50: 65 20 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e 3c 2f  e may be..</p></
8b60: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e 65  li>..<li><p>.One
8b70: 20 63 61 6e 20 61 6c 73 6f 20 74 68 69 6e 6b 20   can also think 
8b80: 6f 66 20 73 61 76 65 70 6f 69 6e 74 73 20 61 73  of savepoints as
8b90: 0a 22 6d 61 72 6b 73 22 20 69 6e 20 74 68 65 20  ."marks" in the 
8ba0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 69 6d 65  transaction time
8bb0: 6c 69 6e 65 2e 20 20 49 6e 20 74 68 69 73 20 76  line.  In this v
8bc0: 69 65 77 2c 20 74 68 65 20 53 41 56 45 50 4f 49  iew, the SAVEPOI
8bd0: 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63 72 65 61 74  NT command.creat
8be0: 65 73 20 61 20 6e 65 77 20 6d 61 72 6b 2c 20 74  es a new mark, t
8bf0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63  he ROLLBACK TO c
8c00: 6f 6d 6d 61 6e 64 20 72 65 77 69 6e 64 73 20 74  ommand rewinds t
8c10: 68 65 20 74 69 6d 65 6c 69 6e 65 20 62 61 63 6b  he timeline back
8c20: 0a 74 6f 20 61 20 70 6f 69 6e 74 20 6a 75 73 74  .to a point just
8c30: 20 61 66 74 65 72 20 74 68 65 20 6e 61 6d 65 64   after the named
8c40: 20 6d 61 72 6b 2c 20 61 6e 64 20 74 68 65 20 52   mark, and the R
8c50: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 0a 65  ELEASE command.e
8c60: 72 61 73 65 73 20 6d 61 72 6b 73 20 66 72 6f 6d  rases marks from
8c70: 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 77 69   the timeline wi
8c80: 74 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20 6d  thout actually m
8c90: 61 6b 69 6e 67 20 61 6e 79 0a 63 68 61 6e 67 65  aking any.change
8ca0: 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  s to the databas
8cb0: 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75  e..</p></li>.</u
8cc0: 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e 73 61  l>....<h3>Transa
8cd0: 63 74 69 6f 6e 20 4e 65 73 74 69 6e 67 20 52 75  ction Nesting Ru
8ce0: 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  les</h3>..<p>^Th
8cf0: 65 20 6c 61 73 74 20 74 72 61 6e 73 61 63 74 69  e last transacti
8d00: 6f 6e 20 73 74 61 72 74 65 64 20 77 69 6c 6c 20  on started will 
8d10: 62 65 20 74 68 65 20 66 69 72 73 74 0a 74 72 61  be the first.tra
8d20: 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 74  nsaction committ
8d30: 65 64 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63  ed or rolled bac
8d40: 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  k.</p>..<p>^The 
8d50: 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20  [BEGIN] command 
8d60: 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 74 68  only works if th
8d70: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e transaction st
8d80: 61 63 6b 20 69 73 20 65 6d 70 74 79 2c 20 6f 72  ack is empty, or
8d90: 0a 69 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 20  .in other words 
8da0: 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
8db0: 70 65 6e 64 69 6e 67 20 74 72 61 6e 73 61 63 74  pending transact
8dc0: 69 6f 6e 73 2e 20 20 5e 49 66 20 74 68 65 20 74  ions.  ^If the t
8dd0: 72 61 6e 73 61 63 74 69 6f 6e 0a 73 74 61 63 6b  ransaction.stack
8de0: 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 77 68   is not empty wh
8df0: 65 6e 20 74 68 65 20 5b 42 45 47 49 4e 5d 20 63  en the [BEGIN] c
8e00: 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b 65  ommand is invoke
8e10: 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d  d, then the comm
8e20: 61 6e 64 0a 66 61 69 6c 73 20 77 69 74 68 20 61  and.fails with a
8e30: 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70  n error.</p>..<p
8e40: 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63  >^The [COMMIT] c
8e50: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74 73 20 61  ommand commits a
8e60: 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 74  ll outstanding t
8e70: 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64 20  ransactions and 
8e80: 6c 65 61 76 65 73 0a 74 68 65 20 74 72 61 6e 73  leaves.the trans
8e90: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70  action stack emp
8ea0: 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ty.</p>..<p>^The
8eb0: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
8ec0: 20 73 74 61 72 74 73 20 77 69 74 68 20 74 68 65   starts with the
8ed0: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 64 64   most recent add
8ee0: 69 74 69 6f 6e 20 74 6f 20 74 68 65 0a 74 72 61  ition to the.tra
8ef0: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 61  nsaction stack a
8f00: 6e 64 20 72 65 6c 65 61 73 65 73 20 73 61 76 65  nd releases save
8f10: 70 6f 69 6e 74 73 20 62 61 63 6b 77 61 72 64 73  points backwards
8f20: 20 0a 69 6e 20 74 69 6d 65 20 75 6e 74 69 6c 20   .in time until 
8f30: 69 74 20 72 65 6c 65 61 73 65 73 20 61 20 73 61  it releases a sa
8f40: 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61 20 6d  vepoint with a m
8f50: 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e  atching savepoin
8f60: 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f 72 20 73  t-name..^Prior s
8f70: 61 76 65 70 6f 69 6e 74 73 2c 20 65 76 65 6e 20  avepoints, even 
8f80: 73 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68 20  savepoints with 
8f90: 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69  matching savepoi
8fa0: 6e 74 2d 6e 61 6d 65 73 2c 20 61 72 65 0a 75 6e  nt-names, are.un
8fb0: 63 68 61 6e 67 65 64 2e 0a 5e 49 66 20 74 68 65  changed..^If the
8fc0: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
8fd0: 20 63 61 75 73 65 73 20 74 68 65 0a 74 72 61 6e   causes the.tran
8fe0: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 74 6f  saction stack to
8ff0: 20 62 65 63 6f 6d 65 20 65 6d 70 74 79 20 28 69   become empty (i
9000: 66 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f  f the RELEASE co
9010: 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74  mmand releases t
9020: 68 65 0a 6f 75 74 65 72 6d 6f 73 74 20 74 72 61  he.outermost tra
9030: 6e 73 61 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68  nsaction from th
9040: 65 20 73 74 61 63 6b 29 20 74 68 65 6e 20 74 68  e stack) then th
9050: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  e transaction co
9060: 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  mmits.</p>..<p>^
9070: 54 68 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63  The [ROLLBACK] c
9080: 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 61  ommand without a
9090: 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73   TO clause rolls
90a0: 20 62 61 63 6b 73 20 61 6c 6c 20 74 72 61 6e 73   backs all trans
90b0: 61 63 74 69 6f 6e 73 0a 61 6e 64 20 6c 65 61 76  actions.and leav
90c0: 65 73 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  es the transacti
90d0: 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c  on stack empty.<
90e0: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c  /p>..<p>^The ROL
90f0: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69  LBACK command wi
9100: 74 68 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72  th a TO clause r
9110: 6f 6c 6c 73 20 62 61 63 6b 20 74 72 61 6e 73 61  olls back transa
9120: 63 74 69 6f 6e 73 20 67 6f 69 6e 67 0a 62 61 63  ctions going.bac
9130: 6b 77 61 72 64 73 20 69 6e 20 74 69 6d 65 20 62  kwards in time b
9140: 61 63 6b 20 74 6f 20 74 68 65 20 6d 6f 73 74 20  ack to the most 
9150: 72 65 63 65 6e 74 20 53 41 56 45 50 4f 49 4e 54  recent SAVEPOINT
9160: 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67   with a matching
9170: 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 53 41 56 45   name..^The SAVE
9180: 50 4f 49 4e 54 20 77 69 74 68 20 74 68 65 20 6d  POINT with the m
9190: 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 72 65 6d  atching name rem
91a0: 61 69 6e 73 20 6f 6e 20 74 68 65 20 74 72 61 6e  ains on the tran
91b0: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 0a 62  saction stack,.b
91c0: 75 74 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20  ut all database 
91d0: 63 68 61 6e 67 65 73 20 74 68 61 74 20 6f 63 63  changes that occ
91e0: 75 72 72 65 64 20 61 66 74 65 72 20 74 68 61 74  urred after that
91f0: 20 53 41 56 45 50 4f 49 4e 54 20 77 61 73 20 63   SAVEPOINT was c
9200: 72 65 61 74 65 64 0a 61 72 65 20 72 6f 6c 6c 65  reated.are rolle
9210: 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65  d back.  ^If the
9220: 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20   savepoint-name 
9230: 69 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  in a ROLLBACK TO
9240: 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f   command does no
9250: 74 0a 6d 61 74 63 68 20 61 6e 79 20 53 41 56 45  t.match any SAVE
9260: 50 4f 49 4e 54 20 6f 6e 20 74 68 65 20 73 74 61  POINT on the sta
9270: 63 6b 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c  ck, then the ROL
9280: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 66 61  LBACK command fa
9290: 69 6c 73 20 77 69 74 68 20 61 6e 0a 65 72 72 6f  ils with an.erro
92a0: 72 20 61 6e 64 20 6c 65 61 76 65 73 20 74 68 65  r and leaves the
92b0: 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64 61   state of the da
92c0: 74 61 62 61 73 65 20 75 6e 63 68 61 6e 67 65 64  tabase unchanged
92d0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
92e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9320: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
9330: 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d  tion comment com
9340: 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20 2a 63  ment {comment *c
9350: 6f 6d 6d 65 6e 74 73 7d 0a 0a 52 65 63 75 72 73  omments}..Recurs
9360: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
9370: 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e 74 61 78 0a   comment-syntax.
9380: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d  </tcl>..<p>^Comm
9390: 65 6e 74 73 20 61 72 65 20 6e 6f 74 20 53 51 4c  ents are not SQL
93a0: 20 63 6f 6d 6d 61 6e 64 73 2c 20 62 75 74 20 63   commands, but c
93b0: 61 6e 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20  an occur within 
93c0: 74 68 65 20 74 65 78 74 20 6f 66 0a 53 51 4c 20  the text of.SQL 
93d0: 71 75 65 72 69 65 73 20 70 61 73 73 65 64 20 74  queries passed t
93e0: 6f 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  o [sqlite3_prepa
93f0: 72 65 5f 76 32 28 29 5d 20 61 6e 64 20 72 65 6c  re_v2()] and rel
9400: 61 74 65 64 20 69 6e 74 65 72 66 61 63 65 73 2e  ated interfaces.
9410: 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 74  .^Comments are t
9420: 72 65 61 74 65 64 20 61 73 20 77 68 69 74 65 73  reated as whites
9430: 70 61 63 65 20 62 79 20 74 68 65 20 70 61 72 73  pace by the pars
9440: 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 63 61  er..^Comments ca
9450: 6e 20 62 65 67 69 6e 20 61 6e 79 77 68 65 72 65  n begin anywhere
9460: 20 77 68 69 74 65 73 70 61 63 65 20 0a 63 61 6e   whitespace .can
9470: 20 62 65 20 66 6f 75 6e 64 2c 20 69 6e 63 6c 75   be found, inclu
9480: 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72  ding inside expr
9490: 65 73 73 69 6f 6e 73 20 74 68 61 74 20 73 70 61  essions that spa
94a0: 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73  n multiple lines
94b0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53 51 4c 20  ..</p>..<p>^SQL 
94c0: 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 20 77  comments begin w
94d0: 69 74 68 20 74 77 6f 20 63 6f 6e 73 65 63 75 74  ith two consecut
94e0: 69 76 65 20 22 2d 22 20 63 68 61 72 61 63 74 65  ive "-" characte
94f0: 72 73 20 28 41 53 43 49 49 20 30 78 32 64 29 0a  rs (ASCII 0x2d).
9500: 61 6e 64 20 65 78 74 65 6e 64 20 75 70 20 74 6f  and extend up to
9510: 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74   and including t
9520: 68 65 20 6e 65 78 74 20 6e 65 77 6c 69 6e 65 20  he next newline 
9530: 63 68 61 72 61 63 74 65 72 20 28 41 53 43 49 49  character (ASCII
9540: 20 30 78 30 61 29 0a 6f 72 20 75 6e 74 69 6c 20   0x0a).or until 
9550: 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
9560: 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65  , whichever come
9570: 73 20 66 69 72 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  s first.</p>..<p
9580: 3e 5e 43 2d 73 74 79 6c 65 20 63 6f 6d 6d 65 6e  >^C-style commen
9590: 74 73 20 62 65 67 69 6e 0a 77 69 74 68 20 22 2f  ts begin.with "/
95a0: 2a 22 20 61 6e 64 20 65 78 74 65 6e 64 20 75 70  *" and extend up
95b0: 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e   to and includin
95c0: 67 20 74 68 65 20 6e 65 78 74 20 22 2a 2f 22 20  g the next "*/" 
95d0: 63 68 61 72 61 63 74 65 72 20 70 61 69 72 0a 6f  character pair.o
95e0: 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20  r until the end 
95f0: 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65  of input, whiche
9600: 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e  ver comes first.
9610: 20 20 5e 43 2d 73 74 79 6c 65 20 63 6f 6d 6d 65    ^C-style comme
9620: 6e 74 73 0a 63 61 6e 20 73 70 61 6e 20 6d 75 6c  nts.can span mul
9630: 74 69 70 6c 65 20 6c 69 6e 65 73 2e 20 3c 2f 70  tiple lines. </p
9640: 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20  >..<p>^Comments 
9650: 63 61 6e 20 61 70 70 65 61 72 20 61 6e 79 77 68  can appear anywh
9660: 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20 63  ere whitespace c
9670: 61 6e 20 6f 63 63 75 72 2c 0a 69 6e 63 6c 75 64  an occur,.includ
9680: 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72 65  ing inside expre
9690: 73 73 69 6f 6e 73 20 61 6e 64 20 69 6e 20 74 68  ssions and in th
96a0: 65 20 6d 69 64 64 6c 65 20 6f 66 20 6f 74 68 65  e middle of othe
96b0: 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  r SQL statements
96c0: 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 64 6f 20 6e  ..^Comments do n
96d0: 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70 3e 0a 0a 0a  ot nest..</p>...
96e0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
96f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9700: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9730: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52  ####.Section {CR
9740: 45 41 54 45 20 49 4e 44 45 58 7d 20 63 72 65 61  EATE INDEX} crea
9750: 74 65 69 6e 64 65 78 20 7b 7b 43 52 45 41 54 45  teindex {{CREATE
9760: 20 49 4e 44 45 58 7d 7d 0a 0a 52 65 63 75 72 73   INDEX}}..Recurs
9770: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
9780: 20 63 72 65 61 74 65 2d 69 6e 64 65 78 2d 73 74   create-index-st
9790: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
97a0: 68 65 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  he CREATE INDEX 
97b0: 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73  command consists
97c0: 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73   of the keywords
97d0: 20 22 43 52 45 41 54 45 20 49 4e 44 45 58 22 20   "CREATE INDEX" 
97e0: 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20  followed.by the 
97f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20  name of the new 
9800: 69 6e 64 65 78 2c 20 74 68 65 20 6b 65 79 77 6f  index, the keywo
9810: 72 64 20 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d  rd "ON", the nam
9820: 65 20 6f 66 20 61 20 70 72 65 76 69 6f 75 73 6c  e of a previousl
9830: 79 0a 63 72 65 61 74 65 64 20 74 61 62 6c 65 20  y.created table 
9840: 74 68 61 74 20 69 73 20 74 6f 20 62 65 20 69 6e  that is to be in
9850: 64 65 78 65 64 2c 20 61 6e 64 20 61 20 70 61 72  dexed, and a par
9860: 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20  enthesized list 
9870: 6f 66 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 0a  of table column.
9880: 6e 61 6d 65 73 20 61 6e 64 2f 6f 72 20 65 78 70  names and/or exp
9890: 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72  ressions that ar
98a0: 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 69  e used for the i
98b0: 6e 64 65 78 20 6b 65 79 2e 0a 49 66 20 74 68 65  ndex key..If the
98c0: 20 6f 70 74 69 6f 6e 61 6c 20 57 48 45 52 45 20   optional WHERE 
98d0: 63 6c 61 75 73 65 20 69 73 20 69 6e 63 6c 75 64  clause is includ
98e0: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 64  ed, then the ind
98f0: 65 78 20 69 73 20 61 20 22 5b 70 61 72 74 69 61  ex is a "[partia
9900: 6c 20 69 6e 64 65 78 5d 22 2e 0a 3c 2f 70 3e 0a  l index]"..</p>.
9910: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
9920: 74 20 7b 64 65 73 63 69 64 78 7d 20 7b 64 65 73  t {descidx} {des
9930: 63 65 6e 64 69 6e 67 20 69 6e 64 69 63 65 73 7d  cending indices}
9940: 20 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64   {descending ind
9950: 65 78 7d 20 5c 0a 20 20 20 20 7b 64 65 73 63 65  ex} \.    {desce
9960: 6e 64 69 6e 67 20 69 6e 64 65 78 65 73 7d 20 7b  nding indexes} {
9970: 44 45 53 43 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  DESC}</tcl>.<p>^
9980: 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  Each column name
9990: 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20 63   or expression c
99a0: 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  an be followed b
99b0: 79 20 6f 6e 65 0a 6f 66 20 74 68 65 20 22 41 53  y one.of the "AS
99c0: 43 22 20 6f 72 20 22 44 45 53 43 22 20 6b 65 79  C" or "DESC" key
99d0: 77 6f 72 64 73 20 74 6f 20 69 6e 64 69 63 61 74  words to indicat
99e0: 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 0a 5e 54  e sort order..^T
99f0: 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6d 61  he sort order ma
9a00: 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20  y or may not be 
9a10: 69 67 6e 6f 72 65 64 20 64 65 70 65 6e 64 69 6e  ignored dependin
9a20: 67 0a 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  g.on the databas
9a30: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2c 20 61  e file format, a
9a40: 6e 64 20 69 6e 20 70 61 72 74 69 63 75 6c 61 72  nd in particular
9a50: 20 74 68 65 20 5b 73 63 68 65 6d 61 20 66 6f 72   the [schema for
9a60: 6d 61 74 20 6e 75 6d 62 65 72 5d 2e 0a 5e 54 68  mat number]..^Th
9a70: 65 20 22 6c 65 67 61 63 79 22 20 73 63 68 65 6d  e "legacy" schem
9a80: 61 20 66 6f 72 6d 61 74 20 28 31 29 20 69 67 6e  a format (1) ign
9a90: 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f 72 74 20  ores index.sort 
9aa0: 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 64 65 73  order.  ^The des
9ab0: 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 73 63  cending index sc
9ac0: 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 34 29 20  hema format (4) 
9ad0: 74 61 6b 65 73 20 69 6e 64 65 78 20 73 6f 72 74  takes index sort
9ae0: 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f   order.into acco
9af0: 75 6e 74 2e 20 20 4f 6e 6c 79 20 76 65 72 73 69  unt.  Only versi
9b00: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 33 2e  ons of SQLite 3.
9b10: 33 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33 2e 33  3.0 ([dateof:3.3
9b20: 2e 30 5d 29 0a 61 6e 64 20 6c 61 74 65 72 20 61  .0]).and later a
9b30: 72 65 20 61 62 6c 65 20 74 6f 20 75 6e 64 65 72  re able to under
9b40: 73 74 61 6e 64 0a 74 68 65 20 64 65 73 63 65 6e  stand.the descen
9b50: 64 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 6d 61  ding index forma
9b60: 74 2e 20 46 6f 72 20 63 6f 6d 70 61 74 69 62 69  t. For compatibi
9b70: 6c 69 74 79 2c 20 76 65 72 73 69 6f 6e 20 6f 66  lity, version of
9b80: 20 53 51 4c 69 74 65 20 62 65 74 77 65 65 6e 20   SQLite between 
9b90: 33 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e 39 20  3.3.0.and 3.7.9 
9ba0: 75 73 65 20 74 68 65 20 6c 65 67 61 63 79 20 73  use the legacy s
9bb0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 62 79 20  chema format by 
9bc0: 64 65 66 61 75 6c 74 2e 20 20 54 68 65 20 6e 65  default.  The ne
9bd0: 77 65 72 20 73 63 68 65 6d 61 20 66 6f 72 6d 61  wer schema forma
9be0: 74 20 69 73 0a 75 73 65 64 20 62 79 20 64 65 66  t is.used by def
9bf0: 61 75 6c 74 20 69 6e 20 76 65 72 73 69 6f 6e 20  ault in version 
9c00: 33 2e 37 2e 31 30 20 28 5b 64 61 74 65 6f 66 3a  3.7.10 ([dateof:
9c10: 33 2e 37 2e 31 30 5d 29 20 61 6e 64 20 6c 61 74  3.7.10]) and lat
9c20: 65 72 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79  er..^The [legacy
9c30: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61  _file_format pra
9c40: 67 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64  gma] can be used
9c50: 20 74 6f 20 63 68 61 6e 67 65 20 73 65 74 20 74   to change set t
9c60: 68 65 20 73 70 65 63 69 66 69 63 0a 62 65 68 61  he specific.beha
9c70: 76 69 6f 72 20 66 6f 72 20 61 6e 79 20 76 65 72  vior for any ver
9c80: 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 2e 3c  sion of SQLite.<
9c90: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
9ca0: 67 6d 65 6e 74 20 63 6f 6c 6c 69 64 78 20 7b 43  gment collidx {C
9cb0: 4f 4c 4c 41 54 45 7d 3c 2f 74 63 6c 3e 0a 3c 70  OLLATE}</tcl>.<p
9cc0: 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  >^The COLLATE cl
9cd0: 61 75 73 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20  ause optionally 
9ce0: 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20 63  following each c
9cf0: 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 6f 72 20 65 78  olumn name.or ex
9d00: 70 72 65 73 73 69 6f 6e 20 64 65 66 69 6e 65 73  pression defines
9d10: 20 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71   a.collating seq
9d20: 75 65 6e 63 65 20 75 73 65 64 20 66 6f 72 20 74  uence used for t
9d30: 65 78 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74  ext entries in t
9d40: 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54 68 65  hat column..^The
9d50: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
9d60: 6e 67 0a 73 65 71 75 65 6e 63 65 20 69 73 20 74  ng.sequence is t
9d70: 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  he collating seq
9d80: 75 65 6e 63 65 20 64 65 66 69 6e 65 64 20 66 6f  uence defined fo
9d90: 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 6e  r that column in
9da0: 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42   the.[CREATE TAB
9db0: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
9dc0: 5e 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c 61 74  ^Or if no collat
9dd0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
9de0: 6f 74 68 65 72 77 69 73 65 20 64 65 66 69 6e 65  otherwise define
9df0: 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69 6e 20  d,.the built-in 
9e00: 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67  BINARY collating
9e10: 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65   sequence is use
9e20: 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  d.</p>..<tcl>hd_
9e30: 66 72 61 67 6d 65 6e 74 20 69 6e 64 65 78 65 78  fragment indexex
9e40: 70 72 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 78 70  pr</tcl>.<p>^Exp
9e50: 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 6e 20 69  ressions in an i
9e60: 6e 64 65 78 20 6d 61 79 20 6e 6f 74 20 72 65 66  ndex may not ref
9e70: 65 72 65 6e 63 65 20 6f 74 68 65 72 20 74 61 62  erence other tab
9e80: 6c 65 73 0a 61 6e 64 20 6d 61 79 20 6e 6f 74 20  les.and may not 
9e90: 75 73 65 20 73 75 62 71 75 65 72 69 65 73 20 6e  use subqueries n
9ea0: 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 77 68 6f  or functions who
9eb0: 73 65 20 72 65 73 75 6c 74 20 6d 69 67 68 74 0a  se result might.
9ec0: 63 68 61 6e 67 65 20 28 65 78 3a 20 5b 72 61 6e  change (ex: [ran
9ed0: 64 6f 6d 28 29 5d 20 6f 72 20 5b 73 71 6c 69 74  dom()] or [sqlit
9ee0: 65 5f 76 65 72 73 69 6f 6e 28 29 5d 29 2e 0a 5e  e_version()])..^
9ef0: 45 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61  Expressions in a
9f00: 6e 20 69 6e 64 65 78 20 6d 61 79 20 6f 6e 6c 79  n index may only
9f10: 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d 6e   refer to column
9f20: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 0a 74  s in the table.t
9f30: 68 61 74 20 69 73 20 62 65 69 6e 67 20 69 6e 64  hat is being ind
9f40: 65 78 65 64 2e 0a 49 6e 64 65 78 65 73 20 6f 6e  exed..Indexes on
9f50: 20 65 78 70 72 65 73 73 69 6f 6e 20 77 69 6c 6c   expression will
9f60: 20 6e 6f 74 20 77 6f 72 6b 20 77 69 74 68 20 76   not work with v
9f70: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
9f80: 65 20 70 72 69 6f 72 0a 74 6f 20 5b 76 65 72 73  e prior.to [vers
9f90: 69 6f 6e 20 33 2e 39 2e 30 5d 20 28 5b 64 61 74  ion 3.9.0] ([dat
9fa0: 65 6f 66 3a 33 2e 39 2e 30 5d 29 2e 0a 53 65 65  eof:3.9.0])..See
9fb0: 20 74 68 65 20 5b 49 6e 64 65 78 65 73 20 4f 6e   the [Indexes On
9fc0: 20 45 78 70 72 65 73 73 69 6f 6e 73 5d 20 64 6f   Expressions] do
9fd0: 63 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69 74  cument for addit
9fe0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
9ff0: 6e 0a 61 62 6f 75 74 20 75 73 69 6e 67 20 67 65  n.about using ge
a000: 6e 65 72 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  neral expression
a010: 73 20 69 6e 20 43 52 45 41 54 45 20 49 4e 44 45  s in CREATE INDE
a020: 58 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c  X statements...<
a030: 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20 61  p>There are no a
a040: 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73 20  rbitrary limits 
a050: 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  on the number of
a060: 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 63 61   indices that ca
a070: 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20 74 6f  n be.attached to
a080: 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 2e   a single table.
a090: 20 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f    ^(The number o
a0a0: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20  f columns in an 
a0b0: 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69 74 65  index is .limite
a0c0: 64 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73  d to the value s
a0d0: 65 74 20 62 79 0a 5b 73 71 6c 69 74 65 33 5f 6c  et by.[sqlite3_l
a0e0: 69 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f 4c 49  imit]([SQLITE_LI
a0f0: 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e 2e 29  MIT_COLUMN],...)
a100: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  .)^</p>..<tcl>hd
a110: 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69 71 75 65  _fragment unique
a120: 69 64 78 20 7b 75 6e 69 71 75 65 20 69 6e 64 65  idx {unique inde
a130: 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 49 66 20  x}</tcl>.<p>^If 
a140: 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77 6f  the UNIQUE keywo
a150: 72 64 20 61 70 70 65 61 72 73 20 62 65 74 77 65  rd appears betwe
a160: 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49 4e  en CREATE and IN
a170: 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63 61  DEX then duplica
a180: 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65 73  te.index entries
a190: 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64   are not allowed
a1a0: 2e 20 20 5e 41 6e 79 20 61 74 74 65 6d 70 74 20  .  ^Any attempt 
a1b0: 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70 6c  to insert a dupl
a1c0: 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69 6c 6c  icate entry.will
a1d0: 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 65 72   result in an er
a1e0: 72 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65 20 70  ror.  ^For the p
a1f0: 75 72 70 6f 73 65 73 20 6f 66 20 75 6e 69 71 75  urposes of uniqu
a200: 65 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c 20 4e  e indices, all N
a210: 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65 20 63  ULL values.are c
a220: 6f 6e 73 69 64 65 72 65 64 20 64 69 66 66 65 72  onsidered differ
a230: 65 6e 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68  ent from all oth
a240: 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  er NULL values a
a250: 6e 64 20 61 72 65 20 74 68 75 73 20 75 6e 69 71  nd are thus uniq
a260: 75 65 2e 0a 54 68 69 73 20 69 73 20 6f 6e 65 20  ue..This is one 
a270: 6f 66 20 74 68 65 20 74 77 6f 20 70 6f 73 73 69  of the two possi
a280: 62 6c 65 20 69 6e 74 65 72 70 72 65 74 61 74 69  ble interpretati
a290: 6f 6e 73 20 6f 66 20 74 68 65 20 53 51 4c 2d 39  ons of the SQL-9
a2a0: 32 20 73 74 61 6e 64 61 72 64 0a 28 74 68 65 20  2 standard.(the 
a2b0: 6c 61 6e 67 75 61 67 65 20 69 6e 20 74 68 65 20  language in the 
a2c0: 73 74 61 6e 64 61 72 64 20 69 73 20 61 6d 62 69  standard is ambi
a2d0: 67 75 6f 75 73 29 20 61 6e 64 20 69 73 20 74 68  guous) and is th
a2e0: 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  e interpretation
a2f0: 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 50 6f 73  .followed by Pos
a300: 74 67 72 65 53 51 4c 2c 20 4d 79 53 51 4c 2c 20  tgreSQL, MySQL, 
a310: 46 69 72 65 62 69 72 64 2c 20 61 6e 64 20 4f 72  Firebird, and Or
a320: 61 63 6c 65 2e 20 20 49 6e 66 6f 72 6d 69 78 20  acle.  Informix 
a330: 61 6e 64 0a 4d 69 63 72 6f 73 6f 66 74 20 53 51  and.Microsoft SQ
a340: 4c 20 53 65 72 76 65 72 20 66 6f 6c 6c 6f 77 20  L Server follow 
a350: 74 68 65 20 6f 74 68 65 72 20 69 6e 74 65 72 70  the other interp
a360: 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
a370: 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 0a 0a 3c  standard.</p>..<
a380: 70 3e 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e  p>^If the option
a390: 61 6c 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53  al IF NOT EXISTS
a3a0: 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65   clause is prese
a3b0: 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65 72 20 69  nt and another i
a3c0: 6e 64 65 78 0a 77 69 74 68 20 74 68 65 20 73 61  ndex.with the sa
a3d0: 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20  me name already 
a3e0: 65 78 69 73 74 73 2c 20 74 68 65 6e 20 74 68 69  exists, then thi
a3f0: 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63 6f 6d 65  s command become
a400: 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a  s a no-op.</p>..
a410: 3c 70 3e 5e 49 6e 64 65 78 65 73 20 61 72 65 20  <p>^Indexes are 
a420: 72 65 6d 6f 76 65 64 20 77 69 74 68 20 74 68 65  removed with the
a430: 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d 20 63 6f   [DROP INDEX] co
a440: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63  mmand.</p>...<tc
a450: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
a460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a4a0: 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54  #.Section {CREAT
a4b0: 45 20 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65  E TABLE} {create
a4c0: 74 61 62 6c 65 7d 20 7b 7b 43 52 45 41 54 45 20  table} {{CREATE 
a4d0: 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69  TABLE}}..Recursi
a4e0: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
a4f0: 63 72 65 61 74 65 2d 74 61 62 6c 65 2d 73 74 6d  create-table-stm
a500: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  t.</tcl>..<p>The
a510: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 22 20   "CREATE TABLE" 
a520: 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20  command is used 
a530: 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  to create a new 
a540: 74 61 62 6c 65 20 69 6e 20 61 6e 20 53 51 4c 69  table in an SQLi
a550: 74 65 20 0a 64 61 74 61 62 61 73 65 2e 20 41 20  te .database. A 
a560: 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6d  CREATE TABLE com
a570: 6d 61 6e 64 20 73 70 65 63 69 66 69 65 73 20 74  mand specifies t
a580: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 74 74  he following att
a590: 72 69 62 75 74 65 73 20 6f 66 20 74 68 65 0a 6e  ributes of the.n
a5a0: 65 77 20 74 61 62 6c 65 3a 0a 0a 3c 75 6c 3e 0a  ew table:..<ul>.
a5b0: 20 20 3c 6c 69 3e 3c 70 3e 54 68 65 20 6e 61 6d    <li><p>The nam
a5c0: 65 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  e of the new tab
a5d0: 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54  le...  <li><p> T
a5e0: 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 77  he database in w
a5f0: 68 69 63 68 20 74 68 65 20 6e 65 77 20 74 61 62  hich the new tab
a600: 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 54  le is created. T
a610: 61 62 6c 65 73 20 6d 61 79 20 62 65 20 0a 20 20  ables may be .  
a620: 20 20 20 20 63 72 65 61 74 65 64 20 69 6e 20 74      created in t
a630: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
a640: 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62  , the temp datab
a650: 61 73 65 2c 20 6f 72 20 69 6e 20 61 6e 79 20 61  ase, or in any a
a660: 74 74 61 63 68 65 64 0a 20 20 20 20 20 20 64 61  ttached.      da
a670: 74 61 62 61 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c  tabase...  <li><
a680: 70 3e 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 65  p> The name of e
a690: 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
a6a0: 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e  e table...  <li>
a6b0: 3c 70 3e 20 54 68 65 20 64 65 63 6c 61 72 65 64  <p> The declared
a6c0: 20 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f   type of each co
a6d0: 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c  lumn in the tabl
a6e0: 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20  e...  <li><p> A 
a6f0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 72  default value or
a700: 20 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20   expression for 
a710: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
a720: 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69  he table...  <li
a730: 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c 74 20 63  ><p> A default c
a740: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
a750: 65 20 74 6f 20 75 73 65 20 77 69 74 68 20 65 61  e to use with ea
a760: 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a 20 20 3c 6c  ch column...  <l
a770: 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e 61 6c 6c 79  i><p> Optionally
a780: 2c 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  , a PRIMARY KEY 
a790: 66 6f 72 20 74 68 65 20 74 61 62 6c 65 2e 20 42  for the table. B
a7a0: 6f 74 68 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  oth single colum
a7b0: 6e 20 61 6e 64 0a 20 20 20 20 20 20 20 63 6f 6d  n and.       com
a7c0: 70 6f 73 69 74 65 20 28 6d 75 6c 74 69 70 6c 65  posite (multiple
a7d0: 20 63 6f 6c 75 6d 6e 29 20 70 72 69 6d 61 72 79   column) primary
a7e0: 20 6b 65 79 73 20 61 72 65 20 73 75 70 70 6f 72   keys are suppor
a7f0: 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20  ted...  <li><p> 
a800: 41 20 73 65 74 20 6f 66 20 53 51 4c 20 63 6f 6e  A set of SQL con
a810: 73 74 72 61 69 6e 74 73 20 66 6f 72 20 65 61 63  straints for eac
a820: 68 20 74 61 62 6c 65 2e 20 53 51 4c 69 74 65 20  h table. SQLite 
a830: 73 75 70 70 6f 72 74 73 20 55 4e 49 51 55 45 2c  supports UNIQUE,
a840: 20 4e 4f 54 0a 20 20 20 20 20 20 20 4e 55 4c 4c   NOT.       NULL
a850: 2c 20 43 48 45 43 4b 20 61 6e 64 20 46 4f 52 45  , CHECK and FORE
a860: 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  IGN KEY constrai
a870: 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20  nts...  <li><p> 
a880: 57 68 65 74 68 65 72 20 74 68 65 20 74 61 62 6c  Whether the tabl
a890: 65 20 69 73 20 61 20 5b 57 49 54 48 4f 55 54 20  e is a [WITHOUT 
a8a0: 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a 3c 2f  ROWID] table..</
a8b0: 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 43 52  ul>..<p>Every CR
a8c0: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
a8d0: 6d 65 6e 74 20 6d 75 73 74 20 73 70 65 63 69 66  ment must specif
a8e0: 79 20 61 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  y a name for the
a8f0: 20 6e 65 77 20 74 61 62 6c 65 2e 0a 20 20 5e 28   new table..  ^(
a900: 54 61 62 6c 65 20 6e 61 6d 65 73 20 74 68 61 74  Table names that
a910: 20 62 65 67 69 6e 20 77 69 74 68 20 22 73 71 6c   begin with "sql
a920: 69 74 65 5f 22 20 61 72 65 20 72 65 73 65 72 76  ite_" are reserv
a930: 65 64 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20  ed for internal 
a940: 75 73 65 2e 20 49 74 0a 20 20 69 73 20 61 6e 20  use. It.  is an 
a950: 65 72 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74  error to attempt
a960: 20 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62   to create a tab
a970: 6c 65 20 77 69 74 68 20 61 20 6e 61 6d 65 20 74  le with a name t
a980: 68 61 74 20 73 74 61 72 74 73 20 77 69 74 68 0a  hat starts with.
a990: 20 20 22 73 71 6c 69 74 65 5f 22 2e 29 5e 0a 0a    "sqlite_".)^..
a9a0: 3c 70 3e 20 5e 49 66 20 61 20 3c 79 79 74 65 72  <p> ^If a <yyter
a9b0: 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79  m>schema-name</y
a9c0: 79 74 65 72 6d 3e 20 69 73 20 73 70 65 63 69 66  yterm> is specif
a9d0: 69 65 64 2c 20 69 74 20 6d 75 73 74 20 62 65 20  ied, it must be 
a9e0: 65 69 74 68 65 72 20 22 6d 61 69 6e 22 2c 20 0a  either "main", .
a9f0: 20 20 22 74 65 6d 70 22 2c 20 6f 72 20 74 68 65    "temp", or the
aa00: 20 6e 61 6d 65 20 6f 66 20 61 6e 20 5b 41 54 54   name of an [ATT
aa10: 41 43 48 20 44 41 54 41 42 41 53 45 7c 61 74 74  ACH DATABASE|att
aa20: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 5d 2e  ached database].
aa30: 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 0a 20   ^In this case. 
aa40: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
aa50: 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  s created in the
aa60: 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65 2e   named database.
aa70: 20 5e 49 66 20 74 68 65 20 22 54 45 4d 50 22 20   ^If the "TEMP" 
aa80: 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22 0a 20  or "TEMPORARY". 
aa90: 20 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20   keyword occurs 
aaa0: 62 65 74 77 65 65 6e 20 74 68 65 20 22 43 52 45  between the "CRE
aab0: 41 54 45 22 20 61 6e 64 20 22 54 41 42 4c 45 22  ATE" and "TABLE"
aac0: 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20 74 61   then the new ta
aad0: 62 6c 65 20 69 73 0a 20 20 63 72 65 61 74 65 64  ble is.  created
aae0: 20 69 6e 20 74 68 65 20 74 65 6d 70 20 64 61 74   in the temp dat
aaf0: 61 62 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e  abase. ^It is an
ab00: 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66   error to specif
ab10: 79 20 62 6f 74 68 20 61 20 0a 20 20 3c 79 79 74  y both a .  <yyt
ab20: 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  erm>schema-name<
ab30: 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20 74 68 65  /yyterm> and the
ab40: 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41   TEMP or TEMPORA
ab50: 52 59 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c 65  RY keyword, unle
ab60: 73 73 20 74 68 65 0a 20 20 3c 79 79 74 65 72 6d  ss the.  <yyterm
ab70: 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79  >schema-name</yy
ab80: 74 65 72 6d 3e 20 69 73 20 22 74 65 6d 70 22 2e  term> is "temp".
ab90: 20 0a 20 20 5e 49 66 20 6e 6f 20 73 63 68 65 6d   .  ^If no schem
aba0: 61 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66  a name is specif
abb0: 69 65 64 20 61 6e 64 20 74 68 65 0a 20 20 54 45  ied and the.  TE
abc0: 4d 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f  MP keyword is no
abd0: 74 20 70 72 65 73 65 6e 74 20 74 68 65 6e 20 74  t present then t
abe0: 68 65 20 74 61 62 6c 65 20 69 73 20 63 72 65 61  he table is crea
abf0: 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 0a  ted in the main.
ac00: 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e    database...<p>
ac10: 0a 20 20 5e 49 74 20 69 73 20 75 73 75 61 6c 6c  .  ^It is usuall
ac20: 79 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74  y an error to at
ac30: 74 65 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20  tempt to create 
ac40: 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61  a new table in a
ac50: 20 64 61 74 61 62 61 73 65 20 74 68 61 74 0a 20   database that. 
ac60: 20 61 6c 72 65 61 64 79 20 63 6f 6e 74 61 69 6e   already contain
ac70: 73 20 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78  s a table, index
ac80: 20 6f 72 20 76 69 65 77 20 6f 66 20 74 68 65 20   or view of the 
ac90: 73 61 6d 65 20 6e 61 6d 65 2e 20 5e 48 6f 77 65  same name. ^Howe
aca0: 76 65 72 2c 20 69 66 20 74 68 65 0a 20 20 22 49  ver, if the.  "I
acb0: 46 20 4e 4f 54 20 45 58 49 53 54 53 22 20 63 6c  F NOT EXISTS" cl
acc0: 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65  ause is specifie
acd0: 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
ace0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
acf0: 61 74 65 6d 65 6e 74 20 61 6e 64 0a 20 20 61 20  atement and.  a 
ad00: 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 6f 66  table or view of
ad10: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
ad20: 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 74  lready exists, t
ad30: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
ad40: 63 6f 6d 6d 61 6e 64 0a 20 20 73 69 6d 70 6c 79  command.  simply
ad50: 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20 28   has no effect (
ad60: 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73  and no error mes
ad70: 73 61 67 65 20 69 73 20 72 65 74 75 72 6e 65 64  sage is returned
ad80: 29 2e 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20  ). ^An error is 
ad90: 73 74 69 6c 6c 0a 20 20 72 65 74 75 72 6e 65 64  still.  returned
ada0: 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 63 61   if the table ca
adb0: 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20  nnot be created 
adc0: 62 65 63 61 75 73 65 20 6f 66 20 61 6e 20 65 78  because of an ex
add0: 69 73 74 69 6e 67 20 69 6e 64 65 78 2c 20 65 76  isting index, ev
ade0: 65 6e 20 0a 20 20 69 66 20 74 68 65 20 22 49 46  en .  if the "IF
adf0: 20 4e 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61   NOT EXISTS" cla
ae00: 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
ae10: 2e 0a 0a 3c 70 3e 5e 49 74 20 69 73 20 6e 6f 74  ...<p>^It is not
ae20: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 63 72 65   an error to cre
ae30: 61 74 65 20 61 20 74 61 62 6c 65 20 74 68 61 74  ate a table that
ae40: 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61   has the same na
ae50: 6d 65 20 61 73 20 61 6e 20 0a 20 20 65 78 69 73  me as an .  exis
ae60: 74 69 6e 67 20 5b 43 52 45 41 54 45 20 54 52 49  ting [CREATE TRI
ae70: 47 47 45 52 7c 74 72 69 67 67 65 72 5d 2e 0a 0a  GGER|trigger]...
ae80: 3c 70 3e 5e 54 61 62 6c 65 73 20 61 72 65 20 72  <p>^Tables are r
ae90: 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65  emoved using the
aea0: 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 73 74   [DROP TABLE] st
aeb0: 61 74 65 6d 65 6e 74 2e 20 20 3c 2f 70 3e 0a 0a  atement.  </p>..
aec0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
aed0: 20 63 72 65 61 74 65 74 61 62 61 73 20 7b 43 52   createtabas {CR
aee0: 45 41 54 45 20 54 41 42 4c 45 20 41 53 7d 3c 2f  EATE TABLE AS}</
aef0: 74 63 6c 3e 0a 3c 68 33 3e 43 52 45 41 54 45 20  tcl>.<h3>CREATE 
af00: 54 41 42 4c 45 20 2e 2e 2e 20 41 53 20 53 45 4c  TABLE ... AS SEL
af10: 45 43 54 20 53 74 61 74 65 6d 65 6e 74 73 3c 2f  ECT Statements</
af20: 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 22 43 52 45  h3>..<p>^(A "CRE
af30: 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53  ATE TABLE ... AS
af40: 20 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65   SELECT" stateme
af50: 6e 74 20 63 72 65 61 74 65 73 20 61 6e 64 20 70  nt creates and p
af60: 6f 70 75 6c 61 74 65 73 20 61 20 64 61 74 61 62  opulates a datab
af70: 61 73 65 0a 74 61 62 6c 65 20 62 61 73 65 64 20  ase.table based 
af80: 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  on the results o
af90: 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
afa0: 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65 20 74 61  ment.)^ ^(The ta
afb0: 62 6c 65 20 68 61 73 20 74 68 65 20 73 61 6d 65  ble has the same
afc0: 0a 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d  .number of colum
afd0: 6e 73 20 61 73 20 74 68 65 20 72 6f 77 73 20 72  ns as the rows r
afe0: 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
aff0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
b000: 20 54 68 65 20 6e 61 6d 65 20 6f 66 0a 65 61 63   The name of.eac
b010: 68 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  h column is the 
b020: 73 61 6d 65 20 61 73 20 74 68 65 20 6e 61 6d 65  same as the name
b030: 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
b040: 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 6e 20  nding column in 
b050: 74 68 65 20 72 65 73 75 6c 74 0a 73 65 74 20 6f  the result.set o
b060: 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  f the SELECT sta
b070: 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65 20  tement.)^ ^(The 
b080: 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66  declared type of
b090: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20   each column is 
b0a0: 64 65 74 65 72 6d 69 6e 65 64 0a 62 79 20 74 68  determined.by th
b0b0: 65 20 5b 65 78 70 72 65 73 73 69 6f 6e 20 61 66  e [expression af
b0c0: 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63  finity] of the c
b0d0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70  orresponding exp
b0e0: 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72  ression in the r
b0f0: 65 73 75 6c 74 20 73 65 74 0a 6f 66 20 74 68 65  esult set.of the
b100: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
b110: 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c  t, as follows:.<
b120: 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 3c 74 61  /p>..<center><ta
b130: 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 20 20  ble border=1>.  
b140: 3c 74 72 3e 3c 74 68 3e 45 78 70 72 65 73 73 69  <tr><th>Expressi
b150: 6f 6e 20 41 66 66 69 6e 69 74 79 20 20 20 3c 74  on Affinity   <t
b160: 68 3e 43 6f 6c 75 6d 6e 20 44 65 63 6c 61 72 65  h>Column Declare
b170: 64 20 54 79 70 65 0a 20 20 3c 74 72 3e 3c 74 64  d Type.  <tr><td
b180: 3e 54 45 58 54 20 20 20 20 20 20 20 20 20 20 20  >TEXT           
b190: 20 20 20 20 20 20 20 3c 74 64 3e 22 54 45 58 54         <td>"TEXT
b1a0: 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 55 4d 45  ".  <tr><td>NUME
b1b0: 52 49 43 20 20 20 20 20 20 20 20 20 20 20 20 20  RIC             
b1c0: 20 20 3c 74 64 3e 22 4e 55 4d 22 0a 20 20 3c 74    <td>"NUM".  <t
b1d0: 72 3e 3c 74 64 3e 49 4e 54 45 47 45 52 20 20 20  r><td>INTEGER   
b1e0: 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e              <td>
b1f0: 22 49 4e 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e  "INT".  <tr><td>
b200: 52 45 41 4c 20 20 20 20 20 20 20 20 20 20 20 20  REAL            
b210: 20 20 20 20 20 20 3c 74 64 3e 22 52 45 41 4c 22        <td>"REAL"
b220: 0a 20 20 3c 74 72 3e 3c 74 64 3e 42 4c 4f 42 20  .  <tr><td>BLOB 
b230: 28 61 2e 6b 2e 61 20 22 4e 4f 4e 45 22 29 20 20  (a.k.a "NONE")  
b240: 20 3c 74 64 3e 22 22 20 28 65 6d 70 74 79 20 73   <td>"" (empty s
b250: 74 72 69 6e 67 29 0a 3c 2f 74 61 62 6c 65 3e 3c  tring).</table><
b260: 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e  /center>)^..<p>^
b270: 28 41 20 74 61 62 6c 65 20 63 72 65 61 74 65 64  (A table created
b280: 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 41   using CREATE TA
b290: 42 4c 45 20 41 53 20 68 61 73 20 6e 6f 20 50 52  BLE AS has no PR
b2a0: 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f  IMARY KEY and no
b2b0: 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 66 20  .constraints of 
b2c0: 61 6e 79 20 6b 69 6e 64 2e 20 54 68 65 20 64 65  any kind. The de
b2d0: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 65  fault value of e
b2e0: 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55  ach column is NU
b2f0: 4c 4c 2e 20 54 68 65 20 64 65 66 61 75 6c 74 0a  LL. The default.
b300: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
b310: 63 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ce for each colu
b320: 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  mn of the new ta
b330: 62 6c 65 20 69 73 20 42 49 4e 41 52 59 2e 29 5e  ble is BINARY.)^
b340: 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 63 72 65  ..<p>^Tables cre
b350: 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54  ated using CREAT
b360: 45 20 54 41 42 4c 45 20 41 53 20 61 72 65 20 69  E TABLE AS are i
b370: 6e 69 74 69 61 6c 6c 79 20 70 6f 70 75 6c 61 74  nitially populat
b380: 65 64 20 77 69 74 68 20 74 68 65 0a 72 6f 77 73  ed with the.rows
b390: 20 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e 65   of data returne
b3a0: 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20  d by the SELECT 
b3b0: 73 74 61 74 65 6d 65 6e 74 2e 20 5e 52 6f 77 73  statement. ^Rows
b3c0: 20 61 72 65 20 61 73 73 69 67 6e 65 64 20 63 6f   are assigned co
b3d0: 6e 74 69 67 75 6f 75 73 6c 79 0a 61 73 63 65 6e  ntiguously.ascen
b3e0: 64 69 6e 67 20 5b 72 6f 77 69 64 5d 20 76 61 6c  ding [rowid] val
b3f0: 75 65 73 2c 20 73 74 61 72 74 69 6e 67 20 77 69  ues, starting wi
b400: 74 68 20 31 2c 20 69 6e 20 74 68 65 20 5b 6f 72  th 1, in the [or
b410: 64 65 72 20 62 79 7c 6f 72 64 65 72 5d 20 74 68  der by|order] th
b420: 61 74 20 74 68 65 79 0a 61 72 65 20 72 65 74 75  at they.are retu
b430: 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45  rned by the SELE
b440: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  CT statement...<
b450: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
b460: 7b 74 61 62 6c 65 63 6f 6c 64 65 66 7d 20 7b 63  {tablecoldef} {c
b470: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
b480: 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  } {column defini
b490: 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  tions}</tcl>.<h3
b4a0: 3e 43 6f 6c 75 6d 6e 20 44 65 66 69 6e 69 74 69  >Column Definiti
b4b0: 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 55 6e 6c  ons</h3>..<p>Unl
b4c0: 65 73 73 20 69 74 20 69 73 20 61 20 43 52 45 41  ess it is a CREA
b4d0: 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53 20  TE TABLE ... AS 
b4e0: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
b4f0: 2c 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  , a CREATE TABLE
b500: 20 69 6e 63 6c 75 64 65 73 0a 6f 6e 65 20 6f 72   includes.one or
b510: 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65   more [column-de
b520: 66 7c 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74  f|column definit
b530: 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f 6e 61 6c 6c  ions], optionall
b540: 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  y followed by a 
b550: 6c 69 73 74 20 6f 66 0a 5b 74 61 62 6c 65 2d 63  list of.[table-c
b560: 6f 6e 73 74 72 61 69 6e 74 7c 74 61 62 6c 65 20  onstraint|table 
b570: 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20 20 45  constraints].  E
b580: 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  ach column defin
b590: 69 74 69 6f 6e 20 63 6f 6e 73 69 73 74 73 20 6f  ition consists o
b5a0: 66 20 74 68 65 0a 6e 61 6d 65 20 6f 66 20 74 68  f the.name of th
b5b0: 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70 74 69 6f 6e  e column, option
b5c0: 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ally followed by
b5d0: 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79   the declared ty
b5e0: 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  pe of the column
b5f0: 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f 72 20 6d 6f  ,.then one or mo
b600: 72 65 20 6f 70 74 69 6f 6e 61 6c 20 5b 63 6f 6c  re optional [col
b610: 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 63  umn-constraint|c
b620: 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74  olumn constraint
b630: 73 5d 2e 20 49 6e 63 6c 75 64 65 64 20 69 6e 0a  s]. Included in.
b640: 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  the definition o
b650: 66 20 22 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72  f "column constr
b660: 61 69 6e 74 73 22 20 66 6f 72 20 74 68 65 20 70  aints" for the p
b670: 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65 20 70  urposes of the p
b680: 72 65 76 69 6f 75 73 0a 73 74 61 74 65 6d 65 6e  revious.statemen
b690: 74 20 61 72 65 20 74 68 65 20 43 4f 4c 4c 41 54  t are the COLLAT
b6a0: 45 20 61 6e 64 20 44 45 46 41 55 4c 54 20 63 6c  E and DEFAULT cl
b6b0: 61 75 73 65 73 2c 20 65 76 65 6e 20 74 68 6f 75  auses, even thou
b6c0: 67 68 20 74 68 65 73 65 20 61 72 65 20 6e 6f 74  gh these are not
b6d0: 20 72 65 61 6c 6c 79 0a 63 6f 6e 73 74 72 61 69   really.constrai
b6e0: 6e 74 73 20 69 6e 20 74 68 65 20 73 65 6e 73 65  nts in the sense
b6f0: 20 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f   that they do no
b700: 74 20 72 65 73 74 72 69 63 74 20 74 68 65 20 64  t restrict the d
b710: 61 74 61 20 74 68 61 74 20 74 68 65 20 74 61 62  ata that the tab
b720: 6c 65 20 6d 61 79 0a 63 6f 6e 74 61 69 6e 2e 20  le may.contain. 
b730: 54 68 65 20 6f 74 68 65 72 20 63 6f 6e 73 74 72  The other constr
b740: 61 69 6e 74 73 20 2d 20 4e 4f 54 20 4e 55 4c 4c  aints - NOT NULL
b750: 2c 20 43 48 45 43 4b 2c 20 55 4e 49 51 55 45 2c  , CHECK, UNIQUE,
b760: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64   PRIMARY KEY and
b770: 0a 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e  .FOREIGN KEY con
b780: 73 74 72 61 69 6e 74 73 20 2d 20 69 6d 70 6f 73  straints - impos
b790: 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 6f  e restrictions o
b7a0: 6e 20 74 68 65 20 74 61 62 6c 65 73 20 64 61 74  n the tables dat
b7b0: 61 2c 20 61 6e 64 20 61 72 65 20 61 72 65 0a 64  a, and are are.d
b7c0: 65 73 63 72 69 62 65 64 20 75 6e 64 65 72 20 5b  escribed under [
b7d0: 63 6f 6e 73 74 72 61 69 6e 74 73 7c 53 51 4c 20  constraints|SQL 
b7e0: 44 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74 73  Data Constraints
b7f0: 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70 3e 5e 55 6e  ] below...<p>^Un
b800: 6c 69 6b 65 20 6d 6f 73 74 20 53 51 4c 20 64 61  like most SQL da
b810: 74 61 62 61 73 65 73 2c 20 53 51 4c 69 74 65 20  tabases, SQLite 
b820: 64 6f 65 73 20 6e 6f 74 20 72 65 73 74 72 69 63  does not restric
b830: 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 64 61  t the type of da
b840: 74 61 20 74 68 61 74 0a 6d 61 79 20 62 65 20 69  ta that.may be i
b850: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 61 20 63  nserted into a c
b860: 6f 6c 75 6d 6e 20 62 61 73 65 64 20 6f 6e 20 74  olumn based on t
b870: 68 65 20 63 6f 6c 75 6d 6e 73 20 64 65 63 6c 61  he columns decla
b880: 72 65 64 20 74 79 70 65 2e 20 49 6e 73 74 65 61  red type. Instea
b890: 64 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20 5b  d,.SQLite uses [
b8a0: 64 79 6e 61 6d 69 63 20 74 79 70 69 6e 67 5d 2e  dynamic typing].
b8b0: 20 5e 54 68 65 20 64 65 63 6c 61 72 65 64 20 74   ^The declared t
b8c0: 79 70 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ype of a column 
b8d0: 69 73 20 75 73 65 64 20 74 6f 0a 64 65 74 65 72  is used to.deter
b8e0: 6d 69 6e 65 20 74 68 65 20 5b 61 66 66 69 6e 69  mine the [affini
b8f0: 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ty] of the colum
b900: 6e 20 6f 6e 6c 79 2e 0a 0a 3c 74 63 6c 3e 68 64  n only...<tcl>hd
b910: 5f 66 72 61 67 6d 65 6e 74 20 64 66 6c 74 76 61  _fragment dfltva
b920: 6c 20 7b 64 65 66 61 75 6c 74 20 63 6f 6c 75 6d  l {default colum
b930: 6e 20 76 61 6c 75 65 7d 20 7b 64 65 66 61 75 6c  n value} {defaul
b940: 74 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c  t value}</tcl>.<
b950: 70 3e 54 68 65 20 44 45 46 41 55 4c 54 20 63 6c  p>The DEFAULT cl
b960: 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 61  ause specifies a
b970: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 74   default value t
b980: 6f 20 75 73 65 20 66 6f 72 20 74 68 65 20 63 6f  o use for the co
b990: 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76 61 6c 75 65  lumn if no.value
b9a0: 20 69 73 20 65 78 70 6c 69 63 69 74 6c 79 20 70   is explicitly p
b9b0: 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 75  rovided by the u
b9c0: 73 65 72 20 77 68 65 6e 20 64 6f 69 6e 67 20 61  ser when doing a
b9d0: 6e 20 5b 49 4e 53 45 52 54 5d 2e 20 5e 49 66 20  n [INSERT]. ^If 
b9e0: 74 68 65 72 65 0a 69 73 20 6e 6f 20 65 78 70 6c  there.is no expl
b9f0: 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61  icit DEFAULT cla
ba00: 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20  use attached to 
ba10: 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74  a column definit
ba20: 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 0a 64  ion, then the .d
ba30: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
ba40: 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55  the column is NU
ba50: 4c 4c 2e 20 5e 28 41 6e 20 65 78 70 6c 69 63 69  LL. ^(An explici
ba60: 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65  t DEFAULT clause
ba70: 20 6d 61 79 20 73 70 65 63 69 66 79 0a 74 68 61   may specify.tha
ba80: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  t the default va
ba90: 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 61 20 73  lue is NULL, a s
baa0: 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 2c 20  tring constant, 
bab0: 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2c  a blob constant,
bac0: 20 61 0a 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72   a.signed-number
bad0: 2c 20 6f 72 20 61 6e 79 20 63 6f 6e 73 74 61 6e  , or any constan
bae0: 74 20 65 78 70 72 65 73 73 69 6f 6e 20 65 6e 63  t expression enc
baf0: 6c 6f 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68  losed in parenth
bb00: 65 73 65 73 2e 20 41 0a 64 65 66 61 75 6c 74 20  eses. A.default 
bb10: 76 61 6c 75 65 20 6d 61 79 20 61 6c 73 6f 20 62  value may also b
bb20: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65  e one of the spe
bb30: 63 69 61 6c 20 63 61 73 65 2d 69 6e 64 65 70 65  cial case-indepe
bb40: 6e 64 65 6e 74 20 6b 65 79 77 6f 72 64 73 0a 43  ndent keywords.C
bb50: 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52  URRENT_TIME, CUR
bb60: 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43 55 52  RENT_DATE or CUR
bb70: 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2e 29  RENT_TIMESTAMP.)
bb80: 5e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f  ^ ^For the purpo
bb90: 73 65 73 20 6f 66 20 74 68 65 0a 44 45 46 41 55  ses of the.DEFAU
bba0: 4c 54 20 63 6c 61 75 73 65 2c 20 61 6e 20 65 78  LT clause, an ex
bbb0: 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73  pression is cons
bbc0: 69 64 65 72 65 64 20 63 6f 6e 73 74 61 6e 74 20  idered constant 
bbd0: 69 66 20 69 74 0a 63 6f 6e 74 61 69 6e 73 20 6e  if it.contains n
bbe0: 6f 20 73 75 62 2d 71 75 65 72 69 65 73 2c 20 63  o sub-queries, c
bbf0: 6f 6c 75 6d 6e 20 6f 72 20 74 61 62 6c 65 20 72  olumn or table r
bc00: 65 66 65 72 65 6e 63 65 73 2c 20 5b 62 6f 75 6e  eferences, [boun
bc10: 64 20 70 61 72 61 6d 65 74 65 72 73 5d 2c 0a 6f  d parameters],.o
bc20: 72 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  r string literal
bc30: 73 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 64 6f  s enclosed in do
bc40: 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 6e 73 74  uble-quotes inst
bc50: 65 61 64 20 6f 66 20 73 69 6e 67 6c 65 2d 71 75  ead of single-qu
bc60: 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28 45 61 63 68  otes...<p>^(Each
bc70: 20 74 69 6d 65 20 61 20 72 6f 77 20 69 73 20 69   time a row is i
bc80: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
bc90: 20 74 61 62 6c 65 20 62 79 20 61 6e 20 49 4e 53   table by an INS
bca0: 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68  ERT statement th
bcb0: 61 74 20 0a 64 6f 65 73 20 6e 6f 74 20 70 72 6f  at .does not pro
bcc0: 76 69 64 65 20 65 78 70 6c 69 63 69 74 20 76 61  vide explicit va
bcd0: 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 74 61 62  lues for all tab
bce0: 6c 65 20 63 6f 6c 75 6d 6e 73 20 74 68 65 20 76  le columns the v
bcf0: 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e 0a  alues stored in.
bd00: 74 68 65 20 6e 65 77 20 72 6f 77 20 61 72 65 20  the new row are 
bd10: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
bd20: 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75  eir default valu
bd30: 65 73 29 5e 2c 20 61 73 20 66 6f 6c 6c 6f 77 73  es)^, as follows
bd40: 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  :..<ul>.  <li><p
bd50: 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c 74  >^If the default
bd60: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
bd70: 6c 75 6d 6e 20 69 73 20 61 20 63 6f 6e 73 74 61  lumn is a consta
bd80: 6e 74 20 4e 55 4c 4c 2c 20 74 65 78 74 2c 20 62  nt NULL, text, b
bd90: 6c 6f 62 20 6f 72 0a 20 20 20 20 73 69 67 6e 65  lob or.    signe
bda0: 64 2d 6e 75 6d 62 65 72 20 76 61 6c 75 65 2c 20  d-number value, 
bdb0: 74 68 65 6e 20 74 68 61 74 20 76 61 6c 75 65 20  then that value 
bdc0: 69 73 20 75 73 65 64 20 64 69 72 65 63 74 6c 79  is used directly
bdd0: 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e   in the new row.
bde0: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  ..  <li><p>^If t
bdf0: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
be00: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20   of a column is 
be10: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
be20: 20 70 61 72 65 6e 74 68 65 73 65 73 2c 20 74 68   parentheses, th
be30: 65 6e 0a 20 20 20 20 74 68 65 20 65 78 70 72 65  en.    the expre
be40: 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
be50: 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68  ed once for each
be60: 20 72 6f 77 20 69 6e 73 65 72 74 65 64 20 61 6e   row inserted an
be70: 64 20 74 68 65 20 72 65 73 75 6c 74 73 0a 20 20  d the results.  
be80: 20 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65    used in the ne
be90: 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  w row...  <li><p
bea0: 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c 74  >^If the default
beb0: 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75   value of a colu
bec0: 6d 6e 20 69 73 20 43 55 52 52 45 4e 54 5f 54 49  mn is CURRENT_TI
bed0: 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ME, CURRENT_DATE
bee0: 20 6f 72 0a 20 20 20 20 43 55 52 52 45 4e 54 5f   or.    CURRENT_
bef0: 54 49 4d 45 53 54 41 4d 50 2c 20 74 68 65 6e 20  TIMESTAMP, then 
bf00: 74 68 65 20 76 61 6c 75 65 20 75 73 65 64 20 69  the value used i
bf10: 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73  n the new row is
bf20: 20 61 20 74 65 78 74 0a 20 20 20 20 72 65 70 72   a text.    repr
bf30: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
bf40: 65 20 63 75 72 72 65 6e 74 20 55 54 43 20 64 61  e current UTC da
bf50: 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20  te and/or time. 
bf60: 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d  ^For CURRENT_TIM
bf70: 45 2c 20 74 68 65 0a 20 20 20 20 66 6f 72 6d 61  E, the.    forma
bf80: 74 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20 69  t of the value i
bf90: 73 20 22 48 48 3a 4d 4d 3a 53 53 22 2e 20 5e 46  s "HH:MM:SS". ^F
bfa0: 6f 72 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c  or CURRENT_DATE,
bfb0: 20 22 59 59 59 59 2d 4d 4d 2d 44 44 22 2e 20 5e   "YYYY-MM-DD". ^
bfc0: 54 68 65 0a 20 20 20 20 66 6f 72 6d 61 74 20 66  The.    format f
bfd0: 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53  or CURRENT_TIMES
bfe0: 54 41 4d 50 20 69 73 20 22 59 59 59 59 2d 4d 4d  TAMP is "YYYY-MM
bff0: 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c  -DD HH:MM:SS"..<
c000: 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f  /ul>..<p>^The CO
c010: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 73 70 65  LLATE clause spe
c020: 63 69 66 69 65 73 20 74 68 65 20 6e 61 6d 65 20  cifies the name 
c030: 6f 66 20 61 20 5b 63 6f 6c 6c 61 74 69 6e 67 20  of a [collating 
c040: 73 65 71 75 65 6e 63 65 5d 20 74 6f 20 75 73 65  sequence] to use
c050: 20 61 73 0a 74 68 65 20 64 65 66 61 75 6c 74 20   as.the default 
c060: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
c070: 63 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ce for the colum
c080: 6e 2e 20 5e 49 66 20 6e 6f 20 43 4f 4c 4c 41 54  n. ^If no COLLAT
c090: 45 20 63 6c 61 75 73 65 20 69 73 0a 73 70 65 63  E clause is.spec
c0a0: 69 66 69 65 64 2c 20 74 68 65 20 64 65 66 61 75  ified, the defau
c0b0: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
c0c0: 75 65 6e 63 65 20 69 73 20 5b 42 49 4e 41 52 59  uence is [BINARY
c0d0: 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62  ]...<p>^The numb
c0e0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
c0f0: 20 61 20 74 61 62 6c 65 20 69 73 20 6c 69 6d 69   a table is limi
c100: 74 65 64 20 62 79 20 74 68 65 20 5b 53 51 4c 49  ted by the [SQLI
c110: 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d 0a 63  TE_MAX_COLUMN].c
c120: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70 61 72 61  ompile-time para
c130: 6d 65 74 65 72 2e 20 5e 41 20 73 69 6e 67 6c 65  meter. ^A single
c140: 20 72 6f 77 20 6f 66 20 61 20 74 61 62 6c 65 20   row of a table 
c150: 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20 6d 6f 72  cannot store mor
c160: 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d  e than.[SQLITE_M
c170: 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79 74 65 73  AX_LENGTH] bytes
c180: 20 6f 66 20 64 61 74 61 2e 20 5e 42 6f 74 68 20   of data. ^Both 
c190: 6f 66 20 74 68 65 73 65 20 6c 69 6d 69 74 73 20  of these limits 
c1a0: 63 61 6e 20 62 65 20 6c 6f 77 65 72 65 64 20 61  can be lowered a
c1b0: 74 0a 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20  t.runtime using 
c1c0: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d  the [sqlite3_lim
c1d0: 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65  it()] C/C++ inte
c1e0: 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  rface.</p>..<tcl
c1f0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63 6f  >hd_fragment {co
c200: 6e 73 74 72 61 69 6e 74 73 7d 20 7b 63 6f 6e 73  nstraints} {cons
c210: 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c  traints}</tcl>.<
c220: 68 33 3e 53 51 4c 20 44 61 74 61 20 43 6f 6e 73  h3>SQL Data Cons
c230: 74 72 61 69 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 74  traints</h3>..<t
c240: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 70  cl>hd_fragment p
c250: 72 69 6d 6b 65 79 63 6f 6e 73 74 20 7b 50 52 49  rimkeyconst {PRI
c260: 4d 41 52 59 20 4b 45 59 7d 20 7b 50 52 49 4d 41  MARY KEY} {PRIMA
c270: 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  RY KEY constrain
c280: 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63  t}</tcl>.<p>^Eac
c290: 68 20 74 61 62 6c 65 20 69 6e 20 53 51 4c 69 74  h table in SQLit
c2a0: 65 20 6d 61 79 20 68 61 76 65 20 61 74 20 6d 6f  e may have at mo
c2b0: 73 74 20 6f 6e 65 20 3c 62 3e 50 52 49 4d 41 52  st one <b>PRIMAR
c2c0: 59 20 4b 45 59 3c 2f 62 3e 2e 20 5e 49 66 20 74  Y KEY</b>. ^If t
c2d0: 68 65 0a 20 20 6b 65 79 77 6f 72 64 73 20 50 52  he.  keywords PR
c2e0: 49 4d 41 52 59 20 4b 45 59 20 61 72 65 20 61 64  IMARY KEY are ad
c2f0: 64 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  ded to a column 
c300: 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74 68 65 6e  definition, then
c310: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
c320: 0a 20 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  .  for the table
c330: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 61   consists of tha
c340: 74 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  t single column.
c350: 20 5e 4f 72 2c 20 69 66 20 61 20 50 52 49 4d 41   ^Or, if a PRIMA
c360: 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20 0a 20  RY KEY clause . 
c370: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
c380: 20 61 20 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72   a [table-constr
c390: 61 69 6e 74 5d 2c 20 74 68 65 6e 20 74 68 65 20  aint], then the 
c3a0: 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 66 20 74  primary key of t
c3b0: 68 65 20 74 61 62 6c 65 0a 20 20 63 6f 6e 73 69  he table.  consi
c3c0: 73 74 73 20 6f 66 20 74 68 65 20 6c 69 73 74 20  sts of the list 
c3d0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 70 65 63 69  of columns speci
c3e0: 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
c3f0: 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
c400: 63 6c 61 75 73 65 2e 0a 20 20 5e 54 68 65 20 50  clause..  ^The P
c410: 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73  RIMARY KEY claus
c420: 65 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 6f  e must contain o
c430: 6e 6c 79 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  nly column names
c440: 20 26 6d 64 61 73 68 3b 20 74 68 65 20 75 73 65   &mdash; the use
c450: 20 6f 66 20 0a 20 20 65 78 70 72 65 73 73 69 6f   of .  expressio
c460: 6e 73 20 69 6e 20 61 6e 20 5b 69 6e 64 65 78 65  ns in an [indexe
c470: 64 2d 63 6f 6c 75 6d 6e 5d 20 6f 66 20 61 20 50  d-column] of a P
c480: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 6e 6f  RIMARY KEY is no
c490: 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20 20 5e  t supported..  ^
c4a0: 41 6e 20 65 72 72 6f 72 20 69 73 20 72 61 69 73  An error is rais
c4b0: 65 64 20 69 66 20 6d 6f 72 65 20 74 68 61 6e 20  ed if more than 
c4c0: 6f 6e 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  one PRIMARY KEY 
c4d0: 63 6c 61 75 73 65 20 61 70 70 65 61 72 73 20 69  clause appears i
c4e0: 6e 20 61 0a 20 20 43 52 45 41 54 45 20 54 41 42  n a.  CREATE TAB
c4f0: 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e  LE statement.  ^
c500: 54 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  The PRIMARY KEY 
c510: 69 73 20 6f 70 74 69 6f 6e 61 6c 20 66 6f 72 20  is optional for 
c520: 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 0a  ordinary tables.
c530: 20 20 62 75 74 20 69 73 20 72 65 71 75 69 72 65    but is require
c540: 64 20 66 6f 72 20 5b 57 49 54 48 4f 55 54 20 52  d for [WITHOUT R
c550: 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 0a 3c  OWID] tables...<
c560: 70 3e 49 66 20 61 20 74 61 62 6c 65 20 68 61 73  p>If a table has
c570: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
c580: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 61 6e 64   primary key and
c590: 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79   the declared ty
c5a0: 70 65 20 6f 66 20 74 68 61 74 0a 20 20 63 6f 6c  pe of that.  col
c5b0: 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22  umn is "INTEGER"
c5c0: 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
c5d0: 73 20 6e 6f 74 20 61 20 5b 57 49 54 48 4f 55 54  s not a [WITHOUT
c5e0: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c 0a 20   ROWID] table,. 
c5f0: 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e   then the column
c600: 20 69 73 20 6b 6e 6f 77 6e 20 61 73 20 61 6e 20   is known as an 
c610: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
c620: 20 4b 45 59 5d 2e 0a 20 20 53 65 65 20 5b 72 6f   KEY]..  See [ro
c630: 77 69 64 7c 62 65 6c 6f 77 5d 20 66 6f 72 20 61  wid|below] for a
c640: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20   description of 
c650: 74 68 65 20 73 70 65 63 69 61 6c 20 70 72 6f 70  the special prop
c660: 65 72 74 69 65 73 20 61 6e 64 20 62 65 68 61 76  erties and behav
c670: 69 6f 72 73 0a 20 20 61 73 73 6f 63 69 61 74 65  iors.  associate
c680: 64 20 77 69 74 68 20 61 6e 20 5b 49 4e 54 45 47  d with an [INTEG
c690: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e  ER PRIMARY KEY].
c6a0: 0a 0a 3c 70 3e 5e 45 61 63 68 20 72 6f 77 20 69  ..<p>^Each row i
c6b0: 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61  n a table with a
c6c0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6d 75 73   primary key mus
c6d0: 74 20 68 61 76 65 20 61 20 75 6e 69 71 75 65 20  t have a unique 
c6e0: 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66  combination.  of
c6f0: 20 76 61 6c 75 65 73 20 69 6e 20 69 74 73 20 70   values in its p
c700: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
c710: 6e 73 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72  ns. ^For the pur
c720: 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d 69  poses of determi
c730: 6e 69 6e 67 0a 20 20 74 68 65 20 75 6e 69 71 75  ning.  the uniqu
c740: 65 6e 65 73 73 20 6f 66 20 70 72 69 6d 61 72 79  eness of primary
c750: 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 4e 55 4c   key values, NUL
c760: 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
c770: 73 69 64 65 72 65 64 20 64 69 73 74 69 6e 63 74  sidered distinct
c780: 20 66 72 6f 6d 0a 20 20 61 6c 6c 20 6f 74 68 65   from.  all othe
c790: 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75 64  r values, includ
c7a0: 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73 2e  ing other NULLs.
c7b0: 20 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52 54 5d   ^If an [INSERT]
c7c0: 20 6f 72 20 5b 55 50 44 41 54 45 5d 0a 20 20 73   or [UPDATE].  s
c7d0: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
c7e0: 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20  s to modify the 
c7f0: 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 20 73 6f  table content so
c800: 20 74 68 61 74 20 74 77 6f 20 6f 72 20 6d 6f 72   that two or mor
c810: 65 20 72 6f 77 73 0a 20 20 68 61 76 65 20 69 64  e rows.  have id
c820: 65 6e 74 69 63 61 6c 20 70 72 69 6d 61 72 79 20  entical primary 
c830: 6b 65 79 20 76 61 6c 75 65 73 2c 20 74 68 61 74  key values, that
c840: 20 69 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74   is a constraint
c850: 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 0a 3c 70 3e   violation...<p>
c860: 20 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   According to th
c870: 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 2c 20  e SQL standard, 
c880: 50 52 49 4d 41 52 59 20 4b 45 59 20 73 68 6f 75  PRIMARY KEY shou
c890: 6c 64 20 61 6c 77 61 79 73 20 69 6d 70 6c 79 20  ld always imply 
c8a0: 4e 4f 54 20 4e 55 4c 4c 2e 0a 20 20 55 6e 66 6f  NOT NULL..  Unfo
c8b0: 72 74 75 6e 61 74 65 6c 79 2c 20 64 75 65 20 74  rtunately, due t
c8c0: 6f 20 61 20 62 75 67 20 69 6e 20 73 6f 6d 65 20  o a bug in some 
c8d0: 65 61 72 6c 79 20 76 65 72 73 69 6f 6e 73 2c 20  early versions, 
c8e0: 74 68 69 73 20 69 73 20 6e 6f 74 20 74 68 65 0a  this is not the.
c8f0: 20 20 63 61 73 65 20 69 6e 20 53 51 4c 69 74 65    case in SQLite
c900: 2e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20 63 6f  . ^Unless the co
c910: 6c 75 6d 6e 20 69 73 20 61 6e 20 5b 49 4e 54 45  lumn is an [INTE
c920: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
c930: 20 6f 72 0a 20 20 74 68 65 20 74 61 62 6c 65 20   or.  the table 
c940: 69 73 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f  is a [WITHOUT RO
c950: 57 49 44 5d 20 74 61 62 6c 65 20 6f 72 20 74 68  WID] table or th
c960: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 64 65 63 6c  e column is decl
c970: 61 72 65 64 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20  ared NOT NULL,. 
c980: 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 4e   SQLite allows N
c990: 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 61 20  ULL values in a 
c9a0: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
c9b0: 6d 6e 2e 20 20 53 51 4c 69 74 65 20 63 6f 75 6c  mn.  SQLite coul
c9c0: 64 20 62 65 20 66 69 78 65 64 20 74 6f 0a 20 20  d be fixed to.  
c9d0: 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20 73  conform to the s
c9e0: 74 61 6e 64 61 72 64 2c 20 62 75 74 20 64 6f 69  tandard, but doi
c9f0: 6e 67 20 73 6f 20 6d 69 67 68 74 20 62 72 65 61  ng so might brea
ca00: 6b 20 6c 65 67 61 63 79 20 61 70 70 6c 69 63 61  k legacy applica
ca10: 74 69 6f 6e 73 2e 0a 20 20 48 65 6e 63 65 2c 20  tions..  Hence, 
ca20: 69 74 20 68 61 73 20 62 65 65 6e 20 64 65 63 69  it has been deci
ca30: 64 65 64 20 74 6f 20 6d 65 72 65 6c 79 20 64 6f  ded to merely do
ca40: 63 75 6d 65 6e 74 20 74 68 65 20 66 61 63 74 20  cument the fact 
ca50: 74 68 61 74 20 53 51 4c 69 74 65 0a 20 20 61 6c  that SQLite.  al
ca60: 6c 6f 77 69 6e 67 20 4e 55 4c 4c 73 20 69 6e 20  lowing NULLs in 
ca70: 6d 6f 73 74 20 50 52 49 4d 41 52 59 20 4b 45 59  most PRIMARY KEY
ca80: 20 63 6f 6c 75 6d 6e 73 2e 0a 0a 3c 74 63 6c 3e   columns...<tcl>
ca90: 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69 71  hd_fragment uniq
caa0: 75 65 63 6f 6e 73 74 20 7b 55 4e 49 51 55 45 7d  ueconst {UNIQUE}
cab0: 20 7b 75 6e 69 71 75 65 20 63 6f 6e 73 74 72 61   {unique constra
cac0: 69 6e 74 7d 20 7b 55 4e 49 51 55 45 20 63 6f 6e  int} {UNIQUE con
cad0: 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c  straint}</tcl>.<
cae0: 70 3e 5e 41 20 3c 62 3e 55 4e 49 51 55 45 3c 2f  p>^A <b>UNIQUE</
caf0: 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73  b> constraint is
cb00: 20 73 69 6d 69 6c 61 72 20 74 6f 20 61 20 50 52   similar to a PR
cb10: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72  IMARY KEY constr
cb20: 61 69 6e 74 2c 20 65 78 63 65 70 74 0a 20 20 74  aint, except.  t
cb30: 68 61 74 20 61 20 73 69 6e 67 6c 65 20 74 61 62  hat a single tab
cb40: 6c 65 20 6d 61 79 20 68 61 76 65 20 61 6e 79 20  le may have any 
cb50: 6e 75 6d 62 65 72 20 6f 66 20 55 4e 49 51 55 45  number of UNIQUE
cb60: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 5e 46   constraints. ^F
cb70: 6f 72 20 65 61 63 68 0a 20 20 55 4e 49 51 55 45  or each.  UNIQUE
cb80: 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 6e 20 74   constraint on t
cb90: 68 65 20 74 61 62 6c 65 2c 20 65 61 63 68 20 72  he table, each r
cba0: 6f 77 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  ow must contain 
cbb0: 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61  a unique combina
cbc0: 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75 65 73  tion.  of values
cbd0: 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   in the columns 
cbe0: 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68  identified by th
cbf0: 65 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  e UNIQUE constra
cc00: 69 6e 74 2e 20 0a 20 20 5e 46 6f 72 20 74 68 65  int. .  ^For the
cc10: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 55 4e 49   purposes of UNI
cc20: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  QUE constraints,
cc30: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 20 20 61   NULL values.  a
cc40: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69  re considered di
cc50: 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c 6c 20  stinct from all 
cc60: 6f 74 68 65 72 20 76 61 6c 75 65 73 2c 20 69 6e  other values, in
cc70: 63 6c 75 64 69 6e 67 20 6f 74 68 65 72 20 4e 55  cluding other NU
cc80: 4c 4c 73 2e 0a 20 20 5e 41 73 20 77 69 74 68 20  LLs..  ^As with 
cc90: 50 52 49 4d 41 52 59 20 4b 45 59 73 2c 20 61 20  PRIMARY KEYs, a 
cca0: 55 4e 49 51 55 45 20 5b 74 61 62 6c 65 2d 63 6f  UNIQUE [table-co
ccb0: 6e 73 74 72 61 69 6e 74 5d 20 63 6c 61 75 73 65  nstraint] clause
ccc0: 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 0a 20 20   must contain.  
ccd0: 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  only column name
cce0: 73 20 26 6d 64 61 73 68 3b 20 74 68 65 20 75 73  s &mdash; the us
ccf0: 65 20 6f 66 20 0a 20 20 65 78 70 72 65 73 73 69  e of .  expressi
cd00: 6f 6e 73 20 69 6e 20 61 6e 20 5b 69 6e 64 65 78  ons in an [index
cd10: 65 64 2d 63 6f 6c 75 6d 6e 5d 20 6f 66 20 61 20  ed-column] of a 
cd20: 55 4e 49 51 55 45 20 5b 74 61 62 6c 65 2d 63 6f  UNIQUE [table-co
cd30: 6e 73 74 72 61 69 6e 74 5d 0a 20 20 69 73 20 6e  nstraint].  is n
cd40: 6f 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20 20  ot supported..  
cd50: 0a 0a 3c 70 3e 5e 49 6e 20 6d 6f 73 74 20 63 61  ..<p>^In most ca
cd60: 73 65 73 2c 20 55 4e 49 51 55 45 20 61 6e 64 20  ses, UNIQUE and 
cd70: 50 52 49 4d 41 52 59 20 4b 45 59 0a 20 20 63 6f  PRIMARY KEY.  co
cd80: 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 69 6d  nstraints are im
cd90: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 72 65  plemented by cre
cda0: 61 74 69 6e 67 20 61 20 75 6e 69 71 75 65 20 69  ating a unique i
cdb0: 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61  ndex in the data
cdc0: 62 61 73 65 2e 0a 20 20 28 54 68 65 20 65 78 63  base..  (The exc
cdd0: 65 70 74 69 6f 6e 73 20 61 72 65 20 5b 49 4e 54  eptions are [INT
cde0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
cdf0: 5d 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45  ] and PRIMARY KE
ce00: 59 73 20 6f 6e 20 0a 20 20 5b 57 49 54 48 4f 55  Ys on .  [WITHOU
ce10: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e  T ROWID] tables.
ce20: 29 0a 20 20 48 65 6e 63 65 2c 20 74 68 65 20 66  ).  Hence, the f
ce30: 6f 6c 6c 6f 77 69 6e 67 20 73 63 68 65 6d 61 73  ollowing schemas
ce40: 20 61 72 65 20 6c 6f 67 69 63 61 6c 6c 79 20 65   are logically e
ce50: 71 75 69 76 61 6c 65 6e 74 3a 0a 0a 20 20 3c 6f  quivalent:..  <o
ce60: 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41  l>.  <li><p>CREA
ce70: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  TE TABLE t1(a, b
ce80: 20 55 4e 49 51 55 45 29 3b 0a 20 20 3c 6c 69 3e   UNIQUE);.  <li>
ce90: 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20  <p>CREATE TABLE 
cea0: 74 31 28 61 2c 20 62 20 50 52 49 4d 41 52 59 20  t1(a, b PRIMARY 
ceb0: 4b 45 59 29 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43  KEY);.  <li><p>C
cec0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
ced0: 2c 20 62 29 3b 3c 62 72 3e 0a 20 20 20 20 20 20  , b);<br>.      
cee0: 20 20 20 43 52 45 41 54 45 20 55 4e 49 51 55 45     CREATE UNIQUE
cef0: 20 49 4e 44 45 58 20 74 31 62 20 4f 4e 20 74 31   INDEX t1b ON t1
cf00: 28 62 29 3b 0a 20 20 3c 2f 6f 6c 3e 0a 0a 3c 74  (b);.  </ol>..<t
cf10: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  cl>hd_fragment {
cf20: 63 6b 63 6f 6e 73 74 7d 20 7b 43 48 45 43 4b 7d  ckconst} {CHECK}
cf30: 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69   {CHECK constrai
cf40: 6e 74 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74  nt} {CHECK const
cf50: 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 70  raints}</tcl>.<p
cf60: 3e 5e 28 41 20 3c 62 3e 43 48 45 43 4b 3c 2f 62  >^(A <b>CHECK</b
cf70: 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79  > constraint may
cf80: 20 62 65 20 61 74 74 61 63 68 65 64 20 74 6f 20   be attached to 
cf90: 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74  a column definit
cfa0: 69 6f 6e 20 6f 72 0a 20 20 73 70 65 63 69 66 69  ion or.  specifi
cfb0: 65 64 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f  ed as a table co
cfc0: 6e 73 74 72 61 69 6e 74 2e 20 49 6e 20 70 72 61  nstraint. In pra
cfd0: 63 74 69 63 65 20 69 74 20 6d 61 6b 65 73 20 6e  ctice it makes n
cfe0: 6f 20 64 69 66 66 65 72 65 6e 63 65 2e 29 5e 20  o difference.)^ 
cff0: 5e 28 45 61 63 68 0a 20 20 74 69 6d 65 20 61 20  ^(Each.  time a 
d000: 6e 65 77 20 72 6f 77 20 69 73 20 69 6e 73 65 72  new row is inser
d010: 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62  ted into the tab
d020: 6c 65 20 6f 72 20 61 6e 20 65 78 69 73 74 69 6e  le or an existin
d030: 67 20 72 6f 77 20 69 73 20 75 70 64 61 74 65 64  g row is updated
d040: 2c 0a 20 20 74 68 65 20 65 78 70 72 65 73 73 69  ,.  the expressi
d050: 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
d060: 74 68 20 65 61 63 68 20 43 48 45 43 4b 20 63 6f  th each CHECK co
d070: 6e 73 74 72 61 69 6e 74 20 69 73 20 65 76 61 6c  nstraint is eval
d080: 75 61 74 65 64 20 61 6e 64 0a 20 20 63 61 73 74  uated and.  cast
d090: 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61   to a NUMERIC va
d0a0: 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20  lue in the same 
d0b0: 77 61 79 20 61 73 20 61 20 5b 43 41 53 54 20 65  way as a [CAST e
d0c0: 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74  xpression]. If t
d0d0: 68 65 20 0a 20 20 72 65 73 75 6c 74 20 69 73 20  he .  result is 
d0e0: 7a 65 72 6f 20 28 69 6e 74 65 67 65 72 20 76 61  zero (integer va
d0f0: 6c 75 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61  lue 0 or real va
d100: 6c 75 65 20 30 2e 30 29 2c 20 74 68 65 6e 20 61  lue 0.0), then a
d110: 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 76 69   constraint.  vi
d120: 6f 6c 61 74 69 6f 6e 20 68 61 73 20 6f 63 63 75  olation has occu
d130: 72 72 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20  rred.)^ ^If the 
d140: 43 48 45 43 4b 20 65 78 70 72 65 73 73 69 6f 6e  CHECK expression
d150: 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 4e 55   evaluates to NU
d160: 4c 4c 2c 20 6f 72 0a 20 20 61 6e 79 20 6f 74 68  LL, or.  any oth
d170: 65 72 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75  er non-zero valu
d180: 65 2c 20 69 74 20 69 73 20 6e 6f 74 20 61 20 63  e, it is not a c
d190: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
d1a0: 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 65 78 70 72  ion..  ^The expr
d1b0: 65 73 73 69 6f 6e 20 6f 66 20 61 20 43 48 45 43  ession of a CHEC
d1c0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79  K constraint may
d1d0: 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 73   not contain a s
d1e0: 75 62 71 75 65 72 79 2e 0a 0a 3c 74 63 6c 3e 68  ubquery...<tcl>h
d1f0: 64 5f 66 72 61 67 6d 65 6e 74 20 7b 6e 6f 74 6e  d_fragment {notn
d200: 75 6c 6c 63 6f 6e 73 74 7d 20 7b 4e 4f 54 20 4e  ullconst} {NOT N
d210: 55 4c 4c 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63  ULL} {NOT NULL c
d220: 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e  onstraint}</tcl>
d230: 0a 3c 70 3e 5e 41 20 3c 62 3e 4e 4f 54 20 4e 55  .<p>^A <b>NOT NU
d240: 4c 4c 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e  LL</b> constrain
d250: 74 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 61 74  t may only be at
d260: 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75  tached to a colu
d270: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 0a 20  mn definition,. 
d280: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 61   not specified a
d290: 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72  s a table constr
d2a0: 61 69 6e 74 2e 20 20 4e 6f 74 20 73 75 72 70 72  aint.  Not surpr
d2b0: 69 73 69 6e 67 6c 79 2c 20 5e 28 61 20 4e 4f 54  isingly, ^(a NOT
d2c0: 20 4e 55 4c 4c 0a 20 20 63 6f 6e 73 74 72 61 69   NULL.  constrai
d2d0: 6e 74 20 64 69 63 74 61 74 65 73 20 74 68 61 74  nt dictates that
d2e0: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
d2f0: 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63  column may not c
d300: 6f 6e 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61  ontain a NULL va
d310: 6c 75 65 2e 0a 20 20 41 74 74 65 6d 70 74 69 6e  lue..  Attemptin
d320: 67 20 74 6f 20 73 65 74 20 74 68 65 20 63 6f 6c  g to set the col
d330: 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  umn value to NUL
d340: 4c 20 77 68 65 6e 20 69 6e 73 65 72 74 69 6e 67  L when inserting
d350: 20 61 20 6e 65 77 20 72 6f 77 20 6f 72 0a 20 20   a new row or.  
d360: 75 70 64 61 74 69 6e 67 20 61 6e 20 65 78 69 73  updating an exis
d370: 74 69 6e 67 20 6f 6e 65 20 63 61 75 73 65 73 20  ting one causes 
d380: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
d390: 6c 61 74 69 6f 6e 2e 29 5e 0a 0a 3c 70 3e 45 78  lation.)^..<p>Ex
d3a0: 61 63 74 6c 79 20 68 6f 77 20 61 20 63 6f 6e 73  actly how a cons
d3b0: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
d3c0: 20 69 73 20 64 65 61 6c 74 20 77 69 74 68 20 69   is dealt with i
d3d0: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
d3e0: 74 68 65 0a 20 20 5b 63 6f 6e 66 6c 69 63 74 20  the.  [conflict 
d3f0: 63 6c 61 75 73 65 7c 63 6f 6e 73 74 72 61 69 6e  clause|constrain
d400: 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
d410: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 5d  ution algorithm]
d420: 2e 20 45 61 63 68 20 0a 20 20 50 52 49 4d 41 52  . Each .  PRIMAR
d430: 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 2c 20 4e  Y KEY, UNIQUE, N
d440: 4f 54 20 4e 55 4c 4c 20 61 6e 64 20 43 48 45 43  OT NULL and CHEC
d450: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 68 61 73  K constraint has
d460: 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c   a default confl
d470: 69 63 74 0a 20 20 72 65 73 6f 6c 75 74 69 6f 6e  ict.  resolution
d480: 20 61 6c 67 6f 72 69 74 68 6d 2e 20 5e 50 52 49   algorithm. ^PRI
d490: 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45  MARY KEY, UNIQUE
d4a0: 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f   and NOT NULL co
d4b0: 6e 73 74 72 61 69 6e 74 73 20 6d 61 79 20 62 65  nstraints may be
d4c0: 0a 20 20 65 78 70 6c 69 63 69 74 6c 79 20 61 73  .  explicitly as
d4d0: 73 69 67 6e 65 64 20 61 20 64 65 66 61 75 6c 74  signed a default
d4e0: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
d4f0: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 62  tion algorithm b
d500: 79 20 69 6e 63 6c 75 64 69 6e 67 0a 20 20 61 20  y including.  a 
d510: 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65  [conflict-clause
d520: 5d 20 69 6e 20 74 68 65 69 72 20 64 65 66 69 6e  ] in their defin
d530: 69 74 69 6f 6e 73 2e 20 5e 4f 72 2c 20 69 66 20  itions. ^Or, if 
d540: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 64 65 66  a constraint def
d550: 69 6e 69 74 69 6f 6e 0a 20 20 64 6f 65 73 20 6e  inition.  does n
d560: 6f 74 20 69 6e 63 6c 75 64 65 20 61 20 5b 63 6f  ot include a [co
d570: 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20 6f  nflict-clause] o
d580: 72 20 69 74 20 69 73 20 61 20 43 48 45 43 4b 20  r it is a CHECK 
d590: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20  constraint, the 
d5a0: 64 65 66 61 75 6c 74 0a 20 20 63 6f 6e 66 6c 69  default.  confli
d5b0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
d5c0: 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54  gorithm is ABORT
d5d0: 2e 20 5e 44 69 66 66 65 72 65 6e 74 20 63 6f 6e  . ^Different con
d5e0: 73 74 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20  straints within 
d5f0: 74 68 65 0a 20 20 73 61 6d 65 20 74 61 62 6c 65  the.  same table
d600: 20 6d 61 79 20 68 61 76 65 20 64 69 66 66 65 72   may have differ
d610: 65 6e 74 20 64 65 66 61 75 6c 74 20 63 6f 6e 66  ent default conf
d620: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
d630: 61 6c 67 6f 72 69 74 68 6d 73 2e 20 53 65 65 0a  algorithms. See.
d640: 20 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69    the section ti
d650: 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  tled [ON CONFLIC
d660: 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  T] for additiona
d670: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a  l information...
d680: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
d690: 20 72 6f 77 69 64 20 7b 49 4e 54 45 47 45 52 20   rowid {INTEGER 
d6a0: 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 52 4f 57  PRIMARY KEY} ROW
d6b0: 49 44 20 72 6f 77 69 64 3c 2f 74 63 6c 3e 0a 3c  ID rowid</tcl>.<
d6c0: 68 33 3e 52 4f 57 49 44 73 20 61 6e 64 20 74 68  h3>ROWIDs and th
d6d0: 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  e INTEGER PRIMAR
d6e0: 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  Y KEY</h3>..<p>^
d6f0: 45 78 63 65 70 74 20 66 6f 72 20 5b 57 49 54 48  Except for [WITH
d700: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
d710: 73 2c 20 61 6c 6c 20 72 6f 77 73 20 77 69 74 68  s, all rows with
d720: 69 6e 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73  in SQLite tables
d730: 0a 68 61 76 65 20 61 20 36 34 2d 62 69 74 20 73  .have a 64-bit s
d740: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b 65  igned integer ke
d750: 79 20 74 68 61 74 20 75 6e 69 71 75 65 6c 79 20  y that uniquely 
d760: 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 20 72  identifies the r
d770: 6f 77 20 77 69 74 68 69 6e 20 69 74 73 20 74 61  ow within its ta
d780: 62 6c 65 2e 0a 54 68 69 73 20 69 6e 74 65 67 65  ble..This intege
d790: 72 20 69 73 20 75 73 75 61 6c 6c 79 0a 63 61 6c  r is usually.cal
d7a0: 6c 65 64 20 74 68 65 20 22 72 6f 77 69 64 22 2e  led the "rowid".
d7b0: 20 5e 54 68 65 20 72 6f 77 69 64 20 76 61 6c 75   ^The rowid valu
d7c0: 65 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65  e can be accesse
d7d0: 64 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74  d using one of t
d7e0: 68 65 20 73 70 65 63 69 61 6c 0a 63 61 73 65 2d  he special.case-
d7f0: 69 6e 64 65 70 65 6e 64 65 6e 74 20 6e 61 6d 65  independent name
d800: 73 20 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22  s "rowid", "oid"
d810: 2c 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 20 69  , or "_rowid_" i
d820: 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 63 6f 6c  n place of a col
d830: 75 6d 6e 20 6e 61 6d 65 2e 0a 5e 49 66 20 61 20  umn name..^If a 
d840: 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61  table contains a
d850: 20 75 73 65 72 20 64 65 66 69 6e 65 64 20 63 6f   user defined co
d860: 6c 75 6d 6e 20 6e 61 6d 65 64 20 22 72 6f 77 69  lumn named "rowi
d870: 64 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72  d", "oid" or "_r
d880: 6f 77 69 64 5f 22 2c 0a 74 68 65 6e 20 74 68 61  owid_",.then tha
d890: 74 20 6e 61 6d 65 20 61 6c 77 61 79 73 20 72 65  t name always re
d8a0: 66 65 72 73 20 74 68 65 20 65 78 70 6c 69 63 69  fers the explici
d8b0: 74 6c 79 20 64 65 63 6c 61 72 65 64 20 63 6f 6c  tly declared col
d8c0: 75 6d 6e 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  umn and cannot b
d8d0: 65 20 75 73 65 64 0a 74 6f 20 72 65 74 72 69 65  e used.to retrie
d8e0: 76 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  ve the integer r
d8f0: 6f 77 69 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e  owid value...<p>
d900: 54 68 65 20 72 6f 77 69 64 20 28 61 6e 64 20 22  The rowid (and "
d910: 6f 69 64 22 20 61 6e 64 20 22 5f 72 6f 77 69 64  oid" and "_rowid
d920: 5f 22 29 20 69 73 20 6f 6d 69 74 74 65 64 20 69  _") is omitted i
d930: 6e 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44  n [WITHOUT ROWID
d940: 5d 20 74 61 62 6c 65 73 2e 0a 57 49 54 48 4f 55  ] tables..WITHOU
d950: 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 20 61  T ROWID tables a
d960: 72 65 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c  re only availabl
d970: 65 20 69 6e 20 53 51 4c 69 74 65 20 5b 76 65 72  e in SQLite [ver
d980: 73 69 6f 6e 20 33 2e 38 2e 32 5d 0a 28 5b 64 61  sion 3.8.2].([da
d990: 74 65 6f 66 3a 33 2e 38 2e 32 5d 29 20 61 6e 64  teof:3.8.2]) and
d9a0: 20 6c 61 74 65 72 2e 0a 41 20 74 61 62 6c 65 20   later..A table 
d9b0: 74 68 61 74 20 6c 61 63 6b 73 20 74 68 65 20 57  that lacks the W
d9c0: 49 54 48 4f 55 54 20 52 4f 57 49 44 20 63 6c 61  ITHOUT ROWID cla
d9d0: 75 73 65 20 69 73 20 63 61 6c 6c 65 64 20 61 20  use is called a 
d9e0: 22 72 6f 77 69 64 20 74 61 62 6c 65 22 2e 0a 0a  "rowid table"...
d9f0: 3c 70 3e 54 68 65 20 64 61 74 61 20 66 6f 72 20  <p>The data for 
da00: 72 6f 77 69 64 20 74 61 62 6c 65 73 20 69 73 20  rowid tables is 
da10: 73 74 6f 72 65 64 20 61 73 20 61 20 42 2d 54 72  stored as a B-Tr
da20: 65 65 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ee structure con
da30: 74 61 69 6e 69 6e 67 0a 6f 6e 65 20 65 6e 74 72  taining.one entr
da40: 79 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65  y for each table
da50: 20 72 6f 77 2c 20 75 73 69 6e 67 20 74 68 65 20   row, using the 
da60: 72 6f 77 69 64 20 76 61 6c 75 65 20 61 73 20 74  rowid value as t
da70: 68 65 20 6b 65 79 2e 20 54 68 69 73 20 6d 65 61  he key. This mea
da80: 6e 73 20 74 68 61 74 0a 72 65 74 72 69 65 76 69  ns that.retrievi
da90: 6e 67 20 6f 72 20 73 6f 72 74 69 6e 67 20 72 65  ng or sorting re
daa0: 63 6f 72 64 73 20 62 79 20 72 6f 77 69 64 20 69  cords by rowid i
dab0: 73 20 66 61 73 74 2e 20 53 65 61 72 63 68 69 6e  s fast. Searchin
dac0: 67 20 66 6f 72 20 61 20 72 65 63 6f 72 64 20 77  g for a record w
dad0: 69 74 68 20 61 0a 73 70 65 63 69 66 69 63 20 72  ith a.specific r
dae0: 6f 77 69 64 2c 20 6f 72 20 66 6f 72 20 61 6c 6c  owid, or for all
daf0: 20 72 65 63 6f 72 64 73 20 77 69 74 68 20 72 6f   records with ro
db00: 77 69 64 73 20 77 69 74 68 69 6e 20 61 20 73 70  wids within a sp
db10: 65 63 69 66 69 65 64 20 72 61 6e 67 65 20 69 73  ecified range is
db20: 0a 61 72 6f 75 6e 64 20 74 77 69 63 65 20 61 73  .around twice as
db30: 20 66 61 73 74 20 61 73 20 61 20 73 69 6d 69 6c   fast as a simil
db40: 61 72 20 73 65 61 72 63 68 20 6d 61 64 65 20 62  ar search made b
db50: 79 20 73 70 65 63 69 66 79 69 6e 67 20 61 6e 79  y specifying any
db60: 20 6f 74 68 65 72 20 50 52 49 4d 41 52 59 0a 4b   other PRIMARY.K
db70: 45 59 20 6f 72 20 69 6e 64 65 78 65 64 20 76 61  EY or indexed va
db80: 6c 75 65 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68 20  lue...<p> ^With 
db90: 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e 20 6e 6f  one exception no
dba0: 74 65 64 20 62 65 6c 6f 77 2c 20 69 66 20 61 20  ted below, if a 
dbb0: 72 6f 77 69 64 20 74 61 62 6c 65 20 68 61 73 20  rowid table has 
dbc0: 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 74 68  a primary key th
dbd0: 61 74 20 63 6f 6e 73 69 73 74 73 0a 6f 66 20 61  at consists.of a
dbe0: 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 61   single column a
dbf0: 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  nd the declared 
dc00: 74 79 70 65 20 6f 66 20 74 68 61 74 20 63 6f 6c  type of that col
dc10: 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22  umn is "INTEGER"
dc20: 20 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65 20   in any mixture 
dc30: 6f 66 0a 75 70 70 65 72 20 61 6e 64 20 6c 6f 77  of.upper and low
dc40: 65 72 20 63 61 73 65 2c 20 74 68 65 6e 20 74 68  er case, then th
dc50: 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65 73  e column becomes
dc60: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
dc70: 65 20 72 6f 77 69 64 2e 20 53 75 63 68 20 61 0a  e rowid. Such a.
dc80: 63 6f 6c 75 6d 6e 20 69 73 20 75 73 75 61 6c 6c  column is usuall
dc90: 79 20 72 65 66 65 72 72 65 64 20 74 6f 20 61 73  y referred to as
dca0: 20 61 6e 20 22 69 6e 74 65 67 65 72 20 70 72 69   an "integer pri
dcb0: 6d 61 72 79 20 6b 65 79 22 2e 20 41 20 50 52 49  mary key". A PRI
dcc0: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a  MARY KEY column.
dcd0: 6f 6e 6c 79 20 62 65 63 6f 6d 65 73 20 61 6e 20  only becomes an 
dce0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
dcf0: 6b 65 79 20 69 66 20 74 68 65 20 64 65 63 6c 61  key if the decla
dd00: 72 65 64 20 74 79 70 65 20 6e 61 6d 65 20 69 73  red type name is
dd10: 20 65 78 61 63 74 6c 79 0a 22 49 4e 54 45 47 45   exactly."INTEGE
dd20: 52 22 2e 20 20 5e 4f 74 68 65 72 20 69 6e 74 65  R".  ^Other inte
dd30: 67 65 72 20 74 79 70 65 20 6e 61 6d 65 73 20 6c  ger type names l
dd40: 69 6b 65 20 22 49 4e 54 22 20 6f 72 20 22 42 49  ike "INT" or "BI
dd50: 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54 20  GINT" or "SHORT 
dd60: 49 4e 54 45 47 45 52 22 0a 6f 72 20 22 55 4e 53  INTEGER".or "UNS
dd70: 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22 20 63  IGNED INTEGER" c
dd80: 61 75 73 65 73 20 74 68 65 20 70 72 69 6d 61 72  auses the primar
dd90: 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f 20  y key column to 
dda0: 62 65 68 61 76 65 20 61 73 20 61 6e 20 6f 72 64  behave as an ord
ddb0: 69 6e 61 72 79 0a 74 61 62 6c 65 20 63 6f 6c 75  inary.table colu
ddc0: 6d 6e 20 77 69 74 68 20 69 6e 74 65 67 65 72 20  mn with integer 
ddd0: 5b 61 66 66 69 6e 69 74 79 5d 20 61 6e 64 20 61  [affinity] and a
dde0: 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2c 20 6e   unique index, n
ddf0: 6f 74 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ot as an alias f
de00: 6f 72 0a 74 68 65 20 72 6f 77 69 64 2e 0a 0a 3c  or.the rowid...<
de10: 70 3e 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e  p> The exception
de20: 20 6d 65 6e 74 69 6f 6e 65 64 20 61 62 6f 76 65   mentioned above
de30: 20 69 73 20 74 68 61 74 20 5e 69 66 20 74 68 65   is that ^if the
de40: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20   declaration of 
de50: 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 64 65  a column with.de
de60: 63 6c 61 72 65 64 20 74 79 70 65 20 22 49 4e 54  clared type "INT
de70: 45 47 45 52 22 20 69 6e 63 6c 75 64 65 73 20 61  EGER" includes a
de80: 6e 20 22 50 52 49 4d 41 52 59 20 4b 45 59 20 44  n "PRIMARY KEY D
de90: 45 53 43 22 20 63 6c 61 75 73 65 2c 20 69 74 20  ESC" clause, it 
dea0: 64 6f 65 73 20 6e 6f 74 0a 62 65 63 6f 6d 65 20  does not.become 
deb0: 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
dec0: 20 72 6f 77 69 64 20 61 6e 64 20 69 73 20 6e 6f   rowid and is no
ded0: 74 20 63 6c 61 73 73 69 66 69 65 64 20 61 73 20  t classified as 
dee0: 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an integer prima
def0: 72 79 20 6b 65 79 2e 0a 54 68 69 73 20 71 75 69  ry key..This qui
df00: 72 6b 20 69 73 20 6e 6f 74 20 62 79 20 64 65 73  rk is not by des
df10: 69 67 6e 2e 20 49 74 20 69 73 20 64 75 65 20 74  ign. It is due t
df20: 6f 20 61 20 62 75 67 20 69 6e 20 65 61 72 6c 79  o a bug in early
df30: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
df40: 69 74 65 2e 0a 42 75 74 20 66 69 78 69 6e 67 20  ite..But fixing 
df50: 74 68 65 20 62 75 67 20 63 6f 75 6c 64 20 72 65  the bug could re
df60: 73 75 6c 74 20 69 6e 20 62 61 63 6b 77 61 72 64  sult in backward
df70: 73 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74  s incompatibilit
df80: 69 65 73 2e 0a 48 65 6e 63 65 2c 20 74 68 65 20  ies..Hence, the 
df90: 6f 72 69 67 69 6e 61 6c 20 62 65 68 61 76 69 6f  original behavio
dfa0: 72 20 68 61 73 20 62 65 65 6e 20 72 65 74 61 69  r has been retai
dfb0: 6e 65 64 20 28 61 6e 64 20 64 6f 63 75 6d 65 6e  ned (and documen
dfc0: 74 65 64 29 20 62 65 63 61 75 73 65 20 6f 64 64  ted) because odd
dfd0: 0a 62 65 68 61 76 69 6f 72 20 69 6e 20 61 20 63  .behavior in a c
dfe0: 6f 72 6e 65 72 20 63 61 73 65 20 69 73 20 66 61  orner case is fa
dff0: 72 20 62 65 74 74 65 72 20 74 68 61 6e 20 61 20  r better than a 
e000: 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62 72  compatibility br
e010: 65 61 6b 2e 20 20 54 68 69 73 20 6d 65 61 6e 73  eak.  This means
e020: 0a 74 68 61 74 20 5e 28 74 68 65 20 66 6f 6c 6c  .that ^(the foll
e030: 6f 77 69 6e 67 20 74 68 72 65 65 20 74 61 62 6c  owing three tabl
e040: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 61  e declarations a
e050: 6c 6c 20 63 61 75 73 65 20 74 68 65 20 63 6f 6c  ll cause the col
e060: 75 6d 6e 20 22 78 22 20 74 6f 20 62 65 20 61 6e  umn "x" to be an
e070: 0a 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72  .alias for the r
e080: 6f 77 69 64 20 28 61 6e 20 69 6e 74 65 67 65 72  owid (an integer
e090: 20 70 72 69 6d 61 72 79 20 6b 65 79 29 3a 0a 0a   primary key):..
e0a0: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45  <ul>.<li><tt>CRE
e0b0: 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e  ATE TABLE t(x IN
e0c0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
e0d0: 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74  Y ASC, y, z);</t
e0e0: 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54  t>.<li><tt>CREAT
e0f0: 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
e100: 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41  GER, y, z, PRIMA
e110: 52 59 20 4b 45 59 28 78 20 41 53 43 29 29 3b 3c  RY KEY(x ASC));<
e120: 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45  /tt>.<li><tt>CRE
e130: 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e  ATE TABLE t(x IN
e140: 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49  TEGER, y, z, PRI
e150: 4d 41 52 59 20 4b 45 59 28 78 20 44 45 53 43 29  MARY KEY(x DESC)
e160: 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a  );</tt>.</ul>)^.
e170: 0a 3c 70 3e 42 75 74 20 5e 28 74 68 65 20 66 6f  .<p>But ^(the fo
e180: 6c 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74  llowing declarat
e190: 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73  ion does not res
e1a0: 75 6c 74 20 69 6e 20 22 78 22 20 62 65 69 6e 67  ult in "x" being
e1b0: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74 68   an alias for.th
e1c0: 65 20 72 6f 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c  e rowid:.<ul>.<l
e1d0: 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42  i><tt>CREATE TAB
e1e0: 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 20 50  LE t(x INTEGER P
e1f0: 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43 2c  RIMARY KEY DESC,
e200: 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75   y, z);</tt>.</u
e210: 6c 3e 29 5e 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20  l>)^..<p>^Rowid 
e220: 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20 6d 6f  values may be mo
e230: 64 69 66 69 65 64 20 75 73 69 6e 67 20 61 6e 20  dified using an 
e240: 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
e250: 20 69 6e 20 74 68 65 20 73 61 6d 65 0a 77 61 79   in the same.way
e260: 20 61 73 20 61 6e 79 20 6f 74 68 65 72 20 63 6f   as any other co
e270: 6c 75 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20  lumn value can, 
e280: 65 69 74 68 65 72 20 75 73 69 6e 67 20 6f 6e 65  either using one
e290: 20 6f 66 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   of the built-in
e2a0: 20 61 6c 69 61 73 65 73 0a 28 22 72 6f 77 69 64   aliases.("rowid
e2b0: 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f  ", "oid" or "_ro
e2c0: 77 69 64 5f 22 29 20 6f 72 20 62 79 20 75 73 69  wid_") or by usi
e2d0: 6e 67 20 61 6e 20 61 6c 69 61 73 20 63 72 65 61  ng an alias crea
e2e0: 74 65 64 20 62 79 20 61 6e 20 69 6e 74 65 67 65  ted by an intege
e2f0: 72 0a 70 72 69 6d 61 72 79 20 6b 65 79 2e 20 5e  r.primary key. ^
e300: 53 69 6d 69 6c 61 72 6c 79 2c 20 61 6e 20 49 4e  Similarly, an IN
e310: 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6d  SERT statement m
e320: 61 79 20 70 72 6f 76 69 64 65 20 61 20 76 61 6c  ay provide a val
e330: 75 65 20 74 6f 20 75 73 65 20 61 73 20 74 68 65  ue to use as the
e340: 0a 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20  .rowid for each 
e350: 72 6f 77 20 69 6e 73 65 72 74 65 64 2e 20 5e 28  row inserted. ^(
e360: 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53 51  Unlike normal SQ
e370: 4c 69 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e  Lite columns, an
e380: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
e390: 0a 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f  .key or rowid co
e3a0: 6c 75 6d 6e 20 6d 75 73 74 20 63 6f 6e 74 61 69  lumn must contai
e3b0: 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  n integer values
e3c0: 2e 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72  . Integer primar
e3d0: 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 0a 63  y key or rowid.c
e3e0: 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 6f 74 20 61  olumns are not a
e3f0: 62 6c 65 20 74 6f 20 68 6f 6c 64 20 66 6c 6f 61  ble to hold floa
e400: 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
e410: 73 2c 20 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42  s, strings, BLOB
e420: 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a  s, or NULLs.)^..
e430: 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45  <p>^If an UPDATE
e440: 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d   statement attem
e450: 70 74 73 20 74 6f 20 73 65 74 20 61 6e 20 69 6e  pts to set an in
e460: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
e470: 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d  y or rowid colum
e480: 6e 0a 74 6f 20 61 20 4e 55 4c 4c 20 6f 72 20 62  n.to a NULL or b
e490: 6c 6f 62 20 76 61 6c 75 65 2c 20 6f 72 20 74 6f  lob value, or to
e4a0: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 72 65 61   a string or rea
e4b0: 6c 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  l value that can
e4c0: 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c  not be losslessl
e4d0: 79 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y.converted to a
e4e0: 6e 20 69 6e 74 65 67 65 72 2c 20 61 20 22 64 61  n integer, a "da
e4f0: 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22  tatype mismatch"
e500: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e   error occurs an
e510: 64 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  d the statement.
e520: 69 73 20 61 62 6f 72 74 65 64 2e 20 5e 49 66 20  is aborted. ^If 
e530: 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
e540: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
e550: 69 6e 73 65 72 74 20 61 20 62 6c 6f 62 20 76 61  insert a blob va
e560: 6c 75 65 2c 20 6f 72 20 61 20 73 74 72 69 6e 67  lue, or a string
e570: 0a 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 74  .or real value t
e580: 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f  hat cannot be lo
e590: 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74  sslessly convert
e5a0: 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
e5b0: 20 69 6e 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72   into an.integer
e5c0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20   primary key or 
e5d0: 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 20  rowid column, a 
e5e0: 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74  "datatype mismat
e5f0: 63 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73  ch" error occurs
e600: 20 61 6e 64 20 74 68 65 0a 73 74 61 74 65 6d 65   and the.stateme
e610: 6e 74 20 69 73 20 61 62 6f 72 74 65 64 2e 0a 0a  nt is aborted...
e620: 3c 70 3e 5e 49 66 20 61 6e 20 49 4e 53 45 52 54  <p>^If an INSERT
e630: 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d   statement attem
e640: 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20 61 20  pts to insert a 
e650: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20  NULL value into 
e660: 61 20 72 6f 77 69 64 20 6f 72 0a 69 6e 74 65 67  a rowid or.integ
e670: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63  er primary key c
e680: 6f 6c 75 6d 6e 2c 20 74 68 65 20 73 79 73 74 65  olumn, the syste
e690: 6d 20 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74  m chooses an int
e6a0: 65 67 65 72 20 76 61 6c 75 65 20 74 6f 20 75 73  eger value to us
e6b0: 65 20 61 73 20 74 68 65 0a 72 6f 77 69 64 20 61  e as the.rowid a
e6c0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 41 20  utomatically. A 
e6d0: 64 65 74 61 69 6c 65 64 20 64 65 73 63 72 69 70  detailed descrip
e6e0: 74 69 6f 6e 20 6f 66 20 68 6f 77 20 74 68 69 73  tion of how this
e6f0: 20 69 73 20 64 6f 6e 65 20 69 73 20 70 72 6f 76   is done is prov
e700: 69 64 65 64 0a 3c 61 20 68 72 65 66 3d 22 61 75  ided.<a href="au
e710: 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61  toinc.html">sepa
e720: 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a  rately</a>.</p>.
e730: 0a 3c 70 3e 5e 28 54 68 65 20 5b 70 61 72 65 6e  .<p>^(The [paren
e740: 74 20 6b 65 79 5d 20 6f 66 20 61 20 5b 66 6f 72  t key] of a [for
e750: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
e760: 69 6e 74 5d 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  int] is not allo
e770: 77 65 64 20 74 6f 0a 75 73 65 20 74 68 65 20 72  wed to.use the r
e780: 6f 77 69 64 2e 20 20 54 68 65 20 70 61 72 65 6e  owid.  The paren
e790: 74 20 6b 65 79 20 6d 75 73 74 20 75 73 65 64 20  t key must used 
e7a0: 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e  named columns on
e7b0: 6c 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ly.)^</p>..<tcl>
e7c0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
e7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e7e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e7f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
e810: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
e820: 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74  TRIGGER} createt
e830: 72 69 67 67 65 72 20 7b 7b 43 52 45 41 54 45 20  rigger {{CREATE 
e840: 54 52 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72  TRIGGER}}..Recur
e850: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
e860: 6d 20 63 72 65 61 74 65 2d 74 72 69 67 67 65 72  m create-trigger
e870: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
e880: 3e 5e 54 68 65 20 43 52 45 41 54 45 20 54 52 49  >^The CREATE TRI
e890: 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 69  GGER statement i
e8a0: 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 74 72  s used to add tr
e8b0: 69 67 67 65 72 73 20 74 6f 20 74 68 65 20 0a 64  iggers to the .d
e8c0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
e8d0: 5e 54 72 69 67 67 65 72 73 20 61 72 65 20 64 61  ^Triggers are da
e8e0: 74 61 62 61 73 65 20 6f 70 65 72 61 74 69 6f 6e  tabase operation
e8f0: 73 20 0a 74 68 61 74 20 61 72 65 20 61 75 74 6f  s .that are auto
e900: 6d 61 74 69 63 61 6c 6c 79 20 70 65 72 66 6f 72  matically perfor
e910: 6d 65 64 20 77 68 65 6e 20 61 20 73 70 65 63 69  med when a speci
e920: 66 69 65 64 20 64 61 74 61 62 61 73 65 20 65 76  fied database ev
e930: 65 6e 74 0a 6f 63 63 75 72 73 2e 20 20 3c 2f 70  ent.occurs.  </p
e940: 3e 0a 0a 3c 70 3e 5e 41 20 74 72 69 67 67 65 72  >..<p>^A trigger
e950: 20 6d 61 79 20 62 65 20 73 70 65 63 69 66 69 65   may be specifie
e960: 64 20 74 6f 20 66 69 72 65 20 77 68 65 6e 65 76  d to fire whenev
e970: 65 72 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b  er a [DELETE], [
e980: 49 4e 53 45 52 54 5d 2c 0a 6f 72 20 5b 55 50 44  INSERT],.or [UPD
e990: 41 54 45 5d 20 6f 66 20 61 0a 70 61 72 74 69 63  ATE] of a.partic
e9a0: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 74 61  ular database ta
e9b0: 62 6c 65 20 6f 63 63 75 72 73 2c 20 6f 72 20 77  ble occurs, or w
e9c0: 68 65 6e 65 76 65 72 20 61 6e 20 5b 55 50 44 41  henever an [UPDA
e9d0: 54 45 5d 20 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e  TE] occurs on.on
e9e0: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 70 65   one or more spe
e9f0: 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 20 6f  cified columns o
ea00: 66 20 61 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a  f a table.</p>..
ea10: 3c 70 3e 5e 41 74 20 74 68 69 73 20 74 69 6d 65  <p>^At this time
ea20: 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
ea30: 20 6f 6e 6c 79 20 46 4f 52 20 45 41 43 48 20 52   only FOR EACH R
ea40: 4f 57 20 74 72 69 67 67 65 72 73 2c 20 6e 6f 74  OW triggers, not
ea50: 20 46 4f 52 20 45 41 43 48 0a 53 54 41 54 45 4d   FOR EACH.STATEM
ea60: 45 4e 54 20 74 72 69 67 67 65 72 73 2e 20 5e 48  ENT triggers. ^H
ea70: 65 6e 63 65 20 65 78 70 6c 69 63 69 74 6c 79 20  ence explicitly 
ea80: 73 70 65 63 69 66 79 69 6e 67 20 46 4f 52 20 45  specifying FOR E
ea90: 41 43 48 20 52 4f 57 20 69 73 20 6f 70 74 69 6f  ACH ROW is optio
eaa0: 6e 61 6c 2e 0a 5e 46 4f 52 20 45 41 43 48 20 52  nal..^FOR EACH R
eab0: 4f 57 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  OW implies that 
eac0: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
ead0: 74 73 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  ts specified in 
eae0: 74 68 65 20 74 72 69 67 67 65 72 0a 6d 61 79 20  the trigger.may 
eaf0: 62 65 20 65 78 65 63 75 74 65 64 20 28 64 65 70  be executed (dep
eb00: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 57 48  ending on the WH
eb10: 45 4e 20 63 6c 61 75 73 65 29 20 66 6f 72 20 65  EN clause) for e
eb20: 61 63 68 20 64 61 74 61 62 61 73 65 20 72 6f 77  ach database row
eb30: 20 62 65 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c   being.inserted,
eb40: 20 75 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65   updated or dele
eb50: 74 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  ted by the state
eb60: 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65  ment causing the
eb70: 20 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65   trigger to fire
eb80: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 42 6f 74 68  .</p>..<p>^(Both
eb90: 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
eba0: 20 61 6e 64 20 74 68 65 20 74 72 69 67 67 65 72   and the trigger
ebb0: 20 61 63 74 69 6f 6e 73 20 6d 61 79 20 61 63 63   actions may acc
ebc0: 65 73 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20  ess elements of 
ebd0: 0a 74 68 65 20 72 6f 77 20 62 65 69 6e 67 20 69  .the row being i
ebe0: 6e 73 65 72 74 65 64 2c 20 64 65 6c 65 74 65 64  nserted, deleted
ebf0: 20 6f 72 20 75 70 64 61 74 65 64 20 75 73 69 6e   or updated usin
ec00: 67 20 72 65 66 65 72 65 6e 63 65 73 20 6f 66 20  g references of 
ec10: 74 68 65 20 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c  the form ."NEW.<
ec20: 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69  i>column-name</i
ec30: 3e 22 20 61 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63  >" and "OLD.<i>c
ec40: 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c  olumn-name</i>",
ec50: 20 77 68 65 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e   where.<i>column
ec60: 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 74 68 65  -name</i> is the
ec70: 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d   name of a colum
ec80: 6e 20 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65  n from the table
ec90: 20 74 68 61 74 20 74 68 65 20 74 72 69 67 67 65   that the trigge
eca0: 72 0a 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  r.is associated 
ecb0: 77 69 74 68 2e 29 5e 20 5e 28 4f 4c 44 20 61 6e  with.)^ ^(OLD an
ecc0: 64 20 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73  d NEW references
ecd0: 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65   may only be use
ece0: 64 20 69 6e 20 74 72 69 67 67 65 72 73 20 6f 6e  d in triggers on
ecf0: 0a 65 76 65 6e 74 73 20 66 6f 72 20 77 68 69 63  .events for whic
ed00: 68 20 74 68 65 79 20 61 72 65 20 72 65 6c 65 76  h they are relev
ed10: 61 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ant, as follows:
ed20: 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72  </p>..<table bor
ed30: 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e  der=0 cellpaddin
ed40: 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76  g=10>.<tr>.<td v
ed50: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
ed60: 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d  n="right" width=
ed70: 31 32 30 3e 3c 69 3e 49 4e 53 45 52 54 3c 2f 69  120><i>INSERT</i
ed80: 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  ></td>.<td valig
ed90: 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 72 65 66 65  n="top">NEW refe
eda0: 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64  rences are valid
edb0: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
edc0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
edd0: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  " align="right" 
ede0: 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 55 50 44  width=120><i>UPD
edf0: 41 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64  ATE</i></td>.<td
ee00: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45   valign="top">NE
ee10: 57 20 61 6e 64 20 4f 4c 44 20 72 65 66 65 72 65  W and OLD refere
ee20: 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f  nces are valid</
ee30: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
ee40: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
ee50: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69  align="right" wi
ee60: 64 74 68 3d 31 32 30 3e 3c 69 3e 44 45 4c 45 54  dth=120><i>DELET
ee70: 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76  E</i></td>.<td v
ee80: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20  align="top">OLD 
ee90: 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76  references are v
eea0: 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  alid</td>.</tr>.
eeb0: 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a  </table>.</p>)^.
eec0: 0a 3c 70 3e 5e 49 66 20 61 20 57 48 45 4e 20 63  .<p>^If a WHEN c
eed0: 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65  lause is supplie
eee0: 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  d, the SQL state
eef0: 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 0a  ments specified.
ef00: 61 72 65 20 6f 6e 6c 79 20 65 78 65 63 75 74 65  are only execute
ef10: 64 20 69 66 20 74 68 65 20 57 48 45 4e 20 63 6c  d if the WHEN cl
ef20: 61 75 73 65 20 69 73 20 74 72 75 65 2e 0a 5e 49  ause is true..^I
ef30: 66 20 6e 6f 20 57 48 45 4e 20 63 6c 61 75 73 65  f no WHEN clause
ef40: 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68   is supplied, th
ef50: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
ef60: 0a 61 72 65 20 65 78 65 63 75 74 65 64 20 65 76  .are executed ev
ef70: 65 72 79 20 74 69 6d 65 20 74 68 65 20 74 72 69  ery time the tri
ef80: 67 67 65 72 20 66 69 72 65 73 2e 3c 2f 70 3e 0a  gger fires.</p>.
ef90: 0a 3c 70 3e 5e 54 68 65 20 42 45 46 4f 52 45 20  .<p>^The BEFORE 
efa0: 6f 72 20 41 46 54 45 52 20 6b 65 79 77 6f 72 64  or AFTER keyword
efb0: 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 6e   determines when
efc0: 20 74 68 65 20 74 72 69 67 67 65 72 20 61 63 74   the trigger act
efd0: 69 6f 6e 73 0a 77 69 6c 6c 20 62 65 20 65 78 65  ions.will be exe
efe0: 63 75 74 65 64 20 72 65 6c 61 74 69 76 65 20 74  cuted relative t
eff0: 6f 20 74 68 65 20 69 6e 73 65 72 74 69 6f 6e 2c  o the insertion,
f000: 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 6f 72   modification or
f010: 20 72 65 6d 6f 76 61 6c 20 6f 66 20 74 68 65 0a   removal of the.
f020: 61 73 73 6f 63 69 61 74 65 64 20 72 6f 77 2e 3c  associated row.<
f030: 2f 70 3e 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f 4e 20  /p>..<p>^An [ON 
f040: 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73 65  CONFLICT] clause
f050: 20 6d 61 79 20 62 65 20 73 70 65 63 69 66 69 65   may be specifie
f060: 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
f070: 5b 55 50 44 41 54 45 5d 20 6f 72 20 5b 49 4e 53  [UPDATE] or [INS
f080: 45 52 54 5d 0a 61 63 74 69 6f 6e 20 77 69 74 68  ERT].action with
f090: 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 74  in the body of t
f0a0: 68 65 20 74 72 69 67 67 65 72 2e 0a 5e 48 6f 77  he trigger..^How
f0b0: 65 76 65 72 20 69 66 20 61 6e 20 5b 4f 4e 20 43  ever if an [ON C
f0c0: 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20  ONFLICT] clause 
f0d0: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  is specified as 
f0e0: 70 61 72 74 20 6f 66 20 0a 74 68 65 20 73 74 61  part of .the sta
f0f0: 74 65 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74  tement causing t
f100: 68 65 20 74 72 69 67 67 65 72 20 74 6f 20 66 69  he trigger to fi
f110: 72 65 2c 20 74 68 65 6e 20 63 6f 6e 66 6c 69 63  re, then conflic
f120: 74 20 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63  t handling.polic
f130: 79 20 6f 66 20 74 68 65 20 6f 75 74 65 72 20 73  y of the outer s
f140: 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
f150: 20 69 6e 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c   instead.</p>..<
f160: 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65 20  p>^Triggers are 
f170: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 5b 44  automatically [D
f180: 52 4f 50 20 54 52 49 47 47 45 52 20 7c 20 64 72  ROP TRIGGER | dr
f190: 6f 70 70 65 64 5d 0a 77 68 65 6e 20 74 68 65 20  opped].when the 
f1a0: 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 79 20  table that they 
f1b0: 61 72 65 20 0a 61 73 73 6f 63 69 61 74 65 64 20  are .associated 
f1c0: 77 69 74 68 20 28 74 68 65 20 3c 69 3e 74 61 62  with (the <i>tab
f1d0: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 61 62 6c  le-name</i> tabl
f1e0: 65 29 20 69 73 20 0a 5b 44 52 4f 50 20 54 41 42  e) is .[DROP TAB
f1f0: 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 2e 20 20  LE | dropped].  
f200: 5e 48 6f 77 65 76 65 72 20 69 66 20 74 68 65 20  ^However if the 
f210: 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20  trigger actions 
f220: 72 65 66 65 72 65 6e 63 65 0a 6f 74 68 65 72 20  reference.other 
f230: 74 61 62 6c 65 73 2c 20 74 68 65 20 74 72 69 67  tables, the trig
f240: 67 65 72 20 69 73 20 6e 6f 74 20 64 72 6f 70 70  ger is not dropp
f250: 65 64 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 69  ed or modified i
f260: 66 20 74 68 6f 73 65 20 6f 74 68 65 72 0a 74 61  f those other.ta
f270: 62 6c 65 73 20 61 72 65 20 5b 44 52 4f 50 20 54  bles are [DROP T
f280: 41 42 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 20  ABLE | dropped] 
f290: 6f 72 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 20  or [ALTER TABLE 
f2a0: 7c 20 6d 6f 64 69 66 69 65 64 5d 2e 3c 2f 70 3e  | modified].</p>
f2b0: 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61  ..<p>^Triggers a
f2c0: 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67  re removed using
f2d0: 20 74 68 65 20 5b 44 52 4f 50 20 54 52 49 47 47   the [DROP TRIGG
f2e0: 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f  ER] statement.</
f2f0: 70 3e 0a 0a 3c 68 33 3e 53 79 6e 74 61 78 20 52  p>..<h3>Syntax R
f300: 65 73 74 72 69 63 74 69 6f 6e 73 20 4f 6e 20 55  estrictions On U
f310: 50 44 41 54 45 2c 20 44 45 4c 45 54 45 2c 20 61  PDATE, DELETE, a
f320: 6e 64 20 49 4e 53 45 52 54 20 53 74 61 74 65 6d  nd INSERT Statem
f330: 65 6e 74 73 20 57 69 74 68 69 6e 0a 20 20 20 20  ents Within.    
f340: 54 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c  Triggers</h3>..<
f350: 70 3e 5e 54 68 65 20 5b 55 50 44 41 54 45 5d 2c  p>^The [UPDATE],
f360: 20 5b 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b   [DELETE], and [
f370: 49 4e 53 45 52 54 5d 0a 73 74 61 74 65 6d 65 6e  INSERT].statemen
f380: 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
f390: 72 73 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72  rs do not suppor
f3a0: 74 0a 74 68 65 20 66 75 6c 6c 20 73 79 6e 74 61  t.the full synta
f3b0: 78 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 2c 20  x for [UPDATE], 
f3c0: 5b 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49  [DELETE], and [I
f3d0: 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74  NSERT] statement
f3e0: 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  s.  The followin
f3f0: 67 0a 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61  g.restrictions a
f400: 70 70 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a  pply:</p>..<ul>.
f410: 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20  <li><p>.  ^(The 
f420: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
f430: 65 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64  e to be modified
f440: 20 69 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c   in an [UPDATE],
f450: 20 5b 44 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49   [DELETE], or [I
f460: 4e 53 45 52 54 5d 0a 20 20 73 74 61 74 65 6d 65  NSERT].  stateme
f470: 6e 74 20 6d 75 73 74 20 62 65 20 61 6e 20 75 6e  nt must be an un
f480: 71 75 61 6c 69 66 69 65 64 20 74 61 62 6c 65 20  qualified table 
f490: 6e 61 6d 65 2e 20 20 49 6e 20 6f 74 68 65 72 20  name.  In other 
f4a0: 77 6f 72 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a  words, one must.
f4b0: 20 20 75 73 65 20 6a 75 73 74 20 22 3c 69 3e 74    use just "<i>t
f4c0: 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f  ablename</i>" no
f4d0: 74 20 22 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f  t "<i>database</
f4e0: 69 3e 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62  i><b>.</b><i>tab
f4f0: 6c 65 6e 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68  lename</i>".  wh
f500: 65 6e 20 73 70 65 63 69 66 79 69 6e 67 20 74 68  en specifying th
f510: 65 20 74 61 62 6c 65 2e 29 5e 20 3c 2f 70 3e 3c  e table.)^ </p><
f520: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 5e  /li>..<li><p>. ^
f530: 46 6f 72 20 6e 6f 6e 2d 54 45 4d 50 20 74 72 69  For non-TEMP tri
f540: 67 67 65 72 73 2c 0a 20 20 74 68 65 20 74 61 62  ggers,.  the tab
f550: 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65  le to be modifie
f560: 64 20 6f 72 20 71 75 65 72 69 65 64 20 6d 75 73  d or queried mus
f570: 74 20 65 78 69 73 74 20 69 6e 20 74 68 65 0a 20  t exist in the. 
f580: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
f590: 73 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  s the table or v
f5a0: 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
f5b0: 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61   trigger is atta
f5c0: 63 68 65 64 2e 0a 20 20 5e 28 54 45 4d 50 20 74  ched..  ^(TEMP t
f5d0: 72 69 67 67 65 72 73 20 61 72 65 20 6e 6f 74 20  riggers are not 
f5e0: 73 75 62 6a 65 63 74 20 74 6f 20 74 68 65 20 73  subject to the s
f5f0: 61 6d 65 2d 64 61 74 61 62 61 73 65 20 72 75 6c  ame-database rul
f600: 65 2e 20 20 41 20 54 45 4d 50 0a 20 20 74 72 69  e.  A TEMP.  tri
f610: 67 67 65 72 20 69 73 20 61 6c 6c 6f 77 65 64 20  gger is allowed 
f620: 74 6f 20 71 75 65 72 79 20 6f 72 20 6d 6f 64 69  to query or modi
f630: 66 79 20 61 6e 79 20 74 61 62 6c 65 20 69 6e 20  fy any table in 
f640: 61 6e 79 20 5b 41 54 54 41 43 48 5d 2d 65 64 20  any [ATTACH]-ed 
f650: 64 61 74 61 62 61 73 65 2e 29 5e 0a 20 20 3c 2f  database.)^.  </
f660: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
f670: 0a 20 20 5e 54 68 65 20 22 49 4e 53 45 52 54 20  .  ^The "INSERT 
f680: 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f 69  INTO <i>table</i
f690: 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53  > DEFAULT VALUES
f6a0: 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b 49  " form of the [I
f6b0: 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74  NSERT] statement
f6c0: 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72  .  is not suppor
f6d0: 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  ted..  </p></li>
f6e0: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65  ..<li><p>.  ^The
f6f0: 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20   INDEXED BY and 
f700: 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
f710: 73 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70  ses are not supp
f720: 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54  orted for [UPDAT
f730: 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45 54 45  E] and.  [DELETE
f740: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20  ] statements..  
f750: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
f760: 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44 45 52  p>.  ^(The ORDER
f770: 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c   BY and LIMIT cl
f780: 61 75 73 65 73 20 6f 6e 20 5b 55 50 44 41 54 45  auses on [UPDATE
f790: 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73  ] and [DELETE] s
f7a0: 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f  tatements are no
f7b0: 74 0a 20 20 73 75 70 70 6f 72 74 65 64 2e 20 20  t.  supported.  
f7c0: 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
f7d0: 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72 6d 61  IT are not norma
f7e0: 6c 6c 79 20 73 75 70 70 6f 72 74 65 64 20 66 6f  lly supported fo
f7f0: 72 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a 20 20  r [UPDATE] or.  
f800: 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e 79 20  [DELETE] in any 
f810: 63 6f 6e 74 65 78 74 20 62 75 74 20 63 61 6e 20  context but can 
f820: 62 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74  be enabled for t
f830: 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65  op-level stateme
f840: 6e 74 73 0a 20 20 75 73 69 6e 67 20 74 68 65 20  nts.  using the 
f850: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  [SQLITE_ENABLE_U
f860: 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
f870: 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  IT] compile-time
f880: 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65 76 65   option.  Howeve
f890: 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70 69 6c  r,.  that compil
f8a0: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f 6e  e-time option on
f8b0: 6c 79 20 61 70 70 6c 69 65 73 20 74 6f 20 74 6f  ly applies to to
f8c0: 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54 45 5d  p-level [UPDATE]
f8d0: 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a 20 20   and [DELETE].  
f8e0: 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f 74 20  statements, not 
f8f0: 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45  [UPDATE] and [DE
f900: 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73  LETE] statements
f910: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
f920: 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  .)^.  </p></li>.
f930: 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 5b 63 6f 6d  .<li><p>.  ^[com
f940: 6d 6f 6e 2d 74 61 62 6c 65 2d 65 78 70 72 65 73  mon-table-expres
f950: 73 69 6f 6e 7c 43 6f 6d 6d 6f 6e 20 74 61 62 6c  sion|Common tabl
f960: 65 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 61 72  e expression] ar
f970: 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20  e not supported 
f980: 66 6f 72 0a 20 20 73 74 61 74 65 6d 65 6e 74 73  for.  statements
f990: 20 69 6e 73 69 64 65 20 6f 66 20 74 72 69 67 67   inside of trigg
f9a0: 65 72 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  ers..  </p></li>
f9b0: 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  .</ul>..<tcl>hd_
f9c0: 66 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61 64  fragment instead
f9d0: 5f 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e 53  _of_trigger {INS
f9e0: 54 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45 41  TEAD OF} {INSTEA
f9f0: 44 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f 74  D OF trigger}</t
fa00: 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44 20  cl>.<h3>INSTEAD 
fa10: 4f 46 20 74 72 69 67 67 65 72 73 3c 2f 68 33 3e  OF triggers</h3>
fa20: 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 6d  ..<p>^Triggers m
fa30: 61 79 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e  ay be created on
fa40: 20 5b 76 69 65 77 73 5d 2c 20 61 73 20 77 65 6c   [views], as wel
fa50: 6c 20 61 73 20 6f 72 64 69 6e 61 72 79 20 74 61  l as ordinary ta
fa60: 62 6c 65 73 2c 20 62 79 0a 73 70 65 63 69 66 79  bles, by.specify
fa70: 69 6e 67 20 49 4e 53 54 45 41 44 20 4f 46 20 69  ing INSTEAD OF i
fa80: 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49  n the CREATE TRI
fa90: 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20  GGER statement. 
faa0: 0a 5e 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  .^If one or more
fab0: 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44   ON INSERT, ON D
fac0: 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41  ELETE.or ON UPDA
fad0: 54 45 20 74 72 69 67 67 65 72 73 20 61 72 65 20  TE triggers are 
fae0: 64 65 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65  defined on a vie
faf0: 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f  w, then it is no
fb00: 74 20 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78  t an.error to ex
fb10: 65 63 75 74 65 20 61 6e 20 49 4e 53 45 52 54 2c  ecute an INSERT,
fb20: 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
fb30: 45 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74  E statement on t
fb40: 68 65 20 76 69 65 77 2c 20 0a 72 65 73 70 65 63  he view, .respec
fb50: 74 69 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65 61  tively.  ^Instea
fb60: 64 2c 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20  d,.executing an 
fb70: 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f  INSERT, DELETE o
fb80: 72 20 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20  r UPDATE on the 
fb90: 76 69 65 77 20 63 61 75 73 65 73 20 74 68 65 20  view causes the 
fba0: 61 73 73 6f 63 69 61 74 65 64 0a 74 72 69 67 67  associated.trigg
fbb0: 65 72 73 20 74 6f 20 66 69 72 65 2e 20 5e 54 68  ers to fire. ^Th
fbc0: 65 20 72 65 61 6c 20 74 61 62 6c 65 73 20 75 6e  e real tables un
fbd0: 64 65 72 6c 79 69 6e 67 20 74 68 65 20 76 69 65  derlying the vie
fbe0: 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69  w are not modifi
fbf0: 65 64 0a 28 65 78 63 65 70 74 20 70 6f 73 73 69  ed.(except possi
fc00: 62 6c 79 20 65 78 70 6c 69 63 69 74 6c 79 2c 20  bly explicitly, 
fc10: 62 79 20 61 20 74 72 69 67 67 65 72 20 70 72 6f  by a trigger pro
fc20: 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  gram).</p>..<p>^
fc30: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5b 73  Note that the [s
fc40: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
fc50: 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 74  ] and [sqlite3_t
fc60: 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20  otal_changes()] 
fc70: 69 6e 74 65 72 66 61 63 65 73 0a 64 6f 20 6e 6f  interfaces.do no
fc80: 74 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20  t count INSTEAD 
fc90: 4f 46 20 74 72 69 67 67 65 72 20 66 69 72 69 6e  OF trigger firin
fca0: 67 73 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f 75  gs, but the.[cou
fcb0: 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d  nt_changes pragm
fcc0: 61 5d 20 64 6f 65 73 20 63 6f 75 6e 74 20 49 4e  a] does count IN
fcd0: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
fce0: 20 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68   firing.</p>..<h
fcf0: 33 3e 53 6f 6d 65 20 45 78 61 6d 70 6c 65 20 54  3>Some Example T
fd00: 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70  riggers</h3>..<p
fd10: 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74 68 61 74  >^(Assuming that
fd20: 20 63 75 73 74 6f 6d 65 72 20 72 65 63 6f 72 64   customer record
fd30: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
fd40: 74 68 65 20 22 63 75 73 74 6f 6d 65 72 73 22 20  the "customers" 
fd50: 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61 74 20  table, and.that 
fd60: 6f 72 64 65 72 20 72 65 63 6f 72 64 73 20 61 72  order records ar
fd70: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
fd80: 22 6f 72 64 65 72 73 22 20 74 61 62 6c 65 2c 20  "orders" table, 
fd90: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 55 50  the following.UP
fda0: 44 41 54 45 20 74 72 69 67 67 65 72 0a 65 6e 73  DATE trigger.ens
fdb0: 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20 61 73  ures that all as
fdc0: 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72 73 20  sociated orders 
fdd0: 61 72 65 20 72 65 64 69 72 65 63 74 65 64 20 77  are redirected w
fde0: 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72 20 63  hen a customer c
fdf0: 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20 68 65  hanges.his or he
fe00: 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a 0a  r address:</p>..
fe10: 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43  <tcl>Example {.C
fe20: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 75 70  REATE TRIGGER up
fe30: 64 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61 64  date_customer_ad
fe40: 64 72 65 73 73 20 55 50 44 41 54 45 20 4f 46 20  dress UPDATE OF 
fe50: 61 64 64 72 65 73 73 20 4f 4e 20 63 75 73 74 6f  address ON custo
fe60: 6d 65 72 73 20 0a 20 20 42 45 47 49 4e 0a 20 20  mers .  BEGIN.  
fe70: 20 20 55 50 44 41 54 45 20 6f 72 64 65 72 73 20    UPDATE orders 
fe80: 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 6e 65  SET address = ne
fe90: 77 2e 61 64 64 72 65 73 73 20 57 48 45 52 45 20  w.address WHERE 
fea0: 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20  customer_name = 
feb0: 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b  old.name;.  END;
fec0: 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74  .}</tcl>..<p>Wit
fed0: 68 20 74 68 69 73 20 74 72 69 67 67 65 72 20 69  h this trigger i
fee0: 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65 63 75 74  nstalled, execut
fef0: 69 6e 67 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ing the statemen
ff00: 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61  t:</p>..<tcl>Exa
ff10: 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75  mple {.UPDATE cu
ff20: 73 74 6f 6d 65 72 73 20 53 45 54 20 61 64 64 72  stomers SET addr
ff30: 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74  ess = '1 Main St
ff40: 2e 27 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20  .' WHERE name = 
ff50: 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c  'Jack Jones';.}<
ff60: 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73 65 73  /tcl>..<p>causes
ff70: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
ff80: 6f 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c  o be automatical
ff90: 6c 79 20 65 78 65 63 75 74 65 64 3a 3c 2f 70 3e  ly executed:</p>
ffa0: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
ffb0: 0a 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53  .UPDATE orders S
ffc0: 45 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20  ET address = '1 
ffd0: 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20  Main St.' WHERE 
ffe0: 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20  customer_name = 
fff0: 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c  'Jack Jones';.}<
10000 2f 74 63 6c 3e 29 5e 0a 0a 3c 70 3e 46 6f 72 20  /tcl>)^..<p>For 
10010 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 61 6e  an example of an
10020 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67   INSTEAD OF trig
10030 67 65 72 2c 20 63 6f 6e 73 69 64 65 72 20 74 68  ger, consider th
10040 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 68 65  e following sche
10050 6d 61 3a 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c  ma:..<tcl>Exampl
10060 65 20 7b 0a 43 52 45 41 54 45 20 54 41 42 4c 45  e {.CREATE TABLE
10070 20 63 75 73 74 6f 6d 65 72 28 0a 20 20 63 75 73   customer(.  cus
10080 74 5f 69 64 20 49 4e 54 45 47 45 52 20 50 52 49  t_id INTEGER PRI
10090 4d 41 52 59 20 4b 45 59 2c 0a 20 20 63 75 73 74  MARY KEY,.  cust
100a0 5f 6e 61 6d 65 20 54 45 58 54 2c 0a 20 20 63 75  _name TEXT,.  cu
100b0 73 74 5f 61 64 64 72 20 54 45 58 54 0a 29 3b 0a  st_addr TEXT.);.
100c0 43 52 45 41 54 45 20 56 49 45 57 20 63 75 73 74  CREATE VIEW cust
100d0 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 41 53 0a  omer_address AS.
100e0 20 20 20 53 45 4c 45 43 54 20 63 75 73 74 5f 69     SELECT cust_i
100f0 64 2c 20 63 75 73 74 5f 61 64 64 72 20 46 52 4f  d, cust_addr FRO
10100 4d 20 63 75 73 74 6f 6d 65 72 3b 0a 43 52 45 41  M customer;.CREA
10110 54 45 20 54 52 49 47 47 45 52 20 63 75 73 74 5f  TE TRIGGER cust_
10120 61 64 64 72 5f 63 68 6e 67 0a 49 4e 53 54 45 41  addr_chng.INSTEA
10130 44 20 4f 46 20 55 50 44 41 54 45 20 4f 46 20 63  D OF UPDATE OF c
10140 75 73 74 5f 61 64 64 72 20 4f 4e 20 63 75 73 74  ust_addr ON cust
10150 6f 6d 65 72 5f 61 64 64 72 65 73 73 0a 42 45 47  omer_address.BEG
10160 49 4e 0a 20 20 55 50 44 41 54 45 20 63 75 73 74  IN.  UPDATE cust
10170 6f 6d 65 72 20 53 45 54 20 63 75 73 74 5f 61 64  omer SET cust_ad
10180 64 72 3d 4e 45 57 2e 63 75 73 74 5f 61 64 64 72  dr=NEW.cust_addr
10190 0a 20 20 20 57 48 45 52 45 20 63 75 73 74 5f 69  .   WHERE cust_i
101a0 64 3d 4e 45 57 2e 63 75 73 74 5f 69 64 3b 0a 45  d=NEW.cust_id;.E
101b0 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ND;.}</tcl>..<p>
101c0 57 69 74 68 20 74 68 65 20 73 63 68 65 6d 61 20  With the schema 
101d0 61 62 6f 76 65 2c 20 61 20 73 74 61 74 65 6d 65  above, a stateme
101e0 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 3a 3c  nt of the form:<
101f0 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c  /p>..<tcl>Exampl
10200 65 20 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f  e {.UPDATE custo
10210 6d 65 72 5f 61 64 64 72 65 73 73 20 53 45 54 20  mer_address SET 
10220 63 75 73 74 5f 61 64 64 72 3d 24 6e 65 77 5f 61  cust_addr=$new_a
10230 64 64 72 65 73 73 20 57 48 45 52 45 20 63 75 73  ddress WHERE cus
10240 74 5f 69 64 3d 24 63 75 73 74 5f 69 64 3b 0a 7d  t_id=$cust_id;.}
10250 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61 75 73 65  </tcl>..<p>Cause
10260 73 20 74 68 65 20 63 75 73 74 6f 6d 65 72 2e 63  s the customer.c
10270 75 73 74 5f 61 64 64 72 20 66 69 65 6c 64 20 74  ust_addr field t
10280 6f 20 62 65 20 75 70 64 61 74 65 64 20 66 6f 72  o be updated for
10290 20 61 20 73 70 65 63 69 66 69 63 0a 63 75 73 74   a specific.cust
102a0 6f 6d 65 72 20 65 6e 74 72 79 20 74 68 61 74 20  omer entry that 
102b0 68 61 73 20 63 75 73 74 6f 6d 65 72 2e 63 75 73  has customer.cus
102c0 74 5f 69 64 20 65 71 75 61 6c 20 74 6f 20 74 68  t_id equal to th
102d0 65 20 24 63 75 73 74 5f 69 64 20 70 61 72 61 6d  e $cust_id param
102e0 65 74 65 72 2e 0a 4e 6f 74 65 20 68 6f 77 20 74  eter..Note how t
102f0 68 65 20 76 61 6c 75 65 73 20 61 73 73 69 67 6e  he values assign
10300 65 64 20 74 6f 20 74 68 65 20 76 69 65 77 20 61  ed to the view a
10310 72 65 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c  re made availabl
10320 65 20 61 73 20 66 69 65 6c 64 0a 69 6e 20 74 68  e as field.in th
10330 65 20 73 70 65 63 69 61 6c 20 22 4e 45 57 22 20  e special "NEW" 
10340 74 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68 65  table within the
10350 20 74 72 69 67 67 65 72 20 62 6f 64 79 2e 3c 2f   trigger body.</
10360 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
10370 6d 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f 72  ment undef_befor
10380 65 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45 46  e {undefined BEF
10390 4f 52 45 20 74 72 69 67 67 65 72 20 62 65 68 61  ORE trigger beha
103a0 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  vior}</tcl>.<h3>
103b0 43 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65 20  Cautions On The 
103c0 55 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74 72  Use Of BEFORE tr
103d0 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
103e0 49 66 20 61 20 42 45 46 4f 52 45 20 55 50 44 41  If a BEFORE UPDA
103f0 54 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45 4c  TE or BEFORE DEL
10400 45 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64 69  ETE trigger modi
10410 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  fies or deletes 
10420 61 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20 74  a row.that was t
10430 6f 20 68 61 76 65 20 62 65 65 6e 20 75 70 64 61  o have been upda
10440 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c 20  ted or deleted, 
10450 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
10460 6f 66 20 74 68 65 20 73 75 62 73 65 71 75 65 6e  of the subsequen
10470 74 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c 65  t.update or dele
10480 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  te operation is 
10490 75 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72 74  undefined.  Furt
104a0 68 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42 45  hermore, if a BE
104b0 46 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f 64  FORE trigger.mod
104c0 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73  ifies or deletes
104d0 20 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74 20   a row, then it 
104e0 69 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68 65  is undefined whe
104f0 74 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54 45  ther or not AFTE
10500 52 20 74 72 69 67 67 65 72 73 0a 74 68 61 74 20  R triggers.that 
10510 77 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65 72  would have other
10520 77 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f 73  wise run on thos
10530 65 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20 66  e rows will in f
10540 61 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c  act run..</p>..<
10550 70 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e  p>The value of N
10560 45 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64 65  EW.rowid is unde
10570 66 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f 52  fined in a BEFOR
10580 45 20 49 4e 53 45 52 54 20 74 72 69 67 67 65 72  E INSERT trigger
10590 20 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72 6f   in which.the ro
105a0 77 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c 69  wid is not expli
105b0 63 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e 20  citly set to an 
105c0 69 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70  integer.</p>..<p
105d0 3e 42 65 63 61 75 73 65 20 6f 66 20 74 68 65 20  >Because of the 
105e0 62 65 68 61 76 69 6f 72 73 20 64 65 73 63 72 69  behaviors descri
105f0 62 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67 72  bed above, progr
10600 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75  ammers are encou
10610 72 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72 20  raged to.prefer 
10620 41 46 54 45 52 20 74 72 69 67 67 65 72 73 20 6f  AFTER triggers o
10630 76 65 72 20 42 45 46 4f 52 45 20 74 72 69 67 67  ver BEFORE trigg
10640 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ers.</p>..<tcl>h
10650 64 5f 66 72 61 67 6d 65 6e 74 20 72 61 69 73 65  d_fragment raise
10660 20 7b 52 41 49 53 45 20 66 75 6e 63 74 69 6f 6e   {RAISE function
10670 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
10680 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e  RAISE() function
10690 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73 70  </h3>..<p>^(A sp
106a0 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63 74 69  ecial SQL functi
106b0 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79 20 62  on RAISE() may b
106c0 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 61 20  e used within a 
106d0 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2c  trigger-program,
106e0 29 5e 0a 77 69 74 68 20 74 68 65 20 66 6f 6c 6c  )^.with the foll
106f0 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e  owing syntax</p>
10700 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69   ..<tcl>BubbleDi
10710 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75 6e 63  agram raise-func
10720 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tion</tcl>..<p>^
10730 28 57 68 65 6e 20 6f 6e 65 20 6f 66 20 52 41 49  (When one of RAI
10740 53 45 28 52 4f 4c 4c 42 41 43 4b 2c 2e 2e 2e 29  SE(ROLLBACK,...)
10750 2c 20 52 41 49 53 45 28 41 42 4f 52 54 2c 2e 2e  , RAISE(ABORT,..
10760 2e 29 20 6f 72 20 52 41 49 53 45 28 46 41 49 4c  .) or RAISE(FAIL
10770 2c 2e 2e 2e 29 0a 69 73 20 63 61 6c 6c 65 64 20  ,...).is called 
10780 64 75 72 69 6e 67 20 74 72 69 67 67 65 72 2d 70  during trigger-p
10790 72 6f 67 72 61 6d 0a 65 78 65 63 75 74 69 6f 6e  rogram.execution
107a0 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  , the specified 
107b0 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 70 72  [ON CONFLICT] pr
107c0 6f 63 65 73 73 69 6e 67 20 69 73 20 70 65 72 66  ocessing is perf
107d0 6f 72 6d 65 64 0a 74 68 65 20 63 75 72 72 65 6e  ormed.the curren
107e0 74 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61 74  t query terminat
107f0 65 73 2e 29 5e 0a 41 6e 20 65 72 72 6f 72 20 63  es.)^.An error c
10800 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54 45 5f 43  ode of [SQLITE_C
10810 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73 20 72 65  ONSTRAINT] is re
10820 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 61 70  turned to the ap
10830 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67  plication,.along
10840 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
10850 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ied error messag
10860 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  e.</p>..<p>^When
10870 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20 69   RAISE(IGNORE) i
10880 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 72 65  s called, the re
10890 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20 63  mainder of the c
108a0 75 72 72 65 6e 74 20 74 72 69 67 67 65 72 20 70  urrent trigger p
108b0 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74 61 74  rogram,.the stat
108c0 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65  ement that cause
108d0 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  d the trigger pr
108e0 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65  ogram to execute
108f0 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65 71 75   and any subsequ
10900 65 6e 74 0a 74 72 69 67 67 65 72 20 70 72 6f 67  ent.trigger prog
10910 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c 64 20  rams that would 
10920 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74  have been execut
10930 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e 65 64  ed are abandoned
10940 2e 20 5e 4e 6f 20 64 61 74 61 62 61 73 65 0a 63  . ^No database.c
10950 68 61 6e 67 65 73 20 61 72 65 20 72 6f 6c 6c 65  hanges are rolle
10960 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65  d back.  ^If the
10970 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
10980 63 61 75 73 65 64 20 74 68 65 20 74 72 69 67 67  caused the trigg
10990 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20 65 78  er program.to ex
109a0 65 63 75 74 65 20 69 73 20 69 74 73 65 6c 66 20  ecute is itself 
109b0 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
109c0 72 20 70 72 6f 67 72 61 6d 2c 20 74 68 65 6e 20  r program, then 
109d0 74 68 61 74 20 74 72 69 67 67 65 72 20 70 72 6f  that trigger pro
109e0 67 72 61 6d 0a 72 65 73 75 6d 65 73 20 65 78 65  gram.resumes exe
109f0 63 75 74 69 6f 6e 20 61 74 20 74 68 65 20 62 65  cution at the be
10a00 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 6e  ginning of the n
10a10 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a  ext step..</p>..
10a20 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
10a30 20 74 65 6d 70 74 72 69 67 20 7b 54 45 4d 50 20   temptrig {TEMP 
10a40 74 72 69 67 67 65 72 73 20 6f 6e 20 6e 6f 6e 2d  triggers on non-
10a50 54 45 4d 50 20 74 61 62 6c 65 73 7d 3c 2f 74 63  TEMP tables}</tc
10a60 6c 3e 0a 3c 68 33 3e 54 45 4d 50 20 54 72 69 67  l>.<h3>TEMP Trig
10a70 67 65 72 73 20 6f 6e 20 4e 6f 6e 2d 54 45 4d 50  gers on Non-TEMP
10a80 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70   Tables</h3>..<p
10a90 3e 5e 28 41 20 74 72 69 67 67 65 72 20 6e 6f 72  >^(A trigger nor
10aa0 6d 61 6c 6c 79 20 65 78 69 73 74 73 20 69 6e 20  mally exists in 
10ab0 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
10ac0 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 6e  e as the table n
10ad0 61 6d 65 64 0a 61 66 74 65 72 20 74 68 65 20 22  amed.after the "
10ae0 4f 4e 22 20 6b 65 79 77 6f 72 64 20 69 6e 20 74  ON" keyword in t
10af0 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47 45  he CREATE TRIGGE
10b00 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 45 78  R statement.  Ex
10b10 63 65 70 74 2c 20 69 74 20 69 73 0a 70 6f 73 73  cept, it is.poss
10b20 69 62 6c 65 20 74 6f 20 63 72 65 61 74 65 20 61  ible to create a
10b30 20 54 45 4d 50 20 54 52 49 47 47 45 52 20 6f 6e   TEMP TRIGGER on
10b40 20 61 20 74 61 62 6c 65 20 69 6e 20 61 6e 6f 74   a table in anot
10b50 68 65 72 20 64 61 74 61 62 61 73 65 2e 29 5e 20  her database.)^ 
10b60 20 0a 53 75 63 68 20 61 20 74 72 69 67 67 65 72   .Such a trigger
10b70 20 77 69 6c 6c 20 6f 6e 6c 79 20 66 69 72 65 20   will only fire 
10b80 77 68 65 6e 20 63 68 61 6e 67 65 73 0a 61 72 65  when changes.are
10b90 20 6d 61 64 65 20 74 6f 20 74 68 65 20 74 61 72   made to the tar
10ba0 67 65 74 20 74 61 62 6c 65 20 62 79 20 74 68 65  get table by the
10bb0 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74 68 61   application tha
10bc0 74 20 64 65 66 69 6e 65 64 20 74 68 65 20 74 72  t defined the tr
10bd0 69 67 67 65 72 2e 0a 4f 74 68 65 72 20 61 70 70  igger..Other app
10be0 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d  lications that m
10bf0 6f 64 69 66 79 20 74 68 65 20 64 61 74 61 62 61  odify the databa
10c00 73 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 61  se will not be a
10c10 62 6c 65 20 74 6f 20 73 65 65 20 74 68 65 0a 54  ble to see the.T
10c20 45 4d 50 20 74 72 69 67 67 65 72 20 61 6e 64 20  EMP trigger and 
10c30 68 65 6e 63 65 20 63 61 6e 6e 6f 74 20 72 75 6e  hence cannot run
10c40 20 74 68 65 20 74 72 69 67 67 65 72 2e 3c 2f 70   the trigger.</p
10c50 3e 0a 0a 3c 70 3e 57 68 65 6e 20 64 65 66 69 6e  >..<p>When defin
10c60 69 6e 67 20 61 20 54 45 4d 50 20 74 72 69 67 67  ing a TEMP trigg
10c70 65 72 20 6f 6e 20 61 20 6e 6f 6e 2d 54 45 4d 50  er on a non-TEMP
10c80 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20 69 6d   table, it is im
10c90 70 6f 72 74 61 6e 74 20 74 6f 0a 73 70 65 63 69  portant to.speci
10ca0 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20  fy the database 
10cb0 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e 6f 6e 2d  holding the non-
10cc0 54 45 4d 50 20 74 61 62 6c 65 2e 20 20 46 6f 72  TEMP table.  For
10cd0 20 65 78 61 6d 70 6c 65 2c 0a 69 6e 20 74 68 65   example,.in the
10ce0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65   following state
10cf0 6d 65 6e 74 2c 20 69 74 20 69 73 20 69 6d 70 6f  ment, it is impo
10d00 72 74 61 6e 74 20 74 6f 20 73 61 79 20 22 6d 61  rtant to say "ma
10d10 69 6e 2e 74 61 62 31 22 20 69 6e 73 74 65 61 64  in.tab1" instead
10d20 0a 6f 66 20 6a 75 73 74 20 22 74 61 62 31 22 3a  .of just "tab1":
10d30 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
10d40 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
10d50 45 4d 50 20 54 52 49 47 47 45 52 20 65 78 31 20  EMP TRIGGER ex1 
10d60 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20  AFTER INSERT ON 
10d70 3c 62 3e 6d 61 69 6e 2e 3c 2f 62 3e 74 61 62 31  <b>main.</b>tab1
10d80 20 42 45 47 49 4e 20 2e 2e 2e 0a 3c 2f 70 72 65   BEGIN ....</pre
10d90 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
10da0 3c 70 3e 46 61 69 6c 75 72 65 20 74 6f 20 73 70  <p>Failure to sp
10db0 65 63 69 66 79 20 74 68 65 20 73 63 68 65 6d 61  ecify the schema
10dc0 20 6e 61 6d 65 20 6f 6e 20 74 68 65 20 74 61 72   name on the tar
10dd0 67 65 74 20 74 61 62 6c 65 20 63 6f 75 6c 64 20  get table could 
10de0 72 65 73 75 6c 74 0a 69 6e 20 74 68 65 20 54 45  result.in the TE
10df0 4d 50 20 74 72 69 67 67 65 72 20 62 65 69 6e 67  MP trigger being
10e00 20 72 65 61 74 74 61 63 68 65 64 20 74 6f 20 61   reattached to a
10e10 20 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20   table with the 
10e20 73 61 6d 65 20 6e 61 6d 65 20 69 6e 0a 61 6e 6f  same name in.ano
10e30 74 68 65 72 20 64 61 74 61 62 61 73 65 20 77 68  ther database wh
10e40 65 6e 65 76 65 72 20 61 6e 79 20 73 63 68 65 6d  enever any schem
10e50 61 20 63 68 61 6e 67 65 20 6f 63 63 75 72 73 2e  a change occurs.
10e60 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
10e70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10eb0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
10ec0 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 45 57  ion {CREATE VIEW
10ed0 7d 20 7b 63 72 65 61 74 65 76 69 65 77 7d 20 7b  } {createview} {
10ee0 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20 76 69  {CREATE VIEW} vi
10ef0 65 77 20 56 49 45 57 20 2a 76 69 65 77 73 7d 0a  ew VIEW *views}.
10f00 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
10f10 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76  Diagram create-v
10f20 69 65 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  iew-stmt.</tcl>.
10f30 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20  .<p>^The CREATE 
10f40 56 49 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73  VIEW command ass
10f50 69 67 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61  igns a name to a
10f60 20 70 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b   pre-packaged .[
10f70 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
10f80 74 2e 20 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69  t. .^Once the vi
10f90 65 77 20 69 73 20 63 72 65 61 74 65 64 2c 20 69  ew is created, i
10fa0 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  t can be used in
10fb0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
10fc0 0a 6f 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c  .of another [SEL
10fd0 45 43 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66  ECT] in place of
10fe0 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c   a table name..<
10ff0 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
11000 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f  "TEMP" or "TEMPO
11010 52 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63  RARY" keyword oc
11020 63 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20  curs in between 
11030 22 43 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49  "CREATE".and "VI
11040 45 57 22 20 74 68 65 6e 20 74 68 65 20 76 69 65  EW" then the vie
11050 77 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65  w that is create
11060 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c  d is only visibl
11070 65 20 74 6f 20 74 68 65 0a 5b 64 61 74 61 62 61  e to the.[databa
11080 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 74  se connection] t
11090 68 61 74 20 63 72 65 61 74 65 64 20 69 74 20 61  hat created it a
110a0 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61  nd is automatica
110b0 6c 6c 79 20 64 65 6c 65 74 65 64 20 77 68 65 6e  lly deleted when
110c0 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f  .the database co
110d0 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73  nnection is clos
110e0 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66  ed.</p>..<p> ^If
110f0 20 61 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d   a <yyterm>schem
11100 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  a-name</yyterm> 
11110 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
11120 65 6e 20 74 68 65 20 76 69 65 77 20 0a 69 73 20  en the view .is 
11130 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 73  created in the s
11140 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73  pecified databas
11150 65 2e 0a 5e 49 74 20 69 73 20 61 6e 20 65 72 72  e..^It is an err
11160 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f  or to specify bo
11170 74 68 20 61 20 3c 79 79 74 65 72 6d 3e 73 63 68  th a <yyterm>sch
11180 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ema-name</yyterm
11190 3e 0a 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b  >.and the TEMP k
111a0 65 79 77 6f 72 64 20 6f 6e 20 61 20 56 49 45 57  eyword on a VIEW
111b0 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 3c 79 79  , unless the <yy
111c0 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
111d0 3c 2f 79 79 74 65 72 6d 3e 20 0a 69 73 20 22 74  </yyterm> .is "t
111e0 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f 20 73 63 68  emp"..^If no sch
111f0 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70 65 63  ema name is spec
11200 69 66 69 65 64 2c 20 61 6e 64 20 74 68 65 20 54  ified, and the T
11210 45 4d 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e  EMP keyword is n
11220 6f 74 20 70 72 65 73 65 6e 74 2c 0a 74 68 65 20  ot present,.the 
11230 56 49 45 57 20 69 73 20 63 72 65 61 74 65 64 20  VIEW is created 
11240 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
11250 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 59  base.</p>..<p>^Y
11260 6f 75 20 63 61 6e 6e 6f 74 20 5b 44 45 4c 45 54  ou cannot [DELET
11270 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 6f 72  E], [INSERT], or
11280 20 5b 55 50 44 41 54 45 5d 20 61 20 76 69 65 77   [UPDATE] a view
11290 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20 72 65  .  ^Views are re
112a0 61 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51 4c 69  ad-only .in SQLi
112b0 74 65 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 69  te.  ^However, i
112c0 6e 20 6d 61 6e 79 20 63 61 73 65 73 20 79 6f 75  n many cases you
112d0 20 63 61 6e 20 75 73 65 20 61 6e 0a 5b 49 4e 53   can use an.[INS
112e0 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 5d  TEAD OF trigger]
112f0 20 6f 6e 20 74 68 65 20 76 69 65 77 20 74 6f 20   on the view to 
11300 61 63 63 6f 6d 70 6c 69 73 68 20 0a 74 68 65 20  accomplish .the 
11310 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 5e 56 69  same thing.  ^Vi
11320 65 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ews are removed 
11330 0a 77 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20  .with the [DROP 
11340 56 49 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f  VIEW] command.</
11350 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 3c 79 79  p>..<p>^If a <yy
11360 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  term>column-name
11370 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74 20 66  </yyterm> list f
11380 6f 6c 6c 6f 77 73 20 0a 74 68 65 20 3c 79 79 74  ollows .the <yyt
11390 65 72 6d 3e 76 69 65 77 2d 6e 61 6d 65 3c 2f 79  erm>view-name</y
113a0 79 74 65 72 6d 3e 2c 20 74 68 65 6e 20 74 68 61  yterm>, then tha
113b0 74 20 6c 69 73 74 20 64 65 74 65 72 6d 69 6e 65  t list determine
113c0 73 0a 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74  s.the names of t
113d0 68 65 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74  he columns for t
113e0 68 65 20 76 69 65 77 2e 20 20 5e 49 66 20 74 68  he view.  ^If th
113f0 65 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e  e <yyterm>column
11400 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 6c  -name</yyterm>.l
11410 69 73 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ist is omitted, 
11420 74 68 65 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f  then the names o
11430 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  f the columns in
11440 20 74 68 65 20 76 69 65 77 20 61 72 65 20 64 65   the view are de
11450 72 69 76 65 64 0a 66 72 6f 6d 20 74 68 65 20 6e  rived.from the n
11460 61 6d 65 73 20 6f 66 20 74 68 65 20 72 65 73 75  ames of the resu
11470 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 69  lt-set columns i
11480 6e 20 74 68 65 20 5b 73 65 6c 65 63 74 2d 73 74  n the [select-st
11490 6d 74 5d 2e 0a 54 68 65 20 75 73 65 20 6f 66 20  mt]..The use of 
114a0 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e  <yyterm>column-n
114b0 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73  ame</yyterm> lis
114c0 74 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64  t is recommended
114d0 2e 20 20 4f 72 2c 20 69 66 0a 3c 79 79 74 65 72  .  Or, if.<yyter
114e0 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79  m>column-name</y
114f0 79 74 65 72 6d 3e 20 6c 69 73 74 20 69 73 20 6f  yterm> list is o
11500 6d 69 74 74 65 64 2c 20 74 68 65 6e 20 74 68 65  mitted, then the
11510 20 72 65 73 75 6c 74 0a 63 6f 6c 75 6d 6e 73 20   result.columns 
11520 69 6e 20 74 68 65 20 5b 53 45 4c 45 43 54 5d 20  in the [SELECT] 
11530 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 64  statement that d
11540 65 66 69 6e 65 73 20 74 68 65 20 76 69 65 77 20  efines the view 
11550 73 68 6f 75 6c 64 20 68 61 76 65 0a 77 65 6c 6c  should have.well
11560 2d 64 65 66 69 6e 65 64 20 6e 61 6d 65 73 20 75  -defined names u
11570 73 69 6e 67 20 74 68 65 20 0a 22 5b 72 65 73 75  sing the ."[resu
11580 6c 74 2d 63 6f 6c 75 6d 6e 7c 41 53 20 63 6f 6c  lt-column|AS col
11590 75 6d 6e 2d 61 6c 69 61 73 5d 22 20 73 79 6e 74  umn-alias]" synt
115a0 61 78 2e 0a 53 51 4c 69 74 65 20 61 6c 6c 6f 77  ax..SQLite allow
115b0 73 20 79 6f 75 20 74 6f 20 63 72 65 61 74 65 20  s you to create 
115c0 76 69 65 77 73 20 74 68 61 74 20 64 65 70 65 6e  views that depen
115d0 64 20 6f 6e 20 61 75 74 6f 6d 61 74 69 63 61 6c  d on automatical
115e0 6c 79 20 0a 67 65 6e 65 72 61 74 65 64 20 63 6f  ly .generated co
115f0 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 62 75 74 20  lumn names, but 
11600 79 6f 75 20 73 68 6f 75 6c 64 20 61 76 6f 69 64  you should avoid
11610 20 75 73 69 6e 67 20 74 68 65 6d 20 73 69 6e 63   using them sinc
11620 65 20 74 68 65 20 0a 72 75 6c 65 73 20 75 73 65  e the .rules use
11630 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f  d to generate co
11640 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 72 65 20 6e  lumn names are n
11650 6f 74 20 61 20 64 65 66 69 6e 65 64 20 70 61 72  ot a defined par
11660 74 20 6f 66 20 74 68 65 0a 69 6e 74 65 72 66 61  t of the.interfa
11670 63 65 20 61 6e 64 20 6d 69 67 68 74 20 63 68 61  ce and might cha
11680 6e 67 65 20 69 6e 20 66 75 74 75 72 65 20 72 65  nge in future re
11690 6c 65 61 73 65 73 20 6f 66 20 53 51 4c 69 74 65  leases of SQLite
116a0 2e 0a 0a 3c 70 3e 54 68 65 20 3c 79 79 74 65 72  ...<p>The <yyter
116b0 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79  m>column-name</y
116c0 79 74 65 72 6d 3e 20 6c 69 73 74 20 73 79 6e 74  yterm> list synt
116d0 61 78 20 77 61 73 20 61 64 64 65 64 20 69 6e 0a  ax was added in.
116e0 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  SQLite versions 
116f0 33 2e 39 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33  3.9.0 ([dateof:3
11700 2e 39 2e 30 5d 29 2e 0a 0a 3c 74 63 6c 3e 0a 23  .9.0])...<tcl>.#
11710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11750 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
11760 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49  ction {CREATE VI
11770 52 54 55 41 4c 20 54 41 42 4c 45 7d 20 7b 63 72  RTUAL TABLE} {cr
11780 65 61 74 65 76 74 61 62 7d 20 7b 7b 43 52 45 41  eatevtab} {{CREA
11790 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
117a0 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  }}..RecursiveBub
117b0 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
117c0 65 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 2d  e-virtual-table-
117d0 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
117e0 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65  A [virtual table
117f0 5d 20 69 73 20 61 6e 20 69 6e 74 65 72 66 61 63  ] is an interfac
11800 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e 61 6c  e to an external
11810 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d 70   storage or comp
11820 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20 74  utation.engine t
11830 68 61 74 20 61 70 70 65 61 72 73 20 74 6f 20 62  hat appears to b
11840 65 20 61 20 74 61 62 6c 65 20 62 75 74 20 64 6f  e a table but do
11850 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  es not actually 
11860 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f  store informatio
11870 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  n.in the databas
11880 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e file.</p>..<p>
11890 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75 20  In general, you 
118a0 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67 20  can do anything 
118b0 77 69 74 68 20 61 20 5b 76 69 72 74 75 61 6c 20  with a [virtual 
118c0 74 61 62 6c 65 5d 20 74 68 61 74 20 63 61 6e 20  table] that can 
118d0 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e 20  be done.with an 
118e0 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 2c 20  ordinary table, 
118f0 65 78 63 65 70 74 20 74 68 61 74 20 5e 79 6f 75  except that ^you
11900 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 69   cannot create i
11910 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67 67 65  ndices or trigge
11920 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c 20  rs on a.virtual 
11930 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20 76 69  table.  ^Some vi
11940 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
11950 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68  ementations migh
11960 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74 69 6f  t impose additio
11970 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e 73  nal.restrictions
11980 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
11990 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74 61 62  many virtual tab
119a0 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c  les are read-onl
119b0 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 3c  y.</p>..<p>The <
119c0 79 79 74 65 72 6d 3e 6d 6f 64 75 6c 65 2d 6e 61  yyterm>module-na
119d0 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 74  me</yyterm> is t
119e0 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 6f 62  he name of an ob
119f0 6a 65 63 74 20 74 68 61 74 20 69 6d 70 6c 65 6d  ject that implem
11a00 65 6e 74 73 0a 74 68 65 20 76 69 72 74 75 61 6c  ents.the virtual
11a10 20 74 61 62 6c 65 2e 20 20 5e 54 68 65 20 3c 79   table.  ^The <y
11a20 79 74 65 72 6d 3e 6d 6f 64 75 6c 65 2d 6e 61 6d  yterm>module-nam
11a30 65 3c 2f 79 79 74 65 72 6d 3e 20 6d 75 73 74 20  e</yyterm> must 
11a40 62 65 20 72 65 67 69 73 74 65 72 65 64 20 77 69  be registered wi
11a50 74 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61  th.the SQLite da
11a60 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
11a70 6e 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33  n using.[sqlite3
11a80 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
11a90 5d 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63 72  ] or [sqlite3_cr
11aa0 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29  eate_module_v2()
11ab0 5d 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69  ].prior to issui
11ac0 6e 67 20 74 68 65 20 43 52 45 41 54 45 20 56 49  ng the CREATE VI
11ad0 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
11ae0 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75  ement..^The modu
11af0 6c 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72  le takes zero or
11b00 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61   more comma-sepa
11b10 72 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73 2e  rated arguments.
11b20 0a 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20  .^The arguments 
11b30 63 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f 75  can be just abou
11b40 74 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c 6f  t any text as lo
11b50 6e 67 20 61 73 20 69 74 20 68 61 73 20 62 61 6c  ng as it has bal
11b60 61 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73 65  anced.parenthese
11b70 73 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74  s.  The argument
11b80 20 73 79 6e 74 61 78 20 69 73 20 73 75 66 66 69   syntax is suffi
11b90 63 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20  ciently general 
11ba0 74 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65 6e  that the.argumen
11bb0 74 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  ts can be made t
11bc0 6f 20 61 70 70 65 61 72 20 61 73 20 5b 63 6f 6c  o appear as [col
11bd0 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d  umn definitions]
11be0 20 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61   in a traditiona
11bf0 6c 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  l.[CREATE TABLE]
11c00 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53   statement.  .^S
11c10 51 4c 69 74 65 20 70 61 73 73 65 73 20 74 68 65  QLite passes the
11c20 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74   module argument
11c30 73 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68  s directly.to th
11c40 65 20 5b 78 43 72 65 61 74 65 5d 20 61 6e 64 20  e [xCreate] and 
11c50 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f  [xConnect] metho
11c60 64 73 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  ds of the module
11c70 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a   implementation.
11c80 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65  without any inte
11c90 72 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20  rpretation.  It 
11ca0 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62  is the responsib
11cb0 69 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64  ility.of the mod
11cc0 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
11cd0 6f 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20  on to parse and 
11ce0 69 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f 77  interpret its ow
11cf0 6e 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e  n arguments.</p>
11d00 0a 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c 20  ..<p>^A virtual 
11d10 74 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79  table is destroy
11d20 65 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64  ed using the ord
11d30 69 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c  inary.[DROP TABL
11d40 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
11d50 68 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20  here is no.DROP 
11d60 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74  VIRTUAL TABLE st
11d70 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74  atement.</p>..<t
11d80 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
11d90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11db0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11dd0 23 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54  ##.Section DELET
11de0 45 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45  E delete {DELETE
11df0 20 2a 44 45 4c 45 54 45 73 7d 0a 0a 52 65 63 75   *DELETEs}..Recu
11e00 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
11e10 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 0a 3c  am delete-stmt.<
11e20 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44 45  /tcl>..<p>The DE
11e30 4c 45 54 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6d  LETE command rem
11e40 6f 76 65 73 20 72 65 63 6f 72 64 73 20 66 72 6f  oves records fro
11e50 6d 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e  m the table iden
11e60 74 69 66 69 65 64 20 62 79 20 74 68 65 0a 20 20  tified by the.  
11e70 20 5b 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c   [qualified-tabl
11e80 65 2d 6e 61 6d 65 5d 2e 0a 0a 3c 70 3e 5e 49 66  e-name]...<p>^If
11e90 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
11ea0 65 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  e is not present
11eb0 2c 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 69 6e  , all records in
11ec0 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 20 64   the table are d
11ed0 65 6c 65 74 65 64 2e 0a 20 20 20 5e 49 66 20 61  eleted..   ^If a
11ee0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
11ef0 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 6e 20   supplied, then 
11f00 6f 6e 6c 79 20 74 68 6f 73 65 20 72 6f 77 73 20  only those rows 
11f10 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a 20 20  for which the.  
11f20 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 5b 62   WHERE clause [b
11f30 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
11f40 6e 5d 20 69 73 20 74 72 75 65 20 61 72 65 20 64  n] is true are d
11f50 65 6c 65 74 65 64 2e 0a 20 20 20 5e 52 6f 77 73  eleted..   ^Rows
11f60 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 65   for which the e
11f70 78 70 72 65 73 73 69 6f 6e 20 69 73 20 66 61 6c  xpression is fal
11f80 73 65 20 6f 72 20 4e 55 4c 4c 20 61 72 65 20 72  se or NULL are r
11f90 65 74 61 69 6e 65 64 2e 0a 0a 3c 68 33 3e 52 65  etained...<h3>Re
11fa0 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 44 45  strictions on DE
11fb0 4c 45 54 45 20 53 74 61 74 65 6d 65 6e 74 73 20  LETE Statements 
11fc0 57 69 74 68 69 6e 20 43 52 45 41 54 45 20 54 52  Within CREATE TR
11fd0 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  IGGER</h3>..<p>T
11fe0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73  he following res
11ff0 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  trictions apply 
12000 74 6f 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  to DELETE statem
12010 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75 72 20  ents that occur 
12020 77 69 74 68 69 6e 20 74 68 65 0a 20 20 20 62 6f  within the.   bo
12030 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54 45 20  dy of a [CREATE 
12040 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
12050 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  nt:..<ul>.  <li>
12060 3c 70 3e 5e 54 68 65 20 3c 79 79 74 65 72 6d 3e  <p>^The <yyterm>
12070 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  table-name</yyte
12080 72 6d 3e 20 73 70 65 63 69 66 69 65 64 20 61 73  rm> specified as
12090 20 70 61 72 74 20 6f 66 20 61 20 0a 20 20 20 20   part of a .    
120a0 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
120b0 20 77 69 74 68 69 6e 0a 20 20 20 20 61 20 74 72   within.    a tr
120c0 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73 74 20  igger body must 
120d0 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20  be unqualified. 
120e0 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64   ^(In other word
120f0 73 2c 20 74 68 65 0a 20 20 20 20 3c 69 3e 73 63  s, the.    <i>sc
12100 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e  hema-name</i><b>
12110 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e 20  .</b> prefix on 
12120 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  the table name i
12130 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 0a 20  s not allowed . 
12140 20 20 20 77 69 74 68 69 6e 20 74 72 69 67 67 65     within trigge
12150 72 73 2e 29 5e 20 5e 49 66 20 74 68 65 20 74 61  rs.)^ ^If the ta
12160 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65  ble to which the
12170 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61   trigger is atta
12180 63 68 65 64 20 69 73 0a 20 20 20 20 6e 6f 74 20  ched is.    not 
12190 69 6e 20 74 68 65 20 74 65 6d 70 20 64 61 74 61  in the temp data
121a0 62 61 73 65 2c 20 74 68 65 6e 20 44 45 4c 45 54  base, then DELET
121b0 45 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  E statements wit
121c0 68 69 6e 20 74 68 65 20 74 72 69 67 67 65 72 0a  hin the trigger.
121d0 20 20 20 20 62 6f 64 79 20 6d 75 73 74 20 6f 70      body must op
121e0 65 72 61 74 65 20 6f 6e 20 74 61 62 6c 65 73 20  erate on tables 
121f0 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
12200 64 61 74 61 62 61 73 65 20 61 73 20 69 74 2e 20  database as it. 
12210 5e 49 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20  ^If the table.  
12220 20 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74    to which the t
12230 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68  rigger is attach
12240 65 64 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d  ed is in the TEM
12250 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  P database, then
12260 20 74 68 65 0a 20 20 20 20 75 6e 71 75 61 6c 69   the.    unquali
12270 66 69 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  fied name of the
12280 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 6c   table being del
12290 65 74 65 64 20 69 73 20 72 65 73 6f 6c 76 65 64  eted is resolved
122a0 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
122b0 20 61 73 0a 20 20 20 20 69 74 20 69 73 20 66 6f   as.    it is fo
122c0 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74  r a top-level st
122d0 61 74 65 6d 65 6e 74 20 28 62 79 20 73 65 61 72  atement (by sear
122e0 63 68 69 6e 67 20 66 69 72 73 74 20 74 68 65 20  ching first the 
122f0 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74  TEMP database, t
12300 68 65 6e 0a 20 20 20 20 74 68 65 20 6d 61 69 6e  hen.    the main
12310 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20   database, then 
12320 61 6e 79 20 6f 74 68 65 72 20 64 61 74 61 62 61  any other databa
12330 73 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72  ses in the order
12340 20 74 68 65 79 20 77 65 72 65 0a 20 20 20 20 61   they were.    a
12350 74 74 61 63 68 65 64 29 2e 0a 20 20 20 20 0a 20  ttached)..    . 
12360 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44   <li><p>^The IND
12370 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20  EXED BY and NOT 
12380 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73 20  INDEXED clauses 
12390 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  are not allowed 
123a0 6f 6e 20 44 45 4c 45 54 45 0a 20 20 20 20 73 74  on DELETE.    st
123b0 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
123c0 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20  triggers.</p>.. 
123d0 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d   <li><p>^The LIM
123e0 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20  IT and ORDER BY 
123f0 63 6c 61 75 73 65 73 20 28 64 65 73 63 72 69 62  clauses (describ
12400 65 64 20 62 65 6c 6f 77 29 20 61 72 65 20 75 6e  ed below) are un
12410 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a 20 20  supported for.  
12420 20 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65    DELETE stateme
12430 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
12440 65 72 73 2e 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a  ers.</p>.</ul>..
12450 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d  <h3>Optional LIM
12460 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20  IT and ORDER BY 
12470 63 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70  clauses</h3>..<p
12480 3e 5e 28 49 66 20 53 51 4c 69 74 65 20 69 73 20  >^(If SQLite is 
12490 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
124a0 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e [SQLITE_ENABLE
124b0 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
124c0 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69  IMIT].compile-ti
124d0 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20  me option, then 
124e0 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68  the syntax of th
124f0 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
12500 6e 74 20 69 73 0a 65 78 74 65 6e 64 65 64 20 62  nt is.extended b
12510 79 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f  y the addition o
12520 66 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52  f optional ORDER
12530 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c   BY and LIMIT cl
12540 61 75 73 65 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74  auses:)^</p>..<t
12550 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
12560 20 64 65 6c 65 74 65 2d 73 74 6d 74 2d 6c 69 6d   delete-stmt-lim
12570 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  ited</tcl>..<p>^
12580 49 66 20 61 20 44 45 4c 45 54 45 20 73 74 61 74  If a DELETE stat
12590 65 6d 65 6e 74 20 68 61 73 20 61 20 4c 49 4d 49  ement has a LIMI
125a0 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6d 61  T clause, the ma
125b0 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
125c0 72 6f 77 73 20 74 68 61 74 0a 77 69 6c 6c 20 62  rows that.will b
125d0 65 20 64 65 6c 65 74 65 64 20 69 73 20 66 6f 75  e deleted is fou
125e0 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67  nd by evaluating
125f0 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e   the accompanyin
12600 67 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  g expression and
12610 20 63 61 73 74 69 6e 67 0a 69 74 20 74 6f 20 61   casting.it to a
12620 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  n integer value.
12630 20 5e 49 66 20 74 68 65 20 72 65 73 75 6c 74 20   ^If the result 
12640 6f 66 20 74 68 65 20 65 76 61 6c 75 61 74 69 6e  of the evaluatin
12650 67 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  g the LIMIT clau
12660 73 65 0a 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73  se.cannot be los
12670 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
12680 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  d to an integer 
12690 76 61 6c 75 65 2c 20 69 74 20 69 73 20 61 6e 20  value, it is an 
126a0 65 72 72 6f 72 2e 20 5e 41 20 0a 6e 65 67 61 74  error. ^A .negat
126b0 69 76 65 20 4c 49 4d 49 54 20 76 61 6c 75 65 20  ive LIMIT value 
126c0 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  is interpreted a
126d0 73 20 22 6e 6f 20 6c 69 6d 69 74 22 2e 20 5e 28  s "no limit". ^(
126e0 49 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  If the DELETE st
126f0 61 74 65 6d 65 6e 74 20 0a 61 6c 73 6f 20 68 61  atement .also ha
12700 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75  s an OFFSET clau
12710 73 65 2c 20 74 68 65 6e 20 69 74 20 69 73 20 73  se, then it is s
12720 69 6d 69 6c 61 72 6c 79 20 65 76 61 6c 75 61 74  imilarly evaluat
12730 65 64 20 61 6e 64 20 63 61 73 74 20 74 6f 20 61  ed and cast to a
12740 6e 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  n.integer value.
12750 20 41 67 61 69 6e 2c 20 69 74 20 69 73 20 61 6e   Again, it is an
12760 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 76 61   error if the va
12770 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f  lue cannot be lo
12780 73 73 6c 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74  sslessly.convert
12790 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
127a0 2e 29 5e 20 5e 49 66 20 74 68 65 72 65 20 69 73  .)^ ^If there is
127b0 20 6e 6f 20 4f 46 46 53 45 54 20 63 6c 61 75 73   no OFFSET claus
127c0 65 2c 20 6f 72 20 74 68 65 20 63 61 6c 63 75 6c  e, or the calcul
127d0 61 74 65 64 0a 69 6e 74 65 67 65 72 20 76 61 6c  ated.integer val
127e0 75 65 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20  ue is negative, 
127f0 74 68 65 20 65 66 66 65 63 74 69 76 65 20 4f 46  the effective OF
12800 46 53 45 54 20 76 61 6c 75 65 20 69 73 20 7a 65  FSET value is ze
12810 72 6f 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65  ro...<p>^(If the
12820 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
12830 74 20 68 61 73 20 61 6e 20 4f 52 44 45 52 20 42  t has an ORDER B
12840 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61  Y clause, then a
12850 6c 6c 20 72 6f 77 73 20 74 68 61 74 20 77 6f 75  ll rows that wou
12860 6c 64 20 0a 62 65 20 64 65 6c 65 74 65 64 20 69  ld .be deleted i
12870 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66  n the absence of
12880 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
12890 65 20 61 72 65 20 73 6f 72 74 65 64 20 61 63 63  e are sorted acc
128a0 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 0a 4f  ording to the .O
128b0 52 44 45 52 20 42 59 2e 20 54 68 65 20 66 69 72  RDER BY. The fir
128c0 73 74 20 3c 69 3e 4d 3c 2f 69 3e 20 72 6f 77 73  st <i>M</i> rows
128d0 2c 20 77 68 65 72 65 20 3c 69 3e 4d 3c 2f 69 3e  , where <i>M</i>
128e0 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 66 6f   is the value fo
128f0 75 6e 64 20 62 79 0a 65 76 61 6c 75 61 74 69 6e  und by.evaluatin
12900 67 20 74 68 65 20 4f 46 46 53 45 54 20 63 6c 61  g the OFFSET cla
12910 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  use expression, 
12920 61 72 65 20 73 6b 69 70 70 65 64 2c 20 61 6e 64  are skipped, and
12930 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a   the following .
12940 3c 69 3e 4e 3c 2f 69 3e 2c 20 77 68 65 72 65 20  <i>N</i>, where 
12950 3c 69 3e 4e 3c 2f 69 3e 20 69 73 20 74 68 65 20  <i>N</i> is the 
12960 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c 49 4d  value of the LIM
12970 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 61  IT expression, a
12980 72 65 20 64 65 6c 65 74 65 64 2e 29 5e 0a 5e 49  re deleted.)^.^I
12990 66 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73  f there are less
129a0 20 74 68 61 6e 20 3c 69 3e 4e 3c 2f 69 3e 20 72   than <i>N</i> r
129b0 6f 77 73 20 72 65 6d 61 69 6e 69 6e 67 20 61 66  ows remaining af
129c0 74 65 72 20 74 61 6b 69 6e 67 20 74 68 65 20 4f  ter taking the O
129d0 46 46 53 45 54 20 63 6c 61 75 73 65 0a 69 6e 74  FFSET clause.int
129e0 6f 20 61 63 63 6f 75 6e 74 2c 20 6f 72 20 69 66  o account, or if
129f0 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
12a00 65 20 65 76 61 6c 75 61 74 65 64 20 74 6f 20 61  e evaluated to a
12a10 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c   negative value,
12a20 20 74 68 65 6e 20 61 6c 6c 0a 72 65 6d 61 69 6e   then all.remain
12a30 69 6e 67 20 72 6f 77 73 20 61 72 65 20 64 65 6c  ing rows are del
12a40 65 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  eted...<p>^If th
12a50 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
12a60 6e 74 20 68 61 73 20 6e 6f 20 4f 52 44 45 52 20  nt has no ORDER 
12a70 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  BY clause, then 
12a80 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 0a 77 6f  all rows that.wo
12a90 75 6c 64 20 62 65 20 64 65 6c 65 74 65 64 20 69  uld be deleted i
12aa0 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66  n the absence of
12ab0 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
12ac0 65 20 61 72 65 20 61 73 73 65 6d 62 6c 65 64 20  e are assembled 
12ad0 69 6e 20 61 6e 0a 61 72 62 69 74 72 61 72 79 20  in an.arbitrary 
12ae0 6f 72 64 65 72 20 62 65 66 6f 72 65 20 61 70 70  order before app
12af0 6c 79 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20  lying the LIMIT 
12b00 61 6e 64 20 4f 46 46 53 45 54 20 63 6c 61 75 73  and OFFSET claus
12b10 65 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  es to determine 
12b20 0a 74 68 65 20 73 75 62 73 65 74 20 74 68 61 74  .the subset that
12b30 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 64 65   are actually de
12b40 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65  leted...<p>^(The
12b50 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
12b60 20 6f 6e 20 61 20 44 45 4c 45 54 45 20 73 74 61   on a DELETE sta
12b70 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 6f  tement is used o
12b80 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  nly to determine
12b90 20 77 68 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c   which.rows fall
12ba0 20 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49   within the LIMI
12bb0 54 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20  T. The order in 
12bc0 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20 64  which rows are d
12bd0 65 6c 65 74 65 64 20 69 73 20 61 72 62 69 74 72  eleted is arbitr
12be0 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69  ary.and is not i
12bf0 6e 66 6c 75 65 6e 63 65 64 20 62 79 20 74 68 65  nfluenced by the
12c00 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
12c10 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  .)^..<tcl>hd_fra
12c20 67 6d 65 6e 74 20 74 72 75 6e 63 61 74 65 6f 70  gment truncateop
12c30 74 20 7b 74 72 75 6e 63 61 74 65 20 6f 70 74 69  t {truncate opti
12c40 6d 69 7a 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  mization}</tcl>.
12c50 3c 68 33 3e 54 68 65 20 54 72 75 6e 63 61 74 65  <h3>The Truncate
12c60 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68   Optimization</h
12c70 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65  3>..<p>^When the
12c80 20 57 48 45 52 45 20 69 73 20 6f 6d 69 74 74 65   WHERE is omitte
12c90 64 20 66 72 6f 6d 20 61 20 44 45 4c 45 54 45 20  d from a DELETE 
12ca0 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68  statement and th
12cb0 65 20 74 61 62 6c 65 0a 62 65 69 6e 67 20 64 65  e table.being de
12cc0 6c 65 74 65 64 20 68 61 73 20 6e 6f 20 74 72 69  leted has no tri
12cd0 67 67 65 72 73 2c 0a 53 51 4c 69 74 65 20 75 73  ggers,.SQLite us
12ce0 65 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  es an optimizati
12cf0 6f 6e 20 74 6f 20 65 72 61 73 65 20 74 68 65 20  on to erase the 
12d00 65 6e 74 69 72 65 20 74 61 62 6c 65 20 63 6f 6e  entire table con
12d10 74 65 6e 74 0a 77 69 74 68 6f 75 74 20 68 61 76  tent.without hav
12d20 69 6e 67 20 74 6f 20 76 69 73 69 74 20 65 61 63  ing to visit eac
12d30 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62  h row of the tab
12d40 6c 65 20 69 6e 64 69 76 69 64 75 61 6c 6c 79 2e  le individually.
12d50 0a 54 68 69 73 20 22 74 72 75 6e 63 61 74 65 22  .This "truncate"
12d60 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6d 61   optimization ma
12d70 6b 65 73 20 74 68 65 20 64 65 6c 65 74 65 20 72  kes the delete r
12d80 75 6e 20 6d 75 63 68 20 66 61 73 74 65 72 2e 0a  un much faster..
12d90 50 72 69 6f 72 20 74 6f 20 53 51 4c 69 74 65 20  Prior to SQLite 
12da0 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 20  [version 3.6.5] 
12db0 28 5b 64 61 74 65 6f 66 3a 33 2e 36 2e 35 5d 29  ([dateof:3.6.5])
12dc0 2c 20 74 68 65 20 74 72 75 6e 63 61 74 65 20 6f  , the truncate o
12dd0 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 61 6c 73 6f  ptimization.also
12de0 20 6d 65 61 6e 74 20 74 68 61 74 20 74 68 65 20   meant that the 
12df0 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  [sqlite3_changes
12e00 28 29 5d 20 61 6e 64 0a 5b 73 71 6c 69 74 65 33  ()] and.[sqlite3
12e10 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  _total_changes()
12e20 5d 20 69 6e 74 65 72 66 61 63 65 73 0a 61 6e 64  ] interfaces.and
12e30 20 74 68 65 20 5b 63 6f 75 6e 74 5f 63 68 61 6e   the [count_chan
12e40 67 65 73 20 70 72 61 67 6d 61 5d 0a 77 69 6c 6c  ges pragma].will
12e50 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 72 65   not actually re
12e60 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
12e70 6f 66 20 64 65 6c 65 74 65 64 20 72 6f 77 73 2e  of deleted rows.
12e80 20 20 0a 54 68 61 74 20 70 72 6f 62 6c 65 6d 20    .That problem 
12e90 68 61 73 20 62 65 65 6e 20 66 69 78 65 64 20 61  has been fixed a
12ea0 73 20 6f 66 20 5b 76 65 72 73 69 6f 6e 20 33 2e  s of [version 3.
12eb0 36 2e 35 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e  6.5] ([dateof:3.
12ec0 36 2e 35 5d 29 2e 0a 0a 3c 70 3e 5e 54 68 65 20  6.5])...<p>^The 
12ed0 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
12ee0 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 70 65 72  ation can be per
12ef0 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65  manently disable
12f00 64 20 66 6f 72 20 61 6c 6c 20 71 75 65 72 69 65  d for all querie
12f10 73 0a 62 79 20 72 65 63 6f 6d 70 69 6c 69 6e 67  s.by recompiling
12f20 0a 53 51 4c 69 74 65 20 77 69 74 68 20 74 68 65  .SQLite with the
12f30 20 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52   [SQLITE_OMIT_TR
12f40 55 4e 43 41 54 45 5f 4f 50 54 49 4d 49 5a 41 54  UNCATE_OPTIMIZAT
12f50 49 4f 4e 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  ION] compile-tim
12f60 65 20 73 77 69 74 63 68 2e 3c 2f 70 3e 0a 0a 3c  e switch.</p>..<
12f70 70 3e 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f  p>The truncate o
12f80 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20  ptimization can 
12f90 61 6c 73 6f 20 62 65 20 64 69 73 61 62 6c 65 64  also be disabled
12fa0 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e   at runtime usin
12fb0 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73  g.the [sqlite3_s
12fc0 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28 29 5d  et_authorizer()]
12fd0 20 69 6e 74 65 72 66 61 63 65 2e 20 20 5e 49 66   interface.  ^If
12fe0 20 61 6e 20 61 75 74 68 6f 72 69 7a 65 72 20 63   an authorizer c
12ff0 61 6c 6c 62 61 63 6b 0a 72 65 74 75 72 6e 73 20  allback.returns 
13000 5b 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 5d 20  [SQLITE_IGNORE] 
13010 66 6f 72 20 61 6e 20 5b 53 51 4c 49 54 45 5f 44  for an [SQLITE_D
13020 45 4c 45 54 45 5d 20 61 63 74 69 6f 6e 20 63 6f  ELETE] action co
13030 64 65 2c 20 74 68 65 6e 0a 74 68 65 20 44 45 4c  de, then.the DEL
13040 45 54 45 20 6f 70 65 72 61 74 69 6f 6e 20 77 69  ETE operation wi
13050 6c 6c 20 70 72 6f 63 65 65 64 20 62 75 74 20 74  ll proceed but t
13060 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69  he truncate opti
13070 6d 69 7a 61 74 69 6f 6e 20 77 69 6c 6c 0a 62 65  mization will.be
13080 20 62 79 70 61 73 73 65 64 20 61 6e 64 20 72 6f   bypassed and ro
13090 77 73 20 77 69 6c 6c 20 62 65 20 64 65 6c 65 74  ws will be delet
130a0 65 64 20 6f 6e 65 20 62 79 20 6f 6e 65 2e 3c 2f  ed one by one.</
130b0 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
130c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
130d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
130e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
130f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13100 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
13110 6e 20 7b 44 45 54 41 43 48 20 44 41 54 41 42 41  n {DETACH DATABA
13120 53 45 7d 20 64 65 74 61 63 68 20 2a 44 45 54 41  SE} detach *DETA
13130 43 48 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  CH..RecursiveBub
13140 62 6c 65 44 69 61 67 72 61 6d 20 64 65 74 61 63  bleDiagram detac
13150 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  h-stmt.</tcl>..<
13160 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d 65 6e  p>^This statemen
13170 74 20 64 65 74 61 63 68 65 73 20 61 6e 20 61 64  t detaches an ad
13180 64 69 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73  ditional databas
13190 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65  e connection pre
131a0 76 69 6f 75 73 6c 79 20 0a 61 74 74 61 63 68 65  viously .attache
131b0 64 20 75 73 69 6e 67 20 74 68 65 20 5b 41 54 54  d using the [ATT
131c0 41 43 48 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  ACH] statement. 
131d0 20 0a 5e 57 68 65 6e 20 6e 6f 74 20 69 6e 20 5b   .^When not in [
131e0 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64  shared cache mod
131f0 65 5d 2c 20 0a 69 74 20 69 73 20 70 6f 73 73 69  e], .it is possi
13200 62 6c 65 20 74 6f 20 68 61 76 65 20 74 68 65 20  ble to have the 
13210 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 66 69  same database fi
13220 6c 65 20 61 74 74 61 63 68 65 64 20 6d 75 6c 74  le attached mult
13230 69 70 6c 65 20 74 69 6d 65 73 20 75 73 69 6e 67  iple times using
13240 20 0a 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65   .different name
13250 73 2c 20 61 6e 64 20 64 65 74 61 63 68 69 6e 67  s, and detaching
13260 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   one connection 
13270 74 6f 20 61 20 66 69 6c 65 20 77 69 6c 6c 20 6c  to a file will l
13280 65 61 76 65 20 74 68 65 20 0a 6f 74 68 65 72 73  eave the .others
13290 20 69 6e 74 61 63 74 2e 3c 2f 70 3e 0a 5e 49 6e   intact.</p>.^In
132a0 20 5b 73 68 61 72 65 64 20 63 61 63 68 65 20 6d   [shared cache m
132b0 6f 64 65 5d 2c 20 61 74 74 65 6d 70 74 69 6e 67  ode], attempting
132c0 20 74 6f 20 61 74 74 61 63 68 20 74 68 65 20 73   to attach the s
132d0 61 6d 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ame database fil
132e0 65 20 6d 6f 72 65 0a 74 68 61 6e 20 6f 6e 63 65  e more.than once
132f0 20 72 65 73 75 6c 74 73 20 69 6e 20 61 6e 20 65   results in an e
13300 72 72 6f 72 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  rror....<tcl>.##
13310 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13330 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13340 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13350 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
13360 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e 44 45 58  tion {DROP INDEX
13370 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b 7b 44 52  } dropindex {{DR
13380 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 52 65 63 75  OP INDEX}}..Recu
13390 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
133a0 61 6d 20 64 72 6f 70 2d 69 6e 64 65 78 2d 73 74  am drop-index-st
133b0 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
133c0 68 65 20 44 52 4f 50 20 49 4e 44 45 58 20 73 74  he DROP INDEX st
133d0 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20  atement removes 
133e0 61 6e 20 69 6e 64 65 78 20 61 64 64 65 64 0a 77  an index added.w
133f0 69 74 68 20 74 68 65 20 5b 43 52 45 41 54 45 20  ith the [CREATE 
13400 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74  INDEX] statement
13410 2e 20 20 54 68 65 20 69 6e 64 65 78 20 69 73 20  .  The index is 
13420 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76  completely remov
13430 65 64 20 66 72 6f 6d 0a 74 68 65 20 64 69 73 6b  ed from.the disk
13440 2e 20 20 54 68 65 20 6f 6e 6c 79 20 77 61 79 20  .  The only way 
13450 74 6f 20 72 65 63 6f 76 65 72 20 74 68 65 20 69  to recover the i
13460 6e 64 65 78 20 69 73 20 74 6f 20 72 65 65 6e 74  ndex is to reent
13470 65 72 20 74 68 65 0a 61 70 70 72 6f 70 72 69 61  er the.appropria
13480 74 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58  te [CREATE INDEX
13490 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a  ] command.</p>..
134a0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
134b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
134c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
134d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
134e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
134f0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
13500 4f 50 20 54 41 42 4c 45 7d 20 64 72 6f 70 74 61  OP TABLE} dropta
13510 62 6c 65 20 7b 7b 44 52 4f 50 20 54 41 42 4c 45  ble {{DROP TABLE
13520 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  }}..RecursiveBub
13530 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70 2d  bleDiagram drop-
13540 74 61 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c  table-stmt.</tcl
13550 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20  >..<p>^The DROP 
13560 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20  TABLE statement 
13570 72 65 6d 6f 76 65 73 20 61 20 74 61 62 6c 65 20  removes a table 
13580 61 64 64 65 64 20 77 69 74 68 20 74 68 65 0a 5b  added with the.[
13590 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74  CREATE TABLE] st
135a0 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e 61  atement.  The na
135b0 6d 65 20 73 70 65 63 69 66 69 65 64 20 69 73 20  me specified is 
135c0 74 68 65 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20  the.table name. 
135d0 20 5e 54 68 65 20 64 72 6f 70 70 65 64 20 74 61   ^The dropped ta
135e0 62 6c 65 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c  ble is completel
135f0 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  y removed from t
13600 68 65 20 64 61 74 61 62 61 73 65 20 0a 73 63 68  he database .sch
13610 65 6d 61 20 61 6e 64 20 74 68 65 20 64 69 73 6b  ema and the disk
13620 20 66 69 6c 65 2e 20 20 54 68 65 20 74 61 62 6c   file.  The tabl
13630 65 20 63 61 6e 20 6e 6f 74 20 62 65 20 72 65 63  e can not be rec
13640 6f 76 65 72 65 64 2e 20 20 0a 5e 41 6c 6c 20 69  overed.  .^All i
13650 6e 64 69 63 65 73 20 61 6e 64 20 74 72 69 67 67  ndices and trigg
13660 65 72 73 0a 61 73 73 6f 63 69 61 74 65 64 20 77  ers.associated w
13670 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 61 72  ith the table ar
13680 65 20 61 6c 73 6f 20 64 65 6c 65 74 65 64 2e 3c  e also deleted.<
13690 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74  /p>..<p>^The opt
136a0 69 6f 6e 61 6c 20 49 46 20 45 58 49 53 54 53 20  ional IF EXISTS 
136b0 63 6c 61 75 73 65 20 73 75 70 70 72 65 73 73 65  clause suppresse
136c0 73 20 74 68 65 20 65 72 72 6f 72 20 74 68 61 74  s the error that
136d0 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0a   would normally.
136e0 72 65 73 75 6c 74 20 69 66 20 74 68 65 20 74 61  result if the ta
136f0 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  ble does not exi
13700 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  st.</p>..<p>^If 
13710 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e  [foreign key con
13720 73 74 72 61 69 6e 74 73 5d 20 61 72 65 20 65 6e  straints] are en
13730 61 62 6c 65 64 2c 20 61 20 44 52 4f 50 20 54 41  abled, a DROP TA
13740 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 70 65 72 66  BLE command perf
13750 6f 72 6d 73 20 61 6e 0a 69 6d 70 6c 69 63 69 74  orms an.implicit
13760 20 5b 44 45 4c 45 54 45 20 7c 20 44 45 4c 45 54   [DELETE | DELET
13770 45 20 46 52 4f 4d 5d 20 63 6f 6d 6d 61 6e 64 20  E FROM] command 
13780 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67 20  before removing 
13790 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20 74  the.table from t
137a0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
137b0 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65 72  ma. ^Any trigger
137c0 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
137d0 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f 70  e table are.drop
137e0 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ped from the dat
137f0 61 62 61 73 65 20 73 63 68 65 6d 61 20 62 65 66  abase schema bef
13800 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69 74  ore the implicit
13810 20 44 45 4c 45 54 45 20 46 52 4f 4d 0a 69 73 20   DELETE FROM.is 
13820 65 78 65 63 75 74 65 64 2c 20 73 6f 20 74 68 69  executed, so thi
13830 73 20 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 61  s cannot cause a
13840 6e 79 20 74 72 69 67 67 65 72 73 20 74 6f 20 66  ny triggers to f
13850 69 72 65 2e 20 42 79 20 63 6f 6e 74 72 61 73 74  ire. By contrast
13860 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63 69 74 20 44  , ^an.implicit D
13870 45 4c 45 54 45 20 46 52 4f 4d 20 64 6f 65 73 20  ELETE FROM does 
13880 63 61 75 73 65 20 61 6e 79 20 63 6f 6e 66 69 67  cause any config
13890 75 72 65 64 0a 5b 66 6f 72 65 69 67 6e 20 6b 65  ured.[foreign ke
138a0 79 20 61 63 74 69 6f 6e 73 5d 20 74 6f 20 74 61  y actions] to ta
138b0 6b 65 20 70 6c 61 63 65 2e 20 0a 5e 49 66 20 74  ke place. .^If t
138c0 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
138d0 54 45 20 46 52 4f 4d 20 65 78 65 63 75 74 65 64  TE FROM executed
138e0 0a 61 73 20 70 61 72 74 20 6f 66 20 61 20 44 52  .as part of a DR
138f0 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  OP TABLE command
13900 20 76 69 6f 6c 61 74 65 73 20 61 6e 79 20 69 6d   violates any im
13910 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
13920 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  key constraints,
13930 0a 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74  .an error is ret
13940 75 72 6e 65 64 20 61 6e 64 20 74 68 65 20 74 61  urned and the ta
13950 62 6c 65 20 69 73 20 6e 6f 74 20 64 72 6f 70 70  ble is not dropp
13960 65 64 2e 20 5e 49 66 20 0a 74 68 65 20 69 6d 70  ed. ^If .the imp
13970 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
13980 4d 20 63 61 75 73 65 73 20 61 6e 79 20 0a 64 65  M causes any .de
13990 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b  ferred foreign k
139a0 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  ey constraints t
139b0 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c 20 61  o be violated, a
139c0 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69 6f 6e  nd the violation
139d0 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20 77 68  s still.exist wh
139e0 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  en the transacti
139f0 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2c  on is committed,
13a00 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74   an error is ret
13a10 75 72 6e 65 64 20 61 74 20 74 68 65 20 74 69 6d  urned at the tim
13a20 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a 3c 74  e.of commit...<t
13a30 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
13a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13a80 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50  ##.Section {DROP
13a90 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74 72   TRIGGER} droptr
13aa0 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54 52 49  igger {{DROP TRI
13ab0 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76  GGER}}..Recursiv
13ac0 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  eBubbleDiagram d
13ad0 72 6f 70 2d 74 72 69 67 67 65 72 2d 73 74 6d 74  rop-trigger-stmt
13ae0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
13af0 20 44 52 4f 50 20 54 52 49 47 47 45 52 20 73 74   DROP TRIGGER st
13b00 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20  atement removes 
13b10 61 20 74 72 69 67 67 65 72 20 63 72 65 61 74 65  a trigger create
13b20 64 20 62 79 20 74 68 65 20 0a 5b 43 52 45 41 54  d by the .[CREAT
13b30 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65  E TRIGGER] state
13b40 6d 65 6e 74 2e 20 5e 4f 6e 63 65 20 72 65 6d 6f  ment. ^Once remo
13b50 76 65 64 2c 20 74 68 65 20 74 72 69 67 67 65 72  ved, the trigger
13b60 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73 20 6e   definition is n
13b70 6f 0a 6c 6f 6e 67 65 72 20 70 72 65 73 65 6e 74  o.longer present
13b80 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   in the sqlite_m
13b90 61 73 74 65 72 20 28 6f 72 20 73 71 6c 69 74 65  aster (or sqlite
13ba0 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20 74 61  _temp_master) ta
13bb0 62 6c 65 20 61 6e 64 20 69 73 0a 6e 6f 74 20 66  ble and is.not f
13bc0 69 72 65 64 20 62 79 20 61 6e 79 20 73 75 62 73  ired by any subs
13bd0 65 71 75 65 6e 74 20 49 4e 53 45 52 54 2c 20 55  equent INSERT, U
13be0 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 20  PDATE or DELETE 
13bf0 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c 70 3e  statements...<p>
13c00 5e 4e 6f 74 65 20 74 68 61 74 20 74 72 69 67 67  ^Note that trigg
13c10 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  ers are automati
13c20 63 61 6c 6c 79 20 64 72 6f 70 70 65 64 20 77 68  cally dropped wh
13c30 65 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  en the associate
13c40 64 20 74 61 62 6c 65 20 69 73 0a 64 72 6f 70 70  d table is.dropp
13c50 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ed...<tcl>.#####
13c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13c90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ca0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
13cb0 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d 20 64 72  n {DROP VIEW} dr
13cc0 6f 70 76 69 65 77 20 7b 7b 44 52 4f 50 20 56 49  opview {{DROP VI
13cd0 45 57 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  EW}}..RecursiveB
13ce0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
13cf0 70 2d 76 69 65 77 2d 73 74 6d 74 0a 3c 2f 74 63  p-view-stmt.</tc
13d00 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
13d10 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74 20   VIEW statement 
13d20 72 65 6d 6f 76 65 73 20 61 20 76 69 65 77 20 63  removes a view c
13d30 72 65 61 74 65 64 20 62 79 20 74 68 65 20 5b 43  reated by the [C
13d40 52 45 41 54 45 20 56 49 45 57 5d 20 0a 20 20 73  REATE VIEW] .  s
13d50 74 61 74 65 6d 65 6e 74 2e 20 5e 54 68 65 20 76  tatement. ^The v
13d60 69 65 77 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  iew definition i
13d70 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  s removed from t
13d80 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
13d90 6d 61 2c 20 62 75 74 20 0a 20 20 6e 6f 20 61 63  ma, but .  no ac
13da0 74 75 61 6c 20 64 61 74 61 20 69 6e 20 74 68 65  tual data in the
13db0 20 75 6e 64 65 72 6c 79 69 6e 67 20 62 61 73 65   underlying base
13dc0 20 74 61 62 6c 65 73 20 69 73 20 6d 6f 64 69 66   tables is modif
13dd0 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 76  ied...<p>^(The v
13de0 69 65 77 20 74 6f 20 64 72 6f 70 20 69 73 20 69  iew to drop is i
13df0 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65  dentified by the
13e00 20 76 69 65 77 2d 6e 61 6d 65 20 61 6e 64 20 6f   view-name and o
13e10 70 74 69 6f 6e 61 6c 20 0a 20 20 73 63 68 65 6d  ptional .  schem
13e20 61 2d 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64  a-name specified
13e30 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
13e40 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d  DROP VIEW statem
13e50 65 6e 74 2e 20 54 68 69 73 20 0a 20 20 72 65 66  ent. This .  ref
13e60 65 72 65 6e 63 65 20 69 73 20 72 65 73 6f 6c 76  erence is resolv
13e70 65 64 20 75 73 69 6e 67 20 74 68 65 20 73 74 61  ed using the sta
13e80 6e 64 61 72 64 20 70 72 6f 63 65 64 75 72 65 20  ndard procedure 
13e90 66 6f 72 20 5b 6f 62 6a 65 63 74 20 72 65 73 6f  for [object reso
13ea0 6c 75 74 69 6f 6e 5d 2e 29 5e 0a 0a 3c 70 3e 0a  lution].)^..<p>.
13eb0 20 20 5e 49 66 20 74 68 65 20 73 70 65 63 69 66    ^If the specif
13ec0 69 65 64 20 76 69 65 77 20 63 61 6e 6e 6f 74 20  ied view cannot 
13ed0 62 65 20 66 6f 75 6e 64 20 61 6e 64 20 74 68 65  be found and the
13ee0 20 49 46 20 45 58 49 53 54 53 20 63 6c 61 75 73   IF EXISTS claus
13ef0 65 20 69 73 20 6e 6f 74 20 0a 20 20 70 72 65 73  e is not .  pres
13f00 65 6e 74 2c 20 69 74 20 69 73 20 61 6e 20 65 72  ent, it is an er
13f10 72 6f 72 2e 20 5e 49 66 20 74 68 65 20 73 70 65  ror. ^If the spe
13f20 63 69 66 69 65 64 20 76 69 65 77 20 63 61 6e 6e  cified view cann
13f30 6f 74 20 62 65 20 66 6f 75 6e 64 20 61 6e 64 20  ot be found and 
13f40 61 6e 20 49 46 0a 20 20 45 58 49 53 54 53 20 63  an IF.  EXISTS c
13f50 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74  lause is present
13f60 20 69 6e 20 74 68 65 20 44 52 4f 50 20 56 49 45   in the DROP VIE
13f70 57 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  W statement, the
13f80 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
13f90 20 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 0a 0a    is a no-op....
13fa0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
13fb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ff0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 61  ####.Section {Da
14000 74 61 62 61 73 65 20 4f 62 6a 65 63 74 20 4e 61  tabase Object Na
14010 6d 65 20 52 65 73 6f 6c 75 74 69 6f 6e 7d 20 7b  me Resolution} {
14020 6e 61 6d 69 6e 67 7d 20 7b 7b 6f 62 6a 65 63 74  naming} {{object
14030 20 72 65 73 6f 6c 75 74 69 6f 6e 7d 7d 0a 3c 2f   resolution}}.</
14040 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20 49 6e 20 53  tcl>..<p>.  In S
14050 51 4c 69 74 65 2c 20 61 20 64 61 74 61 62 61 73  QLite, a databas
14060 65 20 6f 62 6a 65 63 74 20 28 61 20 74 61 62 6c  e object (a tabl
14070 65 2c 20 69 6e 64 65 78 2c 20 74 72 69 67 67 65  e, index, trigge
14080 72 20 6f 72 20 76 69 65 77 29 20 69 73 20 69 64  r or view) is id
14090 65 6e 74 69 66 69 65 64 0a 20 20 62 79 20 74 68  entified.  by th
140a0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f 62  e name of the ob
140b0 6a 65 63 74 20 61 6e 64 20 74 68 65 20 6e 61 6d  ject and the nam
140c0 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
140d0 65 20 74 68 61 74 20 69 74 20 72 65 73 69 64 65  e that it reside
140e0 73 20 69 6e 2e 20 0a 20 20 44 61 74 61 62 61 73  s in. .  Databas
140f0 65 20 6f 62 6a 65 63 74 73 20 6d 61 79 20 72 65  e objects may re
14100 73 69 64 65 20 69 6e 20 74 68 65 20 6d 61 69 6e  side in the main
14110 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74   database, the t
14120 65 6d 70 20 64 61 74 61 62 61 73 65 2c 20 6f 72  emp database, or
14130 20 69 6e 0a 20 20 61 6e 20 5b 41 54 54 41 43 48   in.  an [ATTACH
14140 7c 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61  |attached databa
14150 73 65 5d 2e 0a 0a 3c 70 3e 0a 20 20 54 68 65 20  se]...<p>.  The 
14160 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 5b 44  syntax of the [D
14170 52 4f 50 20 54 41 42 4c 45 5d 2c 20 5b 44 52 4f  ROP TABLE], [DRO
14180 50 20 49 4e 44 45 58 5d 2c 20 5b 44 52 4f 50 20  P INDEX], [DROP 
14190 56 49 45 57 5d 2c 20 5b 44 52 4f 50 20 54 52 49  VIEW], [DROP TRI
141a0 47 47 45 52 5d 2c 0a 20 20 5b 52 45 49 4e 44 45  GGER],.  [REINDE
141b0 58 5d 2c 20 5b 41 4c 54 45 52 20 54 41 42 4c 45  X], [ALTER TABLE
141c0 5d 20 61 6e 64 20 6d 61 6e 79 20 6f 74 68 65 72  ] and many other
141d0 20 63 6f 6d 6d 61 6e 64 73 20 61 6c 6c 20 70 65   commands all pe
141e0 72 6d 69 74 20 74 68 65 20 75 73 65 72 20 74 6f  rmit the user to
141f0 0a 20 20 73 70 65 63 69 66 79 20 61 20 64 61 74  .  specify a dat
14200 61 62 61 73 65 20 6f 62 6a 65 63 74 20 65 69 74  abase object eit
14210 68 65 72 20 62 79 20 69 74 73 20 6e 61 6d 65 20  her by its name 
14220 61 6c 6f 6e 65 2c 20 6f 72 20 62 79 20 61 20 63  alone, or by a c
14230 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 0a 20 20  ombination of.  
14240 69 74 73 20 6e 61 6d 65 20 61 6e 64 20 74 68 65  its name and the
14250 20 6e 61 6d 65 20 6f 66 20 69 74 73 20 64 61 74   name of its dat
14260 61 62 61 73 65 2e 20 5e 28 49 66 20 6e 6f 20 64  abase. ^(If no d
14270 61 74 61 62 61 73 65 20 69 73 20 73 70 65 63 69  atabase is speci
14280 66 69 65 64 20 61 73 20 70 61 72 74 0a 20 20 6f  fied as part.  o
14290 66 20 74 68 65 20 6f 62 6a 65 63 74 20 72 65 66  f the object ref
142a0 65 72 65 6e 63 65 2c 20 74 68 65 6e 20 53 51 4c  erence, then SQL
142b0 69 74 65 20 73 65 61 72 63 68 65 73 20 74 68 65  ite searches the
142c0 20 6d 61 69 6e 2c 20 74 65 6d 70 20 61 6e 64 20   main, temp and 
142d0 61 6c 6c 20 61 74 74 61 63 68 65 64 0a 20 20 64  all attached.  d
142e0 61 74 61 62 61 73 65 73 20 66 6f 72 20 61 6e 20  atabases for an 
142f0 6f 62 6a 65 63 74 20 77 69 74 68 20 61 20 6d 61  object with a ma
14300 74 63 68 69 6e 67 20 6e 61 6d 65 2e 20 54 68 65  tching name. The
14310 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 20 69   temp database i
14320 73 20 73 65 61 72 63 68 65 64 0a 20 20 66 69 72  s searched.  fir
14330 73 74 2c 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  st, followed by 
14340 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
14350 65 2c 20 66 6f 6c 6c 6f 77 65 64 20 61 6c 6c 20  e, followed all 
14360 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
14370 65 73 20 69 6e 20 74 68 65 0a 20 20 6f 72 64 65  es in the.  orde
14380 72 20 74 68 61 74 20 74 68 65 79 20 77 65 72 65  r that they were
14390 20 61 74 74 61 63 68 65 64 2e 20 54 68 65 20 72   attached. The r
143a0 65 66 65 72 65 6e 63 65 20 72 65 73 6f 6c 76 65  eference resolve
143b0 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 6d  s to the first m
143c0 61 74 63 68 0a 20 20 66 6f 75 6e 64 2e 29 5e 20  atch.  found.)^ 
143d0 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c 70  For example:..<p
143e0 72 65 3e 5e 28 0a 20 20 20 20 20 20 2f 2a 20 41  re>^(.      /* A
143f0 64 64 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  dd a table named
14400 20 27 74 31 27 20 74 6f 20 74 68 65 20 74 65 6d   't1' to the tem
14410 70 2c 20 6d 61 69 6e 20 61 6e 64 20 61 6e 20 61  p, main and an a
14420 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
14430 20 2a 2f 0a 20 20 20 20 20 20 41 54 54 41 43 48   */.      ATTACH
14440 20 27 66 69 6c 65 2e 64 62 27 20 41 53 20 61 75   'file.db' AS au
14450 78 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  x;.      CREATE 
14460 54 41 42 4c 45 20 74 31 28 78 2c 20 79 29 3b 0a  TABLE t1(x, y);.
14470 20 20 20 20 20 20 43 52 45 41 54 45 20 54 45 4d        CREATE TEM
14480 50 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79 29  P TABLE t1(x, y)
14490 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  ;.      CREATE T
144a0 41 42 4c 45 20 61 75 78 2e 74 31 28 78 2c 20 79  ABLE aux.t1(x, y
144b0 29 3b 0a 0a 20 20 20 20 20 20 44 52 4f 50 20 54  );..      DROP T
144c0 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20 20 20  ABLE t1;        
144d0 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65 20 69   /* Drop table i
144e0 6e 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 20  n temp database 
144f0 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41  */.      DROP TA
14500 42 4c 45 20 74 31 3b 20 20 20 20 20 20 20 20 20  BLE t1;         
14510 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65 20 69 6e  /* Drop table in
14520 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 2a   main database *
14530 2f 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41 42  /.      DROP TAB
14540 4c 45 20 74 31 3b 20 20 20 20 20 20 20 20 20 2f  LE t1;         /
14550 2a 20 44 72 6f 70 20 74 61 62 6c 65 20 69 6e 20  * Drop table in 
14560 61 75 78 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  aux database */.
14570 29 5e 3c 2f 70 72 65 3e 0a 0a 3c 70 3e 0a 20 20  )^</pre>..<p>.  
14580 5e 49 66 20 61 20 73 63 68 65 6d 61 20 6e 61 6d  ^If a schema nam
14590 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  e is specified a
145a0 73 20 70 61 72 74 20 6f 66 20 61 6e 20 6f 62 6a  s part of an obj
145b0 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c 20 69  ect reference, i
145c0 74 20 6d 75 73 74 20 62 65 0a 20 20 65 69 74 68  t must be.  eith
145d0 65 72 20 22 6d 61 69 6e 22 2c 20 6f 72 20 22 74  er "main", or "t
145e0 65 6d 70 22 20 6f 72 20 74 68 65 20 73 63 68 65  emp" or the sche
145f0 6d 61 2d 6e 61 6d 65 20 6f 66 20 61 6e 20 61 74  ma-name of an at
14600 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2e  tached database.
14610 0a 20 20 5e 4c 69 6b 65 20 6f 74 68 65 72 20 53  .  ^Like other S
14620 51 4c 20 69 64 65 6e 74 69 66 69 65 72 73 2c 20  QL identifiers, 
14630 73 63 68 65 6d 61 20 6e 61 6d 65 73 20 61 72 65  schema names are
14640 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76   case-insensitiv
14650 65 2e 0a 20 20 5e 49 66 20 61 20 73 63 68 65 6d  e..  ^If a schem
14660 61 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66  a name is specif
14670 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ied, then only t
14680 68 61 74 20 6f 6e 65 20 73 63 68 65 6d 61 20 69  hat one schema i
14690 73 20 73 65 61 72 63 68 65 64 20 66 6f 72 0a 20  s searched for. 
146a0 20 74 68 65 20 6e 61 6d 65 64 20 6f 62 6a 65 63   the named objec
146b0 74 2e 0a 0a 3c 70 3e 0a 20 20 4d 6f 73 74 20 6f  t...<p>.  Most o
146c0 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 73  bject references
146d0 20 6d 61 79 20 6f 6e 6c 79 20 72 65 73 6f 6c 76   may only resolv
146e0 65 20 74 6f 20 61 20 73 70 65 63 69 66 69 63 20  e to a specific 
146f0 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74 20 28  type of object (
14700 66 6f 72 0a 20 20 65 78 61 6d 70 6c 65 20 61 20  for.  example a 
14710 72 65 66 65 72 65 6e 63 65 20 74 68 61 74 20 69  reference that i
14720 73 20 70 61 72 74 20 6f 66 20 61 20 44 52 4f 50  s part of a DROP
14730 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
14740 20 6d 61 79 20 6f 6e 6c 79 20 72 65 73 6f 6c 76   may only resolv
14750 65 0a 20 20 74 6f 20 61 20 74 61 62 6c 65 20 6f  e.  to a table o
14760 62 6a 65 63 74 2c 20 6e 6f 74 20 61 6e 20 69 6e  bject, not an in
14770 64 65 78 2c 20 74 72 69 67 67 65 72 20 6f 72 20  dex, trigger or 
14780 76 69 65 77 29 2e 20 48 6f 77 65 76 65 72 20 69  view). However i
14790 6e 20 73 6f 6d 65 20 63 6f 6e 74 65 78 74 73 20  n some contexts 
147a0 0a 20 20 28 65 2e 67 2e 20 5b 52 45 49 4e 44 45  .  (e.g. [REINDE
147b0 58 5d 29 20 61 6e 20 6f 62 6a 65 63 74 20 72 65  X]) an object re
147c0 66 65 72 65 6e 63 65 20 6d 61 79 20 62 65 20 72  ference may be r
147d0 65 73 6f 6c 76 65 20 74 6f 20 6d 6f 72 65 20 74  esolve to more t
147e0 68 61 6e 20 6f 6e 65 20 74 79 70 65 0a 20 20 6f  han one type.  o
147f0 66 20 6f 62 6a 65 63 74 2e 20 5e 57 68 65 6e 20  f object. ^When 
14800 73 65 61 72 63 68 69 6e 67 20 64 61 74 61 62 61  searching databa
14810 73 65 20 73 63 68 65 6d 61 73 20 66 6f 72 20 61  se schemas for a
14820 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2c 20 6f   named object, o
14830 62 6a 65 63 74 73 20 6f 66 0a 20 20 74 79 70 65  bjects of.  type
14840 73 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65  s that cannot be
14850 20 75 73 65 64 20 69 6e 20 74 68 65 20 63 6f 6e   used in the con
14860 74 65 78 74 20 6f 66 20 74 68 65 20 72 65 66 65  text of the refe
14870 72 65 6e 63 65 20 61 72 65 20 61 6c 77 61 79 73  rence are always
14880 20 0a 20 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c 74   .  ignored...<t
14890 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
148a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
148b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
148c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
148d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
148e0 23 23 0a 53 65 63 74 69 6f 6e 20 45 58 50 4c 41  ##.Section EXPLA
148f0 49 4e 20 65 78 70 6c 61 69 6e 20 45 58 50 4c 41  IN explain EXPLA
14900 49 4e 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  IN..BubbleDiagra
14910 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c 2f 74 63 6c  m sql-stmt.</tcl
14920 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51 4c 20 73 74  >..<p>^An SQL st
14930 61 74 65 6d 65 6e 74 20 63 61 6e 20 62 65 20 70  atement can be p
14940 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20 6b  receded by the k
14950 65 79 77 6f 72 64 20 22 45 58 50 4c 41 49 4e 22  eyword "EXPLAIN"
14960 20 6f 72 0a 62 79 20 74 68 65 20 70 68 72 61 73   or.by the phras
14970 65 20 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59  e "EXPLAIN QUERY
14980 20 50 4c 41 4e 22 2e 20 20 5e 45 69 74 68 65 72   PLAN".  ^Either
14990 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 63 61   modification ca
149a0 75 73 65 73 20 74 68 65 0a 53 51 4c 20 73 74 61  uses the.SQL sta
149b0 74 65 6d 65 6e 74 20 74 6f 20 62 65 68 61 76 65  tement to behave
149c0 20 61 73 20 61 20 71 75 65 72 79 20 61 6e 64 20   as a query and 
149d0 74 6f 20 72 65 74 75 72 6e 20 69 6e 66 6f 72 6d  to return inform
149e0 61 74 69 6f 6e 20 61 62 6f 75 74 0a 68 6f 77 20  ation about.how 
149f0 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
14a00 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f 70 65  t would have ope
14a10 72 61 74 65 64 20 69 66 20 74 68 65 20 45 58 50  rated if the EXP
14a20 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6f 72 0a  LAIN keyword or.
14a30 70 68 72 61 73 65 20 68 61 64 20 62 65 65 6e 20  phrase had been 
14a40 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  omitted.</p>..<p
14a50 3e 54 68 65 20 6f 75 74 70 75 74 20 66 72 6f 6d  >The output from
14a60 20 45 58 50 4c 41 49 4e 20 61 6e 64 20 45 58 50   EXPLAIN and EXP
14a70 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
14a80 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0a  is intended for.
14a90 69 6e 74 65 72 61 63 74 69 76 65 20 61 6e 61 6c  interactive anal
14aa0 79 73 69 73 20 61 6e 64 20 74 72 6f 75 62 6c 65  ysis and trouble
14ab0 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c 79 2e 20 20  shooting only.  
14ac0 54 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74  The details of t
14ad0 68 65 20 0a 6f 75 74 70 75 74 20 66 6f 72 6d 61  he .output forma
14ae0 74 20 61 72 65 20 73 75 62 6a 65 63 74 20 74 6f  t are subject to
14af0 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65   change from one
14b00 20 72 65 6c 65 61 73 65 20 6f 66 20 53 51 4c 69   release of SQLi
14b10 74 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a  te to the next..
14b20 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f  Applications sho
14b30 75 6c 64 20 6e 6f 74 20 75 73 65 20 45 58 50 4c  uld not use EXPL
14b40 41 49 4e 20 6f 72 20 45 58 50 4c 41 49 4e 20 51  AIN or EXPLAIN Q
14b50 55 45 52 59 20 50 4c 41 4e 20 73 69 6e 63 65 0a  UERY PLAN since.
14b60 74 68 65 69 72 20 65 78 61 63 74 20 62 65 68 61  their exact beha
14b70 76 69 6f 72 20 69 73 20 76 61 72 69 61 62 6c 65  vior is variable
14b80 20 61 6e 64 20 6f 6e 6c 79 20 70 61 72 74 69 61   and only partia
14b90 6c 6c 79 20 64 6f 63 75 6d 65 6e 74 65 64 2e 3c  lly documented.<
14ba0 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68  /p>..<p>^When th
14bb0 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72  e EXPLAIN keywor
14bc0 64 20 61 70 70 65 61 72 73 20 62 79 20 69 74 73  d appears by its
14bd0 65 6c 66 20 69 74 20 63 61 75 73 65 73 20 74 68  elf it causes th
14be0 65 20 73 74 61 74 65 6d 65 6e 74 0a 74 6f 20 62  e statement.to b
14bf0 65 68 61 76 65 20 61 73 20 61 20 71 75 65 72 79  ehave as a query
14c00 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68   that returns th
14c10 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 0a 5b  e sequence of .[
14c20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
14c30 69 6e 73 74 72 75 63 74 69 6f 6e 73 5d 20 69 74  instructions] it
14c40 20 77 6f 75 6c 64 20 68 61 76 65 20 75 73 65 64   would have used
14c50 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65 20   to execute the 
14c60 63 6f 6d 6d 61 6e 64 20 68 61 64 0a 74 68 65 20  command had.the 
14c70 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20  EXPLAIN keyword 
14c80 6e 6f 74 20 62 65 65 6e 20 70 72 65 73 65 6e 74  not been present
14c90 2e 20 5e 57 68 65 6e 20 74 68 65 20 45 58 50 4c  . ^When the EXPL
14ca0 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 70  AIN QUERY PLAN p
14cb0 68 72 61 73 65 0a 61 70 70 65 61 72 73 2c 20 74  hrase.appears, t
14cc0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 72 65 74  he statement ret
14cd0 75 72 6e 73 20 68 69 67 68 2d 6c 65 76 65 6c 20  urns high-level 
14ce0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 72 65 67 61  information rega
14cf0 72 64 69 6e 67 20 74 68 65 20 71 75 65 72 79 0a  rding the query.
14d00 70 6c 61 6e 20 74 68 61 74 20 77 6f 75 6c 64 20  plan that would 
14d10 68 61 76 65 20 62 65 65 6e 20 75 73 65 64 2e 0a  have been used..
14d20 0a 54 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45  .The EXPLAIN QUE
14d30 52 59 20 50 4c 41 4e 20 63 6f 6d 6d 61 6e 64 20  RY PLAN command 
14d40 69 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 20  is described in 
14d50 0a 5b 65 78 70 6c 61 69 6e 20 71 75 65 72 79 20  .[explain query 
14d60 70 6c 61 6e 7c 6d 6f 72 65 20 64 65 74 61 69 6c  plan|more detail
14d70 20 68 65 72 65 5d 2e 0a 0a 3c 74 63 6c 3e 0a 23   here]...<tcl>.#
14d80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14d90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14db0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
14dd0 63 74 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e  ction expression
14de0 20 65 78 70 72 20 7b 2a 65 78 70 72 65 73 73 69   expr {*expressi
14df0 6f 6e 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 73  on {expression s
14e00 79 6e 74 61 78 7d 7d 0a 0a 52 65 63 75 72 73 69  yntax}}..Recursi
14e10 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
14e20 65 78 70 72 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  expr.</tcl>..<p>
14e30 54 68 69 73 20 73 65 63 74 69 6f 6e 20 69 73 20  This section is 
14e40 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74  different from t
14e50 68 65 20 6f 74 68 65 72 73 2e 20 20 4d 6f 73 74  he others.  Most
14e60 20 6f 74 68 65 72 20 73 65 63 74 69 6f 6e 73 20   other sections 
14e70 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d 65 6e 74  of.this document
14e80 20 74 61 6c 6b 73 20 61 62 6f 75 74 20 61 20 70   talks about a p
14e90 61 72 74 69 63 75 6c 61 72 20 53 51 4c 20 63 6f  articular SQL co
14ea0 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 73 65 63  mmand.  This sec
14eb0 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20 74 61  tion does.not ta
14ec0 6c 6b 20 61 62 6f 75 74 20 61 20 73 74 61 6e 64  lk about a stand
14ed0 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20 62 75  alone command bu
14ee0 74 20 61 62 6f 75 74 20 22 65 78 70 72 65 73 73  t about "express
14ef0 69 6f 6e 73 22 20 77 68 69 63 68 20 61 72 65 20  ions" which are 
14f00 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f  .subcomponents o
14f10 66 20 6d 6f 73 74 20 6f 74 68 65 72 20 63 6f 6d  f most other com
14f20 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  mands.</p>..<tcl
14f30 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 69 6e  >hd_fragment bin
14f40 61 72 79 6f 70 73 20 7b 62 69 6e 61 72 79 20 6f  aryops {binary o
14f50 70 65 72 61 74 6f 72 73 7d 3c 2f 74 63 6c 3e 0a  perators}</tcl>.
14f60 3c 68 33 3e 4f 70 65 72 61 74 6f 72 73 3c 2f 68  <h3>Operators</h
14f70 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69 74 65 20 75  3>.<p>^(SQLite u
14f80 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65 20 66  nderstands the f
14f90 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e 61 72 79 20  ollowing binary 
14fa0 6f 70 65 72 61 74 6f 72 73 2c 20 69 6e 20 6f 72  operators, in or
14fb0 64 65 72 20 66 72 6f 6d 0a 68 69 67 68 65 73 74  der from.highest
14fc0 20 74 6f 20 6c 6f 77 65 73 74 20 70 72 65 63 65   to lowest prece
14fd0 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  dence:</p>..<blo
14fe0 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66  ckquote><pre>.<f
14ff0 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32 63  ont color="#2c2c
15000 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a 2a 20 20 20  f0"><big>||.*   
15010 20 2f 20 20 20 20 25 0a 2b 20 20 20 20 2d 0a 26   /    %.+    -.&
15020 6c 74 3b 26 6c 74 3b 20 20 20 26 67 74 3b 26 67  lt;&lt;   &gt;&g
15030 74 3b 20 20 20 26 61 6d 70 3b 20 20 20 20 7c 0a  t;   &amp;    |.
15040 26 6c 74 3b 20 20 20 20 26 6c 74 3b 3d 20 20 20  &lt;    &lt;=   
15050 26 67 74 3b 20 20 20 20 26 67 74 3b 3d 0a 3d 20  &gt;    &gt;=.= 
15060 20 20 20 3d 3d 20 20 20 21 3d 20 20 20 26 6c 74     ==   !=   &lt
15070 3b 26 67 74 3b 20 20 20 3c 2f 62 69 67 3e 49 53  ;&gt;   </big>IS
15080 20 20 20 49 53 20 4e 4f 54 20 20 20 49 4e 20 20     IS NOT   IN  
15090 20 4c 49 4b 45 20 20 20 47 4c 4f 42 20 20 20 4d   LIKE   GLOB   M
150a0 41 54 43 48 20 20 20 52 45 47 45 58 50 0a 41 4e  ATCH   REGEXP.AN
150b0 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e 74 3e 0a 3c  D   .OR</font>.<
150c0 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
150d0 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53 75 70 70 6f  e>)^..<p>^(Suppo
150e0 72 74 65 64 20 75 6e 61 72 79 20 70 72 65 66 69  rted unary prefi
150f0 78 20 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20  x operators are 
15100 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  these:</p>..<blo
15110 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66  ckquote><pre>.<f
15120 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32 63  ont color="#2c2c
15130 66 30 22 3e 3c 62 69 67 3e 2d 20 20 20 20 2b 20  f0"><big>-    + 
15140 20 20 20 7e 20 20 20 20 4e 4f 54 3c 2f 62 69 67     ~    NOT</big
15150 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c  ></font>.</pre><
15160 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
15170 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
15180 20 63 6f 6c 6c 61 74 65 6f 70 20 7b 43 4f 4c 4c   collateop {COLL
15190 41 54 45 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74  ATE operator}</t
151a0 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c  cl>.<p>^The COLL
151b0 41 54 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20  ATE operator is 
151c0 61 20 75 6e 61 72 79 20 70 6f 73 74 66 69 78 0a  a unary postfix.
151d0 6f 70 65 72 61 74 6f 72 20 74 68 61 74 20 61 73  operator that as
151e0 73 69 67 6e 73 20 61 20 5b 63 6f 6c 6c 61 74 69  signs a [collati
151f0 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74 6f 20  ng sequence] to 
15200 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 5e  an expression..^
15210 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  The COLLATE oper
15220 61 74 6f 72 20 68 61 73 20 61 20 68 69 67 68 65  ator has a highe
15230 72 20 70 72 65 63 65 64 65 6e 63 65 20 28 62 69  r precedence (bi
15240 6e 64 73 20 6d 6f 72 65 20 74 69 67 68 74 6c 79  nds more tightly
15250 29 20 74 68 61 6e 20 61 6e 79 0a 62 69 6e 61 72  ) than any.binar
15260 79 20 6f 70 65 72 61 74 6f 72 20 61 6e 64 20 61  y operator and a
15270 6e 79 20 75 6e 61 72 79 20 70 72 65 66 69 78 20  ny unary prefix 
15280 6f 70 65 72 61 74 6f 72 20 65 78 63 65 70 74 20  operator except 
15290 22 7e 22 2e 0a 28 43 4f 4c 4c 41 54 45 20 61 6e  "~"..(COLLATE an
152a0 64 20 22 7e 22 20 61 72 65 20 61 73 73 6f 63 69  d "~" are associ
152b0 61 74 69 76 65 20 73 6f 20 74 68 65 69 72 20 62  ative so their b
152c0 69 6e 64 69 6e 67 20 6f 72 64 65 72 20 64 6f 65  inding order doe
152d0 73 20 6e 6f 74 20 6d 61 74 74 65 72 2e 29 0a 5e  s not matter.).^
152e0 54 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  The collating se
152f0 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68  quence set by th
15300 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  e COLLATE operat
15310 6f 72 20 6f 76 65 72 72 69 64 65 73 20 74 68 65  or overrides the
15320 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  .collating seque
15330 6e 63 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62  nce determined b
15340 79 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  y the COLLATE cl
15350 61 75 73 65 20 69 6e 20 61 20 74 61 62 6c 65 0a  ause in a table.
15360 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69  [column definiti
15370 6f 6e 5d 2e 0a 53 65 65 20 74 68 65 20 5b 63 6f  on]..See the [co
15380 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
15390 7c 20 64 65 74 61 69 6c 65 64 20 64 69 73 63 75  | detailed discu
153a0 73 73 69 6f 6e 20 6f 6e 20 63 6f 6c 6c 61 74 69  ssion on collati
153b0 6e 67 20 73 65 71 75 65 6e 63 65 73 5d 0a 69 6e  ng sequences].in
153c0 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 20 7c   the [datatype |
153d0 20 44 61 74 61 74 79 70 65 20 49 6e 20 53 51 4c   Datatype In SQL
153e0 69 74 65 33 5d 20 64 6f 63 75 6d 65 6e 74 20 66  ite3] document f
153f0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
15400 66 6f 72 6d 61 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a  formation..</p>.
15410 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 0a  .<tcl>hd_puts ".
15420 3c 70 3e 5e 54 68 65 20 75 6e 61 72 79 20 6f 70  <p>^The unary op
15430 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72  erator [Operator
15440 20 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20   +] is a no-op. 
15450 20 5e 49 74 20 63 61 6e 20 62 65 20 61 70 70 6c   ^It can be appl
15460 69 65 64 0a 74 6f 20 73 74 72 69 6e 67 73 2c 20  ied.to strings, 
15470 6e 75 6d 62 65 72 73 2c 20 62 6c 6f 62 73 20 6f  numbers, blobs o
15480 72 20 4e 55 4c 4c 20 61 6e 64 20 69 74 20 61 6c  r NULL and it al
15490 77 61 79 73 20 72 65 74 75 72 6e 73 20 61 20 72  ways returns a r
154a0 65 73 75 6c 74 0a 77 69 74 68 20 74 68 65 20 73  esult.with the s
154b0 61 6d 65 20 76 61 6c 75 65 20 61 73 20 74 68 65  ame value as the
154c0 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f   operand.</p>"</
154d0 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68  tcl>..<p>Note th
154e0 61 74 20 74 68 65 72 65 20 61 72 65 20 74 77 6f  at there are two
154f0 20 76 61 72 69 61 74 69 6f 6e 73 20 6f 66 20 74   variations of t
15500 68 65 20 65 71 75 61 6c 73 20 61 6e 64 20 6e 6f  he equals and no
15510 74 20 65 71 75 61 6c 73 0a 6f 70 65 72 61 74 6f  t equals.operato
15520 72 73 2e 20 20 5e 45 71 75 61 6c 73 20 63 61 6e  rs.  ^Equals can
15530 20 62 65 20 65 69 74 68 65 72 0a 0a 3c 74 63 6c   be either..<tcl
15540 3e 0a 68 64 5f 70 75 74 73 20 22 5b 4f 70 65 72  >.hd_puts "[Oper
15550 61 74 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70 65 72  ator =] or [Oper
15560 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54 68 65 20 6e  ator ==]..^The n
15570 6f 6e 2d 65 71 75 61 6c 73 20 6f 70 65 72 61 74  on-equals operat
15580 6f 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  or can be either
15590 0a 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 6f  .[Operator !=] o
155a0 72 20 5b 4f 70 65 72 61 74 6f 72 20 7b 26 6c 74  r [Operator {&lt
155b0 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68 65 20 5b 4f  ;&gt;}]..^The [O
155c0 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f 70 65 72  perator ||] oper
155d0 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e 63 61 74  ator is \"concat
155e0 65 6e 61 74 65 5c 22 20 2d 20 69 74 20 6a 6f 69  enate\" - it joi
155f0 6e 73 20 74 6f 67 65 74 68 65 72 0a 74 68 65 20  ns together.the 
15600 74 77 6f 20 73 74 72 69 6e 67 73 20 6f 66 20 69  two strings of i
15610 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a 5e 54 68  ts operands..^Th
15620 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72  e operator [Oper
15630 61 74 6f 72 20 25 5d 20 6f 75 74 70 75 74 73 20  ator %] outputs 
15640 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
15650 65 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a 6f  e of its left .o
15660 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69 74  perand modulo it
15670 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 2e  s right operand.
15680 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
15690 2c 20 74 68 65 0a 6f 70 65 72 61 74 6f 72 20 5b  , the.operator [
156a0 4f 70 65 72 61 74 6f 72 20 25 5d 20 77 6f 72 6b  Operator %] work
156b0 73 20 69 6e 20 53 51 4c 69 74 65 20 74 68 65 20  s in SQLite the 
156c0 73 61 6d 65 20 61 73 20 69 74 20 64 6f 65 73 0a  same as it does.
156d0 69 6e 20 41 4e 53 49 2d 43 2e 3c 2f 70 3e 0a 0a  in ANSI-C.</p>..
156e0 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  <p>^The result o
156f0 66 20 61 6e 79 20 62 69 6e 61 72 79 20 6f 70 65  f any binary ope
15700 72 61 74 6f 72 20 69 73 20 65 69 74 68 65 72 20  rator is either 
15710 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20  a numeric value 
15720 6f 72 20 0a 4e 55 4c 4c 2c 20 65 78 63 65 70 74  or .NULL, except
15730 20 66 6f 72 20 74 68 65 20 5b 4f 70 65 72 61 74   for the [Operat
15740 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65 6e 61  or ||] concatena
15750 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20 77 68  tion operator wh
15760 69 63 68 20 61 6c 77 61 79 73 20 0a 65 76 61 6c  ich always .eval
15770 75 61 74 65 73 20 74 6f 20 65 69 74 68 65 72 20  uates to either 
15780 4e 55 4c 4c 20 6f 72 20 61 20 74 65 78 74 20 76  NULL or a text v
15790 61 6c 75 65 2e 3c 2f 70 3e 22 0a 0a 68 64 5f 66  alue.</p>"..hd_f
157a0 72 61 67 6d 65 6e 74 20 7b 69 73 69 73 6e 6f 74  ragment {isisnot
157b0 7d 20 7b 49 53 20 6f 70 65 72 61 74 6f 72 7d 20  } {IS operator} 
157c0 7b 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72  {IS NOT operator
157d0 7d 0a 0a 68 64 5f 70 75 74 73 20 22 3c 70 3e 5e  }..hd_puts "<p>^
157e0 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 49 53  The [Operator IS
157f0 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20  ] and [Operator 
15800 7b 49 53 20 4e 4f 54 7d 5d 20 6f 70 65 72 61 74  {IS NOT}] operat
15810 6f 72 73 20 77 6f 72 6b 0a 6c 69 6b 65 20 5b 4f  ors work.like [O
15820 70 65 72 61 74 6f 72 20 3d 5d 20 61 6e 64 20 5b  perator =] and [
15830 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 65 78 63  Operator !=] exc
15840 65 70 74 20 77 68 65 6e 20 6f 6e 65 20 6f 72 20  ept when one or 
15850 62 6f 74 68 20 6f 66 20 74 68 65 0a 6f 70 65 72  both of the.oper
15860 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2e 20 5e  ands are NULL. ^
15870 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 69 66  In this case, if
15880 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
15890 72 65 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  re NULL, then th
158a0 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76  e.IS operator ev
158b0 61 6c 75 61 74 65 73 20 74 6f 20 31 20 28 74 72  aluates to 1 (tr
158c0 75 65 29 20 61 6e 64 20 74 68 65 20 49 53 20 4e  ue) and the IS N
158d0 4f 54 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c  OT operator eval
158e0 75 61 74 65 73 0a 74 6f 20 30 20 28 66 61 6c 73  uates.to 0 (fals
158f0 65 29 2e 20 5e 49 66 20 6f 6e 65 20 6f 70 65 72  e). ^If one oper
15900 61 6e 64 20 69 73 20 4e 55 4c 4c 20 61 6e 64 20  and is NULL and 
15910 74 68 65 20 6f 74 68 65 72 20 69 73 20 6e 6f 74  the other is not
15920 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20 6f 70  , then the.IS op
15930 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73  erator evaluates
15940 20 74 6f 20 30 20 28 66 61 6c 73 65 29 20 61 6e   to 0 (false) an
15950 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f 70 65  d the IS NOT ope
15960 72 61 74 6f 72 20 69 73 20 31 20 28 74 72 75 65  rator is 1 (true
15970 29 2e 0a 5e 49 74 20 69 73 20 6e 6f 74 20 70 6f  )..^It is not po
15980 73 73 69 62 6c 65 20 66 6f 72 20 61 6e 20 49 53  ssible for an IS
15990 20 6f 72 20 49 53 20 4e 4f 54 20 65 78 70 72 65   or IS NOT expre
159a0 73 73 69 6f 6e 20 74 6f 20 65 76 61 6c 75 61 74  ssion to evaluat
159b0 65 20 74 6f 20 4e 55 4c 4c 2e 0a 5e 4f 70 65 72  e to NULL..^Oper
159c0 61 74 6f 72 73 20 5b 4f 70 65 72 61 74 6f 72 20  ators [Operator 
159d0 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f  IS] and [Operato
159e0 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 68 61 76 65  r {IS NOT}] have
159f0 20 74 68 65 20 73 61 6d 65 20 0a 70 72 65 63 65   the same .prece
15a00 64 65 6e 63 65 20 61 73 20 5b 4f 70 65 72 61 74  dence as [Operat
15a10 6f 72 20 3d 5d 2e 22 0a 0a 3c 74 63 6c 3e 68 64  or =]."..<tcl>hd
15a20 5f 66 72 61 67 6d 65 6e 74 20 6c 69 74 76 61 6c  _fragment litval
15a30 75 65 20 7b 6c 69 74 65 72 61 6c 20 76 61 6c 75  ue {literal valu
15a40 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4c 69 74  e}</tcl>.<h3>Lit
15a50 65 72 61 6c 20 56 61 6c 75 65 73 20 28 43 6f 6e  eral Values (Con
15a60 73 74 61 6e 74 73 29 3c 2f 68 33 3e 0a 3c 70 3e  stants)</h3>.<p>
15a70 0a 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65  .A literal value
15a80 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 63 6f   represents a co
15a90 6e 73 74 61 6e 74 2e 0a 5e 4c 69 74 65 72 61 6c  nstant..^Literal
15aa0 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20 69   values may be i
15ab0 6e 74 65 67 65 72 73 2c 20 66 6c 6f 61 74 69 6e  ntegers, floatin
15ac0 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 73 2c  g point numbers,
15ad0 20 73 74 72 69 6e 67 73 2c 0a 42 4c 4f 42 73 2c   strings,.BLOBs,
15ae0 20 6f 72 20 4e 55 4c 4c 73 2e 0a 3c 70 3e 0a 54   or NULLs..<p>.T
15af0 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20 69 6e  he syntax for in
15b00 74 65 67 65 72 20 61 6e 64 20 66 6c 6f 61 74 69  teger and floati
15b10 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c  ng point literal
15b20 73 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c 79 0a  s (collectively.
15b30 22 6e 75 6d 65 72 69 63 20 6c 69 74 65 72 61 6c  "numeric literal
15b40 73 22 29 20 69 73 20 73 68 6f 77 6e 20 62 79 20  s") is shown by 
15b50 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69  the following di
15b60 61 67 72 61 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  agram:</p>..<tcl
15b70 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6e  >BubbleDiagram n
15b80 75 6d 65 72 69 63 2d 6c 69 74 65 72 61 6c 3c 2f  umeric-literal</
15b90 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28 49 66 20 61  tcl>..<p>.^(If a
15ba0 20 6e 75 6d 65 72 69 63 20 6c 69 74 65 72 61 6c   numeric literal
15bb0 20 68 61 73 20 61 20 64 65 63 69 6d 61 6c 20 70   has a decimal p
15bc0 6f 69 6e 74 20 6f 72 20 61 6e 20 65 78 70 6f 6e  oint or an expon
15bd0 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75 73 65  entiation.clause
15be0 20 6f 72 20 69 66 20 69 74 73 20 6d 61 67 6e 69   or if its magni
15bf0 74 75 64 65 20 69 73 20 6c 65 73 73 20 74 68 61  tude is less tha
15c00 6e 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34  n -9223372036854
15c10 37 37 35 38 30 38 20 6f 72 0a 67 72 65 61 74 65  775808 or.greate
15c20 72 20 74 68 61 6e 20 39 32 32 33 33 37 32 30 33  r than 922337203
15c30 36 38 35 34 37 37 35 38 30 37 2c 20 74 68 65 6e  6854775807, then
15c40 20 69 74 20 69 73 20 61 20 66 6c 6f 61 74 69 6e   it is a floatin
15c50 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 2e  g point literal.
15c60 0a 4f 74 68 65 72 77 69 73 65 20 69 73 20 69 74  .Otherwise is it
15c70 20 69 73 20 61 6e 20 20 69 6e 74 65 67 65 72 20   is an  integer 
15c80 6c 69 74 65 72 61 6c 2e 29 5e 0a 5e 54 68 65 20  literal.)^.^The 
15c90 22 45 22 20 63 68 61 72 61 63 74 65 72 20 74 68  "E" character th
15ca0 61 74 20 62 65 67 69 6e 73 20 74 68 65 20 65 78  at begins the ex
15cb0 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61  ponentiation.cla
15cc0 75 73 65 20 6f 66 20 61 20 66 6c 6f 61 74 69 6e  use of a floatin
15cd0 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 20  g point literal 
15ce0 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 75 70  can be either up
15cf0 70 65 72 20 6f 72 20 6c 6f 77 65 72 20 63 61 73  per or lower cas
15d00 65 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63 68 61  e..^(The "." cha
15d10 72 61 63 74 65 72 20 69 73 20 61 6c 77 61 79 73  racter is always
15d20 20 75 73 65 64 20 0a 61 73 20 74 68 65 20 64 65   used .as the de
15d30 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76 65 6e  cimal point even
15d40 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65 20 73   if the locale s
15d50 65 74 74 69 6e 67 20 73 70 65 63 69 66 69 65 73  etting specifies
15d60 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20 72 6f   "," for.this ro
15d70 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f 66 20  le - the use of 
15d80 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65 63 69  "," for the deci
15d90 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c 64 20  mal point would 
15da0 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74 61 63  result in.syntac
15db0 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e 29 5e  tic ambiguity.)^
15dc0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
15dd0 6e 74 20 68 65 78 69 6e 74 20 7b 68 65 78 61 64  nt hexint {hexad
15de0 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c  ecimal integer l
15df0 69 74 65 72 61 6c 73 7d 20 7b 68 65 78 61 64 65  iterals} {hexade
15e00 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 7d 3c  cimal integers}<
15e10 2f 74 63 6c 3e 0a 3c 70 3e 5e 48 65 78 61 64 65  /tcl>.<p>^Hexade
15e20 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c 69  cimal integer li
15e30 74 65 72 61 6c 73 20 66 6f 6c 6c 6f 77 20 74 68  terals follow th
15e40 65 20 43 2d 6c 61 6e 67 75 61 67 65 20 6e 6f 74  e C-language not
15e50 61 74 69 6f 6e 20 6f 66 0a 22 30 78 22 20 6f 72  ation of."0x" or
15e60 20 22 30 58 22 20 66 6f 6c 6c 6f 77 65 64 20 62   "0X" followed b
15e70 79 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64 69  y hexadecimal di
15e80 67 69 74 73 2e 0a 5e 46 6f 72 20 65 78 61 6d 70  gits..^For examp
15e90 6c 65 2c 20 30 78 31 32 33 34 20 6d 65 61 6e 73  le, 0x1234 means
15ea0 20 74 68 65 20 73 61 6d 65 20 61 73 20 34 36 36   the same as 466
15eb0 30 0a 61 6e 64 20 30 78 38 30 30 30 30 30 30 30  0.and 0x80000000
15ec0 30 30 30 30 30 30 30 30 20 6d 65 61 6e 73 20 74  00000000 means t
15ed0 68 65 20 73 61 6d 65 20 61 73 20 2d 39 32 32 33  he same as -9223
15ee0 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38 2e  372036854775808.
15ef0 0a 20 5e 28 48 65 78 61 64 65 63 69 6d 61 6c 20  . ^(Hexadecimal 
15f00 69 6e 74 65 67 65 72 20 6c 69 74 65 72 61 6c 73  integer literals
15f10 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
15f20 20 61 73 20 36 34 2d 62 69 74 0a 74 77 6f 27 73   as 64-bit.two's
15f30 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65  -complement inte
15f40 67 65 72 73 20 61 6e 64 20 61 72 65 20 74 68 75  gers and are thu
15f50 73 20 6c 69 6d 69 74 65 64 0a 74 6f 20 73 69 78  s limited.to six
15f60 74 65 65 6e 20 73 69 67 6e 69 66 69 63 61 6e 74  teen significant
15f70 20 64 69 67 69 74 73 20 6f 66 20 70 72 65 63 69   digits of preci
15f80 73 69 6f 6e 2e 29 5e 0a 53 75 70 70 6f 72 74 20  sion.)^.Support 
15f90 66 6f 72 20 68 65 78 61 64 65 63 69 6d 61 6c 20  for hexadecimal 
15fa0 69 6e 74 65 67 65 72 73 20 77 61 73 20 61 64 64  integers was add
15fb0 65 64 20 74 6f 20 53 51 4c 69 74 65 0a 76 65 72  ed to SQLite.ver
15fc0 73 69 6f 6e 20 33 2e 38 2e 36 20 28 5b 64 61 74  sion 3.8.6 ([dat
15fd0 65 6f 66 3a 33 2e 38 2e 36 5d 29 2e 0a 5e 46 6f  eof:3.8.6])..^Fo
15fe0 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70  r backwards comp
15ff0 61 74 69 62 69 6c 69 74 79 2c 20 74 68 65 20 22  atibility, the "
16000 30 78 22 20 68 65 78 61 64 65 63 69 6d 61 6c 20  0x" hexadecimal 
16010 69 6e 74 65 67 65 72 0a 6e 6f 74 61 74 69 6f 6e  integer.notation
16020 20 69 73 20 6f 6e 6c 79 20 75 6e 64 65 72 73 74   is only underst
16030 6f 6f 64 20 62 79 20 74 68 65 20 53 51 4c 20 6c  ood by the SQL l
16040 61 6e 67 75 61 67 65 20 70 61 72 73 65 72 2c 20  anguage parser, 
16050 6e 6f 74 20 62 79 20 74 68 65 0a 74 79 70 65 20  not by the.type 
16060 63 6f 6e 76 65 72 73 69 6f 6e 73 20 72 6f 75 74  conversions rout
16070 69 6e 65 73 2e 0a 5e 28 53 74 72 69 6e 67 20 76  ines..^(String v
16080 61 72 69 61 62 6c 65 73 20 74 68 61 74 0a 63 6f  ariables that.co
16090 6e 74 61 69 6e 20 74 65 78 74 20 66 6f 72 6d 61  ntain text forma
160a0 74 74 65 64 20 6c 69 6b 65 20 68 65 78 61 64 65  tted like hexade
160b0 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 61  cimal integers a
160c0 72 65 20 6e 6f 74 0a 69 6e 74 65 72 70 72 65 74  re not.interpret
160d0 65 64 20 61 73 20 68 65 78 61 64 65 63 69 6d 61  ed as hexadecima
160e0 6c 20 69 6e 74 65 67 65 72 73 20 77 68 65 6e 20  l integers when 
160f0 63 6f 65 72 63 69 6e 67 20 74 68 65 20 73 74 72  coercing the str
16100 69 6e 67 20 76 61 6c 75 65 0a 69 6e 74 6f 20 61  ing value.into a
16110 6e 20 69 6e 74 65 67 65 72 20 64 75 65 20 74 6f  n integer due to
16120 20 61 20 5b 43 41 53 54 20 65 78 70 72 65 73 73   a [CAST express
16130 69 6f 6e 5d 20 6f 72 20 66 6f 72 20 61 20 5b 63  ion] or for a [c
16140 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 0a  olumn affinity].
16150 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 6f  transformation o
16160 72 20 70 72 69 6f 72 20 74 6f 20 70 65 72 66 6f  r prior to perfo
16170 72 6d 69 6e 67 20 61 20 6e 75 6d 65 72 69 63 20  rming a numeric 
16180 6f 70 65 72 61 74 69 6f 6e 20 6f 72 20 66 6f 72  operation or for
16190 0a 61 6e 79 20 6f 74 68 65 72 20 72 75 6e 2d 74  .any other run-t
161a0 69 6d 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e  ime conversions.
161b0 29 5e 20 20 5e 28 57 68 65 6e 20 63 6f 65 72 63  )^  ^(When coerc
161c0 69 6e 67 20 61 0a 73 74 72 69 6e 67 20 76 61 6c  ing a.string val
161d0 75 65 20 69 6e 20 74 68 65 20 66 6f 72 6d 61 74  ue in the format
161e0 20 6f 66 20 61 20 68 65 78 61 64 65 63 69 6d 61   of a hexadecima
161f0 6c 20 69 6e 74 65 67 65 72 20 69 6e 74 6f 20 61  l integer into a
16200 6e 20 69 6e 74 65 67 65 72 0a 76 61 6c 75 65 2c  n integer.value,
16210 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
16220 70 72 6f 63 65 73 73 20 73 74 6f 70 73 20 77 68  process stops wh
16230 65 6e 20 74 68 65 20 27 78 27 20 63 68 61 72 61  en the 'x' chara
16240 63 74 65 72 20 69 73 20 73 65 65 6e 0a 73 6f 20  cter is seen.so 
16250 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 69 6e  the resulting in
16260 74 65 67 65 72 20 76 61 6c 75 65 20 69 73 20 61  teger value is a
16270 6c 77 61 79 73 20 7a 65 72 6f 2e 29 5e 0a 5e 28  lways zero.)^.^(
16280 53 51 4c 69 74 65 20 6f 6e 6c 79 20 75 6e 64 65  SQLite only unde
16290 72 73 74 61 6e 64 73 20 74 68 65 20 68 65 78 61  rstands the hexa
162a0 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20  decimal integer 
162b0 6e 6f 74 61 74 69 6f 6e 20 77 68 65 6e 20 69 74  notation when it
162c0 0a 61 70 70 65 61 72 73 20 69 6e 20 74 68 65 20  .appears in the 
162d0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 65  SQL statement te
162e0 78 74 2c 20 6e 6f 74 20 77 68 65 6e 20 69 74 20  xt, not when it 
162f0 61 70 70 65 61 72 73 20 61 73 0a 70 61 72 74 20  appears as.part 
16300 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  of the content o
16310 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 29  f the database.)
16320 5e 0a 0a 3c 70 3e 20 5e 41 20 73 74 72 69 6e 67  ^..<p> ^A string
16330 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 66 6f 72   constant is for
16340 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73 69 6e 67  med by enclosing
16350 20 74 68 65 0a 73 74 72 69 6e 67 20 69 6e 20 73   the.string in s
16360 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 28 27 29  ingle quotes (')
16370 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20 71 75 6f  .  ^A single quo
16380 74 65 20 77 69 74 68 69 6e 20 74 68 65 20 73 74  te within the st
16390 72 69 6e 67 20 63 61 6e 0a 62 65 20 65 6e 63 6f  ring can.be enco
163a0 64 65 64 20 62 79 20 70 75 74 74 69 6e 67 20 74  ded by putting t
163b0 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73  wo single quotes
163c0 20 69 6e 20 61 20 72 6f 77 20 2d 20 61 73 20 69   in a row - as i
163d0 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73 74 79 6c  n Pascal..C-styl
163e0 65 20 65 73 63 61 70 65 73 20 75 73 69 6e 67 20  e escapes using 
163f0 74 68 65 20 62 61 63 6b 73 6c 61 73 68 20 63 68  the backslash ch
16400 61 72 61 63 74 65 72 20 61 72 65 20 6e 6f 74 20  aracter are not 
16410 73 75 70 70 6f 72 74 65 64 20 62 65 63 61 75 73  supported becaus
16420 65 0a 74 68 65 79 20 61 72 65 20 6e 6f 74 20 73  e.they are not s
16430 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 0a 3c 70  tandard SQL...<p
16440 3e 20 5e 42 4c 4f 42 20 6c 69 74 65 72 61 6c 73  > ^BLOB literals
16450 20 61 72 65 20 73 74 72 69 6e 67 20 6c 69 74 65   are string lite
16460 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20  rals containing 
16470 68 65 78 61 64 65 63 69 6d 61 6c 20 64 61 74 61  hexadecimal data
16480 20 61 6e 64 0a 70 72 65 63 65 64 65 64 20 62 79   and.preceded by
16490 20 61 20 73 69 6e 67 6c 65 20 22 78 22 20 6f 72   a single "x" or
164a0 20 22 58 22 20 63 68 61 72 61 63 74 65 72 2e 20   "X" character. 
164b0 20 5e 28 45 78 61 6d 70 6c 65 3a 20 58 27 35 33   ^(Example: X'53
164c0 35 31 34 43 36 39 37 34 36 35 27 29 5e 0a 0a 3c  514C697465')^..<
164d0 70 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76 61  p>.^A literal va
164e0 6c 75 65 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  lue can also be 
164f0 74 68 65 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22  the token "NULL"
16500 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ..</p>..<tcl>hd_
16510 66 72 61 67 6d 65 6e 74 20 76 61 72 70 61 72 61  fragment varpara
16520 6d 20 70 61 72 61 6d 65 74 65 72 20 70 61 72 61  m parameter para
16530 6d 65 74 65 72 73 20 7b 62 6f 75 6e 64 20 70 61  meters {bound pa
16540 72 61 6d 65 74 65 72 7d 20 7b 62 6f 75 6e 64 20  rameter} {bound 
16550 70 61 72 61 6d 65 74 65 72 73 7d 3c 2f 74 63 6c  parameters}</tcl
16560 3e 0a 3c 68 33 3e 50 61 72 61 6d 65 74 65 72 73  >.<h3>Parameters
16570 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20 22 76 61 72  </h3>.<p>.A "var
16580 69 61 62 6c 65 22 20 6f 72 20 22 70 61 72 61 6d  iable" or "param
16590 65 74 65 72 22 20 74 6f 6b 65 6e 0a 73 70 65 63  eter" token.spec
165a0 69 66 69 65 73 20 61 20 70 6c 61 63 65 68 6f 6c  ifies a placehol
165b0 64 65 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  der in the expre
165c0 73 73 69 6f 6e 20 66 6f 72 20 61 20 0a 76 61 6c  ssion for a .val
165d0 75 65 20 74 68 61 74 20 69 73 20 66 69 6c 6c 65  ue that is fille
165e0 64 20 69 6e 20 61 74 20 72 75 6e 74 69 6d 65 20  d in at runtime 
165f0 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74  using the.[sqlit
16600 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c  e3_bind_blob() |
16610 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d   sqlite3_bind()]
16620 20 66 61 6d 69 6c 79 20 6f 66 20 43 2f 43 2b 2b   family of C/C++
16630 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 50 61 72   interfaces..Par
16640 61 6d 65 74 65 72 73 20 63 61 6e 20 74 61 6b 65  ameters can take
16650 20 73 65 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a   several forms:.
16660 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
16670 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a  e>.<table>.<tr>.
16680 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
16690 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
166a0 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69  b>?</b><i>NNN</i
166b0 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
166c0 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
166d0 28 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  (A question mark
166e0 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e   followed by a n
166f0 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e  umber <i>NNN</i>
16700 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f   holds a spot fo
16710 72 20 74 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72  r the.NNN-th par
16720 61 6d 65 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73  ameter.  NNN mus
16730 74 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61  t be between 1 a
16740 6e 64 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56  nd [SQLITE_MAX_V
16750 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e  ARIABLE_NUMBER].
16760 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  )^.</td>.</tr>.<
16770 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
16780 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
16790 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e  p"><b>?</b></td>
167a0 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
167b0 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 71 75 65 73  /td>.<td>^A ques
167c0 74 69 6f 6e 20 6d 61 72 6b 20 74 68 61 74 20 69  tion mark that i
167d0 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62  s not followed b
167e0 79 20 61 20 6e 75 6d 62 65 72 20 63 72 65 61 74  y a number creat
167f0 65 73 20 61 20 70 61 72 61 6d 65 74 65 72 0a 77  es a parameter.w
16800 69 74 68 20 61 20 6e 75 6d 62 65 72 20 6f 6e 65  ith a number one
16810 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
16820 65 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65  e largest parame
16830 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61  ter number alrea
16840 64 79 20 61 73 73 69 67 6e 65 64 2e 0a 5e 49 66  dy assigned..^If
16850 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20   this means the 
16860 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
16870 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
16880 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  .[SQLITE_MAX_VAR
16890 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69  IABLE_NUMBER], i
168a0 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 54  t is an error..T
168b0 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 66 6f  his parameter fo
168c0 72 6d 61 74 20 69 73 20 70 72 6f 76 69 64 65 64  rmat is provided
168d0 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69   for compatibili
168e0 74 79 20 77 69 74 68 20 6f 74 68 65 72 20 64 61  ty with other da
168f0 74 61 62 61 73 65 0a 65 6e 67 69 6e 65 73 2e 20  tabase.engines. 
16900 20 42 75 74 20 62 65 63 61 75 73 65 20 69 74 20   But because it 
16910 69 73 20 65 61 73 79 20 74 6f 20 6d 69 73 63 6f  is easy to misco
16920 75 6e 74 20 74 68 65 20 71 75 65 73 74 69 6f 6e  unt the question
16930 20 6d 61 72 6b 73 2c 20 74 68 65 0a 75 73 65 20   marks, the.use 
16940 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  of this paramete
16950 72 20 66 6f 72 6d 61 74 20 69 73 20 64 69 73 63  r format is disc
16960 6f 75 72 61 67 65 64 2e 20 20 50 72 6f 67 72 61  ouraged.  Progra
16970 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75 72  mmers are encour
16980 61 67 65 64 0a 74 6f 20 75 73 65 20 6f 6e 65 20  aged.to use one 
16990 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  of the symbolic 
169a0 66 6f 72 6d 61 74 73 20 62 65 6c 6f 77 20 6f 72  formats below or
169b0 20 74 68 65 20 3f 4e 4e 4e 20 66 6f 72 6d 61 74   the ?NNN format
169c0 20 61 62 6f 76 65 20 69 6e 73 74 65 61 64 2e 0a   above instead..
169d0 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
169e0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  .<td align="righ
169f0 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  t" valign="top">
16a00 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c  <b>:</b><i>AAAA<
16a10 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /i></td><td widt
16a20 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64  h="20"></td>.<td
16a30 3e 5e 41 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77  >^A colon follow
16a40 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66  ed by an identif
16a50 69 65 72 20 6e 61 6d 65 20 68 6f 6c 64 73 20 61  ier name holds a
16a60 20 73 70 6f 74 20 66 6f 72 20 61 20 0a 5b 73 71   spot for a .[sq
16a70 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
16a80 65 74 65 72 5f 6e 61 6d 65 7c 6e 61 6d 65 64 20  eter_name|named 
16a90 70 61 72 61 6d 65 74 65 72 5d 20 77 69 74 68 20  parameter] with 
16aa0 74 68 65 20 6e 61 6d 65 20 3a 41 41 41 41 2e 20  the name :AAAA. 
16ab0 20 0a 5e 28 4e 61 6d 65 64 20 70 61 72 61 6d 65   .^(Named parame
16ac0 74 65 72 73 20 61 72 65 20 61 6c 73 6f 20 6e 75  ters are also nu
16ad0 6d 62 65 72 65 64 2e 20 54 68 65 20 6e 75 6d 62  mbered. The numb
16ae0 65 72 20 61 73 73 69 67 6e 65 64 20 69 73 20 6f  er assigned is o
16af0 6e 65 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a  ne greater than.
16b00 74 68 65 20 6c 61 72 67 65 73 74 20 70 61 72 61  the largest para
16b10 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72  meter number alr
16b20 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e 29 5e  eady assigned.)^
16b30 20 5e 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20   ^If this means 
16b40 74 68 65 20 70 61 72 61 6d 65 74 65 72 0a 77 6f  the parameter.wo
16b50 75 6c 64 20 62 65 20 61 73 73 69 67 6e 65 64 20  uld be assigned 
16b60 61 20 6e 75 6d 62 65 72 20 67 72 65 61 74 65 72  a number greater
16b70 20 74 68 61 6e 20 5b 53 51 4c 49 54 45 5f 4d 41   than [SQLITE_MA
16b80 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
16b90 52 5d 2c 20 69 74 20 69 73 0a 61 6e 20 65 72 72  R], it is.an err
16ba0 6f 72 2e 20 54 6f 20 61 76 6f 69 64 20 63 6f 6e  or. To avoid con
16bb0 66 75 73 69 6f 6e 2c 20 69 74 20 69 73 20 62 65  fusion, it is be
16bc0 73 74 20 74 6f 20 61 76 6f 69 64 20 6d 69 78 69  st to avoid mixi
16bd0 6e 67 20 6e 61 6d 65 64 20 61 6e 64 20 6e 75 6d  ng named and num
16be0 62 65 72 65 64 0a 70 61 72 61 6d 65 74 65 72 73  bered.parameters
16bf0 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  .</td>.</tr>.<tr
16c00 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
16c10 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
16c20 3e 3c 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41 41 41  ><b>@</b><i>AAAA
16c30 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </i></td><td wid
16c40 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
16c50 64 3e 5e 41 6e 20 22 61 74 22 20 73 69 67 6e 20  d>^An "at" sign 
16c60 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
16c70 6b 65 20 61 20 63 6f 6c 6f 6e 2c 20 65 78 63 65  ke a colon, exce
16c80 70 74 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65  pt that the name
16c90 20 6f 66 0a 74 68 65 20 70 61 72 61 6d 65 74 65   of.the paramete
16ca0 72 20 63 72 65 61 74 65 64 20 69 73 20 40 41 41  r created is @AA
16cb0 41 41 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  AA.</td>.</tr>.<
16cc0 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
16cd0 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
16ce0 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41  p"><b>$</b><i>AA
16cf0 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77  AA</i></td><td w
16d00 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
16d10 3c 74 64 3e 5e 41 20 64 6f 6c 6c 61 72 2d 73 69  <td>^A dollar-si
16d20 67 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  gn followed by a
16d30 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  n identifier nam
16d40 65 20 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73  e also holds a s
16d50 70 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a  pot for a named.
16d60 70 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 74  parameter with t
16d70 68 65 20 6e 61 6d 65 20 24 41 41 41 41 2e 20 20  he name $AAAA.  
16d80 5e 28 54 68 65 20 69 64 65 6e 74 69 66 69 65 72  ^(The identifier
16d90 20 6e 61 6d 65 20 69 6e 20 74 68 69 73 20 63 61   name in this ca
16da0 73 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 0a 6f  se can include.o
16db0 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 63 63 75 72  ne or more occur
16dc0 72 65 6e 63 65 73 20 6f 66 20 22 3a 3a 22 20 61  rences of "::" a
16dd0 6e 64 20 61 20 73 75 66 66 69 78 20 65 6e 63 6c  nd a suffix encl
16de0 6f 73 65 64 20 69 6e 20 22 28 2e 2e 2e 29 22 20  osed in "(...)" 
16df0 63 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e 79 20 74  containing.any t
16e00 65 78 74 20 61 74 20 61 6c 6c 2e 29 5e 20 20 54  ext at all.)^  T
16e10 68 69 73 20 73 79 6e 74 61 78 20 69 73 20 74 68  his syntax is th
16e20 65 20 66 6f 72 6d 20 6f 66 20 61 20 76 61 72 69  e form of a vari
16e30 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65  able name in the
16e40 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 74 63 6c  .[http://www.tcl
16e50 2d 6c 61 6e 67 2e 6f 72 67 2f 20 7c 20 54 63 6c  -lang.org/ | Tcl
16e60 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e   programming lan
16e70 67 75 61 67 65 5d 2e 20 20 54 68 65 20 70 72 65  guage].  The pre
16e80 73 65 6e 63 65 0a 6f 66 20 74 68 69 73 20 73 79  sence.of this sy
16e90 6e 74 61 78 20 72 65 73 75 6c 74 73 20 66 72 6f  ntax results fro
16ea0 6d 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20  m the fact that 
16eb0 53 51 4c 69 74 65 20 69 73 20 72 65 61 6c 6c 79  SQLite is really
16ec0 20 61 20 0a 5b 54 63 6c 20 65 78 74 65 6e 73 69   a .[Tcl extensi
16ed0 6f 6e 5d 20 74 68 61 74 20 68 61 73 20 65 73 63  on] that has esc
16ee0 61 70 65 64 20 69 6e 74 6f 20 74 68 65 20 77 69  aped into the wi
16ef0 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  ld.</td>.</tr>.<
16f00 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
16f10 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61 72 61 6d  uote>..<p>^Param
16f20 65 74 65 72 73 20 74 68 61 74 20 61 72 65 20 6e  eters that are n
16f30 6f 74 20 61 73 73 69 67 6e 65 64 20 76 61 6c 75  ot assigned valu
16f40 65 73 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65  es using.[sqlite
16f50 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20  3_bind_blob() | 
16f60 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20  sqlite3_bind()] 
16f70 61 72 65 20 74 72 65 61 74 65 64 0a 61 73 20 4e  are treated.as N
16f80 55 4c 4c 2e 20 20 54 68 65 20 5b 73 71 6c 69 74  ULL.  The [sqlit
16f90 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
16fa0 72 5f 69 6e 64 65 78 28 29 5d 20 69 6e 74 65 72  r_index()] inter
16fb0 66 61 63 65 20 63 61 6e 20 62 65 20 75 73 65 64  face can be used
16fc0 0a 74 6f 20 74 72 61 6e 73 6c 61 74 65 20 61 20  .to translate a 
16fd0 73 79 6d 62 6f 6c 69 63 20 70 61 72 61 6d 65 74  symbolic paramet
16fe0 65 72 20 6e 61 6d 65 20 69 6e 74 6f 20 69 74 73  er name into its
16ff0 20 65 71 75 69 76 61 6c 65 6e 74 20 6e 75 6d 65   equivalent nume
17000 72 69 63 20 69 6e 64 65 78 2e 3c 2f 70 3e 0a 0a  ric index.</p>..
17010 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20  <p>^The maximum 
17020 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
17030 20 69 73 20 73 65 74 20 61 74 20 63 6f 6d 70 69   is set at compi
17040 6c 65 2d 74 69 6d 65 20 62 79 0a 74 68 65 20 5b  le-time by.the [
17050 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
17060 42 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d 61 63 72  BLE_NUMBER] macr
17070 6f 2e 20 20 5e 28 41 6e 20 69 6e 64 69 76 69 64  o.  ^(An individ
17080 75 61 6c 20 5b 64 61 74 61 62 61 73 65 20 63 6f  ual [database co
17090 6e 6e 65 63 74 69 6f 6e 5d 0a 44 20 63 61 6e 20  nnection].D can 
170a0 72 65 64 75 63 65 20 69 74 73 20 6d 61 78 69 6d  reduce its maxim
170b0 75 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d  um parameter num
170c0 62 65 72 20 62 65 6c 6f 77 20 74 68 65 20 63 6f  ber below the co
170d0 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61 78 69 6d  mpile-time maxim
170e0 75 6d 0a 75 73 69 6e 67 20 74 68 65 20 5b 73 71  um.using the [sq
170f0 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 44 2c 20  lite3_limit](D, 
17100 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41  [SQLITE_LIMIT_VA
17110 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 2e  RIABLE_NUMBER],.
17120 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 2e 29 5e  ..) interface.)^
17130 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
17140 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20 4c 49 4b  ragment like LIK
17150 45 20 45 53 43 41 50 45 3c 2f 74 63 6c 3e 0a 3c  E ESCAPE</tcl>.<
17160 68 33 3e 54 68 65 20 4c 49 4b 45 2c 20 47 4c 4f  h3>The LIKE, GLO
17170 42 2c 20 52 45 47 45 58 50 2c 20 61 6e 64 20 4d  B, REGEXP, and M
17180 41 54 43 48 20 6f 70 65 72 61 74 6f 72 73 3c 2f  ATCH operators</
17190 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45  h3>.<p>^The LIKE
171a0 20 6f 70 65 72 61 74 6f 72 20 64 6f 65 73 20 61   operator does a
171b0 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 69 6e   pattern matchin
171c0 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e 54  g comparison. ^T
171d0 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f 20 74 68  he operand.to th
171e0 65 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 4c  e right of the L
171f0 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e  IKE operator con
17200 74 61 69 6e 73 20 74 68 65 20 70 61 74 74 65 72  tains the patter
17210 6e 20 61 6e 64 20 74 68 65 20 6c 65 66 74 20 68  n and the left h
17220 61 6e 64 0a 6f 70 65 72 61 6e 64 20 63 6f 6e 74  and.operand cont
17230 61 69 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20  ains the string 
17240 74 6f 20 6d 61 74 63 68 20 61 67 61 69 6e 73 74  to match against
17250 20 74 68 65 20 70 61 74 74 65 72 6e 2e 0a 0a 3c   the pattern...<
17260 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 5e 41 20  tcl>hd_puts "^A 
17270 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28  percent symbol (
17280 5c 22 25 5c 22 29 20 69 6e 20 74 68 65 20 4c 49  \"%\") in the LI
17290 4b 45 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68  KE pattern match
172a0 65 73 20 61 6e 79 0a 73 65 71 75 65 6e 63 65 20  es any.sequence 
172b0 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  of zero or more 
172c0 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
172d0 65 20 73 74 72 69 6e 67 2e 20 20 5e 41 6e 20 75  e string.  ^An u
172e0 6e 64 65 72 73 63 6f 72 65 0a 28 5c 22 5f 5c 22  nderscore.(\"_\"
172f0 29 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61  ) in the LIKE pa
17300 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e  ttern matches an
17310 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74  y single charact
17320 65 72 20 69 6e 20 74 68 65 0a 73 74 72 69 6e 67  er in the.string
17330 2e 20 20 5e 28 41 6e 79 20 6f 74 68 65 72 20 63  .  ^(Any other c
17340 68 61 72 61 63 74 65 72 20 6d 61 74 63 68 65 73  haracter matches
17350 20 69 74 73 65 6c 66 20 6f 72 20 69 74 73 20 6c   itself or its l
17360 6f 77 65 72 2f 75 70 70 65 72 20 63 61 73 65 0a  ower/upper case.
17370 65 71 75 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e  equivalent (i.e.
17380 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76   case-insensitiv
17390 65 20 6d 61 74 63 68 69 6e 67 29 2e 29 5e 0a 0a  e matching).)^..
173a0 3c 75 3e 49 6d 70 6f 72 74 61 6e 74 20 4e 6f 74  <u>Important Not
173b0 65 3a 3c 2f 75 3e 20 5e 53 51 4c 69 74 65 20 6f  e:</u> ^SQLite o
173c0 6e 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64 73 20  nly.understands 
173d0 75 70 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65  upper/lower case
173e0 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61   for ASCII chara
173f0 63 74 65 72 73 20 62 79 20 64 65 66 61 75 6c 74  cters by default
17400 2e 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f 70 65  .  ^The.LIKE ope
17410 72 61 74 6f 72 20 69 73 20 63 61 73 65 20 73 65  rator is case se
17420 6e 73 69 74 69 76 65 20 62 79 20 64 65 66 61 75  nsitive by defau
17430 6c 74 20 66 6f 72 20 75 6e 69 63 6f 64 65 20 63  lt for unicode c
17440 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61  haracters that a
17450 72 65 0a 62 65 79 6f 6e 64 20 74 68 65 20 41 53  re.beyond the AS
17460 43 49 49 20 72 61 6e 67 65 2e 20 20 46 6f 72 20  CII range.  For 
17470 65 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20 65 78  example,.^the ex
17480 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61 27 26  pression <b>'a'&
17490 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27  nbsp;LIKE&nbsp;'
174a0 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45 20 62  A'</b>.is TRUE b
174b0 75 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26  ut <b>'&aelig;'&
174c0 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27  nbsp;LIKE&nbsp;'
174d0 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20  &AElig;'</b> is 
174e0 46 41 4c 53 45 2e 22 3c 2f 74 63 6c 3e 0a 54 68  FALSE."</tcl>.Th
174f0 65 20 49 43 55 20 65 78 74 65 6e 73 69 6f 6e 20  e ICU extension 
17500 74 6f 20 53 51 4c 69 74 65 20 69 6e 63 6c 75 64  to SQLite includ
17510 65 73 20 61 6e 20 65 6e 68 61 6e 63 65 64 20 76  es an enhanced v
17520 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 0a 4c 49  ersion of the.LI
17530 4b 45 20 6f 70 65 72 61 74 6f 72 20 74 68 61 74  KE operator that
17540 20 64 6f 65 73 20 63 61 73 65 20 66 6f 6c 64 69   does case foldi
17550 6e 67 20 61 63 72 6f 73 73 20 61 6c 6c 20 75 6e  ng across all un
17560 69 63 6f 64 65 20 63 68 61 72 61 63 74 65 72 73  icode characters
17570 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68  .</p>..<p>^If th
17580 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50  e optional ESCAP
17590 45 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  E clause is pres
175a0 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 65 78  ent, then the ex
175b0 70 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69  pression.followi
175c0 6e 67 20 74 68 65 20 45 53 43 41 50 45 20 6b 65  ng the ESCAPE ke
175d0 79 77 6f 72 64 20 6d 75 73 74 20 65 76 61 6c 75  yword must evalu
175e0 61 74 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20  ate to a string 
175f0 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 0a 61 20  consisting of.a 
17600 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
17610 2e 20 5e 54 68 69 73 20 63 68 61 72 61 63 74 65  . ^This characte
17620 72 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e  r may be used in
17630 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72   the LIKE patter
17640 6e 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74  n.to include lit
17650 65 72 61 6c 20 70 65 72 63 65 6e 74 20 6f 72 20  eral percent or 
17660 75 6e 64 65 72 73 63 6f 72 65 20 63 68 61 72 61  underscore chara
17670 63 74 65 72 73 2e 20 5e 54 68 65 20 65 73 63 61  cters. ^The esca
17680 70 65 0a 63 68 61 72 61 63 74 65 72 20 66 6f 6c  pe.character fol
17690 6c 6f 77 65 64 20 62 79 20 61 20 70 65 72 63 65  lowed by a perce
176a0 6e 74 20 73 79 6d 62 6f 6c 20 28 25 29 2c 20 75  nt symbol (%), u
176b0 6e 64 65 72 73 63 6f 72 65 20 28 5f 29 2c 20 6f  nderscore (_), o
176c0 72 20 61 20 73 65 63 6f 6e 64 0a 69 6e 73 74 61  r a second.insta
176d0 6e 63 65 20 6f 66 20 74 68 65 20 65 73 63 61 70  nce of the escap
176e0 65 20 63 68 61 72 61 63 74 65 72 20 69 74 73 65  e character itse
176f0 6c 66 20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74  lf matches a.lit
17700 65 72 61 6c 20 70 65 72 63 65 6e 74 20 73 79 6d  eral percent sym
17710 62 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 2c  bol, underscore,
17720 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 65 73 63   or a single esc
17730 61 70 65 20 63 68 61 72 61 63 74 65 72 2c 0a 72  ape character,.r
17740 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 0a 3c 70  espectively...<p
17750 3e 5e 54 68 65 20 69 6e 66 69 78 20 4c 49 4b 45  >^The infix LIKE
17760 20 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70   operator is imp
17770 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c  lemented by call
17780 69 6e 67 20 74 68 65 0a 61 70 70 6c 69 63 61 74  ing the.applicat
17790 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20  ion-defined SQL 
177a0 66 75 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b 65 28  functions [like(
177b0 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69  <i>Y</i>,<i>X</i
177c0 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c 69 3e  >)] or.[like(<i>
177d0 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c  Y</i>,<i>X</i>,<
177e0 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f  i>Z</i>)]</a>.</
177f0 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45  p>..<p>^The LIKE
17800 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65   operator can be
17810 20 6d 61 64 65 20 63 61 73 65 20 73 65 6e 73 69   made case sensi
17820 74 69 76 65 20 75 73 69 6e 67 20 74 68 65 0a 5b  tive using the.[
17830 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c  case_sensitive_l
17840 69 6b 65 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e  ike pragma].</p>
17850 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
17860 6e 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63  nt glob GLOB</tc
17870 6c 3e 0a 3c 70 3e 5e 54 68 65 20 47 4c 4f 42 20  l>.<p>^The GLOB 
17880 6f 70 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69  operator is simi
17890 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20  lar to LIKE but 
178a0 75 73 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69  uses the Unix.fi
178b0 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74  le globbing synt
178c0 61 78 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63  ax for its wildc
178d0 61 72 64 73 2e 20 20 5e 41 6c 73 6f 2c 20 47 4c  ards.  ^Also, GL
178e0 4f 42 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69  OB is case.sensi
178f0 74 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b  tive, unlike LIK
17900 45 2e 20 20 5e 42 6f 74 68 20 47 4c 4f 42 20 61  E.  ^Both GLOB a
17910 6e 64 20 4c 49 4b 45 20 6d 61 79 20 62 65 20 70  nd LIKE may be p
17920 72 65 63 65 64 65 64 20 62 79 0a 74 68 65 20 4e  receded by.the N
17930 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e  OT keyword to in
17940 76 65 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f  vert the sense o
17950 66 20 74 68 65 20 74 65 73 74 2e 20 20 5e 54 68  f the test.  ^Th
17960 65 20 69 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70  e infix GLOB .op
17970 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d  erator is implem
17980 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67  ented by calling
17990 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67   the function.[g
179a0 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e  lob(<i>Y</i>,<i>
179b0 58 3c 2f 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20  X</i>)] and can 
179c0 62 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20 6f  be modified by o
179d0 76 65 72 72 69 64 69 6e 67 0a 74 68 61 74 20 66  verriding.that f
179e0 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74  unction.</p>..<t
179f0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
17a00 65 67 65 78 70 20 52 45 47 45 58 50 3c 2f 74 63  egexp REGEXP</tc
17a10 6c 3e 0a 3c 70 3e 5e 54 68 65 20 52 45 47 45 58  l>.<p>^The REGEX
17a20 50 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20  P operator is a 
17a30 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66  special syntax f
17a40 6f 72 20 74 68 65 20 72 65 67 65 78 70 28 29 0a  or the regexp().
17a50 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20 20  user function.  
17a60 5e 4e 6f 20 72 65 67 65 78 70 28 29 20 75 73 65  ^No regexp() use
17a70 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  r function is de
17a80 66 69 6e 65 64 20 62 79 20 64 65 66 61 75 6c 74  fined by default
17a90 0a 61 6e 64 20 73 6f 20 75 73 65 20 6f 66 20 74  .and so use of t
17aa0 68 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74  he REGEXP operat
17ab0 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79  or will normally
17ac0 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 0a 65 72   result in an.er
17ad0 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 20 5e 49  ror message.  ^I
17ae0 66 20 61 6e 20 5b 61 70 70 6c 69 63 61 74 69 6f  f an [applicatio
17af0 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75  n-defined SQL fu
17b00 6e 63 74 69 6f 6e 5d 20 6e 61 6d 65 64 20 22 72  nction] named "r
17b10 65 67 65 78 70 22 0a 69 73 20 61 64 64 65 64 20  egexp".is added 
17b20 61 74 20 72 75 6e 2d 74 69 6d 65 2c 20 74 68 65  at run-time, the
17b30 6e 20 74 68 65 20 22 3c 69 3e 58 3c 2f 69 3e 20  n the "<i>X</i> 
17b40 52 45 47 45 58 50 20 3c 69 3e 59 3c 2f 69 3e 22  REGEXP <i>Y</i>"
17b50 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 0a 62   operator will.b
17b60 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73  e implemented as
17b70 20 61 20 63 61 6c 6c 20 74 6f 20 22 72 65 67 65   a call to "rege
17b80 78 70 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58  xp(<i>Y</i>,<i>X
17b90 3c 2f 69 3e 29 22 2e 3c 2f 70 3e 0a 0a 3c 74 63  </i>)".</p>..<tc
17ba0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6d 61  l>hd_fragment ma
17bb0 74 63 68 20 4d 41 54 43 48 3c 2f 74 63 6c 3e 0a  tch MATCH</tcl>.
17bc0 3c 70 3e 5e 54 68 65 20 4d 41 54 43 48 20 6f 70  <p>^The MATCH op
17bd0 65 72 61 74 6f 72 20 69 73 20 61 20 73 70 65 63  erator is a spec
17be0 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74  ial syntax for t
17bf0 68 65 20 6d 61 74 63 68 28 29 0a 61 70 70 6c 69  he match().appli
17c00 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66  cation-defined f
17c10 75 6e 63 74 69 6f 6e 2e 20 20 5e 54 68 65 20 64  unction.  ^The d
17c20 65 66 61 75 6c 74 20 6d 61 74 63 68 28 29 20 66  efault match() f
17c30 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
17c40 74 61 74 69 6f 6e 0a 72 61 69 73 65 73 20 61 6e  tation.raises an
17c50 20 65 78 63 65 70 74 69 6f 6e 20 61 6e 64 20 69   exception and i
17c60 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 75 73 65  s not really use
17c70 66 75 6c 20 66 6f 72 20 61 6e 79 74 68 69 6e 67  ful for anything
17c80 2e 0a 5e 42 75 74 20 65 78 74 65 6e 73 69 6f 6e  ..^But extension
17c90 73 20 63 61 6e 20 6f 76 65 72 72 69 64 65 20 74  s can override t
17ca0 68 65 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74  he match() funct
17cb0 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 0a 68 65  ion with more.he
17cc0 6c 70 66 75 6c 20 6c 6f 67 69 63 2e 3c 2f 70 3e  lpful logic.</p>
17cd0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
17ce0 6e 74 20 62 65 74 77 65 65 6e 20 42 45 54 57 45  nt between BETWE
17cf0 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  EN</tcl>.<h3>The
17d00 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f   BETWEEN operato
17d10 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 54 68 65 20  r</h3>.<p>^(The 
17d20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72  BETWEEN operator
17d30 20 69 73 20 6c 6f 67 69 63 61 6c 6c 79 20 65 71   is logically eq
17d40 75 69 76 61 6c 65 6e 74 20 74 6f 20 61 20 70 61  uivalent to a pa
17d50 69 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  ir of comparison
17d60 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e 20 3c 62 3e  s.."<i>x</i> <b>
17d70 42 45 54 57 45 45 4e 3c 2f 62 3e 20 3c 69 3e 79  BETWEEN</b> <i>y
17d80 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20  </i> <b>AND</b> 
17d90 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73 20 0a 65 71  <i>z</i>" is .eq
17da0 75 69 76 61 6c 65 6e 74 20 74 6f 20 0a 22 3c 69  uivalent to ."<i
17db0 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74 3b 3d 3c 2f  >x</i><b>&gt;=</
17dc0 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e  b><i>y</i> <b>AN
17dd0 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f 69 3e 3c 62  D</b> <i>x</i><b
17de0 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f  >&lt;=</b><i>z</
17df0 69 3e 22 20 65 78 63 65 70 74 0a 74 68 61 74 20  i>" except.that 
17e00 77 69 74 68 20 42 45 54 57 45 45 4e 2c 20 74 68  with BETWEEN, th
17e10 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72 65  e <i>x</i> expre
17e20 73 73 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 65 76  ssion is only ev
17e30 61 6c 75 61 74 65 64 20 6f 6e 63 65 2e 29 5e 0a  aluated once.)^.
17e40 5e 54 68 65 20 70 72 65 63 65 64 65 6e 63 65 20  ^The precedence 
17e50 6f 66 20 74 68 65 20 42 45 54 57 45 45 4e 20 6f  of the BETWEEN o
17e60 70 65 72 61 74 6f 72 20 69 73 20 74 68 65 20 73  perator is the s
17e70 61 6d 65 20 61 73 20 74 68 65 20 70 72 65 63 65  ame as the prece
17e80 64 65 6e 63 65 0a 61 73 20 6f 70 65 72 61 74 6f  dence.as operato
17e90 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20 61 6e 64  rs <b>==</b> and
17ea0 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e 64 20 3c   <b>!=</b> and <
17eb0 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e 64 20 67  b>LIKE</b> and g
17ec0 72 6f 75 70 73 20 6c 65 66 74 20 74 6f 20 72 69  roups left to ri
17ed0 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ght...<tcl>hd_fr
17ee0 61 67 6d 65 6e 74 20 63 61 73 65 20 7b 43 41 53  agment case {CAS
17ef0 45 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74  E expression}</t
17f00 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 43 41 53 45  cl>.<h3>The CASE
17f10 20 65 78 70 72 65 73 73 69 6f 6e 3c 2f 68 33 3e   expression</h3>
17f20 0a 3c 70 3e 41 20 43 41 53 45 20 65 78 70 72 65  .<p>A CASE expre
17f30 73 73 69 6f 6e 20 73 65 72 76 65 73 20 61 20 72  ssion serves a r
17f40 6f 6c 65 20 73 69 6d 69 6c 61 72 20 74 6f 20 49  ole similar to I
17f50 46 2d 54 48 45 4e 2d 45 4c 53 45 20 69 6e 20 6f  F-THEN-ELSE in o
17f60 74 68 65 72 0a 70 72 6f 67 72 61 6d 6d 69 6e 67  ther.programming
17f70 20 6c 61 6e 67 75 61 67 65 73 2e 20 20 0a 0a 3c   languages.  ..<
17f80 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 65  p>The optional e
17f90 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 6f  xpression that o
17fa0 63 63 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e  ccurs in between
17fb0 20 74 68 65 20 43 41 53 45 20 6b 65 79 77 6f 72   the CASE keywor
17fc0 64 20 61 6e 64 20 74 68 65 0a 66 69 72 73 74 20  d and the.first 
17fd0 57 48 45 4e 20 6b 65 79 77 6f 72 64 20 69 73 20  WHEN keyword is 
17fe0 63 61 6c 6c 65 64 20 74 68 65 20 22 62 61 73 65  called the "base
17ff0 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 54  " expression. ^T
18000 68 65 72 65 20 61 72 65 20 74 77 6f 20 62 61 73  here are two bas
18010 69 63 20 66 6f 72 6d 73 0a 6f 66 20 74 68 65 20  ic forms.of the 
18020 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3a  CASE expression:
18030 20 74 68 6f 73 65 20 77 69 74 68 20 61 20 62 61   those with a ba
18040 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  se expression an
18050 64 20 74 68 6f 73 65 20 77 69 74 68 6f 75 74 2e  d those without.
18060 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53 45 20  ..<p>^In a CASE 
18070 77 69 74 68 6f 75 74 20 61 20 62 61 73 65 20 65  without a base e
18080 78 70 72 65 73 73 69 6f 6e 2c 20 65 61 63 68 20  xpression, each 
18090 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  WHEN expression 
180a0 69 73 20 65 76 61 6c 75 61 74 65 64 0a 61 6e 64  is evaluated.and
180b0 20 74 68 65 20 72 65 73 75 6c 74 20 74 72 65 61   the result trea
180c0 74 65 64 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e  ted as a boolean
180d0 2c 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20  , starting with 
180e0 74 68 65 20 6c 65 66 74 6d 6f 73 74 20 61 6e 64  the leftmost and
180f0 20 63 6f 6e 74 69 6e 75 69 6e 67 0a 74 6f 20 74   continuing.to t
18100 68 65 20 72 69 67 68 74 2e 20 5e 54 68 65 20 72  he right. ^The r
18110 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53  esult of the CAS
18120 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  E expression is 
18130 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f  the evaluation o
18140 66 20 74 68 65 20 54 48 45 4e 0a 65 78 70 72 65  f the THEN.expre
18150 73 73 69 6f 6e 20 74 68 61 74 20 63 6f 72 72 65  ssion that corre
18160 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 66 69  sponds to the fi
18170 72 73 74 20 57 48 45 4e 20 65 78 70 72 65 73 73  rst WHEN express
18180 69 6f 6e 20 74 68 61 74 20 65 76 61 6c 75 61 74  ion that evaluat
18190 65 73 20 74 6f 0a 74 72 75 65 2e 20 5e 4f 72 2c  es to.true. ^Or,
181a0 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20   if none of the 
181b0 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  WHEN expressions
181c0 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74 72 75   evaluate to tru
181d0 65 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  e, the result of
181e0 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20  .evaluating the 
181f0 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 2c  ELSE expression,
18200 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74 68 65   if any. ^If the
18210 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20 65 78  re is no ELSE ex
18220 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e  pression and.non
18230 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65 78  e of the WHEN ex
18240 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 74 72  pressions are tr
18250 75 65 2c 20 74 68 65 6e 20 74 68 65 20 6f 76 65  ue, then the ove
18260 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 20 4e  rall result is N
18270 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41 20 4e 55 4c 4c  ULL...<p>^A NULL
18280 20 72 65 73 75 6c 74 20 69 73 20 63 6f 6e 73 69   result is consi
18290 64 65 72 65 64 20 75 6e 74 72 75 65 20 77 68 65  dered untrue whe
182a0 6e 20 65 76 61 6c 75 61 74 69 6e 67 20 57 48 45  n evaluating WHE
182b0 4e 20 74 65 72 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e  N terms...<p>^In
182c0 20 61 20 43 41 53 45 20 77 69 74 68 20 61 20 62   a CASE with a b
182d0 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ase expression, 
182e0 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73 73  the base express
182f0 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
18300 20 6a 75 73 74 0a 6f 6e 63 65 20 61 6e 64 20 74   just.once and t
18310 68 65 20 72 65 73 75 6c 74 20 69 73 20 63 6f 6d  he result is com
18320 70 61 72 65 64 20 61 67 61 69 6e 73 74 20 74 68  pared against th
18330 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20  e evaluation of 
18340 65 61 63 68 20 57 48 45 4e 20 0a 65 78 70 72 65  each WHEN .expre
18350 73 73 69 6f 6e 20 66 72 6f 6d 20 6c 65 66 74 20  ssion from left 
18360 74 6f 20 72 69 67 68 74 2e 20 5e 54 68 65 20 72  to right. ^The r
18370 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53  esult of the CAS
18380 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  E expression is 
18390 74 68 65 20 0a 65 76 61 6c 75 61 74 69 6f 6e 20  the .evaluation 
183a0 6f 66 20 74 68 65 20 54 48 45 4e 20 65 78 70 72  of the THEN expr
183b0 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f 72 72  ession that corr
183c0 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 66  esponds to the f
183d0 69 72 73 74 20 57 48 45 4e 0a 65 78 70 72 65 73  irst WHEN.expres
183e0 73 69 6f 6e 20 66 6f 72 20 77 68 69 63 68 20 74  sion for which t
183f0 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
18400 20 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e   true. ^Or, if n
18410 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 0a  one of the WHEN.
18420 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c  expressions eval
18430 75 61 74 65 20 74 6f 20 61 20 76 61 6c 75 65 20  uate to a value 
18440 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62 61 73  equal to the bas
18450 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68  e expression, th
18460 65 20 72 65 73 75 6c 74 0a 6f 66 20 65 76 61 6c  e result.of eval
18470 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20  uating the ELSE 
18480 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20 61  expression, if a
18490 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73  ny. ^If there is
184a0 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73 73   no ELSE express
184b0 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20  ion and.none of 
184c0 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73  the WHEN express
184d0 69 6f 6e 73 20 70 72 6f 64 75 63 65 20 61 20 72  ions produce a r
184e0 65 73 75 6c 74 20 65 71 75 61 6c 20 74 6f 20 74  esult equal to t
184f0 68 65 20 62 61 73 65 20 65 78 70 72 65 73 73 69  he base expressi
18500 6f 6e 2c 0a 74 68 65 20 6f 76 65 72 61 6c 6c 20  on,.the overall 
18510 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
18520 0a 3c 70 3e 5e 57 68 65 6e 20 63 6f 6d 70 61 72  .<p>^When compar
18530 69 6e 67 20 61 20 62 61 73 65 20 65 78 70 72 65  ing a base expre
18540 73 73 69 6f 6e 20 61 67 61 69 6e 73 74 20 61 20  ssion against a 
18550 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 2c  WHEN expression,
18560 20 74 68 65 20 73 61 6d 65 0a 63 6f 6c 6c 61 74   the same.collat
18570 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 61 66  ing sequence, af
18580 66 69 6e 69 74 79 2c 20 61 6e 64 20 4e 55 4c 4c  finity, and NULL
18590 2d 68 61 6e 64 6c 69 6e 67 20 72 75 6c 65 73 20  -handling rules 
185a0 61 70 70 6c 79 20 61 73 20 69 66 20 74 68 65 0a  apply as if the.
185b0 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
185c0 61 6e 64 20 57 48 45 4e 20 65 78 70 72 65 73 73  and WHEN express
185d0 69 6f 6e 20 61 72 65 20 72 65 73 70 65 63 74 69  ion are respecti
185e0 76 65 6c 79 20 74 68 65 20 6c 65 66 74 2d 20 61  vely the left- a
185f0 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70  nd.right-hand op
18600 65 72 61 6e 64 73 20 6f 66 20 61 6e 20 3c 62 69  erands of an <bi
18610 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f 62 69 67 3e  g><b>=</b></big>
18620 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 20 5e   operator.</p> ^
18630 49 66 20 74 68 65 20 62 61 73 65 20 0a 65 78 70  If the base .exp
18640 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 20  ression is NULL 
18650 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
18660 6f 66 20 74 68 65 20 43 41 53 45 20 69 73 20 61  of the CASE is a
18670 6c 77 61 79 73 20 74 68 65 20 72 65 73 75 6c 74  lways the result
18680 20 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20   .of evaluating 
18690 74 68 65 20 45 4c 53 45 20 65 78 70 72 65 73 73  the ELSE express
186a0 69 6f 6e 20 69 66 20 69 74 20 65 78 69 73 74 73  ion if it exists
186b0 2c 20 6f 72 20 4e 55 4c 4c 20 69 66 20 69 74 20  , or NULL if it 
186c0 64 6f 65 73 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42  does not...<p>^B
186d0 6f 74 68 20 66 6f 72 6d 73 20 6f 66 20 74 68 65  oth forms of the
186e0 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
186f0 20 75 73 65 20 6c 61 7a 79 2c 20 6f 72 20 73 68   use lazy, or sh
18700 6f 72 74 2d 63 69 72 63 75 69 74 2c 20 0a 65 76  ort-circuit, .ev
18710 61 6c 75 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28  aluation...<p>^(
18720 54 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65  The only differe
18730 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 65 20  nce between the 
18740 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f 20 43 41  following two CA
18750 53 45 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  SE expressions i
18760 73 20 74 68 61 74 20 0a 74 68 65 20 3c 69 3e 78  s that .the <i>x
18770 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e 20  </i> expression 
18780 69 73 20 65 76 61 6c 75 61 74 65 64 20 65 78 61  is evaluated exa
18790 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65  ctly once in the
187a0 20 66 69 72 73 74 20 65 78 61 6d 70 6c 65 20 62   first example b
187b0 75 74 20 0a 6d 69 67 68 74 20 62 65 20 65 76 61  ut .might be eva
187c0 6c 75 61 74 65 64 20 6d 75 6c 74 69 70 6c 65 20  luated multiple 
187d0 74 69 6d 65 73 20 69 6e 20 74 68 65 20 73 65 63  times in the sec
187e0 6f 6e 64 3a 0a 0a 3c 75 6c 3e 3c 70 72 65 3e 0a  ond:..<ul><pre>.
187f0 3c 6c 69 3e 43 41 53 45 20 78 20 57 48 45 4e 20  <li>CASE x WHEN 
18800 77 31 20 54 48 45 4e 20 72 31 20 57 48 45 4e 20  w1 THEN r1 WHEN 
18810 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53 45 20  w2 THEN r2 ELSE 
18820 72 33 20 45 4e 44 0a 3c 6c 69 3e 43 41 53 45 20  r3 END.<li>CASE 
18830 57 48 45 4e 20 78 3d 77 31 20 54 48 45 4e 20 72  WHEN x=w1 THEN r
18840 31 20 57 48 45 4e 20 78 3d 77 32 20 54 48 45 4e  1 WHEN x=w2 THEN
18850 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e 44 0a   r2 ELSE r3 END.
18860 3c 2f 70 72 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a  </pre></ul>)^...
18870 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
18880 20 69 6e 5f 6f 70 20 7b 49 4e 20 6f 70 65 72 61   in_op {IN opera
18890 74 6f 72 7d 20 7b 4e 4f 54 20 49 4e 20 6f 70 65  tor} {NOT IN ope
188a0 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  rator}</tcl>.<h3
188b0 3e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20  >The IN and NOT 
188c0 49 4e 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33  IN operators</h3
188d0 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 20 61 6e 64  >.<p>^The IN and
188e0 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72   NOT IN operator
188f0 73 20 74 61 6b 65 20 61 6e 20 65 78 70 72 65 73  s take an expres
18900 73 69 6f 6e 20 6f 6e 20 74 68 65 0a 6c 65 66 74  sion on the.left
18910 20 61 6e 64 20 61 20 6c 69 73 74 20 6f 66 20 76   and a list of v
18920 61 6c 75 65 73 20 6f 72 20 61 20 73 75 62 71 75  alues or a subqu
18930 65 72 79 20 6f 6e 20 74 68 65 20 72 69 67 68 74  ery on the right
18940 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72 69 67 68  ..^When the righ
18950 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20  t operand of an 
18960 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65  IN or NOT IN ope
18970 72 61 74 6f 72 20 69 73 20 61 20 73 75 62 71 75  rator is a subqu
18980 65 72 79 2c 20 74 68 65 0a 73 75 62 71 75 65 72  ery, the.subquer
18990 79 20 6d 75 73 74 20 68 61 76 65 20 74 68 65 20  y must have the 
189a0 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  same number of c
189b0 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65 72 65 20  olumns as there 
189c0 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 0a 74  are columns in.t
189d0 68 65 20 5b 72 6f 77 20 76 61 6c 75 65 5d 20 6f  he [row value] o
189e0 66 20 74 68 65 20 6c 65 66 74 20 6f 70 65 72 61  f the left opera
189f0 6e 64 2e 20 20 5e 54 68 65 20 73 75 62 71 75 65  nd.  ^The subque
18a00 72 79 20 6f 6e 20 74 68 65 0a 72 69 67 68 74 20  ry on the.right 
18a10 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20  of an IN or NOT 
18a20 49 4e 20 6f 70 65 72 61 74 6f 72 20 6d 75 73 74  IN operator must
18a30 20 62 65 20 61 20 73 63 61 6c 61 72 20 73 75 62   be a scalar sub
18a40 71 75 65 72 79 20 69 66 20 74 68 65 20 6c 65 66  query if the lef
18a50 74 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t.expression is 
18a60 6e 6f 74 20 61 20 5b 72 6f 77 20 76 61 6c 75 65  not a [row value
18a70 5d 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 49  ] expression..^I
18a80 66 20 74 68 65 20 72 69 67 68 74 20 6f 70 65 72  f the right oper
18a90 61 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20  and of an IN or 
18aa0 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  NOT IN operator 
18ab0 69 73 20 61 20 6c 69 73 74 20 6f 66 20 76 61 6c  is a list of val
18ac0 75 65 73 2c 0a 65 61 63 68 20 6f 66 20 74 68 6f  ues,.each of tho
18ad0 73 65 20 76 61 6c 75 65 73 20 6d 75 73 74 20 62  se values must b
18ae0 65 20 73 63 61 6c 61 72 73 20 61 6e 64 20 74 68  e scalars and th
18af0 65 20 6c 65 66 74 20 65 78 70 72 65 73 73 69 6f  e left expressio
18b00 6e 20 6d 75 73 74 20 61 6c 73 6f 0a 62 65 20 61  n must also.be a
18b10 20 73 63 61 6c 61 72 2e 0a 5e 54 68 65 20 72 69   scalar..^The ri
18b20 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  ght-hand side of
18b30 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
18b40 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65   operator can be
18b50 20 61 0a 74 61 62 6c 65 20 3c 69 3e 6e 61 6d 65   a.table <i>name
18b60 3c 2f 69 3e 20 6f 72 20 5b 74 61 62 6c 65 2d 76  </i> or [table-v
18b70 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e 5d 20  alued function] 
18b80 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 20 69 6e 20 77  <i>name</i> in w
18b90 68 69 63 68 20 0a 63 61 73 65 20 74 68 65 20 72  hich .case the r
18ba0 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20 69  ight-hand side i
18bb0 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20  s understood to 
18bc0 62 65 20 73 75 62 71 75 65 72 79 20 6f 66 0a 74  be subquery of.t
18bd0 68 65 20 66 6f 72 6d 20 22 28 53 45 4c 45 43 54  he form "(SELECT
18be0 20 2a 20 46 52 4f 4d 20 3c 69 3e 6e 61 6d 65 3c   * FROM <i>name<
18bf0 2f 69 3e 29 22 2e 0a 5e 57 68 65 6e 20 74 68 65  /i>)"..^When the
18c00 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 69   right operand i
18c10 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c 20  s an empty set, 
18c20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  the result of IN
18c30 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74 68   is false and th
18c40 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54 20  e.result of NOT 
18c50 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67 61  IN is true, rega
18c60 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c 65  rdless of the le
18c70 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20 65  ft operand and e
18c80 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74 20  ven if the.left 
18c90 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
18ca0 0a 3c 70 3e 5e 28 54 68 65 20 72 65 73 75 6c 74  .<p>^(The result
18cb0 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54   of an IN or NOT
18cc0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20   IN operator is 
18cd0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
18ce0 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72  e following.matr
18cf0 69 78 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74  ix:..<center>.<t
18d00 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c  able border=1>.<
18d10 74 72 3e 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65  tr>.<th>Left ope
18d20 72 61 6e 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c  rand <br>is NULL
18d30 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65 72 61  .<th>Right opera
18d40 6e 64 20 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20  nd <br>contains 
18d50 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f  NULL.<th>Right o
18d60 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e  perand <br>is an
18d70 20 65 6d 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c   empty set.<th>L
18d80 65 66 74 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e  eft operand foun
18d90 64 20 3c 62 72 3e 77 69 74 68 69 6e 20 72 69 67  d <br>within rig
18da0 68 74 20 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52  ht operand.<th>R
18db0 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20  esult of <br>IN 
18dc0 6f 70 65 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73  operator.<th>Res
18dd0 75 6c 74 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49  ult of <br>NOT I
18de0 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a  N operator.<tr>.
18df0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
18e00 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
18e10 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
18e20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
18e30 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
18e40 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
18e50 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65  n="center">false
18e60 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
18e70 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74  er">true.<tr>.<t
18e80 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
18e90 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72  >does not matter
18ea0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
18eb0 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
18ec0 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74  ="center">yes.<t
18ed0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
18ee0 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
18ef0 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64  enter">false.<td
18f00 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
18f10 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  true.<tr>.<td al
18f20 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
18f30 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
18f40 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74  r">does not matt
18f50 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  er.<td align="ce
18f60 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
18f70 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a  gn="center">yes.
18f80 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
18f90 72 22 3e 74 72 75 65 0a 3c 74 64 20 61 6c 69 67  r">true.<td alig
18fa0 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65  n="center">false
18fb0 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
18fc0 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
18fd0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79  align="center">y
18fe0 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  es.<td align="ce
18ff0 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
19000 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
19010 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
19020 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e  ">NULL.<td align
19030 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c  ="center">NULL.<
19040 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  tr>.<td align="c
19050 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61  enter">yes.<td a
19060 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f  lign="center">do
19070 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74  es not matter.<t
19080 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
19090 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
190a0 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20  enter">does not 
190b0 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e  matter.<td align
190c0 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c  ="center">NULL.<
190d0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
190e0 22 3e 4e 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a  ">NULL.</table>.
190f0 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e  </center>)^..<p>
19100 5e 4e 6f 74 65 20 74 68 61 74 20 53 51 4c 69 74  ^Note that SQLit
19110 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 70 61 72  e allows the par
19120 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20  enthesized list 
19130 6f 66 20 73 63 61 6c 61 72 20 76 61 6c 75 65 73  of scalar values
19140 20 6f 6e 0a 74 68 65 20 72 69 67 68 74 2d 68 61   on.the right-ha
19150 6e 64 20 73 69 64 65 20 6f 66 20 61 6e 20 49 4e  nd side of an IN
19160 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61   or NOT IN opera
19170 74 6f 72 20 74 6f 20 62 65 20 61 6e 20 65 6d 70  tor to be an emp
19180 74 79 20 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74  ty list but.most
19190 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62   other SQL datab
191a0 61 73 65 20 64 61 74 61 62 61 73 65 20 65 6e 67  ase database eng
191b0 69 6e 65 73 20 61 6e 64 20 74 68 65 20 53 51 4c  ines and the SQL
191c0 39 32 20 73 74 61 6e 64 61 72 64 20 72 65 71 75  92 standard requ
191d0 69 72 65 0a 74 68 65 20 6c 69 73 74 20 74 6f 20  ire.the list to 
191e0 63 6f 6e 74 61 69 6e 20 61 74 20 6c 65 61 73 74  contain at least
191f0 20 6f 6e 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70   one element.</p
19200 3e 0a 0a 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c  >..<h3>Table Col
19210 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a  umn Names</h3>..
19220 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d  <p>^A column nam
19230 65 20 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20  e can be any of 
19240 74 68 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65  the names define
19250 64 20 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45  d in the [CREATE
19260 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e   TABLE].statemen
19270 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20  t or one of the 
19280 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61  following specia
19290 6c 20 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22  l identifiers: "
192a0 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22  <b>ROWID</b>",."
192b0 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20  <b>OID</b>", or 
192c0 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22  "<b>_ROWID_</b>"
192d0 2e 0a 5e 54 68 65 20 74 68 72 65 65 20 73 70 65  ..^The three spe
192e0 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
192f0 20 64 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e   describe the.un
19300 69 71 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79  ique integer key
19310 20 28 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 61   (the [rowid]) a
19320 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65  ssociated with e
19330 76 65 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65  very .row of eve
19340 72 79 20 74 61 62 6c 65 20 61 6e 64 20 73 6f 20  ry table and so 
19350 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c  are not availabl
19360 65 20 6f 6e 20 5b 57 49 54 48 4f 55 54 20 52 4f  e on [WITHOUT RO
19370 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 5e 54 68  WID] tables..^Th
19380 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69  e special identi
19390 66 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65 72  fiers only refer
193a0 20 74 6f 20 74 68 65 20 72 6f 77 20 6b 65 79 20   to the row key 
193b0 69 66 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  if the [CREATE T
193c0 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20  ABLE].statement 
193d0 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
193e0 61 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 20 77 69  a real column wi
193f0 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
19400 2e 0a 5e 54 68 65 20 72 6f 77 69 64 20 63 61 6e  ..^The rowid can
19410 20 62 65 20 75 73 65 64 20 61 6e 79 77 68 65 72   be used anywher
19420 65 20 61 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75  e a regular.colu
19430 6d 6e 20 63 61 6e 20 62 65 20 75 73 65 64 2e 3c  mn can be used.<
19440 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
19450 67 6d 65 6e 74 20 65 78 69 73 74 73 5f 6f 70 20  gment exists_op 
19460 7b 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72  {EXISTS operator
19470 7d 20 7b 4e 4f 54 20 45 58 49 53 54 53 20 6f 70  } {NOT EXISTS op
19480 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  erator}</tcl>.<h
19490 33 3e 54 68 65 20 45 58 49 53 54 53 20 6f 70 65  3>The EXISTS ope
194a0 72 61 74 6f 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  rator</h3>..<p>^
194b0 54 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61  The EXISTS opera
194c0 74 6f 72 20 61 6c 77 61 79 73 20 65 76 61 6c 75  tor always evalu
194d0 61 74 65 73 20 74 6f 20 6f 6e 65 20 6f 66 20 74  ates to one of t
194e0 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
194f0 73 20 30 20 0a 61 6e 64 20 31 2e 20 5e 49 66 20  s 0 .and 1. ^If 
19500 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45  executing the SE
19510 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 73  LECT statement s
19520 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
19530 72 69 67 68 74 2d 68 61 6e 64 20 0a 6f 70 65 72  right-hand .oper
19540 61 6e 64 20 6f 66 20 74 68 65 20 45 58 49 53 54  and of the EXIST
19550 53 20 6f 70 65 72 61 74 6f 72 20 77 6f 75 6c 64  S operator would
19560 20 72 65 74 75 72 6e 20 6f 6e 65 20 6f 72 20 6d   return one or m
19570 6f 72 65 20 72 6f 77 73 2c 20 74 68 65 6e 20 74  ore rows, then t
19580 68 65 0a 45 58 49 53 54 53 20 6f 70 65 72 61 74  he.EXISTS operat
19590 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  or evaluates to 
195a0 31 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67  1. ^If executing
195b0 20 74 68 65 20 53 45 4c 45 43 54 20 77 6f 75 6c   the SELECT woul
195c0 64 20 72 65 74 75 72 6e 0a 6e 6f 20 72 6f 77 73  d return.no rows
195d0 20 61 74 20 61 6c 6c 2c 20 74 68 65 6e 20 74 68   at all, then th
195e0 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
195f0 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 30  r evaluates to 0
19600 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62  . ..<p>^The numb
19610 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
19620 20 65 61 63 68 20 72 6f 77 20 72 65 74 75 72 6e   each row return
19630 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54  ed by the SELECT
19640 20 73 74 61 74 65 6d 65 6e 74 0a 28 69 66 20 61   statement.(if a
19650 6e 79 29 20 61 6e 64 20 74 68 65 20 73 70 65 63  ny) and the spec
19660 69 66 69 63 20 76 61 6c 75 65 73 20 72 65 74 75  ific values retu
19670 72 6e 65 64 20 68 61 76 65 20 6e 6f 20 65 66 66  rned have no eff
19680 65 63 74 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  ect on the resul
19690 74 73 0a 6f 66 20 74 68 65 20 45 58 49 53 54 53  ts.of the EXISTS
196a0 20 6f 70 65 72 61 74 6f 72 2e 20 5e 49 6e 20 70   operator. ^In p
196b0 61 72 74 69 63 75 6c 61 72 2c 20 72 6f 77 73 20  articular, rows 
196c0 63 6f 6e 74 61 69 6e 69 6e 67 20 4e 55 4c 4c 20  containing NULL 
196d0 76 61 6c 75 65 73 20 61 72 65 0a 6e 6f 74 20 68  values are.not h
196e0 61 6e 64 6c 65 64 20 61 6e 79 20 64 69 66 66 65  andled any diffe
196f0 72 65 6e 74 6c 79 20 66 72 6f 6d 20 72 6f 77 73  rently from rows
19700 20 77 69 74 68 6f 75 74 20 4e 55 4c 4c 20 76 61   without NULL va
19710 6c 75 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  lues...<tcl>hd_f
19720 72 61 67 6d 65 6e 74 20 73 75 62 71 20 7b 53 75  ragment subq {Su
19730 62 71 75 65 72 69 65 73 7d 3c 2f 74 63 6c 3e 0a  bqueries}</tcl>.
19740 3c 68 33 3e 53 75 62 71 75 65 72 79 20 45 78 70  <h3>Subquery Exp
19750 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c  ressions</h3>..<
19760 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73 74  p>^A [SELECT] st
19770 61 74 65 6d 65 6e 74 20 65 6e 63 6c 6f 73 65 64  atement enclosed
19780 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 20   in parentheses 
19790 69 73 20 61 20 73 75 62 71 75 65 72 79 2e 0a 5e  is a subquery..^
197a0 41 6c 6c 20 74 79 70 65 73 20 6f 66 20 53 45 4c  All types of SEL
197b0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 69  ECT statement, i
197c0 6e 63 6c 75 64 69 6e 67 0a 61 67 67 72 65 67 61  ncluding.aggrega
197d0 74 65 20 61 6e 64 20 63 6f 6d 70 6f 75 6e 64 20  te and compound 
197e0 53 45 4c 45 43 54 20 71 75 65 72 69 65 73 20 28  SELECT queries (
197f0 71 75 65 72 69 65 73 20 77 69 74 68 20 6b 65 79  queries with key
19800 77 6f 72 64 73 20 6c 69 6b 65 0a 55 4e 49 4f 4e  words like.UNION
19810 20 6f 72 20 45 58 43 45 50 54 29 20 61 72 65 20   or EXCEPT) are 
19820 61 6c 6c 6f 77 65 64 20 61 73 20 73 63 61 6c 61  allowed as scala
19830 72 20 73 75 62 71 75 65 72 69 65 73 2e 0a 5e 54  r subqueries..^T
19840 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 73 75  he value of a su
19850 62 71 75 65 72 79 20 65 78 70 72 65 73 73 69 6f  bquery expressio
19860 6e 20 69 73 20 74 68 65 20 66 69 72 73 74 20 72  n is the first r
19870 6f 77 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ow of the result
19880 0a 66 72 6f 6d 20 74 68 65 20 65 6e 63 6c 6f 73  .from the enclos
19890 65 64 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74  ed [SELECT] stat
198a0 65 6d 65 6e 74 2e 0a 5e 49 6e 20 6f 74 68 65 72  ement..^In other
198b0 20 77 6f 72 64 73 2c 20 61 6e 20 69 6d 70 6c 69   words, an impli
198c0 65 64 20 22 4c 49 4d 49 54 20 31 22 20 69 73 20  ed "LIMIT 1" is 
198d0 61 64 64 65 64 20 74 6f 20 74 68 65 20 73 75 62  added to the sub
198e0 71 75 65 72 79 2c 20 6f 76 65 72 72 69 64 69 6e  query, overridin
198f0 67 0a 61 6e 20 65 78 70 6c 69 63 69 74 6c 79 20  g.an explicitly 
19900 63 6f 64 65 64 20 4c 49 4d 49 54 2e 0a 5e 54 68  coded LIMIT..^Th
19910 65 20 76 61 6c 75 65 20 6f 66 20 61 20 73 75 62  e value of a sub
19920 71 75 65 72 79 20 65 78 70 72 65 73 73 69 6f 6e  query expression
19930 20 69 73 20 4e 55 4c 4c 20 69 66 20 74 68 65 20   is NULL if the 
19940 65 6e 63 6c 6f 73 65 64 0a 5b 53 45 4c 45 43 54  enclosed.[SELECT
19950 5d 20 73 74 61 74 65 6d 65 6e 74 20 72 65 74 75  ] statement retu
19960 72 6e 73 20 6e 6f 20 72 6f 77 73 2e 0a 0a 3c 70  rns no rows...<p
19970 3e 41 20 73 75 62 71 75 65 72 79 20 74 68 61 74  >A subquery that
19980 20 72 65 74 75 72 6e 73 20 61 20 73 69 6e 67 6c   returns a singl
19990 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 73 63  e column is a sc
199a0 61 6c 61 72 20 73 75 62 71 75 65 72 79 20 61 6e  alar subquery an
199b0 64 20 63 61 6e 0a 62 65 20 75 73 65 64 20 6d 6f  d can.be used mo
199c0 73 74 20 61 6e 79 77 68 65 72 65 2e 0a 5e 41 20  st anywhere..^A 
199d0 73 75 62 71 75 65 72 79 20 74 68 61 74 20 72 65  subquery that re
199e0 74 75 72 6e 73 20 74 77 6f 20 6f 72 20 6d 6f 72  turns two or mor
199f0 65 20 63 6f 6c 75 6d 6e 73 20 69 73 20 61 20 5b  e columns is a [
19a00 72 6f 77 20 76 61 6c 75 65 5d 0a 73 75 62 71 75  row value].subqu
19a10 65 72 79 20 61 6e 64 20 63 61 6e 20 6f 6e 6c 79  ery and can only
19a20 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
19a30 6f 70 65 72 61 6e 64 20 6f 66 20 61 20 63 6f 6d  operand of a com
19a40 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72  parison operator
19a50 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
19a60 65 6e 74 20 63 6f 73 75 62 20 7b 63 6f 72 72 65  ent cosub {corre
19a70 6c 61 74 65 64 20 73 75 62 71 75 65 72 69 65 73  lated subqueries
19a80 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 72 72  }</tcl>.<h3>Corr
19a90 65 6c 61 74 65 64 20 53 75 62 71 75 65 72 69 65  elated Subquerie
19aa0 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 5b 53  s</h3>..<p>^A [S
19ab0 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
19ac0 20 75 73 65 64 20 61 73 20 65 69 74 68 65 72 20   used as either 
19ad0 61 20 73 63 61 6c 61 72 20 73 75 62 71 75 65 72  a scalar subquer
19ae0 79 20 6f 72 20 61 73 20 74 68 65 20 0a 72 69 67  y or as the .rig
19af0 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 20  ht-hand operand 
19b00 6f 66 20 61 6e 20 49 4e 2c 20 4e 4f 54 20 49 4e  of an IN, NOT IN
19b10 20 6f 72 20 45 58 49 53 54 53 20 65 78 70 72 65   or EXISTS expre
19b20 73 73 69 6f 6e 20 6d 61 79 20 63 6f 6e 74 61 69  ssion may contai
19b30 6e 20 0a 72 65 66 65 72 65 6e 63 65 73 20 74 6f  n .references to
19b40 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
19b50 6f 75 74 65 72 20 71 75 65 72 79 2e 20 53 75 63  outer query. Suc
19b60 68 20 61 20 73 75 62 71 75 65 72 79 20 69 73 20  h a subquery is 
19b70 6b 6e 6f 77 6e 20 61 73 0a 61 20 63 6f 72 72 65  known as.a corre
19b80 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 2e 20  lated subquery. 
19b90 5e 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75  ^A correlated su
19ba0 62 71 75 65 72 79 20 69 73 20 72 65 65 76 61 6c  bquery is reeval
19bb0 75 61 74 65 64 20 65 61 63 68 20 74 69 6d 65 0a  uated each time.
19bc0 69 74 73 20 72 65 73 75 6c 74 20 69 73 20 72 65  its result is re
19bd0 71 75 69 72 65 64 2e 20 5e 41 6e 20 75 6e 63 6f  quired. ^An unco
19be0 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65 72  rrelated subquer
19bf0 79 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f  y is evaluated o
19c00 6e 6c 79 20 6f 6e 63 65 0a 61 6e 64 20 74 68 65  nly once.and the
19c10 20 72 65 73 75 6c 74 20 72 65 75 73 65 64 20 61   result reused a
19c20 73 20 6e 65 63 65 73 73 61 72 79 2e 0a 0a 3c 74  s necessary...<t
19c30 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  cl>hd_fragment c
19c40 61 73 74 65 78 70 72 20 7b 43 41 53 54 20 65 78  astexpr {CAST ex
19c50 70 72 65 73 73 69 6f 6e 7d 20 7b 43 41 53 54 7d  pression} {CAST}
19c60 20 7b 63 61 73 74 7d 20 7b 43 41 53 54 20 6f 70   {cast} {CAST op
19c70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  erator}</tcl>.<h
19c80 33 3e 43 41 53 54 20 65 78 70 72 65 73 73 69 6f  3>CAST expressio
19c90 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 43 41  ns</h3>..<p>A CA
19ca0 53 54 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  ST expression of
19cb0 20 74 68 65 20 66 6f 72 6d 20 22 43 41 53 54 28   the form "CAST(
19cc0 3c 69 3e 65 78 70 72 3c 2f 69 3e 20 41 53 20 3c  <i>expr</i> AS <
19cd0 69 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 69 3e 29  i>type-name</i>)
19ce0 22 0a 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  ".is used to con
19cf0 76 65 72 74 20 74 68 65 20 76 61 6c 75 65 20 6f  vert the value o
19d00 66 20 3c 69 3e 65 78 70 72 3c 2f 69 3e 20 74 6f  f <i>expr</i> to
19d10 20 0a 61 20 64 69 66 66 65 72 65 6e 74 20 5b 73   .a different [s
19d20 74 6f 72 61 67 65 20 63 6c 61 73 73 5d 20 73 70  torage class] sp
19d30 65 63 69 66 69 65 64 20 62 79 20 3c 79 79 74 65  ecified by <yyte
19d40 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79  rm>type-name</yy
19d50 74 65 72 6d 3e 2e 0a 5e 41 20 43 41 53 54 20 63  term>..^A CAST c
19d60 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 73 69 6d  onversion is sim
19d70 69 6c 61 72 20 74 6f 20 74 68 65 20 63 6f 6e 76  ilar to the conv
19d80 65 72 73 69 6f 6e 20 74 68 61 74 20 74 61 6b 65  ersion that take
19d90 73 0a 70 6c 61 63 65 20 77 68 65 6e 20 61 20 5b  s.place when a [
19da0 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d  column affinity]
19db0 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 61   is applied to a
19dc0 20 76 61 6c 75 65 20 65 78 63 65 70 74 20 74 68   value except th
19dd0 61 74 20 77 69 74 68 0a 74 68 65 20 43 41 53 54  at with.the CAST
19de0 20 6f 70 65 72 61 74 6f 72 20 74 68 65 20 63 6f   operator the co
19df0 6e 76 65 72 73 69 6f 6e 20 61 6c 77 61 79 73 20  nversion always 
19e00 74 61 6b 65 73 20 70 6c 61 63 65 20 65 76 65 6e  takes place even
19e10 20 69 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69   if the conversi
19e20 6f 6e 0a 6c 6f 73 73 79 20 61 6e 64 20 69 72 72  on.lossy and irr
19e30 65 76 65 72 73 69 62 6c 65 2c 20 77 68 65 72 65  eversible, where
19e40 61 73 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  as column affini
19e50 74 79 20 6f 6e 6c 79 20 63 68 61 6e 67 65 73 20  ty only changes 
19e60 74 68 65 20 64 61 74 61 20 74 79 70 65 0a 6f 66  the data type.of
19e70 20 61 20 76 61 6c 75 65 20 69 66 20 74 68 65 20   a value if the 
19e80 63 68 61 6e 67 65 20 69 73 20 6c 6f 73 73 6c 65  change is lossle
19e90 73 73 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c  ss and reversibl
19ea0 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 76  e...<p>^If the v
19eb0 61 6c 75 65 20 6f 66 20 3c 69 3e 65 78 70 72 3c  alue of <i>expr<
19ec0 2f 69 3e 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  /i> is NULL, the
19ed0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
19ee0 74 68 65 20 43 41 53 54 0a 65 78 70 72 65 73 73  the CAST.express
19ef0 69 6f 6e 20 69 73 20 61 6c 73 6f 20 4e 55 4c 4c  ion is also NULL
19f00 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68  . ^Otherwise, th
19f10 65 20 73 74 6f 72 61 67 65 20 63 6c 61 73 73 20  e storage class 
19f20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 0a 69 73  of the result.is
19f30 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61   determined by a
19f40 70 70 6c 79 69 6e 67 20 74 68 65 20 5b 72 75 6c  pplying the [rul
19f50 65 73 20 66 6f 72 20 64 65 74 65 72 6d 69 6e 69  es for determini
19f60 6e 67 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  ng column affini
19f70 74 79 5d 20 74 6f 0a 74 68 65 20 3c 79 79 74 65  ty] to.the <yyte
19f80 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79  rm>type-name</yy
19f90 74 65 72 6d 3e 2e 0a 0a 3c 74 61 62 6c 65 20 62  term>...<table b
19fa0 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20  order=1>.<tr>.  
19fb0 3c 74 68 3e 20 41 66 66 69 6e 69 74 79 20 6f 66  <th> Affinity of
19fc0 20 3c 79 79 74 65 72 6d 3e 3c 6e 6f 62 72 3e 74   <yyterm><nobr>t
19fd0 79 70 65 2d 6e 61 6d 65 3c 2f 6e 6f 62 72 3e 3c  ype-name</nobr><
19fe0 2f 79 79 74 65 72 6d 3e 0a 20 20 3c 74 68 3e 20  /yyterm>.  <th> 
19ff0 43 6f 6e 76 65 72 73 69 6f 6e 20 50 72 6f 63 65  Conversion Proce
1a000 73 73 69 6e 67 0a 3c 74 72 3e 0a 20 20 3c 74 64  ssing.<tr>.  <td
1a010 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74 64 3e 20 5e  > NONE .  <td> ^
1a020 43 61 73 74 69 6e 67 20 61 20 76 61 6c 75 65 20  Casting a value 
1a030 74 6f 20 61 20 3c 79 79 74 65 72 6d 3e 74 79 70  to a <yyterm>typ
1a040 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  e-name</yyterm> 
1a050 77 69 74 68 20 6e 6f 20 61 66 66 69 6e 69 74 79  with no affinity
1a060 20 0a 20 20 63 61 75 73 65 73 20 74 68 65 20 76   .  causes the v
1a070 61 6c 75 65 20 74 6f 0a 20 20 62 65 20 63 6f 6e  alue to.  be con
1a080 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20 42 4c  verted into a BL
1a090 4f 42 2e 20 20 5e 43 61 73 74 69 6e 67 20 74 6f  OB.  ^Casting to
1a0a0 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74 73   a BLOB consists
1a0b0 20 6f 66 20 66 69 72 73 74 20 63 61 73 74 69 6e   of first castin
1a0c0 67 0a 20 20 74 68 65 20 76 61 6c 75 65 20 74 6f  g.  the value to
1a0d0 20 54 45 58 54 20 69 6e 20 74 68 65 20 5b 65 6e   TEXT in the [en
1a0e0 63 6f 64 69 6e 67 5d 20 6f 66 20 74 68 65 20 64  coding] of the d
1a0f0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
1a100 6f 6e 2c 20 74 68 65 6e 0a 20 20 69 6e 74 65 72  on, then.  inter
1a110 70 72 65 74 69 6e 67 20 74 68 65 20 72 65 73 75  preting the resu
1a120 6c 74 69 6e 67 20 62 79 74 65 20 73 65 71 75 65  lting byte seque
1a130 6e 63 65 20 61 73 20 61 20 42 4c 4f 42 20 69 6e  nce as a BLOB in
1a140 73 74 65 61 64 20 6f 66 20 61 73 20 54 45 58 54  stead of as TEXT
1a150 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 54  ...<tr>.  <td> T
1a160 45 58 54 0a 20 20 3c 74 64 3e 20 5e 54 6f 20 63  EXT.  <td> ^To c
1a170 61 73 74 20 61 20 42 4c 4f 42 20 76 61 6c 75 65  ast a BLOB value
1a180 20 74 6f 20 54 45 58 54 2c 20 74 68 65 20 73 65   to TEXT, the se
1a190 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 20  quence of bytes 
1a1a0 74 68 61 74 20 6d 61 6b 65 20 75 70 20 74 68 65  that make up the
1a1b0 0a 20 20 42 4c 4f 42 20 69 73 20 69 6e 74 65 72  .  BLOB is inter
1a1c0 70 72 65 74 65 64 20 61 73 20 74 65 78 74 20 65  preted as text e
1a1d0 6e 63 6f 64 65 64 20 75 73 69 6e 67 20 74 68 65  ncoded using the
1a1e0 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69   database encodi
1a1f0 6e 67 2e 0a 20 20 3c 70 3e 0a 20 20 20 5e 43 61  ng..  <p>.   ^Ca
1a200 73 74 69 6e 67 20 61 6e 20 49 4e 54 45 47 45 52  sting an INTEGER
1a210 20 6f 72 20 52 45 41 4c 20 76 61 6c 75 65 20 69   or REAL value i
1a220 6e 74 6f 20 54 45 58 54 20 72 65 6e 64 65 72 73  nto TEXT renders
1a230 20 74 68 65 20 76 61 6c 75 65 20 61 73 20 69 66   the value as if
1a240 20 76 69 61 20 0a 20 20 20 20 5b 73 71 6c 69 74   via .    [sqlit
1a250 65 33 5f 73 6e 70 72 69 6e 74 66 28 29 5d 20 65  e3_snprintf()] e
1a260 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 72  xcept that the r
1a270 65 73 75 6c 74 69 6e 67 20 54 45 58 54 20 75 73  esulting TEXT us
1a280 65 73 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67  es the [encoding
1a290 5d 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74  ] of.    the dat
1a2a0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1a2b0 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 52  ...<tr>.  <td> R
1a2c0 45 41 4c 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e  EAL.  <td> ^When
1a2d0 20 63 61 73 74 69 6e 67 20 61 20 42 4c 4f 42 20   casting a BLOB 
1a2e0 76 61 6c 75 65 20 74 6f 20 61 20 52 45 41 4c 2c  value to a REAL,
1a2f0 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 66 69   the value is fi
1a300 72 73 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  rst converted to
1a310 0a 20 20 20 20 20 20 20 20 54 45 58 54 2e 0a 20  .        TEXT.. 
1a320 20 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63        <p>^When c
1a330 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 76 61  asting a TEXT va
1a340 6c 75 65 20 74 6f 20 52 45 41 4c 2c 20 74 68 65  lue to REAL, the
1a350 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c   longest possibl
1a360 65 20 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20  e prefix of.    
1a370 20 20 20 20 74 68 65 20 76 61 6c 75 65 20 74 68      the value th
1a380 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70  at can be interp
1a390 72 65 74 65 64 20 61 73 20 61 20 72 65 61 6c 20  reted as a real 
1a3a0 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72 61 63  number is extrac
1a3b0 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20 20  ted from.       
1a3c0 20 74 68 65 20 54 45 58 54 20 76 61 6c 75 65 20   the TEXT value 
1a3d0 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 64 65  and the remainde
1a3e0 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20  r ignored. ^Any 
1a3f0 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20 69  leading spaces i
1a400 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 54 45  n the.        TE
1a410 58 54 20 76 61 6c 75 65 20 61 72 65 20 69 67 6e  XT value are ign
1a420 6f 72 65 64 20 77 68 65 6e 20 63 6f 6e 76 65 72  ored when conver
1a430 67 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20 74  ging from TEXT t
1a440 6f 20 52 45 41 4c 2e 20 5e 28 49 66 20 74 68 65  o REAL. ^(If the
1a450 72 65 20 69 73 0a 20 20 20 20 20 20 20 20 6e 6f  re is.        no
1a460 20 70 72 65 66 69 78 20 74 68 61 74 20 63 61 6e   prefix that can
1a470 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
1a480 61 73 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72  as a real number
1a490 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  , the result of 
1a4a0 74 68 65 0a 20 20 20 20 20 20 20 20 63 6f 6e 76  the.        conv
1a4b0 65 72 73 69 6f 6e 20 69 73 20 30 2e 30 2e 29 5e  ersion is 0.0.)^
1a4c0 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 49 4e  ..<tr>.  <td> IN
1a4d0 54 45 47 45 52 0a 20 20 3c 74 64 3e 20 5e 57 68  TEGER.  <td> ^Wh
1a4e0 65 6e 20 63 61 73 74 69 6e 67 20 61 20 42 4c 4f  en casting a BLO
1a4f0 42 20 76 61 6c 75 65 20 74 6f 20 49 4e 54 45 47  B value to INTEG
1a500 45 52 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73  ER, the value is
1a510 20 66 69 72 73 74 20 63 6f 6e 76 65 72 74 65 64   first converted
1a520 20 74 6f 0a 20 20 20 20 20 20 20 20 54 45 58 54   to.        TEXT
1a530 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65  ..       <p>^Whe
1a540 6e 20 63 61 73 74 69 6e 67 20 61 20 54 45 58 54  n casting a TEXT
1a550 20 76 61 6c 75 65 20 74 6f 20 49 4e 54 45 47 45   value to INTEGE
1a560 52 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20 70  R, the longest p
1a570 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78 20 6f  ossible prefix o
1a580 66 0a 20 20 20 20 20 20 20 20 74 68 65 20 76 61  f.        the va
1a590 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 20  lue that can be 
1a5a0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
1a5b0 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72  n integer number
1a5c0 20 69 73 20 65 78 74 72 61 63 74 65 64 20 66 72   is extracted fr
1a5d0 6f 6d 0a 20 20 20 20 20 20 20 20 74 68 65 20 54  om.        the T
1a5e0 45 58 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68  EXT value and th
1a5f0 65 20 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f  e remainder igno
1a600 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e  red. ^Any leadin
1a610 67 20 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a  g spaces in the.
1a620 20 20 20 20 20 20 20 20 54 45 58 54 20 76 61 6c          TEXT val
1a630 75 65 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69  ue when converti
1a640 6e 67 20 66 72 6f 6d 20 54 45 58 54 20 74 6f 20  ng from TEXT to 
1a650 49 4e 54 45 47 45 52 20 61 72 65 20 69 67 6e 6f  INTEGER are igno
1a660 72 65 64 2e 20 5e 49 66 20 74 68 65 72 65 0a 20  red. ^If there. 
1a670 20 20 20 20 20 20 20 69 73 20 6e 6f 20 70 72 65         is no pre
1a680 66 69 78 20 74 68 61 74 20 63 61 6e 20 62 65 20  fix that can be 
1a690 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
1a6a0 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72  n integer number
1a6b0 2c 20 74 68 65 20 72 65 73 75 6c 74 0a 20 20 20  , the result.   
1a6c0 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 76       of the conv
1a6d0 65 72 73 69 6f 6e 20 69 73 20 30 2e 20 20 5e 49  ersion is 0.  ^I
1a6e0 66 20 74 68 65 20 70 72 65 66 69 78 20 69 6e 74  f the prefix int
1a6f0 65 67 65 72 20 69 73 20 67 72 65 61 74 65 72 20  eger is greater 
1a700 74 68 61 6e 0a 20 20 20 20 20 20 20 20 2b 39 32  than.        +92
1a710 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
1a720 37 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  7 then the resul
1a730 74 20 6f 66 20 74 68 65 20 63 61 73 74 20 69 73  t of the cast is
1a740 20 65 78 61 63 74 6c 79 0a 20 20 20 20 20 20 20   exactly.       
1a750 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37   +92233720368547
1a760 37 35 38 30 37 2e 20 20 5e 53 69 6d 69 6c 61 72  75807.  ^Similar
1a770 6c 79 2c 20 69 66 20 74 68 65 20 70 72 65 66 69  ly, if the prefi
1a780 78 20 69 6e 74 65 67 65 72 20 69 73 0a 20 20 20  x integer is.   
1a790 20 20 20 20 20 6c 65 73 73 20 74 68 61 6e 20 2d       less than -
1a7a0 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
1a7b0 38 30 38 20 74 68 65 6e 20 74 68 65 20 72 65 73  808 then the res
1a7c0 75 6c 74 20 6f 66 20 74 68 65 20 63 61 73 74 20  ult of the cast 
1a7d0 69 73 0a 20 20 20 20 20 20 20 20 65 78 61 63 74  is.        exact
1a7e0 6c 79 20 2d 39 32 32 33 33 37 32 30 33 36 38 35  ly -922337203685
1a7f0 34 37 37 35 38 30 38 2e 0a 0a 20 20 20 20 20 20  4775808...      
1a800 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69    <p>^When casti
1a810 6e 67 20 74 6f 20 49 4e 54 45 47 45 52 2c 20 69  ng to INTEGER, i
1a820 66 20 74 68 65 20 74 65 78 74 20 6c 6f 6f 6b 73  f the text looks
1a830 20 6c 69 6b 65 20 61 20 66 6c 6f 61 74 69 6e 67   like a floating
1a840 20 70 6f 69 6e 74 0a 20 20 20 20 20 20 20 20 76   point.        v
1a850 61 6c 75 65 20 77 69 74 68 20 61 6e 20 65 78 70  alue with an exp
1a860 6f 6e 65 6e 74 2c 20 74 68 65 20 65 78 70 6f 6e  onent, the expon
1a870 65 6e 74 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f  ent will be igno
1a880 72 65 64 20 62 65 63 61 75 73 65 20 69 74 20 69  red because it i
1a890 73 0a 20 20 20 20 20 20 20 20 6e 6f 20 70 61 72  s.        no par
1a8a0 74 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  t of the integer
1a8b0 20 70 72 65 66 69 78 2e 20 20 5e 46 6f 72 20 65   prefix.  ^For e
1a8c0 78 61 6d 70 6c 65 2c 0a 20 20 20 20 20 20 20 20  xample,.        
1a8d0 22 28 43 41 53 54 20 27 31 32 33 65 2b 35 27 20  "(CAST '123e+5' 
1a8e0 41 53 20 49 4e 54 45 47 45 52 29 22 20 72 65 73  AS INTEGER)" res
1a8f0 75 6c 74 73 20 69 6e 20 31 32 33 2c 20 6e 6f 74  ults in 123, not
1a900 20 69 6e 20 31 32 33 30 30 30 30 30 2e 0a 0a 20   in 12300000... 
1a910 20 20 20 20 20 20 20 3c 70 3e 20 5e 28 54 68 65         <p> ^(The
1a920 20 43 41 53 54 20 6f 70 65 72 61 74 6f 72 20 75   CAST operator u
1a930 6e 64 65 72 73 74 61 6e 64 73 20 64 65 63 69 6d  nderstands decim
1a940 61 6c 0a 20 20 20 20 20 20 20 20 69 6e 74 65 67  al.        integ
1a950 65 72 73 20 6f 6e 6c 79 20 26 6d 64 61 73 68 3b  ers only &mdash;
1a960 20 63 6f 6e 76 65 72 73 69 6f 6e 20 6f 66 20 5b   conversion of [
1a970 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
1a980 67 65 72 73 5d 20 73 74 6f 70 73 20 0a 20 20 20  gers] stops .   
1a990 20 20 20 20 20 61 74 20 74 68 65 20 22 78 22 20       at the "x" 
1a9a0 69 6e 20 74 68 65 20 22 30 78 22 20 70 72 65 66  in the "0x" pref
1a9b0 69 78 20 6f 66 20 74 68 65 20 68 65 78 61 64 65  ix of the hexade
1a9c0 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 73 74  cimal integer st
1a9d0 72 69 6e 67 20 0a 20 20 20 20 20 20 20 20 61 6e  ring .        an
1a9e0 64 20 74 68 75 73 20 72 65 73 75 6c 74 20 6f 66  d thus result of
1a9f0 20 74 68 65 20 43 41 53 54 20 69 73 20 61 6c 77   the CAST is alw
1aa00 61 79 73 20 7a 65 72 6f 2e 29 5e 0a 0a 20 20 20  ays zero.)^..   
1aa10 20 20 20 3c 70 3e 5e 41 20 63 61 73 74 20 6f 66     <p>^A cast of
1aa20 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e   a REAL value in
1aa30 74 6f 20 61 6e 20 49 4e 54 45 47 45 52 20 72 65  to an INTEGER re
1aa40 73 75 6c 74 73 20 69 6e 20 74 68 65 20 69 6e 74  sults in the int
1aa50 65 67 65 72 0a 20 20 20 20 20 20 62 65 74 77 65  eger.      betwe
1aa60 65 6e 20 74 68 65 20 52 45 41 4c 20 76 61 6c 75  en the REAL valu
1aa70 65 20 61 6e 64 20 7a 65 72 6f 20 74 68 61 74 20  e and zero that 
1aa80 69 73 20 63 6c 6f 73 65 73 74 20 74 6f 20 74 68  is closest to th
1aa90 65 20 52 45 41 4c 20 76 61 6c 75 65 2e 0a 20 20  e REAL value..  
1aaa0 20 20 20 20 5e 49 66 20 61 20 52 45 41 4c 20 69      ^If a REAL i
1aab0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
1aac0 68 65 20 67 72 65 61 74 65 73 74 20 70 6f 73 73  he greatest poss
1aad0 69 62 6c 65 20 73 69 67 6e 65 64 0a 20 20 20 20  ible signed.    
1aae0 20 20 69 6e 74 65 67 65 72 20 28 2b 39 32 32 33    integer (+9223
1aaf0 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29  372036854775807)
1ab00 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
1ab10 20 69 73 20 74 68 65 20 67 72 65 61 74 65 73 74   is the greatest
1ab20 20 70 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20   possible.      
1ab30 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61  signed integer a
1ab40 6e 64 20 69 66 20 74 68 65 20 52 45 41 4c 20 69  nd if the REAL i
1ab50 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
1ab60 6c 65 61 73 74 20 70 6f 73 73 69 62 6c 65 20 73  least possible s
1ab70 69 67 6e 65 64 0a 20 20 20 20 20 20 69 6e 74 65  igned.      inte
1ab80 67 65 72 20 28 2d 39 32 32 33 33 37 32 30 33 36  ger (-9223372036
1ab90 38 35 34 37 37 35 38 30 38 29 20 74 68 65 6e 20  854775808) then 
1aba0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
1abb0 65 20 6c 65 61 73 74 20 70 6f 73 73 69 62 6c 65  e least possible
1abc0 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20 69 6e  .      signed in
1abd0 74 65 67 65 72 2e 0a 0a 20 20 20 20 20 20 3c 70  teger...      <p
1abe0 3e 50 72 69 6f 72 20 74 6f 20 53 51 4c 69 74 65  >Prior to SQLite
1abf0 20 76 65 72 73 69 6f 6e 20 33 2e 38 2e 32 20 28   version 3.8.2 (
1ac00 5b 64 61 74 65 6f 66 3a 33 2e 38 2e 32 5d 29 2c  [dateof:3.8.2]),
1ac10 0a 20 20 20 20 20 20 63 61 73 74 69 6e 67 20 61  .      casting a
1ac20 20 52 45 41 4c 20 76 61 6c 75 65 20 67 72 65 61   REAL value grea
1ac30 74 65 72 20 74 68 61 6e 0a 20 20 20 20 20 20 2b  ter than.      +
1ac40 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
1ac50 38 30 37 2e 30 20 69 6e 74 6f 20 61 6e 20 69 6e  807.0 into an in
1ac60 74 65 67 65 72 20 72 65 73 75 6c 74 65 64 20 69  teger resulted i
1ac70 6e 20 74 68 65 20 6d 6f 73 74 20 6e 65 67 61 74  n the most negat
1ac80 69 76 65 0a 20 20 20 20 20 20 69 6e 74 65 67 65  ive.      intege
1ac90 72 2c 20 2d 39 32 32 33 33 37 32 30 33 36 38 35  r, -922337203685
1aca0 34 37 37 35 38 30 38 2e 20 20 54 68 69 73 20 62  4775808.  This b
1acb0 65 68 61 76 69 6f 72 20 77 61 73 20 6d 65 61 6e  ehavior was mean
1acc0 74 20 74 6f 20 65 6d 75 6c 61 74 65 20 74 68 65  t to emulate the
1acd0 0a 20 20 20 20 20 20 62 65 68 61 76 69 6f 72 20  .      behavior 
1ace0 6f 66 20 78 38 36 2f 78 36 34 20 68 61 72 64 77  of x86/x64 hardw
1acf0 61 72 65 20 77 68 65 6e 20 64 6f 69 6e 67 20 74  are when doing t
1ad00 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 63 61  he equivalent ca
1ad10 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  st...<tr>.  <td>
1ad20 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64 3e 20   NUMERIC.  <td> 
1ad30 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58 54 20  ^Casting a TEXT 
1ad40 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e  or BLOB value in
1ad50 74 6f 20 4e 55 4d 45 52 49 43 20 79 69 65 6c 64  to NUMERIC yield
1ad60 73 20 65 69 74 68 65 72 20 61 6e 20 49 4e 54 45  s either an INTE
1ad70 47 45 52 20 6f 72 0a 20 20 20 61 20 52 45 41 4c  GER or.   a REAL
1ad80 20 72 65 73 75 6c 74 2e 0a 20 20 20 5e 49 66 20   result..   ^If 
1ad90 74 68 65 20 69 6e 70 75 74 20 74 65 78 74 20 6c  the input text l
1ada0 6f 6f 6b 73 20 6c 69 6b 65 20 61 6e 20 69 6e 74  ooks like an int
1adb0 65 67 65 72 20 28 74 68 65 72 65 20 69 73 20 6e  eger (there is n
1adc0 6f 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  o decimal point 
1add0 6e 6f 72 0a 20 20 20 65 78 70 6f 6e 65 6e 74 29  nor.   exponent)
1ade0 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69   and the value i
1adf0 73 20 73 6d 61 6c 6c 20 65 6e 6f 75 67 68 20 74  s small enough t
1ae00 6f 20 66 69 74 20 69 6e 20 61 20 36 34 2d 62 69  o fit in a 64-bi
1ae10 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
1ae20 2c 0a 20 20 20 74 68 65 6e 20 74 68 65 20 72 65  ,.   then the re
1ae30 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 49 4e 54  sult will be INT
1ae40 45 47 45 52 2e 0a 20 20 20 5e 49 6e 70 75 74 20  EGER..   ^Input 
1ae50 74 65 78 74 20 74 68 61 74 20 6c 6f 6f 6b 73 20  text that looks 
1ae60 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70 6f  like floating po
1ae70 69 6e 74 20 28 74 68 65 72 65 20 69 73 20 61 20  int (there is a 
1ae80 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 61 6e  decimal point an
1ae90 64 2f 6f 72 0a 20 20 20 61 6e 20 65 78 70 6f 6e  d/or.   an expon
1aea0 65 6e 74 29 20 61 6e 64 20 74 68 65 20 74 65 78  ent) and the tex
1aeb0 74 20 64 65 73 63 72 69 62 65 73 20 61 20 76 61  t describes a va
1aec0 6c 75 65 20 74 68 61 74 20 0a 20 20 20 63 61 6e  lue that .   can
1aed0 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63   be losslessly c
1aee0 6f 6e 76 65 72 74 65 64 20 62 61 63 6b 20 61 6e  onverted back an
1aef0 64 20 66 6f 72 74 68 20 62 65 74 77 65 65 6e 20  d forth between 
1af00 49 45 45 45 20 37 35 34 20 36 34 2d 62 69 74 20  IEEE 754 64-bit 
1af10 66 6c 6f 61 74 20 61 6e 64 20 61 0a 20 20 20 35  float and a.   5
1af20 31 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  1-bit signed int
1af30 65 67 65 72 2c 20 74 68 65 6e 20 74 68 65 20 72  eger, then the r
1af40 65 73 75 6c 74 20 69 73 20 49 4e 54 45 47 45 52  esult is INTEGER
1af50 2e 0a 20 20 20 28 49 6e 20 74 68 65 20 70 72 65  ..   (In the pre
1af60 76 69 6f 75 73 20 73 65 6e 74 65 6e 63 65 2c 20  vious sentence, 
1af70 61 20 35 31 2d 62 69 74 20 69 6e 74 65 67 65 72  a 51-bit integer
1af80 20 69 73 20 73 70 65 63 69 66 69 65 64 20 73 69   is specified si
1af90 6e 63 65 20 74 68 61 74 20 69 73 20 6f 6e 65 0a  nce that is one.
1afa0 20 20 20 62 69 74 20 6c 65 73 73 20 74 68 61 6e     bit less than
1afb0 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   the length of t
1afc0 68 65 20 6d 61 6e 74 69 73 73 61 20 6f 66 20 61  he mantissa of a
1afd0 6e 20 49 45 45 45 20 37 35 34 20 36 34 2d 62 69  n IEEE 754 64-bi
1afe0 74 20 66 6c 6f 61 74 20 61 6e 64 0a 20 20 20 74  t float and.   t
1aff0 68 75 73 20 70 72 6f 76 69 64 65 73 20 61 20 31  hus provides a 1
1b000 2d 62 69 74 20 6f 66 20 6d 61 72 67 69 6e 20 66  -bit of margin f
1b010 6f 72 20 74 68 65 20 74 65 78 74 2d 74 6f 2d 66  or the text-to-f
1b020 6c 6f 61 74 20 63 6f 6e 76 65 72 73 69 6f 6e 20  loat conversion 
1b030 6f 70 65 72 61 74 69 6f 6e 2e 29 0a 20 20 20 5e  operation.).   ^
1b040 41 6e 79 20 74 65 78 74 20 69 6e 70 75 74 20 74  Any text input t
1b050 68 61 74 20 64 65 73 63 72 69 62 65 73 20 61 20  hat describes a 
1b060 76 61 6c 75 65 20 6f 75 74 73 69 64 65 20 74 68  value outside th
1b070 65 20 72 61 6e 67 65 20 6f 66 20 61 20 36 34 2d  e range of a 64-
1b080 62 69 74 0a 20 20 20 73 69 67 6e 65 64 20 69 6e  bit.   signed in
1b090 74 65 67 65 72 20 79 69 65 6c 64 73 20 61 20 52  teger yields a R
1b0a0 45 41 4c 20 72 65 73 75 6c 74 2e 0a 20 20 20 3c  EAL result..   <
1b0b0 70 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 52 45  p> ^Casting a RE
1b0c0 41 4c 20 6f 72 20 49 4e 54 45 47 45 52 20 76 61  AL or INTEGER va
1b0d0 6c 75 65 20 74 6f 20 4e 55 4d 45 52 49 43 20 69  lue to NUMERIC i
1b0e0 73 20 61 20 6e 6f 2d 6f 70 2c 20 65 76 65 6e 20  s a no-op, even 
1b0f0 69 66 20 61 20 72 65 61 6c 0a 20 20 20 76 61 6c  if a real.   val
1b100 75 65 20 63 6f 75 6c 64 20 62 65 20 6c 6f 73 73  ue could be loss
1b110 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64  lessly converted
1b120 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a   to an integer..
1b130 0a 3c 2f 74 72 3e 0a 0a 3c 2f 74 61 62 6c 65 3e  .</tr>..</table>
1b140 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
1b150 74 68 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  the result from 
1b160 63 61 73 74 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d  casting any non-
1b170 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20  BLOB value into 
1b180 61 20 0a 42 4c 4f 42 20 61 6e 64 20 74 68 65 20  a .BLOB and the 
1b190 72 65 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74  result from cast
1b1a0 69 6e 67 20 61 6e 79 20 42 4c 4f 42 20 76 61 6c  ing any BLOB val
1b1b0 75 65 20 69 6e 74 6f 20 61 20 6e 6f 6e 2d 42 4c  ue into a non-BL
1b1c0 4f 42 20 76 61 6c 75 65 0a 6d 61 79 20 62 65 20  OB value.may be 
1b1d0 64 69 66 66 65 72 65 6e 74 20 64 65 70 65 6e 64  different depend
1b1e0 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 74  ing on whether t
1b1f0 68 65 20 64 61 74 61 62 61 73 65 20 5b 65 6e 63  he database [enc
1b200 6f 64 69 6e 67 5d 20 69 73 20 55 54 46 2d 38 2c  oding] is UTF-8,
1b210 0a 55 54 46 2d 31 36 62 65 2c 20 6f 72 20 55 54  .UTF-16be, or UT
1b220 46 2d 31 36 6c 65 2e 0a 0a 0a 3c 74 63 6c 3e 68  F-16le....<tcl>h
1b230 64 5f 66 72 61 67 6d 65 6e 74 20 62 6f 6f 6c 65  d_fragment boole
1b240 61 6e 65 78 70 72 20 7b 62 6f 6f 6c 65 61 6e 20  anexpr {boolean 
1b250 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c  expression}</tcl
1b260 3e 0a 3c 68 33 3e 42 6f 6f 6c 65 61 6e 20 45 78  >.<h3>Boolean Ex
1b270 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a  pressions</h3>..
1b280 3c 70 3e 54 68 65 20 53 51 4c 20 6c 61 6e 67 75  <p>The SQL langu
1b290 61 67 65 20 66 65 61 74 75 72 65 73 20 73 65 76  age features sev
1b2a0 65 72 61 6c 20 63 6f 6e 74 65 78 74 73 20 77 68  eral contexts wh
1b2b0 65 72 65 20 61 6e 20 65 78 70 72 65 73 73 69 6f  ere an expressio
1b2c0 6e 20 69 73 20 0a 65 76 61 6c 75 61 74 65 64 20  n is .evaluated 
1b2d0 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 63  and the result c
1b2e0 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20 62 6f  onverted to a bo
1b2f0 6f 6c 65 61 6e 20 28 74 72 75 65 20 6f 72 20 66  olean (true or f
1b300 61 6c 73 65 29 20 76 61 6c 75 65 2e 20 54 68 65  alse) value. The
1b310 73 65 0a 63 6f 6e 74 65 78 74 73 20 61 72 65 3a  se.contexts are:
1b320 0a 0a 20 20 3c 75 6c 3e 0a 20 20 20 20 3c 6c 69  ..  <ul>.    <li
1b330 3e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  > the WHERE clau
1b340 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 2c 20  se of a SELECT, 
1b350 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
1b360 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20   statement,.    
1b370 3c 6c 69 3e 20 74 68 65 20 4f 4e 20 6f 72 20 55  <li> the ON or U
1b380 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
1b390 20 6a 6f 69 6e 20 69 6e 20 61 20 53 45 4c 45 43   join in a SELEC
1b3a0 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20  T statement,.   
1b3b0 20 3c 6c 69 3e 20 74 68 65 20 48 41 56 49 4e 47   <li> the HAVING
1b3c0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
1b3d0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20  ECT statement,. 
1b3e0 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e     <li> the WHEN
1b3f0 20 63 6c 61 75 73 65 20 6f 66 20 61 6e 20 53 51   clause of an SQ
1b400 4c 20 74 72 69 67 67 65 72 2c 20 61 6e 64 0a 20  L trigger, and. 
1b410 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e     <li> the WHEN
1b420 20 63 6c 61 75 73 65 20 6f 72 20 63 6c 61 75 73   clause or claus
1b430 65 73 20 6f 66 20 73 6f 6d 65 20 43 41 53 45 20  es of some CASE 
1b440 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 20 20 3c  expressions..  <
1b450 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 63 6f  /ul>..<p>^(To co
1b460 6e 76 65 72 74 20 74 68 65 20 72 65 73 75 6c 74  nvert the result
1b470 73 20 6f 66 20 61 6e 20 53 51 4c 20 65 78 70 72  s of an SQL expr
1b480 65 73 73 69 6f 6e 20 74 6f 20 61 20 62 6f 6f 6c  ession to a bool
1b490 65 61 6e 20 76 61 6c 75 65 2c 20 53 51 4c 69 74  ean value, SQLit
1b4a0 65 0a 66 69 72 73 74 20 63 61 73 74 73 20 74 68  e.first casts th
1b4b0 65 20 72 65 73 75 6c 74 20 74 6f 20 61 20 4e 55  e result to a NU
1b4c0 4d 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74  MERIC value in t
1b4d0 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61  he same way as a
1b4e0 20 0a 5b 43 41 53 54 20 65 78 70 72 65 73 73 69   .[CAST expressi
1b4f0 6f 6e 5d 2e 20 41 20 6e 75 6d 65 72 69 63 20 7a  on]. A numeric z
1b500 65 72 6f 20 76 61 6c 75 65 20 28 69 6e 74 65 67  ero value (integ
1b510 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65  er value 0 or re
1b520 61 6c 20 0a 76 61 6c 75 65 20 30 2e 30 29 20 69  al .value 0.0) i
1b530 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  s considered to 
1b540 62 65 20 66 61 6c 73 65 2e 20 20 41 20 4e 55 4c  be false.  A NUL
1b550 4c 20 76 61 6c 75 65 20 69 73 20 73 74 69 6c 6c  L value is still
1b560 20 4e 55 4c 4c 2e 0a 41 6c 6c 20 6f 74 68 65 72   NULL..All other
1b570 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
1b580 69 64 65 72 65 64 20 74 72 75 65 2e 29 5e 0a 0a  idered true.)^..
1b590 3c 70 3e 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65  <p>^(For example
1b5a0 2c 20 74 68 65 20 76 61 6c 75 65 73 20 4e 55 4c  , the values NUL
1b5b0 4c 2c 20 30 2e 30 2c 20 30 2c 20 27 65 6e 67 6c  L, 0.0, 0, 'engl
1b5c0 69 73 68 27 20 61 6e 64 20 27 30 27 20 61 72 65  ish' and '0' are
1b5d0 20 61 6c 6c 20 63 6f 6e 73 69 64 65 72 65 64 0a   all considered.
1b5e0 74 6f 20 62 65 20 66 61 6c 73 65 2e 29 5e 20 5e  to be false.)^ ^
1b5f0 28 56 61 6c 75 65 73 20 31 2c 20 31 2e 30 2c 20  (Values 1, 1.0, 
1b600 30 2e 31 2c 20 2d 30 2e 31 20 61 6e 64 20 27 31  0.1, -0.1 and '1
1b610 65 6e 67 6c 69 73 68 27 20 61 72 65 20 63 6f 6e  english' are con
1b620 73 69 64 65 72 65 64 20 74 6f 20 0a 62 65 20 74  sidered to .be t
1b630 72 75 65 2e 29 5e 0a 0a 3c 70 3e 42 65 67 69 6e  rue.)^..<p>Begin
1b640 6e 69 6e 67 20 77 69 74 68 20 53 51 4c 69 74 65  ning with SQLite
1b650 20 33 2e 32 33 2e 30 20 28 5b 64 61 74 65 6f 66   3.23.0 ([dateof
1b660 3a 33 2e 32 33 2e 30 5d 29 2c 20 53 51 4c 69 74  :3.23.0]), SQLit
1b670 65 20 72 65 63 6f 67 6e 69 7a 65 73 20 74 68 65  e recognizes the
1b680 0a 69 64 65 6e 74 69 66 69 65 72 73 20 22 54 52  .identifiers "TR
1b690 55 45 22 20 61 6e 64 20 22 46 41 4c 53 45 22 20  UE" and "FALSE" 
1b6a0 61 73 20 62 6f 6f 6c 65 61 6e 20 6c 69 74 65 72  as boolean liter
1b6b0 61 6c 73 2c 20 69 66 20 61 6e 64 20 6f 6e 6c 79  als, if and only
1b6c0 20 69 66 20 74 68 6f 73 65 0a 69 64 65 6e 74 69   if those.identi
1b6d0 66 69 65 72 73 20 61 72 65 20 6e 6f 74 20 61 6c  fiers are not al
1b6e0 72 65 61 64 79 20 75 73 65 64 20 66 6f 72 20 73  ready used for s
1b6f0 6f 6d 65 20 6f 74 68 65 72 20 6d 65 61 6e 69 6e  ome other meanin
1b700 67 2e 20 20 49 66 20 74 68 65 72 65 20 61 6c 72  g.  If there alr
1b710 65 61 64 79 0a 65 78 69 73 74 73 20 63 6f 6c 75  eady.exists colu
1b720 6d 6e 73 20 6f 72 20 74 61 62 6c 65 73 20 6f 72  mns or tables or
1b730 20 6f 74 68 65 72 20 6f 62 6a 65 63 74 73 20 6e   other objects n
1b740 61 6d 65 64 20 54 52 55 45 20 6f 72 20 46 41 4c  amed TRUE or FAL
1b750 53 45 2c 20 74 68 65 6e 20 66 6f 72 0a 74 68 65  SE, then for.the
1b760 20 73 61 6b 65 20 6f 66 20 62 61 63 6b 77 61 72   sake of backwar
1b770 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
1b780 2c 20 74 68 65 20 54 52 55 45 20 61 6e 64 20 46  , the TRUE and F
1b790 41 4c 53 45 20 69 64 65 6e 74 69 66 69 65 72 73  ALSE identifiers
1b7a0 20 72 65 66 65 72 0a 74 6f 20 74 68 6f 73 65 20   refer.to those 
1b7b0 6f 74 68 65 72 20 6f 62 6a 65 63 74 73 2c 20 6e  other objects, n
1b7c0 6f 74 20 74 6f 20 74 68 65 20 62 6f 6f 6c 65 61  ot to the boolea
1b7d0 6e 20 76 61 6c 75 65 73 2e 0a 0a 3c 70 3e 54 68  n values...<p>Th
1b7e0 65 20 62 6f 6f 6c 65 61 6e 20 69 64 65 6e 74 69  e boolean identi
1b7f0 66 69 65 72 73 20 54 52 55 45 20 61 6e 64 20 46  fiers TRUE and F
1b800 41 4c 53 45 20 61 72 65 20 75 73 75 61 6c 6c 79  ALSE are usually
1b810 20 6a 75 73 74 20 61 6c 69 61 73 65 73 20 66 6f   just aliases fo
1b820 72 0a 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  r.the integer va
1b830 6c 75 65 73 20 31 20 61 6e 64 20 30 2c 20 72 65  lues 1 and 0, re
1b840 73 70 65 63 74 69 76 65 6c 79 2e 20 20 48 6f 77  spectively.  How
1b850 65 76 65 72 2c 20 69 66 20 54 52 55 45 20 6f 72  ever, if TRUE or
1b860 20 46 41 4c 53 45 0a 6f 63 63 75 72 20 6f 6e 20   FALSE.occur on 
1b870 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73  the right-hand s
1b880 69 64 65 20 6f 66 20 61 6e 20 49 53 20 6f 70 65  ide of an IS ope
1b890 72 61 74 6f 72 2c 20 74 68 65 6e 20 74 68 65 79  rator, then they
1b8a0 20 66 6f 72 6d 20 6e 65 77 0a 75 6e 61 72 79 20   form new.unary 
1b8b0 70 6f 73 74 66 69 78 20 6f 70 65 72 61 74 6f 72  postfix operator
1b8c0 73 20 22 49 53 20 54 52 55 45 22 20 61 6e 64 20  s "IS TRUE" and 
1b8d0 22 49 53 20 46 41 4c 53 45 22 20 77 68 69 63 68  "IS FALSE" which
1b8e0 20 74 65 73 74 20 74 68 65 20 62 6f 6f 6c 65 61   test the boolea
1b8f0 6e 0a 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  n.value of the o
1b900 70 65 72 61 6e 64 20 6f 6e 20 74 68 65 20 6c 65  perand on the le
1b910 66 74 2e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f  ft...<h3>Functio
1b920 6e 73 3c 2f 68 33 3e 0a 3c 70 3e 53 51 4c 69 74  ns</h3>.<p>SQLit
1b930 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20  e supports many 
1b940 5b 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65  [corefunc|simple
1b950 5d 2c 20 5b 61 67 67 66 75 6e 63 7c 61 67 67 72  ], [aggfunc|aggr
1b960 65 67 61 74 65 5d 2c 0a 61 6e 64 20 5b 77 69 6e  egate],.and [win
1b970 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 7c 77 69  dow functions|wi
1b980 6e 64 6f 77 5d 0a 53 51 4c 20 66 75 6e 63 74 69  ndow].SQL functi
1b990 6f 6e 73 2e 20 20 46 6f 72 20 70 72 65 73 65 6e  ons.  For presen
1b9a0 74 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c  tation purposes,
1b9b0 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
1b9c0 73 20 61 72 65 20 66 75 72 74 68 65 72 0a 73 75  s are further.su
1b9d0 62 64 69 76 69 64 65 64 20 69 6e 74 6f 20 5b 63  bdivided into [c
1b9e0 6f 72 65 66 75 6e 63 20 7c 20 63 6f 72 65 20 66  orefunc | core f
1b9f0 75 6e 63 74 69 6f 6e 73 5d 2c 20 5b 64 61 74 65  unctions], [date
1ba00 66 75 6e 63 7c 64 61 74 65 2d 74 69 6d 65 20 66  func|date-time f
1ba10 75 6e 63 74 69 6f 6e 73 5d 2c 0a 61 6e 64 20 5b  unctions],.and [
1ba20 6a 73 6f 6e 31 7c 4a 53 4f 4e 20 66 75 6e 63 74  json1|JSON funct
1ba30 69 6f 6e 73 5d 2e 0a 41 70 70 6c 69 63 61 74 69  ions]..Applicati
1ba40 6f 6e 73 20 63 61 6e 20 61 64 64 20 6e 65 77 20  ons can add new 
1ba50 66 75 6e 63 74 69 6f 6e 73 2c 20 77 72 69 74 74  functions, writt
1ba60 65 6e 20 69 6e 20 43 2f 43 2b 2b 2c 20 75 73 69  en in C/C++, usi
1ba70 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f  ng the.[sqlite3_
1ba80 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
1ba90 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 0a 3c 2f  )] interface..</
1baa0 70 3e 0a 0a 3c 70 3e 5e 49 74 20 69 73 20 70 6f  p>..<p>^It is po
1bab0 73 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20 61  ssible to have a
1bac0 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
1bad0 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 73 61  tion with the sa
1bae0 6d 65 20 6e 61 6d 65 20 61 73 20 61 0a 73 69 6d  me name as a.sim
1baf0 70 6c 65 20 66 75 6e 63 74 69 6f 6e 2c 20 61 73  ple function, as
1bb00 20 6c 6f 6e 67 20 61 73 20 74 68 65 20 6e 75 6d   long as the num
1bb10 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
1bb20 20 66 6f 72 20 74 68 65 20 74 77 6f 20 66 6f 72   for the two for
1bb30 6d 73 20 6f 66 20 74 68 65 0a 66 75 6e 63 74 69  ms of the.functi
1bb40 6f 6e 20 61 72 65 20 64 69 66 66 65 72 65 6e 74  on are different
1bb50 2e 20 20 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c  .  ^For example,
1bb60 20 74 68 65 20 5b 61 67 67 5f 6d 61 78 7c 6d 61   the [agg_max|ma
1bb70 78 28 29 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69  x()] function wi
1bb80 74 68 20 61 0a 73 69 6e 67 6c 65 20 61 72 67 75  th a.single argu
1bb90 6d 65 6e 74 20 69 73 20 61 6e 20 61 67 67 72 65  ment is an aggre
1bba0 67 61 74 65 20 61 6e 64 20 74 68 65 20 5b 6d 61  gate and the [ma
1bbb0 78 28 29 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69  x()] function wi
1bbc0 74 68 20 74 77 6f 20 6f 72 20 6d 6f 72 65 0a 61  th two or more.a
1bbd0 72 67 75 6d 65 6e 74 73 20 69 73 20 61 20 73 69  rguments is a si
1bbe0 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a  mple function...
1bbf0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1bc00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc40 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 6f  ####.Section {Co
1bc50 72 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 63 6f  re Functions} co
1bc60 72 65 66 75 6e 63 20 7b 2a 63 6f 72 65 66 75 6e  refunc {*corefun
1bc70 63 7d 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  c}.unset -nocomp
1bc80 6c 61 69 6e 20 63 6f 72 65 66 75 6e 63 73 65 74  lain corefuncset
1bc90 0a 70 72 6f 63 20 66 75 6e 63 64 65 66 20 7b 73  .proc funcdef {s
1bca0 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64  yntax keywords d
1bcb0 65 73 63 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20  esc} {.  global 
1bcc0 63 6f 72 65 66 75 6e 63 73 65 74 0a 20 20 72 65  corefuncset.  re
1bcd0 67 65 78 70 20 7b 5e 5b 61 2d 7a 5f 5d 2b 7d 20  gexp {^[a-z_]+} 
1bce0 24 73 79 6e 74 61 78 20 62 61 73 65 73 79 6e 74  $syntax basesynt
1bcf0 61 78 0a 20 20 73 65 74 20 63 6f 72 65 66 75 6e  ax.  set corefun
1bd00 63 73 65 74 28 24 62 61 73 65 73 79 6e 74 61 78  cset($basesyntax
1bd10 29 20 5b 6c 69 73 74 20 24 73 79 6e 74 61 78 20  ) [list $syntax 
1bd20 24 6b 65 79 77 6f 72 64 73 20 24 64 65 73 63 5d  $keywords $desc]
1bd30 0a 7d 0a 66 75 6e 63 64 65 66 20 7b 61 62 73 28  .}.funcdef {abs(
1bd40 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
1bd50 61 62 73 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  abs(X) function 
1bd60 72 65 74 75 72 6e 73 20 74 68 65 20 61 62 73 6f  returns the abso
1bd70 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68  lute value of th
1bd80 65 20 6e 75 6d 65 72 69 63 0a 20 20 61 72 67 75  e numeric.  argu
1bd90 6d 65 6e 74 20 58 2e 20 20 5e 41 62 73 28 58 29  ment X.  ^Abs(X)
1bda0 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66   returns NULL if
1bdb0 20 58 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e   X is NULL. .  ^
1bdc0 28 41 62 73 28 58 29 20 72 65 74 75 72 6e 73 20  (Abs(X) returns 
1bdd0 30 2e 30 20 69 66 20 58 20 69 73 20 61 20 73 74  0.0 if X is a st
1bde0 72 69 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74  ring or blob.  t
1bdf0 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  hat cannot be co
1be00 6e 76 65 72 74 65 64 20 74 6f 20 61 20 6e 75 6d  nverted to a num
1be10 65 72 69 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e  eric value.)^  ^
1be20 49 66 20 58 20 69 73 20 74 68 65 20 0a 20 20 69  If X is the .  i
1be30 6e 74 65 67 65 72 20 2d 39 32 32 33 33 37 32 30  nteger -92233720
1be40 33 36 38 35 34 37 37 35 38 30 38 20 74 68 65 6e  36854775808 then
1be50 20 61 62 73 28 58 29 20 74 68 72 6f 77 73 20 61   abs(X) throws a
1be60 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  n integer overfl
1be70 6f 77 0a 20 20 65 72 72 6f 72 20 73 69 6e 63 65  ow.  error since
1be80 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 71 75   there is no equ
1be90 69 76 61 6c 65 6e 74 20 70 6f 73 69 74 69 76 65  ivalent positive
1bea0 20 36 34 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70   64-bit two comp
1beb0 6c 65 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a  lement value..}.
1bec0 0a 66 75 6e 63 64 65 66 20 7b 63 68 61 6e 67 65  .funcdef {change
1bed0 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  s()} {} {.  ^The
1bee0 20 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74   changes() funct
1bef0 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1bf00 6e 75 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61  number of databa
1bf10 73 65 20 72 6f 77 73 20 74 68 61 74 20 77 65 72  se rows that wer
1bf20 65 20 63 68 61 6e 67 65 64 0a 20 20 6f 72 20 69  e changed.  or i
1bf30 6e 73 65 72 74 65 64 20 6f 72 20 64 65 6c 65 74  nserted or delet
1bf40 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
1bf50 65 63 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65  ecently complete
1bf60 64 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  d INSERT, DELETE
1bf70 2c 0a 20 20 6f 72 20 55 50 44 41 54 45 20 73 74  ,.  or UPDATE st
1bf80 61 74 65 6d 65 6e 74 2c 20 65 78 63 6c 75 73 69  atement, exclusi
1bf90 76 65 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73  ve of statements
1bfa0 20 69 6e 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 20   in lower-level 
1bfb0 74 72 69 67 67 65 72 73 2e 0a 20 20 5e 54 68 65  triggers..  ^The
1bfc0 20 63 68 61 6e 67 65 73 28 29 20 53 51 4c 20 66   changes() SQL f
1bfd0 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
1bfe0 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
1bff0 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  [sqlite3_changes
1c000 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 66 75 6e 63  ()].  C/C++ func
1c010 74 69 6f 6e 20 61 6e 64 20 68 65 6e 63 65 20 66  tion and hence f
1c020 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d 65 20  ollows the same 
1c030 72 75 6c 65 73 20 66 6f 72 20 63 6f 75 6e 74 69  rules for counti
1c040 6e 67 20 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66  ng changes..}..f
1c050 75 6e 63 64 65 66 20 7b 63 68 61 72 28 58 31 2c  uncdef {char(X1,
1c060 58 32 2c 2e 2e 2e 2c 58 4e 29 7d 20 7b 7d 20 7b  X2,...,XN)} {} {
1c070 0a 20 20 5e 28 54 68 65 20 63 68 61 72 28 58 31  .  ^(The char(X1
1c080 2c 58 32 2c 2e 2e 2e 2c 58 4e 29 20 66 75 6e 63  ,X2,...,XN) func
1c090 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
1c0a0 74 72 69 6e 67 20 63 6f 6d 70 6f 73 65 64 20 6f  tring composed o
1c0b0 66 20 63 68 61 72 61 63 74 65 72 73 20 68 61 76  f characters hav
1c0c0 69 6e 67 20 74 68 65 0a 20 20 20 75 6e 69 63 6f  ing the.   unico
1c0d0 64 65 20 63 6f 64 65 20 70 6f 69 6e 74 20 76 61  de code point va
1c0e0 6c 75 65 73 20 6f 66 20 69 6e 74 65 67 65 72 73  lues of integers
1c0f0 20 58 31 20 74 68 72 6f 75 67 68 20 58 4e 2c 20   X1 through XN, 
1c100 72 65 73 70 65 63 74 69 76 65 6c 79 2e 29 5e 0a  respectively.)^.
1c110 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c  }..funcdef {coal
1c120 65 73 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  esce(X,Y,...)} {
1c130 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f 61 6c 65  } {.  ^The coale
1c140 73 63 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  sce() function r
1c150 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66  eturns a copy of
1c160 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   its first non-N
1c170 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72  ULL argument, or
1c180 0a 20 20 4e 55 4c 4c 20 69 66 20 61 6c 6c 20 61  .  NULL if all a
1c190 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c  rguments are NUL
1c1a0 4c 2e 20 20 5e 43 6f 61 6c 65 73 63 65 28 29 20  L.  ^Coalesce() 
1c1b0 6d 75 73 74 20 68 61 76 65 20 61 74 20 6c 65 61  must have at lea
1c1c0 73 74 20 0a 20 20 32 20 61 72 67 75 6d 65 6e 74  st .  2 argument
1c1d0 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67  s..}..funcdef {g
1c1e0 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  lob(X,Y)} {} {. 
1c1f0 20 5e 54 68 65 20 67 6c 6f 62 28 58 2c 59 29 20   ^The glob(X,Y) 
1c200 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69  function is equi
1c210 76 61 6c 65 6e 74 20 74 6f 20 74 68 65 0a 20 20  valent to the.  
1c220 65 78 70 72 65 73 73 69 6f 6e 20 22 3c 62 3e 59  expression "<b>Y
1c230 20 47 4c 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20 20   GLOB X</b>"..  
1c240 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58 20  Note that the X 
1c250 61 6e 64 20 59 20 61 72 67 75 6d 65 6e 74 73 20  and Y arguments 
1c260 61 72 65 20 72 65 76 65 72 73 65 64 20 69 6e 20  are reversed in 
1c270 74 68 65 20 67 6c 6f 62 28 29 20 66 75 6e 63 74  the glob() funct
1c280 69 6f 6e 0a 20 20 72 65 6c 61 74 69 76 65 20 74  ion.  relative t
1c290 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f  o the infix [GLO
1c2a0 42 5d 20 6f 70 65 72 61 74 6f 72 2e 20 20 59 20  B] operator.  Y 
1c2b0 69 73 20 74 68 65 20 73 74 72 69 6e 67 20 61 6e  is the string an
1c2c0 64 20 58 20 69 73 20 74 68 65 0a 20 20 70 61 74  d X is the.  pat
1c2d0 74 65 72 6e 2e 20 20 53 6f 2c 20 66 6f 72 20 65  tern.  So, for e
1c2e0 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 6f 6c 6c  xample, the foll
1c2f0 6f 77 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  owing expression
1c300 73 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74  s are equivalent
1c310 3a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  :.  <blockquote>
1c320 3c 70 72 65 3e 0a 20 20 20 20 20 6e 61 6d 65 20  <pre>.     name 
1c330 47 4c 4f 42 20 27 2a 68 65 6c 69 75 6d 2a 27 0a  GLOB '*helium*'.
1c340 20 20 20 20 20 67 6c 6f 62 28 27 2a 68 65 6c 69       glob('*heli
1c350 75 6d 2a 27 2c 6e 61 6d 65 29 0a 20 20 3c 2f 70  um*',name).  </p
1c360 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
1c370 0a 20 20 3c 70 3e 5e 49 66 20 74 68 65 20 5b 73  .  <p>^If the [s
1c380 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
1c390 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  nction()] interf
1c3a0 61 63 65 20 69 73 20 75 73 65 64 20 74 6f 0a 20  ace is used to. 
1c3b0 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 67 6c   override the gl
1c3c0 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  ob(X,Y) function
1c3d0 20 77 69 74 68 20 61 6e 20 61 6c 74 65 72 6e 61   with an alterna
1c3e0 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tive implementat
1c3f0 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65 20 5b  ion then.  the [
1c400 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20 77  GLOB] operator w
1c410 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20 61  ill invoke the a
1c420 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65  lternative imple
1c430 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75  mentation..}..fu
1c440 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c  ncdef {ifnull(X,
1c450 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1c460 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f  ifnull() functio
1c470 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79  n returns a copy
1c480 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f   of its first no
1c490 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c  n-NULL argument,
1c4a0 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62 6f   or.  NULL if bo
1c4b0 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  th arguments are
1c4c0 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28   NULL.  ^Ifnull(
1c4d0 29 20 6d 75 73 74 20 68 61 76 65 20 65 78 61 63  ) must have exac
1c4e0 74 6c 79 20 32 20 61 72 67 75 6d 65 6e 74 73 2e  tly 2 arguments.
1c4f0 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29  .  ^The ifnull()
1c500 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75   function is equ
1c510 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61 6c  ivalent to [coal
1c520 65 73 63 65 28 29 5d 20 77 69 74 68 20 74 77 6f  esce()] with two
1c530 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66   arguments..}..f
1c540 75 6e 63 64 65 66 20 7b 69 6e 73 74 72 28 58 2c  uncdef {instr(X,
1c550 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1c560 69 6e 73 74 72 28 58 2c 59 29 20 66 75 6e 63 74  instr(X,Y) funct
1c570 69 6f 6e 20 66 69 6e 64 73 20 74 68 65 20 66 69  ion finds the fi
1c580 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f  rst occurrence o
1c590 66 20 73 74 72 69 6e 67 20 59 20 77 69 74 68 69  f string Y withi
1c5a0 6e 20 0a 20 20 73 74 72 69 6e 67 20 58 20 61 6e  n .  string X an
1c5b0 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  d returns the nu
1c5c0 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20 63 68  mber of prior ch
1c5d0 61 72 61 63 74 65 72 73 20 70 6c 75 73 20 31 2c  aracters plus 1,
1c5e0 20 6f 72 20 30 20 69 66 0a 20 20 59 20 69 73 20   or 0 if.  Y is 
1c5f0 6e 6f 77 68 65 72 65 20 66 6f 75 6e 64 20 77 69  nowhere found wi
1c600 74 68 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c 20 69  thin X..  ^Or, i
1c610 66 20 58 20 61 6e 64 20 59 20 61 72 65 20 62 6f  f X and Y are bo
1c620 74 68 20 42 4c 4f 42 73 2c 20 74 68 65 6e 20 69  th BLOBs, then i
1c630 6e 73 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e  nstr(X,Y) return
1c640 73 20 6f 6e 65 0a 20 20 6d 6f 72 65 20 74 68 61  s one.  more tha
1c650 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 62 79 74  n the number byt
1c660 65 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  es prior to the 
1c670 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65  first occurrence
1c680 20 6f 66 20 59 2c 20 6f 72 20 30 20 69 66 0a 20   of Y, or 0 if. 
1c690 20 59 20 64 6f 65 73 20 6e 6f 74 20 6f 63 63 75   Y does not occu
1c6a0 72 20 61 6e 79 77 68 65 72 65 20 77 69 74 68 69  r anywhere withi
1c6b0 6e 20 58 2e 0a 20 20 5e 49 66 20 62 6f 74 68 20  n X..  ^If both 
1c6c0 61 72 67 75 6d 65 6e 74 73 20 58 20 61 6e 64 20  arguments X and 
1c6d0 59 20 74 6f 20 69 6e 73 74 72 28 58 2c 59 29 20  Y to instr(X,Y) 
1c6e0 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 6e 64  are non-NULL and
1c6f0 20 61 72 65 20 6e 6f 74 20 42 4c 4f 42 73 0a 20   are not BLOBs. 
1c700 20 74 68 65 6e 20 62 6f 74 68 20 61 72 65 20 69   then both are i
1c710 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 73 74  nterpreted as st
1c720 72 69 6e 67 73 2e 0a 20 20 5e 49 66 20 65 69 74  rings..  ^If eit
1c730 68 65 72 20 58 20 6f 72 20 59 20 61 72 65 20 4e  her X or Y are N
1c740 55 4c 4c 20 69 6e 20 69 6e 73 74 72 28 58 2c 59  ULL in instr(X,Y
1c750 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
1c760 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75  t is NULL..}..fu
1c770 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d 20 7b  ncdef {hex(X)} {
1c780 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78 28 29  } {.  ^The hex()
1c790 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72 70   function interp
1c7a0 72 65 74 73 20 69 74 73 20 61 72 67 75 6d 65 6e  rets its argumen
1c7b0 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e 64 20  t as a BLOB and 
1c7c0 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69  returns.  a stri
1c7d0 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20  ng which is the 
1c7e0 75 70 70 65 72 2d 63 61 73 65 20 68 65 78 61 64  upper-case hexad
1c7f0 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67  ecimal rendering
1c800 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   of the content 
1c810 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e 0a  of.  that blob..
1c820 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73 74  }..funcdef {last
1c830 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 7d  _insert_rowid()}
1c840 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61 73   {} {.  ^The las
1c850 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1c860 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1c870 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20 20  s the [ROWID].  
1c880 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f 77 20  of the last row 
1c890 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68 65 20  insert from the 
1c8a0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
1c8b0 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b 65  ion which invoke
1c8c0 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69 6f 6e  d the.  function
1c8d0 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e  ..  ^The last_in
1c8e0 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53 51 4c  sert_rowid() SQL
1c8f0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
1c900 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
1c910 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73  e.  [sqlite3_las
1c920 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1c930 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  ] C/C++ interfac
1c940 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66  e function..}..f
1c950 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68 28 58  uncdef {length(X
1c960 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72 20 61  )} {} {.  ^For a
1c970 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 58 2c   string value X,
1c980 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66   the length(X) f
1c990 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1c9a0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a 20  the number of . 
1c9b0 20 63 68 61 72 61 63 74 65 72 73 20 28 6e 6f 74   characters (not
1c9c0 20 62 79 74 65 73 29 20 69 6e 20 58 20 70 72 69   bytes) in X pri
1c9d0 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  or to the first 
1c9e0 4e 55 4c 20 63 68 61 72 61 63 74 65 72 2e 0a 20  NUL character.. 
1c9f0 20 53 69 6e 63 65 20 53 51 4c 69 74 65 20 73 74   Since SQLite st
1ca00 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20 6e 6f 72  rings do not nor
1ca10 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 4e 55  mally contain NU
1ca20 4c 20 63 68 61 72 61 63 74 65 72 73 2c 20 74 68  L characters, th
1ca30 65 20 6c 65 6e 67 74 68 28 58 29 0a 20 20 66 75  e length(X).  fu
1ca40 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75 73 75 61  nction will usua
1ca50 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 74  lly return the t
1ca60 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63  otal number of c
1ca70 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65  haracters in the
1ca80 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 46 6f   string X..  ^Fo
1ca90 72 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 20 58  r a blob value X
1caa0 2c 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75  , length(X) retu
1cab0 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
1cac0 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 62  f bytes in the b
1cad0 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69 73 20  lob..  ^If X is 
1cae0 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74 68  NULL then length
1caf0 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e  (X) is NULL..  ^
1cb00 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69 63 20  If X is numeric 
1cb10 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 72  then length(X) r
1cb20 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67 74  eturns the lengt
1cb30 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a 20 20  h of a string.  
1cb40 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
1cb50 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
1cb60 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65 28  {like(X,Y) like(
1cb70 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e  X,Y,Z)} {} {.  ^
1cb80 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  The like() funct
1cb90 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69  ion is used to i
1cba0 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 22  mplement the.  "
1cbb0 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23 39 31  <b>Y LIKE X &#91
1cbc0 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b 3c 2f  ;ESCAPE Z&#93;</
1cbd0 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  b>" expression. 
1cbe0 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74 69 6f  .  ^If the optio
1cbf0 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73  nal ESCAPE claus
1cc00 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68  e is present, th
1cc10 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20  en the.  like() 
1cc20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f  function is invo
1cc30 6b 65 64 20 77 69 74 68 20 74 68 72 65 65 20 61  ked with three a
1cc40 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68 65  rguments.  ^Othe
1cc50 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20 20 69  rwise, it is.  i
1cc60 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77 6f 20  nvoked with two 
1cc70 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20  arguments only. 
1cc80 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58 20  Note that the X 
1cc90 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65 72 73  and Y parameters
1cca0 20 61 72 65 0a 20 20 72 65 76 65 72 73 65 64 20   are.  reversed 
1ccb0 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75  in the like() fu
1ccc0 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76 65 20  nction relative 
1ccd0 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 4c 49  to the infix [LI
1cce0 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20  KE] operator..  
1ccf0 58 20 69 73 20 74 68 65 20 70 61 74 74 65 72 6e  X is the pattern
1cd00 20 61 6e 64 20 59 20 69 73 20 74 68 65 20 73 74   and Y is the st
1cd10 72 69 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67  ring to match ag
1cd20 61 69 6e 73 74 20 74 68 61 74 20 70 61 74 74 65  ainst that patte
1cd30 72 6e 2e 0a 20 20 48 65 6e 63 65 2c 20 74 68 65  rn..  Hence, the
1cd40 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65   following expre
1cd50 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76  ssions are equiv
1cd60 61 6c 65 6e 74 3a 0a 20 20 3c 62 6c 6f 63 6b 71  alent:.  <blockq
1cd70 75 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 20 20 20  uote><pre>.     
1cd80 6e 61 6d 65 20 4c 49 4b 45 20 27 25 6e 65 6f 6e  name LIKE '%neon
1cd90 25 27 0a 20 20 20 20 20 6c 69 6b 65 28 27 25 6e  %'.     like('%n
1cda0 65 6f 6e 25 27 2c 6e 61 6d 65 29 0a 20 20 3c 2f  eon%',name).  </
1cdb0 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
1cdc0 3e 0a 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65  >.  ^The [sqlite
1cdd0 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
1cde0 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63  n()] interface c
1cdf0 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76  an be used to ov
1ce00 65 72 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b  erride the.  lik
1ce10 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  e() function and
1ce20 20 74 68 65 72 65 62 79 20 63 68 61 6e 67 65 20   thereby change 
1ce30 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  the operation of
1ce40 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70   the.  [LIKE] op
1ce50 65 72 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76  erator.  When ov
1ce60 65 72 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b  erriding the lik
1ce70 65 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74  e() function, it
1ce80 20 6d 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e   may be importan
1ce90 74 0a 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20  t.  to override 
1cea0 62 6f 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64  both the two and
1ceb0 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20   three argument 
1cec0 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20  versions of the 
1ced0 6c 69 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69  like() .  functi
1cee0 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64  on. Otherwise, d
1cef0 69 66 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61  ifferent code ma
1cf00 79 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69  y be called to i
1cf10 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b  mplement the.  [
1cf20 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64  LIKE] operator d
1cf30 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
1cf40 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53  her or not an ES
1cf50 43 41 50 45 20 63 6c 61 75 73 65 20 77 61 73 20  CAPE clause was 
1cf60 0a 20 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a  .  specified..}.
1cf70 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c  ..funcdef {likel
1cf80 69 68 6f 6f 64 28 58 2c 59 29 7d 20 7b 7d 20 7b  ihood(X,Y)} {} {
1cf90 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f  .  ^The likeliho
1cfa0 6f 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  od(X,Y) function
1cfb0 20 72 65 74 75 72 6e 73 20 61 72 67 75 6d 65 6e   returns argumen
1cfc0 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20  t X unchanged.. 
1cfd0 20 5e 28 54 68 65 20 76 61 6c 75 65 20 59 20 69   ^(The value Y i
1cfe0 6e 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59  n likelihood(X,Y
1cff0 29 20 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61  ) must be a floa
1d000 74 69 6e 67 20 70 6f 69 6e 74 20 63 6f 6e 73 74  ting point const
1d010 61 6e 74 0a 20 20 62 65 74 77 65 65 6e 20 30 2e  ant.  between 0.
1d020 30 20 61 6e 64 20 31 2e 30 2c 20 69 6e 63 6c 75  0 and 1.0, inclu
1d030 73 69 76 65 2e 29 5e 0a 20 20 5e 54 68 65 20 6c  sive.)^.  ^The l
1d040 69 6b 65 6c 69 68 6f 6f 64 28 58 29 20 66 75 6e  ikelihood(X) fun
1d050 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70  ction is a no-op
1d060 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
1d070 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d  enerator.  optim
1d080 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74 68 61  izes away so tha
1d090 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f  t it consumes no
1d0a0 20 43 50 55 20 63 79 63 6c 65 73 20 64 75 72 69   CPU cycles duri
1d0b0 6e 67 20 72 75 6e 2d 74 69 6d 65 0a 20 20 28 74  ng run-time.  (t
1d0c0 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63  hat is, during c
1d0d0 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33  alls to [sqlite3
1d0e0 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68  _step()])..  ^Th
1d0f0 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65  e purpose of the
1d100 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29   likelihood(X,Y)
1d110 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20   function is to 
1d120 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20  provide a hint. 
1d130 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c   to the query pl
1d140 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61  anner that the a
1d150 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62  rgument X is a b
1d160 6f 6f 6c 65 61 6e 20 74 68 61 74 20 69 73 0a 20  oolean that is. 
1d170 20 74 72 75 65 20 77 69 74 68 20 61 20 70 72 6f   true with a pro
1d180 62 61 62 69 6c 69 74 79 20 6f 66 20 61 70 70 72  bability of appr
1d190 6f 78 69 6d 61 74 65 6c 79 20 59 2e 0a 20 20 5e  oximately Y..  ^
1d1a0 28 54 68 65 20 5b 75 6e 6c 69 6b 65 6c 79 28 58  (The [unlikely(X
1d1b0 29 5d 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73  )] function is s
1d1c0 68 6f 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69  hort-hand for li
1d1d0 6b 65 6c 69 68 6f 6f 64 28 58 2c 30 2e 30 36 32  kelihood(X,0.062
1d1e0 35 29 2e 29 5e 0a 20 20 5e 28 54 68 65 20 5b 6c  5).)^.  ^(The [l
1d1f0 69 6b 65 6c 79 28 58 29 5d 20 66 75 6e 63 74 69  ikely(X)] functi
1d200 6f 6e 20 69 73 20 73 68 6f 72 74 2d 68 61 6e 64  on is short-hand
1d210 20 66 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28   for likelihood(
1d220 58 2c 30 2e 39 33 37 35 29 2e 29 5e 0a 7d 0a 0a  X,0.9375).)^.}..
1d230 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 79 28  funcdef {likely(
1d240 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
1d250 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69  likely(X) functi
1d260 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
1d270 72 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e  rgument X unchan
1d280 67 65 64 2e 0a 20 20 5e 54 68 65 20 6c 69 6b 65  ged..  ^The like
1d290 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69  ly(X) function i
1d2a0 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74  s a no-op that t
1d2b0 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1d2c0 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77  r.  optimizes aw
1d2d0 61 79 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f  ay so that it co
1d2e0 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79  nsumes no CPU cy
1d2f0 63 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69  cles at.  run-ti
1d300 6d 65 20 28 74 68 61 74 20 69 73 2c 20 64 75 72  me (that is, dur
1d310 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71  ing calls to [sq
1d320 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a  lite3_step()])..
1d330 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f    ^The purpose o
1d340 66 20 74 68 65 20 6c 69 6b 65 6c 79 28 58 29 20  f the likely(X) 
1d350 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70  function is to p
1d360 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20  rovide a hint.  
1d370 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  to the query pla
1d380 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72  nner that the ar
1d390 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f  gument X is a bo
1d3a0 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 74 68  olean value.  th
1d3b0 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
1d3c0 75 65 2e 20 5e 28 54 68 65 20 6c 69 6b 65 6c 79  ue. ^(The likely
1d3d0 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  (X) function is 
1d3e0 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 74 6f 20  equivalent.  to 
1d3f0 5b 6c 69 6b 65 6c 69 68 6f 6f 64 5d 28 58 2c 30  [likelihood](X,0
1d400 2e 39 33 37 35 29 2e 29 5e 20 53 65 65 20 61 6c  .9375).)^ See al
1d410 73 6f 3a 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29  so: [unlikely(X)
1d420 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  ]..}..funcdef {l
1d430 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 29  oad_extension(X)
1d440 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
1d450 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
1d460 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
1d470 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 6c  (X,Y) function l
1d480 6f 61 64 73 20 5b 53 51 4c 69 74 65 20 65 78 74  oads [SQLite ext
1d490 65 6e 73 69 6f 6e 73 5d 20 6f 75 74 20 6f 66 20  ensions] out of 
1d4a0 74 68 65 20 73 68 61 72 65 64 0a 20 20 6c 69 62  the shared.  lib
1d4b0 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 64 20  rary file named 
1d4c0 58 20 75 73 69 6e 67 20 74 68 65 20 65 6e 74 72  X using the entr
1d4d0 79 20 70 6f 69 6e 74 20 59 2e 20 20 5e 54 68 65  y point Y.  ^The
1d4e0 20 72 65 73 75 6c 74 20 6f 66 20 6c 6f 61 64 5f   result of load_
1d4f0 65 78 74 65 6e 73 69 6f 6e 28 29 0a 20 20 69 73  extension().  is
1d500 20 61 6c 77 61 79 73 20 61 20 4e 55 4c 4c 2e 20   always a NULL. 
1d510 20 5e 49 66 20 59 20 69 73 20 6f 6d 69 74 74 65   ^If Y is omitte
1d520 64 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75  d then the defau
1d530 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 6e  lt entry point n
1d540 61 6d 65 20 69 73 20 75 73 65 64 2e 0a 20 20 5e  ame is used..  ^
1d550 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  The load_extensi
1d560 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 61  on() function ra
1d570 69 73 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f  ises an exceptio
1d580 6e 20 69 66 20 74 68 65 20 65 78 74 65 6e 73 69  n if the extensi
1d590 6f 6e 20 66 61 69 6c 73 20 74 6f 0a 20 20 6c 6f  on fails to.  lo
1d5a0 61 64 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65  ad or initialize
1d5b0 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c   correctly...  <
1d5c0 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65  p>^The load_exte
1d5d0 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e  nsion() function
1d5e0 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68   will fail if th
1d5f0 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 74 74 65  e extension atte
1d600 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f 64 69 66  mpts to .  modif
1d610 79 20 6f 72 20 64 65 6c 65 74 65 20 61 6e 20 53  y or delete an S
1d620 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 63  QL function or c
1d630 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
1d640 65 2e 20 20 5e 54 68 65 0a 20 20 65 78 74 65 6e  e.  ^The.  exten
1d650 73 69 6f 6e 20 63 61 6e 20 61 64 64 20 6e 65 77  sion can add new
1d660 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f   functions or co
1d670 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
1d680 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74 0a 20 20  s, but cannot.  
1d690 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65  modify or delete
1d6a0 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63 74 69   existing functi
1d6b0 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67  ons or collating
1d6c0 20 73 65 71 75 65 6e 63 65 73 20 62 65 63 61 75   sequences becau
1d6d0 73 65 0a 20 20 74 68 6f 73 65 20 66 75 6e 63 74  se.  those funct
1d6e0 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c  ions and/or coll
1d6f0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
1d700 6d 69 67 68 74 20 62 65 20 75 73 65 64 20 65 6c  might be used el
1d710 73 65 77 68 65 72 65 0a 20 20 69 6e 20 74 68 65  sewhere.  in the
1d720 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69   currently runni
1d730 6e 67 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ng SQL statement
1d740 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e 20 65 78  .  To load an ex
1d750 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a 20 20 63  tension that.  c
1d760 68 61 6e 67 65 73 20 6f 72 20 64 65 6c 65 74 65  hanges or delete
1d770 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63  s functions or c
1d780 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
1d790 65 73 2c 20 75 73 65 20 74 68 65 0a 20 20 5b 73  es, use the.  [s
1d7a0 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65  qlite3_load_exte
1d7b0 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67 75  nsion()] C-langu
1d7c0 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a 0a 20 20  age API.</p>..  
1d7d0 3c 70 3e 46 6f 72 20 73 65 63 75 72 69 74 79 20  <p>For security 
1d7e0 72 65 61 73 6f 6e 73 2c 20 65 78 74 65 6e 73 69  reasons, extensi
1d7f0 6f 6e 20 6c 6f 61 64 65 64 20 69 73 20 74 75 72  on loaded is tur
1d800 6e 65 64 20 6f 66 66 20 62 79 20 64 65 66 61 75  ned off by defau
1d810 6c 74 20 61 6e 64 20 6d 75 73 74 0a 20 20 62 65  lt and must.  be
1d820 20 65 6e 61 62 6c 65 64 20 62 79 20 61 20 70 72   enabled by a pr
1d830 69 6f 72 20 63 61 6c 6c 20 74 6f 20 5b 73 71 6c  ior call to [sql
1d840 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64  ite3_enable_load
1d850 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 2e 3c 2f  _extension()].</
1d860 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  p>.}..funcdef {l
1d870 6f 77 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  ower(X)} {} {.  
1d880 5e 54 68 65 20 6c 6f 77 65 72 28 58 29 20 66 75  ^The lower(X) fu
1d890 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1d8a0 20 63 6f 70 79 20 6f 66 20 73 74 72 69 6e 67 20   copy of string 
1d8b0 58 20 77 69 74 68 20 61 6c 6c 20 41 53 43 49 49  X with all ASCII
1d8c0 20 63 68 61 72 61 63 74 65 72 73 0a 20 20 63 6f   characters.  co
1d8d0 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72  nverted to lower
1d8e0 20 63 61 73 65 2e 20 20 5e 54 68 65 20 64 65 66   case.  ^The def
1d8f0 61 75 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f  ault built-in lo
1d900 77 65 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 77  wer() function w
1d910 6f 72 6b 73 0a 20 20 66 6f 72 20 41 53 43 49 49  orks.  for ASCII
1d920 20 63 68 61 72 61 63 74 65 72 73 20 6f 6e 6c 79   characters only
1d930 2e 20 20 54 6f 20 64 6f 20 63 61 73 65 20 63 6f  .  To do case co
1d940 6e 76 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e  nversions on non
1d950 2d 41 53 43 49 49 0a 20 20 63 68 61 72 61 63 74  -ASCII.  charact
1d960 65 72 73 2c 20 6c 6f 61 64 20 74 68 65 20 49 43  ers, load the IC
1d970 55 20 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a  U extension..}..
1d980 66 75 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28 58  funcdef {ltrim(X
1d990 29 20 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d  ) ltrim(X,Y)} {}
1d9a0 20 7b 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d 28   {.  ^The ltrim(
1d9b0 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
1d9c0 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66  turns a string f
1d9d0 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
1d9e0 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
1d9f0 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
1da00 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d  appear in Y from
1da10 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f   the left side o
1da20 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59  f X..  ^If the Y
1da30 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69   argument is omi
1da40 74 74 65 64 2c 20 6c 74 72 69 6d 28 58 29 20 72  tted, ltrim(X) r
1da50 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72  emoves spaces fr
1da60 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64 65  om the left side
1da70 0a 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  .  of X..}..func
1da80 64 65 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e  def {max(X,Y,...
1da90 29 7d 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63  )} {*maxCoreFunc
1daa0 20 2a 6d 61 78 20 7b 6d 61 78 28 29 20 53 51 4c   *max {max() SQL
1dab0 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1dac0 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d  ^The multi-argum
1dad0 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69  ent max() functi
1dae0 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
1daf0 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65  rgument with the
1db00 20 0a 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75   .  maximum valu
1db10 65 2c 20 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c  e, or return NUL
1db20 4c 20 69 66 20 61 6e 79 20 61 72 67 75 6d 65 6e  L if any argumen
1db30 74 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54  t is NULL. .  ^T
1db40 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
1db50 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e  t max() function
1db60 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72   searches its ar
1db70 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66  guments from lef
1db80 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72  t to right.  for
1db90 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61   an argument tha
1dba0 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c  t defines a coll
1dbb0 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61  ating function a
1dbc0 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c  nd uses that col
1dbd0 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f  lating.  functio
1dbe0 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
1dbf0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e   comparisons.  ^
1dc00 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61  If none of the a
1dc10 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28  rguments to max(
1dc20 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c  ).  define a col
1dc30 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c  lating function,
1dc40 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59   then the BINARY
1dc50 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
1dc60 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 5e  ion is used..  ^
1dc70 28 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 61  (Note that <b>ma
1dc80 78 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d  x()</b> is a sim
1dc90 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65  ple function whe
1dca0 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72 20  n.  it has 2 or 
1dcb0 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62  more arguments b
1dcc0 75 74 20 6f 70 65 72 61 74 65 73 20 61 73 20 61  ut operates as a
1dcd0 6e 0a 20 20 5b 6d 61 78 41 67 67 46 75 6e 63 20  n.  [maxAggFunc 
1dce0 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  | aggregate func
1dcf0 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f  tion] if given o
1dd00 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67  nly a single arg
1dd10 75 6d 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  ument.)^.}..func
1dd20 64 65 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e  def {min(X,Y,...
1dd30 29 7d 20 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63  )} {*minCoreFunc
1dd40 20 2a 6d 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c   *min {min() SQL
1dd50 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1dd60 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d  ^The multi-argum
1dd70 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69  ent min() functi
1dd80 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
1dd90 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65  rgument with the
1dda0 0a 20 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65  .  minimum value
1ddb0 2e 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61  ..  ^The multi-a
1ddc0 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75  rgument min() fu
1ddd0 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20  nction searches 
1dde0 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72  its arguments fr
1ddf0 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
1de00 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65  .  for an argume
1de10 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  nt that defines 
1de20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
1de30 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68  tion and uses th
1de40 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66  at collating.  f
1de50 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20  unction for all 
1de60 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f  string compariso
1de70 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66  ns.  ^If none of
1de80 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74   the arguments t
1de90 6f 20 6d 69 6e 28 29 0a 20 20 64 65 66 69 6e 65  o min().  define
1dea0 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
1deb0 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ction, then the 
1dec0 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67  BINARY collating
1ded0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
1dee0 64 2e 0a 20 20 5e 28 4e 6f 74 65 20 74 68 61 74  d..  ^(Note that
1def0 20 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73   <b>min()</b> is
1df00 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69   a simple functi
1df10 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73  on when.  it has
1df20 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d   2 or more argum
1df30 65 6e 74 73 20 62 75 74 20 6f 70 65 72 61 74 65  ents but operate
1df40 73 20 61 73 20 61 6e 20 0a 20 20 5b 6d 69 6e 41  s as an .  [minA
1df50 67 67 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61  ggFunc | aggrega
1df60 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20  te function] if 
1df70 67 69 76 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73  given.  only a s
1df80 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 29  ingle argument.)
1df90 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6e 75  ^.}..funcdef {nu
1dfa0 6c 6c 69 66 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  llif(X,Y)} {} {.
1dfb0 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c    ^The nullif(X,
1dfc0 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
1dfd0 72 6e 73 20 69 74 73 20 66 69 72 73 74 20 61 72  rns its first ar
1dfe0 67 75 6d 65 6e 74 20 69 66 20 74 68 65 20 61 72  gument if the ar
1dff0 67 75 6d 65 6e 74 73 20 61 72 65 0a 20 20 64 69  guments are.  di
1e000 66 66 65 72 65 6e 74 20 61 6e 64 20 4e 55 4c 4c  fferent and NULL
1e010 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
1e020 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 2e 20  s are the same. 
1e030 20 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59   ^The nullif(X,Y
1e040 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 73 65 61  ) function.  sea
1e050 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d 65  rches its argume
1e060 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  nts from left to
1e070 20 72 69 67 68 74 20 66 6f 72 20 61 6e 20 61 72   right for an ar
1e080 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69  gument that defi
1e090 6e 65 73 20 61 0a 20 20 63 6f 6c 6c 61 74 69 6e  nes a.  collatin
1e0a0 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75  g function and u
1e0b0 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69  ses that collati
1e0c0 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ng function for 
1e0d0 61 6c 6c 20 73 74 72 69 6e 67 0a 20 20 63 6f 6d  all string.  com
1e0e0 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e  parisons.  ^If n
1e0f0 65 69 74 68 65 72 20 61 72 67 75 6d 65 6e 74 20  either argument 
1e100 74 6f 20 6e 75 6c 6c 69 66 28 29 20 64 65 66 69  to nullif() defi
1e110 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  nes a collating 
1e120 66 75 6e 63 74 69 6f 6e 0a 20 20 74 68 65 6e 20  function.  then 
1e130 74 68 65 20 42 49 4e 41 52 59 20 69 73 20 75 73  the BINARY is us
1e140 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ed..}..funcdef {
1e150 70 72 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e  printf(FORMAT,..
1e160 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65  .)} {} {.  ^(The
1e170 20 70 72 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e   printf(FORMAT,.
1e180 2e 2e 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ..) SQL function
1e190 20 77 6f 72 6b 73 20 6c 69 6b 65 20 74 68 65 20   works like the 
1e1a0 5b 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  [sqlite3_mprintf
1e1b0 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 0a 20  ()] C-language. 
1e1c0 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68   function and th
1e1d0 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74  e printf() funct
1e1e0 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 73 74 61  ion from the sta
1e1f0 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 2e  ndard C library.
1e200 29 5e 0a 20 20 54 68 65 20 66 69 72 73 74 20 61  )^.  The first a
1e210 72 67 75 6d 65 6e 74 20 69 73 20 61 20 66 6f 72  rgument is a for
1e220 6d 61 74 20 73 74 72 69 6e 67 20 74 68 61 74 20  mat string that 
1e230 73 70 65 63 69 66 69 65 73 20 68 6f 77 20 74 6f  specifies how to
1e240 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 6f   construct the o
1e250 75 74 70 75 74 0a 20 20 73 74 72 69 6e 67 20 75  utput.  string u
1e260 73 69 6e 67 20 76 61 6c 75 65 73 20 74 61 6b 65  sing values take
1e270 6e 20 66 72 6f 6d 20 73 75 62 73 65 71 75 65 6e  n from subsequen
1e280 74 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 49  t arguments.  ^I
1e290 66 20 74 68 65 20 46 4f 52 4d 41 54 20 61 72 67  f the FORMAT arg
1e2a0 75 6d 65 6e 74 20 69 73 0a 20 20 6d 69 73 73 69  ument is.  missi
1e2b0 6e 67 20 6f 72 20 4e 55 4c 4c 20 74 68 65 6e 20  ng or NULL then 
1e2c0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
1e2d0 4c 4c 2e 20 20 5e 54 68 65 20 25 6e 20 66 6f 72  LL.  ^The %n for
1e2e0 6d 61 74 20 69 73 20 73 69 6c 65 6e 74 6c 79 20  mat is silently 
1e2f0 69 67 6e 6f 72 65 64 20 61 6e 64 0a 20 20 64 6f  ignored and.  do
1e300 65 73 20 6e 6f 74 20 63 6f 6e 73 75 6d 65 20 61  es not consume a
1e310 6e 20 61 72 67 75 6d 65 6e 74 2e 20 20 5e 54 68  n argument.  ^Th
1e320 65 20 25 70 20 66 6f 72 6d 61 74 20 69 73 20 61  e %p format is a
1e330 6e 20 61 6c 69 61 73 20 66 6f 72 20 25 58 2e 20  n alias for %X. 
1e340 20 5e 54 68 65 20 25 7a 20 66 6f 72 6d 61 74 0a   ^The %z format.
1e350 20 20 69 73 20 69 6e 74 65 72 63 68 61 6e 67 65    is interchange
1e360 61 62 6c 65 20 77 69 74 68 20 25 73 2e 20 20 5e  able with %s.  ^
1e370 28 49 66 20 74 68 65 72 65 20 61 72 65 20 74 6f  (If there are to
1e380 6f 20 66 65 77 20 61 72 67 75 6d 65 6e 74 73 20  o few arguments 
1e390 69 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  in the argument 
1e3a0 6c 69 73 74 2c 0a 20 20 6d 69 73 73 69 6e 67 20  list,.  missing 
1e3b0 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 61 73  arguments are as
1e3c0 73 75 6d 65 64 20 74 6f 20 68 61 76 65 20 61 20  sumed to have a 
1e3d0 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 77 68 69 63  NULL value, whic
1e3e0 68 20 69 73 20 74 72 61 6e 73 6c 61 74 65 64 20  h is translated 
1e3f0 69 6e 74 6f 0a 20 20 30 20 6f 72 20 30 2e 30 20  into.  0 or 0.0 
1e400 66 6f 72 20 6e 75 6d 65 72 69 63 20 66 6f 72 6d  for numeric form
1e410 61 74 73 20 6f 72 20 61 6e 20 65 6d 70 74 79 20  ats or an empty 
1e420 73 74 72 69 6e 67 20 66 6f 72 20 25 73 2e 29 5e  string for %s.)^
1e430 20 20 53 65 65 20 74 68 65 0a 20 20 5b 62 75 69    See the.  [bui
1e440 6c 74 2d 69 6e 20 70 72 69 6e 74 66 28 29 5d 20  lt-in printf()] 
1e450 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f  documentation fo
1e460 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
1e470 6f 72 6d 61 74 69 6f 6e 2e 0a 7d 0a 20 20 0a 0a  ormation..}.  ..
1e480 66 75 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58  funcdef {quote(X
1e490 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71  )} {} {.  ^The q
1e4a0 75 6f 74 65 28 58 29 20 66 75 6e 63 74 69 6f 6e  uote(X) function
1e4b0 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 65 78   returns the tex
1e4c0 74 20 6f 66 20 61 6e 20 53 51 4c 20 6c 69 74 65  t of an SQL lite
1e4d0 72 61 6c 20 77 68 69 63 68 0a 20 20 69 73 20 74  ral which.  is t
1e4e0 68 65 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20  he value of its 
1e4f0 61 72 67 75 6d 65 6e 74 20 73 75 69 74 61 62 6c  argument suitabl
1e500 65 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20  e for inclusion 
1e510 69 6e 74 6f 20 61 6e 20 53 51 4c 20 73 74 61 74  into an SQL stat
1e520 65 6d 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67  ement..  ^String
1e530 73 20 61 72 65 20 73 75 72 72 6f 75 6e 64 65 64  s are surrounded
1e540 20 62 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65   by single-quote
1e550 73 20 77 69 74 68 20 65 73 63 61 70 65 73 20 6f  s with escapes o
1e560 6e 20 69 6e 74 65 72 69 6f 72 20 71 75 6f 74 65  n interior quote
1e570 73 0a 20 20 61 73 20 6e 65 65 64 65 64 2e 20 20  s.  as needed.  
1e580 5e 42 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f 64  ^BLOBs are encod
1e590 65 64 20 61 73 20 68 65 78 61 64 65 63 69 6d 61  ed as hexadecima
1e5a0 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 20 20 5e 53  l literals..  ^S
1e5b0 74 72 69 6e 67 73 20 77 69 74 68 20 65 6d 62 65  trings with embe
1e5c0 64 64 65 64 20 4e 55 4c 20 63 68 61 72 61 63 74  dded NUL charact
1e5d0 65 72 73 20 63 61 6e 6e 6f 74 20 62 65 20 72 65  ers cannot be re
1e5e0 70 72 65 73 65 6e 74 65 64 20 61 73 20 73 74 72  presented as str
1e5f0 69 6e 67 0a 20 20 6c 69 74 65 72 61 6c 73 20 69  ing.  literals i
1e600 6e 20 53 51 4c 20 61 6e 64 20 68 65 6e 63 65 20  n SQL and hence 
1e610 74 68 65 20 72 65 74 75 72 6e 65 64 20 73 74 72  the returned str
1e620 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 74  ing literal is t
1e630 72 75 6e 63 61 74 65 64 20 70 72 69 6f 72 0a 20  runcated prior. 
1e640 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55   to the first NU
1e650 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  L..}..funcdef {r
1e660 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20  andom()} {} {.  
1e670 5e 54 68 65 20 72 61 6e 64 6f 6d 28 29 20 66 75  ^The random() fu
1e680 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1e690 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69   pseudo-random i
1e6a0 6e 74 65 67 65 72 0a 20 20 62 65 74 77 65 65 6e  nteger.  between
1e6b0 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
1e6c0 37 35 38 30 38 20 61 6e 64 20 2b 39 32 32 33 33  75808 and +92233
1e6d0 37 32 30 33 36 38 35 34 37 37 35 38 30 37 2e 0a  72036854775807..
1e6e0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64  }..funcdef {rand
1e6f0 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a  omblob(N)} {} {.
1e700 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 62 6c 6f    ^The randomblo
1e710 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  b(N) function re
1e720 74 75 72 6e 20 61 6e 20 4e 2d 62 79 74 65 20 62  turn an N-byte b
1e730 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70  lob containing p
1e740 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62  seudo-random.  b
1e750 79 74 65 73 2e 20 5e 49 66 20 4e 20 69 73 20 6c  ytes. ^If N is l
1e760 65 73 73 20 74 68 61 6e 20 31 20 74 68 65 6e 20  ess than 1 then 
1e770 61 20 31 2d 62 79 74 65 20 72 61 6e 64 6f 6d 20  a 1-byte random 
1e780 62 6c 6f 62 20 69 73 20 72 65 74 75 72 6e 65 64  blob is returned
1e790 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61  ...  <p>Hint:  a
1e7a0 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20  pplications can 
1e7b0 67 65 6e 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c  generate globall
1e7c0 79 20 75 6e 69 71 75 65 20 69 64 65 6e 74 69 66  y unique identif
1e7d0 69 65 72 73 0a 20 20 75 73 69 6e 67 20 74 68 69  iers.  using thi
1e7e0 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74  s function toget
1e7f0 68 65 72 20 77 69 74 68 20 5b 68 65 78 28 29 5d  her with [hex()]
1e800 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72   and/or.  [lower
1e810 28 29 5d 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f  ()] like this:</
1e820 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74  p>..  <blockquot
1e830 65 3e 0a 20 20 68 65 78 28 72 61 6e 64 6f 6d 62  e>.  hex(randomb
1e840 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72  lob(16))<br></br
1e850 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78 28 72 61  >.  lower(hex(ra
1e860 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20  ndomblob(16))). 
1e870 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d   </blockquote>.}
1e880 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65 70 6c 61  ..funcdef {repla
1e890 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a  ce(X,Y,Z)} {} {.
1e8a0 20 20 5e 54 68 65 20 72 65 70 6c 61 63 65 28 58    ^The replace(X
1e8b0 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72  ,Y,Z) function r
1e8c0 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
1e8d0 66 6f 72 6d 65 64 20 62 79 20 73 75 62 73 74 69  formed by substi
1e8e0 74 75 74 69 6e 67 0a 20 20 73 74 72 69 6e 67 20  tuting.  string 
1e8f0 5a 20 66 6f 72 20 65 76 65 72 79 20 6f 63 63 75  Z for every occu
1e900 72 72 65 6e 63 65 20 6f 66 20 73 74 72 69 6e 67  rrence of string
1e910 20 59 20 69 6e 20 73 74 72 69 6e 67 20 58 2e 20   Y in string X. 
1e920 20 5e 54 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20   ^The [BINARY]. 
1e930 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
1e940 6e 63 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  nce is used for 
1e950 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49  comparisons.  ^I
1e960 66 20 59 20 69 73 20 61 6e 20 65 6d 70 74 79 0a  f Y is an empty.
1e970 20 20 73 74 72 69 6e 67 20 74 68 65 6e 20 72 65    string then re
1e980 74 75 72 6e 20 58 20 75 6e 63 68 61 6e 67 65 64  turn X unchanged
1e990 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 6f 74 20  .  ^If Z is not 
1e9a0 69 6e 69 74 69 61 6c 6c 79 0a 20 20 61 20 73 74  initially.  a st
1e9b0 72 69 6e 67 2c 20 69 74 20 69 73 20 63 61 73 74  ring, it is cast
1e9c0 20 74 6f 20 61 20 55 54 46 2d 38 20 73 74 72 69   to a UTF-8 stri
1e9d0 6e 67 20 70 72 69 6f 72 20 74 6f 20 70 72 6f 63  ng prior to proc
1e9e0 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64  essing..}..funcd
1e9f0 65 66 20 7b 72 6f 75 6e 64 28 58 29 20 72 6f 75  ef {round(X) rou
1ea00 6e 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  nd(X,Y)} {} {.  
1ea10 5e 54 68 65 20 72 6f 75 6e 64 28 58 2c 59 29 20  ^The round(X,Y) 
1ea20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1ea30 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e   a floating-poin
1ea40 74 0a 20 20 76 61 6c 75 65 20 58 20 72 6f 75 6e  t.  value X roun
1ea50 64 65 64 20 74 6f 20 59 20 64 69 67 69 74 73 20  ded to Y digits 
1ea60 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20  to the right of 
1ea70 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
1ea80 74 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  t..  ^If the Y a
1ea90 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
1eaa0 65 64 2c 20 69 74 20 69 73 20 61 73 73 75 6d 65  ed, it is assume
1eab0 64 20 74 6f 20 62 65 20 30 2e 0a 7d 0a 0a 66 75  d to be 0..}..fu
1eac0 6e 63 64 65 66 20 7b 72 74 72 69 6d 28 58 29 20  ncdef {rtrim(X) 
1ead0 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b  rtrim(X,Y)} {} {
1eae0 0a 20 20 5e 54 68 65 20 72 74 72 69 6d 28 58 2c  .  ^The rtrim(X,
1eaf0 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
1eb00 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
1eb10 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
1eb20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
1eb30 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
1eb40 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74  pear in Y from t
1eb50 68 65 20 72 69 67 68 74 20 73 69 64 65 20 6f 66  he right side of
1eb60 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20   X..  ^If the Y 
1eb70 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
1eb80 74 65 64 2c 20 72 74 72 69 6d 28 58 29 20 72 65  ted, rtrim(X) re
1eb90 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f  moves spaces fro
1eba0 6d 20 74 68 65 20 72 69 67 68 74 0a 20 20 73 69  m the right.  si
1ebb0 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  de of X..}..func
1ebc0 64 65 66 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d  def {soundex(X)}
1ebd0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75   {} {.  ^The sou
1ebe0 6e 64 65 78 28 58 29 20 66 75 6e 63 74 69 6f 6e  ndex(X) function
1ebf0 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
1ec00 67 20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f  g that is the so
1ec10 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a  undex encoding .
1ec20 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20    of the string 
1ec30 58 2e 0a 20 20 5e 54 68 65 20 73 74 72 69 6e 67  X..  ^The string
1ec40 20 22 3f 30 30 30 22 20 69 73 20 72 65 74 75 72   "?000" is retur
1ec50 6e 65 64 20 69 66 20 74 68 65 20 61 72 67 75 6d  ned if the argum
1ec60 65 6e 74 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63  ent is NULL or c
1ec70 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43  ontains.  no ASC
1ec80 49 49 20 61 6c 70 68 61 62 65 74 69 63 20 63 68  II alphabetic ch
1ec90 61 72 61 63 74 65 72 73 2e 0a 20 20 5e 28 54 68  aracters..  ^(Th
1eca0 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
1ecb0 6d 69 74 74 65 64 20 66 72 6f 6d 20 53 51 4c 69  mitted from SQLi
1ecc0 74 65 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 20  te by default.. 
1ecd0 20 49 74 20 69 73 20 6f 6e 6c 79 20 61 76 61 69   It is only avai
1ece0 6c 61 62 6c 65 20 69 66 20 74 68 65 20 5b 53 51  lable if the [SQ
1ecf0 4c 49 54 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f  LITE_SOUNDEX] co
1ed00 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
1ed10 6e 0a 20 20 69 73 20 75 73 65 64 20 77 68 65 6e  n.  is used when
1ed20 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74   SQLite is built
1ed30 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .)^.}..funcdef {
1ed40 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
1ed50 74 69 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20  tion_get(N)} {} 
1ed60 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  {.  ^The sqlite_
1ed70 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
1ed80 74 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  t() SQL function
1ed90 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
1eda0 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69  ound the.  [sqli
1edb0 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
1edc0 6e 5f 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66  n_get()] C/C++ f
1edd0 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73  unction..  ^This
1ede0 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
1edf0 20 74 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c   the N-th compil
1ee00 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73  e-time option us
1ee10 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69  ed to build SQLi
1ee20 74 65 0a 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20  te.  or NULL if 
1ee30 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67  N is out of rang
1ee40 65 2e 20 20 53 65 65 20 61 6c 73 6f 20 74 68 65  e.  See also the
1ee50 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e   [compile_option
1ee60 73 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75  s pragma]..}..fu
1ee70 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f  ncdef {sqlite_co
1ee80 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64  mpileoption_used
1ee90 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
1eea0 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f   sqlite_compileo
1eeb0 70 74 69 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c  ption_used() SQL
1eec0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
1eed0 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
1eee0 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d  e.  [sqlite3_com
1eef0 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
1ef00 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f  )] C/C++ functio
1ef10 6e 2e 0a 20 20 5e 57 68 65 6e 20 74 68 65 20 61  n..  ^When the a
1ef20 72 67 75 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c  rgument X to sql
1ef30 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
1ef40 6e 5f 75 73 65 64 28 58 29 20 69 73 20 61 20 73  n_used(X) is a s
1ef50 74 72 69 6e 67 20 77 68 69 63 68 0a 20 20 69 73  tring which.  is
1ef60 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63   the name of a c
1ef70 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
1ef80 6f 6e 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65  on, this routine
1ef90 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 28 31   returns true (1
1efa0 29 20 6f 72 0a 20 20 66 61 6c 73 65 20 28 30 29  ) or.  false (0)
1efb0 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
1efc0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61  ether or not tha
1efd0 74 20 6f 70 74 69 6f 6e 20 77 61 73 20 75 73 65  t option was use
1efe0 64 20 64 75 72 69 6e 67 20 74 68 65 0a 20 20 62  d during the.  b
1eff0 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  uild..}..funcdef
1f000 20 7b 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28   {sqlite_offset(
1f010 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
1f020 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29  sqlite_offset(X)
1f030 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1f040 73 20 74 68 65 20 62 79 74 65 20 6f 66 66 73 65  s the byte offse
1f050 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
1f060 65 0a 20 20 66 69 6c 65 20 66 6f 72 20 74 68 65  e.  file for the
1f070 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
1f080 65 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 68  e record from wh
1f090 69 63 68 20 76 61 6c 75 65 20 77 6f 75 6c 64 20  ich value would 
1f0a0 62 65 20 72 65 61 64 2e 0a 20 20 49 66 20 58 20  be read..  If X 
1f0b0 69 73 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  is not a column 
1f0c0 69 6e 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  in an ordinary t
1f0d0 61 62 6c 65 2c 20 74 68 65 6e 20 73 71 6c 69 74  able, then sqlit
1f0e0 65 5f 6f 66 66 73 65 74 28 58 29 20 72 65 74 75  e_offset(X) retu
1f0f0 72 6e 73 0a 20 20 4e 55 4c 4c 2e 20 20 54 68 65  rns.  NULL.  The
1f100 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
1f110 62 79 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74  by sqlite_offset
1f120 28 58 29 20 6d 69 67 68 74 20 72 65 66 65 72 65  (X) might refere
1f130 6e 63 65 20 65 69 74 68 65 72 20 74 68 65 0a 20  nce either the. 
1f140 20 6f 72 69 67 69 6e 61 6c 20 74 61 62 6c 65 20   original table 
1f150 6f 72 20 61 6e 20 69 6e 64 65 78 2c 20 64 65 70  or an index, dep
1f160 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 71 75  ending on the qu
1f170 65 72 79 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ery.  If the val
1f180 75 65 20 58 20 77 6f 75 6c 64 0a 20 20 6e 6f 72  ue X would.  nor
1f190 6d 61 6c 6c 79 20 62 65 20 65 78 74 72 61 63 74  mally be extract
1f1a0 65 64 20 66 72 6f 6d 20 61 6e 20 69 6e 64 65 78  ed from an index
1f1b0 2c 20 74 68 65 20 73 71 6c 69 74 65 5f 6f 66 66  , the sqlite_off
1f1c0 73 65 74 28 58 29 20 72 65 74 75 72 6e 73 20 74  set(X) returns t
1f1d0 68 65 0a 20 20 6f 66 66 73 65 74 20 74 6f 20 74  he.  offset to t
1f1e0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
1f1f0 20 69 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 20   index record.  
1f200 49 66 20 74 68 65 20 76 61 6c 75 65 20 58 20 77  If the value X w
1f210 6f 75 6c 64 20 62 65 0a 20 20 65 78 74 72 61 63  ould be.  extrac
1f220 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6f 72 69  ted from the ori
1f230 67 69 6e 61 6c 20 74 61 62 6c 65 2c 20 74 68 65  ginal table, the
1f240 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28  n sqlite_offset(
1f250 58 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 6f  X) returns the o
1f260 66 66 73 65 74 0a 20 20 74 6f 20 74 68 65 20 74  ffset.  to the t
1f270 61 62 6c 65 20 72 65 63 6f 72 64 2e 0a 0a 20 20  able record...  
1f280 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 6f 66  <p>The sqlite_of
1f290 66 73 65 74 28 58 29 20 53 51 4c 20 66 75 6e 63  fset(X) SQL func
1f2a0 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 61 76 61  tion is only ava
1f2b0 69 6c 61 62 6c 65 20 69 66 20 53 51 4c 69 74 65  ilable if SQLite
1f2c0 20 69 73 20 62 75 69 6c 74 0a 20 20 75 73 69 6e   is built.  usin
1f2d0 67 20 74 68 65 20 5b 2d 44 53 51 4c 49 54 45 5f  g the [-DSQLITE_
1f2e0 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51  ENABLE_OFFSET_SQ
1f2f0 4c 5f 46 55 4e 43 5d 20 63 6f 6d 70 69 6c 65 2d  L_FUNC] compile-
1f300 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 0a 7d 0a 0a  time option..}..
1f310 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f  funcdef {sqlite_
1f320 73 6f 75 72 63 65 5f 69 64 28 29 7d 20 7b 7d 20  source_id()} {} 
1f330 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  {.  ^The sqlite_
1f340 73 6f 75 72 63 65 5f 69 64 28 29 20 66 75 6e 63  source_id() func
1f350 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
1f360 74 72 69 6e 67 20 74 68 61 74 20 69 64 65 6e 74  tring that ident
1f370 69 66 69 65 73 20 74 68 65 0a 20 20 73 70 65 63  ifies the.  spec
1f380 69 66 69 63 20 76 65 72 73 69 6f 6e 20 6f 66 20  ific version of 
1f390 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20  the source code 
1f3a0 74 68 61 74 20 77 61 73 20 75 73 65 64 20 74 6f  that was used to
1f3b0 20 62 75 69 6c 64 20 74 68 65 20 53 51 4c 69 74   build the SQLit
1f3c0 65 0a 20 20 6c 69 62 72 61 72 79 2e 20 20 5e 54  e.  library.  ^T
1f3d0 68 65 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e  he string return
1f3e0 65 64 20 62 79 20 73 71 6c 69 74 65 5f 73 6f 75  ed by sqlite_sou
1f3f0 72 63 65 5f 69 64 28 29 20 69 73 0a 20 20 74 68  rce_id() is.  th
1f400 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1f410 74 68 61 74 20 74 68 65 20 73 6f 75 72 63 65 20  that the source 
1f420 63 6f 64 65 20 77 61 73 20 63 68 65 63 6b 65 64  code was checked
1f430 20 69 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a   in followed by.
1f440 20 20 74 68 65 20 53 48 41 31 20 68 61 73 68 20    the SHA1 hash 
1f450 66 6f 72 20 74 68 61 74 20 63 68 65 63 6b 2d 69  for that check-i
1f460 6e 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69  n.  ^This functi
1f470 6f 6e 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77  on is.  an SQL w
1f480 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
1f490 65 20 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63  e [sqlite3_sourc
1f4a0 65 69 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61  eid()] C interfa
1f4b0 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ce..}..funcdef {
1f4c0 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29  sqlite_version()
1f4d0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
1f4e0 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66  lite_version() f
1f4f0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1f500 74 68 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69  the version stri
1f510 6e 67 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ng for the SQLit
1f520 65 0a 20 20 6c 69 62 72 61 72 79 20 74 68 61 74  e.  library that
1f530 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54   is running.  ^T
1f540 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
1f550 61 6e 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72  an SQL.  wrapper
1f560 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c   around the [sql
1f570 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28  ite3_libversion(
1f580 29 5d 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a  )] C-interface..
1f590 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73  }..funcdef {subs
1f5a0 74 72 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72  tr(X,Y,Z) substr
1f5b0 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
1f5c0 68 65 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29  he substr(X,Y,Z)
1f5d0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1f5e0 73 20 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66  s a substring of
1f5f0 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20   input string X 
1f600 74 68 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69  that begins.  wi
1f610 74 68 20 74 68 65 20 59 2d 74 68 20 63 68 61 72  th the Y-th char
1f620 61 63 74 65 72 20 61 6e 64 20 77 68 69 63 68 20  acter and which 
1f630 69 73 20 5a 20 63 68 61 72 61 63 74 65 72 73 20  is Z characters 
1f640 6c 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73  long..  ^If Z is
1f650 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75   omitted then su
1f660 62 73 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e  bstr(X,Y) return
1f670 73 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73  s all characters
1f680 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64   through the end
1f690 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  .  of the string
1f6a0 20 58 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74   X beginning wit
1f6b0 68 20 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54  h the Y-th..  ^T
1f6c0 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61  he left-most cha
1f6d0 72 61 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e  racter of X is n
1f6e0 75 6d 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20  umber 1.  ^If Y 
1f6f0 69 73 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68  is negative.  th
1f700 65 6e 20 74 68 65 20 66 69 72 73 74 20 63 68 61  en the first cha
1f710 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 75  racter of the su
1f720 62 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64  bstring is found
1f730 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f   by counting fro
1f740 6d 20 74 68 65 0a 20 20 72 69 67 68 74 20 72 61  m the.  right ra
1f750 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65  ther than the le
1f760 66 74 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65  ft.  ^If Z is ne
1f770 67 61 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68  gative then.  th
1f780 65 20 61 62 73 28 5a 29 20 63 68 61 72 61 63 74  e abs(Z) charact
1f790 65 72 73 20 70 72 65 63 65 64 69 6e 67 20 74 68  ers preceding th
1f7a0 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72  e Y-th character
1f7b0 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20   are returned.. 
1f7c0 20 5e 49 66 20 58 20 69 73 20 61 20 73 74 72 69   ^If X is a stri
1f7d0 6e 67 20 74 68 65 6e 20 63 68 61 72 61 63 74 65  ng then characte
1f7e0 72 73 20 69 6e 64 69 63 65 73 20 72 65 66 65 72  rs indices refer
1f7f0 20 74 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38   to actual UTF-8
1f800 20 0a 20 20 63 68 61 72 61 63 74 65 72 73 2e 20   .  characters. 
1f810 20 5e 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42   ^If X is a BLOB
1f820 20 74 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65   then the indice
1f830 73 20 72 65 66 65 72 20 74 6f 20 62 79 74 65 73  s refer to bytes
1f840 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f  ..}..funcdef {to
1f850 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b  tal_changes()} {
1f860 7d 20 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c  } {.  ^The total
1f870 5f 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74  _changes() funct
1f880 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1f890 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68  number of row ch
1f8a0 61 6e 67 65 73 0a 20 20 63 61 75 73 65 64 20 62  anges.  caused b
1f8b0 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
1f8c0 20 6f 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61   or DELETE.  sta
1f8d0 74 65 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68  tements since th
1f8e0 65 20 63 75 72 72 65 6e 74 20 64 61 74 61 62 61  e current databa
1f8f0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61  se connection wa
1f900 73 20 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69  s opened..  ^Thi
1f910 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  s function is a 
1f920 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
1f930 68 65 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61  he [sqlite3_tota
1f940 6c 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43  l_changes()].  C
1f950 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a  /C++ interface..
1f960 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d  }..funcdef {trim
1f970 28 58 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b  (X) trim(X,Y)} {
1f980 7d 20 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28  } {.  ^The trim(
1f990 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
1f9a0 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66  turns a string f
1f9b0 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
1f9c0 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
1f9d0 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
1f9e0 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d  appear in Y from
1f9f0 20 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e   both ends of X.
1fa00 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
1fa10 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
1fa20 2c 20 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65  , trim(X) remove
1fa30 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f  s spaces from bo
1fa40 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a  th ends of X..}.
1fa50 0a 66 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66  .funcdef {typeof
1fa60 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
1fa70 20 74 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74   typeof(X) funct
1fa80 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
1fa90 72 69 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61  ring that indica
1faa0 74 65 73 20 74 68 65 20 5b 64 61 74 61 74 79 70  tes the [datatyp
1fab0 65 5d 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72  e] of.  the expr
1fac0 65 73 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22  ession X: "null"
1fad0 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65  , "integer", "re
1fae0 61 6c 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20  al", "text", or 
1faf0 22 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64  "blob"..}..funcd
1fb00 65 66 20 7b 75 6e 6c 69 6b 65 6c 79 28 58 29 7d  ef {unlikely(X)}
1fb10 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e 6c   {} {.  ^The unl
1fb20 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f  ikely(X) functio
1fb30 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72  n returns the ar
1fb40 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67  gument X unchang
1fb50 65 64 2e 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b  ed..  ^The unlik
1fb60 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
1fb70 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20  is a no-op that 
1fb80 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1fb90 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61  or.  optimizes a
1fba0 77 61 79 20 73 6f 20 74 68 61 74 20 69 74 20 63  way so that it c
1fbb0 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63  onsumes no CPU c
1fbc0 79 63 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d 74  ycles at.  run-t
1fbd0 69 6d 65 20 28 74 68 61 74 20 69 73 2c 20 64 75  ime (that is, du
1fbe0 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73  ring calls to [s
1fbf0 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e  qlite3_step()]).
1fc00 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20  .  ^The purpose 
1fc10 6f 66 20 74 68 65 20 75 6e 6c 69 6b 65 6c 79 28  of the unlikely(
1fc20 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74  X) function is t
1fc30 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74  o provide a hint
1fc40 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72 79 20  .  to the query 
1fc50 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65  planner that the
1fc60 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61   argument X is a
1fc70 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20   boolean value. 
1fc80 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
1fc90 20 6e 6f 74 20 74 72 75 65 2e 20 5e 28 54 68 65   not true. ^(The
1fca0 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e   unlikely(X) fun
1fcb0 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c  ction is equival
1fcc0 65 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69  ent.  to [likeli
1fcd0 68 6f 6f 64 5d 28 58 2c 20 30 2e 30 36 32 35 29  hood](X, 0.0625)
1fce0 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .)^.}..funcdef {
1fcf0 75 6e 69 63 6f 64 65 28 58 29 7d 20 7b 7d 20 7b  unicode(X)} {} {
1fd00 0a 20 20 5e 54 68 65 20 75 6e 69 63 6f 64 65 28  .  ^The unicode(
1fd10 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1fd20 72 6e 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20  rns the numeric 
1fd30 75 6e 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69  unicode code poi
1fd40 6e 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  nt corresponding
1fd50 20 74 6f 0a 20 20 74 68 65 20 66 69 72 73 74 20   to.  the first 
1fd60 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
1fd70 20 73 74 72 69 6e 67 20 58 2e 20 20 49 66 20 74   string X.  If t
1fd80 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 75  he argument to u
1fd90 6e 69 63 6f 64 65 28 58 29 20 69 73 20 6e 6f 74  nicode(X) is not
1fda0 20 61 20 73 74 72 69 6e 67 0a 20 20 74 68 65 6e   a string.  then
1fdb0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 75   the result is u
1fdc0 6e 64 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e  ndefined..}..fun
1fdd0 63 64 65 66 20 7b 75 70 70 65 72 28 58 29 7d 20  cdef {upper(X)} 
1fde0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 70 70 65  {} {.  ^The uppe
1fdf0 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  r(X) function re
1fe00 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
1fe10 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 69  input string X i
1fe20 6e 20 77 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c  n which all .  l
1fe30 6f 77 65 72 2d 63 61 73 65 20 41 53 43 49 49 20  ower-case ASCII 
1fe40 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20 63  characters are c
1fe50 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 68 65 69  onverted to thei
1fe60 72 20 75 70 70 65 72 2d 63 61 73 65 20 65 71 75  r upper-case equ
1fe70 69 76 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63  ivalent..}..func
1fe80 64 65 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29  def {zeroblob(N)
1fe90 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65  } {} {.  ^The ze
1fea0 72 6f 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69  roblob(N) functi
1feb0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 42 4c 4f  on returns a BLO
1fec0 42 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20  B consisting of 
1fed0 4e 20 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e  N bytes of 0x00.
1fee0 0a 20 20 53 51 4c 69 74 65 20 6d 61 6e 61 67 65  .  SQLite manage
1fef0 73 20 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62  s these zeroblob
1ff00 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e 74  s very efficient
1ff10 6c 79 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63  ly.  Zeroblobs c
1ff20 61 6e 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20  an be used to.  
1ff30 72 65 73 65 72 76 65 20 73 70 61 63 65 20 66 6f  reserve space fo
1ff40 72 20 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73  r a BLOB that is
1ff50 20 6c 61 74 65 72 20 77 72 69 74 74 65 6e 20 75   later written u
1ff60 73 69 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65 33  sing .  [sqlite3
1ff70 5f 62 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69  _blob_open() | i
1ff80 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20  ncremental BLOB 
1ff90 49 2f 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51  I/O]..  ^This SQ
1ffa0 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d  L function is im
1ffb0 70 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20  plemented using 
1ffc0 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73  the [sqlite3_res
1ffd0 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a  ult_zeroblob()].
1ffe0 20 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74    routine from t
1fff0 68 65 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  he C/C++ interfa
20000 63 65 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  ce..}.</tcl>..<p
20010 3e 54 68 65 20 63 6f 72 65 20 66 75 6e 63 74 69  >The core functi
20020 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20  ons shown below 
20030 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79  are available by
20040 20 64 65 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65   default. .[date
20050 66 75 6e 63 20 7c 20 44 61 74 65 20 26 61 6d 70  func | Date &amp
20060 3b 20 54 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  ; Time functions
20070 5d 2c 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67  ],.[aggfunc | ag
20080 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
20090 73 5d 2c 0a 5b 62 75 69 6c 74 69 6e 20 77 69 6e  s],.[builtin win
200a0 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 7c 77 69  dow functions|wi
200b0 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 5d 2c  ndow functions],
200c0 20 61 6e 64 0a 5b 6a 73 6f 6e 31 20 7c 20 4a 53   and.[json1 | JS
200d0 4f 4e 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72  ON functions] ar
200e0 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70  e documented sep
200f0 61 72 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70  arately.  An.app
20100 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20 64 65 66  lication may def
20110 69 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66  ine additional.f
20120 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e  unctions written
20130 20 69 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20   in C and added 
20140 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
20150 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65  engine using.the
20160 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   [sqlite3_create
20170 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49  _function()] API
20180 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74  .</p>..<tcl>.set
20190 20 6c 78 20 7b 7d 0a 66 6f 72 65 61 63 68 20 62   lx {}.foreach b
201a0 61 73 65 73 79 6e 74 61 78 20 5b 61 72 72 61 79  asesyntax [array
201b0 20 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73   names corefuncs
201c0 65 74 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20  et] {.  foreach 
201d0 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73  {syntax keywords
201e0 20 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63   desc} $corefunc
201f0 73 65 74 28 24 62 61 73 65 73 79 6e 74 61 78 29  set($basesyntax)
20200 20 62 72 65 61 6b 0a 20 20 72 65 67 65 78 70 20   break.  regexp 
20210 7b 5e 5b 61 2d 7a 5f 5d 2b 7d 20 24 62 61 73 65  {^[a-z_]+} $base
20220 73 79 6e 74 61 78 20 66 72 61 67 6d 65 6e 74 0a  syntax fragment.
20230 20 20 66 6f 72 65 61 63 68 20 63 6f 72 65 73 79    foreach coresy
20240 6e 74 61 78 20 24 73 79 6e 74 61 78 20 7b 0a 20  ntax $syntax {. 
20250 20 20 20 6c 61 70 70 65 6e 64 20 6c 78 20 5b 6c     lappend lx [l
20260 69 73 74 20 24 66 72 61 67 6d 65 6e 74 20 24 63  ist $fragment $c
20270 6f 72 65 73 79 6e 74 61 78 20 30 5d 0a 20 20 7d  oresyntax 0].  }
20280 0a 7d 0a 68 64 5f 6c 69 73 74 5f 6f 66 5f 6c 69  .}.hd_list_of_li
20290 6e 6b 73 20 7b 7d 20 32 32 35 20 5b 6c 73 6f 72  nks {} 225 [lsor
202a0 74 20 2d 69 6e 64 65 78 20 31 20 24 6c 78 5d 0a  t -index 1 $lx].
202b0 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c 68 72 20  .hd_putsnl "<hr 
202c0 63 6c 61 73 73 3d 27 78 68 72 27 3e 22 0a 68 64  class='xhr'>".hd
202d0 5f 70 75 74 73 6e 6c 20 22 3c 64 6c 3e 22 0a 66  _putsnl "<dl>".f
202e0 6f 72 65 61 63 68 20 62 61 73 65 73 79 6e 74 61  oreach basesynta
202f0 78 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20  x [lsort [array 
20300 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73 65  names corefuncse
20310 74 5d 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20  t]] {.  foreach 
20320 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73  {syntax keywords
20330 20 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63   desc} $corefunc
20340 73 65 74 28 24 62 61 73 65 73 79 6e 74 61 78 29  set($basesyntax)
20350 20 62 72 65 61 6b 0a 20 20 72 65 67 73 75 62 20   break.  regsub 
20360 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69  -all {\s+} [stri
20370 6e 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d  ng trim $syntax]
20380 20 7b 3c 62 72 20 2f 3e 7d 20 73 79 6e 74 61 78   {<br />} syntax
20390 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
203a0 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73  \(([^*)]+)\)} $s
203b0 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69  yntax {(<i>\1</i
203c0 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67  >)} syntax.  reg
203d0 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79  sub -all {,} $sy
203e0 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20  ntax {</i>,<i>} 
203f0 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
20400 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c  -all {<i>\.\.\.<
20410 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e  /i>} $syntax {..
20420 2e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 65  .} syntax.  rege
20430 78 70 20 7b 5e 5b 61 2d 7a 5d 2b 7d 20 24 62 61  xp {^[a-z]+} $ba
20440 73 65 73 79 6e 74 61 78 20 66 72 61 67 6d 65 6e  sesyntax fragmen
20450 74 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68  t.  if {[llength
20460 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20   $keywords]==0} 
20470 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61  {.    regexp {[a
20480 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e  -z_]+} $syntax n
20490 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d  ame.    hd_fragm
204a0 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65  ent $name *$name
204b0 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20   "${name}() SQL 
204c0 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c  function".  } el
204d0 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61  se {.    set fra
204e0 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b  gname [lindex $k
204f0 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72  eywords 0].    r
20500 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d  egsub -all {[^a-
20510 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d  z]} $fragname {}
20520 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64   fragname.    hd
20530 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e  _fragment $fragn
20540 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f  ame.    eval hd_
20550 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67  keywords [string
20560 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b   map {\n { }} $k
20570 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68  eywords].  }.  h
20580 64 5f 70 75 74 73 20 22 3c 64 74 3e 3c 70 3e 3c  d_puts "<dt><p><
20590 62 3e 24 73 79 6e 74 61 78 3c 2f 62 3e 3c 2f 64  b>$syntax</b></d
205a0 74 3e 22 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65  t>".  hd_resolve
205b0 20 22 3c 64 64 3e 3c 70 3e 24 64 65 73 63 3c 2f   "<dd><p>$desc</
205c0 64 64 3e 5c 6e 22 0a 7d 0a 68 64 5f 70 75 74 73  dd>\n".}.hd_puts
205d0 6e 6c 20 22 3c 2f 64 6c 3e 22 0a 0a 23 23 23 23  nl "</dl>"..####
205e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
205f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20620 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
20630 6f 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d  on {Date And Tim
20640 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74  e Functions} dat
20650 65 66 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63  efunc {*datefunc
20660 20 7b 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20   {date and time 
20670 66 75 6e 63 74 69 6f 6e 73 7d 7d 0a 68 64 5f 6b  functions}}.hd_k
20680 65 79 77 6f 72 64 73 20 7b 64 61 74 65 28 29 20  eywords {date() 
20690 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 74  SQL function} {t
206a0 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69  ime() SQL functi
206b0 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20  on}.hd_keywords 
206c0 7b 64 61 74 65 74 69 6d 65 28 29 20 53 51 4c 20  {datetime() SQL 
206d0 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61  function} {julia
206e0 6e 64 61 79 28 29 20 53 51 4c 20 66 75 6e 63 74  nday() SQL funct
206f0 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73  ion}.hd_keywords
20700 20 7b 73 74 72 66 74 69 6d 65 28 29 20 53 51 4c   {strftime() SQL
20710 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c   function}.</tcl
20720 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73 75  >..<p>.SQLite su
20730 70 70 6f 72 74 73 20 66 69 76 65 20 64 61 74 65  pports five date
20740 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
20750 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  ons as follows:.
20760 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c  </p>..<p>.<ol>.<
20770 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 28 3c 2f  li> ^(<b>date(</
20780 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c  b><i>timestring,
20790 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
207a0 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
207b0 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69  </b>)^ </li>.<li
207c0 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e  > ^(<b>time(</b>
207d0 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
207e0 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
207f0 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
20800 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  b>)^ </li>.<li> 
20810 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c 2f  ^(<b>datetime(</
20820 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c  b><i>timestring,
20830 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
20840 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
20850 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69  </b>)^ </li>.<li
20860 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64 61 79  > ^(<b>julianday
20870 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
20880 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
20890 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
208a0 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
208b0 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72 66 74 69  <li> ^(<b>strfti
208c0 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74  me(</b><i>format
208d0 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f  , timestring, mo
208e0 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72  difier, modifier
208f0 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62  , ...</i><b>)</b
20900 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a  >)^ </li>.</ol>.
20910 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76 65 20 64  .<p>.^All five d
20920 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
20930 63 74 69 6f 6e 73 20 74 61 6b 65 20 61 20 74 69  ctions take a ti
20940 6d 65 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20  me string as an 
20950 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54 68 65 20  argument. .^The 
20960 74 69 6d 65 20 73 74 72 69 6e 67 20 69 73 20 66  time string is f
20970 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20  ollowed by zero 
20980 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72  or more modifier
20990 73 2e 20 0a 5e 54 68 65 20 73 74 72 66 74 69 6d  s. .^The strftim
209a0 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73  e() function als
209b0 6f 20 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74  o takes a format
209c0 20 73 74 72 69 6e 67 20 61 73 20 69 74 73 20 66   string as its f
209d0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c  irst argument..<
209e0 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74  /p>..<p>.The dat
209f0 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
20a00 69 6f 6e 73 20 75 73 65 20 61 20 73 75 62 73 65  ions use a subse
20a10 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  t of.[http://en.
20a20 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
20a30 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c 20 49 53  ki/ISO_8601 | IS
20a40 30 2d 38 36 30 31 5d 20 64 61 74 65 20 61 6e 64  0-8601] date and
20a50 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e   time.formats..^
20a60 54 68 65 20 64 61 74 65 28 29 20 66 75 6e 63 74  The date() funct
20a70 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
20a80 64 61 74 65 20 69 6e 20 74 68 69 73 20 66 6f 72  date in this for
20a90 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44 2e  mat: YYYY-MM-DD.
20aa0 20 0a 5e 54 68 65 20 74 69 6d 65 28 29 20 66 75   .^The time() fu
20ab0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
20ac0 68 65 20 74 69 6d 65 20 61 73 20 48 48 3a 4d 4d  he time as HH:MM
20ad0 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61 74 65 74  :SS. .^The datet
20ae0 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ime() function r
20af0 65 74 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d 2d  eturns "YYYY-MM-
20b00 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e  DD HH:MM:SS". .^
20b10 28 54 68 65 20 6a 75 6c 69 61 6e 64 61 79 28 29  (The julianday()
20b20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
20b30 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65  s the .[http://e
20b40 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
20b50 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20  wiki/Julian_day 
20b60 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d 20 2d 20  | Julian day] - 
20b70 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 61  the.number of da
20b80 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e  ys since noon in
20b90 20 47 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e 6f   Greenwich on No
20ba0 76 65 6d 62 65 72 20 32 34 2c 20 34 37 31 34 20  vember 24, 4714 
20bb0 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a 2f 2f 65  B.C. .([http://e
20bc0 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
20bd0 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f 47  wiki/Proleptic_G
20be0 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61  regorian_calenda
20bf0 72 20 7c 20 50 72 6f 6c 65 70 74 69 63 20 47 72  r | Proleptic Gr
20c00 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72  egorian calendar
20c10 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74 72 66 74  ]).)^.^The strft
20c20 69 6d 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ime() routine re
20c30 74 75 72 6e 73 20 74 68 65 20 64 61 74 65 20 66  turns the date f
20c40 6f 72 6d 61 74 74 65 64 20 61 63 63 6f 72 64 69  ormatted accordi
20c50 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d 61  ng to .the forma
20c60 74 20 73 74 72 69 6e 67 20 73 70 65 63 69 66 69  t string specifi
20c70 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ed as the first 
20c80 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68 65 20 66  argument..^The f
20c90 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 75 70  ormat string sup
20ca0 70 6f 72 74 73 20 74 68 65 20 6d 6f 73 74 20 63  ports the most c
20cb0 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75 74 69  ommon substituti
20cc0 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65  ons found in the
20cd0 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e 67 72   .[http://opengr
20ce0 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75  oup.org/onlinepu
20cf0 62 73 2f 30 30 37 39 30 38 37 39 39 2f 78 73 68  bs/007908799/xsh
20d00 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c 20 7c  /strftime.html |
20d10 20 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63   strftime() func
20d20 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65 20 73  tion].from the s
20d30 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72  tandard C librar
20d40 79 20 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73  y plus two new s
20d50 75 62 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66  ubstitutions, %f
20d60 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68 65 20 66   and %J..^(The f
20d70 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20 63 6f  ollowing is a co
20d80 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f 66 20 76  mplete list of v
20d90 61 6c 69 64 20 73 74 72 66 74 69 6d 65 28 29 20  alid strftime() 
20da0 73 75 62 73 74 69 74 75 74 69 6f 6e 73 3a 0a 3c  substitutions:.<
20db0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
20dc0 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
20dd0 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  "0" cellpadding=
20de0 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d  "0" cellspacing=
20df0 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64  "0">.<tr><td><td
20e00 20 77 69 64 74 68 3d 22 31 30 22 3e 3c 74 64 3e   width="10"><td>
20e10 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20  </tr>..<tr><td> 
20e20 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %d <td><td> day 
20e30 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74 72  of month: 00.<tr
20e40 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e 3c 74 64  ><td> %f <td><td
20e50 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63  > fractional sec
20e60 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a 3c 74 72  onds: SS.SSS.<tr
20e70 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e 3c 74 64  ><td> %H <td><td
20e80 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34 20 0a 3c  > hour: 00-24 .<
20e90 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74 64 3e 3c  tr><td> %j <td><
20ea0 74 64 3e 20 64 61 79 20 6f 66 20 79 65 61 72 3a  td> day of year:
20eb0 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e 3c 74 64   001-366.<tr><td
20ec0 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a 75  > %J <td><td> Ju
20ed0 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 0a  lian day number.
20ee0 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c 74 64 3e  <tr><td> %m <td>
20ef0 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d 31  <td> month: 01-1
20f00 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d 20 3c 74  2.<tr><td> %M <t
20f10 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65 3a 20 30  d><td> minute: 0
20f20 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 73  0-59.<tr><td> %s
20f30 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64   <td><td> second
20f40 73 20 73 69 6e 63 65 20 31 39 37 30 2d 30 31 2d  s since 1970-01-
20f50 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25 53 20 3c  01.<tr><td> %S <
20f60 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 3a  td><td> seconds:
20f70 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20   00-59.<tr><td> 
20f80 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %w <td><td> day 
20f90 6f 66 20 77 65 65 6b 20 30 2d 36 20 77 69 74 68  of week 0-6 with
20fa0 20 53 75 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c   Sunday==0.<tr><
20fb0 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74 64 3e 20  td> %W <td><td> 
20fc0 77 65 65 6b 20 6f 66 20 79 65 61 72 3a 20 30 30  week of year: 00
20fd0 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20 25 59 20  -53.<tr><td> %Y 
20fe0 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72 3a 20 30  <td><td> year: 0
20ff0 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e 3c 74 64  000-9999.<tr><td
21000 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e 20 25 0a  > %% <td><td> %.
21010 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
21020 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28  quote>)^..<p>.^(
21030 4e 6f 74 69 63 65 20 74 68 61 74 20 61 6c 6c 20  Notice that all 
21040 6f 74 68 65 72 20 64 61 74 65 20 61 6e 64 20 74  other date and t
21050 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61  ime functions ca
21060 6e 20 62 65 20 65 78 70 72 65 73 73 65 64 0a 69  n be expressed.i
21070 6e 20 74 65 72 6d 73 20 6f 66 20 73 74 72 66 74  n terms of strft
21080 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  ime():.</p>..<bl
21090 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
210a0 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c   border="0" cell
210b0 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c  padding="0" cell
210c0 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72  spacing="0">.<tr
210d0 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e  ><td><b>Function
210e0 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d 22 33  </b><td width="3
210f0 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76 61  0"><td><b>Equiva
21100 6c 65 6e 74 20 73 74 72 66 74 69 6d 65 28 29 3c  lent strftime()<
21110 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64  /b>.<tr><td>   d
21120 61 74 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74  ate(...)      <t
21130 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65  d><td>  strftime
21140 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e  ('%Y-%m-%d', ...
21150 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69 6d  ).<tr><td>   tim
21160 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e  e(...)      <td>
21170 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27  <td>  strftime('
21180 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a  %H:%M:%S', ...).
21190 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 74  <tr><td>   datet
211a0 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74  ime(...)  <td><t
211b0 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59  d>  strftime('%Y
211c0 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 27  -%m-%d %H:%M:%S'
211d0 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
211e0 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e 29    julianday(...)
211f0 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
21200 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c  ime('%J', ...).<
21210 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
21220 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65  uote>)^..<p>.The
21230 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66 6f   only reasons fo
21240 72 20 70 72 6f 76 69 64 69 6e 67 20 66 75 6e 63  r providing func
21250 74 69 6f 6e 73 20 6f 74 68 65 72 20 74 68 61 6e  tions other than
21260 20 73 74 72 66 74 69 6d 65 28 29 20 69 73 0a 66   strftime() is.f
21270 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 61  or convenience a
21280 6e 64 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63  nd for efficienc
21290 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d  y..</p>..<h3>Tim
212a0 65 20 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a  e Strings</h3>..
212b0 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73 74 72 69  <p>^(A time stri
212c0 6e 67 20 63 61 6e 20 62 65 20 69 6e 20 61 6e 79  ng can be in any
212d0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
212e0 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a  g formats:</p>..
212f0 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  <ol>.<li> <i>YYY
21300 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e  Y-MM-DD</i>.<li>
21310 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
21320 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  H:MM</i>.<li> <i
21330 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  >YYYY-MM-DD HH:M
21340 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  M:SS</i>.<li> <i
21350 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  >YYYY-MM-DD HH:M
21360 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
21370 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
21380 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
21390 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :MM</i>.<li> <i>
213a0 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62  YYYY-MM-DD</i><b
213b0 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53  >T</b><i>HH:MM:S
213c0 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59  S</i>.<li> <i>YY
213d0 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54  YY-MM-DD</i><b>T
213e0 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e  </b><i>HH:MM:SS.
213f0 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  SSS</i>.<li> <i>
21400 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  HH:MM</i>.<li> <
21410 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c  i>HH:MM:SS</i>.<
21420 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e  li> <i>HH:MM:SS.
21430 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e  SSS</i>.<li> <b>
21440 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e  now</b>.<li> <i>
21450 44 44 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a 3c  DDDDDDDDDD</i>.<
21460 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20  /ol>)^..<p>.^In 
21470 66 6f 72 6d 61 74 73 20 35 20 74 68 72 6f 75 67  formats 5 throug
21480 68 20 37 2c 20 74 68 65 20 22 54 22 20 69 73 20  h 7, the "T" is 
21490 61 20 6c 69 74 65 72 61 6c 20 63 68 61 72 61 63  a literal charac
214a0 74 65 72 20 73 65 70 61 72 61 74 69 6e 67 20 0a  ter separating .
214b0 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 68 65  the date and the
214c0 20 74 69 6d 65 2c 20 61 73 20 72 65 71 75 69 72   time, as requir
214d0 65 64 20 62 79 20 0a 5b 68 74 74 70 3a 2f 2f 77  ed by .[http://w
214e0 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f  ww.w3c.org/TR/NO
214f0 54 45 2d 64 61 74 65 74 69 6d 65 20 7c 20 49 53  TE-datetime | IS
21500 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61  O-8601]. .^Forma
21510 74 73 20 38 20 74 68 72 6f 75 67 68 20 31 30 20  ts 8 through 10 
21520 74 68 61 74 20 73 70 65 63 69 66 79 20 6f 6e 6c  that specify onl
21530 79 20 61 20 74 69 6d 65 20 61 73 73 75 6d 65 20  y a time assume 
21540 61 20 64 61 74 65 20 6f 66 20 0a 32 30 30 30 2d  a date of .2000-
21550 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31 31  01-01. Format 11
21560 2c 20 74 68 65 20 73 74 72 69 6e 67 20 27 6e 6f  , the string 'no
21570 77 27 2c 20 69 73 20 63 6f 6e 76 65 72 74 65 64  w', is converted
21580 20 69 6e 74 6f 20 74 68 65 20 0a 63 75 72 72 65   into the .curre
21590 6e 74 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  nt date and time
215a0 20 61 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f   as obtained fro
215b0 6d 20 74 68 65 20 78 43 75 72 72 65 6e 74 54 69  m the xCurrentTi
215c0 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68 65  me method.of the
215d0 20 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d 20 6f   [sqlite3_vfs] o
215e0 62 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a 5e 54  bject in use..^T
215f0 68 65 20 27 6e 6f 77 27 20 61 72 67 75 6d 65 6e  he 'now' argumen
21600 74 20 74 6f 20 64 61 74 65 20 61 6e 64 20 74 69  t to date and ti
21610 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6c 77  me functions alw
21620 61 79 73 20 72 65 74 75 72 6e 73 20 65 78 61 63  ays returns exac
21630 74 6c 79 20 74 68 65 0a 73 61 6d 65 20 76 61 6c  tly the.same val
21640 75 65 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20  ue for multiple 
21650 69 6e 76 6f 63 61 74 69 6f 6e 73 20 77 69 74 68  invocations with
21660 69 6e 20 74 68 65 20 73 61 6d 65 20 5b 73 71 6c  in the same [sql
21670 69 74 65 33 5f 73 74 65 70 28 29 5d 20 63 61 6c  ite3_step()] cal
21680 6c 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77  l..^[http://en.w
21690 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
216a0 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e  i/Coordinated_Un
216b0 69 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55  iversal_Time | U
216c0 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e  niversal Coordin
216d0 61 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d  ated Time (UTC)]
216e0 20 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d   is used. .^Form
216f0 61 74 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68  at 12 is the .[h
21700 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
21710 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69  ia.org/wiki/Juli
21720 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20  an_day | Julian 
21730 64 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72  day number].expr
21740 65 73 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74  essed as a float
21750 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
21760 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 6d 61  .</p>..<p>.Forma
21770 74 73 20 32 20 74 68 72 6f 75 67 68 20 31 30 20  ts 2 through 10 
21780 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c  may be optionall
21790 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  y followed by a 
217a0 74 69 6d 65 7a 6f 6e 65 20 69 6e 64 69 63 61 74  timezone indicat
217b0 6f 72 20 6f 66 20 74 68 65 20 66 6f 72 6d 0a 22  or of the form."
217c0 3c 69 3e 26 23 39 31 3b 2b 2d 26 23 39 33 3b 48  <i>&#91;+-&#93;H
217d0 48 3a 4d 4d 3c 2f 69 3e 22 20 6f 72 20 6a 75 73  H:MM</i>" or jus
217e0 74 20 22 3c 69 3e 5a 3c 2f 69 3e 22 2e 20 20 54  t "<i>Z</i>".  T
217f0 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
21800 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 55   functions use U
21810 54 43 20 6f 72 20 22 7a 75 6c 75 22 0a 74 69 6d  TC or "zulu".tim
21820 65 20 69 6e 74 65 72 6e 61 6c 6c 79 2c 20 61 6e  e internally, an
21830 64 20 73 6f 20 74 68 65 20 22 5a 22 20 73 75 66  d so the "Z" suf
21840 66 69 78 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20  fix is a no-op. 
21850 20 41 6e 79 20 6e 6f 6e 2d 7a 65 72 6f 20 22 48   Any non-zero "H
21860 48 3a 4d 4d 22 20 73 75 66 66 69 78 20 69 73 0a  H:MM" suffix is.
21870 73 75 62 74 72 61 63 74 65 64 20 66 72 6f 6d 20  subtracted from 
21880 74 68 65 20 69 6e 64 69 63 61 74 65 64 20 64 61  the indicated da
21890 74 65 20 61 6e 64 20 74 69 6d 65 20 69 6e 20 6f  te and time in o
218a0 72 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65 20  rder to compute 
218b0 7a 75 6c 75 20 74 69 6d 65 2e 0a 46 6f 72 20 65  zulu time..For e
218c0 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 6f 66 20 74  xample, all of t
218d0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 69 6d  he following tim
218e0 65 20 73 74 72 69 6e 67 73 20 61 72 65 20 65 71  e strings are eq
218f0 75 69 76 61 6c 65 6e 74 3a 0a 3c 2f 70 3e 0a 0a  uivalent:.</p>..
21900 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 32 30 31  <blockquote>.201
21910 33 2d 31 30 2d 30 37 20 30 38 3a 32 33 3a 31 39  3-10-07 08:23:19
21920 2e 31 32 30 3c 62 72 3e 0a 32 30 31 33 2d 31 30  .120<br>.2013-10
21930 2d 30 37 54 30 38 3a 32 33 3a 31 39 2e 31 32 30  -07T08:23:19.120
21940 5a 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30 37  Z<br>.2013-10-07
21950 20 30 34 3a 32 33 3a 31 39 2e 31 32 30 2d 30 34   04:23:19.120-04
21960 3a 30 30 3c 62 72 3e 0a 32 34 35 36 35 37 32 2e  :00<br>.2456572.
21970 38 34 39 35 32 36 38 35 0a 3c 2f 62 6c 6f 63 6b  84952685.</block
21980 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 5e 28 49 6e  quote>..<p>.^(In
21990 20 66 6f 72 6d 61 74 73 20 34 2c 20 37 2c 20 61   formats 4, 7, a
219a0 6e 64 20 31 30 2c 20 74 68 65 20 66 72 61 63 74  nd 10, the fract
219b0 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 20 76 61  ional seconds va
219c0 6c 75 65 20 53 53 2e 53 53 53 20 63 61 6e 20 68  lue SS.SSS can h
219d0 61 76 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ave.one or more 
219e0 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77 69 6e 67  digits following
219f0 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
21a00 6e 74 2e 20 20 45 78 61 63 74 6c 79 20 74 68 72  nt.  Exactly thr
21a10 65 65 20 64 69 67 69 74 73 20 61 72 65 0a 73 68  ee digits are.sh
21a20 6f 77 6e 20 69 6e 20 74 68 65 20 65 78 61 6d 70  own in the examp
21a30 6c 65 73 20 62 65 63 61 75 73 65 20 6f 6e 6c 79  les because only
21a40 20 74 68 65 20 66 69 72 73 74 20 74 68 72 65 65   the first three
21a50 20 64 69 67 69 74 73 20 61 72 65 20 73 69 67 6e   digits are sign
21a60 69 66 69 63 61 6e 74 0a 74 6f 20 74 68 65 20 72  ificant.to the r
21a70 65 73 75 6c 74 2c 20 62 75 74 20 74 68 65 20 69  esult, but the i
21a80 6e 70 75 74 20 73 74 72 69 6e 67 20 63 61 6e 20  nput string can 
21a90 68 61 76 65 20 66 65 77 65 72 20 6f 72 20 6d 6f  have fewer or mo
21aa0 72 65 20 74 68 61 6e 20 74 68 72 65 65 20 64 69  re than three di
21ab0 67 69 74 73 0a 61 6e 64 20 74 68 65 20 64 61 74  gits.and the dat
21ac0 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  e/time functions
21ad0 20 77 69 6c 6c 20 73 74 69 6c 6c 20 6f 70 65 72   will still oper
21ae0 61 74 65 20 63 6f 72 72 65 63 74 6c 79 2e 29 5e  ate correctly.)^
21af0 0a 53 69 6d 69 6c 61 72 6c 79 2c 20 66 6f 72 6d  .Similarly, form
21b00 61 74 20 31 32 20 69 73 20 73 68 6f 77 6e 20 77  at 12 is shown w
21b10 69 74 68 20 31 30 20 73 69 67 6e 69 66 69 63 61  ith 10 significa
21b20 6e 74 20 64 69 67 69 74 73 2c 20 62 75 74 20 74  nt digits, but t
21b30 68 65 20 64 61 74 65 2f 74 69 6d 65 0a 66 75 6e  he date/time.fun
21b40 63 74 69 6f 6e 73 20 77 69 6c 6c 20 72 65 61 6c  ctions will real
21b50 6c 79 20 61 63 63 65 70 74 20 61 73 20 6d 61 6e  ly accept as man
21b60 79 20 6f 72 20 61 73 20 66 65 77 20 64 69 67 69  y or as few digi
21b70 74 73 20 61 73 20 61 72 65 20 6e 65 63 65 73 73  ts as are necess
21b80 61 72 79 20 74 6f 0a 72 65 70 72 65 73 65 6e 74  ary to.represent
21b90 20 74 68 65 20 4a 75 6c 69 61 6e 20 64 61 79 20   the Julian day 
21ba0 6e 75 6d 62 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68  number..</p>..<h
21bb0 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33 3e  3>Modifiers</h3>
21bc0 0a 0a 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20 73  ..<p>^The time s
21bd0 74 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f 6c  tring can be fol
21be0 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72  lowed by zero or
21bf0 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 20   more modifiers 
21c00 74 68 61 74 20 0a 61 6c 74 65 72 20 64 61 74 65  that .alter date
21c10 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 45   and/or time. ^E
21c20 61 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20  ach modifier.is 
21c30 61 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  a transformation
21c40 20 74 68 61 74 20 69 73 20 61 70 70 6c 69 65 64   that is applied
21c50 20 74 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c   to the time val
21c60 75 65 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a  ue to its left..
21c70 5e 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61  ^Modifiers are a
21c80 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74  pplied from left
21c90 20 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72   to right; order
21ca0 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e   is important..^
21cb0 28 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d  (The available m
21cc0 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 73 20  odifiers are as 
21cd0 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f  follows.</p>..<o
21ce0 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73  l>.<li> NNN days
21cf0 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a  .<li> NNN hours.
21d00 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73  <li> NNN minutes
21d10 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73  .<li> NNN.NNNN s
21d20 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20  econds.<li> NNN 
21d30 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20  months.<li> NNN 
21d40 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74  years.<li> start
21d50 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73   of month.<li> s
21d60 74 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69  tart of year.<li
21d70 3e 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c  > start of day.<
21d80 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c  li> weekday N.<l
21d90 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69  i> unixepoch.<li
21da0 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e  > localtime.<li>
21db0 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c   utc .</ol>)^..<
21dc0 70 3e 5e 54 68 65 20 66 69 72 73 74 20 73 69 78  p>^The first six
21dd0 20 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74 68   modifiers (1 th
21de0 72 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79  rough 6) .simply
21df0 20 61 64 64 20 74 68 65 20 73 70 65 63 69 66 69   add the specifi
21e00 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d  ed amount of tim
21e10 65 20 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e  e to the date an
21e20 64 20 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65  d time .specifie
21e30 64 20 62 79 20 74 68 65 20 70 72 65 63 65 64 69  d by the precedi
21e40 6e 67 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e  ng timestring an
21e50 64 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 54 68  d modifiers..^Th
21e60 65 20 27 73 27 20 63 68 61 72 61 63 74 65 72 20  e 's' character 
21e70 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
21e80 65 20 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73  e modifier names
21e90 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 4e   is optional..^N
21ea0 6f 74 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d  ote that "&plusm
21eb0 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f  n;NNN months" wo
21ec0 72 6b 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67  rks by rendering
21ed0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61   the original da
21ee0 74 65 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59  te into.the YYYY
21ef0 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61  -MM-DD format, a
21f00 64 64 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d  dding the &plusm
21f10 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20  n;NNN to the MM 
21f20 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65  month value, the
21f30 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68  n.normalizing th
21f40 65 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73  e result.  ^Thus
21f50 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  , for example, t
21f60 68 65 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d  he data 2001-03-
21f70 33 31 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27  31 modified.by '
21f80 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61  +1 month' initia
21f90 6c 6c 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d  lly yields 2001-
21fa0 30 34 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c  04-31, but April
21fb0 20 6f 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79   only has 30 day
21fc0 73 0a 73 6f 20 74 68 65 20 64 61 74 65 20 69 73  s.so the date is
21fd0 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32   normalized to 2
21fe0 30 30 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73  001-05-01.  ^A s
21ff0 69 6d 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63  imilar effect oc
22000 63 75 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72  curs when.the or
22010 69 67 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46  iginal date is F
22020 65 62 72 75 61 72 79 20 32 39 20 6f 66 20 61 20  ebruary 29 of a 
22030 6c 65 61 70 79 65 61 72 20 61 6e 64 20 74 68 65  leapyear and the
22040 20 6d 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c   modifier is.&pl
22050 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65  usmn;N years whe
22060 72 65 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75  re N is not a mu
22070 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c  ltiple of four.<
22080 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74  /p>..<p>^The "st
22090 61 72 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72  art of" modifier
220a0 73 20 28 37 20 74 68 72 6f 75 67 68 20 39 29 20  s (7 through 9) 
220b0 73 68 69 66 74 20 74 68 65 20 64 61 74 65 20 62  shift the date b
220c0 61 63 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65  ackwards .to the
220d0 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
220e0 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c  e current month,
220f0 20 79 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70   year or day.</p
22100 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 22 77 65 65  >..<p>^(The "wee
22110 6b 64 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61  kday" modifier a
22120 64 76 61 6e 63 65 73 20 74 68 65 20 64 61 74 65  dvances the date
22130 20 66 6f 72 77 61 72 64 2c 20 69 66 20 6e 65 63   forward, if nec
22140 65 73 73 61 72 79 2c 0a 74 6f 20 74 68 65 20 6e  essary,.to the n
22150 65 78 74 20 64 61 74 65 20 77 68 65 72 65 20 74  ext date where t
22160 68 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65  he weekday numbe
22170 72 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69  r is N. Sunday i
22180 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31  s 0, Monday is 1
22190 2c 0a 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 29  ,.and so forth.)
221a0 5e 0a 5e 49 66 20 74 68 65 20 64 61 74 65 20 69  ^.^If the date i
221b0 73 20 61 6c 72 65 61 64 79 20 6f 6e 20 74 68 65  s already on the
221c0 20 64 65 73 69 72 65 64 20 77 65 65 6b 64 61 79   desired weekday
221d0 2c 20 74 68 65 20 22 77 65 65 6b 64 61 79 22 20  , the "weekday" 
221e0 6d 6f 64 69 66 69 65 72 0a 6c 65 61 76 65 73 20  modifier.leaves 
221f0 74 68 65 20 64 61 74 65 20 75 6e 63 68 61 6e 67  the date unchang
22200 65 64 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ed.  </p>..<p>^T
22210 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d  he "unixepoch" m
22220 6f 64 69 66 69 65 72 20 28 31 31 29 20 6f 6e 6c  odifier (11) onl
22230 79 20 77 6f 72 6b 73 20 69 66 20 69 74 20 69 6d  y works if it im
22240 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
22250 73 20 0a 61 20 74 69 6d 65 73 74 72 69 6e 67 20  s .a timestring 
22260 69 6e 20 74 68 65 20 44 44 44 44 44 44 44 44 44  in the DDDDDDDDD
22270 44 20 66 6f 72 6d 61 74 2e 20 0a 5e 54 68 69 73  D format. .^This
22280 20 6d 6f 64 69 66 69 65 72 20 63 61 75 73 65 73   modifier causes
22290 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44 20   the DDDDDDDDDD 
222a0 74 6f 20 62 65 20 69 6e 74 65 72 70 72 65 74 65  to be interprete
222b0 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c 69  d not .as a Juli
222c0 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20 61 73  an day number as
222d0 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75   it normally wou
222e0 6c 64 20 62 65 2c 20 62 75 74 20 61 73 0a 5b 68  ld be, but as.[h
222f0 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
22300 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78  ia.org/wiki/Unix
22310 5f 74 69 6d 65 20 7c 20 55 6e 69 78 20 54 69 6d  _time | Unix Tim
22320 65 5d 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65 72  e] - the .number
22330 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63   of seconds sinc
22340 65 20 31 39 37 30 2e 20 20 49 66 20 74 68 65 20  e 1970.  If the 
22350 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69  "unixepoch" modi
22360 66 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66 6f  fier does not.fo
22370 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74 72 69 6e  llow a timestrin
22380 67 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 44 44  g of the form DD
22390 44 44 44 44 44 44 44 44 20 77 68 69 63 68 20 65  DDDDDDDD which e
223a0 78 70 72 65 73 73 65 73 20 74 68 65 20 6e 75 6d  xpresses the num
223b0 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20 73  ber.of seconds s
223c0 69 6e 63 65 20 31 39 37 30 20 6f 72 20 69 66 20  ince 1970 or if 
223d0 6f 74 68 65 72 20 6d 6f 64 69 66 69 65 72 73 0a  other modifiers.
223e0 73 65 70 61 72 61 74 65 20 74 68 65 20 22 75 6e  separate the "un
223f0 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65  ixepoch" modifie
22400 72 20 66 72 6f 6d 20 70 72 69 6f 72 20 44 44 44  r from prior DDD
22410 44 44 44 44 44 44 44 20 74 68 65 6e 20 74 68 65  DDDDDDD then the
22420 0a 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64  .behavior is und
22430 65 66 69 6e 65 64 2e 0a 46 6f 72 20 53 51 4c 69  efined..For SQLi
22440 74 65 20 76 65 72 73 69 6f 6e 73 20 62 65 66 6f  te versions befo
22450 72 65 20 33 2e 31 36 2e 30 20 28 5b 64 61 74 65  re 3.16.0 ([date
22460 6f 66 3a 33 2e 31 36 2e 30 5d 29 2c 20 0a 74 68  of:3.16.0]), .th
22470 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
22480 64 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72 6b  difier only work
22490 73 20 66 6f 72 0a 64 61 74 65 73 20 62 65 74 77  s for.dates betw
224a0 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30  een 0000-01-01 0
224b0 30 3a 30 30 3a 30 30 20 61 6e 64 20 35 33 35 32  0:00:00 and 5352
224c0 2d 31 31 2d 30 31 20 31 30 3a 35 32 3a 34 37 20  -11-01 10:52:47 
224d0 28 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20 2d  (unix times.of -
224e0 36 32 31 36 37 32 31 39 32 30 30 20 74 68 72 6f  62167219200 thro
224f0 75 67 68 20 31 30 36 37 35 31 39 39 31 31 36 37  ugh 106751991167
22500 29 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ).</p>..<tcl>hd_
22510 66 72 61 67 6d 65 6e 74 20 6c 6f 63 61 6c 74 69  fragment localti
22520 6d 65 20 7b 6c 6f 63 61 6c 74 69 6d 65 20 6d 6f  me {localtime mo
22530 64 69 66 69 65 72 7d 20 7b 27 75 74 63 27 20 6d  difier} {'utc' m
22540 6f 64 69 66 69 65 72 7d 3c 2f 74 63 6c 3e 0a 3c  odifier}</tcl>.<
22550 70 3e 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d  p>^The "localtim
22560 65 22 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29  e" modifier (12)
22570 20 61 73 73 75 6d 65 73 20 74 68 65 20 74 69 6d   assumes the tim
22580 65 20 73 74 72 69 6e 67 20 74 6f 20 69 74 73 20  e string to its 
22590 6c 65 66 74 20 69 73 20 69 6e 0a 55 6e 69 76 65  left is in.Unive
225a0 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64  rsal Coordinated
225b0 20 54 69 6d 65 20 28 55 54 43 29 20 61 6e 64 20   Time (UTC) and 
225c0 61 64 6a 75 73 74 73 20 74 68 65 20 74 69 6d 65  adjusts the time
225d0 0a 73 74 72 69 6e 67 20 73 6f 20 74 68 61 74 20  .string so that 
225e0 69 74 20 64 69 73 70 6c 61 79 73 20 6c 6f 63 61  it displays loca
225f0 6c 74 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61  ltime.  If "loca
22600 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61  ltime".follows a
22610 20 74 69 6d 65 20 74 68 61 74 20 69 73 20 6e 6f   time that is no
22620 74 20 55 54 43 2c 20 74 68 65 6e 20 74 68 65 20  t UTC, then the 
22630 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65  behavior is unde
22640 66 69 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75 74  fined..^(The "ut
22650 63 22 20 6d 6f 64 69 66 69 65 72 20 69 73 20 74  c" modifier is t
22660 68 65 20 6f 70 70 6f 73 69 74 65 20 6f 66 20 22  he opposite of "
22670 6c 6f 63 61 6c 74 69 6d 65 22 2e 20 20 0a 22 75  localtime".  ."u
22680 74 63 22 20 61 73 73 75 6d 65 73 20 74 68 61 74  tc" assumes that
22690 20 74 68 65 20 73 74 72 69 6e 67 0a 74 6f 20 69   the string.to i
226a0 74 73 20 6c 65 66 74 20 69 73 20 69 6e 20 74 68  ts left is in th
226b0 65 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65  e local timezone
226c0 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 61   and adjusts tha
226d0 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65 20 69  t string to be i
226e0 6e 20 55 54 43 2e 29 5e 0a 49 66 20 74 68 65 20  n UTC.)^.If the 
226f0 70 72 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20  prior string is 
22700 6e 6f 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65  not in localtime
22710 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
22720 74 20 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e  t of "utc" is.un
22730 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68  defined.</p>..<h
22740 33 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a  3>Examples</h3>.
22750 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
22760 65 20 63 75 72 72 65 6e 74 20 64 61 74 65 2e 3c  e current date.<
22770 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
22780 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77  SELECT date('now
22790 27 29 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  ');</blockquote>
227a0 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
227b0 20 74 68 65 20 6c 61 73 74 20 64 61 79 20 6f 66   the last day of
227c0 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e   the current mon
227d0 74 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  th.</p>..<blockq
227e0 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65  uote>SELECT date
227f0 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66  ('now','start of
22800 20 6d 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74   month','+1 mont
22810 68 27 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f  h','-1 day');.</
22820 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
22830 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
22840 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69  date and time gi
22850 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73  ven a unix times
22860 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36 2e  tamp 1092941466.
22870 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
22880 65 3e 0a 20 20 20 20 53 45 4c 45 43 54 20 64 61  e>.    SELECT da
22890 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36  tetime(109294146
228a0 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 29 3b  6, 'unixepoch');
228b0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
228c0 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
228d0 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
228e0 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69   given a unix ti
228f0 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34 31 34  mestamp 10929414
22900 36 36 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73  66, and .compens
22910 61 74 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63  ate for your loc
22920 61 6c 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e  al timezone.</p>
22930 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
22940 20 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65   SELECT datetime
22950 28 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e  (1092941466, 'un
22960 69 78 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c  ixepoch', 'local
22970 74 69 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  time');.</blockq
22980 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
22990 6d 70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e  mpute the curren
229a0 74 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70  t unix timestamp
229b0 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
229c0 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72  te>.  SELECT str
229d0 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27  ftime('%s','now'
229e0 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
229f0 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
22a00 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
22a10 61 79 73 20 73 69 6e 63 65 20 74 68 65 20 73 69  ays since the si
22a20 67 6e 69 6e 67 20 6f 66 20 74 68 65 20 55 53 20  gning of the US 
22a30 44 65 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49  Declaration.of I
22a40 6e 64 65 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e  ndependence.</p>
22a50 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
22a60 20 53 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61   SELECT julianda
22a70 79 28 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61  y('now') - julia
22a80 6e 64 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34  nday('1776-07-04
22a90 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
22aa0 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
22ab0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
22ac0 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20  seconds since a 
22ad0 70 61 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e  particular momen
22ae0 74 20 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a  t in 2004:</p>..
22af0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
22b00 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27  ELECT strftime('
22b10 25 73 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72  %s','now') - str
22b20 66 74 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34  ftime('%s','2004
22b30 2d 30 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27  -01-01 02:34:56'
22b40 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
22b50 29 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74  )^..^(<p>.Comput
22b60 65 20 74 68 65 20 64 61 74 65 20 6f 66 20 74 68  e the date of th
22b70 65 20 66 69 72 73 74 20 54 75 65 73 64 61 79 20  e first Tuesday 
22b80 69 6e 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74  in October.for t
22b90 68 65 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e  he current year.
22ba0 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
22bb0 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74  te>.  SELECT dat
22bc0 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f  e('now','start o
22bd0 66 20 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74  f year','+9 mont
22be0 68 73 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29  hs','weekday 2')
22bf0 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
22c00 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
22c10 74 68 65 20 74 69 6d 65 20 73 69 6e 63 65 20 74  the time since t
22c20 68 65 20 75 6e 69 78 20 65 70 6f 63 68 20 69 6e  he unix epoch in
22c30 20 73 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20   seconds .(like 
22c40 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e  strftime('%s','n
22c50 6f 77 27 29 20 65 78 63 65 70 74 20 69 6e 63 6c  ow') except incl
22c60 75 64 65 73 20 66 72 61 63 74 69 6f 6e 61 6c 20  udes fractional 
22c70 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  part):</p>..<blo
22c80 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
22c90 54 20 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f  T (julianday('no
22ca0 77 27 29 20 2d 20 32 34 34 30 35 38 37 2e 35 29  w') - 2440587.5)
22cb0 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63  *86400.0;.</bloc
22cc0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43  kquote>)^..<h3>C
22cd0 61 76 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c  aveats And Bugs<
22ce0 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d  /h3>..<p>The com
22cf0 70 75 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61  putation of loca
22d00 6c 20 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68  l time depends h
22d10 65 61 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68  eavily on the wh
22d20 69 6d 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61  im .of politicia
22d30 6e 73 20 61 6e 64 20 69 73 20 74 68 75 73 20 64  ns and is thus d
22d40 69 66 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20  ifficult to get 
22d50 63 6f 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c  correct for .all
22d60 20 6c 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68   locales. ^In th
22d70 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  is implementatio
22d80 6e 2c 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  n, the standard 
22d90 43 20 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74  C library .funct
22da0 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28  ion localtime_r(
22db0 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 73 73  ) is used to ass
22dc0 69 73 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75  ist in the calcu
22dd0 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c  lation of .local
22de0 20 74 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c   time.  ^(The .l
22df0 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66  ocaltime_r() C f
22e00 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79  unction normally
22e10 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
22e20 79 65 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39  years.between 19
22e30 37 30 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72  70 and 2037. For
22e40 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74   dates outside t
22e50 68 69 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74  his range, SQLit
22e60 65 20 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d  e .attempts to m
22e70 61 70 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f  ap the year into
22e80 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79   an equivalent y
22e90 65 61 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73  ear within .this
22ea0 20 72 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63   range, do the c
22eb0 61 6c 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e  alculation, then
22ec0 20 6d 61 70 20 74 68 65 20 79 65 61 72 20 62 61   map the year ba
22ed0 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e  ck.)^</p>...<p>^
22ee0 28 54 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73  (These functions
22ef0 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64   only work for d
22f00 61 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30  ates between 000
22f10 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30  0-01-01 00:00:00
22f20 0a 61 6e 64 20 39 39 39 39 2d 31 32 2d 33 31 20  .and 9999-12-31 
22f30 32 33 3a 35 39 3a 35 39 20 28 6a 75 6c 69 61 6e  23:59:59 (julian
22f40 20 64 61 79 20 6e 75 6d 62 65 72 73 20 31 37 32   day numbers 172
22f50 31 30 35 39 2e 35 20 74 68 72 6f 75 67 68 20 35  1059.5 through 5
22f60 33 37 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72  373484.5).)^.For
22f70 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74   dates outside t
22f80 68 61 74 20 72 61 6e 67 65 2c 20 74 68 65 20 72  hat range, the r
22f90 65 73 75 6c 74 73 20 6f 66 20 74 68 65 73 65 0a  esults of these.
22fa0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 75 6e  functions are un
22fb0 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  defined.</p>..<p
22fc0 3e 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f  >Non-Vista Windo
22fd0 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c  ws platforms onl
22fe0 79 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65  y support one se
22ff0 74 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20  t of DST rules. 
23000 0a 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70  .Vista only supp
23010 6f 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66  orts two. Theref
23020 6f 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c  ore, on these pl
23030 61 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72  atforms, .histor
23040 69 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61  ical DST calcula
23050 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e  tions will be in
23060 63 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78  correct. .For ex
23070 61 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53  ample, in the US
23080 2c 20 69 6e 20 32 30 30 37 20 74 68 65 20 44 53  , in 2007 the DS
23090 54 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e  T rules changed.
230a0 20 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64   .Non-Vista Wind
230b0 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70  ows platforms ap
230c0 70 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30 37  ply the new 2007
230d0 20 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61   DST rules .to a
230e0 6c 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61 72  ll previous year
230f0 73 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61  s as well. Vista
23100 20 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62   does somewhat b
23110 65 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65  etter.getting re
23120 73 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61  sults correct ba
23130 63 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e  ck to 1986, when
23140 20 74 68 65 20 72 75 6c 65 73 20 77 65 72 65 20   the rules were 
23150 61 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70  also changed.</p
23160 3e 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e  >..<p>All intern
23170 61 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20  al computations 
23180 61 73 73 75 6d 65 20 74 68 65 20 0a 5b 68 74 74  assume the .[htt
23190 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
231a0 2e 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72  .org/wiki/Gregor
231b0 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47  ian_calendar | G
231c0 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61  regorian calenda
231d0 72 5d 0a 73 79 73 74 65 6d 2e 20 20 49 74 20 69  r].system.  It i
231e0 73 20 61 6c 73 6f 20 61 73 73 75 6d 65 64 20 74  s also assumed t
231f0 68 61 74 20 65 76 65 72 79 0a 64 61 79 20 69 73  hat every.day is
23200 20 65 78 61 63 74 6c 79 20 38 36 34 30 30 20 73   exactly 86400 s
23210 65 63 6f 6e 64 73 20 69 6e 20 64 75 72 61 74 69  econds in durati
23220 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  on.</p>..<tcl>.#
23230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23270 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
23280 63 74 69 6f 6e 20 7b 41 67 67 72 65 67 61 74 65  ction {Aggregate
23290 20 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66   Functions} aggf
232a0 75 6e 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 75  unc {*aggfunc}.u
232b0 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
232c0 20 63 6f 72 65 66 75 6e 63 73 65 74 0a 0a 66 75   corefuncset..fu
232d0 6e 63 64 65 66 20 7b 61 76 67 28 58 29 7d 20 7b  ncdef {avg(X)} {
232e0 2a 61 76 67 20 7b 61 76 67 28 29 20 61 67 67 72  *avg {avg() aggr
232f0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d  egate function}}
23300 20 7b 0a 20 20 5e 54 68 65 20 61 76 67 28 29 20   {.  ^The avg() 
23310 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72  function.  retur
23320 6e 73 20 74 68 65 20 61 76 65 72 61 67 65 20 76  ns the average v
23330 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d  alue of all non-
23340 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69  NULL <i>X</i> wi
23350 74 68 69 6e 20 61 0a 20 20 67 72 6f 75 70 2e 20  thin a.  group. 
23360 20 5e 53 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f   ^String and BLO
23370 42 20 76 61 6c 75 65 73 20 74 68 61 74 20 64 6f  B values that do
23380 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e   not look like n
23390 75 6d 62 65 72 73 20 61 72 65 0a 20 20 69 6e 74  umbers are.  int
233a0 65 72 70 72 65 74 65 64 20 61 73 20 30 2e 0a 20  erpreted as 0.. 
233b0 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
233c0 61 76 67 28 29 20 69 73 20 61 6c 77 61 79 73 20  avg() is always 
233d0 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
233e0 20 76 61 6c 75 65 20 61 73 20 6c 6f 6e 67 20 61   value as long a
233f0 73 0a 20 20 61 74 20 74 68 65 72 65 20 69 73 20  s.  at there is 
23400 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6e 6f 6e  at least one non
23410 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 65 76 65 6e  -NULL input even
23420 20 69 66 20 61 6c 6c 0a 20 20 69 6e 70 75 74 73   if all.  inputs
23430 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 20 20   are integers.  
23440 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61  ^The result of a
23450 76 67 28 29 20 69 73 20 4e 55 4c 4c 20 69 66 20  vg() is NULL if 
23460 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 20 20 74 68  and only if.  th
23470 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e  ere are no non-N
23480 55 4c 4c 20 69 6e 70 75 74 73 2e 20 20 0a 7d 0a  ULL inputs.  .}.
23490 0a 66 75 6e 63 64 65 66 20 7b 63 6f 75 6e 74 28  .funcdef {count(
234a0 58 29 20 63 6f 75 6e 74 28 2a 29 7d 20 7b 2a 63  X) count(*)} {*c
234b0 6f 75 6e 74 20 7b 63 6f 75 6e 74 28 29 20 61 67  ount {count() ag
234c0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
234d0 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f 75 6e  }} {.  ^The coun
234e0 74 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  t(X) function re
234f0 74 75 72 6e 73 0a 20 20 61 20 63 6f 75 6e 74 20  turns.  a count 
23500 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  of the number of
23510 20 74 69 6d 65 73 0a 20 20 74 68 61 74 20 3c 69   times.  that <i
23520 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55  >X</i> is not NU
23530 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e 20 20  LL in a group.  
23540 5e 54 68 65 20 63 6f 75 6e 74 28 2a 29 20 66 75  ^The count(*) fu
23550 6e 63 74 69 6f 6e 0a 20 20 28 77 69 74 68 20 6e  nction.  (with n
23560 6f 20 61 72 67 75 6d 65 6e 74 73 29 20 72 65 74  o arguments) ret
23570 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  urns the total n
23580 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
23590 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66   the group..}..f
235a0 75 6e 63 64 65 66 20 7b 67 72 6f 75 70 5f 63 6f  uncdef {group_co
235b0 6e 63 61 74 28 58 29 20 67 72 6f 75 70 5f 63 6f  ncat(X) group_co
235c0 6e 63 61 74 28 58 2c 59 29 7d 20 7b 0a 20 20 2a  ncat(X,Y)} {.  *
235d0 67 72 6f 75 70 5f 63 6f 6e 63 61 74 20 7b 67 72  group_concat {gr
235e0 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 61 67 67  oup_concat() agg
235f0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
23600 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 67 72 6f 75  .} {.  ^The grou
23610 70 5f 63 6f 6e 63 61 74 28 29 20 66 75 6e 63 74  p_concat() funct
23620 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20 61 20  ion returns.  a 
23630 73 74 72 69 6e 67 20 77 68 69 63 68 20 69 73 20  string which is 
23640 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f  the concatenatio
23650 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e  n of.  all non-N
23660 55 4c 4c 20 76 61 6c 75 65 73 20 6f 66 20 3c 69  ULL values of <i
23670 3e 58 3c 2f 69 3e 2e 20 20 5e 49 66 20 70 61 72  >X</i>.  ^If par
23680 61 6d 65 74 65 72 20 3c 69 3e 59 3c 2f 69 3e 20  ameter <i>Y</i> 
23690 69 73 20 70 72 65 73 65 6e 74 20 74 68 65 6e 0a  is present then.
236a0 20 20 69 74 20 69 73 20 75 73 65 64 20 61 73 20    it is used as 
236b0 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20  the separator.  
236c0 62 65 74 77 65 65 6e 20 69 6e 73 74 61 6e 63 65  between instance
236d0 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20  s of <i>X</i>.  
236e0 5e 41 20 63 6f 6d 6d 61 20 28 22 2c 22 29 20 69  ^A comma (",") i
236f0 73 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65  s used as the se
23700 70 61 72 61 74 6f 72 0a 20 20 69 66 20 3c 69 3e  parator.  if <i>
23710 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74 74 65 64  Y</i> is omitted
23720 2e 20 20 54 68 65 20 6f 72 64 65 72 20 6f 66 20  .  The order of 
23730 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64  the concatenated
23740 20 65 6c 65 6d 65 6e 74 73 20 69 73 0a 20 20 61   elements is.  a
23750 72 62 69 74 72 61 72 79 2e 0a 7d 0a 0a 66 75 6e  rbitrary..}..fun
23760 63 64 65 66 20 7b 6d 61 78 28 58 29 7d 20 7b 2a  cdef {max(X)} {*
23770 6d 61 78 41 67 67 46 75 6e 63 20 2a 61 67 67 5f  maxAggFunc *agg_
23780 6d 61 78 20 7b 6d 61 78 28 29 20 61 67 67 72 65  max {max() aggre
23790 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20  gate function}} 
237a0 7b 0a 20 20 5e 54 68 65 20 6d 61 78 28 29 20 61  {.  ^The max() a
237b0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
237c0 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65 20  n.  returns the 
237d0 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66  maximum value of
237e0 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74   all values in t
237f0 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65  he group..  ^The
23800 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 69   maximum value i
23810 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74  s the value that
23820 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e   would be return
23830 65 64 20 6c 61 73 74 20 69 6e 20 61 6e 0a 20 20  ed last in an.  
23840 4f 52 44 45 52 20 42 59 20 6f 6e 20 74 68 65 20  ORDER BY on the 
23850 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 41  same column.  ^A
23860 67 67 72 65 67 61 74 65 20 6d 61 78 28 29 20 72  ggregate max() r
23870 65 74 75 72 6e 73 20 4e 55 4c 4c 20 0a 20 20 69  eturns NULL .  i
23880 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68  f and only if th
23890 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e  ere are no non-N
238a0 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  ULL values in th
238b0 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63  e group..}..func
238c0 64 65 66 20 7b 6d 69 6e 28 58 29 7d 20 7b 2a 6d  def {min(X)} {*m
238d0 69 6e 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d  inAggFunc *agg_m
238e0 69 6e 20 7b 6d 69 6e 28 29 20 61 67 67 72 65 67  in {min() aggreg
238f0 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  ate function}} {
23900 0a 20 20 5e 54 68 65 20 6d 69 6e 28 29 20 61 67  .  ^The min() ag
23910 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
23920 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d  .  returns the m
23930 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20  inimum non-NULL 
23940 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c  value of all val
23950 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
23960 2e 0a 20 20 5e 54 68 65 20 6d 69 6e 69 6d 75 6d  ..  ^The minimum
23970 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 66 69   value is the fi
23980 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  rst non-NULL val
23990 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 61 70  ue that would ap
239a0 70 65 61 72 0a 20 20 69 6e 20 61 6e 20 4f 52 44  pear.  in an ORD
239b0 45 52 20 42 59 20 6f 66 20 74 68 65 20 63 6f 6c  ER BY of the col
239c0 75 6d 6e 2e 0a 20 20 5e 41 67 67 72 65 67 61 74  umn..  ^Aggregat
239d0 65 20 6d 69 6e 28 29 20 72 65 74 75 72 6e 73 20  e min() returns 
239e0 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79  NULL if and only
239f0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
23a00 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75   non-NULL.  valu
23a10 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
23a20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 6d  .}..funcdef {sum
23a30 28 58 29 20 74 6f 74 61 6c 28 58 29 7d 20 7b 0a  (X) total(X)} {.
23a40 20 20 2a 73 75 6d 46 75 6e 63 20 2a 73 75 6d 20    *sumFunc *sum 
23a50 2a 74 6f 74 61 6c 0a 20 20 7b 73 75 6d 28 29 20  *total.  {sum() 
23a60 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
23a70 6f 6e 7d 0a 20 20 7b 74 6f 74 61 6c 28 29 20 61  on}.  {total() a
23a80 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
23a90 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75  n}.} {.  ^The su
23aa0 6d 28 29 20 61 6e 64 20 74 6f 74 61 6c 28 29 20  m() and total() 
23ab0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
23ac0 6f 6e 73 0a 20 20 72 65 74 75 72 6e 20 73 75 6d  ons.  return sum
23ad0 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c   of all non-NULL
23ae0 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
23af0 72 6f 75 70 2e 0a 20 20 5e 49 66 20 74 68 65 72  roup..  ^If ther
23b00 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
23b10 4c 20 69 6e 70 75 74 20 72 6f 77 73 20 74 68 65  L input rows the
23b20 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73 0a  n sum() returns.
23b30 20 20 4e 55 4c 4c 20 62 75 74 20 74 6f 74 61 6c    NULL but total
23b40 28 29 20 72 65 74 75 72 6e 73 20 30 2e 30 2e 0a  () returns 0.0..
23b50 20 20 4e 55 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f    NULL is not no
23b60 72 6d 61 6c 6c 79 20 61 20 68 65 6c 70 66 75 6c  rmally a helpful
23b70 20 72 65 73 75 6c 74 20 66 6f 72 20 74 68 65 20   result for the 
23b80 73 75 6d 20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20  sum of no rows. 
23b90 20 62 75 74 20 74 68 65 20 53 51 4c 20 73 74 61   but the SQL sta
23ba0 6e 64 61 72 64 20 72 65 71 75 69 72 65 73 20 69  ndard requires i
23bb0 74 20 61 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72  t and most other
23bc0 0a 20 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  .  SQL database 
23bd0 65 6e 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e  engines implemen
23be0 74 20 73 75 6d 28 29 20 74 68 61 74 20 77 61 79  t sum() that way
23bf0 20 73 6f 20 53 51 4c 69 74 65 20 64 6f 65 73 20   so SQLite does 
23c00 69 74 20 69 6e 20 74 68 65 0a 20 20 73 61 6d 65  it in the.  same
23c10 20 77 61 79 20 69 6e 20 6f 72 64 65 72 20 74 6f   way in order to
23c20 20 62 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e 20   be compatible. 
23c30 20 20 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61    The non-standa
23c40 72 64 20 74 6f 74 61 6c 28 29 20 66 75 6e 63 74  rd total() funct
23c50 69 6f 6e 0a 20 20 69 73 20 70 72 6f 76 69 64 65  ion.  is provide
23c60 64 20 61 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e  d as a convenien
23c70 74 20 77 61 79 20 74 6f 20 77 6f 72 6b 20 61 72  t way to work ar
23c80 6f 75 6e 64 20 74 68 69 73 20 64 65 73 69 67 6e  ound this design
23c90 20 70 72 6f 62 6c 65 6d 0a 20 20 69 6e 20 74 68   problem.  in th
23ca0 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c  e SQL language.<
23cb0 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 72  /p>..  <p>^The r
23cc0 65 73 75 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29  esult of total()
23cd0 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f   is always a flo
23ce0 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
23cf0 65 2e 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74  e..  ^The result
23d00 20 6f 66 20 73 75 6d 28 29 20 69 73 20 61 6e 20   of sum() is an 
23d10 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66  integer value if
23d20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e   all non-NULL in
23d30 70 75 74 73 20 61 72 65 20 69 6e 74 65 67 65 72  puts are integer
23d40 73 2e 0a 20 20 5e 49 66 20 61 6e 79 20 69 6e 70  s..  ^If any inp
23d50 75 74 20 74 6f 20 73 75 6d 28 29 20 69 73 20 6e  ut to sum() is n
23d60 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
23d70 72 20 6f 72 20 61 20 4e 55 4c 4c 0a 20 20 74 68  r or a NULL.  th
23d80 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73  en sum() returns
23d90 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
23da0 74 20 76 61 6c 75 65 0a 20 20 77 68 69 63 68 20  t value.  which 
23db0 6d 69 67 68 74 20 62 65 20 61 6e 20 61 70 70 72  might be an appr
23dc0 6f 78 69 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65  oximation to the
23dd0 20 74 72 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a   true sum.</p>..
23de0 20 20 3c 70 3e 5e 53 75 6d 28 29 20 77 69 6c 6c    <p>^Sum() will
23df0 20 74 68 72 6f 77 20 61 6e 20 22 69 6e 74 65 67   throw an "integ
23e00 65 72 20 6f 76 65 72 66 6c 6f 77 22 20 65 78 63  er overflow" exc
23e10 65 70 74 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e  eption if all in
23e20 70 75 74 73 0a 20 20 61 72 65 20 69 6e 74 65 67  puts.  are integ
23e30 65 72 73 20 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e  ers or NULL.  an
23e40 64 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65  d an integer ove
23e50 72 66 6c 6f 77 20 6f 63 63 75 72 73 20 61 74 20  rflow occurs at 
23e60 61 6e 79 20 70 6f 69 6e 74 20 64 75 72 69 6e 67  any point during
23e70 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e   the computation
23e80 2e 0a 20 20 5e 54 6f 74 61 6c 28 29 20 6e 65 76  ..  ^Total() nev
23e90 65 72 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74  er throws an int
23ea0 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 2e 0a 7d  eger overflow..}
23eb0 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e 0a 54 68  .</tcl>...<p>.Th
23ec0 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
23ed0 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f  tions shown belo
23ee0 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  w are available 
23ef0 62 79 20 64 65 66 61 75 6c 74 2e 20 20 41 64 64  by default.  Add
23f00 69 74 69 6f 6e 61 6c 0a 61 67 67 72 65 67 61 74  itional.aggregat
23f10 65 20 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74  e functions writ
23f20 74 65 6e 20 69 6e 20 43 20 6d 61 79 20 62 65 20  ten in C may be 
23f30 61 64 64 65 64 20 75 73 69 6e 67 20 74 68 65 20  added using the 
23f40 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  .[sqlite3_create
23f50 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e  _function()]</a>
23f60 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e  .API.</p>..<p>.^
23f70 49 6e 20 61 6e 79 20 61 67 67 72 65 67 61 74 65  In any aggregate
23f80 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 74   function that t
23f90 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20 61 72  akes a single ar
23fa0 67 75 6d 65 6e 74 2c 20 74 68 61 74 20 61 72 67  gument, that arg
23fb0 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20 70 72 65  ument.can be pre
23fc0 63 65 64 65 64 20 62 79 20 74 68 65 20 6b 65 79  ceded by the key
23fd0 77 6f 72 64 20 44 49 53 54 49 4e 43 54 2e 20 20  word DISTINCT.  
23fe0 5e 49 6e 20 73 75 63 68 20 63 61 73 65 73 2c 20  ^In such cases, 
23ff0 64 75 70 6c 69 63 61 74 65 0a 65 6c 65 6d 65 6e  duplicate.elemen
24000 74 73 20 61 72 65 20 66 69 6c 74 65 72 65 64 20  ts are filtered 
24010 62 65 66 6f 72 65 20 62 65 69 6e 67 20 70 61 73  before being pas
24020 73 65 64 20 69 6e 74 6f 20 74 68 65 20 61 67 67  sed into the agg
24030 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e  regate function.
24040 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  .^For example, t
24050 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 63 6f 75  he function "cou
24060 6e 74 28 64 69 73 74 69 6e 63 74 20 58 29 22 20  nt(distinct X)" 
24070 77 69 6c 6c 20 72 65 74 75 72 6e 20 74 68 65 20  will return the 
24080 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73 74 69 6e  number.of distin
24090 63 74 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c  ct values of col
240a0 75 6d 6e 20 58 20 69 6e 73 74 65 61 64 20 6f 66  umn X instead of
240b0 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
240c0 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61  r of non-null.va
240d0 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d 6e 20 58  lues in column X
240e0 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 73 65  ..</p>..<tcl>.se
240f0 74 20 6c 78 20 7b 7d 0a 66 6f 72 65 61 63 68 20  t lx {}.foreach 
24100 62 61 73 65 73 79 6e 74 61 78 20 5b 61 72 72 61  basesyntax [arra
24110 79 20 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e 63  y names corefunc
24120 73 65 74 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68  set] {.  foreach
24130 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64   {syntax keyword
24140 73 20 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e  s desc} $corefun
24150 63 73 65 74 28 24 62 61 73 65 73 79 6e 74 61 78  cset($basesyntax
24160 29 20 62 72 65 61 6b 0a 20 20 72 65 67 65 78 70  ) break.  regexp
24170 20 7b 5e 5b 61 2d 7a 5f 5d 2b 7d 20 24 62 61 73   {^[a-z_]+} $bas
24180 65 73 79 6e 74 61 78 20 66 72 61 67 6d 65 6e 74  esyntax fragment
24190 0a 20 20 66 6f 72 65 61 63 68 20 63 6f 72 65 73  .  foreach cores
241a0 79 6e 74 61 78 20 24 73 79 6e 74 61 78 20 7b 0a  yntax $syntax {.
241b0 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 78 20 5b      lappend lx [
241c0 6c 69 73 74 20 24 66 72 61 67 6d 65 6e 74 20 24  list $fragment $
241d0 63 6f 72 65 73 79 6e 74 61 78 20 30 5d 0a 20 20  coresyntax 0].  
241e0 7d 0a 7d 0a 68 64 5f 6c 69 73 74 5f 6f 66 5f 6c  }.}.hd_list_of_l
241f0 69 6e 6b 73 20 7b 7d 20 32 32 35 20 5b 6c 73 6f  inks {} 225 [lso
24200 72 74 20 2d 69 6e 64 65 78 20 31 20 24 6c 78 5d  rt -index 1 $lx]
24210 0a 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c 68 72  ..hd_putsnl "<hr
24220 20 63 6c 61 73 73 3d 27 78 68 72 27 3e 22 0a 68   class='xhr'>".h
24230 64 5f 70 75 74 73 6e 6c 20 22 3c 64 6c 3e 22 0a  d_putsnl "<dl>".
24240 66 6f 72 65 61 63 68 20 62 61 73 65 73 79 6e 74  foreach basesynt
24250 61 78 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79  ax [lsort [array
24260 20 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73   names corefuncs
24270 65 74 5d 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68  et]] {.  foreach
24280 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64   {syntax keyword
24290 73 20 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e  s desc} $corefun
242a0 63 73 65 74 28 24 62 61 73 65 73 79 6e 74 61 78  cset($basesyntax
242b0 29 20 62 72 65 61 6b 0a 20 20 72 65 67 73 75 62  ) break.  regsub
242c0 20 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72   -all {\s+} [str
242d0 69 6e 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78  ing trim $syntax
242e0 5d 20 7b 3c 62 72 20 2f 3e 7d 20 73 79 6e 74 61  ] {<br />} synta
242f0 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  x.  regsub -all 
24300 7b 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24  {\(([^*)]+)\)} $
24310 73 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f  syntax {(<i>\1</
24320 69 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20 72 65  i>)} syntax.  re
24330 67 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73  gsub -all {,} $s
24340 79 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d  yntax {</i>,<i>}
24350 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62   syntax.  regsub
24360 20 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e   -all {<i>\.\.\.
24370 3c 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e  </i>} $syntax {.
24380 2e 2e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67  ..} syntax.  reg
24390 65 78 70 20 7b 5e 5b 61 2d 7a 5d 2b 7d 20 24 62  exp {^[a-z]+} $b
243a0 61 73 65 73 79 6e 74 61 78 20 66 72 61 67 6d 65  asesyntax fragme
243b0 6e 74 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74  nt.  if {[llengt
243c0 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d  h $keywords]==0}
243d0 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b   {.    regexp {[
243e0 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20  a-z_]+} $syntax 
243f0 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67  name.    hd_frag
24400 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d  ment $name *$nam
24410 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c  e "${name}() SQL
24420 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65   function".  } e
24430 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66 72  lse {.    set fr
24440 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24  agname [lindex $
24450 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20 20  keywords 0].    
24460 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61  regsub -all {[^a
24470 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b  -z]} $fragname {
24480 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 68  } fragname.    h
24490 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61 67  d_fragment $frag
244a0 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68 64  name.    eval hd
244b0 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69 6e  _keywords [strin
244c0 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24  g map {\n { }} $
244d0 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20  keywords].  }.  
244e0 68 64 5f 70 75 74 73 20 22 3c 64 74 3e 3c 70 3e  hd_puts "<dt><p>
244f0 3c 62 3e 24 73 79 6e 74 61 78 3c 2f 62 3e 3c 2f  <b>$syntax</b></
24500 64 74 3e 22 0a 20 20 68 64 5f 72 65 73 6f 6c 76  dt>".  hd_resolv
24510 65 20 22 3c 64 64 3e 3c 70 3e 24 64 65 73 63 3c  e "<dd><p>$desc<
24520 2f 64 64 3e 5c 6e 22 0a 7d 0a 68 64 5f 70 75 74  /dd>\n".}.hd_put
24530 73 6e 6c 20 22 3c 2f 64 6c 3e 22 0a 0a 23 23 23  snl "</dl>"..###
24540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24580 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
24590 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73 65 72  ion INSERT inser
245a0 74 20 7b 49 4e 53 45 52 54 20 2a 49 4e 53 45 52  t {INSERT *INSER
245b0 54 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  Ts}..RecursiveBu
245c0 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 73 65  bbleDiagram inse
245d0 72 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  rt-stmt.</tcl>..
245e0 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20 73 74  <p>The INSERT st
245f0 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e  atement comes in
24600 20 74 68 72 65 65 20 62 61 73 69 63 20 66 6f 72   three basic for
24610 6d 73 2e 20 20 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c  ms.  .<ol>.<li><
24620 70 3e 3c 62 3e 49 4e 53 45 52 54 20 49 4e 54 4f  p><b>INSERT INTO
24630 20 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 3c 2f 69   </b><i>table</i
24640 3e 3c 62 3e 20 56 41 4c 55 45 53 28 2e 2e 2e 29  ><b> VALUES(...)
24650 3b 3c 2f 62 3e 0a 3c 70 3e 5e 54 68 65 20 66 69  ;</b>.<p>^The fi
24660 72 73 74 20 66 6f 72 6d 20 28 77 69 74 68 20 74  rst form (with t
24670 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65 79 77  he "VALUES" keyw
24680 6f 72 64 29 20 63 72 65 61 74 65 73 20 6f 6e 65  ord) creates one
24690 20 6f 72 20 6d 6f 72 65 0a 6e 65 77 20 72 6f 77   or more.new row
246a0 73 20 69 6e 0a 61 6e 20 65 78 69 73 74 69 6e 67  s in.an existing
246b0 20 74 61 62 6c 65 2e 20 5e 49 66 20 74 68 65 20   table. ^If the 
246c0 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e  <yyterm>column-n
246d0 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73  ame</yyterm> lis
246e0 74 20 61 66 74 65 72 0a 3c 79 79 74 65 72 6d 3e  t after.<yyterm>
246f0 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  table-name</yyte
24700 72 6d 3e 20 69 73 20 6f 6d 69 74 74 65 64 20 74  rm> is omitted t
24710 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  hen the number.o
24720 66 20 76 61 6c 75 65 73 20 69 6e 73 65 72 74 65  f values inserte
24730 64 20 69 6e 74 6f 20 65 61 63 68 20 72 6f 77 0a  d into each row.
24740 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65  must be the same
24750 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   as the number o
24760 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
24770 20 74 61 62 6c 65 2e 20 5e 49 6e 20 74 68 69 73   table. ^In this
24780 20 63 61 73 65 0a 74 68 65 20 72 65 73 75 6c 74   case.the result
24790 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74   of evaluating t
247a0 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70  he left-most exp
247b0 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20 65 61 63  ression from eac
247c0 68 20 74 65 72 6d 20 6f 66 0a 74 68 65 20 56 41  h term of.the VA
247d0 4c 55 45 53 20 6c 69 73 74 20 69 73 20 69 6e 73  LUES list is ins
247e0 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 6c  erted into the l
247f0 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20  eft-most column 
24800 6f 66 20 65 61 63 68 20 6e 65 77 20 72 6f 77 2c  of each new row,
24810 0a 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 66 6f  .and so forth fo
24820 72 20 65 61 63 68 20 73 75 62 73 65 71 75 65 6e  r each subsequen
24830 74 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 49  t expression. ^I
24840 66 20 61 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75  f a <yyterm>colu
24850 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  mn-name</yyterm>
24860 0a 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69  .list is specifi
24870 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d  ed, then the num
24880 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e  ber of values in
24890 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68   each term of th
248a0 65 0a 56 41 4c 55 45 20 6c 69 73 74 20 6d 75 73  e.VALUE list mus
248b0 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62  t match the numb
248c0 65 72 20 6f 66 0a 73 70 65 63 69 66 69 65 64 20  er of.specified 
248d0 63 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f  columns. ^Each o
248e0 66 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75  f the named colu
248f0 6d 6e 73 20 6f 66 20 74 68 65 20 6e 65 77 20 72  mns of the new r
24900 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64 0a  ow is populated.
24910 77 69 74 68 20 74 68 65 20 72 65 73 75 6c 74 73  with the results
24920 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74   of evaluating t
24930 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
24940 20 56 41 4c 55 45 53 20 65 78 70 72 65 73 73 69   VALUES expressi
24950 6f 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d  on. ^Table.colum
24960 6e 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61  ns that do not a
24970 70 70 65 61 72 20 69 6e 20 74 68 65 20 63 6f 6c  ppear in the col
24980 75 6d 6e 20 6c 69 73 74 20 61 72 65 20 70 6f 70  umn list are pop
24990 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ulated with the 
249a0 0a 5b 64 65 66 61 75 6c 74 20 63 6f 6c 75 6d 6e  .[default column
249b0 20 76 61 6c 75 65 5d 20 28 73 70 65 63 69 66 69   value] (specifi
249c0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
249d0 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e [CREATE TABLE]
249e0 20 73 74 61 74 65 6d 65 6e 74 29 2c 20 6f 72 0a   statement), or.
249f0 77 69 74 68 20 4e 55 4c 4c 20 69 66 20 6e 6f 20  with NULL if no 
24a00 5b 64 65 66 61 75 6c 74 20 76 61 6c 75 65 5d 20  [default value] 
24a10 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c  is specified...<
24a20 6c 69 3e 3c 70 3e 3c 62 3e 49 4e 53 45 52 54 20  li><p><b>INSERT 
24a30 49 4e 54 4f 20 3c 2f 62 3e 3c 69 3e 74 61 62 6c  INTO </b><i>tabl
24a40 65 3c 2f 69 3e 3c 62 3e 20 53 45 4c 45 43 54 20  e</i><b> SELECT 
24a50 2e 2e 2e 3b 3c 2f 62 3e 0a 3c 70 3e 54 68 65 20  ...;</b>.<p>The 
24a60 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74  second form of t
24a70 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  he INSERT statem
24a80 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 5b  ent contains a [
24a90 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
24aa0 74 0a 69 6e 73 74 65 61 64 20 6f 66 20 61 20 56  t.instead of a V
24ab0 41 4c 55 45 53 20 63 6c 61 75 73 65 2e 20 5e 41  ALUES clause. ^A
24ac0 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 69 6e   new entry is in
24ad0 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
24ae0 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 0a 72  table for each.r
24af0 6f 77 20 6f 66 20 64 61 74 61 20 72 65 74 75 72  ow of data retur
24b00 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e 67  ned by executing
24b10 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
24b20 65 6d 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c  ement. ^If a col
24b30 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63  umn-list is.spec
24b40 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65  ified, the numbe
24b50 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
24b60 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
24b70 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65  e SELECT must be
24b80 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65   the same.as the
24b90 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 6d 73   number of items
24ba0 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c   in the column-l
24bb0 69 73 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ist. ^Otherwise,
24bc0 20 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69   if no column-li
24bd0 73 74 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c  st is.specified,
24be0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
24bf0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65  olumns in the re
24c00 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45  sult of the SELE
24c10 43 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73  CT must be the s
24c20 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65  ame.as the numbe
24c30 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
24c40 74 68 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20  the table. ^Any 
24c50 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
24c60 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 5b 63 6f 6d  , including.[com
24c70 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 5d 20 61  pound SELECTs] a
24c80 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  nd SELECT statem
24c90 65 6e 74 73 20 77 69 74 68 20 5b 4f 52 44 45 52  ents with [ORDER
24ca0 20 42 59 5d 20 61 6e 64 2f 6f 72 20 5b 4c 49 4d   BY] and/or [LIM
24cb0 49 54 5d 20 63 6c 61 75 73 65 73 2c 20 0a 6d 61  IT] clauses, .ma
24cc0 79 20 62 65 20 75 73 65 64 20 69 6e 20 61 6e 20  y be used in an 
24cd0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
24ce0 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 2e 0a 0a   of this form...
24cf0 3c 70 3e 54 6f 20 61 76 6f 69 64 20 61 20 70 61  <p>To avoid a pa
24d00 72 73 69 6e 67 20 61 6d 62 69 67 75 69 74 79 2c  rsing ambiguity,
24d10 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
24d20 65 6d 65 6e 74 20 73 68 6f 75 6c 64 20 61 6c 77  ement should alw
24d30 61 79 73 0a 63 6f 6e 74 61 69 6e 20 61 20 57 48  ays.contain a WH
24d40 45 52 45 20 63 6c 61 75 73 65 2c 20 65 76 65 6e  ERE clause, even
24d50 20 69 66 20 74 68 61 74 20 63 6c 61 75 73 65 20   if that clause 
24d60 69 73 20 73 69 6d 70 6c 79 20 22 57 48 45 52 45  is simply "WHERE
24d70 20 74 72 75 65 22 2c 0a 69 66 20 74 68 65 20 5b   true",.if the [
24d80 75 70 73 65 72 74 2d 63 6c 61 75 73 65 5d 20 69  upsert-clause] i
24d90 73 20 70 72 65 73 65 6e 74 2e 20 20 57 69 74 68  s present.  With
24da0 6f 75 74 20 74 68 65 20 57 48 45 52 45 20 63 6c  out the WHERE cl
24db0 61 75 73 65 2c 20 74 68 65 0a 70 61 72 73 65 72  ause, the.parser
24dc0 20 64 6f 65 73 20 6e 6f 74 20 6b 6e 6f 77 20 69   does not know i
24dd0 66 20 74 68 65 20 74 6f 6b 65 6e 20 22 4f 4e 22  f the token "ON"
24de0 20 69 73 20 70 61 72 74 20 6f 66 20 61 20 6a 6f   is part of a jo
24df0 69 6e 20 63 6f 6e 73 74 72 61 69 6e 74 0a 6f 6e  in constraint.on
24e00 20 74 68 65 20 53 45 4c 45 43 54 2c 20 6f 72 20   the SELECT, or 
24e10 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
24e20 20 74 68 65 20 5b 75 70 73 65 72 74 2d 63 6c 61   the [upsert-cla
24e30 75 73 65 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62  use]...<li><p><b
24e40 3e 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 2f 62  >INSERT INTO </b
24e50 3e 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 3c 62 3e  ><i>table</i><b>
24e60 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 3b   DEFAULT VALUES;
24e70 3c 2f 62 3e 0a 3c 70 3e 54 68 65 20 74 68 69 72  </b>.<p>The thir
24e80 64 20 66 6f 72 6d 20 6f 66 20 61 6e 20 49 4e 53  d form of an INS
24e90 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ERT statement is
24ea0 20 77 69 74 68 20 44 45 46 41 55 4c 54 20 56 41   with DEFAULT VA
24eb0 4c 55 45 53 2e 0a 5e 28 54 68 65 20 49 4e 53 45  LUES..^(The INSE
24ec0 52 54 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56  RT ... DEFAULT V
24ed0 41 4c 55 45 53 20 73 74 61 74 65 6d 65 6e 74 20  ALUES statement 
24ee0 69 6e 73 65 72 74 73 20 61 20 73 69 6e 67 6c 65  inserts a single
24ef0 20 6e 65 77 20 72 6f 77 20 69 6e 74 6f 20 74 68   new row into th
24f00 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e 29 5e  e.named table.)^
24f10 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66   ^Each column of
24f20 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20   the new row is 
24f30 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 69  populated with i
24f40 74 73 20 0a 5b 64 65 66 61 75 6c 74 20 76 61 6c  ts .[default val
24f50 75 65 5d 2c 20 6f 72 20 77 69 74 68 20 61 20 4e  ue], or with a N
24f60 55 4c 4c 20 69 66 20 6e 6f 20 64 65 66 61 75 6c  ULL if no defaul
24f70 74 20 76 61 6c 75 65 20 69 73 20 73 70 65 63 69  t value is speci
24f80 66 69 65 64 20 0a 61 73 20 70 61 72 74 20 6f 66  fied .as part of
24f90 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64 65 66 69   the column defi
24fa0 6e 69 74 69 6f 6e 20 69 6e 20 74 68 65 20 5b 43  nition in the [C
24fb0 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
24fc0 74 65 6d 65 6e 74 2e 0a 54 68 65 20 5b 75 70 73  tement..The [ups
24fd0 65 72 74 2d 63 6c 61 75 73 65 5d 20 69 73 20 6e  ert-clause] is n
24fe0 6f 74 20 73 75 70 70 6f 72 74 65 64 20 61 66 74  ot supported aft
24ff0 65 72 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  er DEFAULT VALUE
25000 53 2e 0a 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e  S...</ol>..<p>.^
25010 54 68 65 20 69 6e 69 74 69 61 6c 20 22 49 4e 53  The initial "INS
25020 45 52 54 22 20 6b 65 79 77 6f 72 64 20 63 61 6e  ERT" keyword can
25030 20 62 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a   be replaced by.
25040 22 52 45 50 4c 41 43 45 22 20 6f 72 20 22 49 4e  "REPLACE" or "IN
25050 53 45 52 54 20 4f 52 20 3c 69 3e 61 63 74 69 6f  SERT OR <i>actio
25060 6e 3c 2f 69 3e 22 20 74 6f 20 73 70 65 63 69 66  n</i>" to specif
25070 79 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  y an alternative
25080 0a 63 6f 6e 73 74 72 61 69 6e 74 20 5b 4f 4e 20  .constraint [ON 
25090 43 4f 4e 46 4c 49 43 54 7c 63 6f 6e 66 6c 69 63  CONFLICT|conflic
250a0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
250b0 6f 72 69 74 68 6d 5d 20 74 6f 20 75 73 65 20 64  orithm] to use d
250c0 75 72 69 6e 67 20 0a 74 68 61 74 20 6f 6e 65 20  uring .that one 
250d0 49 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a  INSERT command..
250e0 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  For compatibilit
250f0 79 20 77 69 74 68 20 4d 79 53 51 4c 2c 20 5e 74  y with MySQL, ^t
25100 68 65 20 70 61 72 73 65 72 20 61 6c 6c 6f 77 73  he parser allows
25110 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65 0a   the use of the.
25120 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c  single keyword <
25130 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65 70  a href="lang_rep
25140 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c 41  lace.html">REPLA
25150 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61 6c  CE</a> as an .al
25160 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52 54 20  ias for "INSERT 
25170 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 0a 3c 70  OR REPLACE"...<p
25180 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  >^(The optional 
25190 22 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  "<i>schema-name<
251a0 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70 72 65  /i><b>.</b>" pre
251b0 66 69 78 20 6f 6e 20 74 68 65 20 0a 3c 79 79 74  fix on the .<yyt
251c0 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  erm>table-name</
251d0 79 79 74 65 72 6d 3e 0a 69 73 20 73 75 70 70 6f  yyterm>.is suppo
251e0 72 74 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76  rted for top-lev
251f0 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  el INSERT statem
25200 65 6e 74 73 20 6f 6e 6c 79 2e 29 5e 20 20 5e 54  ents only.)^  ^T
25210 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6d 75  he table name mu
25220 73 74 20 62 65 0a 75 6e 71 75 61 6c 69 66 69 65  st be.unqualifie
25230 64 20 66 6f 72 20 49 4e 53 45 52 54 20 73 74 61  d for INSERT sta
25240 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63 63  tements that occ
25250 75 72 20 77 69 74 68 69 6e 20 5b 43 52 45 41 54  ur within [CREAT
25260 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65  E TRIGGER] state
25270 6d 65 6e 74 73 2e 0a 5e 53 69 6d 69 6c 61 72 6c  ments..^Similarl
25280 79 2c 20 74 68 65 20 22 44 45 46 41 55 4c 54 20  y, the "DEFAULT 
25290 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66 20  VALUES" form of 
252a0 74 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65  the INSERT state
252b0 6d 65 6e 74 20 69 73 20 73 75 70 70 6f 72 74 65  ment is supporte
252c0 64 20 66 6f 72 0a 74 6f 70 2d 6c 65 76 65 6c 20  d for.top-level 
252d0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
252e0 73 20 6f 6e 6c 79 20 61 6e 64 20 6e 6f 74 20 66  s only and not f
252f0 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  or INSERT statem
25300 65 6e 74 73 20 77 69 74 68 69 6e 0a 74 72 69 67  ents within.trig
25310 67 65 72 73 2e 0a 3c 70 3e 0a 0a 3c 70 3e 54 68  gers..<p>..<p>Th
25320 65 20 6f 70 74 69 6f 6e 61 6c 20 22 41 53 20 3c  e optional "AS <
25330 79 79 74 65 72 6d 3e 61 6c 69 61 73 3c 2f 79 79  yyterm>alias</yy
25340 74 65 72 6d 3e 22 20 70 68 72 61 73 65 20 70 72  term>" phrase pr
25350 6f 76 69 64 65 73 20 61 6e 20 61 6c 74 65 72 6e  ovides an altern
25360 61 74 69 76 65 0a 6e 61 6d 65 20 66 6f 72 20 74  ative.name for t
25370 68 65 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68  he table into wh
25380 69 63 68 20 63 6f 6e 74 65 6e 74 20 69 73 20 62  ich content is b
25390 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2e 20 20  eing inserted.  
253a0 54 68 65 20 61 6c 69 61 73 20 6e 61 6d 65 0a 63  The alias name.c
253b0 61 6e 20 62 65 20 75 73 65 64 20 77 69 74 68 69  an be used withi
253c0 6e 20 57 48 45 52 45 20 61 6e 64 20 53 45 54 20  n WHERE and SET 
253d0 63 6c 61 75 73 65 73 20 6f 66 20 74 68 65 20 5b  clauses of the [
253e0 55 50 53 45 52 54 5d 2e 20 20 49 66 20 74 68 65  UPSERT].  If the
253f0 72 65 20 69 73 20 6e 6f 0a 5b 75 70 73 65 72 74  re is no.[upsert
25400 2d 63 6c 61 75 73 65 5d 2c 20 74 68 65 6e 20 74  -clause], then t
25410 68 65 20 3c 79 79 74 65 72 6d 3e 61 6c 69 61 73  he <yyterm>alias
25420 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 70 6f 69  </yyterm> is poi
25430 6e 74 6c 65 73 73 2c 20 62 75 74 20 61 6c 73 6f  ntless, but also
25440 0a 68 61 72 6d 6c 65 73 73 2e 0a 0a 3c 70 3e 53  .harmless...<p>S
25450 65 65 20 74 68 65 20 73 65 70 61 72 61 74 65 20  ee the separate 
25460 5b 55 50 53 45 52 54 5d 20 64 6f 63 75 6d 65 6e  [UPSERT] documen
25470 74 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 61  tation for the a
25480 64 64 69 74 69 6f 6e 61 6c 20 74 72 61 69 6c 69  dditional traili
25490 6e 67 0a 73 79 6e 74 61 78 20 74 68 61 74 20 63  ng.syntax that c
254a0 61 6e 20 63 61 75 73 65 20 61 6e 20 49 4e 53 45  an cause an INSE
254b0 52 54 20 74 6f 20 62 65 68 61 76 65 20 61 73 20  RT to behave as 
254c0 61 6e 20 55 50 44 41 54 45 20 69 66 20 74 68 65  an UPDATE if the
254d0 20 49 4e 53 45 52 54 20 77 6f 75 6c 64 0a 6f 74   INSERT would.ot
254e0 68 65 72 77 69 73 65 20 76 69 6f 6c 61 74 65 20  herwise violate 
254f0 61 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  a uniqueness con
25500 73 74 72 61 69 6e 74 2e 20 20 54 68 65 20 5b 75  straint.  The [u
25510 70 73 65 72 74 20 63 6c 61 75 73 65 5d 20 69 73  psert clause] is
25520 20 6e 6f 74 0a 61 6c 6c 6f 77 65 64 20 6f 6e 20   not.allowed on 
25530 61 6e 20 22 49 4e 53 45 52 54 20 2e 2e 2e 20 44  an "INSERT ... D
25540 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 2e 0a  EFAULT VALUES"..
25550 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
25560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25590 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
255a0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 75  ######.Section u
255b0 70 73 65 72 74 20 55 50 53 45 52 54 20 7b 55 50  psert UPSERT {UP
255c0 53 45 52 54 20 7b 75 70 73 65 72 74 20 63 6c 61  SERT {upsert cla
255d0 75 73 65 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65  use}}..Recursive
255e0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70  BubbleDiagram up
255f0 73 65 72 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63  sert-clause.</tc
25600 6c 3e 0a 0a 3c 70 3e 55 50 53 45 52 54 20 69 73  l>..<p>UPSERT is
25610 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61   a special synta
25620 78 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 5b 49  x addition to [I
25630 4e 53 45 52 54 5d 20 74 68 61 74 20 63 61 75 73  NSERT] that caus
25640 65 73 20 74 68 65 0a 49 4e 53 45 52 54 20 74 6f  es the.INSERT to
25650 20 62 65 68 61 76 65 20 61 73 20 61 6e 20 5b 55   behave as an [U
25660 50 44 41 54 45 5d 20 6f 72 20 61 20 6e 6f 2d 6f  PDATE] or a no-o
25670 70 20 69 66 20 74 68 65 20 49 4e 53 45 52 54 20  p if the INSERT 
25680 77 6f 75 6c 64 20 76 69 6f 6c 61 74 65 0a 61 20  would violate.a 
25690 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73 74  uniqueness const
256a0 72 61 69 6e 74 2e 0a 55 50 53 45 52 54 20 69 73  raint..UPSERT is
256b0 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51   not standard SQ
256c0 4c 2e 20 20 55 50 53 45 52 54 20 69 6e 20 53 51  L.  UPSERT in SQ
256d0 4c 69 74 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65  Lite follows the
256e0 0a 73 79 6e 74 61 78 20 65 73 74 61 62 6c 69 73  .syntax establis
256f0 68 65 64 20 62 79 20 50 6f 73 74 67 72 65 53 51  hed by PostgreSQ
25700 4c 2e 0a 55 50 53 45 52 54 20 73 79 6e 74 61 78  L..UPSERT syntax
25710 20 77 61 73 20 61 64 64 65 64 20 74 6f 20 53 51   was added to SQ
25720 4c 69 74 65 20 77 69 74 68 20 76 65 72 73 69 6f  Lite with versio
25730 6e 20 33 2e 32 34 2e 30 20 28 5b 64 61 74 65 6f  n 3.24.0 ([dateo
25740 66 3a 33 2e 32 34 2e 30 5d 29 2e 0a 0a 3c 70 3e  f:3.24.0])...<p>
25750 41 6e 20 55 50 53 45 52 54 20 69 73 20 61 6e 20  An UPSERT is an 
25760 6f 72 64 69 6e 61 72 79 20 5b 49 4e 53 45 52 54  ordinary [INSERT
25770 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  ] statement that
25780 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a   is followed by.
25790 74 68 65 20 73 70 65 63 69 61 6c 20 4f 4e 20 43  the special ON C
257a0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 73  ONFLICT clause s
257b0 68 6f 77 6e 20 61 62 6f 76 65 2e 0a 0a 3c 70 3e  hown above...<p>
257c0 54 68 65 20 73 79 6e 74 61 78 20 74 68 61 74 20  The syntax that 
257d0 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65 65  occurs in betwee
257e0 6e 20 74 68 65 20 22 4f 4e 20 43 4f 4e 46 4c 49  n the "ON CONFLI
257f0 43 54 22 20 61 6e 64 20 22 44 4f 22 20 6b 65 79  CT" and "DO" key
25800 77 6f 72 64 73 0a 69 73 20 63 61 6c 6c 65 64 20  words.is called 
25810 74 68 65 20 22 63 6f 6e 66 6c 69 63 74 20 74 61  the "conflict ta
25820 72 67 65 74 22 2e 20 20 54 68 65 20 63 6f 6e 66  rget".  The conf
25830 6c 69 63 74 20 74 61 72 67 65 74 20 73 70 65 63  lict target spec
25840 69 66 69 65 73 20 61 20 73 70 65 63 69 66 69 63  ifies a specific
25850 0a 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73  .uniqueness cons
25860 74 72 61 69 6e 74 20 74 68 61 74 20 77 69 6c 6c  traint that will
25870 20 74 72 69 67 67 65 72 20 74 68 65 20 75 70 73   trigger the ups
25880 65 72 74 2e 20 20 54 68 65 20 63 6f 6e 66 6c 69  ert.  The confli
25890 63 74 20 74 61 72 67 65 74 0a 69 73 20 72 65 71  ct target.is req
258a0 75 69 72 65 64 20 66 6f 72 20 44 4f 20 55 50 44  uired for DO UPD
258b0 41 54 45 20 75 70 73 65 72 74 73 2c 20 62 75 74  ATE upserts, but
258c0 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20 66 6f 72   is optional for
258d0 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20 20 57 68   DO NOTHING.  Wh
258e0 65 6e 0a 74 68 65 20 63 6f 6e 66 6c 69 63 74 20  en.the conflict 
258f0 74 61 72 67 65 74 20 69 73 20 6f 6d 69 74 74 65  target is omitte
25900 64 2c 20 74 68 65 20 75 70 73 65 72 74 20 62 65  d, the upsert be
25910 68 61 76 69 6f 72 20 69 73 20 74 72 69 67 67 65  havior is trigge
25920 72 65 64 20 62 79 20 61 0a 76 69 6f 6c 61 74 69  red by a.violati
25930 6f 6e 20 6f 66 20 61 6e 79 20 75 6e 69 71 75 65  on of any unique
25940 6e 65 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 20  ness constraint 
25950 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20  on the table of 
25960 74 68 65 20 49 4e 53 45 52 54 2e 0a 0a 3c 70 3e  the INSERT...<p>
25970 49 66 20 74 68 65 20 69 6e 73 65 72 74 20 6f 70  If the insert op
25980 65 72 61 74 69 6f 6e 20 77 6f 75 6c 64 20 63 61  eration would ca
25990 75 73 65 20 74 68 65 20 75 6e 69 71 75 65 6e 65  use the uniquene
259a0 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 64  ss constraint id
259b0 65 6e 74 69 66 69 65 64 0a 62 79 20 74 68 65 20  entified.by the 
259c0 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20  conflict-target 
259d0 63 6c 61 75 73 65 20 74 6f 20 66 61 69 6c 2c 20  clause to fail, 
259e0 74 68 65 6e 20 74 68 65 20 69 6e 73 65 72 74 20  then the insert 
259f0 69 73 20 6f 6d 69 74 74 65 64 20 61 6e 64 0a 65  is omitted and.e
25a00 69 74 68 65 72 20 74 68 65 20 44 4f 20 4e 4f 54  ither the DO NOT
25a10 48 49 4e 47 20 6f 72 20 44 4f 20 55 50 44 41 54  HING or DO UPDAT
25a20 45 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 70  E operation is p
25a30 65 72 66 6f 72 6d 65 64 20 69 6e 73 74 65 61 64  erformed instead
25a40 2e 0a 49 6e 20 74 68 65 20 63 61 73 65 20 6f 66  ..In the case of
25a50 20 61 20 6d 75 6c 74 69 2d 72 6f 77 20 69 6e 73   a multi-row ins
25a60 65 72 74 2c 20 74 68 69 73 20 64 65 63 69 73 69  ert, this decisi
25a70 6f 6e 20 69 73 20 6d 61 64 65 20 73 65 70 61 72  on is made separ
25a80 61 74 65 6c 79 0a 66 6f 72 20 65 61 63 68 20 72  ately.for each r
25a90 6f 77 20 6f 66 20 74 68 65 20 69 6e 73 65 72 74  ow of the insert
25aa0 2e 0a 0a 3c 70 3e 54 68 65 20 73 70 65 63 69 61  ...<p>The specia
25ab0 6c 20 55 50 53 45 52 54 20 70 72 6f 63 65 73 73  l UPSERT process
25ac0 69 6e 67 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79  ing happens only
25ad0 20 66 6f 72 20 75 6e 69 71 75 65 6e 65 73 73 20   for uniqueness 
25ae0 63 6f 6e 73 74 72 61 69 6e 74 20 6f 6e 0a 74 68  constraint on.th
25af0 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
25b00 72 65 63 65 69 76 69 6e 67 20 74 68 65 20 49 4e  receiving the IN
25b10 53 45 52 54 2e 20 41 20 22 75 6e 69 71 75 65 6e  SERT. A "uniquen
25b20 65 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 22 0a  ess constraint".
25b30 69 73 20 61 6e 20 65 78 70 6c 69 63 69 74 20 55  is an explicit U
25b40 4e 49 51 55 45 20 6f 72 20 50 52 49 4d 41 52 59  NIQUE or PRIMARY
25b50 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20   KEY constraint 
25b60 77 69 74 68 69 6e 0a 74 68 65 20 43 52 45 41 54  within.the CREAT
25b70 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
25b80 74 2c 20 6f 72 20 61 20 5b 75 6e 69 71 75 65 20  t, or a [unique 
25b90 69 6e 64 65 78 5d 2e 0a 55 50 53 45 52 54 20 64  index]..UPSERT d
25ba0 6f 65 73 20 6e 6f 74 20 69 6e 74 65 72 76 65 6e  oes not interven
25bb0 65 20 66 6f 72 20 66 61 69 6c 65 64 20 4e 4f 54  e for failed NOT
25bc0 20 4e 55 4c 4c 20 6f 72 20 66 6f 72 65 69 67 6e   NULL or foreign
25bd0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
25be0 0a 6f 72 20 66 6f 72 20 63 6f 6e 73 74 72 61 69  .or for constrai
25bf0 6e 74 73 20 74 68 61 74 20 61 72 65 20 69 6d 70  nts that are imp
25c00 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74  lemented using t
25c10 72 69 67 67 65 72 73 2e 0a 0a 3c 70 3e 43 6f 6c  riggers...<p>Col
25c20 75 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 74 68 65  umn names in the
25c30 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20   expressions of 
25c40 61 20 44 4f 20 55 50 44 41 54 45 20 72 65 66 65  a DO UPDATE refe
25c50 72 20 74 6f 20 74 68 65 20 6f 72 69 67 69 6e 61  r to the origina
25c60 6c 0a 75 6e 63 68 61 6e 67 65 64 20 76 61 6c 75  l.unchanged valu
25c70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c  e of the column,
25c80 20 62 65 66 6f 72 65 20 74 68 65 20 61 74 74 65   before the atte
25c90 6d 70 74 65 64 20 49 4e 53 45 52 54 2e 20 20 54  mpted INSERT.  T
25ca0 6f 20 75 73 65 20 74 68 65 0a 76 61 6c 75 65 20  o use the.value 
25cb0 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20  that would have 
25cc0 62 65 65 6e 20 69 6e 73 65 72 74 65 64 20 68 61  been inserted ha
25cd0 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
25ce0 20 6e 6f 74 20 66 61 69 6c 65 64 2c 0a 61 64 64   not failed,.add
25cf0 20 74 68 65 20 73 70 65 63 69 61 6c 20 22 65 78   the special "ex
25d00 63 6c 75 64 65 64 2e 22 20 74 61 62 6c 65 20 71  cluded." table q
25d10 75 61 6c 69 66 69 65 72 20 74 6f 20 74 68 65 20  ualifier to the 
25d20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 0a 3c 70  column name...<p
25d30 3e 53 6f 6d 65 20 65 78 61 6d 70 6c 65 73 20 77  >Some examples w
25d40 69 6c 6c 20 68 65 6c 70 20 69 6c 6c 75 73 74 72  ill help illustr
25d50 61 74 65 20 74 68 65 20 64 69 66 66 65 72 65 6e  ate the differen
25d60 63 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ce:..<blockquote
25d70 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
25d80 42 4c 45 20 76 6f 63 61 62 75 6c 61 72 79 28 77  BLE vocabulary(w
25d90 6f 72 64 20 54 45 58 54 20 50 52 49 4d 41 52 59  ord TEXT PRIMARY
25da0 20 4b 45 59 2c 20 63 6f 75 6e 74 20 49 4e 54 20   KEY, count INT 
25db0 44 45 46 41 55 4c 54 20 31 29 3b 0a 49 4e 53 45  DEFAULT 1);.INSE
25dc0 52 54 20 49 4e 54 4f 20 76 6f 63 61 62 75 6c 61  RT INTO vocabula
25dd0 72 79 28 77 6f 72 64 29 20 56 41 4c 55 45 53 28  ry(word) VALUES(
25de0 27 6a 6f 76 69 61 6c 27 29 0a 20 20 4f 4e 20 43  'jovial').  ON C
25df0 4f 4e 46 4c 49 43 54 28 77 6f 72 64 29 20 44 4f  ONFLICT(word) DO
25e00 20 55 50 44 41 54 45 20 53 45 54 20 63 6f 75 6e   UPDATE SET coun
25e10 74 3d 63 6f 75 6e 74 2b 31 3b 0a 3c 2f 70 72 65  t=count+1;.</pre
25e20 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
25e30 3c 70 3e 54 68 65 20 75 70 73 65 72 74 20 61 62  <p>The upsert ab
25e40 6f 76 65 20 69 6e 73 65 72 74 73 20 74 68 65 20  ove inserts the 
25e50 6e 65 77 20 76 6f 63 61 62 75 6c 61 72 79 20 77  new vocabulary w
25e60 6f 72 64 20 22 6a 6f 76 69 61 6c 22 20 69 66 20  ord "jovial" if 
25e70 74 68 61 74 0a 77 6f 72 64 20 69 73 20 6e 6f 74  that.word is not
25e80 20 61 6c 72 65 61 64 79 20 69 6e 20 74 68 65 20   already in the 
25e90 64 69 63 74 69 6f 6e 61 72 79 2c 20 6f 72 20 69  dictionary, or i
25ea0 66 20 69 74 20 69 73 20 61 6c 72 65 61 64 79 20  f it is already 
25eb0 69 6e 20 74 68 65 0a 64 69 63 74 69 6f 6e 61 72  in the.dictionar
25ec0 79 2c 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73  y, it increments
25ed0 20 74 68 65 20 63 6f 75 6e 74 65 72 2e 20 20 54   the counter.  T
25ee0 68 65 20 22 63 6f 75 6e 74 2b 31 22 20 65 78 70  he "count+1" exp
25ef0 72 65 73 73 69 6f 6e 0a 63 6f 75 6c 64 20 61 6c  ression.could al
25f00 73 6f 20 62 65 20 77 72 69 74 74 65 6e 20 61 73  so be written as
25f10 20 22 76 6f 63 61 62 75 6c 61 72 79 2e 63 6f 75   "vocabulary.cou
25f20 6e 74 22 2e 20 20 50 6f 73 74 67 72 65 53 51 4c  nt".  PostgreSQL
25f30 20 72 65 71 75 69 72 65 73 20 74 68 65 0a 73 65   requires the.se
25f40 63 6f 6e 64 20 66 6f 72 6d 2c 20 62 75 74 20 53  cond form, but S
25f50 51 4c 69 74 65 20 61 63 63 65 70 74 73 20 65 69  QLite accepts ei
25f60 74 68 65 72 2e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  ther...<blockquo
25f70 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
25f80 54 41 42 4c 45 20 70 68 6f 6e 65 62 6f 6f 6b 28  TABLE phonebook(
25f90 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52  name TEXT PRIMAR
25fa0 59 20 4b 45 59 2c 20 70 68 6f 6e 65 6e 75 6d 62  Y KEY, phonenumb
25fb0 65 72 20 54 45 58 54 29 3b 0a 49 4e 53 45 52 54  er TEXT);.INSERT
25fc0 20 49 4e 54 4f 20 70 68 6f 6e 65 62 6f 6f 6b 28   INTO phonebook(
25fd0 6e 61 6d 65 2c 70 68 6f 6e 65 6e 75 6d 62 65 72  name,phonenumber
25fe0 29 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27  ) VALUES('Alice'
25ff0 2c 27 37 30 34 2d 35 35 35 2d 31 32 31 32 27 29  ,'704-555-1212')
26000 0a 20 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 6e  .  ON CONFLICT(n
26010 61 6d 65 29 20 44 4f 20 55 50 44 41 54 45 20 53  ame) DO UPDATE S
26020 45 54 20 70 68 6f 6e 65 6e 75 6d 62 65 72 3d 65  ET phonenumber=e
26030 78 63 6c 75 64 65 64 2e 70 68 6f 6e 65 6e 75 6d  xcluded.phonenum
26040 62 65 72 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  ber;.</pre></blo
26050 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20  ckquote>..<p>In 
26060 74 68 65 20 73 65 63 6f 6e 64 20 65 78 61 6d 70  the second examp
26070 6c 65 2c 20 74 68 65 20 65 78 70 72 65 73 73 69  le, the expressi
26080 6f 6e 20 69 6e 20 74 68 65 20 44 4f 20 55 50 44  on in the DO UPD
26090 41 54 45 20 63 6c 61 75 73 65 20 69 73 0a 6f 66  ATE clause is.of
260a0 20 74 68 65 20 66 6f 72 6d 20 22 65 78 63 6c 75   the form "exclu
260b0 64 65 64 2e 70 68 6f 6e 65 6e 75 6d 62 65 72 22  ded.phonenumber"
260c0 2e 20 20 54 68 65 20 22 65 78 63 6c 75 64 65 64  .  The "excluded
260d0 2e 22 20 70 72 65 66 69 78 20 63 61 75 73 65 73  ." prefix causes
260e0 20 74 68 65 0a 22 70 68 6f 6e 65 6e 75 6d 62 65   the."phonenumbe
260f0 72 22 20 74 6f 20 72 65 66 65 72 20 74 6f 20 74  r" to refer to t
26100 68 65 20 76 61 6c 75 65 20 66 6f 72 20 70 68 6f  he value for pho
26110 6e 65 6e 75 6d 62 65 72 20 74 68 61 74 20 77 6f  nenumber that wo
26120 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 69 6e  uld have been.in
26130 73 65 72 74 65 64 20 68 61 64 20 74 68 65 72 65  serted had there
26140 20 62 65 65 6e 20 6e 6f 20 63 6f 6e 66 6c 69 63   been no conflic
26150 74 2e 20 20 48 65 6e 63 65 2c 20 74 68 65 20 65  t.  Hence, the e
26160 66 66 65 63 74 20 6f 66 20 74 68 65 20 75 70 73  ffect of the ups
26170 65 72 74 0a 69 73 20 74 6f 20 69 6e 73 65 72 74  ert.is to insert
26180 20 61 20 70 68 6f 6e 65 6e 75 6d 62 65 72 20 6f   a phonenumber o
26190 66 20 41 6c 69 63 65 20 69 66 20 6e 6f 6e 65 20  f Alice if none 
261a0 65 78 69 73 74 73 2c 20 6f 72 20 74 6f 20 6f 76  exists, or to ov
261b0 65 72 77 72 69 74 65 0a 61 6e 79 20 70 72 69 6f  erwrite.any prio
261c0 72 20 70 68 6f 6e 65 6e 75 6d 62 65 72 20 66 6f  r phonenumber fo
261d0 72 20 41 6c 69 63 65 20 77 69 74 68 20 74 68 65  r Alice with the
261e0 20 6e 65 77 20 6f 6e 65 2e 0a 0a 3c 70 3e 4e 6f   new one...<p>No
261f0 74 65 20 74 68 61 74 20 74 68 65 20 44 4f 20 55  te that the DO U
26200 50 44 41 54 45 20 63 6c 61 75 73 65 20 61 63 74  PDATE clause act
26210 73 20 6f 6e 6c 79 20 6f 6e 20 74 68 65 20 73 69  s only on the si
26220 6e 67 6c 65 20 72 6f 77 0a 74 68 61 74 20 65 78  ngle row.that ex
26230 70 65 72 69 65 6e 63 65 64 20 74 68 65 20 63 6f  perienced the co
26240 6e 73 74 72 61 69 6e 74 20 65 72 72 6f 72 20 64  nstraint error d
26250 75 72 69 6e 67 20 49 4e 53 45 52 54 2e 20 20 49  uring INSERT.  I
26260 74 20 69 73 20 6e 6f 74 0a 6e 65 63 65 73 73 61  t is not.necessa
26270 72 79 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 20  ry to include a 
26280 57 48 45 52 45 20 63 6c 61 75 73 65 20 74 68 61  WHERE clause tha
26290 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 74  t restrictions t
262a0 68 65 20 61 63 74 69 6f 6e 0a 74 6f 20 74 68 61  he action.to tha
262b0 74 20 6f 6e 65 20 72 6f 77 2e 20 20 54 68 65 20  t one row.  The 
262c0 6f 6e 6c 79 20 75 73 65 20 66 6f 72 20 74 68 65  only use for the
262d0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 61 74   WHERE clause at
262e0 0a 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20  .the end of the 
262f0 44 4f 20 55 50 44 41 54 45 20 69 73 20 74 6f 20  DO UPDATE is to 
26300 6f 70 74 69 6f 6e 61 6c 6c 79 20 63 68 61 6e 67  optionally chang
26310 65 20 74 68 65 20 44 4f 20 55 50 44 41 54 45 0a  e the DO UPDATE.
26320 69 6e 74 6f 20 61 20 6e 6f 2d 6f 70 20 64 65 70  into a no-op dep
26330 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 6f 72  ending on the or
26340 69 67 69 6e 61 6c 20 61 6e 64 2f 6f 72 20 6e 65  iginal and/or ne
26350 77 20 76 61 6c 75 65 73 2e 0a 46 6f 72 20 65 78  w values..For ex
26360 61 6d 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  ample:..<blockqu
26370 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
26380 20 54 41 42 4c 45 20 70 68 6f 6e 65 62 6f 6f 6b   TABLE phonebook
26390 32 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50  2(.  name TEXT P
263a0 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 70 68  RIMARY KEY,.  ph
263b0 6f 6e 65 6e 75 6d 62 65 72 20 54 45 58 54 2c 0a  onenumber TEXT,.
263c0 20 20 76 61 6c 69 64 44 61 74 65 20 44 41 54 45    validDate DATE
263d0 0a 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20  .);.INSERT INTO 
263e0 70 68 6f 6e 65 62 6f 6f 6b 32 28 6e 61 6d 65 2c  phonebook2(name,
263f0 70 68 6f 6e 65 6e 75 6d 62 65 72 2c 76 61 6c 69  phonenumber,vali
26400 64 44 61 74 65 29 0a 20 20 56 41 4c 55 45 53 28  dDate).  VALUES(
26410 27 41 6c 69 63 65 27 2c 27 37 30 34 2d 35 35 35  'Alice','704-555
26420 2d 31 32 31 32 27 2c 27 32 30 31 38 2d 30 35 2d  -1212','2018-05-
26430 30 38 27 29 0a 20 20 4f 4e 20 43 4f 4e 46 4c 49  08').  ON CONFLI
26440 43 54 28 6e 61 6d 65 29 20 44 4f 20 55 50 44 41  CT(name) DO UPDA
26450 54 45 20 53 45 54 0a 20 20 20 20 70 68 6f 6e 65  TE SET.    phone
26460 6e 75 6d 62 65 72 3d 65 78 63 6c 75 64 65 64 2e  number=excluded.
26470 70 68 6f 6e 65 6e 75 6d 62 65 72 2c 0a 20 20 20  phonenumber,.   
26480 20 76 61 6c 69 64 44 61 74 65 3d 65 78 63 6c 75   validDate=exclu
26490 64 65 64 2e 76 61 6c 69 64 44 61 74 65 0a 20 20  ded.validDate.  
264a0 57 48 45 52 45 20 65 78 63 6c 75 64 65 64 2e 76  WHERE excluded.v
264b0 61 6c 69 64 44 61 74 65 3e 70 68 6f 6e 65 62 6f  alidDate>phonebo
264c0 6f 6b 32 2e 76 61 6c 69 64 44 61 74 65 3b 0a 3c  ok2.validDate;.<
264d0 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
264e0 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68 69 73 20 6c  e>..<p>In this l
264f0 61 73 74 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  ast example, the
26500 20 70 68 6f 6e 65 62 6f 6f 6b 32 20 65 6e 74 72   phonebook2 entr
26510 79 20 69 73 20 6f 6e 6c 79 0a 75 70 64 61 74 65  y is only.update
26520 64 20 69 66 20 74 68 65 20 76 61 6c 69 64 44 61  d if the validDa
26530 74 65 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79  te for the newly
26540 20 69 6e 73 65 72 74 65 64 20 76 61 6c 75 65 20   inserted value 
26550 69 73 0a 6e 65 77 65 72 20 74 68 61 6e 20 74 68  is.newer than th
26560 65 20 65 6e 74 72 79 20 61 6c 72 65 61 64 79 20  e entry already 
26570 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
26580 66 20 74 68 65 20 74 61 62 6c 65 20 61 6c 72 65  f the table alre
26590 61 64 79 0a 63 6f 6e 74 61 69 6e 73 20 61 6e 20  ady.contains an 
265a0 65 6e 74 72 79 20 77 69 74 68 20 74 68 65 20 73  entry with the s
265b0 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 61 20 63  ame name and a c
265c0 75 72 72 65 6e 74 20 76 61 6c 69 64 44 61 74 65  urrent validDate
265d0 2c 0a 74 68 65 6e 20 74 68 65 20 57 48 45 52 45  ,.then the WHERE
265e0 20 63 6c 61 75 73 65 20 63 61 75 73 65 73 20 74   clause causes t
265f0 68 65 20 44 4f 20 55 50 44 41 54 45 20 74 6f 20  he DO UPDATE to 
26600 62 65 63 6f 6d 65 20 61 20 6e 6f 2d 6f 70 2e 0a  become a no-op..
26610 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
26620 74 20 70 61 72 73 65 61 6d 62 69 67 20 7b 55 50  t parseambig {UP
26630 53 45 52 54 20 70 61 72 73 69 6e 67 20 61 6d 62  SERT parsing amb
26640 69 67 75 69 74 79 7d 3c 2f 74 63 6c 3e 0a 3c 68  iguity}</tcl>.<h
26650 33 3e 50 61 72 73 69 6e 67 20 41 6d 62 69 67 75  3>Parsing Ambigu
26660 69 74 79 3c 2f 68 33 3e 0a 0a 3c 70 3e 57 68 65  ity</h3>..<p>Whe
26670 6e 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 73  n the [INSERT] s
26680 74 61 74 65 6d 65 6e 74 20 74 6f 20 77 68 69 63  tatement to whic
26690 68 20 74 68 65 20 55 50 53 45 52 54 20 69 73 20  h the UPSERT is 
266a0 61 74 74 61 63 68 65 64 0a 74 61 6b 65 73 20 69  attached.takes i
266b0 74 73 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 61  ts values from a
266c0 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
266d0 65 6e 74 2c 20 74 68 65 72 65 20 69 73 20 61 20  ent, there is a 
266e0 70 6f 74 65 6e 74 69 61 6c 0a 70 61 72 73 69 6e  potential.parsin
266f0 67 20 61 6d 62 69 67 75 69 74 79 2e 20 20 54 68  g ambiguity.  Th
26700 65 20 70 61 72 73 65 72 20 6d 69 67 68 74 20 6e  e parser might n
26710 6f 74 20 62 65 20 61 62 6c 65 20 74 6f 20 74 65  ot be able to te
26720 6c 6c 20 69 66 20 74 68 65 0a 22 4f 4e 22 20 6b  ll if the."ON" k
26730 65 79 77 6f 72 64 20 69 73 20 69 6e 74 72 6f 64  eyword is introd
26740 75 63 69 6e 67 20 74 68 65 20 55 50 53 45 52 54  ucing the UPSERT
26750 20 6f 72 20 69 66 20 69 74 20 69 73 20 74 68 65   or if it is the
26760 20 4f 4e 20 63 6c 61 75 73 65 0a 6f 66 20 61 20   ON clause.of a 
26770 6a 6f 69 6e 2e 20 20 54 6f 20 77 6f 72 6b 20 61  join.  To work a
26780 72 6f 75 6e 64 20 74 68 69 73 2c 20 74 68 65 20  round this, the 
26790 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
267a0 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 0a 69   should always.i
267b0 6e 63 6c 75 64 65 20 61 20 57 48 45 52 45 20 63  nclude a WHERE c
267c0 6c 61 75 73 65 2c 20 65 76 65 6e 20 69 66 20 74  lause, even if t
267d0 68 61 74 20 57 48 45 52 45 20 63 6c 61 75 73 65  hat WHERE clause
267e0 20 69 73 20 6a 75 73 74 0a 22 57 48 45 52 45 20   is just."WHERE 
267f0 74 72 75 65 22 2e 0a 0a 3c 70 3e 41 6d 62 69 67  true"...<p>Ambig
26800 75 6f 75 73 20 75 73 65 20 6f 66 20 4f 4e 3a 0a  uous use of ON:.
26810 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
26820 65 3e 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  e>.INSERT INTO t
26830 31 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  1 SELECT * FROM 
26840 74 32 0a 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 78  t2.ON CONFLICT(x
26850 29 20 44 4f 20 55 50 44 41 54 45 20 53 45 54 20  ) DO UPDATE SET 
26860 79 3d 65 78 63 6c 75 64 65 64 2e 79 3b 0a 3c 2f  y=excluded.y;.</
26870 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
26880 3e 0a 0a 3c 70 3e 41 6d 62 69 67 75 69 74 79 20  >..<p>Ambiguity 
26890 72 65 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 61  resolved using a
268a0 20 57 48 45 52 45 20 63 6c 61 75 73 65 3a 0a 0a   WHERE clause:..
268b0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
268c0 3e 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31  >.INSERT INTO t1
268d0 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
268e0 32 20 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 62  2 <font color="b
268f0 6c 75 65 22 3e 57 48 45 52 45 20 74 72 75 65 3c  lue">WHERE true<
26900 2f 66 6f 6e 74 3e 0a 4f 4e 20 43 4f 4e 46 4c 49  /font>.ON CONFLI
26910 43 54 28 78 29 20 44 4f 20 55 50 44 41 54 45 20  CT(x) DO UPDATE 
26920 53 45 54 20 79 3d 65 78 63 6c 75 64 65 64 2e 79  SET y=excluded.y
26930 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
26940 75 6f 74 65 3e 0a 0a 3c 68 33 3e 4c 69 6d 69 74  uote>..<h3>Limit
26950 61 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ations</h3>..<p>
26960 55 50 53 45 52 54 20 64 6f 65 73 20 6e 6f 74 20  UPSERT does not 
26970 63 75 72 72 65 6e 74 6c 79 20 77 6f 72 6b 20 66  currently work f
26980 6f 72 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  or [virtual tabl
26990 65 73 5d 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  es]....<tcl>.###
269a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
269b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
269c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
269d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
269e0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
269f0 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54  ion {ON CONFLICT
26a00 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63   clause} conflic
26a10 74 20 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61  t {{conflict cla
26a20 75 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43  use} {ON CONFLIC
26a30 54 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  T}}..RecursiveBu
26a40 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e 66  bbleDiagram conf
26a50 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63  lict-clause.</tc
26a60 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f  l>..<p>The ON CO
26a70 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73  NFLICT clause is
26a80 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20   a.non-standard 
26a90 65 78 74 65 6e 73 69 6f 6e 20 73 70 65 63 69 66  extension specif
26aa0 69 63 20 74 6f 20 53 51 4c 69 74 65 20 0a 74 68  ic to SQLite .th
26ab0 61 74 20 63 61 6e 20 61 70 70 65 61 72 20 69 6e  at can appear in
26ac0 20 6d 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20   many other SQL 
26ad0 63 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20  commands..It is 
26ae0 67 69 76 65 6e 20 69 74 73 20 6f 77 6e 20 73 65  given its own se
26af0 63 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f  ction in this do
26b00 63 75 6d 65 6e 74 20 62 65 63 61 75 73 65 20 69  cument because i
26b10 74 20 69 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66  t is not.part of
26b20 20 73 74 61 6e 64 61 72 64 20 53 51 4c 20 61 6e   standard SQL an
26b30 64 20 74 68 65 72 65 66 6f 72 65 20 6d 69 67 68  d therefore migh
26b40 74 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c 69 61  t not be familia
26b50 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f  r.</p>..<p>The O
26b60 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
26b70 65 20 64 65 73 63 72 69 62 65 64 20 68 65 72 65  e described here
26b80 20 68 61 73 20 62 65 65 6e 20 61 20 70 61 72 74   has been a part
26b90 20 6f 66 0a 53 51 4c 69 74 65 20 73 69 6e 63 65   of.SQLite since
26ba0 20 62 65 66 6f 72 65 20 76 65 72 73 69 6f 6e 20   before version 
26bb0 33 2e 30 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33  3.0.0 ([dateof:3
26bc0 2e 30 2e 30 5d 29 2e 20 20 54 68 65 20 70 68 72  .0.0]).  The phr
26bd0 61 73 65 0a 22 4f 4e 26 6e 62 73 70 3b 43 4f 4e  ase."ON&nbsp;CON
26be0 46 4c 49 43 54 22 20 69 73 20 61 6c 73 6f 20 70  FLICT" is also p
26bf0 61 72 74 20 6f 66 20 5b 55 50 53 45 52 54 5d 2c  art of [UPSERT],
26c00 20 77 68 69 63 68 20 69 73 20 61 6e 20 65 78 74   which is an ext
26c10 65 6e 73 69 6f 6e 0a 74 6f 20 5b 49 4e 53 45 52  ension.to [INSER
26c20 54 5d 20 61 64 64 65 64 20 69 6e 20 76 65 72 73  T] added in vers
26c30 69 6f 6e 20 33 2e 32 34 2e 30 20 28 5b 64 61 74  ion 3.24.0 ([dat
26c40 65 6f 66 3a 33 2e 32 34 2e 30 5d 29 2e 20 20 44  eof:3.24.0]).  D
26c50 6f 20 6e 6f 74 0a 63 6f 6e 66 75 73 65 20 74 68  o not.confuse th
26c60 65 73 65 20 74 77 6f 20 73 65 70 61 72 61 74 65  ese two separate
26c70 20 75 73 65 73 20 6f 66 20 74 68 65 20 22 4f 4e   uses of the "ON
26c80 26 6e 62 73 70 3b 43 4f 4e 46 4c 49 43 54 22 20  &nbsp;CONFLICT" 
26c90 70 68 72 61 73 65 2e 0a 0a 3c 70 3e 5e 54 68 65  phrase...<p>^The
26ca0 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20   syntax for the 
26cb0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
26cc0 73 65 20 69 73 20 61 73 20 73 68 6f 77 6e 20 61  se is as shown a
26cd0 62 6f 76 65 20 66 6f 72 0a 74 68 65 20 43 52 45  bove for.the CRE
26ce0 41 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e  ATE TABLE comman
26cf0 64 2e 20 20 5e 46 6f 72 20 74 68 65 20 49 4e 53  d.  ^For the INS
26d00 45 52 54 20 61 6e 64 0a 55 50 44 41 54 45 20 63  ERT and.UPDATE c
26d10 6f 6d 6d 61 6e 64 73 2c 20 74 68 65 20 6b 65 79  ommands, the key
26d20 77 6f 72 64 73 20 22 4f 4e 20 43 4f 4e 46 4c 49  words "ON CONFLI
26d30 43 54 22 20 61 72 65 20 72 65 70 6c 61 63 65 64  CT" are replaced
26d40 20 62 79 20 22 4f 52 22 20 73 6f 20 74 68 61 74   by "OR" so that
26d50 0a 74 68 65 20 73 79 6e 74 61 78 20 72 65 61 64  .the syntax read
26d60 73 20 6d 6f 72 65 20 6e 61 74 75 72 61 6c 6c 79  s more naturally
26d70 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
26d80 69 6e 73 74 65 61 64 20 6f 66 0a 22 49 4e 53 45  instead of."INSE
26d90 52 54 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49  RT ON CONFLICT I
26da0 47 4e 4f 52 45 22 20 77 65 20 68 61 76 65 20 22  GNORE" we have "
26db0 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45  INSERT OR IGNORE
26dc0 22 2e 0a 54 68 65 20 6b 65 79 77 6f 72 64 73 20  "..The keywords 
26dd0 63 68 61 6e 67 65 20 62 75 74 20 74 68 65 20 6d  change but the m
26de0 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 63 6c  eaning of the cl
26df0 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d 65  ause is the same
26e00 0a 65 69 74 68 65 72 20 77 61 79 2e 3c 2f 70 3e  .either way.</p>
26e10 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46  ..<p>The ON CONF
26e20 4c 49 43 54 20 63 6c 61 75 73 65 20 61 70 70 6c  LICT clause appl
26e30 69 65 73 20 74 6f 20 5b 55 4e 49 51 55 45 5d 2c  ies to [UNIQUE],
26e40 20 5b 4e 4f 54 20 4e 55 4c 4c 5d 2c 0a 5b 43 48   [NOT NULL],.[CH
26e50 45 43 4b 5d 2c 20 61 6e 64 20 5b 50 52 49 4d 41  ECK], and [PRIMA
26e60 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69  RY KEY] constrai
26e70 6e 74 73 2e 0a 54 68 65 20 4f 4e 20 43 4f 4e 46  nts..The ON CONF
26e80 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 20 64  LICT algorithm d
26e90 6f 65 73 20 6e 6f 74 0a 61 70 70 6c 79 20 74 6f  oes not.apply to
26ea0 20 5b 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f   [FOREIGN KEY co
26eb0 6e 73 74 72 61 69 6e 74 73 5d 2e 0a 54 68 65 72  nstraints]..Ther
26ec0 65 20 61 72 65 20 66 69 76 65 20 63 6f 6e 66 6c  e are five confl
26ed0 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
26ee0 6c 67 6f 72 69 74 68 6d 20 63 68 6f 69 63 65 73  lgorithm choices
26ef0 3a 0a 52 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f 52  :.ROLLBACK, ABOR
26f00 54 2c 20 46 41 49 4c 2c 20 49 47 4e 4f 52 45 2c  T, FAIL, IGNORE,
26f10 20 61 6e 64 20 52 45 50 4c 41 43 45 2e 0a 5e 54   and REPLACE..^T
26f20 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c  he default confl
26f30 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
26f40 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52  lgorithm is ABOR
26f50 54 2e 20 20 54 68 69 73 0a 69 73 20 77 68 61 74  T.  This.is what
26f60 20 74 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a   they mean:</p>.
26f70 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c  .<dl>.<dt><b>ROL
26f80 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  LBACK</b></dt>.<
26f90 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20  dd><p> ^When an 
26fa0 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74  applicable const
26fb0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
26fc0 6f 63 63 75 72 73 2c 20 74 68 65 20 52 4f 4c 4c  occurs, the ROLL
26fd0 42 41 43 4b 0a 72 65 73 6f 6c 75 74 69 6f 6e 20  BACK.resolution 
26fe0 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73  algorithm aborts
26ff0 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c   the current SQL
27000 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 0a   statement with.
27010 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  an SQLITE_CONSTR
27020 41 49 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 72  AINT error and r
27030 6f 6c 6c 73 20 62 61 63 6b 20 74 68 65 20 63 75  olls back the cu
27040 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
27050 6e 2e 0a 5e 49 66 20 6e 6f 20 74 72 61 6e 73 61  n..^If no transa
27060 63 74 69 6f 6e 20 69 73 0a 61 63 74 69 76 65 20  ction is.active 
27070 28 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  (other than the 
27080 69 6d 70 6c 69 65 64 20 74 72 61 6e 73 61 63 74  implied transact
27090 69 6f 6e 20 74 68 61 74 20 69 73 20 63 72 65 61  ion that is crea
270a0 74 65 64 20 6f 6e 20 65 76 65 72 79 0a 63 6f 6d  ted on every.com
270b0 6d 61 6e 64 29 20 74 68 65 6e 20 74 68 65 20 52  mand) then the R
270c0 4f 4c 4c 42 41 43 4b 20 72 65 73 6f 6c 75 74 69  OLLBACK resoluti
270d0 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72  on algorithm wor
270e0 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  ks the same as t
270f0 68 65 0a 41 42 4f 52 54 20 61 6c 67 6f 72 69 74  he.ABORT algorit
27100 68 6d 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  hm.</p></dd>..<d
27110 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f  t><b>ABORT</b></
27120 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65  dt>.<dd><p> ^Whe
27130 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20  n an applicable 
27140 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
27150 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
27160 20 41 42 4f 52 54 0a 72 65 73 6f 6c 75 74 69 6f   ABORT.resolutio
27170 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72  n algorithm abor
27180 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 53  ts the current S
27190 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 77 69 74  QL statement.wit
271a0 68 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53  h an SQLITE_CONS
271b0 54 52 41 49 4e 54 20 65 72 72 6f 72 20 61 6e 64  TRAINT error and
271c0 20 62 61 63 6b 73 20 6f 75 74 20 61 6e 79 20 63   backs out any c
271d0 68 61 6e 67 65 73 0a 6d 61 64 65 20 62 79 20 74  hanges.made by t
271e0 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73  he current SQL s
271f0 74 61 74 65 6d 65 6e 74 3b 20 62 75 74 20 63 68  tatement; but ch
27200 61 6e 67 65 73 20 63 61 75 73 65 64 0a 62 79 20  anges caused.by 
27210 70 72 69 6f 72 20 53 51 4c 20 73 74 61 74 65 6d  prior SQL statem
27220 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 20  ents within the 
27230 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  same transaction
27240 20 61 72 65 20 70 72 65 73 65 72 76 65 64 20 61   are preserved a
27250 6e 64 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69  nd the.transacti
27260 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69 76  on remains activ
27270 65 2e 0a 54 68 69 73 20 69 73 20 74 68 65 20 64  e..This is the d
27280 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72 20  efault behavior 
27290 61 6e 64 20 74 68 65 20 62 65 68 61 76 69 6f 72  and the behavior
272a0 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
272b0 65 20 53 51 4c 0a 73 74 61 6e 64 61 72 64 2e 3c  e SQL.standard.<
272c0 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
272d0 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  >FAIL</b></dt>.<
272e0 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20  dd><p> ^When an 
272f0 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74  applicable const
27300 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
27310 6f 63 63 75 72 73 2c 20 74 68 65 20 46 41 49 4c  occurs, the FAIL
27320 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f  .resolution algo
27330 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65  rithm aborts the
27340 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61   current SQL sta
27350 74 65 6d 65 6e 74 20 77 69 74 68 20 61 6e 0a 53  tement with an.S
27360 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
27370 20 65 72 72 6f 72 2e 20 20 5e 42 75 74 20 74 68   error.  ^But th
27380 65 20 46 41 49 4c 20 72 65 73 6f 6c 75 74 69 6f  e FAIL resolutio
27390 6e 20 64 6f 65 73 20 6e 6f 74 0a 62 61 63 6b 20  n does not.back 
273a0 6f 75 74 20 70 72 69 6f 72 20 63 68 61 6e 67 65  out prior change
273b0 73 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61  s of the SQL sta
273c0 74 65 6d 65 6e 74 20 74 68 61 74 20 66 61 69 6c  tement that fail
273d0 65 64 20 6e 6f 72 20 64 6f 65 73 0a 69 74 20 65  ed nor does.it e
273e0 6e 64 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  nd the transacti
273f0 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65  on..^For example
27400 2c 20 69 66 20 61 6e 20 55 50 44 41 54 45 0a 73  , if an UPDATE.s
27410 74 61 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74  tatement encount
27420 65 72 65 64 20 61 20 63 6f 6e 73 74 72 61 69 6e  ered a constrain
27430 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74  t violation on t
27440 68 65 20 31 30 30 74 68 20 72 6f 77 20 74 68 61  he 100th row tha
27450 74 0a 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f  t.it attempts to
27460 20 75 70 64 61 74 65 2c 20 74 68 65 6e 20 74 68   update, then th
27470 65 20 66 69 72 73 74 20 39 39 20 72 6f 77 20 63  e first 99 row c
27480 68 61 6e 67 65 73 20 61 72 65 20 70 72 65 73 65  hanges are prese
27490 72 76 65 64 0a 62 75 74 20 63 68 61 6e 67 65 73  rved.but changes
274a0 20 74 6f 20 72 6f 77 73 20 31 30 30 20 61 6e 64   to rows 100 and
274b0 20 62 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63   beyond never oc
274c0 63 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  cur.</p>..<p>The
274d0 20 46 41 49 4c 20 62 65 68 61 76 69 6f 72 20 6f   FAIL behavior o
274e0 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 75 6e  nly works for un
274f0 69 71 75 65 6e 65 73 73 2c 20 4e 4f 54 20 4e 55  iqueness, NOT NU
27500 4c 4c 2c 20 61 6e 64 20 43 48 45 43 4b 20 0a 63  LL, and CHECK .c
27510 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 41 20 5b  onstraints.  A [
27520 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
27530 74 72 61 69 6e 74 5d 20 76 69 6f 6c 61 74 69 6f  traint] violatio
27540 6e 20 63 61 75 73 65 73 20 61 6e 20 41 42 4f 52  n causes an ABOR
27550 54 2e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  T..</p></dd>..<d
27560 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c  t><b>IGNORE</b><
27570 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68  /dt>.<dd><p> ^Wh
27580 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65  en an applicable
27590 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
275a0 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74  ation occurs, .t
275b0 68 65 20 49 47 4e 4f 52 45 20 72 65 73 6f 6c 75  he IGNORE resolu
275c0 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 73  tion algorithm s
275d0 6b 69 70 73 20 74 68 65 20 6f 6e 65 20 72 6f 77  kips the one row
275e0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74   that contains.t
275f0 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
27600 6f 6c 61 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 74  olation and cont
27610 69 6e 75 65 73 20 70 72 6f 63 65 73 73 69 6e 67  inues processing
27620 20 73 75 62 73 65 71 75 65 6e 74 20 72 6f 77 73   subsequent rows
27630 0a 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74  .of the SQL stat
27640 65 6d 65 6e 74 20 61 73 20 69 66 20 6e 6f 74 68  ement as if noth
27650 69 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67 2e 0a  ing went wrong..
27660 4f 74 68 65 72 20 72 6f 77 73 20 62 65 66 6f 72  Other rows befor
27670 65 20 61 6e 64 20 61 66 74 65 72 20 74 68 65 20  e and after the 
27680 72 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e  row that.contain
27690 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
276a0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
276b0 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61  inserted or upda
276c0 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e  ted.normally. ^N
276d0 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  o error is retur
276e0 6e 65 64 20 66 6f 72 20 75 6e 69 71 75 65 6e 65  ned for uniquene
276f0 73 73 2c 20 4e 4f 54 20 4e 55 4c 4c 2c 20 61 6e  ss, NOT NULL, an
27700 64 0a 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  d.UNIQUE constra
27710 69 6e 74 20 65 72 72 6f 72 73 20 77 68 65 6e 20  int errors when 
27720 74 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e 66 6c  the IGNORE confl
27730 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61  ict resolution.a
27740 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
27750 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 74 68 65  .  ^However, the
27760 20 49 47 4e 4f 52 45 20 63 6f 6e 66 6c 69 63 74   IGNORE conflict
27770 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f   resolution.algo
27780 72 69 74 68 6d 20 77 6f 72 6b 73 20 6c 69 6b 65  rithm works like
27790 20 41 42 4f 52 54 20 66 6f 72 20 5b 66 6f 72 65   ABORT for [fore
277a0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
277b0 6e 74 5d 20 65 72 72 6f 72 73 2e 0a 3c 2f 70 3e  nt] errors..</p>
277c0 0a 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52  .</dd>..<dt><b>R
277d0 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a  EPLACE</b></dt>.
277e0 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 20  <dd><p> ^When a 
277f0 5b 55 4e 49 51 55 45 5d 20 6f 72 20 5b 50 52 49  [UNIQUE] or [PRI
27800 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72  MARY KEY] constr
27810 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
27820 63 63 75 72 73 2c 20 0a 74 68 65 20 52 45 50 4c  ccurs, .the REPL
27830 41 43 45 20 61 6c 67 6f 72 69 74 68 6d 0a 64 65  ACE algorithm.de
27840 6c 65 74 65 73 20 70 72 65 2d 65 78 69 73 74 69  letes pre-existi
27850 6e 67 20 72 6f 77 73 20 74 68 61 74 20 61 72 65  ng rows that are
27860 20 63 61 75 73 69 6e 67 20 74 68 65 20 63 6f 6e   causing the con
27870 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
27880 6e 0a 70 72 69 6f 72 20 74 6f 20 69 6e 73 65 72  n.prior to inser
27890 74 69 6e 67 20 6f 72 20 75 70 64 61 74 69 6e 67  ting or updating
278a0 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
278b0 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64   and the command
278c0 20 63 6f 6e 74 69 6e 75 65 73 20 0a 65 78 65 63   continues .exec
278d0 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 0a  uting normally..
278e0 5e 49 66 20 61 20 5b 4e 4f 54 20 4e 55 4c 4c 5d  ^If a [NOT NULL]
278f0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
27900 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
27910 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69  e REPLACE confli
27920 63 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 72 65  ct.resolution re
27930 70 6c 61 63 65 73 20 74 68 65 20 4e 55 4c 4c 20  places the NULL 
27940 76 61 6c 75 65 20 77 69 74 68 0a 74 68 65 20 64  value with.the d
27950 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
27960 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2c 20 6f 72   that column, or
27970 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68   if the column h
27980 61 73 20 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61  as no default.va
27990 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20 41 42  lue, then the AB
279a0 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ORT algorithm is
279b0 20 75 73 65 64 2e 0a 5e 49 66 20 61 20 5b 43 48   used..^If a [CH
279c0 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 5d 20  ECK constraint] 
279d0 6f 72 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20  or [foreign key 
279e0 63 6f 6e 73 74 72 61 69 6e 74 5d 20 76 69 6f 6c  constraint] viol
279f0 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74  ation occurs, .t
27a00 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c  he REPLACE confl
27a10 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
27a20 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20 6c  lgorithm works l
27a30 69 6b 65 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a  ike ABORT.</p>..
27a40 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 52 45 50  <p>^When the REP
27a50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  LACE conflict re
27a60 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67  solution strateg
27a70 79 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20 69  y deletes rows i
27a80 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69 73  n order to.satis
27a90 66 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c  fy a constraint,
27aa0 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
27ab0 20 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67 65   | delete trigge
27ac0 72 73 5d 20 66 69 72 65 20 69 66 20 61 6e 64 20  rs] fire if and 
27ad0 6f 6e 6c 79 20 69 66 0a 5b 72 65 63 75 72 73 69  only if.[recursi
27ae0 76 65 5f 74 72 69 67 67 65 72 73 20 70 72 61 67  ve_triggers prag
27af0 6d 61 20 7c 20 72 65 63 75 72 73 69 76 65 20 74  ma | recursive t
27b00 72 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e 61  riggers] are ena
27b10 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  bled.</p>..<p>^T
27b20 68 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64 61  he [sqlite3_upda
27b30 74 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74 65  te_hook | update
27b40 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69 6e   hook] is not in
27b50 76 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20 74  voked for rows t
27b60 68 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64 20  hat.are deleted 
27b70 62 79 20 74 68 65 20 52 45 50 4c 41 43 45 20 63  by the REPLACE c
27b80 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
27b90 6f 6e 20 73 74 72 61 74 65 67 79 2e 20 20 5e 4e  on strategy.  ^N
27ba0 6f 72 20 64 6f 65 73 0a 52 45 50 4c 41 43 45 20  or does.REPLACE 
27bb0 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 5b 73  increment the [s
27bc0 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20 7c  qlite3_changes |
27bd0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d   change counter]
27be0 2e 0a 54 68 65 20 65 78 63 65 70 74 69 6f 6e 61  ..The exceptiona
27bf0 6c 20 62 65 68 61 76 69 6f 72 73 20 64 65 66 69  l behaviors defi
27c00 6e 65 64 20 69 6e 20 74 68 69 73 20 70 61 72 61  ned in this para
27c10 67 72 61 70 68 20 6d 69 67 68 74 20 63 68 61 6e  graph might chan
27c20 67 65 20 0a 69 6e 20 61 20 66 75 74 75 72 65 20  ge .in a future 
27c30 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64  release.</p>.</d
27c40 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61 6c 67 6f  l>..<p>^The algo
27c50 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20  rithm specified 
27c60 69 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65  in the OR clause
27c70 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 72   of an INSERT or
27c80 20 55 50 44 41 54 45 0a 6f 76 65 72 72 69 64 65   UPDATE.override
27c90 73 20 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20  s any algorithm 
27ca0 73 70 65 63 69 66 69 65 64 20 69 6e 20 61 20 43  specified in a C
27cb0 52 45 41 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66  REATE TABLE..^If
27cc0 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69 73   no algorithm is
27cd0 20 73 70 65 63 69 66 69 65 64 20 61 6e 79 77 68   specified anywh
27ce0 65 72 65 2c 20 74 68 65 20 41 42 4f 52 54 20 61  ere, the ABORT a
27cf0 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
27d00 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
27d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27d50 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
27d60 69 6f 6e 20 52 45 49 4e 44 45 58 20 72 65 69 6e  ion REINDEX rein
27d70 64 65 78 20 52 45 49 4e 44 45 58 0a 0a 52 65 63  dex REINDEX..Rec
27d80 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
27d90 72 61 6d 20 72 65 69 6e 64 65 78 2d 73 74 6d 74  ram reindex-stmt
27da0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
27db0 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64   REINDEX command
27dc0 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 6c 65   is used to dele
27dd0 74 65 20 61 6e 64 20 72 65 63 72 65 61 74 65 20  te and recreate 
27de0 69 6e 64 69 63 65 73 20 66 72 6f 6d 20 73 63 72  indices from scr
27df0 61 74 63 68 2e 0a 54 68 69 73 20 69 73 20 75 73  atch..This is us
27e00 65 66 75 6c 20 77 68 65 6e 20 74 68 65 20 64 65  eful when the de
27e10 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f  finition of a co
27e20 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
27e30 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f   has changed..</
27e40 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52  p>..<p>^If the R
27e50 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20 69  EINDEX keyword i
27e60 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62  s not followed b
27e70 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65  y a collation-se
27e80 71 75 65 6e 63 65 20 6f 72 20 64 61 74 61 62 61  quence or databa
27e90 73 65 20 0a 6f 62 6a 65 63 74 20 69 64 65 6e 74  se .object ident
27ea0 69 66 69 65 72 2c 20 74 68 65 6e 20 61 6c 6c 20  ifier, then all 
27eb0 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61  indices in all a
27ec0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
27ed0 73 20 61 72 65 20 72 65 62 75 69 6c 74 2e 0a 0a  s are rebuilt...
27ee0 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e 44  <p>^If the REIND
27ef0 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 66 6f  EX keyword is fo
27f00 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c 6c  llowed by a coll
27f10 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6e  ation-sequence n
27f20 61 6d 65 2c 20 74 68 65 6e 0a 61 6c 6c 20 69 6e  ame, then.all in
27f30 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74  dices in all att
27f40 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
27f50 74 68 61 74 20 75 73 65 20 74 68 65 20 6e 61 6d  that use the nam
27f60 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  ed collation seq
27f70 75 65 6e 63 65 73 0a 61 72 65 20 72 65 63 72 65  uences.are recre
27f80 61 74 65 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20  ated. ..<p>^Or, 
27f90 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
27fa0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
27fb0 52 45 49 4e 44 45 58 20 69 64 65 6e 74 69 66 69  REINDEX identifi
27fc0 65 73 20 61 20 73 70 65 63 69 66 69 63 20 0a 64  es a specific .d
27fd0 61 74 61 62 61 73 65 20 74 61 62 6c 65 2c 20 74  atabase table, t
27fe0 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 20  hen all indices 
27ff0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
28000 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 61  database table a
28010 72 65 20 72 65 62 75 69 6c 74 2e 20 0a 5e 49 66  re rebuilt. .^If
28020 20 69 74 20 69 64 65 6e 74 69 66 69 65 73 20 61   it identifies a
28030 20 73 70 65 63 69 66 69 63 20 64 61 74 61 62 61   specific databa
28040 73 65 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 6a  se index, then j
28050 75 73 74 20 74 68 61 74 20 69 6e 64 65 78 20 69  ust that index i
28060 73 20 72 65 63 72 65 61 74 65 64 2e 0a 0a 3c 70  s recreated...<p
28070 3e 5e 46 6f 72 20 61 20 63 6f 6d 6d 61 6e 64 20  >^For a command 
28080 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 52 45 49  of the form "REI
28090 4e 44 45 58 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e  NDEX <i>name</i>
280a0 22 2c 20 61 20 6d 61 74 63 68 0a 61 67 61 69 6e  ", a match.again
280b0 73 74 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 6c 61  st <yyterm>colla
280c0 74 69 6f 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  tion-name</yyter
280d0 6d 3e 20 74 61 6b 65 73 20 70 72 65 63 65 64 65  m> takes precede
280e0 6e 63 65 20 6f 76 65 72 20 61 20 6d 61 74 63 68  nce over a match
280f0 0a 61 67 61 69 6e 73 74 20 3c 79 79 74 65 72 6d  .against <yyterm
28100 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 79 79 74  >index-name</yyt
28110 65 72 6d 3e 20 6f 72 20 3c 79 79 74 65 72 6d 3e  erm> or <yyterm>
28120 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  table-name</yyte
28130 72 6d 3e 2e 0a 54 68 69 73 20 61 6d 62 69 67 75  rm>..This ambigu
28140 69 74 79 20 69 6e 20 74 68 65 20 73 79 6e 74 61  ity in the synta
28150 78 20 6d 61 79 20 62 65 20 61 76 6f 69 64 65 64  x may be avoided
28160 20 62 79 20 61 6c 77 61 79 73 20 73 70 65 63 69   by always speci
28170 66 79 69 6e 67 20 61 0a 3c 79 79 74 65 72 6d 3e  fying a.<yyterm>
28180 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74  schema-name</yyt
28190 65 72 6d 3e 20 77 68 65 6e 20 72 65 69 6e 64 65  erm> when reinde
281a0 78 69 6e 67 20 61 20 73 70 65 63 69 66 69 63 20  xing a specific 
281b0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
281c0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
281d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
281e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
281f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28210 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52  ######.Section R
28220 45 50 4c 41 43 45 20 72 65 70 6c 61 63 65 20 52  EPLACE replace R
28230 45 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a  EPLACE..</tcl>..
28240 3c 70 3e 5e 54 68 65 20 52 45 50 4c 41 43 45 20  <p>^The REPLACE 
28250 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 61 6c  command is an al
28260 69 61 73 20 66 6f 72 20 74 68 65 20 22 5b 4f 4e  ias for the "[ON
28270 20 43 4f 4e 46 4c 49 43 54 20 7c 20 49 4e 53 45   CONFLICT | INSE
28280 52 54 20 4f 52 20 52 45 50 4c 41 43 45 5d 22 0a  RT OR REPLACE]".
28290 76 61 72 69 61 6e 74 20 6f 66 20 74 68 65 20 5b  variant of the [
282a0 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e  INSERT] command.
282b0 20 20 0a 54 68 69 73 20 61 6c 69 61 73 20 69 73    .This alias is
282c0 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 63 6f   provided for co
282d0 6d 70 61 74 69 62 69 6c 69 74 79 20 6f 74 68 65  mpatibility othe
282e0 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65  r SQL database e
282f0 6e 67 69 6e 65 73 2e 20 20 53 65 65 20 74 68 65  ngines.  See the
28300 20 0a 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61   .[INSERT] comma
28310 6e 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  nd documentation
28320 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
28330 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e  information.</p>
28340 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23    ..<tcl>.######
28350 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28390 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
283a0 6e 20 7b 57 49 54 48 20 63 6c 61 75 73 65 7d 20  n {WITH clause} 
283b0 77 69 74 68 20 7b 7b 63 6f 6d 6d 6f 6e 20 74 61  with {{common ta
283c0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d  ble expressions}
283d0 20 57 49 54 48 7d 0a 0a 52 65 63 75 72 73 69 76   WITH}..Recursiv
283e0 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 77  eBubbleDiagram w
283f0 69 74 68 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c  ith-clause.</tcl
28400 3e 0a 0a 3c 70 3e 43 6f 6d 6d 6f 6e 20 54 61 62  >..<p>Common Tab
28410 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73 20 6f  le Expressions o
28420 72 20 43 54 45 73 20 61 63 74 20 6c 69 6b 65 20  r CTEs act like 
28430 74 65 6d 70 6f 72 61 72 79 20 5b 76 69 65 77 73  temporary [views
28440 5d 20 74 68 61 74 20 65 78 69 73 74 0a 6f 6e 6c  ] that exist.onl
28450 79 20 66 6f 72 20 74 68 65 20 64 75 72 61 74 69  y for the durati
28460 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 53  on of a single S
28470 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  QL statement.  T
28480 68 65 72 65 20 61 72 65 20 74 77 6f 20 6b 69 6e  here are two kin
28490 64 73 20 6f 66 0a 63 6f 6d 6d 6f 6e 20 74 61 62  ds of.common tab
284a0 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 3a 20  le expressions: 
284b0 22 6f 72 64 69 6e 61 72 79 22 20 61 6e 64 20 22  "ordinary" and "
284c0 72 65 63 75 72 73 69 76 65 22 2e 20 4f 72 64 69  recursive". Ordi
284d0 6e 61 72 79 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62  nary .common tab
284e0 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  le expressions a
284f0 72 65 20 68 65 6c 70 66 75 6c 20 66 6f 72 20 6d  re helpful for m
28500 61 6b 69 6e 67 0a 71 75 65 72 69 65 73 20 65 61  aking.queries ea
28510 73 69 65 72 20 74 6f 20 75 6e 64 65 72 73 74 61  sier to understa
28520 6e 64 20 62 79 20 66 61 63 74 6f 72 69 6e 67 0a  nd by factoring.
28530 73 75 62 71 75 65 72 69 65 73 20 6f 75 74 20 6f  subqueries out o
28540 66 20 74 68 65 20 6d 61 69 6e 20 53 51 4c 20 73  f the main SQL s
28550 74 61 74 65 6d 65 6e 74 2e 0a 52 65 63 75 72 73  tatement..Recurs
28560 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ive common table
28570 20 65 78 70 72 65 73 73 69 6f 6e 73 0a 70 72 6f   expressions.pro
28580 76 69 64 65 20 74 68 65 20 61 62 69 6c 69 74 79  vide the ability
28590 20 74 6f 20 64 6f 20 68 69 65 72 61 72 63 68 69   to do hierarchi
285a0 63 61 6c 20 6f 72 0a 72 65 63 75 72 73 69 76 65  cal or.recursive
285b0 20 71 75 65 72 69 65 73 20 6f 66 20 74 72 65 65   queries of tree
285c0 73 20 61 6e 64 20 67 72 61 70 68 73 2c 20 61 20  s and graphs, a 
285d0 63 61 70 61 62 69 6c 69 74 79 0a 74 68 61 74 20  capability.that 
285e0 69 73 20 6e 6f 74 20 6f 74 68 65 72 77 69 73 65  is not otherwise
285f0 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68   available in th
28600 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a  e SQL language..
28610 0a 3c 70 3e 41 6c 6c 20 63 6f 6d 6d 6f 6e 20 74  .<p>All common t
28620 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
28630 20 28 6f 72 64 69 6e 61 72 79 20 61 6e 64 20 72   (ordinary and r
28640 65 63 75 72 73 69 76 65 29 20 61 72 65 20 0a 63  ecursive) are .c
28650 72 65 61 74 65 64 20 62 79 20 70 72 65 70 65 6e  reated by prepen
28660 64 69 6e 67 20 61 20 57 49 54 48 20 63 6c 61 75  ding a WITH clau
28670 73 65 20 69 6e 20 66 72 6f 6e 74 20 6f 66 20 61  se in front of a
28680 20 5b 53 45 4c 45 43 54 5d 2c 20 5b 49 4e 53 45   [SELECT], [INSE
28690 52 54 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 0a 6f  RT], [DELETE],.o
286a0 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65  r [UPDATE] state
286b0 6d 65 6e 74 2e 20 20 41 20 73 69 6e 67 6c 65 20  ment.  A single 
286c0 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 20  WITH clause can 
286d0 73 70 65 63 69 66 79 20 6f 6e 65 20 6f 72 20 6d  specify one or m
286e0 6f 72 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ore.common table
286f0 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 73 6f   expressions, so
28700 6d 65 20 6f 66 20 77 68 69 63 68 20 61 72 65 20  me of which are 
28710 6f 72 64 69 6e 61 72 79 20 61 6e 64 20 73 6f 6d  ordinary and som
28720 65 20 6f 66 20 77 68 69 63 68 0a 61 72 65 20 72  e of which.are r
28730 65 63 75 72 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e  ecursive...<tcl>
28740 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64 69  hd_fragment ordi
28750 6e 61 72 79 63 74 65 20 7b 6f 72 64 69 6e 61 72  narycte {ordinar
28760 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  y common table e
28770 78 70 72 65 73 73 69 6f 6e 73 7d 3c 2f 74 63 6c  xpressions}</tcl
28780 3e 0a 3c 68 33 3e 4f 72 64 69 6e 61 72 79 20 43  >.<h3>Ordinary C
28790 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72  ommon Table Expr
287a0 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  essions</h3>..<p
287b0 3e 41 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d  >An ordinary com
287c0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
287d0 73 69 6f 6e 20 77 6f 72 6b 73 20 61 73 20 69 66  sion works as if
287e0 20 69 74 20 77 65 72 65 20 61 20 5b 76 69 65 77   it were a [view
287f0 5d 20 74 68 61 74 0a 65 78 69 73 74 73 20 66 6f  ] that.exists fo
28800 72 20 74 68 65 20 64 75 72 61 74 69 6f 6e 20 6f  r the duration o
28810 66 20 61 20 73 69 6e 67 6c 65 20 73 74 61 74 65  f a single state
28820 6d 65 6e 74 2e 20 20 4f 72 64 69 6e 61 72 79 20  ment.  Ordinary 
28830 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 0a 65 78 70  common table.exp
28840 72 65 73 73 69 6f 6e 73 20 61 72 65 20 75 73 65  ressions are use
28850 66 75 6c 20 66 6f 72 20 66 61 63 74 6f 72 69 6e  ful for factorin
28860 67 20 6f 75 74 20 73 75 62 71 75 65 72 69 65 73  g out subqueries
28870 20 61 6e 64 20 6d 61 6b 69 6e 67 20 74 68 65 20   and making the 
28880 6f 76 65 72 61 6c 6c 0a 53 51 4c 20 73 74 61 74  overall.SQL stat
28890 65 6d 65 6e 74 20 65 61 73 69 65 72 20 74 6f 20  ement easier to 
288a0 72 65 61 64 20 61 6e 64 20 75 6e 64 65 72 73 74  read and underst
288b0 61 6e 64 2e 0a 0a 3c 70 3e 41 20 57 49 54 48 20  and...<p>A WITH 
288c0 63 6c 61 75 73 65 20 63 61 6e 20 63 6f 6e 74 61  clause can conta
288d0 69 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d  in ordinary comm
288e0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
288f0 69 6f 6e 73 20 65 76 65 6e 20 69 66 0a 69 74 20  ions even if.it 
28900 69 6e 63 6c 75 64 65 73 20 74 68 65 20 52 45 43  includes the REC
28910 55 52 53 49 56 45 20 6b 65 79 77 6f 72 64 2e 20  URSIVE keyword. 
28920 20 54 68 65 20 75 73 65 20 6f 66 20 52 45 43 55   The use of RECU
28930 52 53 49 56 45 20 64 6f 65 73 20 6e 6f 74 20 66  RSIVE does not f
28940 6f 72 63 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c  orce.common tabl
28950 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
28960 20 62 65 20 72 65 63 75 72 73 69 76 65 2e 0a 0a   be recursive...
28970 3c 74 63 6c 3e 0a 68 64 5f 66 72 61 67 6d 65 6e  <tcl>.hd_fragmen
28980 74 20 72 65 63 75 72 73 69 76 65 63 74 65 20 7b  t recursivecte {
28990 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e  recursive common
289a0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
289b0 6e 73 7d 20 5c 0a 7b 72 65 63 75 72 73 69 76 65  ns} \.{recursive
289c0 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
289d0 70 72 65 73 73 69 6f 6e 7d 20 7b 72 65 63 75 72  pression} {recur
289e0 73 69 76 65 20 71 75 65 72 79 7d 0a 3c 2f 74 63  sive query}.</tc
289f0 6c 3e 0a 3c 68 33 3e 52 65 63 75 72 73 69 76 65  l>.<h3>Recursive
28a00 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78   Common Table Ex
28a10 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a  pressions</h3>..
28a20 3c 70 3e 41 20 72 65 63 75 72 73 69 76 65 20 63  <p>A recursive c
28a30 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
28a40 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75 73  ession can be us
28a50 65 64 20 74 6f 20 77 72 69 74 65 20 61 20 71 75  ed to write a qu
28a60 65 72 79 20 74 68 61 74 0a 77 61 6c 6b 73 20 61  ery that.walks a
28a70 20 74 72 65 65 20 6f 72 20 67 72 61 70 68 2e 20   tree or graph. 
28a80 20 41 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d   A recursive com
28a90 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
28aa0 73 69 6f 6e 20 68 61 73 20 74 68 65 20 73 61 6d  sion has the sam
28ab0 65 0a 62 61 73 69 63 20 73 79 6e 74 61 78 20 61  e.basic syntax a
28ac0 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f  s an ordinary co
28ad0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
28ae0 73 73 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20  ssion, but with 
28af0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 61 64  the following.ad
28b00 64 69 74 69 6f 6e 61 6c 20 66 65 61 74 75 72 65  ditional feature
28b10 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 54 68  s:..<ol>.<li> Th
28b20 65 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d  e "[select-stmt]
28b30 22 0a 20 20 20 20 20 6d 75 73 74 20 62 65 20 61  ".     must be a
28b40 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63   [compound selec
28b50 74 5d 20 77 68 65 72 65 20 74 68 65 20 72 69 67  t] where the rig
28b60 68 74 2d 6d 6f 73 74 20 5b 63 6f 6d 70 6f 75 6e  ht-most [compoun
28b70 64 2d 6f 70 65 72 61 74 6f 72 5d 20 69 73 0a 20  d-operator] is. 
28b80 20 20 20 20 65 69 74 68 65 72 20 55 4e 49 4f 4e      either UNION
28b90 20 6f 72 20 55 4e 49 4f 4e 20 41 4c 4c 2e 0a 3c   or UNION ALL..<
28ba0 6c 69 3e 20 54 68 65 20 74 61 62 6c 65 20 6e 61  li> The table na
28bb0 6d 65 64 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d  med on the left-
28bc0 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65  hand side of the
28bd0 20 41 53 20 6b 65 79 77 6f 72 64 20 6d 75 73 74   AS keyword must
28be0 20 61 70 70 65 61 72 0a 20 20 20 20 20 65 78 61   appear.     exa
28bf0 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65  ctly once in the
28c00 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
28c10 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 53  the right-most S
28c20 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a  ELECT statement.
28c30 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6d 70       of the comp
28c40 6f 75 6e 64 20 73 65 6c 65 63 74 2c 20 61 6e 64  ound select, and
28c50 20 6e 6f 77 68 65 72 65 20 65 6c 73 65 2e 0a 3c   nowhere else..<
28c60 6c 69 3e 20 54 68 65 20 72 69 67 68 74 2d 6d 6f  li> The right-mo
28c70 73 74 20 53 45 4c 45 43 54 20 6f 66 20 74 68 65  st SELECT of the
28c80 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74   compound select
28c90 20 6d 75 73 74 20 6e 6f 74 20 6d 61 6b 65 20 75   must not make u
28ca0 73 65 20 6f 66 0a 20 20 20 20 20 5b 41 67 67 72  se of.     [Aggr
28cb0 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e 73 7c  egate Functions|
28cc0 61 67 67 72 65 67 61 74 65 5d 20 6f 72 20 5b 77  aggregate] or [w
28cd0 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 5d  indow functions]
28ce0 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20 70  ..</ol>..<p>To p
28cf0 75 74 20 69 74 20 61 6e 6f 74 68 65 72 20 77 61  ut it another wa
28d00 79 2c 20 61 20 72 65 63 75 72 73 69 76 65 20 63  y, a recursive c
28d10 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
28d20 65 73 73 69 6f 6e 20 6d 75 73 74 0a 6c 6f 6f 6b  ession must.look
28d30 20 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77   like the follow
28d40 69 6e 67 3a 0a 0a 3c 74 63 6c 3e 52 65 63 75 72  ing:..<tcl>Recur
28d50 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
28d60 6d 20 72 65 63 75 72 73 69 76 65 2d 63 74 65 3c  m recursive-cte<
28d70 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61 6c 6c 20 74  /tcl>..<p>Call t
28d80 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 62  he table named b
28d90 79 20 74 68 65 20 5b 63 74 65 2d 74 61 62 6c 65  y the [cte-table
28da0 2d 6e 61 6d 65 5d 20 69 6e 20 61 20 72 65 63 75  -name] in a recu
28db0 72 73 69 76 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62  rsive.common tab
28dc0 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  le expression th
28dd0 65 20 22 72 65 63 75 72 73 69 76 65 20 74 61 62  e "recursive tab
28de0 6c 65 22 2e 0a 49 6e 20 74 68 65 20 5b 72 65 63  le"..In the [rec
28df0 75 72 73 69 76 65 2d 63 74 65 5d 20 62 75 62 62  ursive-cte] bubb
28e00 6c 65 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65  le diagram above
28e10 2c 20 74 68 65 20 72 65 63 75 72 73 69 76 65 0a  , the recursive.
28e20 74 61 62 6c 65 20 6d 75 73 74 20 61 70 70 65 61  table must appea
28e30 72 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69  r exactly once i
28e40 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
28e50 65 20 6f 66 20 74 68 65 20 0a 3c 79 79 74 65 72  e of the .<yyter
28e60 6d 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  m>recursive-sele
28e70 63 74 3c 2f 79 79 74 65 72 6d 3e 0a 61 6e 64 20  ct</yyterm>.and 
28e80 6d 75 73 74 20 6e 6f 74 20 61 70 70 65 61 72 20  must not appear 
28e90 61 6e 79 77 68 65 72 65 20 65 6c 73 65 20 69 6e  anywhere else in
28ea0 20 65 69 74 68 65 72 20 74 68 65 0a 3c 79 79 74   either the.<yyt
28eb0 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65  erm>initial-sele
28ec0 63 74 3c 2f 79 79 74 65 72 6d 3e 20 6f 72 20 74  ct</yyterm> or t
28ed0 68 65 0a 3c 79 79 74 65 72 6d 3e 72 65 63 75 72  he.<yyterm>recur
28ee0 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74  sive-select</yyt
28ef0 65 72 6d 3e 2c 20 69 6e 63 6c 75 64 69 6e 67 20  erm>, including 
28f00 73 75 62 71 75 65 72 69 65 73 2e 0a 54 68 65 20  subqueries..The 
28f10 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d  <yyterm>initial-
28f20 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20  select</yyterm> 
28f30 6d 61 79 20 62 65 0a 61 20 5b 63 6f 6d 70 6f 75  may be.a [compou
28f40 6e 64 20 73 65 6c 65 63 74 5d 2c 20 62 75 74 20  nd select], but 
28f50 69 74 20 6d 61 79 20 6e 6f 74 20 69 6e 63 6c 75  it may not inclu
28f60 64 65 20 61 6e 20 4f 52 44 45 52 20 42 59 2c 20  de an ORDER BY, 
28f70 4c 49 4d 49 54 2c 20 6f 72 20 4f 46 46 53 45 54  LIMIT, or OFFSET
28f80 2e 0a 54 68 65 20 72 65 63 75 72 73 69 76 65 2d  ..The recursive-
28f90 73 65 6c 65 63 74 20 6d 75 73 74 20 62 65 20 61  select must be a
28fa0 20 73 69 6d 70 6c 65 20 73 65 6c 65 63 74 2c 20   simple select, 
28fb0 6e 6f 74 20 61 20 63 6f 6d 70 6f 75 6e 64 2e 20  not a compound. 
28fc0 20 54 68 65 0a 72 65 63 75 72 73 69 76 65 2d 73   The.recursive-s
28fd0 65 6c 65 63 74 20 69 73 20 61 6c 6c 6f 77 65 64  elect is allowed
28fe0 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f   to include an O
28ff0 52 44 45 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20  RDER BY, LIMIT, 
29000 61 6e 64 2f 6f 72 20 4f 46 46 53 45 54 2e 0a 0a  and/or OFFSET...
29010 3c 70 3e 54 68 65 20 62 61 73 69 63 20 61 6c 67  <p>The basic alg
29020 6f 72 69 74 68 6d 20 66 6f 72 20 63 6f 6d 70 75  orithm for compu
29030 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ting the content
29040 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76   of the recursiv
29050 65 20 74 61 62 6c 65 0a 69 73 20 61 73 20 66 6f  e table.is as fo
29060 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  llows:..<ol>.<li
29070 3e 20 52 75 6e 20 74 68 65 20 3c 79 79 74 65 72  > Run the <yyter
29080 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74  m>initial-select
29090 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20 61 64  </yyterm> and ad
290a0 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 74 6f  d the results to
290b0 20 61 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20 57   a queue..<li> W
290c0 68 69 6c 65 20 74 68 65 20 71 75 65 75 65 20 69  hile the queue i
290d0 73 20 6e 6f 74 20 65 6d 70 74 79 3a 0a 3c 6f 6c  s not empty:.<ol
290e0 20 74 79 70 65 3d 22 61 22 3e 0a 3c 6c 69 3e 20   type="a">.<li> 
290f0 45 78 74 72 61 63 74 20 61 20 73 69 6e 67 6c 65  Extract a single
29100 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 71 75   row from the qu
29110 65 75 65 2e 0a 3c 6c 69 3e 20 49 6e 73 65 72 74  eue..<li> Insert
29120 20 74 68 61 74 20 73 69 6e 67 6c 65 20 72 6f 77   that single row
29130 20 69 6e 74 6f 20 74 68 65 20 72 65 63 75 72 73   into the recurs
29140 69 76 65 20 74 61 62 6c 65 0a 3c 6c 69 3e 20 50  ive table.<li> P
29150 72 65 74 65 6e 64 20 74 68 61 74 20 74 68 65 20  retend that the 
29160 73 69 6e 67 6c 65 20 72 6f 77 20 6a 75 73 74 20  single row just 
29170 65 78 74 72 61 63 74 65 64 20 69 73 20 74 68 65  extracted is the
29180 20 6f 6e 6c 79 0a 20 20 20 20 20 72 6f 77 20 69   only.     row i
29190 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  n the recursive 
291a0 74 61 62 6c 65 20 61 6e 64 20 72 75 6e 20 74 68  table and run th
291b0 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
291c0 63 74 2c 0a 20 20 20 20 20 61 64 64 69 6e 67 20  ct,.     adding 
291d0 61 6c 6c 20 72 65 73 75 6c 74 73 20 74 6f 20 74  all results to t
291e0 68 65 20 71 75 65 75 65 2e 0a 3c 2f 6f 6c 3e 0a  he queue..</ol>.
291f0 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 62 61  </ol>..<p>The ba
29200 73 69 63 20 70 72 6f 63 65 64 75 72 65 20 61 62  sic procedure ab
29210 6f 76 65 20 6d 61 79 20 6d 6f 64 69 66 69 65 64  ove may modified
29220 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   by the followin
29230 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 72 75 6c  g additional rul
29240 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  es:..<ul>.<li><p
29250 3e 0a 20 20 49 66 20 61 20 55 4e 49 4f 4e 20 6f  >.  If a UNION o
29260 70 65 72 61 74 6f 72 20 63 6f 6e 6e 65 63 74 73  perator connects
29270 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e 69   the <yyterm>ini
29280 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74  tial-select</yyt
29290 65 72 6d 3e 20 77 69 74 68 20 74 68 65 0a 20 20  erm> with the.  
292a0 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76  <yyterm>recursiv
292b0 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  e-select</yyterm
292c0 3e 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61 64 64  >, then only add
292d0 20 72 6f 77 73 20 74 6f 20 74 68 65 20 71 75 65   rows to the que
292e0 75 65 20 69 66 20 0a 20 20 6e 6f 20 69 64 65 6e  ue if .  no iden
292f0 74 69 63 61 6c 20 72 6f 77 20 68 61 73 0a 20 20  tical row has.  
29300 62 65 65 6e 20 70 72 65 76 69 6f 75 73 6c 79 20  been previously 
29310 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75 65  added to the que
29320 75 65 2e 20 20 52 65 70 65 61 74 65 64 20 72 6f  ue.  Repeated ro
29330 77 73 20 61 72 65 20 64 69 73 63 61 72 64 65 64  ws are discarded
29340 20 62 65 66 6f 72 65 20 62 65 69 6e 67 0a 20 20   before being.  
29350 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75 65  added to the que
29360 75 65 20 65 76 65 6e 20 69 66 20 74 68 65 20 72  ue even if the r
29370 65 70 65 61 74 65 64 20 72 6f 77 73 20 68 61 76  epeated rows hav
29380 65 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 65  e already been e
29390 78 74 72 61 63 74 65 64 0a 20 20 66 72 6f 6d 20  xtracted.  from 
293a0 74 68 65 20 71 75 65 75 65 20 62 79 20 74 68 65  the queue by the
293b0 20 72 65 63 75 72 73 69 6f 6e 20 73 74 65 70 2e   recursion step.
293c0 20 20 49 66 20 74 68 65 20 6f 70 65 72 61 74 6f    If the operato
293d0 72 20 69 73 20 55 4e 49 4f 4e 20 41 4c 4c 2c 0a  r is UNION ALL,.
293e0 20 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20    then all rows 
293f0 67 65 6e 65 72 61 74 65 64 20 62 79 20 62 6f 74  generated by bot
29400 68 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e  h the <yyterm>in
29410 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79  itial-select</yy
29420 74 65 72 6d 3e 20 61 6e 64 20 74 68 65 0a 20 20  term> and the.  
29430 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76  <yyterm>recursiv
29440 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  e-select</yyterm
29450 3e 20 61 72 65 20 61 6c 77 61 79 73 20 61 64 64  > are always add
29460 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 20  ed to the queue 
29470 65 76 65 6e 20 69 66 0a 20 20 74 68 65 79 20 61  even if.  they a
29480 72 65 20 72 65 70 65 61 74 73 2e 0a 20 20 57 68  re repeats..  Wh
29490 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69  en determining i
294a0 66 20 61 20 72 6f 77 20 69 73 20 72 65 70 65 61  f a row is repea
294b0 74 65 64 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ted, NULL values
294c0 20 63 6f 6d 70 61 72 65 0a 20 20 65 71 75 61 6c   compare.  equal
294d0 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 20   to one another 
294e0 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c 20 74 6f  and not equal to
294f0 20 61 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65   any other value
29500 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20  ..<li><p>.  The 
29510 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 69 66  LIMIT clause, if
29520 20 70 72 65 73 65 6e 74 2c 20 64 65 74 65 72 6d   present, determ
29530 69 6e 65 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ines the maximum
29540 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
29550 74 68 61 74 0a 20 20 77 69 6c 6c 20 65 76 65 72  that.  will ever
29560 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65   be added to the
29570 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
29580 20 69 6e 20 73 74 65 70 20 32 62 2e 0a 20 20 4f   in step 2b..  O
29590 6e 63 65 20 74 68 65 20 6c 69 6d 69 74 20 69 73  nce the limit is
295a0 20 72 65 61 63 68 65 64 2c 20 74 68 65 20 72 65   reached, the re
295b0 63 75 72 73 69 6f 6e 20 73 74 6f 70 73 2e 0a 20  cursion stops.. 
295c0 20 41 20 6c 69 6d 69 74 20 6f 66 20 7a 65 72 6f   A limit of zero
295d0 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20 72   means that no r
295e0 6f 77 73 20 61 72 65 20 65 76 65 72 20 61 64 64  ows are ever add
295f0 65 64 20 74 6f 20 74 68 65 0a 20 20 72 65 63 75  ed to the.  recu
29600 72 73 69 76 65 20 74 61 62 6c 65 2c 20 61 6e 64  rsive table, and
29610 20 61 20 6e 65 67 61 74 69 76 65 20 6c 69 6d 69   a negative limi
29620 74 20 6d 65 61 6e 73 20 61 6e 20 75 6e 6c 69 6d  t means an unlim
29630 69 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72  ited number of r
29640 6f 77 73 0a 20 20 6d 61 79 20 62 65 20 61 64 64  ows.  may be add
29650 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73  ed to the recurs
29660 69 76 65 20 74 61 62 6c 65 2e 0a 3c 6c 69 3e 3c  ive table..<li><
29670 70 3e 0a 20 20 54 68 65 20 4f 46 46 53 45 54 20  p>.  The OFFSET 
29680 63 6c 61 75 73 65 2c 20 69 66 20 69 74 20 69 73  clause, if it is
29690 20 70 72 65 73 65 6e 74 20 61 6e 64 20 68 61 73   present and has
296a0 20 61 20 70 6f 73 69 74 69 76 65 20 76 61 6c 75   a positive valu
296b0 65 20 4e 2c 20 70 72 65 76 65 6e 74 73 20 74 68  e N, prevents th
296c0 65 0a 20 20 66 69 72 73 74 20 4e 20 72 6f 77 73  e.  first N rows
296d0 20 66 72 6f 6d 20 62 65 69 6e 67 20 61 64 64 65   from being adde
296e0 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69  d to the recursi
296f0 76 65 20 74 61 62 6c 65 2e 0a 20 20 54 68 65 20  ve table..  The 
29700 66 69 72 73 74 20 4e 20 72 6f 77 73 20 61 72 65  first N rows are
29710 20 73 74 69 6c 6c 20 70 72 6f 63 65 73 73 65 64   still processed
29720 0a 20 20 62 79 20 74 68 65 20 3c 79 79 74 65 72  .  by the <yyter
29730 6d 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  m>recursive-sele
29740 63 74 3c 2f 79 79 74 65 72 6d 3e 20 26 6d 64 61  ct</yyterm> &mda
29750 73 68 3b 20 74 68 65 79 0a 20 20 6a 75 73 74 20  sh; they.  just 
29760 61 72 65 20 6e 6f 74 20 61 64 64 65 64 20 74 6f  are not added to
29770 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
29780 61 62 6c 65 2e 20 20 52 6f 77 73 20 61 72 65 20  able.  Rows are 
29790 6e 6f 74 20 63 6f 75 6e 74 65 64 20 74 6f 77 61  not counted towa
297a0 72 64 0a 20 20 66 75 6c 66 69 6c 6c 69 6e 67 20  rd.  fulfilling 
297b0 74 68 65 20 4c 49 4d 49 54 20 75 6e 74 69 6c 20  the LIMIT until 
297c0 61 6c 6c 20 4f 46 46 53 45 54 20 72 6f 77 73 20  all OFFSET rows 
297d0 68 61 76 65 20 62 65 65 6e 20 73 6b 69 70 70 65  have been skippe
297e0 64 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20  d..<li><p>.  If 
297f0 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an ORDER BY clau
29800 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 69  se is present, i
29810 74 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  t determines the
29820 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20   order in which 
29830 72 6f 77 73 0a 20 20 61 72 65 20 65 78 74 72 61  rows.  are extra
29840 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 71 75  cted from the qu
29850 65 75 65 20 69 6e 20 73 74 65 70 20 32 61 2e 20  eue in step 2a. 
29860 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
29870 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
29880 0a 20 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65  .  then the orde
29890 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20  r in which rows 
298a0 61 72 65 20 65 78 74 72 61 63 74 65 64 20 69 73  are extracted is
298b0 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 28 49 6e   undefined.  (In
298c0 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20 69   the current.  i
298d0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
298e0 68 65 20 71 75 65 75 65 20 62 65 63 6f 6d 65 73  he queue becomes
298f0 20 61 20 46 49 46 4f 20 69 66 20 74 68 65 20 4f   a FIFO if the O
29900 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
29910 73 20 6f 6d 69 74 74 65 64 2c 0a 20 20 62 75 74  s omitted,.  but
29920 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 73 68   applications sh
29930 6f 75 6c 64 20 6e 6f 74 20 64 65 70 65 6e 64 20  ould not depend 
29940 6f 6e 20 74 68 61 74 20 66 61 63 74 20 73 69 6e  on that fact sin
29950 63 65 20 69 74 20 6d 69 67 68 74 20 63 68 61 6e  ce it might chan
29960 67 65 2e 29 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c  ge.).</ul>..<tcl
29970 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65  >hd_fragment rce
29980 78 31 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 52 65 63  x1</tcl>.<h4>Rec
29990 75 72 73 69 76 65 20 51 75 65 72 79 20 45 78 61  ursive Query Exa
299a0 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54  mples</h4>..<p>T
299b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65  he following que
299c0 72 79 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 69  ry returns all i
299d0 6e 74 65 67 65 72 73 20 62 65 74 77 65 65 6e 20  ntegers between 
299e0 31 20 61 6e 64 20 31 30 30 30 30 30 30 3a 0a 0a  1 and 1000000:..
299f0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
29a00 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  >.WITH RECURSIVE
29a10 0a 20 20 63 6e 74 28 78 29 20 41 53 20 28 56 41  .  cnt(x) AS (VA
29a20 4c 55 45 53 28 31 29 20 55 4e 49 4f 4e 20 41 4c  LUES(1) UNION AL
29a30 4c 20 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f  L SELECT x+1 FRO
29a40 4d 20 63 6e 74 20 57 48 45 52 45 20 78 3c 31 30  M cnt WHERE x<10
29a50 30 30 30 30 30 29 0a 53 45 4c 45 43 54 20 78 20  00000).SELECT x 
29a60 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e  FROM cnt;.</pre>
29a70 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
29a80 70 3e 43 6f 6e 73 69 64 65 72 20 68 6f 77 20 74  p>Consider how t
29a90 68 69 73 20 71 75 65 72 79 20 77 6f 72 6b 73 2e  his query works.
29aa0 20 20 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65    The initial-se
29ab0 6c 65 63 74 0a 72 75 6e 73 20 66 69 72 73 74 20  lect.runs first 
29ac0 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20 73 69  and returns a si
29ad0 6e 67 6c 65 20 72 6f 77 0a 77 69 74 68 20 61 20  ngle row.with a 
29ae0 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 22 31  single column "1
29af0 22 2e 20 20 54 68 69 73 20 6f 6e 65 20 72 6f 77  ".  This one row
29b00 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65   is added to the
29b10 20 71 75 65 75 65 2e 20 20 49 6e 0a 73 74 65 70   queue.  In.step
29b20 20 32 61 2c 20 74 68 61 74 20 6f 6e 65 20 72 6f   2a, that one ro
29b30 77 20 69 73 20 65 78 74 72 61 63 74 65 64 20 66  w is extracted f
29b40 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20 61 6e  rom the queue an
29b50 64 20 61 64 64 65 64 20 74 6f 20 22 63 6e 74 22  d added to "cnt"
29b60 2e 0a 54 68 65 6e 20 74 68 65 20 72 65 63 75 72  ..Then the recur
29b70 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20 72  sive-select is r
29b80 75 6e 20 69 6e 20 61 63 63 6f 72 64 61 6e 63 65  un in accordance
29b90 20 77 69 74 68 20 73 74 65 70 20 32 63 20 67 65   with step 2c ge
29ba0 6e 65 72 61 74 69 6e 67 0a 61 20 73 69 6e 67 6c  nerating.a singl
29bb0 65 20 6e 65 77 20 72 6f 77 20 77 69 74 68 20 76  e new row with v
29bc0 61 6c 75 65 20 22 32 22 20 74 6f 20 61 64 64 20  alue "2" to add 
29bd0 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 54  to the queue.  T
29be0 68 65 20 71 75 65 75 65 20 73 74 69 6c 6c 0a 68  he queue still.h
29bf0 61 73 20 6f 6e 65 20 72 6f 77 2c 20 73 6f 20 73  as one row, so s
29c00 74 65 70 20 32 20 72 65 70 65 61 74 73 2e 20 20  tep 2 repeats.  
29c10 54 68 65 20 22 32 22 20 72 6f 77 20 69 73 20 65  The "2" row is e
29c20 78 74 72 61 63 74 65 64 20 61 6e 64 20 61 64 64  xtracted and add
29c30 65 64 20 74 6f 20 74 68 65 0a 72 65 63 75 72 73  ed to the.recurs
29c40 69 76 65 20 74 61 62 6c 65 20 62 79 20 73 74 65  ive table by ste
29c50 70 73 20 32 61 20 61 6e 64 20 32 62 2e 20 20 54  ps 2a and 2b.  T
29c60 68 65 6e 20 74 68 65 20 72 6f 77 20 63 6f 6e 74  hen the row cont
29c70 61 69 6e 69 6e 67 20 32 20 69 73 20 75 73 65 64  aining 2 is used
29c80 20 0a 61 73 20 69 66 20 69 74 20 77 65 72 65 20   .as if it were 
29c90 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f 6e  the complete con
29ca0 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65 63 75  tent of the recu
29cb0 72 73 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20  rsive table and 
29cc0 74 68 65 20 0a 72 65 63 75 72 73 69 76 65 2d 73  the .recursive-s
29cd0 65 6c 65 63 74 20 69 73 20 72 75 6e 20 61 67 61  elect is run aga
29ce0 69 6e 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e  in, resulting in
29cf0 20 61 20 72 6f 77 20 77 69 74 68 20 76 61 6c 75   a row with valu
29d00 65 20 22 33 22 20 62 65 69 6e 67 20 61 64 64 65  e "3" being adde
29d10 64 0a 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20  d.to the queue. 
29d20 20 54 68 69 73 20 72 65 70 65 61 74 73 20 39 39   This repeats 99
29d30 39 39 39 39 20 74 69 6d 65 73 20 75 6e 74 69 6c  9999 times until
29d40 20 66 69 6e 61 6c 6c 79 20 61 74 20 73 74 65 70   finally at step
29d50 20 32 61 20 74 68 65 0a 6f 6e 6c 79 20 76 61 6c   2a the.only val
29d60 75 65 20 6f 6e 20 74 68 65 20 71 75 65 75 65 20  ue on the queue 
29d70 69 73 20 61 20 72 6f 77 20 63 6f 6e 74 61 69 6e  is a row contain
29d80 69 6e 67 20 31 30 30 30 30 30 30 2e 20 20 54 68  ing 1000000.  Th
29d90 61 74 20 72 6f 77 20 69 73 0a 65 78 74 72 61 63  at row is.extrac
29da0 74 65 64 20 61 6e 64 20 61 64 64 65 64 20 74 6f  ted and added to
29db0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
29dc0 61 62 6c 65 2e 20 20 42 75 74 20 74 68 69 73 20  able.  But this 
29dd0 74 69 6d 65 2c 20 74 68 65 0a 57 48 45 52 45 20  time, the.WHERE 
29de0 63 6c 61 75 73 65 20 63 61 75 73 65 73 20 74 68  clause causes th
29df0 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
29e00 63 74 20 74 6f 20 72 65 74 75 72 6e 20 6e 6f 20  ct to return no 
29e10 72 6f 77 73 2c 20 73 6f 20 74 68 65 0a 71 75 65  rows, so the.que
29e20 75 65 20 72 65 6d 61 69 6e 73 20 65 6d 70 74 79  ue remains empty
29e30 20 61 6e 64 20 74 68 65 20 72 65 63 75 72 73 69   and the recursi
29e40 6f 6e 20 73 74 6f 70 73 2e 0a 0a 3c 70 3e 3c 62  on stops...<p><b
29e50 3e 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6e 6f  >Optimization no
29e60 74 65 3a 3c 2f 62 3e 0a 49 6e 20 74 68 65 20 64  te:</b>.In the d
29e70 69 73 63 75 73 73 69 6f 6e 20 61 62 6f 76 65 2c  iscussion above,
29e80 20 73 74 61 74 65 6d 65 6e 74 73 20 6c 69 6b 65   statements like
29e90 20 22 69 6e 73 65 72 74 20 74 68 65 20 72 6f 77   "insert the row
29ea0 20 69 6e 74 6f 0a 74 68 65 20 72 65 63 75 72 73   into.the recurs
29eb0 69 76 65 20 74 61 62 6c 65 22 20 73 68 6f 75 6c  ive table" shoul
29ec0 64 20 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 20  d be understood 
29ed0 63 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 6e 6f  conceptually, no
29ee0 74 20 6c 69 74 65 72 61 6c 6c 79 2e 0a 49 74 20  t literally..It 
29ef0 73 6f 75 6e 64 73 20 61 73 20 69 66 20 53 51 4c  sounds as if SQL
29f00 69 74 65 20 69 73 20 61 63 63 75 6d 75 6c 61 74  ite is accumulat
29f10 69 6e 67 20 61 20 68 75 67 65 20 74 61 62 6c 65  ing a huge table
29f20 0a 63 6f 6e 74 61 69 6e 69 6e 67 20 6f 6e 65 20  .containing one 
29f30 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 2c 20 74 68  million rows, th
29f40 65 6e 20 67 6f 69 6e 67 20 62 61 63 6b 20 61 6e  en going back an
29f50 64 20 73 63 61 6e 6e 69 6e 67 20 74 68 61 74 20  d scanning that 
29f60 74 61 62 6c 65 0a 66 72 6f 6d 20 74 6f 70 20 74  table.from top t
29f70 6f 20 62 6f 74 74 6f 6d 20 74 6f 20 67 65 6e 65  o bottom to gene
29f80 72 61 74 65 20 74 68 65 20 72 65 73 75 6c 74 2e  rate the result.
29f90 20 20 57 68 61 74 20 72 65 61 6c 6c 79 20 68 61    What really ha
29fa0 70 70 65 6e 73 0a 69 73 20 74 68 61 74 20 74 68  ppens.is that th
29fb0 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
29fc0 72 20 73 65 65 73 20 74 68 61 74 20 76 61 6c 75  r sees that valu
29fd0 65 73 20 69 6e 20 74 68 65 0a 22 63 6e 74 22 20  es in the."cnt" 
29fe0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 20  recursive table 
29ff0 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 6f 6e  are only used on
2a000 63 65 2e 20 20 53 6f 20 61 73 20 65 61 63 68 20  ce.  So as each 
2a010 72 6f 77 20 69 73 20 61 64 64 65 64 20 74 6f 0a  row is added to.
2a020 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61  the recursive ta
2a030 62 6c 65 2c 20 74 68 61 74 20 72 6f 77 20 69 73  ble, that row is
2a040 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 72 65 74   immediately ret
2a050 75 72 6e 65 64 20 61 73 20 61 20 72 65 73 75 6c  urned as a resul
2a060 74 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a 53 45  t of the main.SE
2a070 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61  LECT statement a
2a080 6e 64 20 74 68 65 6e 20 64 69 73 63 61 72 64 65  nd then discarde
2a090 64 2e 20 20 53 51 4c 69 74 65 20 64 6f 65 73 20  d.  SQLite does 
2a0a0 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 63 63  <em>not</em> acc
2a0b0 75 6d 75 6c 61 74 65 0a 61 20 74 65 6d 70 6f 72  umulate.a tempor
2a0c0 61 72 79 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  ary table contai
2a0d0 6e 69 6e 67 20 61 20 6d 69 6c 6c 69 6f 6e 20 72  ning a million r
2a0e0 6f 77 73 2e 20 20 56 65 72 79 20 6c 69 74 74 6c  ows.  Very littl
2a0f0 65 20 6d 65 6d 6f 72 79 20 69 73 0a 6e 65 65 64  e memory is.need
2a100 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20 61 62  ed to run the ab
2a110 6f 76 65 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f  ove example.  Ho
2a120 77 65 76 65 72 2c 20 69 66 20 74 68 65 20 65 78  wever, if the ex
2a130 61 6d 70 6c 65 20 68 61 64 20 75 73 65 64 0a 55  ample had used.U
2a140 4e 49 4f 4e 20 69 6e 73 74 65 61 64 20 6f 66 20  NION instead of 
2a150 55 4e 49 4f 4e 20 41 4c 4c 2c 20 74 68 65 6e 20  UNION ALL, then 
2a160 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 68 61 76  SQLite would hav
2a170 65 20 68 61 64 20 74 6f 20 6b 65 65 70 20 61 72  e had to keep ar
2a180 6f 75 6e 64 0a 61 6c 6c 20 70 72 65 76 69 6f 75  ound.all previou
2a190 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 63 6f  sly generated co
2a1a0 6e 74 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74  ntent in order t
2a1b0 6f 20 63 68 65 63 6b 20 66 6f 72 20 64 75 70 6c  o check for dupl
2a1c0 69 63 61 74 65 73 2e 0a 46 6f 72 20 74 68 69 73  icates..For this
2a1d0 20 72 65 61 73 6f 6e 2c 20 70 72 6f 67 72 61 6d   reason, program
2a1e0 6d 65 72 73 20 73 68 6f 75 6c 64 20 73 74 72 69  mers should stri
2a1f0 76 65 20 74 6f 20 75 73 65 20 55 4e 49 4f 4e 20  ve to use UNION 
2a200 41 4c 4c 20 69 6e 73 74 65 61 64 0a 6f 66 20 55  ALL instead.of U
2a210 4e 49 4f 4e 20 77 68 65 6e 20 66 65 61 73 69 62  NION when feasib
2a220 6c 65 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20  le...<p>Here is 
2a230 61 20 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74  a variation on t
2a240 68 65 20 70 72 65 76 69 6f 75 73 20 65 78 61 6d  he previous exam
2a250 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ple:..<blockquot
2a260 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
2a270 55 52 53 49 56 45 0a 20 20 63 6e 74 28 78 29 20  URSIVE.  cnt(x) 
2a280 41 53 20 28 0a 20 20 20 20 20 53 45 4c 45 43 54  AS (.     SELECT
2a290 20 31 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c   1.     UNION AL
2a2a0 4c 0a 20 20 20 20 20 53 45 4c 45 43 54 20 78 2b  L.     SELECT x+
2a2b0 31 20 46 52 4f 4d 20 63 6e 74 0a 20 20 20 20 20  1 FROM cnt.     
2a2c0 20 4c 49 4d 49 54 20 31 30 30 30 30 30 30 0a 20   LIMIT 1000000. 
2a2d0 20 29 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d   ).SELECT x FROM
2a2e0 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c   cnt;.</pre></bl
2a2f0 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
2a300 65 72 65 20 61 72 65 20 74 77 6f 20 64 69 66 66  ere are two diff
2a310 65 72 65 6e 63 65 73 20 69 6e 20 74 68 69 73 20  erences in this 
2a320 76 61 72 69 61 74 69 6f 6e 2e 20 20 54 68 65 20  variation.  The 
2a330 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 69  initial-select i
2a340 73 0a 22 53 45 4c 45 43 54 20 31 22 20 69 6e 73  s."SELECT 1" ins
2a350 74 65 61 64 20 6f 66 20 22 56 41 4c 55 45 53 28  tead of "VALUES(
2a360 31 29 22 2e 20 20 42 75 74 20 74 68 6f 73 65 20  1)".  But those 
2a370 61 72 65 20 6a 75 73 74 20 64 69 66 66 65 72 65  are just differe
2a380 6e 74 0a 73 79 6e 74 61 78 65 73 20 66 6f 72 20  nt.syntaxes for 
2a390 73 61 79 69 6e 67 20 65 78 61 63 74 6c 79 20 74  saying exactly t
2a3a0 68 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20  he same thing.  
2a3b0 54 68 65 20 6f 74 68 65 72 20 63 68 61 6e 67 65  The other change
2a3c0 20 69 73 20 74 68 61 74 20 74 68 65 0a 72 65 63   is that the.rec
2a3d0 75 72 73 69 6f 6e 20 69 73 20 73 74 6f 70 70 65  ursion is stoppe
2a3e0 64 20 62 79 20 61 20 4c 49 4d 49 54 20 72 61 74  d by a LIMIT rat
2a3f0 68 65 72 20 74 68 61 6e 20 61 20 57 48 45 52 45  her than a WHERE
2a400 20 63 6c 61 75 73 65 2e 20 20 54 68 65 20 75 73   clause.  The us
2a410 65 20 6f 66 0a 4c 49 4d 49 54 20 6d 65 61 6e 73  e of.LIMIT means
2a420 20 74 68 61 74 20 77 68 65 6e 20 74 68 65 20 6f   that when the o
2a430 6e 65 2d 6d 69 6c 6c 69 6f 6e 74 68 20 72 6f 77  ne-millionth row
2a440 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65   is added to the
2a450 20 22 63 6e 74 22 20 74 61 62 6c 65 0a 28 61 6e   "cnt" table.(an
2a460 64 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  d returned by th
2a470 65 20 6d 61 69 6e 20 53 45 4c 45 43 54 2c 20 74  e main SELECT, t
2a480 68 61 6e 6b 73 20 74 6f 20 74 68 65 20 71 75 65  hanks to the que
2a490 72 79 20 6f 70 74 69 6d 69 7a 65 72 29 0a 74 68  ry optimizer).th
2a4a0 65 6e 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  en the recursion
2a4b0 20 73 74 6f 70 73 20 69 6d 6d 65 64 69 61 74 65   stops immediate
2a4c0 6c 79 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  ly regardless of
2a4d0 20 68 6f 77 20 6d 61 6e 79 20 72 6f 77 73 20 6d   how many rows m
2a4e0 69 67 68 74 20 62 65 0a 6c 65 66 74 20 69 6e 20  ight be.left in 
2a4f0 74 68 65 20 71 75 65 75 65 2e 20 20 4f 6e 20 6d  the queue.  On m
2a500 6f 72 65 20 63 6f 6d 70 6c 65 78 20 71 75 65 72  ore complex quer
2a510 69 65 73 2c 20 69 74 20 63 61 6e 20 73 6f 6d 65  ies, it can some
2a520 74 69 6d 65 73 20 62 65 0a 64 69 66 66 69 63 75  times be.difficu
2a530 6c 74 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61  lt to ensure tha
2a540 74 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  t the WHERE clau
2a550 73 65 20 77 69 6c 6c 20 65 76 65 6e 74 75 61 6c  se will eventual
2a560 6c 79 20 63 61 75 73 65 20 74 68 65 0a 71 75 65  ly cause the.que
2a570 75 65 20 74 6f 20 64 72 61 69 6e 20 61 6e 64 20  ue to drain and 
2a580 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 74 6f  the recursion to
2a590 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75 74   terminate.  But
2a5a0 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
2a5b0 65 20 77 69 6c 6c 0a 61 6c 77 61 79 73 20 73 74  e will.always st
2a5c0 6f 70 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  op the recursion
2a5d0 2e 20 20 53 6f 20 69 74 20 69 73 20 67 6f 6f 64  .  So it is good
2a5e0 20 70 72 61 63 74 69 63 65 20 74 6f 20 61 6c 77   practice to alw
2a5f0 61 79 73 20 69 6e 63 6c 75 64 65 20 61 0a 4c 49  ays include a.LI
2a600 4d 49 54 20 63 6c 61 75 73 65 20 61 73 20 61 20  MIT clause as a 
2a610 73 61 66 65 74 79 20 69 66 20 61 6e 20 75 70 70  safety if an upp
2a620 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20  er bound on the 
2a630 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65 63 75  size of the recu
2a640 72 73 69 6f 6e 20 0a 69 73 20 6b 6e 6f 77 6e 2e  rsion .is known.
2a650 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
2a660 6e 74 20 72 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c  nt rcex2</tcl>.<
2a670 68 34 3e 48 69 65 72 61 72 63 68 69 63 61 6c 20  h4>Hierarchical 
2a680 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f  Query Examples</
2a690 68 34 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72  h4>..<p>Consider
2a6a0 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 64 65   a table that de
2a6b0 73 63 72 69 62 65 73 20 74 68 65 20 6d 65 6d 62  scribes the memb
2a6c0 65 72 73 20 6f 66 20 61 6e 20 6f 72 67 61 6e 69  ers of an organi
2a6d0 7a 61 74 69 6f 6e 20 61 73 0a 77 65 6c 6c 20 61  zation as.well a
2a6e0 73 20 74 68 65 20 63 68 61 69 6e 2d 6f 66 2d 63  s the chain-of-c
2a6f0 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e 20 74 68  ommand within th
2a700 61 74 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a  at organization:
2a710 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
2a720 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
2a730 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54 45 58   org(.  name TEX
2a740 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20  T PRIMARY KEY,. 
2a750 20 62 6f 73 73 20 54 45 58 54 20 52 45 46 45 52   boss TEXT REFER
2a760 45 4e 43 45 53 20 6f 72 67 2c 0a 20 20 68 65 69  ENCES org,.  hei
2a770 67 68 74 20 49 4e 54 2c 0a 20 20 2d 2d 20 6f 74  ght INT,.  -- ot
2a780 68 65 72 20 63 6f 6e 74 65 6e 74 20 6f 6d 69 74  her content omit
2a790 74 65 64 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ted.);.</pre></b
2a7a0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45  lockquote>..<p>E
2a7b0 76 65 72 79 20 6d 65 6d 62 65 72 20 69 6e 20 74  very member in t
2a7c0 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20  he organization 
2a7d0 68 61 73 20 61 20 6e 61 6d 65 2c 20 61 6e 64 20  has a name, and 
2a7e0 6d 6f 73 74 20 6d 65 6d 62 65 72 73 20 68 61 76  most members hav
2a7f0 65 0a 61 20 73 69 6e 67 6c 65 20 62 6f 73 73 2e  e.a single boss.
2a800 20 20 28 54 68 65 20 68 65 61 64 20 6f 66 20 74    (The head of t
2a810 68 65 20 77 68 6f 6c 65 20 6f 72 67 61 6e 69 7a  he whole organiz
2a820 61 74 69 6f 6e 20 68 61 73 20 61 20 4e 55 4c 4c  ation has a NULL
2a830 0a 22 62 6f 73 73 22 20 66 69 65 6c 64 2e 29 20  ."boss" field.) 
2a840 54 68 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20  The rows of the 
2a850 22 6f 72 67 22 20 74 61 62 6c 65 20 66 6f 72 6d  "org" table form
2a860 20 61 20 74 72 65 65 2e 0a 0a 3c 70 3e 48 65 72   a tree...<p>Her
2a870 65 20 69 73 20 61 20 71 75 65 72 79 20 74 68 61  e is a query tha
2a880 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 61  t computes the a
2a890 76 65 72 61 67 65 20 68 65 69 67 68 74 20 6f 76  verage height ov
2a8a0 65 72 20 65 76 65 72 79 6f 6e 65 0a 69 6e 20 41  er everyone.in A
2a8b0 6c 69 63 65 27 73 20 6f 72 67 61 6e 69 7a 61 74  lice's organizat
2a8c0 69 6f 6e 2c 20 69 6e 63 6c 75 64 69 6e 67 20 41  ion, including A
2a8d0 6c 69 63 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  lice:..<blockquo
2a8e0 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
2a8f0 43 55 52 53 49 56 45 0a 20 20 77 6f 72 6b 73 5f  CURSIVE.  works_
2a900 66 6f 72 5f 61 6c 69 63 65 28 6e 29 20 41 53 20  for_alice(n) AS 
2a910 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c  (.    VALUES('Al
2a920 69 63 65 27 29 0a 20 20 20 20 55 4e 49 4f 4e 0a  ice').    UNION.
2a930 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20      SELECT name 
2a940 46 52 4f 4d 20 6f 72 67 2c 20 77 6f 72 6b 73 5f  FROM org, works_
2a950 66 6f 72 5f 61 6c 69 63 65 0a 20 20 20 20 20 57  for_alice.     W
2a960 48 45 52 45 20 6f 72 67 2e 62 6f 73 73 3d 77 6f  HERE org.boss=wo
2a970 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 2e 6e 0a  rks_for_alice.n.
2a980 20 20 29 0a 53 45 4c 45 43 54 20 61 76 67 28 68    ).SELECT avg(h
2a990 65 69 67 68 74 29 20 46 52 4f 4d 20 6f 72 67 0a  eight) FROM org.
2a9a0 20 57 48 45 52 45 20 6f 72 67 2e 6e 61 6d 65 20   WHERE org.name 
2a9b0 49 4e 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69  IN works_for_ali
2a9c0 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  ce;.</pre></bloc
2a9d0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
2a9e0 6e 65 78 74 20 65 78 61 6d 70 6c 65 20 75 73 65  next example use
2a9f0 73 20 74 77 6f 20 0a 63 6f 6d 6d 6f 6e 20 74 61  s two .common ta
2aa00 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ble expressions 
2aa10 69 6e 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  in a single WITH
2aa20 20 63 6c 61 75 73 65 2e 20 20 0a 54 68 65 20 66   clause.  .The f
2aa30 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 72  ollowing table r
2aa40 65 63 6f 72 64 73 20 61 20 66 61 6d 69 6c 79 20  ecords a family 
2aa50 74 72 65 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  tree:..<blockquo
2aa60 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
2aa70 54 41 42 4c 45 20 66 61 6d 69 6c 79 28 0a 20 20  TABLE family(.  
2aa80 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52  name TEXT PRIMAR
2aa90 59 20 4b 45 59 2c 0a 20 20 6d 6f 6d 20 54 45 58  Y KEY,.  mom TEX
2aaa0 54 20 52 45 46 45 52 45 4e 43 45 53 20 66 61 6d  T REFERENCES fam
2aab0 69 6c 79 2c 0a 20 20 64 61 64 20 54 45 58 54 20  ily,.  dad TEXT 
2aac0 52 45 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c  REFERENCES famil
2aad0 79 2c 0a 20 20 62 6f 72 6e 20 44 41 54 45 54 49  y,.  born DATETI
2aae0 4d 45 2c 0a 20 20 64 69 65 64 20 44 41 54 45 54  ME,.  died DATET
2aaf0 49 4d 45 2c 20 2d 2d 20 4e 55 4c 4c 20 69 66 20  IME, -- NULL if 
2ab00 73 74 69 6c 6c 20 61 6c 69 76 65 0a 20 20 2d 2d  still alive.  --
2ab10 20 6f 74 68 65 72 20 63 6f 6e 74 65 6e 74 0a 29   other content.)
2ab20 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
2ab30 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 66  uote>..<p>The "f
2ab40 61 6d 69 6c 79 22 20 74 61 62 6c 65 20 69 73 20  amily" table is 
2ab50 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 65  similar to the e
2ab60 61 72 6c 69 65 72 20 22 6f 72 67 22 20 74 61 62  arlier "org" tab
2ab70 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 20 0a  le except that .
2ab80 6e 6f 77 20 74 68 65 72 65 20 61 72 65 20 74 77  now there are tw
2ab90 6f 20 70 61 72 65 6e 74 73 20 74 6f 20 65 61 63  o parents to eac
2aba0 68 20 6d 65 6d 62 65 72 2e 0a 57 65 20 77 61 6e  h member..We wan
2abb0 74 20 74 6f 20 6b 6e 6f 77 20 61 6c 6c 20 6c 69  t to know all li
2abc0 76 69 6e 67 20 61 6e 63 65 73 74 6f 72 73 20 6f  ving ancestors o
2abd0 66 20 41 6c 69 63 65 2c 20 66 72 6f 6d 20 6f 6c  f Alice, from ol
2abe0 64 65 73 74 20 74 6f 20 79 6f 75 6e 67 65 73 74  dest to youngest
2abf0 2e 0a 41 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f  ..An ordinary co
2ac00 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
2ac10 73 73 69 6f 6e 2c 20 22 70 61 72 65 6e 74 5f 6f  ssion, "parent_o
2ac20 66 22 2c 20 69 73 20 64 65 66 69 6e 65 64 20 66  f", is defined f
2ac30 69 72 73 74 2e 20 20 54 68 61 74 0a 6f 72 64 69  irst.  That.ordi
2ac40 6e 61 72 79 20 43 54 45 20 69 73 20 61 20 76 69  nary CTE is a vi
2ac50 65 77 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  ew that can be u
2ac60 73 65 64 20 74 6f 20 66 69 6e 64 20 61 6c 6c 20  sed to find all 
2ac70 70 61 72 65 6e 74 73 20 6f 66 20 61 6e 79 0a 69  parents of any.i
2ac80 6e 64 69 76 69 64 75 61 6c 2e 20 20 54 68 61 74  ndividual.  That
2ac90 20 6f 72 64 69 6e 61 72 79 20 43 54 45 20 69 73   ordinary CTE is
2aca0 20 74 68 65 6e 20 75 73 65 64 20 69 6e 20 74 68   then used in th
2acb0 65 20 22 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61  e "ancestor_of_a
2acc0 6c 69 63 65 22 0a 72 65 63 75 72 73 69 76 65 20  lice".recursive 
2acd0 43 54 45 2e 20 20 54 68 65 20 72 65 63 75 72 73  CTE.  The recurs
2ace0 69 76 65 20 43 54 45 20 69 73 20 74 68 65 6e 20  ive CTE is then 
2acf0 75 73 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61  used in the fina
2ad00 6c 20 71 75 65 72 79 3a 0a 0a 3c 62 6c 6f 63 6b  l query:..<block
2ad10 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
2ad20 20 52 45 43 55 52 53 49 56 45 0a 20 20 70 61 72   RECURSIVE.  par
2ad30 65 6e 74 5f 6f 66 28 6e 61 6d 65 2c 20 70 61 72  ent_of(name, par
2ad40 65 6e 74 29 20 41 53 0a 20 20 20 20 28 53 45 4c  ent) AS.    (SEL
2ad50 45 43 54 20 6e 61 6d 65 2c 20 6d 6f 6d 20 46 52  ECT name, mom FR
2ad60 4f 4d 20 66 61 6d 69 6c 79 20 55 4e 49 4f 4e 20  OM family UNION 
2ad70 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 64 61 64  SELECT name, dad
2ad80 20 46 52 4f 4d 20 66 61 6d 69 6c 79 29 2c 0a 20   FROM family),. 
2ad90 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69   ancestor_of_ali
2ada0 63 65 28 6e 61 6d 65 29 20 41 53 0a 20 20 20 20  ce(name) AS.    
2adb0 28 53 45 4c 45 43 54 20 70 61 72 65 6e 74 20 46  (SELECT parent F
2adc0 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20 57 48  ROM parent_of WH
2add0 45 52 45 20 6e 61 6d 65 3d 27 41 6c 69 63 65 27  ERE name='Alice'
2ade0 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a  .     UNION ALL.
2adf0 20 20 20 20 20 53 45 4c 45 43 54 20 70 61 72 65       SELECT pare
2ae00 6e 74 20 46 52 4f 4d 20 70 61 72 65 6e 74 5f 6f  nt FROM parent_o
2ae10 66 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72 5f  f JOIN ancestor_
2ae20 6f 66 5f 61 6c 69 63 65 20 55 53 49 4e 47 28 6e  of_alice USING(n
2ae30 61 6d 65 29 29 0a 53 45 4c 45 43 54 20 66 61 6d  ame)).SELECT fam
2ae40 69 6c 79 2e 6e 61 6d 65 20 46 52 4f 4d 20 61 6e  ily.name FROM an
2ae50 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2c  cestor_of_alice,
2ae60 20 66 61 6d 69 6c 79 0a 20 57 48 45 52 45 20 61   family. WHERE a
2ae70 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65  ncestor_of_alice
2ae80 2e 6e 61 6d 65 3d 66 61 6d 69 6c 79 2e 6e 61 6d  .name=family.nam
2ae90 65 0a 20 20 20 41 4e 44 20 64 69 65 64 20 49 53  e.   AND died IS
2aea0 20 4e 55 4c 4c 0a 20 4f 52 44 45 52 20 42 59 20   NULL. ORDER BY 
2aeb0 62 6f 72 6e 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  born;.</pre></bl
2aec0 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e  ockquote>..<tcl>
2aed0 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78  hd_fragment rcex
2aee0 33 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 51 75 65 72  3</tcl>.<h4>Quer
2aef0 69 65 73 20 41 67 61 69 6e 73 74 20 41 20 47 72  ies Against A Gr
2af00 61 70 68 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20 76  aph</h4>..<p>A v
2af10 65 72 73 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20 73  ersion control s
2af20 79 73 74 65 6d 20 28 56 43 53 29 20 77 69 6c 6c  ystem (VCS) will
2af30 20 74 79 70 69 63 61 6c 6c 79 20 73 74 6f 72 65   typically store
2af40 20 74 68 65 20 65 76 6f 6c 76 69 6e 67 0a 76 65   the evolving.ve
2af50 72 73 69 6f 6e 73 20 6f 66 20 61 20 70 72 6f 6a  rsions of a proj
2af60 65 63 74 20 61 73 20 61 20 64 69 72 65 63 74 65  ect as a directe
2af70 64 20 61 63 79 63 6c 69 63 20 67 72 61 70 68 20  d acyclic graph 
2af80 28 44 41 47 29 2e 20 20 43 61 6c 6c 20 65 61 63  (DAG).  Call eac
2af90 68 0a 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  h.version of the
2afa0 20 70 72 6f 6a 65 63 74 20 61 20 22 63 68 65 63   project a "chec
2afb0 6b 69 6e 22 2e 20 20 41 20 73 69 6e 67 6c 65 0a  kin".  A single.
2afc0 63 68 65 63 6b 69 6e 20 63 61 6e 20 68 61 76 65  checkin can have
2afd0 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61   zero or more pa
2afe0 72 65 6e 74 73 2e 20 20 4d 6f 73 74 20 63 68 65  rents.  Most che
2aff0 63 6b 69 6e 73 20 28 65 78 63 65 70 74 20 74 68  ckins (except th
2b000 65 0a 66 69 72 73 74 29 20 68 61 76 65 20 61 20  e.first) have a 
2b010 73 69 6e 67 6c 65 20 70 61 72 65 6e 74 2c 20 62  single parent, b
2b020 75 74 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f  ut in the case o
2b030 66 20 61 20 6d 65 72 67 65 2c 20 61 20 63 68 65  f a merge, a che
2b040 63 6b 69 6e 0a 6d 69 67 68 74 20 68 61 76 65 20  ckin.might have 
2b050 74 77 6f 20 6f 72 20 74 68 72 65 65 20 6f 72 20  two or three or 
2b060 6d 6f 72 65 20 70 61 72 65 6e 74 73 2e 20 20 41  more parents.  A
2b070 20 73 63 68 65 6d 61 20 74 6f 20 6b 65 65 70 20   schema to keep 
2b080 74 72 61 63 6b 20 6f 66 0a 63 68 65 63 6b 69 6e  track of.checkin
2b090 73 20 61 6e 64 20 74 68 65 20 6f 72 64 65 72 20  s and the order 
2b0a0 69 6e 20 77 68 69 63 68 20 74 68 65 79 20 6f 63  in which they oc
2b0b0 63 75 72 20 6d 69 67 68 74 20 6c 6f 6f 6b 20 73  cur might look s
2b0c0 6f 6d 65 74 68 69 6e 67 20 6c 69 6b 65 0a 74 68  omething like.th
2b0d0 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  is:..<blockquote
2b0e0 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
2b0f0 42 4c 45 20 63 68 65 63 6b 69 6e 28 0a 20 20 69  BLE checkin(.  i
2b100 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  d INTEGER PRIMAR
2b110 59 20 4b 45 59 2c 0a 20 20 6d 74 69 6d 65 20 49  Y KEY,.  mtime I
2b120 4e 54 45 47 45 52 20 2d 2d 20 74 69 6d 65 73 74  NTEGER -- timest
2b130 61 6d 70 20 77 68 65 6e 20 74 68 69 73 20 63 68  amp when this ch
2b140 65 63 6b 69 6e 20 6f 63 63 75 72 72 65 64 0a 29  eckin occurred.)
2b150 3b 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 64  ;.CREATE TABLE d
2b160 65 72 69 76 65 64 66 72 6f 6d 28 0a 20 20 78 66  erivedfrom(.  xf
2b170 72 6f 6d 20 49 4e 54 45 47 45 52 20 4e 4f 54 20  rom INTEGER NOT 
2b180 4e 55 4c 4c 20 52 45 46 45 52 45 4e 43 45 53 20  NULL REFERENCES 
2b190 63 68 65 63 6b 69 6e 2c 20 2d 2d 20 70 61 72 65  checkin, -- pare
2b1a0 6e 74 20 63 68 65 63 6b 69 6e 0a 20 20 78 74 6f  nt checkin.  xto
2b1b0 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c   INTEGER NOT NUL
2b1c0 4c 20 52 45 46 45 52 45 4e 43 45 53 20 63 68 65  L REFERENCES che
2b1d0 63 6b 69 6e 2c 20 20 20 2d 2d 20 64 65 72 69 76  ckin,   -- deriv
2b1e0 65 64 20 63 68 65 63 6b 69 6e 0a 20 20 50 52 49  ed checkin.  PRI
2b1f0 4d 41 52 59 20 4b 45 59 28 78 66 72 6f 6d 2c 78  MARY KEY(xfrom,x
2b200 74 6f 29 0a 29 3b 0a 43 52 45 41 54 45 20 49 4e  to).);.CREATE IN
2b210 44 45 58 20 64 65 72 69 76 65 64 66 72 6f 6d 5f  DEX derivedfrom_
2b220 62 61 63 6b 20 4f 4e 20 64 65 72 69 76 65 64 66  back ON derivedf
2b230 72 6f 6d 28 78 74 6f 2c 78 66 72 6f 6d 29 3b 0a  rom(xto,xfrom);.
2b240 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
2b250 74 65 3e 0a 0a 3c 70 3e 54 68 69 73 20 67 72 61  te>..<p>This gra
2b260 70 68 20 69 73 20 61 63 79 63 6c 69 63 2e 20 20  ph is acyclic.  
2b270 41 6e 64 20 77 65 20 61 73 73 75 6d 65 20 74 68  And we assume th
2b280 61 74 20 74 68 65 20 6d 74 69 6d 65 20 6f 66 20  at the mtime of 
2b290 65 76 65 72 79 0a 63 68 69 6c 64 20 63 68 65 63  every.child chec
2b2a0 6b 69 6e 20 69 73 20 6e 6f 20 6c 65 73 73 20 74  kin is no less t
2b2b0 68 61 6e 20 74 68 65 20 6d 74 69 6d 65 20 6f 66  han the mtime of
2b2c0 20 61 6c 6c 20 69 74 73 20 70 61 72 65 6e 74 73   all its parents
2b2d0 2e 20 20 42 75 74 0a 75 6e 6c 69 6b 65 20 74 68  .  But.unlike th
2b2e0 65 20 65 61 72 6c 69 65 72 20 65 78 61 6d 70 6c  e earlier exampl
2b2f0 65 73 2c 20 74 68 69 73 20 67 72 61 70 68 20 6d  es, this graph m
2b300 69 67 68 74 20 68 61 76 65 20 6d 75 6c 74 69 70  ight have multip
2b310 6c 65 20 70 61 74 68 73 20 6f 66 0a 64 69 66 66  le paths of.diff
2b320 65 72 69 6e 67 20 6c 65 6e 67 74 68 73 20 62 65  ering lengths be
2b330 74 77 65 65 6e 20 61 6e 79 20 74 77 6f 20 63 68  tween any two ch
2b340 65 63 6b 69 6e 73 2e 0a 0a 3c 70 3e 57 65 20 77  eckins...<p>We w
2b350 61 6e 74 20 74 6f 20 6b 6e 6f 77 20 74 68 65 20  ant to know the 
2b360 74 77 65 6e 74 79 20 6d 6f 73 74 20 72 65 63 65  twenty most rece
2b370 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 69 6e 20  nt ancestors in 
2b380 74 69 6d 65 20 28 6f 75 74 20 6f 66 0a 74 68 65  time (out of.the
2b390 20 74 68 6f 75 73 61 6e 64 73 20 61 6e 64 20 74   thousands and t
2b3a0 68 6f 75 73 61 6e 64 73 20 6f 66 20 61 6e 63 65  housands of ance
2b3b0 73 74 6f 72 73 20 69 6e 20 74 68 65 20 77 68 6f  stors in the who
2b3c0 6c 65 20 44 41 47 29 20 66 6f 72 0a 63 68 65 63  le DAG) for.chec
2b3d0 6b 69 6e 20 22 40 42 41 53 45 4c 49 4e 45 22 2e  kin "@BASELINE".
2b3e0 20 20 28 41 20 71 75 65 72 79 20 73 69 6d 69 6c    (A query simil
2b3f0 61 72 20 74 6f 20 74 68 69 73 20 69 73 20 75 73  ar to this is us
2b400 65 64 0a 62 79 20 74 68 65 20 3c 61 20 68 72 65  ed.by the <a hre
2b410 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 66 6f  f="http://www.fo
2b420 73 73 69 6c 2d 73 63 6d 2e 6f 72 67 2f 22 3e 46  ssil-scm.org/">F
2b430 6f 73 73 69 6c 3c 2f 61 3e 20 56 43 53 20 74 6f  ossil</a> VCS to
2b440 0a 73 68 6f 77 20 74 68 65 20 4e 20 6d 6f 73 74  .show the N most
2b450 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f 72   recent ancestor
2b460 73 20 6f 66 20 61 20 63 68 65 63 6b 2e 20 20 46  s of a check.  F
2b470 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 3c 61 20 68  or example:.<a h
2b480 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e  ref="http://www.
2b490 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74  sqlite.org/src/t
2b4a0 69 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26  imeline?p=trunk&
2b4b0 6e 3d 33 30 22 3e 68 74 74 70 3a 2f 2f 77 77 77  n=30">http://www
2b4c0 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f  .sqlite.org/src/
2b4d0 74 69 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b  timeline?p=trunk
2b4e0 26 6e 3d 33 30 3c 2f 61 3e 2e 29 0a 0a 3c 62 6c  &n=30</a>.)..<bl
2b4f0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
2b500 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
2b510 61 6e 63 65 73 74 6f 72 28 69 64 2c 6d 74 69 6d  ancestor(id,mtim
2b520 65 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45  e) AS (.    SELE
2b530 43 54 20 69 64 2c 20 6d 74 69 6d 65 20 46 52 4f  CT id, mtime FRO
2b540 4d 20 63 68 65 63 6b 69 6e 20 57 48 45 52 45 20  M checkin WHERE 
2b550 69 64 3d 40 42 41 53 45 4c 49 4e 45 0a 20 20 20  id=@BASELINE.   
2b560 20 55 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43   UNION.    SELEC
2b570 54 20 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 66  T derivedfrom.xf
2b580 72 6f 6d 2c 20 63 68 65 63 6b 69 6e 2e 6d 74 69  rom, checkin.mti
2b590 6d 65 0a 20 20 20 20 20 20 46 52 4f 4d 20 61 6e  me.      FROM an
2b5a0 63 65 73 74 6f 72 2c 20 64 65 72 69 76 65 64 66  cestor, derivedf
2b5b0 72 6f 6d 2c 20 63 68 65 63 6b 69 6e 0a 20 20 20  rom, checkin.   
2b5c0 20 20 57 48 45 52 45 20 61 6e 63 65 73 74 6f 72    WHERE ancestor
2b5d0 2e 69 64 3d 64 65 72 69 76 65 64 66 72 6f 6d 2e  .id=derivedfrom.
2b5e0 78 74 6f 0a 20 20 20 20 20 20 20 41 4e 44 20 63  xto.       AND c
2b5f0 68 65 63 6b 69 6e 2e 69 64 3d 64 65 72 69 76 65  heckin.id=derive
2b600 64 66 72 6f 6d 2e 78 66 72 6f 6d 0a 20 20 20 20  dfrom.xfrom.    
2b610 20 4f 52 44 45 52 20 42 59 20 63 68 65 63 6b 69   ORDER BY checki
2b620 6e 2e 6d 74 69 6d 65 20 44 45 53 43 0a 20 20 20  n.mtime DESC.   
2b630 20 20 4c 49 4d 49 54 20 32 30 0a 20 20 29 0a 53    LIMIT 20.  ).S
2b640 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63 68 65  ELECT * FROM che
2b650 63 6b 69 6e 20 4a 4f 49 4e 20 61 6e 63 65 73 74  ckin JOIN ancest
2b660 6f 72 20 55 53 49 4e 47 28 69 64 29 3b 0a 3c 2f  or USING(id);.</
2b670 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
2b680 3e 0a 0a 3c 70 3e 0a 54 68 65 20 22 4f 52 44 45  >..<p>.The "ORDE
2b690 52 20 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74 69  R BY checkin.mti
2b6a0 6d 65 20 44 45 53 43 22 20 74 65 72 6d 20 69 6e  me DESC" term in
2b6b0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73   the recursive-s
2b6c0 65 6c 65 63 74 20 6d 61 6b 65 73 0a 74 68 65 20  elect makes.the 
2b6d0 71 75 65 72 79 20 72 75 6e 20 6d 75 63 68 20 66  query run much f
2b6e0 61 73 74 65 72 20 62 79 20 70 72 65 76 65 6e 74  aster by prevent
2b6f0 69 6e 67 20 69 74 20 66 72 6f 6d 20 66 6f 6c 6c  ing it from foll
2b700 6f 77 69 6e 67 0a 62 72 61 6e 63 68 65 73 20 74  owing.branches t
2b710 68 61 74 20 6d 65 72 67 65 20 63 68 65 63 6b 69  hat merge checki
2b720 6e 73 0a 66 72 6f 6d 20 6c 6f 6e 67 20 61 67 6f  ns.from long ago
2b730 2e 20 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  .  The ORDER BY 
2b740 66 6f 72 63 65 73 20 74 68 65 20 72 65 63 75 72  forces the recur
2b750 73 69 76 65 2d 73 65 6c 65 63 74 20 74 6f 20 66  sive-select to f
2b760 6f 63 75 73 0a 6f 6e 20 74 68 65 20 6d 6f 73 74  ocus.on the most
2b770 20 72 65 63 65 6e 74 20 63 68 65 63 6b 69 6e 73   recent checkins
2b780 2c 20 74 68 65 20 6f 6e 65 73 20 77 65 20 77 61  , the ones we wa
2b790 6e 74 2e 20 20 57 69 74 68 6f 75 74 20 74 68 65  nt.  Without the
2b7a0 20 4f 52 44 45 52 20 42 59 0a 6f 6e 20 74 68 65   ORDER BY.on the
2b7b0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
2b7c0 74 2c 20 6f 6e 65 20 77 6f 75 6c 64 20 62 65 20  t, one would be 
2b7d0 66 6f 72 63 65 64 20 74 6f 20 63 6f 6d 70 75 74  forced to comput
2b7e0 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 73  e the complete s
2b7f0 65 74 20 6f 66 0a 74 68 6f 75 73 61 6e 64 73 20  et of.thousands 
2b800 6f 66 20 61 6e 63 65 73 74 6f 72 73 2c 20 73 6f  of ancestors, so
2b810 72 74 20 74 68 65 6d 20 61 6c 6c 20 62 79 20 6d  rt them all by m
2b820 74 69 6d 65 2c 20 74 68 65 6e 20 74 61 6b 65 20  time, then take 
2b830 74 68 65 20 74 6f 70 20 74 77 65 6e 74 79 2e 0a  the top twenty..
2b840 54 68 65 20 4f 52 44 45 52 20 42 59 20 65 73 73  The ORDER BY ess
2b850 65 6e 74 69 61 6c 6c 79 20 73 65 74 73 20 75 70  entially sets up
2b860 20 61 20 70 72 69 6f 72 69 74 79 20 71 75 65 75   a priority queu
2b870 65 20 74 68 61 74 0a 66 6f 72 63 65 73 20 74 68  e that.forces th
2b880 65 20 72 65 63 75 72 73 69 76 65 20 71 75 65 72  e recursive quer
2b890 79 20 74 6f 20 6c 6f 6f 6b 20 61 74 20 74 68 65  y to look at the
2b8a0 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e 63   most recent anc
2b8b0 65 73 74 6f 72 73 20 66 69 72 73 74 2c 0a 61 6c  estors first,.al
2b8c0 6c 6f 77 69 6e 67 20 74 68 65 20 75 73 65 20 6f  lowing the use o
2b8d0 66 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  f a LIMIT clause
2b8e0 20 74 6f 20 72 65 73 74 72 69 63 74 20 74 68 65   to restrict the
2b8f0 20 73 63 6f 70 65 20 6f 66 20 74 68 65 0a 71 75   scope of the.qu
2b900 65 72 79 20 74 6f 20 6a 75 73 74 20 74 68 65 20  ery to just the 
2b910 63 68 65 63 6b 69 6e 73 20 6f 66 20 69 6e 74 65  checkins of inte
2b920 72 65 73 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  rest...<tcl>hd_f
2b930 72 61 67 6d 65 6e 74 20 77 69 74 68 6f 72 64 65  ragment withorde
2b940 72 62 79 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 43 6f  rby</tcl>.<h4>Co
2b950 6e 74 72 6f 6c 6c 69 6e 67 20 44 65 70 74 68 2d  ntrolling Depth-
2b960 46 69 72 73 74 20 56 65 72 73 75 73 20 42 72 65  First Versus Bre
2b970 61 64 74 68 2d 46 69 72 73 74 20 53 65 61 72 63  adth-First Searc
2b980 68 20 4f 66 20 61 20 54 72 65 65 0a 55 73 69 6e  h Of a Tree.Usin
2b990 67 20 4f 52 44 45 52 20 42 59 3c 2f 68 34 3e 0a  g ORDER BY</h4>.
2b9a0 0a 3c 70 3e 41 6e 20 4f 52 44 45 52 20 42 59 20  .<p>An ORDER BY 
2b9b0 63 6c 61 75 73 65 20 6f 6e 20 74 68 65 20 72 65  clause on the re
2b9c0 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 63  cursive-select c
2b9d0 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63 6f  an be used to co
2b9e0 6e 74 72 6f 6c 0a 77 68 65 74 68 65 72 20 74 68  ntrol.whether th
2b9f0 65 20 73 65 61 72 63 68 20 6f 66 20 61 20 74 72  e search of a tr
2ba00 65 65 20 69 73 20 64 65 70 74 68 2d 66 69 72 73  ee is depth-firs
2ba10 74 20 6f 72 20 62 72 65 61 64 74 68 2d 66 69 72  t or breadth-fir
2ba20 73 74 2e 20 20 54 6f 0a 69 6c 6c 75 73 74 72 61  st.  To.illustra
2ba30 74 65 2c 20 77 65 20 77 69 6c 6c 20 75 73 65 20  te, we will use 
2ba40 61 20 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74  a variation on t
2ba50 68 65 20 22 6f 72 67 22 20 74 61 62 6c 65 20 66  he "org" table f
2ba60 72 6f 6d 20 61 6e 20 65 78 61 6d 70 6c 65 0a 61  rom an example.a
2ba70 62 6f 76 65 2c 20 77 69 74 68 6f 75 74 20 74 68  bove, without th
2ba80 65 20 22 68 65 69 67 68 74 22 20 63 6f 6c 75 6d  e "height" colum
2ba90 6e 2c 20 61 6e 64 20 77 69 74 68 20 73 6f 6d 65  n, and with some
2baa0 20 72 65 61 6c 20 64 61 74 61 20 69 6e 73 65 72   real data inser
2bab0 74 65 64 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ted:..<blockquot
2bac0 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
2bad0 41 42 4c 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65  ABLE org(.  name
2bae0 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45   TEXT PRIMARY KE
2baf0 59 2c 0a 20 20 62 6f 73 73 20 54 45 58 54 20 52  Y,.  boss TEXT R
2bb00 45 46 45 52 45 4e 43 45 53 20 6f 72 67 0a 29 20  EFERENCES org.) 
2bb10 57 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 49  WITHOUT ROWID;.I
2bb20 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56  NSERT INTO org V
2bb30 41 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 4e 55  ALUES('Alice',NU
2bb40 4c 4c 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  LL);.INSERT INTO
2bb50 20 6f 72 67 20 56 41 4c 55 45 53 28 27 42 6f 62   org VALUES('Bob
2bb60 27 2c 27 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45  ','Alice');.INSE
2bb70 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55  RT INTO org VALU
2bb80 45 53 28 27 43 69 6e 64 79 27 2c 27 41 6c 69 63  ES('Cindy','Alic
2bb90 65 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  e');.INSERT INTO
2bba0 20 6f 72 67 20 56 41 4c 55 45 53 28 27 44 61 76   org VALUES('Dav
2bbb0 65 27 2c 27 42 6f 62 27 29 3b 0a 49 4e 53 45 52  e','Bob');.INSER
2bbc0 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45  T INTO org VALUE
2bbd0 53 28 27 45 6d 6d 61 27 2c 27 42 6f 62 27 29 3b  S('Emma','Bob');
2bbe0 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67  .INSERT INTO org
2bbf0 20 56 41 4c 55 45 53 28 27 46 72 65 64 27 2c 27   VALUES('Fred','
2bc00 43 69 6e 64 79 27 29 3b 0a 49 4e 53 45 52 54 20  Cindy');.INSERT 
2bc10 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28  INTO org VALUES(
2bc20 27 47 61 69 6c 27 2c 27 43 69 6e 64 79 27 29 3b  'Gail','Cindy');
2bc30 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
2bc40 6f 74 65 3e 0a 0a 3c 70 3e 48 65 72 65 20 69 73  ote>..<p>Here is
2bc50 20 61 20 71 75 65 72 79 20 74 6f 20 73 68 6f 77   a query to show
2bc60 20 74 68 65 20 74 72 65 65 20 73 74 72 75 63 74   the tree struct
2bc70 75 72 65 20 69 6e 20 61 20 62 72 65 61 64 74 68  ure in a breadth
2bc80 2d 66 69 72 73 74 20 70 61 74 74 65 72 6e 3a 0a  -first pattern:.
2bc90 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
2bca0 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56  e>.WITH RECURSIV
2bcb0 45 0a 20 20 75 6e 64 65 72 5f 61 6c 69 63 65 28  E.  under_alice(
2bcc0 6e 61 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20 28  name,level) AS (
2bcd0 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69  .    VALUES('Ali
2bce0 63 65 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f 4e  ce',0).    UNION
2bcf0 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20   ALL.    SELECT 
2bd00 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72 5f  org.name, under_
2bd10 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20 20  alice.level+1.  
2bd20 20 20 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f 49      FROM org JOI
2bd30 4e 20 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f 4e  N under_alice ON
2bd40 20 6f 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72 5f   org.boss=under_
2bd50 61 6c 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20 20  alice.name.     
2bd60 4f 52 44 45 52 20 42 59 20 32 0a 20 20 29 0a 53  ORDER BY 2.  ).S
2bd70 45 4c 45 43 54 20 73 75 62 73 74 72 28 27 2e 2e  ELECT substr('..
2bd80 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65  ........',1,leve
2bd90 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f  l*3) || name FRO
2bda0 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c  M under_alice;.<
2bdb0 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
2bdc0 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 4f 52 44 45  e>..<p>The "ORDE
2bdd0 52 20 42 59 20 32 22 20 28 77 68 69 63 68 20 6d  R BY 2" (which m
2bde0 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73  eans the same as
2bdf0 20 22 4f 52 44 45 52 20 42 59 20 75 6e 64 65 72   "ORDER BY under
2be00 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 22 29  _alice.level+1")
2be10 0a 63 61 75 73 65 73 20 68 69 67 68 65 72 20 6c  .causes higher l
2be20 65 76 65 6c 73 20 69 6e 20 74 68 65 20 6f 72 67  evels in the org
2be30 61 6e 69 7a 61 74 69 6f 6e 20 63 68 61 72 74 20  anization chart 
2be40 28 77 69 74 68 20 73 6d 61 6c 6c 65 72 20 22 6c  (with smaller "l
2be50 65 76 65 6c 22 20 76 61 6c 75 65 73 29 0a 74 6f  evel" values).to
2be60 20 62 65 20 70 72 6f 63 65 73 73 65 64 20 66 69   be processed fi
2be70 72 73 74 2c 20 72 65 73 75 6c 74 69 6e 67 20 69  rst, resulting i
2be80 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69 72 73  n a breadth-firs
2be90 74 20 73 65 61 72 63 68 2e 20 20 54 68 65 20 6f  t search.  The o
2bea0 75 74 70 75 74 20 69 73 3a 0a 0a 3c 62 6c 6f 63  utput is:..<bloc
2beb0 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c 69  kquote><pre>.Ali
2bec0 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 43 69 6e  ce....Bob....Cin
2bed0 64 79 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e  dy.......Dave...
2bee0 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e 46  ....Emma.......F
2bef0 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c  red.......Gail.<
2bf00 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
2bf10 65 3e 0a 0a 3c 70 3e 42 75 74 20 69 66 20 77 65  e>..<p>But if we
2bf20 20 63 68 61 6e 67 65 20 74 68 65 20 4f 52 44 45   change the ORDE
2bf30 52 20 42 59 20 63 6c 61 75 73 65 20 74 6f 20 61  R BY clause to a
2bf40 64 64 20 74 68 65 20 22 44 45 53 43 22 20 6d 6f  dd the "DESC" mo
2bf50 64 69 66 69 65 72 2c 20 74 68 61 74 20 77 69 6c  difier, that wil
2bf60 6c 0a 63 61 75 73 65 20 6c 6f 77 65 72 20 6c 65  l.cause lower le
2bf70 76 65 6c 73 20 69 6e 20 74 68 65 20 6f 72 67 61  vels in the orga
2bf80 6e 69 7a 61 74 69 6f 6e 20 28 77 69 74 68 20 6c  nization (with l
2bf90 61 72 67 65 72 20 22 6c 65 76 65 6c 22 20 76 61  arger "level" va
2bfa0 6c 75 65 73 29 20 74 6f 20 62 65 0a 70 72 6f 63  lues) to be.proc
2bfb0 65 73 73 65 64 20 66 69 72 73 74 20 62 79 20 74  essed first by t
2bfc0 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
2bfd0 65 63 74 2c 20 72 65 73 75 6c 74 69 6e 67 20 69  ect, resulting i
2bfe0 6e 20 61 20 64 65 70 74 68 2d 66 69 72 73 74 20  n a depth-first 
2bff0 73 65 61 72 63 68 3a 0a 0a 3c 62 6c 6f 63 6b 71  search:..<blockq
2c000 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20  uote><pre>.WITH 
2c010 52 45 43 55 52 53 49 56 45 0a 20 20 75 6e 64 65  RECURSIVE.  unde
2c020 72 5f 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65 76  r_alice(name,lev
2c030 65 6c 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c  el) AS (.    VAL
2c040 55 45 53 28 27 41 6c 69 63 65 27 2c 30 29 0a 20  UES('Alice',0). 
2c050 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20     UNION ALL.   
2c060 20 53 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d 65   SELECT org.name
2c070 2c 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65  , under_alice.le
2c080 76 65 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f 4d  vel+1.      FROM
2c090 20 6f 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72 5f   org JOIN under_
2c0a0 61 6c 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f 73  alice ON org.bos
2c0b0 73 3d 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e 61  s=under_alice.na
2c0c0 6d 65 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59  me.     ORDER BY
2c0d0 20 32 20 3c 62 3e 44 45 53 43 3c 2f 62 3e 0a 20   2 <b>DESC</b>. 
2c0e0 20 29 0a 53 45 4c 45 43 54 20 73 75 62 73 74 72   ).SELECT substr
2c0f0 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c  ('..........',1,
2c100 6c 65 76 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65  level*3) || name
2c110 20 46 52 4f 4d 20 75 6e 64 65 72 5f 61 6c 69 63   FROM under_alic
2c120 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  e;.</pre></block
2c130 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f  quote>..<p>The o
2c140 75 74 70 75 74 20 6f 66 20 74 68 69 73 20 72 65  utput of this re
2c150 76 69 73 65 64 20 71 75 65 72 79 20 69 73 3a 0a  vised query is:.
2c160 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
2c170 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a  e>.Alice....Bob.
2c180 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e  ......Dave......
2c190 2e 45 6d 6d 61 0a 2e 2e 2e 43 69 6e 64 79 0a 2e  .Emma....Cindy..
2c1a0 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e  .....Fred.......
2c1b0 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  Gail.</pre></blo
2c1c0 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 57 68 65  ckquote>..<p>Whe
2c1d0 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  n the ORDER BY c
2c1e0 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64  lause is omitted
2c1f0 20 66 72 6f 6d 20 74 68 65 20 72 65 63 75 72 73   from the recurs
2c200 69 76 65 2d 73 65 6c 65 63 74 2c 20 74 68 65 0a  ive-select, the.
2c210 71 75 65 75 65 20 62 65 68 61 76 65 73 20 61 73  queue behaves as
2c220 20 61 20 46 49 46 4f 2c 20 77 68 69 63 68 20 72   a FIFO, which r
2c230 65 73 75 6c 74 73 20 69 6e 20 61 20 62 72 65 61  esults in a brea
2c240 64 74 68 2d 66 69 72 73 74 20 73 65 61 72 63 68  dth-first search
2c250 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  ....<tcl>hd_frag
2c260 6d 65 6e 74 20 6d 61 6e 64 65 6c 62 72 6f 74 20  ment mandelbrot 
2c270 7b 63 6f 6d 70 75 74 65 20 74 68 65 20 4d 61 6e  {compute the Man
2c280 64 65 6c 62 72 6f 74 20 73 65 74 7d 3c 2f 74 63  delbrot set}</tc
2c290 6c 3e 0a 3c 68 34 3e 4f 75 74 6c 61 6e 64 69 73  l>.<h4>Outlandis
2c2a0 68 20 52 65 63 75 72 73 69 76 65 20 51 75 65 72  h Recursive Quer
2c2b0 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a  y Examples</h4>.
2c2c0 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
2c2d0 67 20 71 75 65 72 79 20 63 6f 6d 70 75 74 65 73  g query computes
2c2e0 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f   an approximatio
2c2f0 6e 20 6f 66 20 74 68 65 20 4d 61 6e 64 65 6c 62  n of the Mandelb
2c300 72 6f 74 20 53 65 74 0a 61 6e 64 20 6f 75 74 70  rot Set.and outp
2c310 75 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 61  uts the result a
2c320 73 20 41 53 43 49 49 2d 61 72 74 3a 0a 0a 3c 62  s ASCII-art:..<b
2c330 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
2c340 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
2c350 20 78 61 78 69 73 28 78 29 20 41 53 20 28 56 41   xaxis(x) AS (VA
2c360 4c 55 45 53 28 2d 32 2e 30 29 20 55 4e 49 4f 4e  LUES(-2.0) UNION
2c370 20 41 4c 4c 20 53 45 4c 45 43 54 20 78 2b 30 2e   ALL SELECT x+0.
2c380 30 35 20 46 52 4f 4d 20 78 61 78 69 73 20 57 48  05 FROM xaxis WH
2c390 45 52 45 20 78 26 6c 74 3b 31 2e 32 29 2c 0a 20  ERE x&lt;1.2),. 
2c3a0 20 79 61 78 69 73 28 79 29 20 41 53 20 28 56 41   yaxis(y) AS (VA
2c3b0 4c 55 45 53 28 2d 31 2e 30 29 20 55 4e 49 4f 4e  LUES(-1.0) UNION
2c3c0 20 41 4c 4c 20 53 45 4c 45 43 54 20 79 2b 30 2e   ALL SELECT y+0.
2c3d0 31 20 46 52 4f 4d 20 79 61 78 69 73 20 57 48 45  1 FROM yaxis WHE
2c3e0 52 45 20 79 26 6c 74 3b 31 2e 30 29 2c 0a 20 20  RE y&lt;1.0),.  
2c3f0 6d 28 69 74 65 72 2c 20 63 78 2c 20 63 79 2c 20  m(iter, cx, cy, 
2c400 78 2c 20 79 29 20 41 53 20 28 0a 20 20 20 20 53  x, y) AS (.    S
2c410 45 4c 45 43 54 20 30 2c 20 78 2c 20 79 2c 20 30  ELECT 0, x, y, 0
2c420 2e 30 2c 20 30 2e 30 20 46 52 4f 4d 20 78 61 78  .0, 0.0 FROM xax
2c430 69 73 2c 20 79 61 78 69 73 0a 20 20 20 20 55 4e  is, yaxis.    UN
2c440 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45  ION ALL.    SELE
2c450 43 54 20 69 74 65 72 2b 31 2c 20 63 78 2c 20 63  CT iter+1, cx, c
2c460 79 2c 20 78 2a 78 2d 79 2a 79 20 2b 20 63 78 2c  y, x*x-y*y + cx,
2c470 20 32 2e 30 2a 78 2a 79 20 2b 20 63 79 20 46 52   2.0*x*y + cy FR
2c480 4f 4d 20 6d 20 0a 20 20 20 20 20 57 48 45 52 45  OM m .     WHERE
2c490 20 28 78 2a 78 20 2b 20 79 2a 79 29 20 26 6c 74   (x*x + y*y) &lt
2c4a0 3b 20 34 2e 30 20 41 4e 44 20 69 74 65 72 26 6c  ; 4.0 AND iter&l
2c4b0 74 3b 32 38 0a 20 20 29 2c 0a 20 20 6d 32 28 69  t;28.  ),.  m2(i
2c4c0 74 65 72 2c 20 63 78 2c 20 63 79 29 20 41 53 20  ter, cx, cy) AS 
2c4d0 28 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 61 78  (.    SELECT max
2c4e0 28 69 74 65 72 29 2c 20 63 78 2c 20 63 79 20 46  (iter), cx, cy F
2c4f0 52 4f 4d 20 6d 20 47 52 4f 55 50 20 42 59 20 63  ROM m GROUP BY c
2c500 78 2c 20 63 79 0a 20 20 29 2c 0a 20 20 61 28 74  x, cy.  ),.  a(t
2c510 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43  ) AS (.    SELEC
2c520 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 20  T group_concat( 
2c530 73 75 62 73 74 72 28 27 20 2e 2b 2a 23 27 2c 20  substr(' .+*#', 
2c540 31 2b 6d 69 6e 28 69 74 65 72 2f 37 2c 34 29 2c  1+min(iter/7,4),
2c550 20 31 29 2c 20 27 27 29 20 0a 20 20 20 20 46 52   1), '') .    FR
2c560 4f 4d 20 6d 32 20 47 52 4f 55 50 20 42 59 20 63  OM m2 GROUP BY c
2c570 79 0a 20 20 29 0a 53 45 4c 45 43 54 20 67 72 6f  y.  ).SELECT gro
2c580 75 70 5f 63 6f 6e 63 61 74 28 72 74 72 69 6d 28  up_concat(rtrim(
2c590 74 29 2c 78 27 30 61 27 29 20 46 52 4f 4d 20 61  t),x'0a') FROM a
2c5a0 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
2c5b0 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68 69  uote>..<p>In thi
2c5c0 73 20 71 75 65 72 79 2c 20 74 68 65 20 22 78 61  s query, the "xa
2c5d0 78 69 73 22 20 61 6e 64 20 22 79 61 78 69 73 22  xis" and "yaxis"
2c5e0 20 43 54 45 73 20 64 65 66 69 6e 65 20 74 68 65   CTEs define the
2c5f0 20 67 72 69 64 20 6f 66 20 70 6f 69 6e 74 73 20   grid of points 
2c600 66 6f 72 0a 77 68 69 63 68 20 74 68 65 20 4d 61  for.which the Ma
2c610 6e 64 65 6c 62 72 6f 74 20 53 65 74 20 77 69 6c  ndelbrot Set wil
2c620 6c 20 62 65 20 61 70 70 72 6f 78 69 6d 61 74 65  l be approximate
2c630 64 2e 20 20 45 61 63 68 20 72 6f 77 20 69 6e 20  d.  Each row in 
2c640 74 68 65 0a 22 6d 28 69 74 65 72 2c 63 78 2c 63  the."m(iter,cx,c
2c650 79 2c 78 2c 79 29 22 20 43 54 45 20 6d 65 61 6e  y,x,y)" CTE mean
2c660 73 20 74 68 61 74 20 61 66 74 65 72 20 22 69 74  s that after "it
2c670 65 72 22 20 69 74 65 72 61 74 69 6f 6e 73 2c 20  er" iterations, 
2c680 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 0a 69  the Mandelbrot.i
2c690 74 65 72 61 74 69 6f 6e 20 73 74 61 72 74 69 6e  teration startin
2c6a0 67 20 61 74 20 63 78 2c 63 79 20 68 61 73 20 72  g at cx,cy has r
2c6b0 65 61 63 68 65 64 20 70 6f 69 6e 74 20 78 2c 79  eached point x,y
2c6c0 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  .  The number of
2c6d0 20 69 74 65 72 61 74 69 6f 6e 73 0a 69 6e 20 74   iterations.in t
2c6e0 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20 6c  his example is l
2c6f0 69 6d 69 74 65 64 20 74 6f 20 32 38 20 28 77 68  imited to 28 (wh
2c700 69 63 68 20 73 65 76 65 72 65 6c 79 20 6c 69 6d  ich severely lim
2c710 69 74 73 20 74 68 65 20 72 65 73 6f 6c 75 74 69  its the resoluti
2c720 6f 6e 20 6f 66 0a 74 68 65 20 63 6f 6d 70 75 74  on of.the comput
2c730 61 74 69 6f 6e 2c 20 62 75 74 20 69 73 20 73 75  ation, but is su
2c740 66 66 69 63 69 65 6e 74 20 66 6f 72 20 6c 6f 77  fficient for low
2c750 2d 72 65 73 6f 6c 75 74 69 6f 6e 20 41 53 43 49  -resolution ASCI
2c760 49 2d 61 72 74 20 6f 75 74 70 75 74 29 2e 0a 54  I-art output)..T
2c770 68 65 20 22 6d 32 28 69 74 65 72 2c 63 78 2c 63  he "m2(iter,cx,c
2c780 79 29 22 20 43 54 45 20 68 6f 6c 64 73 20 74 68  y)" CTE holds th
2c790 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
2c7a0 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 72   of iterations r
2c7b0 65 61 63 68 65 64 20 77 68 65 6e 0a 73 74 61 72  eached when.star
2c7c0 74 69 6e 67 20 61 74 20 70 6f 69 6e 74 20 63 78  ting at point cx
2c7d0 2c 63 79 2e 0a 46 69 6e 61 6c 6c 79 2c 20 65 61  ,cy..Finally, ea
2c7e0 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 22 61  ch row in the "a
2c7f0 28 74 29 22 20 43 54 45 20 68 6f 6c 64 73 20 61  (t)" CTE holds a
2c800 20 73 74 72 69 6e 67 20 0a 77 68 69 63 68 20 69   string .which i
2c810 73 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65 20  s a single line 
2c820 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 41 53  of the output AS
2c830 43 49 49 2d 61 72 74 2e 0a 54 68 65 20 53 45 4c  CII-art..The SEL
2c840 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74  ECT statement at
2c850 20 74 68 65 20 65 6e 64 20 6a 75 73 74 20 71 75   the end just qu
2c860 65 72 69 65 73 20 74 68 65 20 22 61 22 20 43 54  eries the "a" CT
2c870 45 20 74 6f 0a 72 65 74 72 69 65 76 65 20 61 6c  E to.retrieve al
2c880 6c 20 6c 69 6e 65 73 20 6f 66 20 41 53 43 49 49  l lines of ASCII
2c890 2d 61 72 74 2c 20 6f 6e 65 20 62 79 20 6f 6e 65  -art, one by one
2c8a0 2e 0a 0a 3c 70 3e 52 75 6e 6e 69 6e 67 20 74 68  ...<p>Running th
2c8b0 65 20 71 75 65 72 79 20 61 62 6f 76 65 20 69 6e  e query above in
2c8c0 20 61 6e 20 53 51 4c 69 74 65 20 5b 63 6f 6d 6d   an SQLite [comm
2c8d0 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d 20  and-line shell] 
2c8e0 72 65 73 75 6c 74 73 0a 69 6e 20 74 68 65 20 66  results.in the f
2c8f0 6f 6c 6c 6f 77 69 6e 67 20 6f 75 74 70 75 74 3a  ollowing output:
2c900 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
2c910 72 65 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20  re>.            
2c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c930 20 20 20 20 20 20 20 20 2e 2e 2e 2e 23 0a 20 20          ....#.  
2c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c960 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20 20 20   ..#*...        
2c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c980 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23 23 23           ..+####
2c990 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
2c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
2c9b0 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20  ......+####.... 
2c9c0 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20    +.            
2c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
2c9e0 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b  .##+*##########+
2c9f0 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20  .++++.          
2ca00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca10 2e 2b 2e 23 23 23 23 23 23 23 23 23 23 23 23 23  .+.#############
2ca20 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20  #####+..        
2ca30 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e        ..........
2ca40 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23 23 23 23  ...+############
2ca50 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20 20 20 20  #######+.+.     
2ca60 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23           ..++..#
2ca70 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23 23  .....*##########
2ca80 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20  ###########+..  
2ca90 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23             ...+#
2caa0 23 23 23 23 23 23 2b 2b 23 23 23 23 23 23 23 23  ######++########
2cab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e  ###############.
2cac0 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2b  .          ....+
2cad0 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  *###############
2cae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2caf0 23 2e 0a 20 23 23 23 23 23 23 23 23 23 23 23 23  #.. ############
2cb00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cb10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cb20 23 2e 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 2e  #....          .
2cb30 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23 23 23  ...+*###########
2cb40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cb50 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20  #####..         
2cb60 20 20 20 20 2e 2e 2e 2b 23 23 23 23 23 23 23 2b      ...+#######+
2cb70 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +###############
2cb80 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20 20 20  ########..      
2cb90 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e          ..++..#.
2cba0 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23 23 23  ....*###########
2cbb0 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20  ##########+..   
2cbc0 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e             .....
2cbd0 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23  ........+#######
2cbe0 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a  ############+.+.
2cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc00 20 20 20 20 20 20 20 20 20 20 2e 2b 2e 23 23 23            .+.###
2cc10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b  ###############+
2cc20 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23               ..#
2cc40 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b 2e 2b  #+*##########+.+
2cc50 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +++.            
2cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc70 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e  .......+####....
2cc80 20 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20     +.           
2cc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cca0 20 20 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e 0a        ..+####+..
2ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccd0 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20     ..#*...      
2cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
2cd00 2e 2e 23 0a 20 20 20 20 20 20 20 20 20 20 20 20  ..#.            
2cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd20 20 20 20 20 20 20 20 20 2b 2e 0a 3c 2f 70 72 65          +..</pre
2cd30 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
2cd40 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2cd50 20 73 75 64 6f 6b 75 20 7b 73 6f 6c 76 65 20 53   sudoku {solve S
2cd60 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 73 7d 20 3c  udoku puzzles} <
2cd70 2f 74 63 6c 3e 0a 3c 70 3e 54 68 69 73 20 6e 65  /tcl>.<p>This ne
2cd80 78 74 20 71 75 65 72 79 20 73 6f 6c 76 65 73 20  xt query solves 
2cd90 61 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 2e  a Sudoku puzzle.
2cda0 20 20 54 68 65 20 73 74 61 74 65 20 6f 66 20 74    The state of t
2cdb0 68 65 20 70 75 7a 7a 6c 65 20 69 73 0a 64 65 66  he puzzle is.def
2cdc0 69 6e 65 64 20 62 79 20 61 6e 20 38 31 2d 63 68  ined by an 81-ch
2cdd0 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 20 66  aracter string f
2cde0 6f 72 6d 65 64 20 62 79 20 72 65 61 64 69 6e 67  ormed by reading
2cdf0 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
2ce00 65 0a 70 75 7a 7a 6c 65 20 62 6f 78 20 72 6f 77  e.puzzle box row
2ce10 20 62 79 20 72 6f 77 20 66 72 6f 6d 20 6c 65 66   by row from lef
2ce20 74 20 74 6f 20 72 69 67 68 74 20 61 6e 64 20 74  t to right and t
2ce30 68 65 6e 20 66 72 6f 6d 20 74 6f 70 20 74 6f 20  hen from top to 
2ce40 62 6f 74 74 6f 6d 2e 0a 42 6c 61 6e 6b 20 73 71  bottom..Blank sq
2ce50 75 61 72 65 73 20 69 6e 20 74 68 65 20 70 75 7a  uares in the puz
2ce60 7a 6c 65 20 61 72 65 20 64 65 6e 6f 74 65 64 20  zle are denoted 
2ce70 62 79 20 61 20 22 2e 22 20 63 68 61 72 61 63 74  by a "." charact
2ce80 65 72 2e 20 20 0a 54 68 75 73 20 74 68 65 20 69  er.  .Thus the i
2ce90 6e 70 75 74 20 73 74 72 69 6e 67 3a 0a 0a 3c 62  nput string:..<b
2cea0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 2e 2e 37  lockquote>.53..7
2ceb0 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38  ....6..195....98
2cec0 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34  ....6.8...6...34
2ced0 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e  ..8.3..17...2...
2cee0 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39  6.6....28....419
2cef0 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c 2f 62  ..5....8..79.</b
2cf00 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43  lockquote>..<p>C
2cf10 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 20  orresponds to a 
2cf20 70 75 7a 7a 6c 65 20 6c 69 6b 65 20 74 68 69 73  puzzle like this
2cf30 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  :..<blockquote>.
2cf40 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 31  <table border="1
2cf50 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
2cf60 22 3e 0a 3c 74 72 3e 3c 74 64 3e 35 3c 74 64 3e  ">.<tr><td>5<td>
2cf70 33 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37  3<td> <td> <td>7
2cf80 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
2cf90 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 36 3c 74 64  td>.<tr><td>6<td
2cfa0 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 3c 74 64 3e  > <td> <td>1<td>
2cfb0 39 3c 74 64 3e 35 3c 74 64 3e 20 3c 74 64 3e 20  9<td>5<td> <td> 
2cfc0 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74  <td>.<tr><td> <t
2cfd0 64 3e 39 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64  d>9<td>8<td> <td
2cfe0 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
2cff0 36 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 38 3c  6<td>.<tr><td>8<
2d000 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
2d010 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>6<td> <td> <td
2d020 3e 20 3c 74 64 3e 33 0a 3c 74 72 3e 3c 74 64 3e  > <td>3.<tr><td>
2d030 34 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38  4<td> <td> <td>8
2d040 3c 74 64 3e 20 3c 74 64 3e 33 3c 74 64 3e 20 3c  <td> <td>3<td> <
2d050 74 64 3e 20 3c 74 64 3e 31 0a 3c 74 72 3e 3c 74  td> <td>1.<tr><t
2d060 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>7<td> <td> <td
2d070 3e 20 3c 74 64 3e 32 3c 74 64 3e 20 3c 74 64 3e  > <td>2<td> <td>
2d080 20 3c 74 64 3e 20 3c 74 64 3e 36 0a 3c 74 72 3e   <td> <td>6.<tr>
2d090 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c  <td> <td>6<td> <
2d0a0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
2d0b0 64 3e 32 3c 74 64 3e 38 3c 74 64 3e 0a 3c 74 72  d>2<td>8<td>.<tr
2d0c0 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  ><td> <td> <td> 
2d0d0 3c 74 64 3e 34 3c 74 64 3e 31 3c 74 64 3e 39 3c  <td>4<td>1<td>9<
2d0e0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 35 0a 3c  td> <td> <td>5.<
2d0f0 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  tr><td> <td> <td
2d100 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64 3e  > <td> <td>8<td>
2d110 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64 3e 39   <td> <td>7<td>9
2d120 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
2d130 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69 73  kquote>..<p>This
2d140 20 69 73 20 74 68 65 20 71 75 65 72 79 20 74 68   is the query th
2d150 61 74 20 73 6f 6c 76 65 73 20 74 68 65 20 70 75  at solves the pu
2d160 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  zzle:..<blockquo
2d170 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
2d180 43 55 52 53 49 56 45 0a 20 20 69 6e 70 75 74 28  CURSIVE.  input(
2d190 73 75 64 29 20 41 53 20 28 0a 20 20 20 20 56 41  sud) AS (.    VA
2d1a0 4c 55 45 53 28 27 35 33 2e 2e 37 2e 2e 2e 2e 36  LUES('53..7....6
2d1b0 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36  ..195....98....6
2d1c0 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e 33  .8...6...34..8.3
2d1d0 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e  ..17...2...6.6..
2d1e0 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e 2e  ..28....419..5..
2d1f0 2e 2e 38 2e 2e 37 39 27 29 0a 20 20 29 2c 0a 20  ..8..79').  ),. 
2d200 20 64 69 67 69 74 73 28 7a 2c 20 6c 70 29 20 41   digits(z, lp) A
2d210 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27  S (.    VALUES('
2d220 31 27 2c 20 31 29 0a 20 20 20 20 55 4e 49 4f 4e  1', 1).    UNION
2d230 20 41 4c 4c 20 53 45 4c 45 43 54 0a 20 20 20 20   ALL SELECT.    
2d240 43 41 53 54 28 6c 70 2b 31 20 41 53 20 54 45 58  CAST(lp+1 AS TEX
2d250 54 29 2c 20 6c 70 2b 31 20 46 52 4f 4d 20 64 69  T), lp+1 FROM di
2d260 67 69 74 73 20 57 48 45 52 45 20 6c 70 26 6c 74  gits WHERE lp&lt
2d270 3b 39 0a 20 20 29 2c 0a 20 20 78 28 73 2c 20 69  ;9.  ),.  x(s, i
2d280 6e 64 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c  nd) AS (.    SEL
2d290 45 43 54 20 73 75 64 2c 20 69 6e 73 74 72 28 73  ECT sud, instr(s
2d2a0 75 64 2c 20 27 2e 27 29 20 46 52 4f 4d 20 69 6e  ud, '.') FROM in
2d2b0 70 75 74 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c  put.    UNION AL
2d2c0 4c 0a 20 20 20 20 53 45 4c 45 43 54 0a 20 20 20  L.    SELECT.   
2d2d0 20 20 20 73 75 62 73 74 72 28 73 2c 20 31 2c 20     substr(s, 1, 
2d2e0 69 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20 73  ind-1) || z || s
2d2f0 75 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29 2c  ubstr(s, ind+1),
2d300 0a 20 20 20 20 20 20 69 6e 73 74 72 28 20 73 75  .      instr( su
2d310 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31  bstr(s, 1, ind-1
2d320 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72  ) || z || substr
2d330 28 73 2c 20 69 6e 64 2b 31 29 2c 20 27 2e 27 20  (s, ind+1), '.' 
2d340 29 0a 20 20 20 20 20 46 52 4f 4d 20 78 2c 20 64  ).     FROM x, d
2d350 69 67 69 74 73 20 41 53 20 7a 0a 20 20 20 20 57  igits AS z.    W
2d360 48 45 52 45 20 69 6e 64 3e 30 0a 20 20 20 20 20  HERE ind>0.     
2d370 20 41 4e 44 20 4e 4f 54 20 45 58 49 53 54 53 20   AND NOT EXISTS 
2d380 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 45  (.            SE
2d390 4c 45 43 54 20 31 0a 20 20 20 20 20 20 20 20 20  LECT 1.         
2d3a0 20 20 20 20 20 46 52 4f 4d 20 64 69 67 69 74 73       FROM digits
2d3b0 20 41 53 20 6c 70 0a 20 20 20 20 20 20 20 20 20   AS lp.         
2d3c0 20 20 20 20 57 48 45 52 45 20 7a 2e 7a 20 3d 20      WHERE z.z = 
2d3d0 73 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d  substr(s, ((ind-
2d3e0 31 29 2f 39 29 2a 39 20 2b 20 6c 70 2c 20 31 29  1)/9)*9 + lp, 1)
2d3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d400 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72   OR z.z = substr
2d410 28 73 2c 20 28 28 69 6e 64 2d 31 29 25 39 29 20  (s, ((ind-1)%9) 
2d420 2b 20 28 6c 70 2d 31 29 2a 39 20 2b 20 31 2c 20  + (lp-1)*9 + 1, 
2d430 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1).             
2d440 20 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73     OR z.z = subs
2d450 74 72 28 73 2c 20 28 28 28 69 6e 64 2d 31 29 2f  tr(s, (((ind-1)/
2d460 33 29 20 25 20 33 29 20 2a 20 33 0a 20 20 20 20  3) % 3) * 3.    
2d470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d480 20 20 20 20 2b 20 28 28 69 6e 64 2d 31 29 2f 32      + ((ind-1)/2
2d490 37 29 20 2a 20 32 37 20 2b 20 6c 70 0a 20 20 20  7) * 27 + lp.   
2d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4b0 20 20 20 20 20 2b 20 28 28 6c 70 2d 31 29 20 2f       + ((lp-1) /
2d4c0 20 33 29 20 2a 20 36 2c 20 31 29 0a 20 20 20 20   3) * 6, 1).    
2d4d0 20 20 20 20 20 29 0a 20 20 29 0a 53 45 4c 45 43       ).  ).SELEC
2d4e0 54 20 73 20 46 52 4f 4d 20 78 20 57 48 45 52 45  T s FROM x WHERE
2d4f0 20 69 6e 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c 2f   ind=0;.</pre></
2d500 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
2d510 54 68 65 20 22 69 6e 70 75 74 22 20 43 54 45 20  The "input" CTE 
2d520 64 65 66 69 6e 65 73 20 74 68 65 20 69 6e 70 75  defines the inpu
2d530 74 20 70 75 7a 7a 6c 65 2e 0a 54 68 65 20 22 64  t puzzle..The "d
2d540 69 67 69 74 73 22 20 43 54 45 20 64 65 66 69 6e  igits" CTE defin
2d550 65 73 20 61 20 74 61 62 6c 65 20 74 68 61 74 20  es a table that 
2d560 68 6f 6c 64 73 20 61 6c 6c 20 64 69 67 69 74 73  holds all digits
2d570 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39   between 1 and 9
2d580 2e 0a 54 68 65 20 77 6f 72 6b 20 6f 66 20 73 6f  ..The work of so
2d590 6c 76 69 6e 67 20 74 68 65 20 70 75 7a 7a 6c 65  lving the puzzle
2d5a0 20 69 73 20 75 6e 64 65 72 74 61 6b 65 6e 20 62   is undertaken b
2d5b0 79 20 74 68 65 20 22 78 22 20 43 54 45 2e 0a 41  y the "x" CTE..A
2d5c0 6e 20 65 6e 74 72 79 20 69 6e 20 78 28 73 2c 69  n entry in x(s,i
2d5d0 6e 64 29 20 6d 65 61 6e 73 20 74 68 61 74 20 74  nd) means that t
2d5e0 68 65 20 38 31 2d 63 68 61 72 61 63 74 65 72 20  he 81-character 
2d5f0 73 74 72 69 6e 67 20 22 73 22 20 69 73 20 61 20  string "s" is a 
2d600 76 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75 7a  valid.sudoku puz
2d610 7a 6c 65 20 28 69 74 20 68 61 73 20 6e 6f 20 63  zle (it has no c
2d620 6f 6e 66 6c 69 63 74 73 29 20 61 6e 64 20 74 68  onflicts) and th
2d630 61 74 20 74 68 65 20 66 69 72 73 74 20 75 6e 6b  at the first unk
2d640 6e 6f 77 6e 20 63 68 61 72 61 63 74 65 72 0a 69  nown character.i
2d650 73 20 61 74 20 70 6f 73 69 74 69 6f 6e 20 22 69  s at position "i
2d660 6e 64 22 2c 20 6f 72 20 69 6e 64 3d 3d 30 20 69  nd", or ind==0 i
2d670 66 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72 20  f all character 
2d680 70 6f 73 69 74 69 6f 6e 73 20 61 72 65 20 66 69  positions are fi
2d690 6c 6c 65 64 20 69 6e 2e 0a 54 68 65 20 67 6f 61  lled in..The goa
2d6a0 6c 2c 20 74 68 65 6e 2c 20 69 73 20 74 6f 20 63  l, then, is to c
2d6b0 6f 6d 70 75 74 65 20 65 6e 74 72 69 65 73 20 66  ompute entries f
2d6c0 6f 72 20 22 78 22 20 77 69 74 68 20 61 6e 20 22  or "x" with an "
2d6d0 69 6e 64 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e 54  ind" of 0...<p>T
2d6e0 68 65 20 73 6f 6c 76 65 72 20 77 6f 72 6b 73 20  he solver works 
2d6f0 62 79 20 61 64 64 69 6e 67 20 6e 65 77 20 65 6e  by adding new en
2d700 74 72 69 65 73 20 74 6f 20 74 68 65 20 22 78 22  tries to the "x"
2d710 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
2d720 2e 0a 47 69 76 65 6e 20 70 72 69 6f 72 20 65 6e  ..Given prior en
2d730 74 72 69 65 73 2c 20 74 68 65 20 72 65 63 75 72  tries, the recur
2d740 73 69 76 65 2d 73 65 6c 65 63 74 20 74 72 69 65  sive-select trie
2d750 73 20 74 6f 20 66 69 6c 6c 20 69 6e 20 61 20 73  s to fill in a s
2d760 69 6e 67 6c 65 20 6e 65 77 0a 70 6f 73 69 74 69  ingle new.positi
2d770 6f 6e 20 77 69 74 68 20 61 6c 6c 20 76 61 6c 75  on with all valu
2d780 65 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  es between 1 and
2d790 20 39 20 74 68 61 74 20 61 63 74 75 61 6c 6c 79   9 that actually
2d7a0 20 77 6f 72 6b 20 69 6e 20 74 68 61 74 0a 70 6f   work in that.po
2d7b0 73 69 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d  sition.  The com
2d7c0 70 6c 69 63 61 74 65 64 20 22 4e 4f 54 20 45 58  plicated "NOT EX
2d7d0 49 53 54 53 22 20 73 75 62 71 75 65 72 79 20 69  ISTS" subquery i
2d7e0 73 20 74 68 65 20 6d 61 67 69 63 20 74 68 61 74  s the magic that
2d7f0 0a 66 69 67 75 72 65 73 20 6f 75 74 20 77 68 65  .figures out whe
2d800 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68  ther or not each
2d810 20 63 61 6e 64 69 64 61 74 65 20 22 73 22 20 73   candidate "s" s
2d820 74 72 69 6e 67 20 69 73 20 61 20 76 61 6c 69 64  tring is a valid
2d830 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 6f  .sudoku puzzle o
2d840 72 20 6e 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20 66  r not...<p>The f
2d850 69 6e 61 6c 20 61 6e 73 77 65 72 20 69 73 20 66  inal answer is f
2d860 6f 75 6e 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 20  ound by looking 
2d870 66 6f 72 20 61 20 73 74 72 69 6e 67 20 77 69 74  for a string wit
2d880 68 20 69 6e 64 3d 3d 30 2e 0a 49 66 20 74 68 65  h ind==0..If the
2d890 20 6f 72 69 67 69 6e 61 6c 20 73 75 64 6f 6b 75   original sudoku
2d8a0 20 70 72 6f 62 6c 65 6d 20 64 69 64 20 6e 6f 74   problem did not
2d8b0 20 68 61 76 65 20 61 20 75 6e 69 71 75 65 20 73   have a unique s
2d8c0 6f 6c 75 74 69 6f 6e 2c 20 74 68 65 6e 0a 74 68  olution, then.th
2d8d0 65 20 71 75 65 72 79 20 77 69 6c 6c 20 72 65 74  e query will ret
2d8e0 75 72 6e 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65  urn all possible
2d8f0 20 73 6f 6c 75 74 69 6f 6e 73 2e 20 20 49 66 20   solutions.  If 
2d900 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 70 72 6f  the original pro
2d910 62 6c 65 6d 0a 77 61 73 20 75 6e 73 6f 6c 76 61  blem.was unsolva
2d920 62 6c 65 2c 20 74 68 65 6e 20 6e 6f 20 72 6f 77  ble, then no row
2d930 73 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e  s will be return
2d940 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ed.  In this cas
2d950 65 2c 20 74 68 65 20 75 6e 69 71 75 65 0a 61 6e  e, the unique.an
2d960 73 77 65 72 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b  swer is:..<block
2d970 71 75 6f 74 65 3e 0a 35 33 34 36 37 38 39 31 32  quote>.534678912
2d980 36 37 32 31 39 35 33 34 38 31 39 38 33 34 32 35  6721953481983425
2d990 36 37 38 35 39 37 36 31 34 32 33 34 32 36 38 35  6785976142342685
2d9a0 33 37 39 31 37 31 33 39 32 34 38 35 36 39 36 31  3791713924856961
2d9b0 35 33 37 32 38 34 32 38 37 34 31 39 36 33 35 33  5372842874196353
2d9c0 34 35 32 38 36 31 37 39 0a 3c 2f 62 6c 6f 63 6b  45286179.</block
2d9d0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73  quote>..<p>The s
2d9e0 6f 6c 75 74 69 6f 6e 20 77 61 73 20 63 6f 6d 70  olution was comp
2d9f0 75 74 65 64 20 69 6e 20 6c 65 73 73 20 74 68 61  uted in less tha
2da00 6e 20 33 30 30 20 6d 69 6c 6c 69 73 65 63 6f 6e  n 300 millisecon
2da10 64 73 20 6f 6e 20 61 20 6d 6f 64 65 72 6e 0a 77  ds on a modern.w
2da20 6f 72 6b 73 74 61 74 69 6f 6e 2e 0a 0a 3c 68 33  orkstation...<h3
2da30 3e 4c 69 6d 69 74 61 74 69 6f 6e 73 20 41 6e 64  >Limitations And
2da40 20 43 61 76 65 61 74 73 3c 2f 68 33 3e 0a 0a 3c   Caveats</h3>..<
2da50 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20  ul>.<li><p>.The 
2da60 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 6e  WITH clause cann
2da70 6f 74 20 62 65 20 75 73 65 64 20 77 69 74 68 69  ot be used withi
2da80 6e 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47  n a [CREATE TRIG
2da90 47 45 52 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68  GER]..<li><p>.Th
2daa0 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 6d 75  e WITH clause mu
2dab0 73 74 20 61 70 70 65 61 72 20 61 74 20 74 68 65  st appear at the
2dac0 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 20   beginning of a 
2dad0 74 6f 70 2d 6c 65 76 65 6c 20 5b 53 45 4c 45 43  top-level [SELEC
2dae0 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20  T] statement.or 
2daf0 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
2db00 20 6f 66 20 61 20 73 75 62 71 75 65 72 79 2e 20   of a subquery. 
2db10 20 54 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   The WITH clause
2db20 20 63 61 6e 6e 6f 74 20 62 65 20 70 72 65 70 65   cannot be prepe
2db30 6e 64 65 64 20 74 6f 0a 74 68 65 20 73 65 63 6f  nded to.the seco
2db40 6e 64 20 6f 72 20 73 75 62 73 65 71 75 65 6e 74  nd or subsequent
2db50 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2db60 74 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  t of a [compound
2db70 20 73 65 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c 70   select]..<li><p
2db80 3e 0a 54 68 65 20 53 51 4c 3a 31 39 39 39 20 73  >.The SQL:1999 s
2db90 70 65 63 20 72 65 71 75 69 72 65 73 20 74 68 61  pec requires tha
2dba0 74 20 74 68 65 20 52 45 43 55 52 53 49 56 45 20  t the RECURSIVE 
2dbb0 6b 65 79 77 6f 72 64 20 66 6f 6c 6c 6f 77 20 57  keyword follow W
2dbc0 49 54 48 20 69 6e 20 61 6e 79 0a 57 49 54 48 20  ITH in any.WITH 
2dbd0 63 6c 61 75 73 65 20 74 68 61 74 20 69 6e 63 6c  clause that incl
2dbe0 75 64 65 73 20 61 20 72 65 63 75 72 73 69 76 65  udes a recursive
2dbf0 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
2dc00 70 72 65 73 73 69 6f 6e 2e 20 20 48 6f 77 65 76  pression.  Howev
2dc10 65 72 2c 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62  er, for.compatib
2dc20 69 6c 69 74 79 20 77 69 74 68 20 53 71 6c 53 65  ility with SqlSe
2dc30 72 76 65 72 20 61 6e 64 20 4f 72 61 63 6c 65 2c  rver and Oracle,
2dc40 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
2dc50 20 65 6e 66 6f 72 63 65 20 74 68 69 73 20 72 75   enforce this ru
2dc60 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e  le..</ul>..<tcl>
2dc70 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
2dc80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dc90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dca0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dcb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dcc0 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45 43 54 20  .Section SELECT 
2dcd0 73 65 6c 65 63 74 20 7b 53 45 4c 45 43 54 20 71  select {SELECT q
2dce0 75 65 72 79 7d 0a 0a 52 65 63 75 72 73 69 76 65  uery}..Recursive
2dcf0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65  BubbleDiagram se
2dd00 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  lect-stmt.</tcl>
2dd10 0a 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54  ...<p>The SELECT
2dd20 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
2dd30 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20  ed to query the 
2dd40 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a 72  database.  The.r
2dd50 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45 43  esult of a SELEC
2dd60 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  T is zero or mor
2dd70 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20 77  e rows of data w
2dd80 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68 61  here each row.ha
2dd90 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72  s a fixed number
2dda0 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 41 20   of columns.  A 
2ddb0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2ddc0 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 0a 61   does not make.a
2ddd0 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  ny changes to th
2dde0 65 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e  e database...<p>
2ddf0 54 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d  The "[select-stm
2de00 74 5d 22 20 73 79 6e 74 61 78 20 64 69 61 67 72  t]" syntax diagr
2de10 61 6d 20 61 62 6f 76 65 20 61 74 74 65 6d 70 74  am above attempt
2de20 73 20 74 6f 20 73 68 6f 77 20 61 73 20 6d 75 63  s to show as muc
2de30 68 20 6f 66 20 74 68 65 0a 53 45 4c 45 43 54 20  h of the.SELECT 
2de40 73 74 61 74 65 6d 65 6e 74 20 73 79 6e 74 61 78  statement syntax
2de50 20 61 73 20 70 6f 73 73 69 62 6c 65 20 69 6e 20   as possible in 
2de60 61 20 73 69 6e 67 6c 65 20 64 69 61 67 72 61 6d  a single diagram
2de70 2c 20 62 65 63 61 75 73 65 20 73 6f 6d 65 20 72  , because some r
2de80 65 61 64 65 72 73 0a 66 69 6e 64 20 74 68 61 74  eaders.find that
2de90 20 68 65 6c 70 66 75 6c 2e 20 20 54 68 65 20 66   helpful.  The f
2dea0 6f 6c 6c 6f 77 69 6e 67 20 22 5b 66 61 63 74 6f  ollowing "[facto
2deb0 72 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d  red-select-stmt]
2dec0 22 20 69 73 20 61 6e 20 61 6c 74 65 72 6e 61 74  " is an alternat
2ded0 69 76 65 0a 73 79 6e 74 61 78 20 64 69 61 67 72  ive.syntax diagr
2dee0 61 6d 73 20 74 68 61 74 20 65 78 70 72 65 73 73  ams that express
2def0 65 73 20 74 68 65 20 73 61 6d 65 20 73 79 6e 74  es the same synt
2df00 61 78 20 62 75 74 20 74 72 69 65 73 20 74 6f 20  ax but tries to 
2df10 62 72 65 61 6b 20 74 68 65 20 73 79 6e 74 61 78  break the syntax
2df20 20 0a 64 6f 77 6e 20 69 6e 74 6f 20 73 6d 61 6c   .down into smal
2df30 6c 65 72 20 63 68 75 6e 6b 73 2e 0a 0a 3c 74 63  ler chunks...<tc
2df40 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  l>.RecursiveBubb
2df50 6c 65 44 69 61 67 72 61 6d 20 2d 2d 69 6e 69 74  leDiagram --init
2df60 69 61 6c 6c 79 2d 68 69 64 64 65 6e 20 66 61 63  ially-hidden fac
2df70 74 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d  tored-select-stm
2df80 74 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f  t select-core.</
2df90 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68  tcl>..<p>Note th
2dfa0 61 74 20 74 68 65 72 65 20 61 72 65 20 70 61 74  at there are pat
2dfb0 68 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 73  hs through the s
2dfc0 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20 74  yntax diagrams t
2dfd0 68 61 74 0a 61 72 65 20 6e 6f 74 20 61 6c 6c 6f  hat.are not allo
2dfe0 77 65 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e  wed in practice.
2dff0 20 20 53 6f 6d 65 20 65 78 61 6d 70 6c 65 73 3a    Some examples:
2e000 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 5b 56 41 4c  .<ul>.<li>A [VAL
2e010 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61 6e 20  UES] clause can 
2e020 62 65 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  be the first ele
2e030 6d 65 6e 74 20 69 6e 20 61 20 5b 63 6f 6d 70 6f  ment in a [compo
2e040 75 6e 64 20 53 45 4c 45 43 54 5d 0a 20 20 20 20  und SELECT].    
2e050 74 68 61 74 20 75 73 65 73 20 61 20 5b 57 49 54  that uses a [WIT
2e060 48 5d 20 63 6c 61 75 73 65 2c 20 62 75 74 20 61  H] clause, but a
2e070 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d   [simple SELECT]
2e080 20 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20 6f   that consists o
2e090 66 0a 20 20 20 20 6a 75 73 74 20 61 20 5b 56 41  f.    just a [VA
2e0a0 4c 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61 6e  LUES] clause can
2e0b0 6e 6f 74 20 62 65 20 70 72 65 63 65 64 65 64 20  not be preceded 
2e0c0 62 79 20 61 20 5b 57 49 54 48 5d 20 63 6c 61 75  by a [WITH] clau
2e0d0 73 65 2e 0a 3c 6c 69 3e 54 68 65 20 5b 57 49 54  se..<li>The [WIT
2e0e0 48 5d 20 63 6c 61 75 73 65 20 6d 75 73 74 20 6f  H] clause must o
2e0f0 63 63 75 72 20 6f 6e 20 74 68 65 20 66 69 72 73  ccur on the firs
2e100 74 20 53 45 4c 45 43 54 20 6f 66 20 61 20 5b 63  t SELECT of a [c
2e110 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2e  ompound SELECT].
2e120 0a 20 20 20 20 49 74 20 63 61 6e 6e 6f 74 20 66  .    It cannot f
2e130 6f 6c 6c 6f 77 20 61 20 5b 63 6f 6d 70 6f 75 6e  ollow a [compoun
2e140 64 2d 6f 70 65 72 61 74 6f 72 5d 2e 0a 3c 2f 75  d-operator]..</u
2e150 6c 3e 0a 54 68 65 73 65 20 61 6e 64 20 6f 74 68  l>.These and oth
2e160 65 72 20 73 69 6d 69 6c 61 72 20 73 79 6e 74 61  er similar synta
2e170 78 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61  x restrictions a
2e180 72 65 20 64 65 73 63 72 69 62 65 64 20 69 6e 20  re described in 
2e190 74 68 65 20 74 65 78 74 2e 0a 0a 3c 70 3e 54 68  the text...<p>Th
2e1a0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2e1b0 6e 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 63  nt is the most c
2e1c0 6f 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61  omplicated comma
2e1d0 6e 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61  nd in the SQL la
2e1e0 6e 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20  nguage..To make 
2e1f0 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  the description 
2e200 65 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77  easier to follow
2e210 2c 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 70 61  , some of the pa
2e220 73 73 61 67 65 73 20 62 65 6c 6f 77 20 64 65 73  ssages below des
2e230 63 72 69 62 65 0a 74 68 65 20 77 61 79 20 74 68  cribe.the way th
2e240 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20  e data returned 
2e250 62 79 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  by a SELECT stat
2e260 65 6d 65 6e 74 20 69 73 20 64 65 74 65 72 6d 69  ement is determi
2e270 6e 65 64 20 61 73 20 61 20 73 65 72 69 65 73 20  ned as a series 
2e280 6f 66 0a 73 74 65 70 73 2e 20 49 74 20 69 73 20  of.steps. It is 
2e290 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65  important to kee
2e2a0 70 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20 74  p in mind that t
2e2b0 68 69 73 20 69 73 20 70 75 72 65 6c 79 20 69 6c  his is purely il
2e2c0 6c 75 73 74 72 61 74 69 76 65 20 2d 0a 69 6e 20  lustrative -.in 
2e2d0 70 72 61 63 74 69 63 65 20 6e 65 69 74 68 65 72  practice neither
2e2e0 20 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20   SQLite nor any 
2e2f0 6f 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e 65  other SQL engine
2e300 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20   is required to 
2e310 66 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20  follow .this or 
2e320 61 6e 79 20 6f 74 68 65 72 20 73 70 65 63 69 66  any other specif
2e330 69 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 74 63  ic process...<tc
2e340 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 69  l>hd_fragment si
2e350 6d 70 6c 65 73 65 6c 65 63 74 20 7b 73 69 6d 70  mpleselect {simp
2e360 6c 65 20 53 45 4c 45 43 54 7d 3c 2f 74 63 6c 3e  le SELECT}</tcl>
2e370 0a 3c 68 33 3e 53 69 6d 70 6c 65 20 53 65 6c 65  .<h3>Simple Sele
2e380 63 74 20 50 72 6f 63 65 73 73 69 6e 67 3c 2f 68  ct Processing</h
2e390 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20  3>..<p>The core 
2e3a0 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
2e3b0 65 6d 65 6e 74 20 69 73 20 61 20 22 73 69 6d 70  ement is a "simp
2e3c0 6c 65 20 53 45 4c 45 43 54 22 20 73 68 6f 77 6e  le SELECT" shown
2e3d0 20 62 79 20 74 68 65 0a 5b 73 65 6c 65 63 74 2d   by the.[select-
2e3e0 63 6f 72 65 5d 20 61 6e 64 20 5b 73 69 6d 70 6c  core] and [simpl
2e3f0 65 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 20 73  e-select-stmt] s
2e400 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20 62  yntax diagrams b
2e410 65 6c 6f 77 2e 20 20 0a 49 6e 20 70 72 61 63 74  elow.  .In pract
2e420 69 63 65 2c 20 6d 6f 73 74 20 53 45 4c 45 43 54  ice, most SELECT
2e430 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20   statements are 
2e440 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
2e450 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c 74 63 6c 3e  atements...<tcl>
2e460 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
2e470 44 69 61 67 72 61 6d 20 73 69 6d 70 6c 65 2d 73  Diagram simple-s
2e480 65 6c 65 63 74 2d 73 74 6d 74 20 73 65 6c 65 63  elect-stmt selec
2e490 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  t-core.</tcl>..<
2e4a0 70 3e 47 65 6e 65 72 61 74 69 6e 67 20 74 68 65  p>Generating the
2e4b0 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 73 69   results of a si
2e4c0 6d 70 6c 65 20 53 45 4c 45 43 54 0a 73 74 61 74  mple SELECT.stat
2e4d0 65 6d 65 6e 74 20 69 73 20 70 72 65 73 65 6e 74  ement is present
2e4e0 65 64 20 61 73 20 61 20 66 6f 75 72 20 73 74 65  ed as a four ste
2e4f0 70 20 70 72 6f 63 65 73 73 20 69 6e 20 74 68 65  p process in the
2e500 20 64 65 73 63 72 69 70 74 69 6f 6e 20 62 65 6c   description bel
2e510 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e  ow:..<ol>.  <li>
2e520 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61 75 73 65   <p>[FROM clause
2e530 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54 68  ] processing: Th
2e540 65 20 69 6e 70 75 74 20 64 61 74 61 20 66 6f 72  e input data for
2e550 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45   the simple SELE
2e560 43 54 20 69 73 0a 20 20 20 20 20 20 20 64 65 74  CT is.       det
2e570 65 72 6d 69 6e 65 64 2e 20 54 68 65 20 69 6e 70  ermined. The inp
2e580 75 74 20 64 61 74 61 20 69 73 20 65 69 74 68 65  ut data is eithe
2e590 72 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20 73  r implicitly a s
2e5a0 69 6e 67 6c 65 20 72 6f 77 20 77 69 74 68 20 30  ingle row with 0
2e5b0 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 20  .       columns 
2e5c0 28 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  (if there is no 
2e5d0 46 52 4f 4d 20 63 6c 61 75 73 65 29 20 6f 72 20  FROM clause) or 
2e5e0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
2e5f0 20 74 68 65 20 46 52 4f 4d 0a 20 20 20 20 20 20   the FROM.      
2e600 20 63 6c 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20   clause..  <li> 
2e610 3c 70 3e 5b 57 48 45 52 45 20 63 6c 61 75 73 65  <p>[WHERE clause
2e620 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54 68  ] processing: Th
2e630 65 20 69 6e 70 75 74 20 64 61 74 61 20 69 73 20  e input data is 
2e640 66 69 6c 74 65 72 65 64 20 75 73 69 6e 67 20 74  filtered using t
2e650 68 65 20 57 48 45 52 45 0a 20 20 20 20 20 20 20  he WHERE.       
2e660 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f  clause expressio
2e670 6e 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  n.  .  <li> <p>[
2e680 47 52 4f 55 50 20 42 59 7c 47 52 4f 55 50 20 42  GROUP BY|GROUP B
2e690 59 2c 20 48 41 56 49 4e 47 20 61 6e 64 20 72 65  Y, HAVING and re
2e6a0 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72  sult-column expr
2e6b0 65 73 73 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69  ession] processi
2e6c0 6e 67 3a 20 0a 20 20 20 20 20 20 20 54 68 65 20  ng: .       The 
2e6d0 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
2e6e0 77 73 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62  ws is computed b
2e6f0 79 20 61 67 67 72 65 67 61 74 69 6e 67 20 74 68  y aggregating th
2e700 65 20 64 61 74 61 20 61 63 63 6f 72 64 69 6e 67  e data according
2e710 20 74 6f 0a 20 20 20 20 20 20 20 61 6e 79 20 47   to.       any G
2e720 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 61  ROUP BY clause a
2e730 6e 64 20 63 61 6c 63 75 6c 61 74 69 6e 67 20 74  nd calculating t
2e740 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 65 78  he result-set ex
2e750 70 72 65 73 73 69 6f 6e 73 20 66 6f 72 20 74 68  pressions for th
2e760 65 0a 20 20 20 20 20 20 20 72 6f 77 73 20 6f 66  e.       rows of
2e770 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69 6e   the filtered in
2e780 70 75 74 20 64 61 74 61 73 65 74 2e 20 20 0a 20  put dataset.  . 
2e790 20 3c 6c 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e   <li> <p>[DISTIN
2e7a0 43 54 7c 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20  CT|DISTINCT/ALL 
2e7b0 6b 65 79 77 6f 72 64 5d 20 70 72 6f 63 65 73 73  keyword] process
2e7c0 69 6e 67 3a 20 49 66 20 74 68 65 20 71 75 65 72  ing: If the quer
2e7d0 79 20 69 73 20 61 20 22 53 45 4c 45 43 54 0a 20  y is a "SELECT. 
2e7e0 20 20 20 20 20 20 44 49 53 54 49 4e 43 54 22 20        DISTINCT" 
2e7f0 71 75 65 72 79 2c 20 64 75 70 6c 69 63 61 74 65  query, duplicate
2e800 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65   rows are remove
2e810 64 20 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f  d from the set o
2e820 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c  f result rows..<
2e830 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61  /ol>..<p>There a
2e840 72 65 20 74 77 6f 20 74 79 70 65 73 20 6f 66 20  re two types of 
2e850 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
2e860 61 74 65 6d 65 6e 74 20 2d 20 61 67 67 72 65 67  atement - aggreg
2e870 61 74 65 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67  ate and .non-agg
2e880 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2e 20  regate queries. 
2e890 5e 41 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  ^A simple SELECT
2e8a0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 6e   statement is an
2e8b0 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
2e8c0 20 69 66 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20   if.it contains 
2e8d0 65 69 74 68 65 72 20 61 20 47 52 4f 55 50 20 42  either a GROUP B
2e8e0 59 20 63 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20  Y clause or one 
2e8f0 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
2e900 65 20 66 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74  e functions.in t
2e910 68 65 20 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e  he result-set. ^
2e920 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 61 20  Otherwise, if a 
2e930 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 63 6f  simple SELECT co
2e940 6e 74 61 69 6e 73 20 6e 6f 20 61 67 67 72 65 67  ntains no aggreg
2e950 61 74 65 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72  ate.functions or
2e960 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
2e970 73 65 2c 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d  se, it is a non-
2e980 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 2e  aggregate query.
2e990 0a 0a 3c 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72  ..<p><b>1. Deter
2e9a0 6d 69 6e 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75  mination of inpu
2e9b0 74 20 64 61 74 61 20 28 46 52 4f 4d 20 63 6c 61  t data (FROM cla
2e9c0 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 29 2e  use processing).
2e9d0 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  </b>.<tcl>hd_fra
2e9e0 67 6d 65 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65  gment fromclause
2e9f0 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b  </tcl>.<tcl>hd_k
2ea00 65 79 77 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c  eywords {FROM cl
2ea10 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause}</tcl>..<p>
2ea20 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 75  The input data u
2ea30 73 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20  sed by a simple 
2ea40 53 45 4c 45 43 54 20 71 75 65 72 79 20 69 73 20  SELECT query is 
2ea50 61 20 73 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69  a set of <i>N</i
2ea60 3e 20 72 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e  > rows .each <i>
2ea70 4d 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69  M</i> columns wi
2ea80 64 65 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65  de...<p>^(If the
2ea90 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
2eaa0 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20 73  omitted from a s
2eab0 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
2eac0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  tement, then the
2ead0 20 0a 69 6e 70 75 74 20 64 61 74 61 20 69 73 20   .input data is 
2eae0 69 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e  implicitly a sin
2eaf0 67 6c 65 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c  gle row zero col
2eb00 75 6d 6e 73 20 77 69 64 65 29 5e 20 28 69 2e 65  umns wide)^ (i.e
2eb10 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64  . <i>N</i>=1 and
2eb20 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c  .<i>M</i>=0)...<
2eb30 70 3e 49 66 20 61 20 46 52 4f 4d 20 63 6c 61 75  p>If a FROM clau
2eb40 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  se is specified,
2eb50 20 74 68 65 20 64 61 74 61 20 6f 6e 20 77 68 69   the data on whi
2eb60 63 68 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  ch a simple SELE
2eb70 43 54 20 71 75 65 72 79 0a 6f 70 65 72 61 74 65  CT query.operate
2eb80 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65  s comes from the
2eb90 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   one or more tab
2eba0 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65  les or subquerie
2ebb0 73 20 28 53 45 4c 45 43 54 20 73 74 61 74 65 6d  s (SELECT statem
2ebc0 65 6e 74 73 0a 69 6e 20 70 61 72 65 6e 74 68 65  ents.in parenthe
2ebd0 73 69 73 29 20 73 70 65 63 69 66 69 65 64 20 66  sis) specified f
2ebe0 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f  ollowing the FRO
2ebf0 4d 20 6b 65 79 77 6f 72 64 2e 20 5e 41 20 73 75  M keyword. ^A su
2ec00 62 71 75 65 72 79 20 73 70 65 63 69 66 69 65 64  bquery specified
2ec10 0a 69 6e 20 74 68 65 20 3c 79 79 74 65 72 6d 3e  .in the <yyterm>
2ec20 74 61 62 6c 65 2d 6f 72 2d 73 75 62 71 75 65 72  table-or-subquer
2ec30 79 3c 2f 79 79 74 65 72 6d 3e 20 66 6f 6c 6c 6f  y</yyterm> follo
2ec40 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 63 6c  wing the FROM cl
2ec50 61 75 73 65 20 69 6e 20 61 20 0a 73 69 6d 70 6c  ause in a .simpl
2ec60 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2ec70 6e 74 20 69 73 0a 68 61 6e 64 6c 65 64 20 61 73  nt is.handled as
2ec80 20 69 66 20 69 74 20 77 61 73 20 61 20 74 61 62   if it was a tab
2ec90 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
2eca0 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20  e data returned 
2ecb0 62 79 20 65 78 65 63 75 74 69 6e 67 20 74 68 65  by executing the
2ecc0 0a 73 75 62 71 75 65 72 79 20 73 74 61 74 65 6d  .subquery statem
2ecd0 65 6e 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75 6d  ent. ^Each colum
2ece0 6e 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  n of the subquer
2ecf0 79 20 68 61 73 20 74 68 65 0a 5b 63 6f 6c 6c 61  y has the.[colla
2ed00 74 69 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73  tion|collation s
2ed10 65 71 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61 66  equence] and [af
2ed20 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63  finity] of the c
2ed30 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70  orresponding exp
2ed40 72 65 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20 73  ression.in the s
2ed50 75 62 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e  ubquery statemen
2ed60 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 72 65  t...<p>^If there
2ed70 20 69 73 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c   is only a singl
2ed80 65 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  e table or subqu
2ed90 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 0a  ery in the FROM.
2eda0 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
2edb0 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64   input data used
2edc0 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
2edd0 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20  tatement is the 
2ede0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 0a  contents of the.
2edf0 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49 66  named table. ^If
2ee00 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74   there is more t
2ee10 68 61 6e 20 6f 6e 65 20 74 61 62 6c 65 20 6f 72  han one table or
2ee20 20 73 75 62 71 75 65 72 79 20 69 6e 20 46 52 4f   subquery in FRO
2ee30 4d 20 63 6c 61 75 73 65 0a 74 68 65 6e 20 74 68  M clause.then th
2ee40 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61 6c  e contents of al
2ee50 6c 20 74 61 62 6c 65 73 20 61 6e 64 2f 6f 72 20  l tables and/or 
2ee60 73 75 62 71 75 65 72 69 65 73 0a 61 72 65 20 6a  subqueries.are j
2ee70 6f 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69 6e  oined into a sin
2ee80 67 6c 65 20 64 61 74 61 73 65 74 20 66 6f 72 20  gle dataset for 
2ee90 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  the simple SELEC
2eea0 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 6f  T statement to o
2eeb0 70 65 72 61 74 65 20 6f 6e 2e 0a 45 78 61 63 74  perate on..Exact
2eec0 6c 79 20 68 6f 77 20 74 68 65 20 64 61 74 61 20  ly how the data 
2eed0 69 73 20 63 6f 6d 62 69 6e 65 64 20 64 65 70 65  is combined depe
2eee0 6e 64 73 20 6f 6e 20 74 68 65 20 73 70 65 63 69  nds on the speci
2eef0 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70 65 72 61 74  fic [join-operat
2ef00 6f 72 5d 20 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f  or] and.[join-co
2ef10 6e 73 74 72 61 69 6e 74 5d 20 75 73 65 64 20 74  nstraint] used t
2ef20 6f 20 63 6f 6e 6e 65 63 74 20 74 68 65 20 74 61  o connect the ta
2ef30 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
2ef40 65 73 20 74 6f 67 65 74 68 65 72 2e 0a 0a 3c 70  es together...<p
2ef50 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69 6e 20 53 51  >All joins in SQ
2ef60 4c 69 74 65 20 61 72 65 20 62 61 73 65 64 20 6f  Lite are based o
2ef70 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  n the cartesian 
2ef80 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20 6c  product of the l
2ef90 65 66 74 20 61 6e 64 0a 72 69 67 68 74 2d 68 61  eft and.right-ha
2efa0 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e 54 68  nd datasets. ^Th
2efb0 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
2efc0 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
2efd0 63 74 20 64 61 74 61 73 65 74 20 61 72 65 2c 20  ct dataset are, 
2efe0 69 6e 20 0a 6f 72 64 65 72 2c 20 61 6c 6c 20 74  in .order, all t
2eff0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
2f000 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61  e left-hand data
2f010 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  set followed by 
2f020 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a  all the columns.
2f030 6f 66 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  of the right-han
2f040 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65 72  d dataset. ^Ther
2f050 65 20 69 73 20 61 20 72 6f 77 20 69 6e 20 74 68  e is a row in th
2f060 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
2f070 75 63 74 20 64 61 74 61 73 65 74 0a 66 6f 72 6d  uct dataset.form
2f080 65 64 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20  ed by combining 
2f090 65 61 63 68 20 75 6e 69 71 75 65 20 63 6f 6d 62  each unique comb
2f0a0 69 6e 61 74 69 6f 6e 20 6f 66 20 61 20 72 6f 77  ination of a row
2f0b0 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 2d 68   from the left-h
2f0c0 61 6e 64 20 0a 61 6e 64 20 72 69 67 68 74 2d 68  and .and right-h
2f0d0 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e 28  and datasets. ^(
2f0e0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
2f0f0 69 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  if the left-hand
2f100 20 64 61 74 61 73 65 74 20 63 6f 6e 73 69 73 74   dataset consist
2f110 73 20 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73  s of.<i>N<sub><s
2f120 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
2f130 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73  ></sub></i> rows
2f140 20 6f 66 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73   of .<i>M<sub><s
2f150 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
2f160 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75  ></sub></i> colu
2f170 6d 6e 73 2c 20 61 6e 64 20 74 68 65 20 72 69 67  mns, and the rig
2f180 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ht-hand dataset 
2f190 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61  of.<i>N<sub><sma
2f1a0 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e  ll>right</small>
2f1b0 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20  </sub></i> rows 
2f1c0 6f 66 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61  of.<i>M<sub><sma
2f1d0 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e  ll>right</small>
2f1e0 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d  </sub></i> colum
2f1f0 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 63 61 72  ns, then the car
2f200 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 69  tesian product i
2f210 73 20 61 0a 64 61 74 61 73 65 74 20 6f 66 20 0a  s a.dataset of .
2f220 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  <i>N<sub><small>
2f230 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  left</small></su
2f240 62 3e 26 74 69 6d 65 73 3b 4e 3c 73 75 62 3e 3c  b>&times;N<sub><
2f250 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61  small>right</sma
2f260 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 0a 72 6f  ll></sub></i>.ro
2f270 77 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e  ws, each contain
2f280 69 6e 67 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73  ing .<i>M<sub><s
2f290 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
2f2a0 3e 3c 2f 73 75 62 3e 2b 4d 3c 73 75 62 3e 3c 73  ></sub>+M<sub><s
2f2b0 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c  mall>right</smal
2f2c0 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c  l></sub></i> col
2f2d0 75 6d 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20  umns.)^..<p>^If 
2f2e0 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f  the join-operato
2f2f0 72 20 69 73 20 22 43 52 4f 53 53 20 4a 4f 49 4e  r is "CROSS JOIN
2f300 22 2c 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c  ", "INNER JOIN",
2f310 20 22 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f 6d   "JOIN" or a com
2f320 6d 61 0a 28 22 2c 22 29 20 61 6e 64 20 74 68 65  ma.(",") and the
2f330 72 65 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20 55  re is no ON or U
2f340 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65  SING clause, the
2f350 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
2f360 74 68 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d 70  the join is.simp
2f370 6c 79 20 74 68 65 20 63 61 72 74 65 73 69 61 6e  ly the cartesian
2f380 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20   product of the 
2f390 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68  left and right-h
2f3a0 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 0a 49  and datasets. .I
2f3b0 66 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20  f join-operator 
2f3c0 64 6f 65 73 20 68 61 76 65 20 4f 4e 20 6f 72 20  does have ON or 
2f3d0 55 53 49 4e 47 20 63 6c 61 75 73 65 73 2c 20 74  USING clauses, t
2f3e0 68 6f 73 65 20 61 72 65 20 68 61 6e 64 6c 65 64  hose are handled
2f3f0 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a 74 68   according to.th
2f400 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c  e following bull
2f410 65 74 20 70 6f 69 6e 74 73 3a 0a 0a 3c 75 6c 3e  et points:..<ul>
2f420 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20  .  <li> <p>^(If 
2f430 74 68 65 72 65 20 69 73 20 61 6e 20 4f 4e 20 63  there is an ON c
2f440 6c 61 75 73 65 20 74 68 65 6e 20 74 68 65 20 4f  lause then the O
2f450 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 0a  N expression is.
2f460 20 20 20 20 20 20 20 65 76 61 6c 75 61 74 65 64         evaluated
2f470 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
2f480 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
2f490 72 6f 64 75 63 74 20 61 73 20 61 20 0a 20 20 20  roduct as a .   
2f4a0 20 20 20 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70      [boolean exp
2f4b0 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72  ression]. Only r
2f4c0 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
2f4d0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
2f4e0 6c 75 61 74 65 73 20 74 6f 20 0a 20 20 20 20 20  luates to .     
2f4f0 20 20 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75    true are inclu
2f500 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ded from the dat
2f510 61 73 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20  aset.)^..  <li> 
2f520 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20  <p>^If there is 
2f530 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 0a 20  a USING clause. 
2f540 20 20 20 20 20 20 74 68 65 6e 20 65 61 63 68 20        then each 
2f550 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  of the column na
2f560 6d 65 73 20 73 70 65 63 69 66 69 65 64 20 6d 75  mes specified mu
2f570 73 74 20 65 78 69 73 74 20 69 6e 20 74 68 65 20  st exist in the 
2f580 64 61 74 61 73 65 74 73 20 74 6f 20 0a 20 20 20  datasets to .   
2f590 20 20 20 20 62 6f 74 68 20 74 68 65 20 6c 65 66      both the lef
2f5a0 74 20 61 6e 64 20 72 69 67 68 74 20 6f 66 20 74  t and right of t
2f5b0 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  he join-operator
2f5c0 2e 20 5e 28 46 6f 72 20 65 61 63 68 20 70 61 69  . ^(For each pai
2f5d0 72 20 6f 66 20 6e 61 6d 65 64 0a 20 20 20 20 20  r of named.     
2f5e0 20 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 65    columns, the e
2f5f0 78 70 72 65 73 73 69 6f 6e 20 22 6c 68 73 2e 58  xpression "lhs.X
2f600 20 3d 20 72 68 73 2e 58 22 20 69 73 20 65 76 61   = rhs.X" is eva
2f610 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  luated for each 
2f620 72 6f 77 20 6f 66 0a 20 20 20 20 20 20 20 74 68  row of.       th
2f630 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
2f640 75 63 74 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61  uct as a [boolea
2f650 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f  n expression]. O
2f660 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69  nly rows for whi
2f670 63 68 0a 20 20 20 20 20 20 20 61 6c 6c 20 73 75  ch.       all su
2f680 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65  ch expressions e
2f690 76 61 6c 75 61 74 65 73 20 74 6f 20 74 72 75 65  valuates to true
2f6a0 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72   are included fr
2f6b0 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 20 72 65  om the.       re
2f6c0 73 75 6c 74 20 73 65 74 2e 29 5e 20 5e 57 68 65  sult set.)^ ^Whe
2f6d0 6e 20 63 6f 6d 70 61 72 69 6e 67 20 76 61 6c 75  n comparing valu
2f6e0 65 73 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  es as a result o
2f6f0 66 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65  f a USING clause
2f700 2c 20 74 68 65 0a 20 20 20 20 20 20 20 6e 6f 72  , the.       nor
2f710 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 68 61  mal rules for ha
2f720 6e 64 6c 69 6e 67 20 61 66 66 69 6e 69 74 69 65  ndling affinitie
2f730 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  s, collation seq
2f740 75 65 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c 0a  uences and NULL.
2f750 20 20 20 20 20 20 20 76 61 6c 75 65 73 20 69 6e         values in
2f760 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 61 70 70   comparisons app
2f770 6c 79 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 20  ly. ^The column 
2f780 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
2f790 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20 6c   on the.       l
2f7a0 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  eft-hand side of
2f7b0 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74   the join-operat
2f7c0 6f 72 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  or is considered
2f7d0 20 74 6f 20 62 65 20 6f 6e 20 74 68 65 20 6c 65   to be on the le
2f7e0 66 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 73  ft-hand.       s
2f7f0 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ide of the compa
2f800 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28  rison operator (
2f810 3d 29 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  =) for the purpo
2f820 73 65 73 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ses of collation
2f830 20 0a 20 20 20 20 20 20 20 73 65 71 75 65 6e 63   .       sequenc
2f840 65 20 61 6e 64 20 61 66 66 69 6e 69 74 79 20 70  e and affinity p
2f850 72 65 63 65 64 65 6e 63 65 2e 0a 0a 20 20 20 20  recedence...    
2f860 20 20 20 3c 70 3e 5e 46 6f 72 20 65 61 63 68 20     <p>^For each 
2f870 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  pair of columns 
2f880 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
2f890 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
2f8a0 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  e column.       
2f8b0 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68  from the right-h
2f8c0 61 6e 64 20 64 61 74 61 73 65 74 20 69 73 20 6f  and dataset is o
2f8d0 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
2f8e0 6a 6f 69 6e 65 64 20 64 61 74 61 73 65 74 2e 20  joined dataset. 
2f8f0 5e 54 68 69 73 20 0a 20 20 20 20 20 20 20 69 73  ^This .       is
2f900 20 74 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72   the only differ
2f910 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 55  ence between a U
2f920 53 49 4e 47 20 63 6c 61 75 73 65 20 61 6e 64 20  SING clause and 
2f930 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20 4f  its equivalent O
2f940 4e 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61  N.       constra
2f950 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  int...  <li> <p>
2f960 5e 28 49 66 20 74 68 65 20 4e 41 54 55 52 41 4c  ^(If the NATURAL
2f970 20 6b 65 79 77 6f 72 64 20 69 73 20 69 6e 20 74   keyword is in t
2f980 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  he join-operator
2f990 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 20 20 20   then an.       
2f9a0 69 6d 70 6c 69 63 69 74 20 55 53 49 4e 47 20 63  implicit USING c
2f9b0 6c 61 75 73 65 20 69 73 20 61 64 64 65 64 20 74  lause is added t
2f9c0 6f 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74  o the join-const
2f9d0 72 61 69 6e 74 73 2e 20 54 68 65 20 69 6d 70 6c  raints. The impl
2f9e0 69 63 69 74 0a 20 20 20 20 20 20 20 55 53 49 4e  icit.       USIN
2f9f0 47 20 63 6c 61 75 73 65 20 63 6f 6e 74 61 69 6e  G clause contain
2fa00 73 20 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f  s each of the co
2fa10 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20  lumn names that 
2fa20 61 70 70 65 61 72 20 69 6e 20 62 6f 74 68 0a 20  appear in both. 
2fa30 20 20 20 20 20 20 74 68 65 20 6c 65 66 74 20 61        the left a
2fa40 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e  nd right-hand in
2fa50 70 75 74 20 64 61 74 61 73 65 74 73 2e 29 5e 20  put datasets.)^ 
2fa60 5e 49 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64  ^If the left and
2fa70 20 72 69 67 68 74 2d 68 61 6e 64 0a 20 20 20 20   right-hand.    
2fa80 20 20 20 69 6e 70 75 74 20 64 61 74 61 73 65 74     input dataset
2fa90 73 20 66 65 61 74 75 72 65 20 6e 6f 20 63 6f 6d  s feature no com
2faa0 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  mon column names
2fab0 2c 20 74 68 65 6e 20 74 68 65 20 4e 41 54 55 52  , then the NATUR
2fac0 41 4c 20 6b 65 79 77 6f 72 64 0a 20 20 20 20 20  AL keyword.     
2fad0 20 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20    has no effect 
2fae0 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  on the results o
2faf0 66 20 74 68 65 20 6a 6f 69 6e 2e 20 5e 41 20 55  f the join. ^A U
2fb00 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73  SING or ON claus
2fb10 65 20 6d 61 79 0a 20 20 20 20 20 20 20 6e 6f 74  e may.       not
2fb20 20 62 65 20 61 64 64 65 64 20 74 6f 20 61 20 6a   be added to a j
2fb30 6f 69 6e 20 74 68 61 74 20 73 70 65 63 69 66 69  oin that specifi
2fb40 65 73 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b  es the NATURAL k
2fb50 65 79 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20  eyword...  <li> 
2fb60 3c 70 3e 5e 28 49 66 20 74 68 65 20 6a 6f 69 6e  <p>^(If the join
2fb70 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 22  -operator is a "
2fb80 4c 45 46 54 20 4a 4f 49 4e 22 20 6f 72 20 22 4c  LEFT JOIN" or "L
2fb90 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 22 2c  EFT OUTER JOIN",
2fba0 20 74 68 65 6e 0a 20 20 20 20 20 20 20 61 66 74   then.       aft
2fbb0 65 72 0a 20 20 20 20 20 20 20 74 68 65 20 4f 4e  er.       the ON
2fbc0 20 6f 72 20 55 53 49 4e 47 20 66 69 6c 74 65 72   or USING filter
2fbd0 69 6e 67 20 63 6c 61 75 73 65 73 20 68 61 76 65  ing clauses have
2fbe0 20 62 65 65 6e 20 61 70 70 6c 69 65 64 2c 20 61   been applied, a
2fbf0 6e 20 65 78 74 72 61 20 72 6f 77 20 69 73 20 0a  n extra row is .
2fc00 20 20 20 20 20 20 20 61 64 64 65 64 20 74 6f 20         added to 
2fc10 74 68 65 20 6f 75 74 70 75 74 20 66 6f 72 20 65  the output for e
2fc20 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 6f  ach row in the o
2fc30 72 69 67 69 6e 61 6c 20 6c 65 66 74 2d 68 61 6e  riginal left-han
2fc40 64 20 69 6e 70 75 74 20 0a 20 20 20 20 20 20 20  d input .       
2fc50 64 61 74 61 73 65 74 20 74 68 61 74 20 63 6f 72  dataset that cor
2fc60 72 65 73 70 6f 6e 64 73 20 74 6f 20 6e 6f 20 72  responds to no r
2fc70 6f 77 73 20 61 74 20 61 6c 6c 20 69 6e 20 74 68  ows at all in th
2fc80 65 20 63 6f 6d 70 6f 73 69 74 65 0a 20 20 20 20  e composite.    
2fc90 20 20 20 64 61 74 61 73 65 74 20 28 69 66 20 61     dataset (if a
2fca0 6e 79 29 2e 29 5e 20 5e 54 68 65 20 61 64 64 65  ny).)^ ^The adde
2fcb0 64 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 20 4e  d rows contain N
2fcc0 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  ULL values in th
2fcd0 65 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 20 20  e columns.      
2fce0 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
2fcf0 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 76 61 6c  ally contain val
2fd00 75 65 73 20 63 6f 70 69 65 64 20 66 72 6f 6d 20  ues copied from 
2fd10 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 69  the right-hand i
2fd20 6e 70 75 74 0a 20 20 20 20 20 20 20 64 61 74 61  nput.       data
2fd30 73 65 74 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70  set.  .</ul>..<p
2fd40 3e 5e 28 57 68 65 6e 20 6d 6f 72 65 20 74 68 61  >^(When more tha
2fd50 6e 20 74 77 6f 20 74 61 62 6c 65 73 20 61 72 65  n two tables are
2fd60 20 6a 6f 69 6e 65 64 20 74 6f 67 65 74 68 65 72   joined together
2fd70 20 61 73 20 70 61 72 74 20 6f 66 20 61 20 46 52   as part of a FR
2fd80 4f 4d 20 63 6c 61 75 73 65 2c 0a 74 68 65 20 6a  OM clause,.the j
2fd90 6f 69 6e 20 6f 70 65 72 61 74 69 6f 6e 73 20 61  oin operations a
2fda0 72 65 20 70 72 6f 63 65 73 73 65 64 20 69 6e 20  re processed in 
2fdb0 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20  order from left 
2fdc0 74 6f 20 72 69 67 68 74 2e 20 49 6e 20 6f 74 68  to right. In oth
2fdd0 65 72 20 0a 77 6f 72 64 73 2c 20 74 68 65 20 46  er .words, the F
2fde0 52 4f 4d 20 63 6c 61 75 73 65 20 28 41 20 6a 6f  ROM clause (A jo
2fdf0 69 6e 2d 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f  in-op-1 B join-o
2fe00 70 2d 32 20 43 29 20 69 73 20 63 6f 6d 70 75 74  p-2 C) is comput
2fe10 65 64 20 61 73 20 0a 28 28 41 20 6a 6f 69 6e 2d  ed as .((A join-
2fe20 6f 70 2d 31 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d  op-1 B) join-op-
2fe30 32 20 43 29 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  2 C).)^..<tcl>hd
2fe40 5f 66 72 61 67 6d 65 6e 74 20 63 72 6f 73 73 6a  _fragment crossj
2fe50 6f 69 6e 20 7b 74 72 65 61 74 73 20 74 68 65 20  oin {treats the 
2fe60 43 52 4f 53 53 20 4a 4f 49 4e 20 6f 70 65 72 61  CROSS JOIN opera
2fe70 74 6f 72 20 73 70 65 63 69 61 6c 6c 79 7d 3c 2f  tor specially}</
2fe80 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 53 69 64 65 20  tcl>.<p><b>Side 
2fe90 6e 6f 74 65 3a 20 53 70 65 63 69 61 6c 20 68 61  note: Special ha
2fea0 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53 20  ndling of CROSS 
2feb0 4a 4f 49 4e 2e 3c 2f 62 3e 0a 5e 54 68 65 72 65  JOIN.</b>.^There
2fec0 20 69 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63   is no differenc
2fed0 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 22 49  e between the "I
2fee0 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49  NNER JOIN", "JOI
2fef0 4e 22 20 61 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a  N" and "," join.
2ff00 6f 70 65 72 61 74 6f 72 73 2e 20 54 68 65 79 20  operators. They 
2ff10 61 72 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 69  are completely i
2ff20 6e 74 65 72 63 68 61 6e 67 65 61 62 6c 65 20 69  nterchangeable i
2ff30 6e 20 53 51 4c 69 74 65 2e 0a 5e 28 54 68 65 20  n SQLite..^(The 
2ff40 22 43 52 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f 69  "CROSS JOIN" joi
2ff50 6e 20 6f 70 65 72 61 74 6f 72 20 70 72 6f 64 75  n operator produ
2ff60 63 65 73 20 74 68 65 20 73 61 6d 65 20 72 65 73  ces the same res
2ff70 75 6c 74 20 61 73 20 74 68 65 20 0a 22 49 4e 4e  ult as the ."INN
2ff80 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
2ff90 20 61 6e 64 20 22 2c 22 20 6f 70 65 72 61 74 6f   and "," operato
2ffa0 72 73 29 5e 2c 20 62 75 74 20 69 73 20 0a 5b 43  rs)^, but is .[C
2ffb0 52 4f 53 53 20 4a 4f 49 4e 7c 68 61 6e 64 6c 65  ROSS JOIN|handle
2ffc0 64 20 64 69 66 66 65 72 65 6e 74 6c 79 20 62 79  d differently by
2ffd0 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
2ffe0 69 7a 65 72 5d 0a 69 6e 20 74 68 61 74 20 69 74  izer].in that it
2fff0 20 70 72 65 76 65 6e 74 73 20 74 68 65 20 71 75   prevents the qu
30000 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 66 72  ery optimizer fr
30010 6f 6d 20 72 65 6f 72 64 65 72 69 6e 67 0a 74 68  om reordering.th
30020 65 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  e tables in the 
30030 6a 6f 69 6e 2e 20 20 41 6e 20 61 70 70 6c 69 63  join.  An applic
30040 61 74 69 6f 6e 20 70 72 6f 67 72 61 6d 6d 65 72  ation programmer
30050 20 63 61 6e 20 75 73 65 20 74 68 65 20 43 52 4f   can use the CRO
30060 53 53 20 4a 4f 49 4e 20 0a 6f 70 65 72 61 74 6f  SS JOIN .operato
30070 72 20 74 6f 20 64 69 72 65 63 74 6c 79 20 69 6e  r to directly in
30080 66 6c 75 65 6e 63 65 20 74 68 65 20 61 6c 67 6f  fluence the algo
30090 72 69 74 68 6d 20 74 68 61 74 20 69 73 20 63 68  rithm that is ch
300a0 6f 73 65 6e 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  osen to implemen
300b0 74 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  t.the SELECT sta
300c0 74 65 6d 65 6e 74 2e 20 20 41 76 6f 69 64 20 75  tement.  Avoid u
300d0 73 69 6e 67 20 43 52 4f 53 53 20 4a 4f 49 4e 20  sing CROSS JOIN 
300e0 65 78 63 65 70 74 20 69 6e 20 73 70 65 63 69 66  except in specif
300f0 69 63 20 73 69 74 75 61 74 69 6f 6e 73 20 0a 77  ic situations .w
30100 68 65 72 65 20 6d 61 6e 75 61 6c 20 63 6f 6e 74  here manual cont
30110 72 6f 6c 20 6f 66 20 74 68 65 20 71 75 65 72 79  rol of the query
30120 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 64 65   optimizer is de
30130 73 69 72 65 64 2e 20 20 41 76 6f 69 64 20 75 73  sired.  Avoid us
30140 69 6e 67 0a 43 52 4f 53 53 20 4a 4f 49 4e 20 65  ing.CROSS JOIN e
30150 61 72 6c 79 20 69 6e 20 74 68 65 20 64 65 76 65  arly in the deve
30160 6c 6f 70 6d 65 6e 74 20 6f 66 20 61 6e 20 61 70  lopment of an ap
30170 70 6c 69 63 61 74 69 6f 6e 20 61 73 20 64 6f 69  plication as doi
30180 6e 67 20 73 6f 20 69 73 0a 61 20 3c 61 20 68 72  ng so is.a <a hr
30190 65 66 3d 22 68 74 74 70 3a 2f 2f 63 32 2e 63 6f  ef="http://c2.co
301a0 6d 2f 63 67 69 2f 77 69 6b 69 3f 50 72 65 6d 61  m/cgi/wiki?Prema
301b0 74 75 72 65 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  tureOptimization
301c0 22 3e 70 72 65 6d 61 74 75 72 65 0a 6f 70 74 69  ">premature.opti
301d0 6d 69 7a 61 74 69 6f 6e 3c 2f 61 3e 2e 20 20 54  mization</a>.  T
301e0 68 65 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c  he special handl
301f0 69 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49  ing of CROSS JOI
30200 4e 20 69 73 20 61 6e 20 53 51 4c 69 74 65 2d 73  N is an SQLite-s
30210 70 65 63 69 66 69 63 0a 66 65 61 74 75 72 65 20  pecific.feature 
30220 61 6e 64 20 69 73 20 6e 6f 74 20 61 20 70 61 72  and is not a par
30230 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53 51  t of standard SQ
30240 4c 2e 0a 20 20 20 20 20 20 20 0a 0a 3c 74 63 6c  L..       ..<tcl
30250 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 68 65  >hd_fragment whe
30260 72 65 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c  reclause</tcl>.<
30270 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20  tcl>hd_keywords 
30280 7b 57 48 45 52 45 20 63 6c 61 75 73 65 7d 3c 2f  {WHERE clause}</
30290 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48  tcl>.<p><b>2. WH
302a0 45 52 45 20 63 6c 61 75 73 65 20 66 69 6c 74 65  ERE clause filte
302b0 72 69 6e 67 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28  ring.</b>..<p>^(
302c0 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  If a WHERE claus
302d0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  e is specified, 
302e0 74 68 65 20 57 48 45 52 45 20 65 78 70 72 65 73  the WHERE expres
302f0 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
30300 64 20 66 6f 72 20 0a 65 61 63 68 20 72 6f 77 20  d for .each row 
30310 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74  in the input dat
30320 61 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20  a as a [boolean 
30330 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c  expression]. Onl
30340 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  y rows for which
30350 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73   the.WHERE claus
30360 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
30370 6c 75 61 74 65 73 20 74 6f 20 74 72 75 65 20 61  luates to true a
30380 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d  re included from
30390 20 74 68 65 20 64 61 74 61 73 65 74 20 62 65 66   the dataset bef
303a0 6f 72 65 0a 63 6f 6e 74 69 6e 75 69 6e 67 2e 29  ore.continuing.)
303b0 5e 20 20 52 6f 77 73 20 61 72 65 20 65 78 63 6c  ^  Rows are excl
303c0 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  uded from the re
303d0 73 75 6c 74 20 69 66 20 74 68 65 20 57 48 45 52  sult if the WHER
303e0 45 20 63 6c 61 75 73 65 0a 65 76 61 6c 75 61 74  E clause.evaluat
303f0 65 73 20 74 6f 20 65 69 74 68 65 72 20 66 61 6c  es to either fal
30400 73 65 20 6f 72 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e  se or NULL...<p>
30410 46 6f 72 20 61 20 4a 4f 49 4e 20 6f 72 20 49 4e  For a JOIN or IN
30420 4e 45 52 20 4a 4f 49 4e 20 6f 72 20 43 52 4f 53  NER JOIN or CROS
30430 53 20 4a 4f 49 4e 2c 20 74 68 65 72 65 20 69 73  S JOIN, there is
30440 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62   no difference b
30450 65 74 77 65 65 6e 20 0a 61 20 63 6f 6e 73 74 72  etween .a constr
30460 61 69 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  aint expression 
30470 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  in the WHERE cla
30480 75 73 65 20 61 6e 64 20 6f 6e 65 20 69 6e 20 74  use and one in t
30490 68 65 20 4f 4e 20 63 6c 61 75 73 65 2e 20 20 48  he ON clause.  H
304a0 6f 77 65 76 65 72 2c 0a 66 6f 72 20 61 20 4c 45  owever,.for a LE
304b0 46 54 20 4a 4f 49 4e 20 6f 72 20 4c 45 46 54 20  FT JOIN or LEFT 
304c0 4f 55 54 45 52 20 4a 4f 49 4e 2c 20 74 68 65 20  OUTER JOIN, the 
304d0 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 76 65  difference is ve
304e0 72 79 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 0a  ry important.  .
304f0 49 6e 20 61 20 4c 45 46 54 20 4a 4f 49 4e 2c 0a  In a LEFT JOIN,.
30500 74 68 65 20 65 78 74 72 61 20 4e 55 4c 4c 20 72  the extra NULL r
30510 6f 77 20 66 6f 72 20 74 68 65 20 72 69 67 68 74  ow for the right
30520 2d 68 61 6e 64 20 74 61 62 6c 65 20 69 73 20 61  -hand table is a
30530 64 64 65 64 20 61 66 74 65 72 20 4f 4e 20 63 6c  dded after ON cl
30540 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 0a  ause processing.
30550 62 75 74 20 62 65 66 6f 72 65 20 57 48 45 52 45  but before WHERE
30560 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69   clause processi
30570 6e 67 2e 20 20 41 20 63 6f 6e 73 74 72 61 69 6e  ng.  A constrain
30580 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 6c  t of the form "l
30590 65 66 74 2e 78 3d 72 69 67 68 74 2e 79 22 0a 69  eft.x=right.y".i
305a0 6e 20 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20 77  n an ON clause w
305b0 69 6c 6c 20 74 68 65 72 65 66 6f 72 65 20 61 6c  ill therefore al
305c0 6c 6f 77 20 74 68 72 6f 75 67 68 20 74 68 65 20  low through the 
305d0 61 64 64 65 64 20 61 6c 6c 2d 4e 55 4c 4c 20 72  added all-NULL r
305e0 6f 77 73 20 6f 66 20 74 68 65 0a 72 69 67 68 74  ows of the.right
305f0 20 74 61 62 6c 65 2e 20 20 42 75 74 20 69 66 20   table.  But if 
30600 74 68 61 74 20 73 61 6d 65 20 63 6f 6e 73 74 72  that same constr
30610 61 69 6e 74 20 69 73 20 69 6e 20 74 68 65 20 57  aint is in the W
30620 48 45 52 45 20 63 6c 61 75 73 65 20 61 20 4e 55  HERE clause a NU
30630 4c 4c 20 69 6e 0a 22 72 69 67 68 74 2e 79 22 20  LL in."right.y" 
30640 77 69 6c 6c 20 70 72 65 76 65 6e 74 20 74 68 65  will prevent the
30650 20 65 78 70 72 65 73 73 69 6f 6e 20 22 6c 65 66   expression "lef
30660 74 2e 78 3d 72 69 67 68 74 2e 79 22 20 66 72 6f  t.x=right.y" fro
30670 6d 20 62 65 69 6e 67 20 74 72 75 65 2c 20 61 6e  m being true, an
30680 64 0a 74 68 75 73 20 65 78 63 6c 75 64 65 20 74  d.thus exclude t
30690 68 61 74 20 72 6f 77 20 66 72 6f 6d 20 74 68 65  hat row from the
306a0 20 6f 75 74 70 75 74 2e 0a 0a 3c 70 3e 3c 62 3e   output...<p><b>
306b0 33 2e 20 47 65 6e 65 72 61 74 69 6f 6e 20 6f 66  3. Generation of
306c0 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
306d0 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63  lt rows.</b>.<tc
306e0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65  l>hd_fragment re
306f0 73 75 6c 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74  sultset</tcl>.<t
30700 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
30710 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65  result-set expre
30720 73 73 69 6f 6e 73 7d 20 7b 47 52 4f 55 50 20 42  ssions} {GROUP B
30730 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63  Y}</tcl>..<p>Onc
30740 65 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61  e the input data
30750 20 66 72 6f 6d 20 74 68 65 20 46 52 4f 4d 20 63   from the FROM c
30760 6c 61 75 73 65 20 68 61 73 20 62 65 65 6e 20 66  lause has been f
30770 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 0a 57  iltered by the.W
30780 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72  HERE clause expr
30790 65 73 73 69 6f 6e 20 28 69 66 20 61 6e 79 29 2c  ession (if any),
307a0 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
307b0 6c 74 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20  lt rows for the 
307c0 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 61  simple .SELECT a
307d0 72 65 20 63 61 6c 63 75 6c 61 74 65 64 2e 20 45  re calculated. E
307e0 78 61 63 74 6c 79 20 68 6f 77 20 74 68 69 73 20  xactly how this 
307f0 69 73 20 64 6f 6e 65 20 64 65 70 65 6e 64 73 20  is done depends 
30800 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20 73  on whether the s
30810 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 69 73  imple .SELECT is
30820 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 6f 72   an aggregate or
30830 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71   non-aggregate q
30840 75 65 72 79 2c 20 61 6e 64 20 77 68 65 74 68 65  uery, and whethe
30850 72 20 6f 72 20 6e 6f 74 20 61 20 47 52 4f 55 50  r or not a GROUP
30860 0a 42 59 20 63 6c 61 75 73 65 20 77 61 73 20 73  .BY clause was s
30870 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 20 54  pecified...<p> T
30880 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65  he list of expre
30890 73 73 69 6f 6e 73 20 62 65 74 77 65 65 6e 20 74  ssions between t
308a0 68 65 20 53 45 4c 45 43 54 20 61 6e 64 20 46 52  he SELECT and FR
308b0 4f 4d 20 6b 65 79 77 6f 72 64 73 20 69 73 20 6b  OM keywords is k
308c0 6e 6f 77 6e 20 61 73 0a 74 68 65 20 72 65 73 75  nown as.the resu
308d0 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
308e0 73 74 2e 20 20 5e 49 66 20 61 20 72 65 73 75 6c  st.  ^If a resul
308f0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
30900 74 68 65 20 73 70 65 63 69 61 6c 20 65 78 70 72  the special expr
30910 65 73 73 69 6f 6e 0a 22 2a 22 20 74 68 65 6e 20  ession."*" then 
30920 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  all columns in t
30930 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61 72  he input data ar
30940 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66 6f  e substituted fo
30950 72 20 74 68 61 74 20 6f 6e 65 20 65 78 70 72 65  r that one expre
30960 73 73 69 6f 6e 2e 0a 5e 28 49 66 20 74 68 65 20  ssion..^(If the 
30970 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
30980 65 20 61 6c 69 61 73 20 6f 66 20 61 20 74 61 62  e alias of a tab
30990 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
309a0 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
309b0 65 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 22 2e  e.followed by ".
309c0 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75  *" then all colu
309d0 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d  mns from the nam
309e0 65 64 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ed table or subq
309f0 75 65 72 79 20 61 72 65 0a 73 75 62 73 74 69 74  uery are.substit
30a00 75 74 65 64 20 66 6f 72 20 74 68 65 20 73 69 6e  uted for the sin
30a10 67 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 29  gle expression.)
30a20 5e 20 5e 28 49 74 20 69 73 20 61 6e 20 65 72 72  ^ ^(It is an err
30a30 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20  or to use a "*" 
30a40 6f 72 0a 22 61 6c 69 61 73 2e 2a 22 20 65 78 70  or."alias.*" exp
30a50 72 65 73 73 69 6f 6e 20 69 6e 20 61 6e 79 20 63  ression in any c
30a60 6f 6e 74 65 78 74 20 6f 74 68 65 72 20 74 68 61  ontext other tha
30a70 6e 20 61 20 72 65 73 75 6c 74 20 65 78 70 72 65  n a result expre
30a80 73 73 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28  ssion list.)^.^(
30a90 49 74 20 69 73 20 61 6c 73 6f 20 61 6e 20 65 72  It is also an er
30aa0 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22  ror to use a "*"
30ab0 20 6f 72 20 22 61 6c 69 61 73 2e 2a 22 20 65 78   or "alias.*" ex
30ac0 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 20 73 69  pression in a si
30ad0 6d 70 6c 65 20 53 45 4c 45 43 54 0a 71 75 65 72  mple SELECT.quer
30ae0 79 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  y that does not 
30af0 68 61 76 65 20 61 20 46 52 4f 4d 20 63 6c 61 75  have a FROM clau
30b00 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65  se.)^..<p> ^(The
30b10 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
30b20 6e 73 20 69 6e 20 74 68 65 20 72 6f 77 73 20 72  ns in the rows r
30b30 65 74 75 72 6e 65 64 20 62 79 20 61 20 73 69 6d  eturned by a sim
30b40 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
30b50 6d 65 6e 74 0a 69 73 20 65 71 75 61 6c 20 74 6f  ment.is equal to
30b60 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
30b70 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
30b80 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  e result express
30b90 69 6f 6e 20 6c 69 73 74 20 61 66 74 65 72 0a 73  ion list after.s
30ba0 75 62 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 2a  ubstitution of *
30bb0 20 61 6e 64 20 61 6c 69 61 73 2e 2a 20 65 78 70   and alias.* exp
30bc0 72 65 73 73 69 6f 6e 73 2e 29 5e 20 45 61 63 68  ressions.)^ Each
30bd0 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 63   result row is c
30be0 61 6c 63 75 6c 61 74 65 64 20 62 79 0a 65 76 61  alculated by.eva
30bf0 6c 75 61 74 69 6e 67 20 74 68 65 20 65 78 70 72  luating the expr
30c00 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72  essions in the r
30c10 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
30c20 20 6c 69 73 74 20 77 69 74 68 20 72 65 73 70 65   list with respe
30c30 63 74 20 74 6f 20 61 0a 73 69 6e 67 6c 65 20 72  ct to a.single r
30c40 6f 77 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61  ow of input data
30c50 20 6f 72 2c 20 66 6f 72 20 61 67 67 72 65 67 61   or, for aggrega
30c60 74 65 20 71 75 65 72 69 65 73 2c 20 77 69 74 68  te queries, with
30c70 20 72 65 73 70 65 63 74 20 74 6f 20 61 20 67 72   respect to a gr
30c80 6f 75 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75  oup.of rows...<u
30c90 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  l>.  <li><p>^If 
30ca0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
30cb0 6d 65 6e 74 20 69 73 20 3c 62 3e 61 20 6e 6f 6e  ment is <b>a non
30cc0 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
30cd0 3c 2f 62 3e 2c 20 74 68 65 6e 20 0a 20 20 20 20  </b>, then .    
30ce0 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
30cf0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
30d00 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 73  pression list is
30d10 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
30d20 61 63 68 20 72 6f 77 20 69 6e 0a 20 20 20 20 74  ach row in.    t
30d30 68 65 20 64 61 74 61 73 65 74 20 66 69 6c 74 65  he dataset filte
30d40 72 65 64 20 62 79 20 74 68 65 20 57 48 45 52 45  red by the WHERE
30d50 20 63 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e   clause...  <li>
30d60 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43  <p>^If the SELEC
30d70 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c  T statement is <
30d80 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  b>an aggregate q
30d90 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 20 47  uery without a G
30da0 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20  ROUP.    BY</b> 
30db0 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63  clause, then eac
30dc0 68 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  h aggregate expr
30dd0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
30de0 73 75 6c 74 2d 73 65 74 20 69 73 20 0a 20 20 20  sult-set is .   
30df0 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
30e00 61 63 72 6f 73 73 20 74 68 65 20 65 6e 74 69 72  across the entir
30e10 65 20 64 61 74 61 73 65 74 2e 20 5e 45 61 63 68  e dataset. ^Each
30e20 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
30e30 78 70 72 65 73 73 69 6f 6e 0a 20 20 20 20 69 6e  xpression.    in
30e40 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20   the result-set 
30e50 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63  is evaluated onc
30e60 65 20 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61  e for an arbitra
30e70 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f  rily selected ro
30e80 77 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74  w of.    the dat
30e90 61 73 65 74 2e 20 5e 54 68 65 20 73 61 6d 65 20  aset. ^The same 
30ea0 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65  arbitrarily sele
30eb0 63 74 65 64 20 72 6f 77 20 69 73 20 75 73 65 64  cted row is used
30ec0 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20 6e 6f   for each.    no
30ed0 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
30ee0 65 73 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20  ession. ^Or, if 
30ef0 74 68 65 20 64 61 74 61 73 65 74 20 63 6f 6e 74  the dataset cont
30f00 61 69 6e 73 20 7a 65 72 6f 20 72 6f 77 73 2c 20  ains zero rows, 
30f10 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 6e  then .    each n
30f20 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
30f30 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
30f40 61 74 65 64 20 61 67 61 69 6e 73 74 20 61 20 72  ated against a r
30f50 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20 20  ow consisting.  
30f60 20 20 65 6e 74 69 72 65 6c 79 20 6f 66 20 4e 55    entirely of NU
30f70 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20 3c  LL values...   <
30f80 70 3e 5e 54 68 65 20 73 69 6e 67 6c 65 20 72 6f  p>^The single ro
30f90 77 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  w of result-set 
30fa0 64 61 74 61 20 63 72 65 61 74 65 64 20 62 79 20  data created by 
30fb0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61  evaluating the a
30fc0 67 67 72 65 67 61 74 65 0a 20 20 20 20 61 6e 64  ggregate.    and
30fd0 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
30fe0 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
30ff0 65 20 72 65 73 75 6c 74 2d 73 65 74 20 66 6f 72  e result-set for
31000 6d 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ms the result of
31010 20 61 6e 0a 20 20 20 20 61 67 67 72 65 67 61 74   an.    aggregat
31020 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20  e query without 
31030 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
31040 65 2e 20 5e 41 6e 20 61 67 67 72 65 67 61 74 65  e. ^An aggregate
31050 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61   query without a
31060 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c  .    GROUP BY cl
31070 61 75 73 65 20 61 6c 77 61 79 73 20 72 65 74 75  ause always retu
31080 72 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20  rns exactly one 
31090 72 6f 77 20 6f 66 20 64 61 74 61 2c 20 65 76 65  row of data, eve
310a0 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 20  n if there are. 
310b0 20 20 20 7a 65 72 6f 20 72 6f 77 73 20 6f 66 20     zero rows of 
310c0 69 6e 70 75 74 20 64 61 74 61 2e 0a 0a 20 20 3c  input data...  <
310d0 6c 69 3e 3c 70 3e 5e 28 49 66 20 74 68 65 20 53  li><p>^(If the S
310e0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
310f0 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61  is <b>an aggrega
31100 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20  te query with a 
31110 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e  GROUP.    BY</b>
31120 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61   clause, then ea
31130 63 68 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  ch of the expres
31140 73 69 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20  sions specified 
31150 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 20  as part of the. 
31160 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75     GROUP BY clau
31170 73 65 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  se is evaluated 
31180 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
31190 74 68 65 20 64 61 74 61 73 65 74 2e 20 45 61 63  the dataset. Eac
311a0 68 20 72 6f 77 0a 20 20 20 20 69 73 20 74 68 65  h row.    is the
311b0 6e 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20  n assigned to a 
311c0 22 67 72 6f 75 70 22 20 62 61 73 65 64 20 6f 6e  "group" based on
311d0 20 74 68 65 20 72 65 73 75 6c 74 73 3b 20 72 6f   the results; ro
311e0 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20  ws for which.   
311f0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
31200 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 47  evaluating the G
31210 52 4f 55 50 20 42 59 20 65 78 70 72 65 73 73 69  ROUP BY expressi
31220 6f 6e 73 20 61 72 65 20 74 68 65 20 73 61 6d 65  ons are the same
31230 20 67 65 74 0a 20 20 20 20 61 73 73 69 67 6e 65   get.    assigne
31240 64 20 74 6f 20 74 68 65 20 73 61 6d 65 20 67 72  d to the same gr
31250 6f 75 70 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20  oup.)^ ^For the 
31260 70 75 72 70 6f 73 65 73 20 6f 66 20 67 72 6f 75  purposes of grou
31270 70 69 6e 67 20 72 6f 77 73 2c 20 4e 55 4c 4c 20  ping rows, NULL 
31280 0a 20 20 20 20 76 61 6c 75 65 73 20 61 72 65 20  .    values are 
31290 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c  considered equal
312a0 2e 20 5e 54 68 65 20 75 73 75 61 6c 20 72 75 6c  . ^The usual rul
312b0 65 73 20 66 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f  es for [collatio
312c0 6e 7c 73 65 6c 65 63 74 69 6e 67 20 61 0a 20 20  n|selecting a.  
312d0 20 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75    collation sequ
312e0 65 6e 63 65 5d 20 77 69 74 68 20 77 68 69 63 68  ence] with which
312f0 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
31300 20 76 61 6c 75 65 73 20 61 70 70 6c 79 20 77 68   values apply wh
31310 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 0a 20 20  en evaluating.  
31320 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e    expressions in
31330 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
31340 73 65 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73  se.  ^The expres
31350 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 47 52 4f  sions in the GRO
31360 55 50 20 42 59 20 63 6c 61 75 73 65 0a 20 20 20  UP BY clause.   
31370 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e   do <em>not</em>
31380 20 68 61 76 65 20 74 6f 20 62 65 20 65 78 70 72   have to be expr
31390 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 70 70  essions that app
313a0 65 61 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ear in the resul
313b0 74 2e 20 5e 54 68 65 0a 20 20 20 20 65 78 70 72  t. ^The.    expr
313c0 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f  essions in a GRO
313d0 55 50 20 42 59 20 63 6c 61 75 73 65 20 6d 61 79  UP BY clause may
313e0 20 6e 6f 74 20 62 65 20 61 67 67 72 65 67 61 74   not be aggregat
313f0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 0a  e expressions...
31400 20 20 20 20 3c 70 3e 5e 28 49 66 20 61 20 48 41      <p>^(If a HA
31410 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73  VING clause is s
31420 70 65 63 69 66 69 65 64 2c 20 69 74 20 69 73 20  pecified, it is 
31430 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
31440 6f 72 20 65 61 63 68 20 67 72 6f 75 70 20 0a 20  or each group . 
31450 20 20 20 6f 66 20 72 6f 77 73 20 61 73 20 61 20     of rows as a 
31460 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
31470 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 72 65 73  ion]. If the res
31480 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult of evaluatin
31490 67 20 74 68 65 0a 20 20 20 20 48 41 56 49 4e 47  g the.    HAVING
314a0 20 63 6c 61 75 73 65 20 69 73 20 66 61 6c 73 65   clause is false
314b0 2c 20 74 68 65 20 67 72 6f 75 70 20 69 73 20 64  , the group is d
314c0 69 73 63 61 72 64 65 64 2e 29 5e 20 5e 49 66 20  iscarded.)^ ^If 
314d0 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  the HAVING claus
314e0 65 20 69 73 0a 20 20 20 20 61 6e 20 61 67 67 72  e is.    an aggr
314f0 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
31500 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
31510 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77  d across all row
31520 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20  s in the group. 
31530 5e 49 66 0a 20 20 20 20 61 20 48 41 56 49 4e 47  ^If.    a HAVING
31540 20 63 6c 61 75 73 65 20 69 73 20 61 20 6e 6f 6e   clause is a non
31550 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
31560 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61  ssion, it is eva
31570 6c 75 61 74 65 64 20 77 69 74 68 20 72 65 73 70  luated with resp
31580 65 63 74 0a 20 20 20 20 74 6f 20 61 6e 20 61 72  ect.    to an ar
31590 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
315a0 65 64 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20  ed row from the 
315b0 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 48 41 56  group.  ^The HAV
315c0 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ING expression m
315d0 61 79 0a 20 20 20 20 72 65 66 65 72 20 74 6f 20  ay.    refer to 
315e0 76 61 6c 75 65 73 2c 20 65 76 65 6e 20 61 67 67  values, even agg
315f0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
31600 2c 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69  , that are not i
31610 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70  n the result.</p
31620 3e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20  >..    <p>^Each 
31630 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
31640 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20  e result-set is 
31650 74 68 65 6e 20 65 76 61 6c 75 61 74 65 64 20 6f  then evaluated o
31660 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 20 20 20  nce for each.   
31670 20 67 72 6f 75 70 20 6f 66 20 72 6f 77 73 2e 20   group of rows. 
31680 5e 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69  ^If the expressi
31690 6f 6e 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  on is an aggrega
316a0 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  te expression, i
316b0 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61  t is .    evalua
316c0 74 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72  ted across all r
316d0 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ows in the group
316e0 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74  . ^Otherwise, it
316f0 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67   is evaluated ag
31700 61 69 6e 73 74 0a 20 20 20 20 61 20 73 69 6e 67  ainst.    a sing
31710 6c 65 20 61 72 62 69 74 72 61 72 69 6c 79 20 63  le arbitrarily c
31720 68 6f 73 65 6e 20 72 6f 77 20 66 72 6f 6d 20 77  hosen row from w
31730 69 74 68 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ithin the group.
31740 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f   ^If there is mo
31750 72 65 0a 20 20 20 20 74 68 61 6e 20 6f 6e 65 20  re.    than one 
31760 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78  non-aggregate ex
31770 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
31780 72 65 73 75 6c 74 2d 73 65 74 2c 20 74 68 65 6e  result-set, then
31790 20 61 6c 6c 20 73 75 63 68 0a 20 20 20 20 65 78   all such.    ex
317a0 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76  pressions are ev
317b0 61 6c 75 61 74 65 64 20 66 6f 72 20 74 68 65 20  aluated for the 
317c0 73 61 6d 65 20 72 6f 77 2e 0a 0a 20 20 20 20 3c  same row...    <
317d0 70 3e 5e 45 61 63 68 20 67 72 6f 75 70 20 6f 66  p>^Each group of
317e0 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 20 72   input dataset r
317f0 6f 77 73 20 63 6f 6e 74 72 69 62 75 74 65 73 20  ows contributes 
31800 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 74 6f 20  a single row to 
31810 74 68 65 20 0a 20 20 20 20 73 65 74 20 6f 66 20  the .    set of 
31820 72 65 73 75 6c 74 20 72 6f 77 73 2e 20 5e 53 75  result rows. ^Su
31830 62 6a 65 63 74 20 74 6f 20 66 69 6c 74 65 72 69  bject to filteri
31840 6e 67 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ng associated wi
31850 74 68 20 74 68 65 20 44 49 53 54 49 4e 43 54 0a  th the DISTINCT.
31860 20 20 20 20 6b 65 79 77 6f 72 64 2c 20 74 68 65      keyword, the
31870 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
31880 72 65 74 75 72 6e 65 64 20 62 79 20 61 6e 20 61  returned by an a
31890 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
318a0 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20  ith a GROUP.    
318b0 42 59 20 63 6c 61 75 73 65 20 69 73 20 74 68 65  BY clause is the
318c0 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d   same as the num
318d0 62 65 72 20 6f 66 20 67 72 6f 75 70 73 20 6f 66  ber of groups of
318e0 20 72 6f 77 73 20 70 72 6f 64 75 63 65 64 20 62   rows produced b
318f0 79 20 61 70 70 6c 79 69 6e 67 0a 20 20 20 20 74  y applying.    t
31900 68 65 20 47 52 4f 55 50 20 42 59 20 61 6e 64 20  he GROUP BY and 
31910 48 41 56 49 4e 47 20 63 6c 61 75 73 65 73 20 74  HAVING clauses t
31920 6f 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69  o the filtered i
31930 6e 70 75 74 20 64 61 74 61 73 65 74 2e 0a 3c 2f  nput dataset..</
31940 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ul>..<tcl>hd_fra
31950 67 6d 65 6e 74 20 62 61 72 65 61 67 67 20 7b 62  gment bareagg {b
31960 61 72 65 20 61 67 67 72 65 67 61 74 65 20 74 65  are aggregate te
31970 72 6d 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62  rms}</tcl>.<p><b
31980 3e 53 69 64 65 20 6e 6f 74 65 3a 20 42 61 72 65  >Side note: Bare
31990 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20 61   columns in an a
319a0 67 67 72 65 67 61 74 65 20 71 75 65 72 69 65 73  ggregate queries
319b0 2e 3c 2f 62 3e 0a 54 68 65 20 75 73 75 61 6c 20  .</b>.The usual 
319c0 63 61 73 65 20 69 73 20 74 68 61 74 20 61 6c 6c  case is that all
319d0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e   column names in
319e0 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75   an aggregate qu
319f0 65 72 79 20 61 72 65 20 65 69 74 68 65 72 0a 61  ery are either.a
31a00 72 67 75 6d 65 6e 74 73 20 74 6f 20 5b 61 67 67  rguments to [agg
31a10 66 75 6e 63 7c 61 67 67 72 65 67 61 74 65 20 66  func|aggregate f
31a20 75 6e 63 74 69 6f 6e 73 5d 20 6f 72 20 65 6c 73  unctions] or els
31a30 65 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  e appear in the 
31a40 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e  GROUP BY clause.
31a50 0a 41 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  .A result column
31a60 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20   which contains 
31a70 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 68  a column name th
31a80 61 74 20 69 73 20 6e 6f 74 20 77 69 74 68 69 6e  at is not within
31a90 20 61 6e 0a 61 67 67 72 65 67 61 74 65 20 66 75   an.aggregate fu
31aa0 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 61 74 20  nction and that 
31ab0 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20  does not appear 
31ac0 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59 20  in the GROUP BY 
31ad0 63 6c 61 75 73 65 20 28 69 66 0a 6f 6e 65 20 65  clause (if.one e
31ae0 78 69 73 74 73 29 20 69 73 20 63 61 6c 6c 65 64  xists) is called
31af0 20 61 20 22 62 61 72 65 22 20 63 6f 6c 75 6d 6e   a "bare" column
31b00 2e 0a 45 78 61 6d 70 6c 65 3a 0a 3c 62 6c 6f 63  ..Example:.<bloc
31b10 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 53 45 4c  kquote><pre>.SEL
31b20 45 43 54 20 61 2c 20 62 2c 20 73 75 6d 28 63 29  ECT a, b, sum(c)
31b30 20 46 52 4f 4d 20 74 61 62 31 20 47 52 4f 55 50   FROM tab1 GROUP
31b40 20 42 59 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f 62   BY a;.</pre></b
31b50 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 70 3e 49 6e  lockquote>.<p>In
31b60 20 74 68 65 20 71 75 65 72 79 20 61 62 6f 76 65   the query above
31b70 2c 20 74 68 65 20 22 61 22 20 63 6f 6c 75 6d 6e  , the "a" column
31b80 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   is part of the 
31b90 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 0a  GROUP BY clause.
31ba0 61 6e 64 20 73 6f 20 65 61 63 68 20 72 6f 77 20  and so each row 
31bb0 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 63 6f  of the output co
31bc0 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 66 20 74 68  ntains one of th
31bd0 65 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75 65  e distinct value
31be0 73 20 66 6f 72 0a 22 61 22 2e 20 20 54 68 65 20  s for."a".  The 
31bf0 22 63 22 20 63 6f 6c 75 6d 6e 20 69 73 20 63 6f  "c" column is co
31c00 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74  ntained within t
31c10 68 65 20 5b 73 75 6d 28 29 5d 20 61 67 67 72 65  he [sum()] aggre
31c20 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 61 6e  gate function.an
31c30 64 20 73 6f 20 74 68 61 74 20 6f 75 74 70 75 74  d so that output
31c40 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 73   column is the s
31c50 75 6d 20 6f 66 20 61 6c 6c 20 22 63 22 20 76 61  um of all "c" va
31c60 6c 75 65 73 20 69 6e 20 72 6f 77 73 20 74 68 61  lues in rows tha
31c70 74 0a 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  t.have the same 
31c80 76 61 6c 75 65 20 66 6f 72 20 22 61 22 2e 20 20  value for "a".  
31c90 42 75 74 20 77 68 61 74 20 69 73 20 74 68 65 20  But what is the 
31ca0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 62 61  result of the ba
31cb0 72 65 20 0a 63 6f 6c 75 6d 6e 20 22 62 22 3f 20  re .column "b"? 
31cc0 54 68 65 20 61 6e 73 77 65 72 20 69 73 20 74 68  The answer is th
31cd0 61 74 20 74 68 65 20 22 62 22 20 72 65 73 75 6c  at the "b" resul
31ce0 74 20 77 69 6c 6c 20 62 65 20 74 68 65 0a 76 61  t will be the.va
31cf0 6c 75 65 20 66 6f 72 20 22 62 22 20 69 6e 20 6f  lue for "b" in o
31d00 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  ne of the input 
31d10 72 6f 77 73 20 74 68 61 74 20 66 6f 72 6d 20 74  rows that form t
31d20 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 54 68  he aggregate..Th
31d30 65 20 70 72 6f 62 6c 65 6d 20 69 73 20 74 68 61  e problem is tha
31d40 74 20 79 6f 75 20 75 73 75 61 6c 6c 79 20 64 6f  t you usually do
31d50 20 6e 6f 74 20 6b 6e 6f 77 20 77 68 69 63 68 20   not know which 
31d60 69 6e 70 75 74 20 72 6f 77 20 69 73 20 75 73 65  input row is use
31d70 64 0a 74 6f 20 63 6f 6d 70 75 74 65 20 22 62 22  d.to compute "b"
31d80 2c 20 61 6e 64 20 73 6f 20 69 6e 20 6d 61 6e 79  , and so in many
31d90 20 63 61 73 65 73 20 74 68 65 20 76 61 6c 75 65   cases the value
31da0 20 66 6f 72 20 22 62 22 20 69 73 20 75 6e 64 65   for "b" is unde
31db0 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a 3c 70 3e 0a  fined..</p>.<p>.
31dc0 53 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69  Special processi
31dd0 6e 67 20 6f 63 63 75 72 73 20 6f 63 63 75 72 73  ng occurs occurs
31de0 20 77 68 65 6e 20 74 68 65 20 61 67 67 72 65 67   when the aggreg
31df0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ate function is 
31e00 0a 65 69 74 68 65 72 20 5b 6d 61 78 41 67 67 46  .either [maxAggF
31e10 75 6e 63 7c 6d 69 6e 28 29 5d 20 6f 72 20 5b 6d  unc|min()] or [m
31e20 69 6e 41 67 67 46 75 6e 63 7c 6d 61 78 28 29 5d  inAggFunc|max()]
31e30 2e 20 20 45 78 61 6d 70 6c 65 3a 0a 3c 62 6c 6f  .  Example:.<blo
31e40 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 53 45  ckquote><pre>.SE
31e50 4c 45 43 54 20 61 2c 20 62 2c 20 6d 61 78 28 63  LECT a, b, max(c
31e60 29 20 46 52 4f 4d 20 74 61 62 31 20 47 52 4f 55  ) FROM tab1 GROU
31e70 50 20 42 59 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f  P BY a;.</pre></
31e80 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 57 68 65 6e  blockquote>.When
31e90 20 74 68 65 20 5b 6d 61 78 41 67 67 46 75 6e 63   the [maxAggFunc
31ea0 7c 6d 69 6e 28 29 5d 20 6f 72 20 5b 6d 69 6e 41  |min()] or [minA
31eb0 67 67 46 75 6e 63 7c 6d 61 78 28 29 5d 20 61 67  ggFunc|max()] ag
31ec0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
31ed0 73 20 0a 61 72 65 20 75 73 65 64 20 69 6e 20 61  s .are used in a
31ee0 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n aggregate quer
31ef0 79 2c 20 61 6c 6c 20 62 61 72 65 20 63 6f 6c 75  y, all bare colu
31f00 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
31f10 74 20 73 65 74 20 0a 74 61 6b 65 20 76 61 6c 75  t set .take valu
31f20 65 73 20 66 72 6f 6d 20 74 68 65 20 69 6e 70 75  es from the inpu
31f30 74 0a 72 6f 77 20 77 68 69 63 68 20 61 6c 73 6f  t.row which also
31f40 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 69   contains the mi
31f50 6e 69 6d 75 6d 20 6f 72 20 6d 61 78 69 6d 75 6d  nimum or maximum
31f60 2e 20 20 53 6f 20 69 6e 20 74 68 65 20 71 75 65  .  So in the que
31f70 72 79 0a 61 62 6f 76 65 2c 20 74 68 65 20 76 61  ry.above, the va
31f80 6c 75 65 20 6f 66 20 74 68 65 20 22 62 22 20 63  lue of the "b" c
31f90 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 6f 75 74  olumn in the out
31fa0 70 75 74 20 77 69 6c 6c 20 62 65 20 74 68 65 20  put will be the 
31fb0 76 61 6c 75 65 20 6f 66 0a 74 68 65 20 22 62 22  value of.the "b"
31fc0 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 69   column in the i
31fd0 6e 70 75 74 20 72 6f 77 20 74 68 61 74 20 68 61  nput row that ha
31fe0 73 20 74 68 65 20 6c 61 72 67 65 73 74 20 22 63  s the largest "c
31ff0 22 20 76 61 6c 75 65 2e 0a 54 68 65 72 65 20 69  " value..There i
32000 73 20 73 74 69 6c 6c 20 61 6e 20 61 6d 62 69 67  s still an ambig
32010 75 69 74 79 20 69 66 20 74 77 6f 20 6f 72 20 6d  uity if two or m
32020 6f 72 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  ore of the input
32030 20 72 6f 77 73 20 68 61 76 65 20 74 68 65 0a 73   rows have the.s
32040 61 6d 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 20 6d  ame minimum or m
32050 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f 72 20  aximum value or 
32060 69 66 20 74 68 65 20 71 75 65 72 79 20 63 6f 6e  if the query con
32070 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20  tains more than 
32080 6f 6e 65 0a 6d 69 6e 28 29 20 61 6e 64 2f 6f 72  one.min() and/or
32090 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
320a0 20 66 75 6e 63 74 69 6f 6e 2e 20 4f 6e 6c 79 20   function. Only 
320b0 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 5b 6d 69  the built-in [mi
320c0 6e 41 67 67 46 75 6e 63 7c 6d 69 6e 28 29 5d 20  nAggFunc|min()] 
320d0 0a 61 6e 64 20 5b 6d 61 78 41 67 67 46 75 6e 63  .and [maxAggFunc
320e0 7c 6d 61 78 28 29 5d 20 66 75 6e 63 74 69 6f 6e  |max()] function
320f0 73 20 77 6f 72 6b 20 74 68 69 73 20 77 61 79 2e  s work this way.
32100 0a 3c 2f 70 3e 0a 0a 3c 70 3e 3c 62 3e 34 2e 20  .</p>..<p><b>4. 
32110 52 65 6d 6f 76 61 6c 20 6f 66 20 64 75 70 6c 69  Removal of dupli
32120 63 61 74 65 20 72 6f 77 73 20 28 44 49 53 54 49  cate rows (DISTI
32130 4e 43 54 20 70 72 6f 63 65 73 73 69 6e 67 29 2e  NCT processing).
32140 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  </b>.<tcl>hd_fra
32150 67 6d 65 6e 74 20 64 69 73 74 69 6e 63 74 3c 2f  gment distinct</
32160 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79  tcl>.<tcl>hd_key
32170 77 6f 72 64 73 20 7b 44 49 53 54 49 4e 43 54 7d  words {DISTINCT}
32180 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f 6e 65 20  </tcl>..<p>^One 
32190 6f 66 20 74 68 65 20 41 4c 4c 20 6f 72 20 44 49  of the ALL or DI
321a0 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 73 20  STINCT keywords 
321b0 6d 61 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 53  may follow the S
321c0 45 4c 45 43 54 20 6b 65 79 77 6f 72 64 20 69 6e  ELECT keyword in
321d0 20 61 20 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43   a .simple SELEC
321e0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66  T statement. ^If
321f0 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45   the simple SELE
32200 43 54 20 69 73 20 61 20 53 45 4c 45 43 54 20 41  CT is a SELECT A
32210 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a 65 6e 74  LL, then the.ent
32220 69 72 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c  ire set of resul
32230 74 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72  t rows are retur
32240 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43  ned by the SELEC
32250 54 2e 20 5e 49 66 20 6e 65 69 74 68 65 72 20 41  T. ^If neither A
32260 4c 4c 20 6f 72 0a 44 49 53 54 49 4e 43 54 20 61  LL or.DISTINCT a
32270 72 65 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e  re present, then
32280 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
32290 20 61 73 20 69 66 20 41 4c 4c 20 77 65 72 65 20   as if ALL were 
322a0 73 70 65 63 69 66 69 65 64 2e 20 0a 5e 49 66 20  specified. .^If 
322b0 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  the simple SELEC
322c0 54 20 69 73 20 61 20 53 45 4c 45 43 54 20 44 49  T is a SELECT DI
322d0 53 54 49 4e 43 54 2c 20 74 68 65 6e 20 64 75 70  STINCT, then dup
322e0 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72 65 20  licate rows are 
322f0 72 65 6d 6f 76 65 64 0a 66 72 6f 6d 20 74 68 65  removed.from the
32300 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
32310 6f 77 73 20 62 65 66 6f 72 65 20 69 74 20 69 73  ows before it is
32320 20 72 65 74 75 72 6e 65 64 2e 20 5e 46 6f 72 20   returned. ^For 
32330 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 0a  the purposes of.
32340 64 65 74 65 63 74 69 6e 67 20 64 75 70 6c 69 63  detecting duplic
32350 61 74 65 20 72 6f 77 73 2c 20 74 77 6f 20 4e 55  ate rows, two NU
32360 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  LL values are co
32370 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20 65  nsidered to be e
32380 71 75 61 6c 2e 20 5e 54 68 65 0a 5b 68 6f 77 20  qual. ^The.[how 
32390 63 6f 6c 6c 61 74 69 6f 6e 20 69 73 20 64 65 74  collation is det
323a0 65 72 6d 69 6e 65 64 7c 75 73 75 61 6c 20 72 75  ermined|usual ru
323b0 6c 65 73 5d 20 61 70 70 6c 79 20 66 6f 72 20 73  les] apply for s
323c0 65 6c 65 63 74 69 6e 67 20 61 20 63 6f 6c 6c 61  electing a colla
323d0 74 69 6f 6e 0a 73 65 71 75 65 6e 63 65 20 74 6f  tion.sequence to
323e0 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61   compare text va
323f0 6c 75 65 73 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f  lues...<tcl>.hd_
32400 66 72 61 67 6d 65 6e 74 20 63 6f 6d 70 6f 75 6e  fragment compoun
32410 64 20 7b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65  d {compound sele
32420 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 71 75  ct} {compound qu
32430 65 72 79 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 53  ery} {compound S
32440 45 4c 45 43 54 7d 20 7b 63 6f 6d 70 6f 75 6e 64  ELECT} {compound
32450 20 53 45 4c 45 43 54 73 7d 0a 3c 2f 74 63 6c 3e   SELECTs}.</tcl>
32460 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64 20 53 65  .<h3>Compound Se
32470 6c 65 63 74 20 53 74 61 74 65 6d 65 6e 74 73 3c  lect Statements<
32480 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f 72 20  /h3>..<p>Two or 
32490 6d 6f 72 65 20 5b 73 69 6d 70 6c 65 20 53 45 4c  more [simple SEL
324a0 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 20  ECT] statements 
324b0 6d 61 79 20 62 65 20 63 6f 6e 6e 65 63 74 65 64  may be connected
324c0 20 74 6f 67 65 74 68 65 72 20 74 6f 20 66 6f 72   together to for
324d0 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  m.a compound SEL
324e0 45 43 54 20 75 73 69 6e 67 20 74 68 65 20 55 4e  ECT using the UN
324f0 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20  ION, UNION ALL, 
32500 49 4e 54 45 52 53 45 43 54 20 6f 72 20 45 58 43  INTERSECT or EXC
32510 45 50 54 20 6f 70 65 72 61 74 6f 72 2c 0a 61 73  EPT operator,.as
32520 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20 66 6f   shown by the fo
32530 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61 6d 3a  llowing diagram:
32540 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76  ..<tcl>.Recursiv
32550 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  eBubbleDiagram c
32560 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65 63 74 2d 73  ompound-select-s
32570 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
32580 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  In a compound SE
32590 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f  LECT, all the co
325a0 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54  nstituent SELECT
325b0 73 20 6d 75 73 74 20 72 65 74 75 72 6e 20 74 68  s must return th
325c0 65 20 73 61 6d 65 20 0a 6e 75 6d 62 65 72 20 6f  e same .number o
325d0 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73  f result columns
325e0 2e 20 5e 41 73 20 74 68 65 20 63 6f 6d 70 6f 6e  . ^As the compon
325f0 65 6e 74 73 20 6f 66 20 61 20 63 6f 6d 70 6f 75  ents of a compou
32600 6e 64 20 53 45 4c 45 43 54 20 6d 75 73 74 0a 62  nd SELECT must.b
32610 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
32620 73 74 61 74 65 6d 65 6e 74 73 2c 20 74 68 65 79  statements, they
32630 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e   may not contain
32640 20 5b 4f 52 44 45 52 20 42 59 5d 20 6f 72 20 5b   [ORDER BY] or [
32650 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73 2e 0a  LIMIT] clauses..
32660 5e 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e 64 20  ^[ORDER BY] and 
32670 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73 20  [LIMIT] clauses 
32680 6d 61 79 20 6f 6e 6c 79 20 6f 63 63 75 72 20 61  may only occur a
32690 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
326a0 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e 64   entire compound
326b0 0a 53 45 4c 45 43 54 2c 20 61 6e 64 20 74 68 65  .SELECT, and the
326c0 6e 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 66 69  n only if the fi
326d0 6e 61 6c 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  nal element of t
326e0 68 65 20 63 6f 6d 70 6f 75 6e 64 20 69 73 20 6e  he compound is n
326f0 6f 74 20 61 20 5b 56 41 4c 55 45 53 5d 20 63 6c  ot a [VALUES] cl
32700 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41 20 63 6f 6d  ause...<p>^A com
32710 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63 72 65  pound SELECT cre
32720 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49 4f 4e  ated using UNION
32730 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20 72 65   ALL operator re
32740 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20 72 6f  turns all the ro
32750 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c 45  ws.from the SELE
32760 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74 20 6f  CT to the left o
32770 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c 4c 20  f the UNION ALL 
32780 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20 61 6c  operator, and al
32790 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d 20  l the rows.from 
327a0 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20 74 68  the SELECT to th
327b0 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e 20 5e  e right of it. ^
327c0 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72 61 74  The UNION operat
327d0 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d  or works the sam
327e0 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e 20 41  e way as.UNION A
327f0 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  LL, except that 
32800 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61  duplicate rows a
32810 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  re removed from 
32820 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75 6c 74  the final result
32830 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54 45 52   set..^The INTER
32840 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20 72 65  SECT operator re
32850 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65 72 73  turns the inters
32860 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65  ection of the re
32870 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c 65 66  sults of the lef
32880 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45 4c 45  t and.right SELE
32890 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43 45 50  CTs.  ^The EXCEP
328a0 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72  T operator retur
328b0 6e 73 20 74 68 65 20 73 75 62 73 65 74 20 6f 66  ns the subset of
328c0 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62   rows returned b
328d0 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c 45 43  y the.left SELEC
328e0 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 61  T that are not a
328f0 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62 79 20  lso returned by 
32900 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 53  the right-hand S
32910 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63 61 74  ELECT. ^Duplicat
32920 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76  e.rows are remov
32930 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75  ed from the resu
32940 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45 43 54  lts of INTERSECT
32950 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70 65 72   and EXCEPT oper
32960 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74 68 65  ators before the
32970 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 72  .result set is r
32980 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e 46 6f  eturned...<p>^Fo
32990 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
329a0 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 64 75  f determining du
329b0 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66 6f 72  plicate rows for
329c0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
329d0 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54 20  compound.SELECT 
329e0 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c 4c 20  operators, NULL 
329f0 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
32a00 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f 20 6f  dered equal to o
32a10 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ther NULL values
32a20 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20 66 72   and.distinct fr
32a30 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  om all non-NULL 
32a40 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63 6f 6c  values. ^The col
32a50 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
32a60 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
32a70 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73  .two text values
32a80 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61   is determined a
32a90 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  s if the columns
32aa0 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64   of the left and
32ab0 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45 4c 45   right-hand.SELE
32ac0 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 65  CT statements we
32ad0 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  re the left and 
32ae0 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61  right-hand opera
32af0 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75 61 6c  nds of the equal
32b00 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72 2c 20  s (=).operator, 
32b10 65 78 63 65 70 74 20 74 68 61 74 20 67 72 65 61  except that grea
32b20 74 65 72 20 70 72 65 63 65 64 65 6e 63 65 20 69  ter precedence i
32b30 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 74  s not assigned t
32b40 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 73  o a collation .s
32b50 65 71 75 65 6e 63 65 20 73 70 65 63 69 66 69 65  equence specifie
32b60 64 20 77 69 74 68 20 74 68 65 20 70 6f 73 74 66  d with the postf
32b70 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  ix COLLATE opera
32b80 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e 69 74  tor. ^No affinit
32b90 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  y.transformation
32ba0 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 74 6f  s are applied to
32bb0 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68 65 6e   any values when
32bc0 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77 73 20   comparing rows 
32bd0 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63 6f 6d  as part of a.com
32be0 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 0a 0a  pound SELECT. ..
32bf0 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65 65 20  <p>^(When three 
32c00 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53  or more simple S
32c10 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e 6e 65  ELECTs are conne
32c20 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d 70  cted into a comp
32c30 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74 68 65  ound SELECT,.the
32c40 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65 66  y group from lef
32c50 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e 20 6f  t to right. In o
32c60 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 22  ther words, if "
32c70 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43 22 20  A", "B" and "C" 
32c80 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65 20 53  are all.simple S
32c90 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
32ca0 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43 29 20  , (A op B op C) 
32cb0 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73 20  is processed as 
32cc0 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43 29 2e  ((A op B) op C).
32cd0 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  )^..</p>..<tcl>h
32ce0 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64 65 72  d_fragment order
32cf0 62 79 20 7b 6f 72 64 65 72 20 62 79 7d 20 7b 4f  by {order by} {O
32d00 52 44 45 52 20 42 59 7d 3c 2f 74 63 6c 3e 0a 3c  RDER BY}</tcl>.<
32d10 68 33 3e 54 68 65 20 4f 52 44 45 52 20 42 59 20  h3>The ORDER BY 
32d20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e  clause</h3>..<p>
32d30 49 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  If a SELECT stat
32d40 65 6d 65 6e 74 20 74 68 61 74 20 72 65 74 75 72  ement that retur
32d50 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  ns more than one
32d60 20 72 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61   row does not ha
32d70 76 65 20 61 6e 0a 4f 52 44 45 52 20 42 59 20 63  ve an.ORDER BY c
32d80 6c 61 75 73 65 2c 20 74 68 65 20 6f 72 64 65 72  lause, the order
32d90 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 72 6f   in which the ro
32da0 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20  ws are returned 
32db0 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 4f 72  is undefined..Or
32dc0 2c 20 69 66 20 61 20 53 45 4c 45 43 54 20 73 74  , if a SELECT st
32dd0 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 68 61 76  atement does hav
32de0 65 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c  e an ORDER BY cl
32df0 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 6c  ause, then the l
32e00 69 73 74 20 6f 66 0a 65 78 70 72 65 73 73 69 6f  ist of.expressio
32e10 6e 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  ns attached to t
32e20 68 65 20 4f 52 44 45 52 20 42 59 20 64 65 74 65  he ORDER BY dete
32e30 72 6d 69 6e 65 20 74 68 65 20 6f 72 64 65 72 20  rmine the order 
32e40 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a 61 72  in which rows.ar
32e50 65 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  e returned to th
32e60 65 20 75 73 65 72 2e 0a 0a 3c 70 3e 0a 5e 49 6e  e user...<p>.^In
32e70 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
32e80 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20  ECT] statement, 
32e90 6f 6e 6c 79 20 74 68 65 20 6c 61 73 74 20 6f 72  only the last or
32ea0 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d   right-most [sim
32eb0 70 6c 65 20 53 45 4c 45 43 54 5d 0a 6d 61 79 20  ple SELECT].may 
32ec0 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42 59  have an ORDER BY
32ed0 20 63 6c 61 75 73 65 2e 20 5e 54 68 61 74 20 4f   clause. ^That O
32ee0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 77  RDER BY clause w
32ef0 69 6c 6c 20 61 70 70 6c 79 20 61 63 72 6f 73 73  ill apply across
32f00 20 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 20 6f 66   all elements of
32f10 0a 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 20 5e  .the compound. ^
32f20 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73  If the right-mos
32f30 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 5b  t element of a [
32f40 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d  compound SELECT]
32f50 20 69 73 20 61 20 5b 56 41 4c 55 45 53 5d 20 63   is a [VALUES] c
32f60 6c 61 75 73 65 2c 0a 74 68 65 6e 20 6e 6f 20 4f  lause,.then no O
32f70 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
32f80 73 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 74 68 61  s allowed on tha
32f90 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 0a 3c  t statement....<
32fa0 70 3e 5e 52 6f 77 73 20 61 72 65 20 66 69 72 73  p>^Rows are firs
32fb0 74 20 73 6f 72 74 65 64 20 62 61 73 65 64 20 6f  t sorted based o
32fc0 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  n the results of
32fd0 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20  .evaluating the 
32fe0 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73  left-most expres
32ff0 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52 44 45  sion in the ORDE
33000 52 20 42 59 20 6c 69 73 74 2c 20 74 68 65 6e 20  R BY list, then 
33010 74 69 65 73 20 61 72 65 20 62 72 6f 6b 65 6e 0a  ties are broken.
33020 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by evaluating th
33030 65 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d 6d 6f  e second left-mo
33040 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  st expression an
33050 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f 72 64  d so on. The ord
33060 65 72 20 69 6e 20 77 68 69 63 68 0a 74 77 6f 20  er in which.two 
33070 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 61  rows for which a
33080 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  ll ORDER BY expr
33090 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65  essions evaluate
330a0 20 74 6f 20 65 71 75 61 6c 20 76 61 6c 75 65 73   to equal values
330b0 20 61 72 65 0a 72 65 74 75 72 6e 65 64 20 69 73   are.returned is
330c0 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45 61 63   undefined. ^Eac
330d0 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  h ORDER BY expre
330e0 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70 74  ssion may be opt
330f0 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64  ionally followed
33100 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b  .by one of the k
33110 65 79 77 6f 72 64 73 20 41 53 43 20 28 73 6d 61  eywords ASC (sma
33120 6c 6c 65 72 20 76 61 6c 75 65 73 20 61 72 65 20  ller values are 
33130 72 65 74 75 72 6e 65 64 20 66 69 72 73 74 29 20  returned first) 
33140 6f 72 20 44 45 53 43 20 28 6c 61 72 67 65 72 0a  or DESC (larger.
33150 76 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72  values are retur
33160 6e 65 64 20 66 69 72 73 74 29 2e 20 5e 49 66 20  ned first). ^If 
33170 6e 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44  neither ASC or D
33180 45 53 43 20 61 72 65 20 73 70 65 63 69 66 69 65  ESC are specifie
33190 64 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f 72 74  d, rows.are sort
331a0 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  ed in ascending 
331b0 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20  (smaller values 
331c0 66 69 72 73 74 29 20 6f 72 64 65 72 20 62 79 20  first) order by 
331d0 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45 61 63  default...<p>Eac
331e0 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  h ORDER BY expre
331f0 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73 73  ssion is process
33200 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  ed as follows:</
33210 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ol>.<li><p>
33220 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59  ^If the ORDER BY
33230 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
33240 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67 65   constant intege
33250 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 65 78 70  r K then the.exp
33260 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69  ression is consi
33270 64 65 72 65 64 20 61 6e 20 61 6c 69 61 73 20 66  dered an alias f
33280 6f 72 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c 75  or the K-th colu
33290 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
332a0 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20 61 72   set.(columns ar
332b0 65 20 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20  e numbered from 
332c0 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 73 74  left to right st
332d0 61 72 74 69 6e 67 20 77 69 74 68 20 31 29 2e 0a  arting with 1)..
332e0 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20  .<li><p>^If the 
332f0 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
33300 69 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74 69  ion is an identi
33310 66 69 65 72 20 74 68 61 74 20 63 6f 72 72 65 73  fier that corres
33320 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61 6c 69  ponds to.the ali
33330 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68 65  as of one of the
33340 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 2c   output columns,
33350 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73   then the expres
33360 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72  sion is consider
33370 65 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  ed.an alias for 
33380 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c  that column...<l
33390 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c  i><p>^Otherwise,
333a0 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   if the ORDER BY
333b0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
333c0 6e 79 20 6f 74 68 65 72 20 65 78 70 72 65 73 73  ny other express
333d0 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76 61 6c  ion, it .is eval
333e0 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 72 65  uated and the re
333f0 74 75 72 6e 65 64 20 76 61 6c 75 65 20 75 73 65  turned value use
33400 64 20 74 6f 20 6f 72 64 65 72 20 74 68 65 20 6f  d to order the o
33410 75 74 70 75 74 20 72 6f 77 73 2e 20 5e 49 66 0a  utput rows. ^If.
33420 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
33430 6d 65 6e 74 20 69 73 20 61 20 73 69 6d 70 6c 65  ment is a simple
33440 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 61 6e   SELECT, then an
33450 20 4f 52 44 45 52 20 42 59 20 6d 61 79 20 63 6f   ORDER BY may co
33460 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62 69 74 72  ntain any.arbitr
33470 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73 2e  ary expressions.
33480 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68   ^However, if th
33490 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 63 6f  e SELECT is a co
334a0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 74  mpound SELECT, t
334b0 68 65 6e 0a 4f 52 44 45 52 20 42 59 20 65 78 70  hen.ORDER BY exp
334c0 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72  ressions that ar
334d0 65 20 6e 6f 74 20 61 6c 69 61 73 65 73 20 74 6f  e not aliases to
334e0 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 20   output columns 
334f0 6d 75 73 74 20 62 65 20 65 78 61 63 74 6c 79 0a  must be exactly.
33500 74 68 65 20 73 61 6d 65 20 61 73 20 61 6e 20 65  the same as an e
33510 78 70 72 65 73 73 69 6f 6e 20 75 73 65 64 20 61  xpression used a
33520 73 20 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c 75  s an output colu
33530 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46  mn..</ol>..<p>^F
33540 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
33550 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f 77 73 2c  of sorting rows,
33560 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70   values are comp
33570 61 72 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  ared in the same
33580 20 77 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f 6d   way.as for [com
33590 70 61 72 69 73 6f 6e 20 65 78 70 72 65 73 73 69  parison expressi
335a0 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61 74  ons]. The collat
335b0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65  ion sequence use
335c0 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77 6f  d to compare.two
335d0 20 74 65 78 74 20 76 61 6c 75 65 73 20 69 73 20   text values is 
335e0 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20 66 6f  determined as fo
335f0 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c  llows:..<ol>.  <
33600 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52  li><p>^If the OR
33610 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
33620 6e 20 69 73 20 61 73 73 69 67 6e 65 64 20 61 20  n is assigned a 
33630 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
33640 63 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20 70  ce using.  the p
33650 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45 20  ostfix [COLLATE 
33660 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20  operator], then 
33670 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  the specified co
33680 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
33690 20 69 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c 6c   is.  used..  <l
336a0 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c  i><p>^Otherwise,
336b0 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   if the ORDER BY
336c0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
336d0 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e 20 65 78  n alias to an ex
336e0 70 72 65 73 73 69 6f 6e 0a 20 20 74 68 61 74 20  pression.  that 
336f0 68 61 73 20 62 65 65 6e 20 61 73 73 69 67 6e 65  has been assigne
33700 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  d a collation se
33710 71 75 65 6e 63 65 20 75 73 69 6e 67 20 74 68 65  quence using the
33720 20 70 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f 4c   postfix .  [COL
33730 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20  LATE operator], 
33740 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69  then the collati
33750 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 73 73 69  on sequence assi
33760 67 6e 65 64 20 74 6f 20 74 68 65 20 61 6c 69 61  gned to the alia
33770 73 65 64 0a 20 20 65 78 70 72 65 73 73 69 6f 6e  sed.  expression
33780 20 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e   is used..  <li>
33790 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  <p>^Otherwise, i
337a0 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65  f the ORDER BY e
337b0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 63  xpression is a c
337c0 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69 61  olumn or an alia
337d0 73 20 6f 66 0a 20 20 61 6e 20 65 78 70 72 65 73  s of.  an expres
337e0 73 69 6f 6e 20 74 68 61 74 20 69 73 20 61 20 63  sion that is a c
337f0 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65 20  olumn, then the 
33800 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
33810 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 0a 20  n sequence for. 
33820 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 75   the column is u
33830 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  sed. .  <li><p>^
33840 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 5b  Otherwise, the [
33850 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69 6f  BINARY] collatio
33860 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73  n sequence is us
33870 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e  ed..</ol>..<p>In
33880 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
33890 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20  ECT] statement, 
338a0 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70  all ORDER BY exp
338b0 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68 61 6e  ressions are han
338c0 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65 73 20  dled.as aliases 
338d0 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 72  for one of the r
338e0 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66  esult columns of
338f0 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 0a 5e   the compound..^
33900 28 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59 20  (If an ORDER BY 
33910 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e 6f  expression is no
33920 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6c 69  t an integer ali
33930 61 73 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20  as, then SQLite 
33940 73 65 61 72 63 68 65 73 0a 74 68 65 20 6c 65 66  searches.the lef
33950 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 69 6e  t-most SELECT in
33960 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 66 6f   the compound fo
33970 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  r a result colum
33980 6e 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 65  n that matches e
33990 69 74 68 65 72 0a 74 68 65 20 73 65 63 6f 6e 64  ither.the second
339a0 20 6f 72 20 74 68 69 72 64 20 72 75 6c 65 73 20   or third rules 
339b0 61 62 6f 76 65 2e 20 49 66 20 61 20 6d 61 74 63  above. If a matc
339c0 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
339d0 73 65 61 72 63 68 20 73 74 6f 70 73 20 61 6e 64  search stops and
339e0 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20  .the expression 
339f0 69 73 20 68 61 6e 64 6c 65 64 20 61 73 20 61 6e  is handled as an
33a00 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72   alias for the r
33a10 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61  esult column tha
33a20 74 20 69 74 20 68 61 73 20 62 65 65 6e 0a 6d 61  t it has been.ma
33a30 74 63 68 65 64 20 61 67 61 69 6e 73 74 2e 20 4f  tched against. O
33a40 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e 65  therwise, the ne
33a50 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65  xt SELECT to the
33a60 20 72 69 67 68 74 20 69 73 20 74 72 69 65 64 2c   right is tried,
33a70 20 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e 49   and so on.)^.^I
33a80 66 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20 65 78  f no matching ex
33a90 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20  pression can be 
33aa0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 72 65 73  found in the res
33ab0 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  ult columns of a
33ac0 6e 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74 20 53  ny.constituent S
33ad0 45 4c 45 43 54 2c 20 69 74 20 69 73 20 61 6e 20  ELECT, it is an 
33ae0 65 72 72 6f 72 2e 20 5e 45 61 63 68 20 74 65 72  error. ^Each ter
33af0 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42  m of the ORDER B
33b00 59 20 63 6c 61 75 73 65 20 69 73 0a 70 72 6f 63  Y clause is.proc
33b10 65 73 73 65 64 20 73 65 70 61 72 61 74 65 6c 79  essed separately
33b20 20 61 6e 64 20 6d 61 79 20 62 65 20 6d 61 74 63   and may be matc
33b30 68 65 64 20 61 67 61 69 6e 73 74 20 72 65 73 75  hed against resu
33b40 6c 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20  lt columns from 
33b50 64 69 66 66 65 72 65 6e 74 0a 53 45 4c 45 43 54  different.SELECT
33b60 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
33b70 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e  he compound.</p>
33b80 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
33b90 6e 74 20 6c 69 6d 69 74 6f 66 66 73 65 74 20 7b  nt limitoffset {
33ba0 4c 49 4d 49 54 7d 20 7b 4f 46 46 53 45 54 7d 3c  LIMIT} {OFFSET}<
33bb0 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49  /tcl>.<h3>The LI
33bc0 4d 49 54 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a  MIT clause</h3>.
33bd0 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 63  .<p>^The LIMIT c
33be0 6c 61 75 73 65 20 69 73 20 75 73 65 64 20 74 6f  lause is used to
33bf0 20 70 6c 61 63 65 20 61 6e 20 75 70 70 65 72 20   place an upper 
33c00 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d  bound on the num
33c10 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75  ber of rows.retu
33c20 72 6e 65 64 20 62 79 20 74 68 65 20 65 6e 74 69  rned by the enti
33c30 72 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  re SELECT statem
33c40 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 5b  ent...<p>^In a [
33c50 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d  compound SELECT]
33c60 2c 20 6f 6e 6c 79 20 74 68 65 0a 6c 61 73 74 20  , only the.last 
33c70 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73  or right-most [s
33c80 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 6d 61  imple SELECT] ma
33c90 79 20 63 6f 6e 74 61 69 6e 20 61 20 4c 49 4d 49  y contain a LIMI
33ca0 54 20 63 6c 61 75 73 65 2e 20 20 0a 5e 49 6e 20  T clause.  .^In 
33cb0 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  a [compound SELE
33cc0 43 54 5d 2c 20 0a 74 68 65 20 4c 49 4d 49 54 20  CT], .the LIMIT 
33cd0 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20 74  clause applies t
33ce0 6f 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d  o the entire com
33cf0 70 6f 75 6e 64 2c 20 6e 6f 74 20 6a 75 73 74 20  pound, not just 
33d00 74 68 65 20 66 69 6e 61 6c 20 53 45 4c 45 43 54  the final SELECT
33d10 2e 0a 5e 49 66 20 74 68 65 20 72 69 67 68 74 2d  ..^If the right-
33d20 6d 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c  most [simple SEL
33d30 45 43 54 5d 20 69 73 20 61 20 5b 56 41 4c 55 45  ECT] is a [VALUE
33d40 53 20 63 6c 61 75 73 65 5d 20 74 68 65 6e 20 6e  S clause] then n
33d50 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a 69  o LIMIT clause.i
33d60 73 20 61 6c 6c 6f 77 65 64 2e 0a 0a 3c 70 3e 5e  s allowed...<p>^
33d70 41 6e 79 20 73 63 61 6c 61 72 20 65 78 70 72 65  Any scalar expre
33d80 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 75 73 65  ssion may be use
33d90 64 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49 54 20  d in the .LIMIT 
33da0 63 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e 67 20  clause, so long 
33db0 61 73 20 69 74 20 65 76 61 6c 75 61 74 65 73 20  as it evaluates 
33dc0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  to an integer or
33dd0 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 63 61   a value that ca
33de0 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20  n be.losslessly 
33df0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
33e00 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 74 68 65  integer. ^If the
33e10 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c   expression eval
33e20 75 61 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c 20  uates to a NULL 
33e30 0a 76 61 6c 75 65 20 6f 72 20 61 6e 79 20 6f 74  .value or any ot
33e40 68 65 72 20 76 61 6c 75 65 20 74 68 61 74 20 63  her value that c
33e50 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73  annot be lossles
33e60 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly converted to
33e70 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 6e 0a   an integer, an.
33e80 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
33e90 64 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d 49 54  d. ^If the LIMIT
33ea0 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c   expression eval
33eb0 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74  uates to a negat
33ec0 69 76 65 20 76 61 6c 75 65 2c 0a 74 68 65 6e 20  ive value,.then 
33ed0 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70 70 65  there is no uppe
33ee0 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e  r bound on the n
33ef0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65  umber of rows re
33f00 74 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72 77 69  turned. ^Otherwi
33f10 73 65 2c 20 74 68 65 0a 53 45 4c 45 43 54 20 72  se, the.SELECT r
33f20 65 74 75 72 6e 73 20 74 68 65 20 66 69 72 73 74  eturns the first
33f30 20 4e 20 72 6f 77 73 20 6f 66 20 69 74 73 20 72   N rows of its r
33f40 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79 2c 20  esult set only, 
33f50 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 76  where N is the v
33f60 61 6c 75 65 0a 74 68 61 74 20 74 68 65 20 4c 49  alue.that the LI
33f70 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65  MIT expression e
33f80 76 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e 4f 72  valuates to. ^Or
33f90 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 20  , if the SELECT 
33fa0 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 0a  statement would.
33fb0 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e  return less than
33fc0 20 4e 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20   N rows without 
33fd0 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
33fe0 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20  then the entire 
33ff0 72 65 73 75 6c 74 20 73 65 74 20 69 73 0a 72 65  result set is.re
34000 74 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54 68  turned. ..<p>^Th
34010 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 74 74  e expression att
34020 61 63 68 65 64 20 74 6f 20 74 68 65 20 6f 70 74  ached to the opt
34030 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63 6c 61  ional OFFSET cla
34040 75 73 65 20 74 68 61 74 20 6d 61 79 20 66 6f 6c  use that may fol
34050 6c 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c 61 75  low a.LIMIT clau
34060 73 65 20 6d 75 73 74 20 61 6c 73 6f 20 65 76 61  se must also eva
34070 6c 75 61 74 65 20 74 6f 20 61 6e 20 69 6e 74 65  luate to an inte
34080 67 65 72 2c 20 6f 72 20 61 20 76 61 6c 75 65 20  ger, or a value 
34090 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73  that can be.loss
340a0 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64  lessly converted
340b0 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   to an integer. 
340c0 5e 49 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f  ^If an expressio
340d0 6e 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20  n has an OFFSET 
340e0 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74 68 65  clause,.then the
340f0 20 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72   first M rows ar
34100 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  e omitted from t
34110 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 72 65  he result set re
34120 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45  turned by the SE
34130 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20 61  LECT.statement a
34140 6e 64 20 74 68 65 20 6e 65 78 74 20 4e 20 72 6f  nd the next N ro
34150 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 2c  ws are returned,
34160 20 77 68 65 72 65 20 4d 20 61 6e 64 20 4e 20 61   where M and N a
34170 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 68  re the values th
34180 61 74 0a 74 68 65 20 4f 46 46 53 45 54 20 61 6e  at.the OFFSET an
34190 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20  d LIMIT clauses 
341a0 65 76 61 6c 75 61 74 65 20 74 6f 2c 20 72 65 73  evaluate to, res
341b0 70 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72 2c 20  pectively. ^Or, 
341c0 69 66 20 74 68 65 20 53 45 4c 45 43 54 0a 77 6f  if the SELECT.wo
341d0 75 6c 64 20 72 65 74 75 72 6e 20 6c 65 73 73 20  uld return less 
341e0 74 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20 69 66  than M+N rows if
341f0 20 69 74 20 64 69 64 20 6e 6f 74 20 68 61 76 65   it did not have
34200 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
34210 20 74 68 65 6e 20 74 68 65 0a 66 69 72 73 74 20   then the.first 
34220 4d 20 72 6f 77 73 20 61 72 65 20 73 6b 69 70 70  M rows are skipp
34230 65 64 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69  ed and the remai
34240 6e 69 6e 67 20 72 6f 77 73 20 28 69 66 20 61 6e  ning rows (if an
34250 79 29 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e  y) are returned.
34260 20 5e 49 66 20 74 68 65 0a 4f 46 46 53 45 54 20   ^If the.OFFSET 
34270 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65 73  clause evaluates
34280 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76   to a negative v
34290 61 6c 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74  alue, the result
342a0 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 61  s are the same a
342b0 73 20 69 66 20 69 74 0a 68 61 64 20 65 76 61 6c  s if it.had eval
342c0 75 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a 0a  uated to zero...
342d0 3c 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66 20 61  <p>^Instead of a
342e0 20 73 65 70 61 72 61 74 65 20 4f 46 46 53 45 54   separate OFFSET
342f0 20 63 6c 61 75 73 65 2c 20 74 68 65 20 4c 49 4d   clause, the LIM
34300 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20 73 70  IT clause may sp
34310 65 63 69 66 79 20 74 77 6f 0a 73 63 61 6c 61 72  ecify two.scalar
34320 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 65 70   expressions sep
34330 61 72 61 74 65 64 20 62 79 20 61 20 63 6f 6d 6d  arated by a comm
34340 61 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65  a. ^In this case
34350 2c 20 74 68 65 20 66 69 72 73 74 20 65 78 70 72  , the first expr
34360 65 73 73 69 6f 6e 0a 69 73 20 75 73 65 64 20 61  ession.is used a
34370 73 20 74 68 65 20 4f 46 46 53 45 54 20 65 78 70  s the OFFSET exp
34380 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  ression and the 
34390 73 65 63 6f 6e 64 20 61 73 20 74 68 65 20 4c 49  second as the LI
343a0 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  MIT expression..
343b0 54 68 69 73 20 69 73 20 63 6f 75 6e 74 65 72 2d  This is counter-
343c0 69 6e 74 75 69 74 69 76 65 2c 20 61 73 20 77 68  intuitive, as wh
343d0 65 6e 20 75 73 69 6e 67 20 74 68 65 20 4f 46 46  en using the OFF
343e0 53 45 54 20 63 6c 61 75 73 65 20 74 68 65 20 73  SET clause the s
343f0 65 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74 77 6f  econd of.the two
34400 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20   expressions is 
34410 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20 74  the OFFSET and t
34420 68 65 20 66 69 72 73 74 20 74 68 65 20 4c 49 4d  he first the LIM
34430 49 54 2e 20 0a 54 68 69 73 20 72 65 76 65 72 73  IT. .This revers
34440 61 6c 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74  al of the offset
34450 20 61 6e 64 20 6c 69 6d 69 74 20 69 73 20 69 6e   and limit is in
34460 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74 20 6d  tentional.- it m
34470 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69  aximizes compati
34480 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65  bility with othe
34490 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 73  r SQL database s
344a0 79 73 74 65 6d 73 2e 0a 48 6f 77 65 76 65 72 2c  ystems..However,
344b0 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   to avoid confus
344c0 69 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73  ion, programmers
344d0 20 61 72 65 20 73 74 72 6f 6e 67 6c 79 20 65 6e   are strongly en
344e0 63 6f 75 72 61 67 65 64 20 74 6f 20 75 73 65 0a  couraged to use.
344f0 74 68 65 20 66 6f 72 6d 20 6f 66 20 74 68 65 20  the form of the 
34500 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74 68 61  LIMIT clause tha
34510 74 20 75 73 65 73 20 74 68 65 20 22 4f 46 46 53  t uses the "OFFS
34520 45 54 22 20 6b 65 79 77 6f 72 64 20 61 6e 64 20  ET" keyword and 
34530 61 76 6f 69 64 0a 75 73 69 6e 67 20 61 20 4c 49  avoid.using a LI
34540 4d 49 54 20 63 6c 61 75 73 65 20 77 69 74 68 20  MIT clause with 
34550 61 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65  a comma-separate
34560 64 20 6f 66 66 73 65 74 2e 0a 0a 3c 74 63 6c 3e  d offset...<tcl>
34570 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 6c 75  hd_fragment valu
34580 65 73 20 7b 56 41 4c 55 45 53 20 63 6c 61 75 73  es {VALUES claus
34590 65 7d 20 56 41 4c 55 45 53 3c 2f 74 63 6c 3e 0a  e} VALUES</tcl>.
345a0 3c 68 33 3e 54 68 65 20 56 41 4c 55 45 53 20 63  <h3>The VALUES c
345b0 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  lause</h3>..<p>^
345c0 28 54 68 65 20 70 68 72 61 73 65 20 22 56 41 4c  (The phrase "VAL
345d0 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74  UES(<i>expr-list
345e0 3c 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74 68 65  </i>)" means the
345f0 20 73 61 6d 65 20 74 68 69 6e 67 0a 61 73 20 22   same thing.as "
34600 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c  SELECT <i>expr-l
34610 69 73 74 3c 2f 69 3e 22 2e 29 5e 20 20 5e 28 54  ist</i>".)^  ^(T
34620 68 65 20 70 68 72 61 73 65 0a 22 56 41 4c 55 45  he phrase."VALUE
34630 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 31  S(<i>expr-list-1
34640 3c 2f 69 3e 29 2c 2e 2e 2e 2c 28 3c 69 3e 65 78  </i>),...,(<i>ex
34650 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 29 22 20  pr-list-N</i>)" 
34660 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 0a 74  means the same.t
34670 68 69 6e 67 20 61 73 20 22 53 45 4c 45 43 54 20  hing as "SELECT 
34680 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 31 3c 2f  <i>expr-list-1</
34690 69 3e 20 55 4e 49 4f 4e 20 41 4c 4c 20 2e 2e 2e  i> UNION ALL ...
346a0 20 55 4e 49 4f 4e 20 41 4c 4c 0a 53 45 4c 45 43   UNION ALL.SELEC
346b0 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 4e  T <i>expr-list-N
346c0 3c 2f 69 3e 22 2e 29 5e 20 20 42 6f 74 68 20 66  </i>".)^  Both f
346d0 6f 72 6d 73 20 61 72 65 20 74 68 65 20 73 61 6d  orms are the sam
346e0 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 0a 74  e, except that.t
346f0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 53 45 4c  he number of SEL
34700 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69  ECT statements i
34710 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 69 73 20  n a compound is 
34720 6c 69 6d 69 74 65 64 20 62 79 0a 5b 53 51 4c 49  limited by.[SQLI
34730 54 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e  TE_LIMIT_COMPOUN
34740 44 5f 53 45 4c 45 43 54 5d 20 77 68 65 72 65 61  D_SELECT] wherea
34750 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
34760 72 6f 77 73 20 69 6e 20 61 0a 56 41 4c 55 45 53  rows in a.VALUES
34770 20 63 6c 61 75 73 65 20 68 61 73 20 6e 6f 20 61   clause has no a
34780 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 2e 0a  rbitrary limit..
34790 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 73 6f  .<p>There are so
347a0 6d 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  me restrictions 
347b0 6f 6e 20 74 68 65 20 75 73 65 20 6f 66 20 61 20  on the use of a 
347c0 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 74 68  VALUES clause th
347d0 61 74 20 61 72 65 0a 6e 6f 74 20 73 68 6f 77 6e  at are.not shown
347e0 20 6f 6e 20 74 68 65 20 73 79 6e 74 61 78 20 64   on the syntax d
347f0 69 61 67 72 61 6d 73 3a 0a 0a 3c 75 6c 3e 0a 3c  iagrams:..<ul>.<
34800 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55 45 53  li><p>.^A VALUES
34810 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62   clause cannot b
34820 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4f  e followed by [O
34830 52 44 45 52 20 42 59 5d 2e 0a 0a 3c 6c 69 3e 3c  RDER BY]...<li><
34840 70 3e 0a 5e 41 20 56 41 4c 55 45 53 20 63 6c 61  p>.^A VALUES cla
34850 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f  use cannot be fo
34860 6c 6c 6f 77 65 64 20 62 79 20 5b 4c 49 4d 49 54  llowed by [LIMIT
34870 5d 2e 0a 3c 2f 75 6c 3e 0a 0a 0a 3c 68 33 3e 54  ]..</ul>...<h3>T
34880 68 65 20 57 49 54 48 20 43 6c 61 75 73 65 3c 2f  he WITH Clause</
34890 68 33 3e 0a 0a 3c 70 3e 5e 53 45 4c 45 43 54 20  h3>..<p>^SELECT 
348a0 73 74 61 74 65 6d 65 6e 74 73 20 6d 61 79 20 62  statements may b
348b0 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 70 72 65  e optionally pre
348c0 63 65 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c  ceded by a singl
348d0 65 0a 5b 57 49 54 48 20 63 6c 61 75 73 65 5d 20  e.[WITH clause] 
348e0 74 68 61 74 20 64 65 66 69 6e 65 73 20 6f 6e 65  that defines one
348f0 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6d 6d 6f 6e   or more [common
34900 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
34910 6e 73 5d 0a 66 6f 72 20 75 73 65 20 77 69 74 68  ns].for use with
34920 69 6e 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  in the SELECT st
34930 61 74 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68  atement...<tcl>h
34940 64 5f 66 72 61 67 6d 65 6e 74 20 74 61 62 66 75  d_fragment tabfu
34950 6e 63 31 20 7b 74 61 62 6c 65 2d 76 61 6c 75 65  nc1 {table-value
34960 64 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 74  d functions in t
34970 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 7d 3c  he FROM clause}<
34980 2f 74 63 6c 3e 0a 3c 68 33 3e 54 61 62 6c 65 2d  /tcl>.<h3>Table-
34990 76 61 6c 75 65 64 20 46 75 6e 63 74 69 6f 6e 73  valued Functions
349a0 20 49 6e 20 54 68 65 20 46 52 4f 4d 20 43 6c 61   In The FROM Cla
349b0 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 5b  use</h3>..<p>A [
349c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20 74  virtual table] t
349d0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 5b 68 69  hat contains [hi
349e0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 5d 20 63 61  dden columns] ca
349f0 6e 20 62 65 20 75 73 65 64 20 6c 69 6b 65 0a 61  n be used like.a
34a00 20 5b 74 61 62 6c 65 2d 76 61 6c 75 65 64 20 66   [table-valued f
34a10 75 6e 63 74 69 6f 6e 5d 20 69 6e 20 74 68 65 20  unction] in the 
34a20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 20 20 54 68  FROM clause.  Th
34a30 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  e arguments to t
34a40 68 65 0a 74 61 62 6c 65 2d 76 61 6c 75 65 64 20  he.table-valued 
34a50 66 75 6e 63 74 69 6f 6e 20 62 65 63 6f 6d 65 20  function become 
34a60 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20 74  constraints on t
34a70 68 65 20 48 49 44 44 45 4e 20 63 6f 6c 75 6d 6e  he HIDDEN column
34a80 73 20 6f 66 0a 74 68 65 20 76 69 72 74 75 61 6c  s of.the virtual
34a90 20 74 61 62 6c 65 2e 20 20 41 64 64 69 74 69 6f   table.  Additio
34aa0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  nal information 
34ab0 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e 20  can be found in 
34ac0 74 68 65 0a 5b 74 61 62 6c 65 2d 76 61 6c 75 65  the.[table-value
34ad0 64 20 66 75 6e 63 74 69 6f 6e 73 7c 76 69 72 74  d functions|virt
34ae0 75 61 6c 20 74 61 62 6c 65 20 64 6f 63 75 6d 65  ual table docume
34af0 6e 74 61 74 69 6f 6e 5d 2e 0a 0a 3c 74 63 6c 3e  ntation]...<tcl>
34b00 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
34b10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34b20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34b30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
34b50 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20 75  Section UPDATE u
34b60 70 64 61 74 65 20 7b 55 50 44 41 54 45 20 2a 55  pdate {UPDATE *U
34b70 50 44 41 54 45 73 7d 0a 0a 52 65 63 75 72 73 69  PDATEs}..Recursi
34b80 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
34b90 75 70 64 61 74 65 2d 73 74 6d 74 0a 3c 2f 74 63  update-stmt.</tc
34ba0 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55 50 44 41 54  l>..<p>^An UPDAT
34bb0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  E statement is u
34bc0 73 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 61 20  sed to modify a 
34bd0 73 75 62 73 65 74 20 6f 66 20 74 68 65 20 76 61  subset of the va
34be0 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e 20 0a  lues stored in .
34bf0 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77  zero or more row
34c00 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
34c10 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69  e table identifi
34c20 65 64 20 62 79 20 74 68 65 20 0a 5b 71 75 61 6c  ed by the .[qual
34c30 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
34c40 5d 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  ] specified as p
34c50 61 72 74 20 6f 66 20 74 68 65 20 55 50 44 41 54  art of the UPDAT
34c60 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70  E statement...<p
34c70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45 20  >^If the UPDATE 
34c80 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e  statement does n
34c90 6f 74 20 68 61 76 65 20 61 20 57 48 45 52 45 20  ot have a WHERE 
34ca0 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77 73  clause, all rows
34cb0 20 69 6e 20 74 68 65 0a 74 61 62 6c 65 20 61 72   in the.table ar
34cc0 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20 74 68  e modified by th
34cd0 65 20 55 50 44 41 54 45 2e 20 5e 4f 74 68 65 72  e UPDATE. ^Other
34ce0 77 69 73 65 2c 20 74 68 65 20 55 50 44 41 54 45  wise, the UPDATE
34cf0 20 61 66 66 65 63 74 73 20 6f 6e 6c 79 20 74 68   affects only th
34d00 6f 73 65 0a 72 6f 77 73 20 66 6f 72 20 77 68 69  ose.rows for whi
34d10 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  ch the WHERE cla
34d20 75 73 65 0a 5b 62 6f 6f 6c 65 61 6e 20 65 78 70  use.[boolean exp
34d30 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c 65 61 6e 20  ression|boolean 
34d40 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 72  expression is tr
34d50 75 65 5d 2e 20 5e 49 74 20 69 73 20 6e 6f 74 20  ue]. ^It is not 
34d60 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 0a  an error if the.
34d70 57 48 45 52 45 20 63 6c 61 75 73 65 20 64 6f 65  WHERE clause doe
34d80 73 20 6e 6f 74 20 65 76 61 6c 75 61 74 65 20 74  s not evaluate t
34d90 6f 20 74 72 75 65 20 66 6f 72 20 61 6e 79 20 72  o true for any r
34da0 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ow in the table 
34db0 2d 20 74 68 69 73 20 6a 75 73 74 0a 6d 65 61 6e  - this just.mean
34dc0 73 20 74 68 61 74 20 74 68 65 20 55 50 44 41 54  s that the UPDAT
34dd0 45 20 73 74 61 74 65 6d 65 6e 74 20 61 66 66 65  E statement affe
34de0 63 74 73 20 7a 65 72 6f 20 72 6f 77 73 2e 0a 0a  cts zero rows...
34df0 3c 70 3e 54 68 65 20 6d 6f 64 69 66 69 63 61 74  <p>The modificat
34e00 69 6f 6e 73 20 6d 61 64 65 20 74 6f 20 65 61 63  ions made to eac
34e10 68 20 72 6f 77 20 61 66 66 65 63 74 65 64 20 62  h row affected b
34e20 79 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  y an UPDATE stat
34e30 65 6d 65 6e 74 20 61 72 65 0a 64 65 74 65 72 6d  ement are.determ
34e40 69 6e 65 64 20 62 79 20 74 68 65 20 6c 69 73 74  ined by the list
34e50 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74 73 20   of assignments 
34e60 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 53 45  following the SE
34e70 54 20 6b 65 79 77 6f 72 64 2e 20 45 61 63 68 0a  T keyword. Each.
34e80 61 73 73 69 67 6e 6d 65 6e 74 20 73 70 65 63 69  assignment speci
34e90 66 69 65 73 20 61 20 3c 79 79 74 65 72 6d 3e 63  fies a <yyterm>c
34ea0 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65  olumn-name</yyte
34eb0 72 6d 3e 20 74 6f 20 74 68 65 20 6c 65 66 74 20  rm> to the left 
34ec0 6f 66 20 74 68 65 20 0a 65 71 75 61 6c 73 20 73  of the .equals s
34ed0 69 67 6e 20 61 6e 64 20 61 20 73 63 61 6c 61 72  ign and a scalar
34ee0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 74   expression to t
34ef0 68 65 20 72 69 67 68 74 2e 20 0a 5e 46 6f 72 20  he right. .^For 
34f00 65 61 63 68 20 61 66 66 65 63 74 65 64 20 72 6f  each affected ro
34f10 77 2c 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c  w, the named col
34f20 75 6d 6e 73 0a 61 72 65 20 73 65 74 20 74 6f 20  umns.are set to 
34f30 74 68 65 20 76 61 6c 75 65 73 20 66 6f 75 6e 64  the values found
34f40 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74   by evaluating t
34f50 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
34f60 20 73 63 61 6c 61 72 20 0a 65 78 70 72 65 73 73   scalar .express
34f70 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73 69 6e 67  ions. ^If a sing
34f80 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 61  le column-name a
34f90 70 70 65 61 72 73 20 6d 6f 72 65 20 74 68 61 6e  ppears more than
34fa0 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 6c 69 73   once in the lis
34fb0 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65 6e 74 20  t of.assignment 
34fc0 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 61 6c 6c  expressions, all
34fd0 20 62 75 74 20 74 68 65 20 72 69 67 68 74 6d 6f   but the rightmo
34fe0 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 69 73  st occurrence is
34ff0 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c 75 6d   ignored. ^Colum
35000 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f 74 20 61  ns.that do not a
35010 70 70 65 61 72 20 69 6e 20 74 68 65 20 6c 69 73  ppear in the lis
35020 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74 73  t of assignments
35030 20 61 72 65 20 6c 65 66 74 20 75 6e 6d 6f 64 69   are left unmodi
35040 66 69 65 64 2e 20 5e 54 68 65 20 73 63 61 6c 61  fied. ^The scala
35050 72 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 61  r.expressions ma
35060 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d  y refer to colum
35070 6e 73 20 6f 66 20 74 68 65 20 72 6f 77 20 62 65  ns of the row be
35080 69 6e 67 20 75 70 64 61 74 65 64 2e 20 5e 49 6e  ing updated. ^In
35090 20 74 68 69 73 20 63 61 73 65 20 61 6c 6c 0a 73   this case all.s
350a0 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e  calar expression
350b0 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20  s are evaluated 
350c0 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69 67  before any assig
350d0 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65 2e  nments are made.
350e0 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69 6e 67 20 69  ..<p>Beginning i
350f0 6e 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f  n SQLite [versio
35100 6e 20 33 2e 31 35 2e 30 5d 20 28 5b 64 61 74 65  n 3.15.0] ([date
35110 6f 66 3a 33 2e 31 35 2e 30 5d 29 2c 20 61 6e 20  of:3.15.0]), an 
35120 61 73 73 69 67 6e 6d 65 6e 74 20 69 6e 0a 74 68  assignment in.th
35130 65 20 53 45 54 20 63 6c 61 75 73 65 20 63 61 6e  e SET clause can
35140 20 62 65 20 61 20 0a 5b 63 6f 6c 75 6d 6e 2d 6e   be a .[column-n
35150 61 6d 65 2d 6c 69 73 74 7c 70 61 72 65 6e 74 68  ame-list|parenth
35160 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 63  esized list of c
35170 6f 6c 75 6d 6e 20 6e 61 6d 65 73 5d 20 6f 6e 20  olumn names] on 
35180 74 68 65 20 6c 65 66 74 20 61 6e 64 20 61 0a 5b  the left and a.[
35190 72 6f 77 20 76 61 6c 75 65 5d 20 6f 66 20 74 68  row value] of th
351a0 65 20 73 61 6d 65 20 73 69 7a 65 20 6f 6e 20 74  e same size on t
351b0 68 65 20 72 69 67 68 74 2e 0a 0a 0a 3c 70 3e 5e  he right....<p>^
351c0 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 4f 52  The optional "OR
351d0 20 3c 69 3e 61 63 74 69 6f 6e 3c 2f 69 3e 22 20   <i>action</i>" 
351e0 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 20  conflict clause 
351f0 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68 65  that follows the
35200 0a 55 50 44 41 54 45 20 6b 65 79 77 6f 72 64 20  .UPDATE keyword 
35210 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20  allows the user 
35220 74 6f 20 6e 6f 6d 69 6e 61 74 65 20 61 20 73 70  to nominate a sp
35230 65 63 69 66 69 63 0a 63 6f 6e 73 74 72 61 69 6e  ecific.constrain
35240 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
35250 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
35260 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74 68  to use during th
35270 69 73 20 6f 6e 65 20 55 50 44 41 54 45 20 63 6f  is one UPDATE co
35280 6d 6d 61 6e 64 2e 0a 52 65 66 65 72 20 74 6f 20  mmand..Refer to 
35290 74 68 65 20 73 65 63 74 69 6f 6e 20 65 6e 74 69  the section enti
352a0 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  tled [ON CONFLIC
352b0 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  T] for additiona
352c0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a  l information...
352d0 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73  <h3>Restrictions
352e0 20 6f 6e 20 55 50 44 41 54 45 20 53 74 61 74 65   on UPDATE State
352f0 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45  ments Within CRE
35300 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e  ATE TRIGGER</h3>
35310 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69  ..<p>The followi
35320 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 73 79  ng additional sy
35330 6e 74 61 78 20 72 65 73 74 72 69 63 74 69 6f 6e  ntax restriction
35340 73 20 61 70 70 6c 79 20 74 6f 20 55 50 44 41 54  s apply to UPDAT
35350 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  E statements tha
35360 74 0a 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74  t.occur within t
35370 68 65 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52  he body of a [CR
35380 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
35390 61 74 65 6d 65 6e 74 2e 20 20 0a 0a 3c 75 6c 3e  atement.  ..<ul>
353a0 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c  .  <li><p>^The <
353b0 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d  yyterm>table-nam
353c0 65 3c 2f 79 79 74 65 72 6d 3e 20 73 70 65 63 69  e</yyterm> speci
353d0 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
353e0 61 6e 20 55 50 44 41 54 45 20 0a 20 20 20 20 20  an UPDATE .     
353f0 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 69   statement withi
35400 6e 0a 20 20 20 20 20 20 61 20 74 72 69 67 67 65  n.      a trigge
35410 72 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75  r body must be u
35420 6e 71 75 61 6c 69 66 69 65 64 2e 20 5e 28 49 6e  nqualified. ^(In
35430 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
35440 65 0a 20 20 20 20 20 20 3c 69 3e 73 63 68 65 6d  e.      <i>schem
35450 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f  a-name</i><b>.</
35460 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65  b> prefix on the
35470 20 74 61 62 6c 65 20 6e 61 6d 65 20 6f 66 20 74   table name of t
35480 68 65 20 55 50 44 41 54 45 20 69 73 0a 20 20 20  he UPDATE is.   
35490 20 20 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77     not allowed w
354a0 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29  ithin triggers.)
354b0 5e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20 74 61  ^ ^Unless the ta
354c0 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65  ble to which the
354d0 20 74 72 69 67 67 65 72 0a 20 20 20 20 20 20 69   trigger.      i
354e0 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e  s attached is in
354f0 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
35500 73 65 2c 20 74 68 65 20 74 61 62 6c 65 20 62 65  se, the table be
35510 69 6e 67 20 75 70 64 61 74 65 64 20 62 79 20 74  ing updated by t
35520 68 65 0a 20 20 20 20 20 20 74 72 69 67 67 65 72  he.      trigger
35530 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 72 65   program must re
35540 73 69 64 65 20 69 6e 20 74 68 65 20 73 61 6d 65  side in the same
35550 20 64 61 74 61 62 61 73 65 20 61 73 20 69 74 2e   database as it.
35560 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 0a 20   ^If the table. 
35570 20 20 20 20 20 74 6f 20 77 68 69 63 68 20 74 68       to which th
35580 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74  e trigger is att
35590 61 63 68 65 64 20 69 73 20 69 6e 20 74 68 65 20  ached is in the 
355a0 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74  TEMP database, t
355b0 68 65 6e 20 74 68 65 0a 20 20 20 20 20 20 75 6e  hen the.      un
355c0 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f  qualified name o
355d0 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
355e0 67 20 75 70 64 61 74 65 64 20 69 73 20 72 65 73  g updated is res
355f0 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61 6d  olved in the sam
35600 65 20 77 61 79 0a 20 20 20 20 20 20 61 73 20 69  e way.      as i
35610 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c  t is for a top-l
35620 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20 28  evel statement (
35630 62 79 20 73 65 61 72 63 68 69 6e 67 20 66 69 72  by searching fir
35640 73 74 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  st the TEMP data
35650 62 61 73 65 2c 0a 20 20 20 20 20 20 74 68 65 6e  base,.      then
35660 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
35670 73 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74 68  se, then any oth
35680 65 72 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  er databases in 
35690 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 77  the order they w
356a0 65 72 65 0a 20 20 20 20 20 20 61 74 74 61 63 68  ere.      attach
356b0 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  ed)...  <li><p>^
356c0 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 61  The INDEXED BY a
356d0 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63  nd NOT INDEXED c
356e0 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61  lauses are not a
356f0 6c 6c 6f 77 65 64 20 6f 6e 20 55 50 44 41 54 45  llowed on UPDATE
35700 0a 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74  .      statement
35710 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
35720 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70  s.</p>..  <li><p
35730 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64 20  >^The LIMIT and 
35740 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73  ORDER BY clauses
35750 20 66 6f 72 20 55 50 44 41 54 45 20 61 72 65 20   for UPDATE are 
35760 75 6e 73 75 70 70 6f 72 74 65 64 20 77 69 74 68  unsupported with
35770 69 6e 0a 20 20 20 20 20 20 74 72 69 67 67 65 72  in.      trigger
35780 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  s, regardless of
35790 20 74 68 65 20 63 6f 6d 70 69 6c 61 74 69 6f 6e   the compilation
357a0 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 74 6f   options used to
357b0 20 62 75 69 6c 64 20 53 51 4c 69 74 65 2e 0a 3c   build SQLite..<
357c0 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e  /ul>..<h3>Option
357d0 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44  al LIMIT and ORD
357e0 45 52 20 42 59 20 43 6c 61 75 73 65 73 3c 2f 68  ER BY Clauses</h
357f0 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69  3>..<p>^(If SQLi
35800 74 65 20 69 73 20 62 75 69 6c 74 20 77 69 74 68  te is built with
35810 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41   the [SQLITE_ENA
35820 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
35830 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65  E_LIMIT].compile
35840 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68 65  -time option the
35850 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20  n the syntax of 
35860 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
35870 6d 65 6e 74 20 69 73 20 65 78 74 65 6e 64 65 64  ment is extended
35880 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c 20 4f  .with optional O
35890 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49  RDER BY and LIMI
358a0 54 20 63 6c 61 75 73 65 73 29 5e 20 61 73 20 66  T clauses)^ as f
358b0 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63  ollows:</p>..<tc
358c0 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  l>BubbleDiagram 
358d0 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d 69  update-stmt-limi
358e0 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49  ted</tcl>..<p>^I
358f0 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  f an UPDATE stat
35900 65 6d 65 6e 74 20 68 61 73 20 61 20 4c 49 4d 49  ement has a LIMI
35910 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6d 61  T clause, the ma
35920 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
35930 72 6f 77 73 20 74 68 61 74 0a 77 69 6c 6c 20 62  rows that.will b
35940 65 20 75 70 64 61 74 65 64 20 69 73 20 66 6f 75  e updated is fou
35950 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67  nd by evaluating
35960 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e   the accompanyin
35970 67 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  g expression and
35980 20 63 61 73 74 69 6e 67 0a 69 74 20 74 6f 20 61   casting.it to a
35990 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  n integer value.
359a0 20 5e 41 20 6e 65 67 61 74 69 76 65 20 76 61 6c   ^A negative val
359b0 75 65 20 69 73 20 69 6e 74 65 72 70 72 65 74 65  ue is interprete
359c0 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22 2e  d as "no limit".
359d0 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 4c 49 4d  ..<p>^If the LIM
359e0 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  IT expression ev
359f0 61 6c 75 61 74 65 73 20 74 6f 20 6e 6f 6e 2d 6e  aluates to non-n
35a00 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 3c 69  egative value <i
35a10 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74 68 65 0a 55  >N</i> and the.U
35a20 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
35a30 68 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20  has an ORDER BY 
35a40 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c  clause, then all
35a50 20 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64   rows that would
35a60 20 62 65 20 75 70 64 61 74 65 64 20 69 6e 0a 74   be updated in.t
35a70 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
35a80 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
35a90 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64  re sorted accord
35aa0 69 6e 67 20 74 6f 20 74 68 65 20 4f 52 44 45 52  ing to the ORDER
35ab0 20 42 59 20 61 6e 64 20 74 68 65 0a 66 69 72 73   BY and the.firs
35ac0 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75 70 64 61 74  t <i>N</i> updat
35ad0 65 64 2e 20 5e 28 49 66 20 74 68 65 20 55 50 44  ed. ^(If the UPD
35ae0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6c  ATE statement al
35af0 73 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54  so has an OFFSET
35b00 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 69 74   clause,.then it
35b10 20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65 76   is similarly ev
35b20 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73 74  aluated and cast
35b30 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76   to an integer v
35b40 61 6c 75 65 2e 20 49 66 20 74 68 65 20 4f 46 46  alue. If the OFF
35b50 53 45 54 0a 65 78 70 72 65 73 73 69 6f 6e 20 65  SET.expression e
35b60 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 6f  valuates to a no
35b70 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  n-negative value
35b80 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74 68 65 6e 20   <i>M</i>, then 
35b90 74 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f  the first <i>M</
35ba0 69 3e 0a 72 6f 77 73 20 61 72 65 20 73 6b 69 70  i>.rows are skip
35bb0 70 65 64 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c  ped and the foll
35bc0 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f 69 3e 20 72  owing <i>N</i> r
35bd0 6f 77 73 20 75 70 64 61 74 65 64 20 69 6e 73 74  ows updated inst
35be0 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74  ead.)^..<p>^If t
35bf0 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
35c00 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52 44 45 52  ent has no ORDER
35c10 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
35c20 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 0a 77   all rows that.w
35c30 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65 64 20  ould be updated 
35c40 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20 6f  in the absence o
35c50 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  f the LIMIT clau
35c60 73 65 20 61 72 65 20 61 73 73 65 6d 62 6c 65 64  se are assembled
35c70 20 69 6e 20 61 6e 0a 61 72 62 69 74 72 61 72 79   in an.arbitrary
35c80 20 6f 72 64 65 72 20 62 65 66 6f 72 65 20 61 70   order before ap
35c90 70 6c 79 69 6e 67 20 74 68 65 20 4c 49 4d 49 54  plying the LIMIT
35ca0 20 61 6e 64 20 4f 46 46 53 45 54 20 63 6c 61 75   and OFFSET clau
35cb0 73 65 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ses to determine
35cc0 20 0a 77 68 69 63 68 20 61 72 65 20 61 63 74 75   .which are actu
35cd0 61 6c 6c 79 20 75 70 64 61 74 65 64 2e 0a 0a 3c  ally updated...<
35ce0 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59  p>^(The ORDER BY
35cf0 20 63 6c 61 75 73 65 20 6f 6e 20 61 6e 20 55 50   clause on an UP
35d00 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
35d10 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64  s used only to d
35d20 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72  etermine which.r
35d30 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20  ows fall within 
35d40 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f  the LIMIT. The o
35d50 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
35d60 77 73 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20  ws are modified 
35d70 69 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64  is arbitrary.and
35d80 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63   is not influenc
35d90 65 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20  ed by the ORDER 
35da0 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74  BY clause.)^..<t
35db0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
35dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35dd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35de0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35df0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35e00 23 23 0a 53 65 63 74 69 6f 6e 20 56 41 43 55 55  ##.Section VACUU
35e10 4d 20 76 61 63 75 75 6d 20 56 41 43 55 55 4d 0a  M vacuum VACUUM.
35e20 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
35e30 44 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d 73  Diagram vacuum-s
35e40 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  tmt.</tcl>..<p>.
35e50 20 20 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d    The VACUUM com
35e60 6d 61 6e 64 20 72 65 62 75 69 6c 64 73 20 74 68  mand rebuilds th
35e70 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c  e database file,
35e80 20 72 65 70 61 63 6b 69 6e 67 20 69 74 20 69 6e   repacking it in
35e90 74 6f 20 61 20 6d 69 6e 69 6d 61 6c 0a 20 20 61  to a minimal.  a
35ea0 6d 6f 75 6e 74 20 6f 66 20 64 69 73 6b 20 73 70  mount of disk sp
35eb0 61 63 65 2e 20 54 68 65 72 65 20 61 72 65 20 73  ace. There are s
35ec0 65 76 65 72 61 6c 20 0a 20 20 72 65 61 73 6f 6e  everal .  reason
35ed0 73 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e  s an application
35ee0 20 6d 69 67 68 74 20 64 6f 20 74 68 69 73 3a 0a   might do this:.
35ef0 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  .<ul>.  <li> <p>
35f00 20 5e 55 6e 6c 65 73 73 20 53 51 4c 69 74 65 20   ^Unless SQLite 
35f10 69 73 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22 61  is running in "a
35f20 75 74 6f 5f 76 61 63 75 75 6d 3d 46 55 4c 4c 22  uto_vacuum=FULL"
35f30 20 6d 6f 64 65 2c 20 77 68 65 6e 20 61 20 6c 61   mode, when a la
35f40 72 67 65 0a 20 20 20 20 20 61 6d 6f 75 6e 74 20  rge.     amount 
35f50 6f 66 20 64 61 74 61 20 69 73 20 64 65 6c 65 74  of data is delet
35f60 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
35f70 62 61 73 65 20 66 69 6c 65 20 69 74 20 6c 65 61  base file it lea
35f80 76 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74 79  ves behind empty
35f90 0a 20 20 20 20 20 73 70 61 63 65 2c 20 6f 72 20  .     space, or 
35fa0 22 66 72 65 65 22 20 64 61 74 61 62 61 73 65 20  "free" database 
35fb0 70 61 67 65 73 2e 20 54 68 69 73 20 6d 65 61 6e  pages. This mean
35fc0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
35fd0 69 6c 65 20 6d 69 67 68 74 0a 20 20 20 20 20 62  ile might.     b
35fe0 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 73 74  e larger than st
35ff0 72 69 63 74 6c 79 20 6e 65 63 65 73 73 61 72 79  rictly necessary
36000 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55  . ^Running VACUU
36010 4d 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65  M to rebuild the
36020 20 0a 20 20 20 20 20 64 61 74 61 62 61 73 65 20   .     database 
36030 72 65 63 6c 61 69 6d 73 20 74 68 69 73 20 73 70  reclaims this sp
36040 61 63 65 20 61 6e 64 20 72 65 64 75 63 65 73 20  ace and reduces 
36050 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
36060 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 0a  database file...
36070 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 46 72 65 71    <li> <p> ^Freq
36080 75 65 6e 74 20 69 6e 73 65 72 74 73 2c 20 75 70  uent inserts, up
36090 64 61 74 65 73 2c 20 61 6e 64 20 64 65 6c 65 74  dates, and delet
360a0 65 73 20 63 61 6e 20 63 61 75 73 65 20 74 68 65  es can cause the
360b0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20   database file. 
360c0 20 20 20 20 74 6f 20 62 65 63 6f 6d 65 20 66 72      to become fr
360d0 61 67 6d 65 6e 74 65 64 20 2d 20 77 68 65 72 65  agmented - where
360e0 20 64 61 74 61 20 66 6f 72 20 61 20 73 69 6e 67   data for a sing
360f0 6c 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  le table or inde
36100 78 20 69 73 20 73 63 61 74 74 65 72 65 64 20 0a  x is scattered .
36110 20 20 20 20 20 61 72 6f 75 6e 64 20 74 68 65 20       around the 
36120 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e  database file. ^
36130 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 65  Running VACUUM e
36140 6e 73 75 72 65 73 20 74 68 61 74 20 65 61 63 68  nsures that each
36150 20 74 61 62 6c 65 20 61 6e 64 0a 20 20 20 20 20   table and.     
36160 69 6e 64 65 78 20 69 73 20 6c 61 72 67 65 6c 79  index is largely
36170 20 73 74 6f 72 65 64 20 63 6f 6e 74 69 67 75 6f   stored contiguo
36180 75 73 6c 79 20 77 69 74 68 69 6e 20 74 68 65 20  usly within the 
36190 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e  database file. ^
361a0 49 6e 20 73 6f 6d 65 0a 20 20 20 20 20 63 61 73  In some.     cas
361b0 65 73 2c 20 56 41 43 55 55 4d 20 6d 61 79 20 61  es, VACUUM may a
361c0 6c 73 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e  lso reduce the n
361d0 75 6d 62 65 72 20 6f 66 20 70 61 72 74 69 61 6c  umber of partial
361e0 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20  ly filled pages 
361f0 69 6e 0a 20 20 20 20 20 74 68 65 20 64 61 74 61  in.     the data
36200 62 61 73 65 2c 20 72 65 64 75 63 69 6e 67 20 74  base, reducing t
36210 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  he size of the d
36220 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 75 72  atabase file fur
36230 74 68 65 72 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  ther...  <li> <p
36240 3e 20 57 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69  > When content i
36250 73 20 64 65 6c 65 74 65 64 20 66 72 6f 6d 20 61  s deleted from a
36260 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  n SQLite databas
36270 65 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69  e, the content i
36280 73 20 6e 6f 74 0a 20 20 20 20 20 75 73 75 61 6c  s not.     usual
36290 6c 79 20 65 72 61 73 65 64 20 62 75 74 20 72 61  ly erased but ra
362a0 74 68 65 72 20 74 68 65 20 73 70 61 63 65 20 75  ther the space u
362b0 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  sed to hold the 
362c0 63 6f 6e 74 65 6e 74 20 69 73 20 6d 61 72 6b 65  content is marke
362d0 64 20 61 73 0a 20 20 20 20 20 62 65 69 6e 67 20  d as.     being 
362e0 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 72 65  available for re
362f0 75 73 65 2e 20 20 54 68 69 73 20 63 61 6e 20 61  use.  This can a
36300 6c 6c 6f 77 20 64 65 6c 65 74 65 64 20 63 6f 6e  llow deleted con
36310 74 65 6e 74 20 74 6f 20 62 65 20 72 65 63 6f 76  tent to be recov
36320 65 72 65 64 0a 20 20 20 20 20 62 79 20 61 20 68  ered.     by a h
36330 61 63 6b 65 72 20 6f 72 20 62 79 20 66 6f 72 65  acker or by fore
36340 6e 73 69 63 20 61 6e 61 6c 79 73 69 73 2e 20 20  nsic analysis.  
36350 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 77  Running VACUUM w
36360 69 6c 6c 20 63 6c 65 61 6e 20 74 68 65 20 64 61  ill clean the da
36370 74 61 62 61 73 65 0a 20 20 20 20 20 6f 66 20 61  tabase.     of a
36380 6c 6c 20 74 72 61 63 65 73 20 6f 66 20 64 65 6c  ll traces of del
36390 65 74 65 64 20 63 6f 6e 74 65 6e 74 2c 20 74 68  eted content, th
363a0 75 73 20 70 72 65 76 65 6e 74 69 6e 67 20 61 6e  us preventing an
363b0 20 61 64 76 65 72 73 61 72 79 20 66 72 6f 6d 20   adversary from 
363c0 72 65 63 6f 76 65 72 69 6e 67 0a 20 20 20 20 20  recovering.     
363d0 64 65 6c 65 74 65 64 20 63 6f 6e 74 65 6e 74 2e  deleted content.
363e0 20 20 55 73 69 6e 67 20 56 41 43 55 55 4d 20 69    Using VACUUM i
363f0 6e 20 74 68 69 73 20 77 61 79 20 69 73 20 61 6e  n this way is an
36400 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20   alternative to 
36410 73 65 74 74 69 6e 67 0a 20 20 20 20 20 5b 50 52  setting.     [PR
36420 41 47 4d 41 20 73 65 63 75 72 65 5f 64 65 6c 65  AGMA secure_dele
36430 74 65 3d 4f 4e 5d 2e 20 0a 0a 20 20 3c 6c 69 3e  te=ON]. ..  <li>
36440 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c 20   <p> ^Normally, 
36450 74 68 65 20 64 61 74 61 62 61 73 65 20 5b 70 61  the database [pa
36460 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68 65  ge_size] and whe
36470 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
36480 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 73 75  database.     su
36490 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61 63  pports [auto_vac
364a0 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f 6e  uum] must be con
364b0 66 69 67 75 72 65 64 20 62 65 66 6f 72 65 20 74  figured before t
364c0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
364d0 20 69 73 0a 20 20 20 20 20 61 63 74 75 61 6c 6c   is.     actuall
364e0 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f 77 65  y created. ^Howe
364f0 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69 6e  ver, when not in
36500 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f   [write-ahead lo
36510 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20 20  g] mode, the .  
36520 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61     [page_size] a
36530 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75  nd/or [auto_vacu
36540 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73 20 6f  um] properties o
36550 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61  f an existing da
36560 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a 20 20  tabase may be.  
36570 20 20 20 63 68 61 6e 67 65 64 20 62 79 20 75 73     changed by us
36580 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73 69  ing the [page_si
36590 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65 5f 73  ze pragma|page_s
365a0 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20 20  ize]  and/or .  
365b0 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 7c     [auto_vacuum|
365c0 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63 75  pragma auto_vacu
365d0 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e 64 20  um] pragmas and 
365e0 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  then immediately
365f0 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20 20 20   VACUUMing.     
36600 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 5e 57  the database. ^W
36610 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61 68  hen in [write-ah
36620 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 6f  ead log] mode, o
36630 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f 76 61  nly the [auto_va
36640 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70 70 6f  cuum].     suppo
36650 72 74 20 70 72 6f 70 65 72 74 79 20 63 61 6e 20  rt property can 
36660 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e 67  be changed using
36670 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a   VACUUM..</ul>..
36680 3c 70 3e 5e 42 79 20 64 65 66 61 75 6c 74 2c 20  <p>^By default, 
36690 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b  VACUUM only work
366a0 73 20 6f 6e 6c 79 20 6f 6e 20 74 68 65 20 6d 61  s only on the ma
366b0 69 6e 20 64 61 74 61 62 61 73 65 2e 0a 5e 5b 41  in database..^[A
366c0 54 54 41 43 48 7c 41 74 74 61 63 68 65 64 20 64  TTACH|Attached d
366d0 61 74 61 62 61 73 65 73 5d 20 63 61 6e 20 62 65  atabases] can be
366e0 20 76 61 63 75 75 6d 65 64 20 62 79 20 61 70 70   vacuumed by app
366f0 65 6e 64 69 6e 67 20 74 68 65 20 61 70 70 72 6f  ending the appro
36700 70 72 69 61 74 65 0a 3c 79 79 74 65 72 6d 3e 73  priate.<yyterm>s
36710 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65  chema-name</yyte
36720 72 6d 3e 20 74 6f 20 74 68 65 20 56 41 43 55 55  rm> to the VACUU
36730 4d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70  M statement...<p
36740 3e 3c 62 3e 43 6f 6d 70 61 74 69 62 69 6c 69 74  ><b>Compatibilit
36750 79 20 57 61 72 6e 69 6e 67 3a 3c 2f 62 3e 20 54  y Warning:</b> T
36760 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 76 61  he ability to va
36770 63 75 75 6d 20 61 74 74 61 63 68 65 64 20 64 61  cuum attached da
36780 74 61 62 61 73 65 73 20 77 61 73 0a 61 64 64 65  tabases was.adde
36790 64 20 69 6e 20 5b 76 65 72 73 69 6f 6e 20 33 2e  d in [version 3.
367a0 31 35 2e 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33  15.0] ([dateof:3
367b0 2e 31 35 2e 30 5d 29 2e 20 20 50 72 69 6f 72 20  .15.0]).  Prior 
367c0 74 6f 20 74 68 61 74 2c 20 61 20 0a 3c 79 79 74  to that, a .<yyt
367d0 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  erm>schema-name<
367e0 2f 79 79 74 65 72 6d 3e 20 61 64 64 65 64 20 74  /yyterm> added t
367f0 6f 20 74 68 65 0a 56 41 43 55 55 4d 20 73 74 61  o the.VACUUM sta
36800 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 62 65 20  tement would be 
36810 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64  silently ignored
36820 20 61 6e 64 20 74 68 65 20 22 6d 61 69 6e 22 20   and the "main" 
36830 73 63 68 65 6d 61 20 77 6f 75 6c 64 20 62 65 0a  schema would be.
36840 76 61 63 75 75 6d 65 64 2e 3c 2f 70 3e 0a 0a 3c  vacuumed.</p>..<
36850 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
36860 76 61 63 75 75 6d 69 6e 74 6f 20 7b 56 41 43 55  vacuuminto {VACU
36870 55 4d 20 49 4e 54 4f 7d 3c 2f 74 63 6c 3e 0a 3c  UM INTO}</tcl>.<
36880 68 33 3e 56 41 43 55 55 4d 20 77 69 74 68 20 61  h3>VACUUM with a
36890 6e 20 49 4e 54 4f 20 63 6c 61 75 73 65 3c 2f 68  n INTO clause</h
368a0 33 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 49  3>..<p>^If the I
368b0 4e 54 4f 20 63 6c 61 75 73 65 20 69 73 20 69 6e  NTO clause is in
368c0 63 6c 75 64 65 64 2c 20 74 68 65 6e 20 74 68 65  cluded, then the
368d0 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61   original databa
368e0 73 65 20 66 69 6c 65 20 69 73 0a 75 6e 63 68 61  se file is.uncha
368f0 6e 67 65 64 20 61 6e 64 20 61 20 6e 65 77 20 64  nged and a new d
36900 61 74 61 62 61 73 65 20 69 73 20 63 72 65 61 74  atabase is creat
36910 65 64 20 69 6e 20 74 68 65 20 66 69 6c 65 6e 61  ed in the filena
36920 6d 65 20 67 69 76 65 6e 20 62 79 20 74 68 65 0a  me given by the.
36930 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
36940 49 4e 54 4f 20 63 6c 61 75 73 65 2e 20 20 54 68  INTO clause.  Th
36950 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 77  e new database w
36960 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ill contain the 
36970 73 61 6d 65 0a 6c 6f 67 69 63 61 6c 20 63 6f 6e  same.logical con
36980 74 65 6e 74 20 61 73 20 74 68 65 20 6f 72 69 67  tent as the orig
36990 69 6e 61 6c 20 64 61 74 61 62 61 73 65 2c 20 66  inal database, f
369a0 75 6c 6c 79 20 76 61 63 75 75 6d 65 64 2e 0a 0a  ully vacuumed...
369b0 3c 70 3e 0a 54 68 65 20 56 41 43 55 55 4d 20 63  <p>.The VACUUM c
369c0 6f 6d 6d 61 6e 64 20 77 69 74 68 20 61 6e 20 49  ommand with an I
369d0 4e 54 4f 20 63 6c 61 75 73 65 20 69 73 20 61 6e  NTO clause is an
369e0 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20   alternative to 
369f0 74 68 65 0a 5b 62 61 63 6b 75 70 20 41 50 49 5d  the.[backup API]
36a00 20 66 6f 72 20 67 65 6e 65 72 61 74 69 6e 67 20   for generating 
36a10 62 61 63 6b 75 70 20 63 6f 70 69 65 73 20 6f 66  backup copies of
36a20 20 61 20 6c 69 76 65 20 64 61 74 61 62 61 73 65   a live database
36a30 2e 0a 54 68 65 20 61 64 76 61 6e 74 61 67 65 20  ..The advantage 
36a40 6f 66 20 75 73 69 6e 67 20 56 41 43 55 55 4d 20  of using VACUUM 
36a50 49 4e 54 4f 20 69 73 20 74 68 61 74 20 74 68 65  INTO is that the
36a60 20 72 65 73 75 6c 74 69 6e 67 20 62 61 63 6b 75   resulting backu
36a70 70 0a 64 61 74 61 62 61 73 65 20 69 73 20 6d 69  p.database is mi
36a80 6e 69 6d 61 6c 20 69 6e 20 73 69 7a 65 20 61 6e  nimal in size an
36a90 64 20 68 65 6e 63 65 20 74 68 65 20 61 6d 6f 75  d hence the amou
36aa0 6e 74 20 6f 66 20 66 69 6c 65 73 79 73 74 65 6d  nt of filesystem
36ab0 0a 49 2f 4f 20 6d 61 79 20 62 65 20 72 65 64 75  .I/O may be redu
36ac0 63 65 64 2e 20 20 41 6c 73 6f 2c 20 61 6c 6c 20  ced.  Also, all 
36ad0 64 65 6c 65 74 65 64 20 63 6f 6e 74 65 6e 74 20  deleted content 
36ae0 69 73 20 70 75 72 67 65 64 20 66 72 6f 6d 20 74  is purged from t
36af0 68 65 0a 62 61 63 6b 75 70 2c 20 6c 65 61 76 69  he.backup, leavi
36b00 6e 67 20 62 65 68 69 6e 64 20 6e 6f 20 66 6f 72  ng behind no for
36b10 65 6e 73 69 63 20 74 72 61 63 65 73 2e 20 20 4f  ensic traces.  O
36b20 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64  n the other hand
36b30 2c 0a 74 68 65 20 5b 62 61 63 6b 75 70 20 41 50  ,.the [backup AP
36b40 49 5d 20 75 73 65 73 20 66 65 77 65 72 20 43 50  I] uses fewer CP
36b50 55 20 63 79 63 6c 65 73 20 61 6e 64 20 63 61 6e  U cycles and can
36b60 20 62 65 20 65 78 65 63 75 74 65 64 0a 69 6e 63   be executed.inc
36b70 72 65 6d 65 6e 74 61 6c 6c 79 2e 0a 0a 3c 70 3e  rementally...<p>
36b80 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20 69  .^The filename i
36b90 6e 20 74 68 65 20 49 4e 54 4f 20 63 6c 61 75 73  n the INTO claus
36ba0 65 20 63 61 6e 20 62 65 20 61 6e 20 61 72 62 69  e can be an arbi
36bb0 74 72 61 72 79 20 53 51 4c 20 65 78 70 72 65 73  trary SQL expres
36bc0 73 69 6f 6e 0a 74 68 61 74 20 65 76 61 6c 75 61  sion.that evalua
36bd0 74 65 73 20 74 6f 20 61 20 73 74 72 69 6e 67 2e  tes to a string.
36be0 0a 5e 54 68 65 20 66 69 6c 65 20 6e 61 6d 65 64  .^The file named
36bf0 20 62 79 20 74 68 65 20 49 4e 54 4f 20 63 6c 61   by the INTO cla
36c00 75 73 65 20 6d 75 73 74 20 6e 6f 74 20 70 72 65  use must not pre
36c10 76 69 6f 75 73 6c 79 20 65 78 69 73 74 2c 20 6f  viously exist, o
36c20 72 0a 65 6c 73 65 20 69 74 20 6d 75 73 74 20 62  r.else it must b
36c30 65 20 61 6e 20 65 6d 70 74 79 20 66 69 6c 65 2c  e an empty file,
36c40 20 6f 72 20 74 68 65 20 56 41 43 55 55 4d 20 49   or the VACUUM I
36c50 4e 54 4f 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  NTO command will
36c60 0a 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72  .fail with an er
36c70 72 6f 72 2e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 61  ror...<p>.^The a
36c80 72 67 75 6d 65 6e 74 20 74 6f 20 49 4e 54 4f 20  rgument to INTO 
36c90 63 61 6e 20 62 65 20 61 20 5b 55 52 49 20 66 69  can be a [URI fi
36ca0 6c 65 6e 61 6d 65 5d 20 69 66 20 55 52 49 20 66  lename] if URI f
36cb0 69 6c 65 6e 61 6d 65 73 0a 61 72 65 20 65 6e 61  ilenames.are ena
36cc0 62 6c 65 64 2e 0a 55 52 4c 20 66 69 6c 65 6e 61  bled..URL filena
36cd0 6d 65 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20  mes are enabled 
36ce0 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  if any of the fo
36cf0 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65  llowing are true
36d00 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 54 68 65 20  :.<ul>.<li> The 
36d10 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 77  SQLite library w
36d20 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  as compiled with
36d30 20 5b 2d 44 53 51 4c 49 54 45 5f 55 53 45 5f 55   [-DSQLITE_USE_U
36d40 52 49 3d 31 5d 2e 0a 3c 6c 69 3e 20 54 68 65 20  RI=1]..<li> The 
36d50 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5d  [sqlite3_config]
36d60 28 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  ([SQLITE_CONFIG_
36d70 55 52 49 5d 2c 31 29 20 69 6e 74 65 72 66 61 63  URI],1) interfac
36d80 65 73 20 77 61 73 0a 20 20 20 20 20 69 6e 76 6f  es was.     invo
36d90 6b 65 64 20 61 74 20 73 74 61 72 74 2d 74 69 6d  ked at start-tim
36da0 65 2e 0a 3c 6c 69 3e 20 54 68 65 20 5b 64 61 74  e..<li> The [dat
36db0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
36dc0 5d 20 74 68 61 74 20 69 73 20 72 75 6e 6e 69 6e  ] that is runnin
36dd0 67 20 74 68 65 20 56 41 43 55 55 4d 20 49 4e 54  g the VACUUM INT
36de0 4f 0a 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74  O.     statement
36df0 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
36e00 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65  opened using the
36e10 0a 20 20 20 20 20 5b 53 51 4c 49 54 45 5f 4f 50  .     [SQLITE_OP
36e20 45 4e 5f 55 52 49 5d 20 66 6c 61 67 2e 0a 3c 2f  EN_URI] flag..</
36e30 75 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20 56 41 43  ul>..<p>.The VAC
36e40 55 55 4d 20 49 4e 54 4f 20 63 6f 6d 6d 61 6e 64  UUM INTO command
36e50 20 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 61   is transactiona
36e60 6c 20 69 6e 20 74 68 65 20 73 65 6e 73 65 20 74  l in the sense t
36e70 68 61 74 0a 74 68 65 20 67 65 6e 65 72 61 74 65  hat.the generate
36e80 64 20 6f 75 74 70 75 74 20 64 61 74 61 62 61 73  d output databas
36e90 65 20 69 73 20 61 20 63 6f 6e 73 69 73 74 65 6e  e is a consisten
36ea0 74 20 73 6e 61 70 73 68 6f 74 20 6f 66 20 74 68  t snapshot of th
36eb0 65 0a 6f 72 69 67 69 6e 61 6c 20 64 61 74 61 62  e.original datab
36ec0 61 73 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ase.  However, i
36ed0 66 20 74 68 65 20 56 41 43 55 55 4d 20 49 4e 54  f the VACUUM INT
36ee0 4f 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 69 6e 74  O command is.int
36ef0 65 72 72 75 70 74 65 64 20 62 79 20 61 20 75 6e  errupted by a un
36f00 70 6c 61 6e 6e 65 64 20 73 68 75 74 64 6f 77 6e  planned shutdown
36f10 20 6f 72 20 70 6f 77 65 72 20 6c 6f 73 65 2c 20   or power lose, 
36f20 74 68 65 6e 0a 74 68 65 20 67 65 6e 65 72 61 74  then.the generat
36f30 65 64 20 6f 75 74 70 75 74 20 64 61 74 61 62 61  ed output databa
36f40 73 65 20 6d 69 67 68 74 20 62 65 20 69 6e 63 6f  se might be inco
36f50 6d 70 6c 65 74 65 20 61 6e 64 20 63 6f 72 72 75  mplete and corru
36f60 70 74 2e 0a 41 6c 73 6f 2c 20 53 51 4c 69 74 65  pt..Also, SQLite
36f70 20 64 6f 65 73 20 6e 6f 74 20 69 6e 76 6f 6b 65   does not invoke
36f80 20 66 73 79 6e 63 28 29 20 6f 72 20 46 6c 75 73   fsync() or Flus
36f90 68 46 69 6c 65 42 75 66 66 65 72 73 28 29 0a 6f  hFileBuffers().o
36fa0 6e 20 74 68 65 20 67 65 6e 65 72 61 74 65 64 20  n the generated 
36fb0 64 61 74 61 62 61 73 65 20 74 6f 20 65 6e 73 75  database to ensu
36fc0 72 65 20 74 68 61 74 20 69 74 20 68 61 73 20 72  re that it has r
36fd0 65 61 63 68 65 64 0a 6e 6f 6e 2d 76 6f 6c 61 74  eached.non-volat
36fe0 69 6c 65 20 73 74 6f 72 61 67 65 20 62 65 66 6f  ile storage befo
36ff0 72 65 20 63 6f 6d 70 6c 65 74 69 6e 67 2e 0a 0a  re completing...
37000 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
37010 74 20 68 6f 77 76 61 63 75 75 6d 77 6f 72 6b 73  t howvacuumworks
37020 20 7b 68 6f 77 20 76 61 63 75 75 6d 20 77 6f 72   {how vacuum wor
37030 6b 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 48 6f  ks}</tcl>.<h3>Ho
37040 77 20 56 41 43 55 55 4d 20 77 6f 72 6b 73 3c 2f  w VACUUM works</
37050 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43  h3>..<p>^The VAC
37060 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b  UUM command work
37070 73 20 62 79 20 63 6f 70 79 69 6e 67 20 74 68 65  s by copying the
37080 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
37090 20 64 61 74 61 62 61 73 65 20 69 6e 74 6f 0a 61   database into.a
370a0 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62   temporary datab
370b0 61 73 65 20 66 69 6c 65 20 61 6e 64 20 74 68 65  ase file and the
370c0 6e 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68  n overwriting th
370d0 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 74 68 20  e original with 
370e0 74 68 65 20 0a 63 6f 6e 74 65 6e 74 73 20 6f 66  the .contents of
370f0 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66   the temporary f
37100 69 6c 65 2e 20 5e 57 68 65 6e 20 6f 76 65 72 77  ile. ^When overw
37110 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69  riting the origi
37120 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62 61 63 6b 0a  nal, a rollback.
37130 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b 77 72 69 74  journal or [writ
37140 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 57 41 4c  e-ahead log] WAL
37150 20 66 69 6c 65 20 69 73 20 75 73 65 64 20 6a 75   file is used ju
37160 73 74 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  st as it would b
37170 65 20 66 6f 72 20 61 6e 79 0a 6f 74 68 65 72 20  e for any.other 
37180 64 61 74 61 62 61 73 65 20 74 72 61 6e 73 61 63  database transac
37190 74 69 6f 6e 2e 20 5e 54 68 69 73 20 6d 65 61 6e  tion. ^This mean
371a0 73 20 74 68 61 74 20 77 68 65 6e 20 56 41 43 55  s that when VACU
371b0 55 4d 69 6e 67 20 61 20 64 61 74 61 62 61 73 65  UMing a database
371c0 2c 20 0a 61 73 20 6d 75 63 68 20 61 73 20 74 77  , .as much as tw
371d0 69 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ice the size of 
371e0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
371f0 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 72 65  abase file is re
37200 71 75 69 72 65 64 20 69 6e 20 66 72 65 65 0a 64  quired in free.d
37210 69 73 6b 20 73 70 61 63 65 2e 0a 0a 3c 70 3e 5e  isk space...<p>^
37220 54 68 65 20 56 41 43 55 55 4d 20 49 4e 54 4f 20  The VACUUM INTO 
37230 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 74 68  command works th
37240 65 20 73 61 6d 65 20 77 61 79 20 65 78 63 65 70  e same way excep
37250 74 20 74 68 61 74 20 69 74 20 75 73 65 73 20 74  t that it uses t
37260 68 65 20 66 69 6c 65 0a 6e 61 6d 65 64 20 6f 6e  he file.named on
37270 20 74 68 65 20 49 4e 54 4f 20 63 6c 61 75 73 65   the INTO clause
37280 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 74 68 65   in place of the
37290 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62   temporary datab
372a0 61 73 65 20 61 6e 64 20 6f 6d 69 74 73 20 74 68  ase and omits th
372b0 65 0a 73 74 65 70 20 6f 66 20 63 6f 70 79 69 6e  e.step of copyin
372c0 67 20 74 68 65 20 76 61 63 75 75 6d 65 64 20 64  g the vacuumed d
372d0 61 74 61 62 61 73 65 20 62 61 63 6b 20 6f 76 65  atabase back ove
372e0 72 20 74 6f 70 20 6f 66 20 74 68 65 20 6f 72 69  r top of the ori
372f0 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65 2e 0a  ginal database..
37300 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20  .<p>^The VACUUM 
37310 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e  command may chan
37320 67 65 20 74 68 65 20 5b 52 4f 57 49 44 20 7c 20  ge the [ROWID | 
37330 52 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72 69  ROWIDs] of entri
37340 65 73 20 69 6e 20 61 6e 79 0a 74 61 62 6c 65 73  es in any.tables
37350 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 68 61 76   that do not hav
37360 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49  e an explicit [I
37370 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
37380 45 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  EY]..</p>..<p>^A
37390 20 56 41 43 55 55 4d 20 77 69 6c 6c 20 66 61 69   VACUUM will fai
373a0 6c 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  l if there is an
373b0 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
373c0 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  n on the databas
373d0 65 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61  e.connection tha
373e0 74 20 69 73 20 61 74 74 65 6d 70 74 69 6e 67 20  t is attempting 
373f0 74 6f 20 72 75 6e 20 74 68 65 20 56 41 43 55 55  to run the VACUU
37400 4d 2e 20 20 5e 55 6e 66 69 6e 61 6c 69 7a 65 64  M.  ^Unfinalized
37410 20 53 51 4c 0a 73 74 61 74 65 6d 65 6e 74 73 20   SQL.statements 
37420 74 79 70 69 63 61 6c 6c 79 20 68 6f 6c 64 20 61  typically hold a
37430 20 72 65 61 64 20 74 72 61 6e 73 61 63 74 69 6f   read transactio
37440 6e 20 6f 70 65 6e 2c 20 73 6f 20 74 68 65 20 56  n open, so the V
37450 41 43 55 55 4d 0a 6d 69 67 68 74 20 66 61 69 6c  ACUUM.might fail
37460 20 69 66 20 74 68 65 72 65 20 61 72 65 20 75 6e   if there are un
37470 66 69 6e 61 6c 69 7a 65 64 20 53 51 4c 20 73 74  finalized SQL st
37480 61 74 65 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20  atements on the 
37490 73 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  same connection.
374a0 0a 5e 56 41 43 55 55 4d 20 28 62 75 74 20 6e 6f  .^VACUUM (but no
374b0 74 20 56 41 43 55 55 4d 20 49 4e 54 4f 29 20 69  t VACUUM INTO) i
374c0 73 20 61 20 77 72 69 74 65 20 6f 70 65 72 61 74  s a write operat
374d0 69 6f 6e 20 61 6e 64 20 73 6f 20 69 66 20 61 6e  ion and so if an
374e0 6f 74 68 65 72 0a 64 61 74 61 62 61 73 65 20 63  other.database c
374f0 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 68 6f 6c  onnection is hol
37500 64 69 6e 67 20 61 20 6c 6f 63 6b 20 74 68 61 74  ding a lock that
37510 20 70 72 65 76 65 6e 74 73 20 77 72 69 74 65 73   prevents writes
37520 2c 20 74 68 65 6e 0a 74 68 65 20 56 41 43 55 55  , then.the VACUU
37530 4d 20 77 69 6c 6c 20 66 61 69 6c 2e 0a 0a 3c 70  M will fail...<p
37540 3e 5e 28 41 6e 20 61 6c 74 65 72 6e 61 74 69 76  >^(An alternativ
37550 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20 56  e to using the V
37560 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74 6f  ACUUM command to
37570 0a 72 65 63 6c 61 69 6d 20 73 70 61 63 65 20 61  .reclaim space a
37580 66 74 65 72 20 64 61 74 61 20 68 61 73 20 62 65  fter data has be
37590 65 6e 20 64 65 6c 65 74 65 64 20 69 73 20 61 75  en deleted is au
375a0 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20  to-vacuum mode, 
375b0 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 0a 74 68  enabled using.th
375c0 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  e [auto_vacuum] 
375d0 70 72 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e 20  pragma.)^ ^When 
375e0 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73  [auto_vacuum] is
375f0 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64   enabled for a d
37600 61 74 61 62 61 73 65 0a 66 72 65 65 20 70 61 67  atabase.free pag
37610 65 73 20 6d 61 79 20 62 65 20 72 65 63 6c 61 69  es may be reclai
37620 6d 65 64 20 61 66 74 65 72 20 64 65 6c 65 74 69  med after deleti
37630 6e 67 20 64 61 74 61 2c 20 63 61 75 73 69 6e 67  ng data, causing
37640 20 74 68 65 20 66 69 6c 65 20 74 6f 20 73 68 72   the file to shr
37650 69 6e 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65 62  ink,.without reb
37660 75 69 6c 64 69 6e 67 20 74 68 65 20 65 6e 74 69  uilding the enti
37670 72 65 20 64 61 74 61 62 61 73 65 20 75 73 69 6e  re database usin
37680 67 20 56 41 43 55 55 4d 2e 20 20 5e 48 6f 77 65  g VACUUM.  ^Howe
37690 76 65 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f  ver, using.[auto
376a0 5f 76 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61  _vacuum] can lea
376b0 64 20 74 6f 20 65 78 74 72 61 20 64 61 74 61 62  d to extra datab
376c0 61 73 65 20 66 69 6c 65 20 66 72 61 67 6d 65 6e  ase file fragmen
376d0 74 61 74 69 6f 6e 2e 20 20 5e 41 6e 64 20 5b 61  tation.  ^And [a
376e0 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73  uto_vacuum].does
376f0 20 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72   not compact par
37700 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61  tially filled pa
37710 67 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  ges of the datab
37720 61 73 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f  ase as VACUUM do
37730 65 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  es...</p>...<tcl
37740 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
37750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
37760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
37770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
37780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
37790 0a 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45  .Section {INDEXE
377a0 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20  D BY} indexedby 
377b0 7b 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e  {{INDEXED BY} {N
377c0 4f 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f  OT INDEXED}}..</
377d0 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44  tcl>.<p>^The IND
377e0 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 66  EXED BY phrase f
377f0 6f 72 63 65 73 20 74 68 65 20 5b 53 51 4c 69 74  orces the [SQLit
37800 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 5d  e query planner]
37810 20 74 6f 20 75 73 65 20 61 0a 70 61 72 74 69 63   to use a.partic
37820 75 6c 61 72 20 6e 61 6d 65 64 20 69 6e 64 65 78  ular named index
37830 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20   on a [DELETE], 
37840 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50  [SELECT], or [UP
37850 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  DATE] statement.
37860 0a 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  .The INDEXED BY 
37870 70 68 72 61 73 65 20 69 73 20 61 6e 20 53 51 4c  phrase is an SQL
37880 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 6e  ite extension an
37890 64 0a 69 73 20 6e 6f 74 20 70 6f 72 74 61 62 6c  d.is not portabl
378a0 65 20 74 6f 20 6f 74 68 65 72 20 53 51 4c 20 64  e to other SQL d
378b0 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e  atabase engines.
378c0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75  </p>..<tcl>.Recu
378d0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
378e0 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62  am qualified-tab
378f0 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a  le-name.</tcl>..
37900 3c 70 3e 5e 54 68 65 20 22 49 4e 44 45 58 45 44  <p>^The "INDEXED
37910 20 42 59 20 3c 79 79 74 65 72 6d 3e 69 6e 64 65   BY <yyterm>inde
37920 78 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 22  x-name</yyterm>"
37930 20 70 68 72 61 73 65 20 73 70 65 63 69 66 69 65   phrase specifie
37940 73 20 0a 74 68 61 74 20 74 68 65 20 6e 61 6d 65  s .that the name
37950 64 20 69 6e 64 65 78 0a 6d 75 73 74 20 62 65 20  d index.must be 
37960 75 73 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  used in order to
37970 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75 65 73 20   look up values 
37980 6f 6e 20 74 68 65 20 70 72 65 63 65 64 69 6e 67  on the preceding
37990 20 74 61 62 6c 65 2e 0a 5e 49 66 20 3c 79 79 74   table..^If <yyt
379a0 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f  erm>index-name</
379b0 79 79 74 65 72 6d 3e 20 64 6f 65 73 20 6e 6f 74  yyterm> does not
379c0 20 65 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f 74   exist or cannot
379d0 20 62 65 20 75 73 65 64 20 0a 66 6f 72 20 74 68   be used .for th
379e0 65 20 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68  e query, then th
379f0 65 20 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66  e preparation of
37a00 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
37a10 6e 74 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20  nt fails..^(The 
37a20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c  "NOT INDEXED" cl
37a30 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74  ause specifies t
37a40 68 61 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61  hat no index sha
37a50 6c 6c 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a  ll be used when.
37a60 61 63 63 65 73 73 69 6e 67 20 74 68 65 20 70 72  accessing the pr
37a70 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69  eceding table, i
37a80 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64  ncluding implied
37a90 20